[
  {
    "path": ".coveralls.yml",
    "content": "coverage_clover: clover.xml\njson_path: coveralls-upload.json\n"
  },
  {
    "path": ".gitattributes",
    "content": "/.coveralls.yml export-ignore\n/.gitattributes export-ignore\n/.gitignore export-ignore\n/.travis.yml export-ignore\n/composer.lock export-ignore\n/docs/ export-ignore\n/mkdocs.yml export-ignore\n/phpcs.xml export-ignore\n/phpunit.xml.dist export-ignore\n/test/ export-ignore\n"
  },
  {
    "path": ".gitignore",
    "content": "/clover.xml\n/coveralls-upload.json\n/docs/html/\n/phpunit.xml\n/vendor/\n/zf-mkdoc-theme.tgz\n/zf-mkdoc-theme/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: php\n\nbranches:\n  except:\n    - /^release-.*$/\n    - /^ghgfk-.*$/\n\ncache:\n  directories:\n    - $HOME/.composer/\n\nenv:\n  global:\n    - COMPOSER_ARGS=\"--no-interaction\"\n    - COVERAGE_DEPS=\"php-coveralls/php-coveralls\"\n    - LEGACY_DEPS=\"phpunit/phpunit\"\n    - TESTS_ZEND_VALIDATOR_ONLINE_ENABLED=true\n\nmatrix:\n  include:\n    - php: 7.1\n      env:\n        - DEPS=lowest\n    - php: 7.1\n      env:\n        - DEPS=locked\n        - EXECUTE_HOSTNAME_CHECK=true\n        - TEST_COVERAGE=true\n    - php: 7.1\n      env:\n        - DEPS=latest\n    - php: 7.2\n      env:\n        - DEPS=lowest\n    - php: 7.2\n      env:\n        - DEPS=locked\n    - php: 7.2\n      env:\n        - DEPS=latest\n    - php: 7.3\n      env:\n        - DEPS=lowest\n    - php: 7.3\n      env:\n        - DEPS=locked\n    - php: 7.3\n      env:\n        - DEPS=latest\n    - php: 7.4\n      env:\n        - DEPS=lowest\n    - php: 7.4\n      env:\n        - DEPS=locked\n    - php: 7.4\n      env:\n        - DEPS=latest\n\nbefore_install:\n  - if [[ $TEST_COVERAGE != 'true' ]]; then phpenv config-rm xdebug.ini || return 0 ; fi\n  - travis_retry composer self-update\n\ninstall:\n  - travis_retry composer install $COMPOSER_ARGS --ignore-platform-reqs\n  - if [[ $TRAVIS_PHP_VERSION =~ ^5.6 ]]; then travis_retry composer update $COMPOSER_ARGS --with-dependencies $LEGACY_DEPS ; fi\n  - if [[ $DEPS == 'latest' ]]; then travis_retry composer update $COMPOSER_ARGS ; fi\n  - if [[ $DEPS == 'lowest' ]]; then travis_retry composer update --prefer-lowest --prefer-stable $COMPOSER_ARGS ; fi\n  - if [[ $TEST_COVERAGE == 'true' ]]; then travis_retry composer require --dev $COMPOSER_ARGS $COVERAGE_DEPS ; fi\n  - stty cols 120\n  - COLUMNS=120 composer show\n\nscript:\n  - if [[ $TEST_COVERAGE == 'true' ]]; then composer test-coverage ; else composer test ; fi\n  - if [[ $CS_CHECK == 'true' ]]; then composer cs-check ; fi\n  - if [[ $EXECUTE_HOSTNAME_CHECK == \"true\" && $TRAVIS_PULL_REQUEST == \"false\" ]]; then php bin/update_hostname_validator.php --check-only; fi\n\nafter_script:\n  - if [[ $TEST_COVERAGE == 'true' ]]; then travis_retry php vendor/bin/php-coveralls -v ; fi\n\nnotifications:\n  email: false\n"
  },
  {
    "path": "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## 2.13.0 - 2019-12-27\n\n### Added\n\n- [#275](https://github.com/zendframework/zend-validator/pull/275) adds a new `strict` option to `Zend\\Validator\\Date`; when `true`, the value being validated must both be a date AND in the same format as provided via the `format` option.\n\n- [#264](https://github.com/zendframework/zend-validator/pull/264) adds `Zend\\Validator\\UndisclosedPassword`, which can be used to determine if a password has been exposed in a known data breach as reported on the [Have I Been Pwned?](https://www.haveibeenpwned.com) website. [Documentation](https://docs.zendframework.com/zend-validator/validators/undisclosed-password/)\n\n- [#266](https://github.com/zendframework/zend-validator/pull/266) adds a new option to the `File\\Extension` and `File\\ExcludeExtension` validators, `allowNonExistentFile`. When set to `true`, the validators will continue validating the extension of the filename given even if the file does not exist. The default is `false`, to preserve backwards compatibility with previous versions.\n\n### Changed\n\n- [#264](https://github.com/zendframework/zend-validator/pull/264) bumps the minimum supported PHP version to 7.1.0.\n\n- [#279](https://github.com/zendframework/zend-validator/pull/279) updates the `magic.mime` file used for file validations.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- [#264](https://github.com/zendframework/zend-validator/pull/264) removes support for PHP versions prior to 7.1.0.\n\n### Fixed\n\n- Nothing.\n\n## 2.12.2 - 2019-10-29\n\n### Added\n\n- Nothing.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#277](https://github.com/zendframework/zend-validator/pull/277) fixes `File\\Hash` validator in case\n  when the file hash contains only digits.\n\n- [#277](https://github.com/zendframework/zend-validator/pull/277) fixes `File\\Hash` validator to match \n  hash with the given hashing algorithm.\n\n## 2.12.1 - 2019-10-12\n\n### Added\n\n- Nothing.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#272](https://github.com/zendframework/zend-validator/pull/272) changes\n  curly braces in array and string offset access to square brackets\n  in order to prevent issues under the upcoming PHP 7.4 release.\n\n- [#231](https://github.com/zendframework/zend-validator/pull/231) fixes validation of input hashes in `Zend\\Validator\\File\\Hash` validator when provided as array.\n  Only string hashes are allowed. If different type is provided `Zend\\Validator\\Exception\\InvalidArgumentException` is thrown.\n\n## 2.12.0 - 2019-01-30\n\n### Added\n\n- [#250](https://github.com/zendframework/zend-validator/pull/250) adds support for PHP 7.3.\n\n### Changed\n\n- [#251](https://github.com/zendframework/zend-validator/pull/251) updates the logic of each of the various `Zend\\Validator\\File` validators\n  to allow validating against PSR-7 `UploadedFileInterface` instances, expanding\n  the support originally provided in version 2.11.0.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- [#250](https://github.com/zendframework/zend-validator/pull/250) removes support for zend-stdlib v2 releases.\n\n### Fixed\n\n- Nothing.\n\n## 2.11.1 - 2019-01-29\n\n### Added\n\n- [#249](https://github.com/zendframework/zend-validator/pull/249) adds support in the hostname validator for the `.rs` TLD.\n\n### Changed\n\n- [#253](https://github.com/zendframework/zend-validator/pull/253) updates the list of allowed characters for a `DE` domain name to match those published by IDN.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#256](https://github.com/zendframework/zend-validator/pull/256) fixes hostname validation when omitting the TLD from verification,\n  ensuring validation of the domain segment considers all URI criteria.\n\n## 2.11.0 - 2018-12-13\n\n### Added\n\n- [#237](https://github.com/zendframework/zend-validator/pull/237) adds support for the [PSR-7 UploadedFileInterface](https://www.php-fig.org/psr/psr-7/#uploadedfileinterface)\n  to each of the `Upload` and `UploadFile` validators.\n\n- [#220](https://github.com/zendframework/zend-validator/pull/220) adds image/webp to the list of known image types for the `IsImage` validator.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Nothing.\n\n## 2.10.3 - 2018-12-13\n\n### Added\n\n- Nothing.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#241](https://github.com/zendframework/zend-validator/pull/241) has the `Hostname` validator return an invalid result early when an empty\n  domain segment is detected.\n\n- [#232](https://github.com/zendframework/zend-validator/pull/232) updates the `Hostname` validator to allow underscores in subdomains.\n\n- [#218](https://github.com/zendframework/zend-validator/pull/218) fixes a precision issue with the `Step` validator.\n\n## 2.10.2 - 2018-02-01\n\n### Added\n\n- [#202](https://github.com/zendframework/zend-validator/pull/202) adds the\n  ability to use custom constant types in extensions of\n  `Zend\\Validator\\CreditCard`, fixing an issue where users were unable to add\n  new brands as they are created.\n\n- [#203](https://github.com/zendframework/zend-validator/pull/203) adds support\n  for the new Russian bank card \"Mir\".\n\n- [#204](https://github.com/zendframework/zend-validator/pull/204) adds support\n  to the IBAN validator for performing SEPA validation against Croatia and San\n  Marino.\n\n- [#209](https://github.com/zendframework/zend-validator/pull/209) adds\n  documentation for the `Explode` validator.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#195](https://github.com/zendframework/zend-validator/pull/195) adds\n  missing `GpsPoint` validator entries to the `ValidatorPluginManager`, ensuring\n  they may be retrieved from it correctly.\n\n- [#212](https://github.com/zendframework/zend-validator/pull/212) updates the\n  `CSRF` validator to automatically mark any non-string values as invalid,\n  preventing errors such as array to string conversion.\n\n## 2.10.1 - 2017-08-22\n\n### Added\n\n- Nothing.\n\n### Changed\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#194](https://github.com/zendframework/zend-validator/pull/194) modifies the\n  `EmailAddress` validator to omit the `INTL_IDNA_VARIANT_UTS46` flag to\n  `idn_to_utf8()` if the constant is not defined, fixing an issue on systems\n  using pre-2012 releases of libicu.\n\n## 2.10.0 - 2017-08-14\n\n### Added\n\n- [#175](https://github.com/zendframework/zend-validator/pull/175) adds support\n  for PHP 7.2 (conditionally, as PHP 7.2 is currently in beta1).\n\n- [#157](https://github.com/zendframework/zend-validator/pull/157) adds a new\n  validator, `IsCountable`, which allows validating:\n  - if a value is countable\n  - if a countable value exactly matches a configured count\n  - if a countable value is greater than a configured minimum count\n  - if a countable value is less than a configured maximum count\n  - if a countable value is between configured minimum and maximum counts\n\n### Changed\n\n- [#169](https://github.com/zendframework/zend-validator/pull/169) modifies how\n  the various `File` validators check for readable files. Previously, they used\n  `stream_resolve_include_path`, which led to false negative checks when the\n  files did not exist within an `include_path` (which is often the case within a\n  web application). These now use `is_readable()` instead.\n\n- [#185](https://github.com/zendframework/zend-validator/pull/185) updates the\n  zend-session requirement (during development, and in the suggestions) to 2.8+,\n  to ensure compatibility with the upcoming PHP 7.2 release.\n\n- [#187](https://github.com/zendframework/zend-validator/pull/187) updates the\n  `Between` validator to **require** that both a `min` and a `max` value are\n  provided to the constructor, and that both are of the same type (both\n  integer/float values and/or both string values). This fixes issues that could\n  previously occur when one or the other was not set, but means an exception\n  will now be raised during instantiation (versus runtime during `isValid()`).\n\n- [#188](https://github.com/zendframework/zend-validator/pull/188) updates the\n  `ConfigProvider` to alias the service name `ValidatorManager` to the class\n  `Zend\\Validator\\ValidatorPluginManager`, and now maps the the latter class to\n  the `ValidatorPluginManagerFactory`. Previously, we mapped the service name\n  directly to the factory. Usage should not change for anybody at this point.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- [#175](https://github.com/zendframework/zend-validator/pull/175) removes\n  support for HHVM.\n\n### Fixed\n\n- [#160](https://github.com/zendframework/zend-validator/pull/160) fixes how the\n  `EmailAddress` validator handles the local part of an address, allowing it to\n  support unicode.\n\n## 2.9.2 - 2017-07-20\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#180](https://github.com/zendframework/zend-validator/pull/180) fixes how\n  `Zend\\Validator\\File\\MimeType` \"closes\" the open FileInfo handle for the file\n  being validated, using `unset()` instead of `finfo_close()`; this resolves a\n  segfault that occurs on older PHP versions.\n- [#174](https://github.com/zendframework/zend-validator/pull/174) fixes how\n  `Zend\\Validator\\Between` handles two situations: (1) when a non-numeric value\n  is validated against numeric min/max values, and (2) when a numeric value is\n  validated against non-numeric min/max values. Previously, these incorrectly\n  validated as true; now they are marked invalid.\n\n## 2.9.1 - 2017-05-17\n\n### Added\n\n- Nothing.\n\n### Changes\n\n- [#154](https://github.com/zendframework/zend-validator/pull/154) updates the\n  `CreditCard` validator to allow 19 digit Discover card values, and 13 and 19\n  digit Visa card values, which are now allowed (see\n  https://en.wikipedia.org/wiki/Payment_card_number).\n- [#162](https://github.com/zendframework/zend-validator/pull/162) updates the\n  `Hostname` validator to support `.hr` (Croatia) IDN domains.\n- [#163](https://github.com/zendframework/zend-validator/pull/163) updates the\n  `Iban` validator to support Belarus.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#168](https://github.com/zendframework/zend-validator/pull/168) fixes how the\n  `ValidatorPluginManagerFactory` factory initializes the plugin manager instance,\n  ensuring it is injecting the relevant configuration from the `config` service\n  and thus seeding it with configured validator services. This means\n  that the `validators` configuration will now be honored in non-zend-mvc contexts.\n\n## 2.9.0 - 2017-03-17\n\n### Added\n\n- [#78](https://github.com/zendframework/zend-validator/pull/78) added\n  `%length%` as an optional message variable in StringLength validator\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- [#151](https://github.com/zendframework/zend-validator/pull/151) dropped\n  php 5.5 support\n\n### Fixed\n\n- [#147](https://github.com/zendframework/zend-validator/issues/147)\n  [#148](https://github.com/zendframework/zend-validator/pull/148) adds further\n  `\"suggest\"` clauses in `composer.json`, since some dependencies are not always\n  required, and may lead to runtime failures.\n- [#66](https://github.com/zendframework/zend-validator/pull/66) fixed\n  EmailAddress validator applying IDNA conversion to local part \n- [#88](https://github.com/zendframework/zend-validator/pull/88) fixed NotEmpty\n  validator incorrectly applying types bitmaps\n- [#150](https://github.com/zendframework/zend-validator/pull/150) fixed Hostname\n  validator not allowing some characters in .dk IDN\n\n## 2.8.2 - 2017-01-29\n\n### Added\n\n- [#110](https://github.com/zendframework/zend-validator/pull/110) adds new\n  Mastercard 2-series BINs\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#81](https://github.com/zendframework/zend-validator/pull/81) registers the\n  Uuid validator into ValidatorPluginManager.\n\n## 2.8.1 - 2016-06-23\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#92](https://github.com/zendframework/zend-validator/pull/92) adds message\n  templates to the `ExcludeMimeType` validator, to allow differentiating\n  validation error messages from the `MimeType` validator.\n\n## 2.8.0 - 2016-05-16\n\n### Added\n\n- [#58](https://github.com/zendframework/zend-validator/pull/58) adds a new\n  `Uuid` validator, capable of validating if Versions 1-5 UUIDs are well-formed.\n- [#64](https://github.com/zendframework/zend-validator/pull/64) ports\n  `Zend\\ModuleManager\\Feature\\ValidatorProviderInterface` to\n  `Zend\\Validator\\ValidatorProviderInterface`, and updates the `Module::init()`\n  to typehint against the new interface instead of the one from\n  zend-modulemanager. Applications targeting zend-mvc v3 can start updating\n  their code to implement the new interface, or simply duck-type against it.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Nothing.\n\n## 2.7.3 - 2016-05-16\n\n### Added\n\n- [#67](https://github.com/zendframework/zend-validator/pull/67) adds support\n  for Punycoded top-level domains in the `Hostname` validator.\n- [#79](https://github.com/zendframework/zend-validator/pull/79) adds and\n  publishes the documentation to https://zendframework.github.io/zend-validator/\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Nothing.\n\n## 2.7.2 - 2016-04-18\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#65](https://github.com/zendframework/zend-validator/pull/65) fixes the\n  `Module::init()` method to properly receive a `ModuleManager` instance, and\n  not expect a `ModuleEvent`.\n\n## 2.7.1 - 2016-04-06\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- This release updates the TLD list to the latest version from the IANA.\n\n## 2.7.0 - 2016-04-06\n\n### Added\n\n- [#63](https://github.com/zendframework/zend-validator/pull/63) exposes the\n  package as a ZF component and/or generic configuration provider, by adding the\n  following:\n  - `ValidatorPluginManagerFactory`, which can be consumed by container-interop /\n    zend-servicemanager to create and return a `ValidatorPluginManager` instance.\n  - `ConfigProvider`, which maps the service `ValidatorManager` to the above\n    factory.\n  - `Module`, which does the same as `ConfigProvider`, but specifically for\n    zend-mvc applications. It also provices a specification to\n    `Zend\\ModuleManager\\Listener\\ServiceListener` to allow modules to provide\n    validator configuration.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Nothing.\n\n## 2.6.0 - 2016-02-17\n\n### Added\n\n- [#18](https://github.com/zendframework/zend-validator/pull/18) adds a `GpsPoint`\n  validator for validating GPS coordinates.\n- [#47](https://github.com/zendframework/zend-validator/pull/47) adds two new\n  classes, `Zend\\Validator\\Isbn\\Isbn10` and `Isbn13`; these classes are the\n  result of an extract class refactoring, and contain the logic specific to\n  calcualting the checksum for each ISBN style. `Zend\\Validator\\Isbn` now\n  instantiates the appropriate one and invokes it.\n- [#46](https://github.com/zendframework/zend-validator/pull/46) updates\n  `Zend\\Validator\\Db\\AbstractDb` to implement `Zend\\Db\\Adapter\\AdapterAwareInterface`,\n  by composing `Zend\\Db\\Adapter\\AdapterAwareTrait`.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- [#55](https://github.com/zendframework/zend-validator/pull/55) removes some\n  checks for `safe_mode` within the `MimeType` validator, as `safe_mode` became\n  obsolete starting with PHP 5.4.\n\n### Fixed\n\n- [#45](https://github.com/zendframework/zend-validator/pull/45) fixes aliases\n  mapping the deprecated `Float` and `Int` validators to their `Is*` counterparts.\n- [#49](https://github.com/zendframework/zend-validator/pull/49)\n  [#50](https://github.com/zendframework/zend-validator/pull/50), and\n  [#51](https://github.com/zendframework/zend-validator/pull/51) update the\n  code to be forwards-compatible with zend-servicemanager and zend-stdlib v3.\n- [#56](https://github.com/zendframework/zend-validator/pull/56) fixes the regex\n  in the `Ip` validator to escape `.` characters used as IP delimiters.\n\n## 2.5.4 - 2016-02-17\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#44](https://github.com/zendframework/zend-validator/pull/44) corrects the\n  grammar on the `NOT_GREATER_INCLUSIVE` validation error message.\n- [#45](https://github.com/zendframework/zend-validator/pull/45) adds normalized\n  aliases for the i18n isfloat/isint validators.\n- Updates the hostname validator regexes per the canonical service on which they\n  are based.\n- [#52](https://github.com/zendframework/zend-validator/pull/52) updates the\n  `Barcode` validator to cast empty options passed to the constructor to an\n  empty array, fixing type mismatch errors.\n- [#54](https://github.com/zendframework/zend-validator/pull/54) fixes the IP\n  address detection in the `Hostname` validator to ensure that IPv6 is detected\n  correctly.\n- [#56](https://github.com/zendframework/zend-validator/pull/56) updates the\n  regexes used by the `IP` validator when comparing ipv4 addresses to ensure a\n  literal `.` is tested between network segments.\n\n## 2.5.3 - 2015-09-03\n\n### Added\n\n- [#30](https://github.com/zendframework/zend-validator/pull/30) adds tooling to\n  ensure that the Hostname TLD list stays up-to-date as changes are pushed for\n  the repository.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#17](https://github.com/zendframework/zend-validator/pull/17) and\n  [#29](https://github.com/zendframework/zend-validator/pull/29) provide more\n  test coverage, and fix a number of edge cases, primarily in validator option\n  verifications.\n- [#26](https://github.com/zendframework/zend-validator/pull/26) fixes tests for\n  `StaticValidator` such that they make correct assertions now. In doing so, we\n  determined that it was possible to pass an indexed array of options, which\n  could lead to unexpected results, often leading to false positives when\n  validating. To correct this situation, `StaticValidator::execute()` now raises\n  an `InvalidArgumentException` when an indexed array is detected for the\n  `$options` argument.\n- [#35](https://github.com/zendframework/zend-validator/pull/35) modifies the\n  `NotEmpty` validator to no longer treat the float `0.0` as an empty value for\n  purposes of validation.\n- [#25](https://github.com/zendframework/zend-validator/pull/25) fixes the\n  `Date` validator to check against `DateTimeImmutable` and not\n  `DateTimeInterface` (as PHP has restrictions currently on how the latter can\n  be used).\n\n## 2.5.2 - 2015-07-16\n\n### Added\n\n- [#8](https://github.com/zendframework/zend-validator/pull/8) adds a \"strict\"\n  configuration option; when enabled (the default), the length of the address is\n  checked to ensure it follows the specification.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- [#8](https://github.com/zendframework/zend-validator/pull/8) fixes bad\n  behavior on the part of the `idn_to_utf8()` function, returning the original\n  address in the case that the function fails.\n- [#11](https://github.com/zendframework/zend-validator/pull/11) fixes\n  `ValidatorChain::prependValidator()` so that it works on HHVM.\n- [#12](https://github.com/zendframework/zend-validator/pull/12) adds \"6772\" to\n  the Maestro range of the `CreditCard` validator.\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2005-2019, Zend Technologies USA, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare 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, this\n  list of conditions and the following disclaimer in the documentation and/or\n  other materials provided with the distribution.\n\n- Neither the name of Zend Technologies USA, Inc. nor the names of its\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "# zend-validator\n\n> ## Repository abandoned 2019-12-31\n>\n> This repository has moved to [laminas/laminas-validator](https://github.com/laminas/laminas-validator).\n\n[![Build Status](https://secure.travis-ci.org/zendframework/zend-validator.svg?branch=master)](https://secure.travis-ci.org/zendframework/zend-validator)\n[![Coverage Status](https://coveralls.io/repos/github/zendframework/zend-validator/badge.svg?branch=master)](https://coveralls.io/github/zendframework/zend-validator?branch=master)\n\nzend-validator provides a set of commonly needed validators. It also provides a\nsimple validator chaining mechanism by which multiple validators may be applied\nto a single datum in a user-defined order.\n\n## Installation\n\nRun the following to install this library:\n\n```bash\n$ composer require zendframework/zend-validator\n```\n\n## Documentation\n\nBrowse the documentation online at https://docs.zendframework.com/zend-validator/\n\n## Support\n\n* [Issues](https://github.com/zendframework/zend-validator/issues/)\n* [Chat](https://zendframework-slack.herokuapp.com/)\n* [Forum](https://discourse.zendframework.com/)\n"
  },
  {
    "path": "bin/update_hostname_validator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nuse Zend\\Http\\Client;\nuse Zend\\Validator\\Hostname;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\ndefine('IANA_URL', 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt');\ndefine('ZF2_HOSTNAME_VALIDATOR_FILE', __DIR__.'/../src/Hostname.php');\n\n\nif (! file_exists(ZF2_HOSTNAME_VALIDATOR_FILE) || ! is_readable(ZF2_HOSTNAME_VALIDATOR_FILE)) {\n    printf(\"Error: cannont read file '%s'%s\", ZF2_HOSTNAME_VALIDATOR_FILE, PHP_EOL);\n    exit(1);\n}\n\nif (! is_writable(ZF2_HOSTNAME_VALIDATOR_FILE)) {\n    printf(\"Error: Cannot update file '%s'%s\", ZF2_HOSTNAME_VALIDATOR_FILE, PHP_EOL);\n    exit(1);\n}\n\n$newFileContent   = [];     // new file content\n$insertDone       = false; // becomes 'true' when we find start of $validTlds declaration\n$insertFinish     = false; // becomes 'true' when we find end of $validTlds declaration\n$checkOnly        = isset($argv[1]) ? $argv[1] === '--check-only' : false;\n$response         = getOfficialTLDs();\n$ianaVersion      = getVersionFromString('Version', strtok($response->getBody(), \"\\n\"));\n$validatorVersion = getVersionFromString('IanaVersion', file_get_contents(ZF2_HOSTNAME_VALIDATOR_FILE));\n\nif ($checkOnly && $ianaVersion > $validatorVersion) {\n    printf(\n        'TLDs must be updated, please run `php bin/update_hostname_validator.php` and push your changes%s',\n        PHP_EOL\n    );\n    exit(1);\n}\n\nif ($checkOnly) {\n    printf('TLDs are up-to-date%s', PHP_EOL);\n    exit(0);\n}\n\nforeach (file(ZF2_HOSTNAME_VALIDATOR_FILE) as $line) {\n    // Replace old version number with new one\n    if (preg_match('/\\*\\s+IanaVersion\\s+\\d+/', $line, $matches)) {\n        $newFileContent[] = sprintf(\"     * IanaVersion %s\\n\", $ianaVersion);\n        continue;\n    }\n\n    if ($insertDone === $insertFinish) {\n        // Outside of $validTlds definition; keep line as-is\n        $newFileContent[] = $line;\n    }\n\n    if ($insertFinish) {\n        continue;\n    }\n\n    if ($insertDone) {\n        // Detect where the $validTlds declaration ends\n        if (preg_match('/^\\s+\\];\\s*$/', $line)) {\n            $newFileContent[] = $line;\n            $insertFinish     = true;\n        }\n\n        continue;\n    }\n\n    // Detect where the $validTlds declaration begins\n    if (preg_match('/^\\s+protected\\s+\\$validTlds\\s+=\\s+\\[\\s*$/', $line)) {\n        $newFileContent = array_merge($newFileContent, getNewValidTlds($response->getBody()));\n        $insertDone     = true;\n    }\n}\n\nif (! $insertDone) {\n    printf('Error: cannot find line with \"protected $validTlds\"%s', PHP_EOL);\n    exit(1);\n}\n\nif (!$insertFinish) {\n    printf('Error: cannot find end of $validTlds declaration%s', PHP_EOL);\n    exit(1);\n}\n\nif (false === @file_put_contents(ZF2_HOSTNAME_VALIDATOR_FILE, $newFileContent)) {\n    printf('Error: cannot write info file \"%s\"%s', ZF2_HOSTNAME_VALIDATOR_FILE, PHP_EOL);\n    exit(1);\n}\n\nprintf('Validator TLD file updated.%s', PHP_EOL);\nexit(0);\n\n/**\n * Get Official TLDs\n *\n * @return \\Zend\\Http\\Response\n * @throws Exception\n */\nfunction getOfficialTLDs()\n{\n    $client = new Client();\n    $client->setOptions([\n        'adapter' => 'Zend\\Http\\Client\\Adapter\\Curl',\n    ]);\n    $client->setUri(IANA_URL);\n    $client->setMethod('GET');\n\n    $response = $client->send();\n    if (! $response->isSuccess()) {\n        throw new \\Exception(sprintf(\"Error: cannot get '%s'%s\", IANA_URL, PHP_EOL));\n    }\n    return $response;\n}\n\n/**\n * Extract the first match of a string like\n * \"Version 2015072300\" from the given string\n *\n * @param string $prefix\n * @param string $string\n * @return string\n * @throws Exception\n */\nfunction getVersionFromString($prefix, $string)\n{\n    $matches = [];\n    if (! preg_match(sprintf('/%s\\s+((\\d+)?)/', $prefix), $string, $matches)) {\n        throw new Exception('Error: cannot get last update date');\n    }\n\n    return $matches[1];\n}\n\n/**\n * Extract new Valid TLDs from a string containing one per line.\n *\n * @param string $string\n * @return array\n */\nfunction getNewValidTlds($string)\n{\n    $decodePunycode = getPunycodeDecoder();\n\n    // Get new TLDs from the list previously fetched\n    $newValidTlds = [];\n    foreach (preg_grep('/^[^#]/', preg_split(\"#\\r?\\n#\", $string)) as $line) {\n        $newValidTlds []= sprintf(\n            \"%s'%s',\\n\",\n            str_repeat(' ', 8),\n            $decodePunycode(strtolower($line))\n        );\n    }\n\n    return $newValidTlds;\n}\n\n/**\n * Retrieve and return a punycode decoder.\n *\n * TLDs are puny encoded.\n *\n * We need a decodePunycode function to translate TLDs to UTF-8:\n *\n * - use idn_to_utf8 if available\n * - otherwise, use Hostname::decodePunycode()\n *\n * @return callable\n */\nfunction getPunycodeDecoder()\n{\n    if (function_exists('idn_to_utf8')) {\n        return function ($domain) {\n            return idn_to_utf8($domain, 0, INTL_IDNA_VARIANT_UTS46);\n        };\n    }\n\n    $hostnameValidator = new Hostname();\n    $reflection        = new ReflectionClass(get_class($hostnameValidator));\n    $decodePunyCode    = $reflection->getMethod('decodePunycode');\n    $decodePunyCode->setAccessible(true);\n\n    return function ($encode) use ($hostnameValidator, $decodePunyCode) {\n        if (strpos($encode, 'xn--') === 0) {\n            return $decodePunyCode->invokeArgs($hostnameValidator, [substr($encode, 4)]);\n        }\n        return $encode;\n    };\n}\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"zendframework/zend-validator\",\n    \"description\": \"Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria\",\n    \"license\": \"BSD-3-Clause\",\n    \"keywords\": [\n        \"zendframework\",\n        \"zf\",\n        \"validator\"\n    ],\n    \"support\": {\n        \"docs\": \"https://docs.zendframework.com/zend-validator/\",\n        \"issues\": \"https://github.com/zendframework/zend-validator/issues\",\n        \"source\": \"https://github.com/zendframework/zend-validator\",\n        \"rss\": \"https://github.com/zendframework/zend-validator/releases.atom\",\n        \"chat\": \"https://zendframework-slack.herokuapp.com\",\n        \"forum\": \"https://discourse.zendframework.com/c/questions/components\"\n    },\n    \"require\": {\n        \"php\": \"^7.1\",\n        \"zendframework/zend-stdlib\": \"^3.2.1\",\n        \"container-interop/container-interop\": \"^1.1\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^6.0.8 || ^5.7.15\",\n        \"psr/http-message\": \"^1.0\",\n        \"psr/http-client\": \"^1.0\",\n        \"psr/http-factory\": \"^1.0\",\n        \"zendframework/zend-cache\": \"^2.6.1\",\n        \"zendframework/zend-coding-standard\": \"~1.0.0\",\n        \"zendframework/zend-config\": \"^2.6\",\n        \"zendframework/zend-db\": \"^2.7\",\n        \"zendframework/zend-filter\": \"^2.6\",\n        \"zendframework/zend-http\": \"^2.5.4\",\n        \"zendframework/zend-i18n\": \"^2.6\",\n        \"zendframework/zend-math\": \"^2.6\",\n        \"zendframework/zend-servicemanager\": \"^2.7.5 || ^3.0.3\",\n        \"zendframework/zend-session\": \"^2.8\",\n        \"zendframework/zend-uri\": \"^2.5\"\n    },\n    \"suggest\": {\n        \"psr/http-message\": \"psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators\",\n        \"zendframework/zend-db\": \"Zend\\\\Db component, required by the (No)RecordExists validator\",\n        \"zendframework/zend-filter\": \"Zend\\\\Filter component, required by the Digits validator\",\n        \"zendframework/zend-i18n\": \"Zend\\\\I18n component to allow translation of validation error messages\",\n        \"zendframework/zend-math\": \"Zend\\\\Math component, required by the Csrf validator\",\n        \"zendframework/zend-i18n-resources\": \"Translations of validator messages\",\n        \"zendframework/zend-servicemanager\": \"Zend\\\\ServiceManager component to allow using the ValidatorPluginManager and validator chains\",\n        \"zendframework/zend-session\": \"Zend\\\\Session component, ^2.8; required by the Csrf validator\",\n        \"zendframework/zend-uri\": \"Zend\\\\Uri component, required by the Uri and Sitemap\\\\Loc validators\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Zend\\\\Validator\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"ZendTest\\\\Validator\\\\\": \"test/\"\n        }\n    },\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"2.13.x-dev\",\n            \"dev-develop\": \"2.14.x-dev\"\n        },\n        \"zf\": {\n            \"component\": \"Zend\\\\Validator\",\n            \"config-provider\": \"Zend\\\\Validator\\\\ConfigProvider\"\n        }\n    },\n    \"scripts\": {\n        \"check\": [\n            \"@cs-check\",\n            \"@test\"\n        ],\n        \"cs-check\": \"phpcs\",\n        \"cs-fix\": \"phpcbf\",\n        \"test\": \"phpunit --colors=always\",\n        \"test-coverage\": \"phpunit --colors=always --coverage-clover clover.xml\"\n    }\n}\n"
  },
  {
    "path": "docs/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nThis project adheres to [The Code Manifesto](http://codemanifesto.com)\nas its guidelines for contributor interactions.\n\n## The Code Manifesto\n\nWe want to work in an ecosystem that empowers developers to reach their\npotential — one that encourages growth and effective collaboration. A space that\nis safe for all.\n\nA space such as this benefits everyone that participates in it. It encourages\nnew developers to enter our field. It is through discussion and collaboration\nthat we grow, and through growth that we improve.\n\nIn the effort to create such a place, we hold to these values:\n\n1. **Discrimination limits us.** This includes discrimination on the basis of\n   race, gender, sexual orientation, gender identity, age, nationality, technology\n   and any other arbitrary exclusion of a group of people.\n2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort\n   levels. Remember that, and if brought to your attention, heed it.\n3. **We are our biggest assets.** None of us were born masters of our trade.\n   Each of us has been helped along the way. Return that favor, when and where\n   you can.\n4. **We are resources for the future.** As an extension of #3, share what you\n   know. Make yourself a resource to help those that come after you.\n5. **Respect defines us.** Treat others as you wish to be treated. Make your\n   discussions, criticisms and debates from a position of respectfulness. Ask\n   yourself, is it true? Is it necessary? Is it constructive? Anything less is\n   unacceptable.\n6. **Reactions require grace.** Angry responses are valid, but abusive language\n   and vindictive actions are toxic. When something happens that offends you,\n   handle it assertively, but be respectful. Escalate reasonably, and try to\n   allow the offender an opportunity to explain themselves, and possibly correct\n   the issue.\n7. **Opinions are just that: opinions.** Each and every one of us, due to our\n   background and upbringing, have varying opinions. The fact of the matter, is\n   that is perfectly acceptable. Remember this: if you respect your own\n   opinions, you should respect the opinions of others.\n8. **To err is human.** You might not intend it, but mistakes do happen and\n   contribute to build experience. Tolerate honest mistakes, and don't hesitate\n   to apologize if you make one yourself.\n"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "content": "# CONTRIBUTING\n\n## RESOURCES\n\nIf you wish to contribute to this project, please be sure to\nread/subscribe to the following resources:\n\n - [Coding Standards](https://github.com/zendframework/zend-coding-standard)\n - [Forums](https://discourse.zendframework.com/c/contributors)\n - [Chat](https://zendframework-slack.herokuapp.com)\n - [Code of Conduct](CODE_OF_CONDUCT.md)\n\nIf you are working on new features or refactoring\n[create a proposal](https://github.com/zendframework/zend-validator/issues/new).\n\n## RUNNING TESTS\n\nTo run tests:\n\n- Clone the repository:\n\n  ```console\n  $ git clone git://github.com/zendframework/zend-validator.git\n  $ cd zend-validator\n  ```\n\n- Install dependencies via composer:\n\n  ```console\n  $ composer install\n  ```\n\n  If you don't have `composer` installed, please download it from https://getcomposer.org/download/\n\n- Run the tests using the \"test\" command shipped in the `composer.json`:\n\n  ```console\n  $ composer test\n  ```\n\nYou can turn on conditional tests with the `phpunit.xml` file.\nTo do so:\n\n -  Copy `phpunit.xml.dist` file to `phpunit.xml`\n -  Edit `phpunit.xml` to enable any specific functionality you\n    want to test, as well as to provide test values to utilize.\n\n## Running Coding Standards Checks\n\nFirst, ensure you've installed dependencies via composer, per the previous\nsection on running tests.\n\nTo run CS checks only:\n\n```console\n$ composer cs-check\n```\n\nTo attempt to automatically fix common CS issues:\n\n```console\n$ composer cs-fix\n```\n\nIf the above fixes any CS issues, please re-run the tests to ensure\nthey pass, and make sure you add and commit the changes after verification.\n\n## Recommended Workflow for Contributions\n\nYour first step is to establish a public repository from which we can\npull your work into the master repository. We recommend using\n[GitHub](https://github.com), as that is where the component is already hosted.\n\n1. Setup a [GitHub account](https://github.com/), if you haven't yet\n2. Fork the repository (https://github.com/zendframework/zend-validator)\n3. Clone the canonical repository locally and enter it.\n\n   ```console\n   $ git clone git://github.com/zendframework/zend-validator.git\n   $ cd zend-validator\n   ```\n\n4. Add a remote to your fork; substitute your GitHub username in the command\n   below.\n\n   ```console\n   $ git remote add {username} git@github.com:{username}/zend-validator.git\n   $ git fetch {username}\n   ```\n\n### Keeping Up-to-Date\n\nPeriodically, you should update your fork or personal repository to\nmatch the canonical ZF repository. Assuming you have setup your local repository\nper the instructions above, you can do the following:\n\n\n```console\n$ git checkout master\n$ git fetch origin\n$ git rebase origin/master\n# OPTIONALLY, to keep your remote up-to-date -\n$ git push {username} master:master\n```\n\nIf you're tracking other branches -- for example, the \"develop\" branch, where\nnew feature development occurs -- you'll want to do the same operations for that\nbranch; simply substitute  \"develop\" for \"master\".\n\n### Working on a patch\n\nWe recommend you do each new feature or bugfix in a new branch. This simplifies\nthe task of code review as well as the task of merging your changes into the\ncanonical repository.\n\nA typical workflow will then consist of the following:\n\n1. Create a new local branch based off either your master or develop branch.\n2. Switch to your new local branch. (This step can be combined with the\n   previous step with the use of `git checkout -b`.)\n3. Do some work, commit, repeat as necessary.\n4. Push the local branch to your remote repository.\n5. Send a pull request.\n\nThe mechanics of this process are actually quite trivial. Below, we will\ncreate a branch for fixing an issue in the tracker.\n\n```console\n$ git checkout -b hotfix/9295\nSwitched to a new branch 'hotfix/9295'\n```\n\n... do some work ...\n\n\n```console\n$ git commit\n```\n\n... write your log message ...\n\n\n```console\n$ git push {username} hotfix/9295:hotfix/9295\nCounting objects: 38, done.\nDelta compression using up to 2 threads.\nCompression objects: 100% (18/18), done.\nWriting objects: 100% (20/20), 8.19KiB, done.\nTotal 20 (delta 12), reused 0 (delta 0)\nTo ssh://git@github.com/{username}/zend-validator.git\n   b5583aa..4f51698  HEAD -> master\n```\n\nTo send a pull request, you have two options.\n\nIf using GitHub, you can do the pull request from there. Navigate to\nyour repository, select the branch you just created, and then select the\n\"Pull Request\" button in the upper right. Select the user/organization\n\"zendframework\" (or whatever the upstream organization is) as the recipient.\n\n#### What branch to issue the pull request against?\n\nWhich branch should you issue a pull request against?\n\n- For fixes against the stable release, issue the pull request against the\n  \"master\" branch.\n- For new features, or fixes that introduce new elements to the public API (such\n  as new public methods or properties), issue the pull request against the\n  \"develop\" branch.\n\n### Branch Cleanup\n\nAs you might imagine, if you are a frequent contributor, you'll start to\nget a ton of branches both locally and on your remote.\n\nOnce you know that your changes have been accepted to the master\nrepository, we suggest doing some cleanup of these branches.\n\n-  Local branch cleanup\n\n   ```console\n   $ git branch -d <branchname>\n   ```\n\n-  Remote branch removal\n\n   ```console\n   $ git push {username} :<branchname>\n   ```\n"
  },
  {
    "path": "docs/ISSUE_TEMPLATE.md",
    "content": " - [ ] I was not able to find an [open](https://github.com/zendframework/zend-validator/issues?q=is%3Aopen) or [closed](https://github.com/zendframework/zend-validator/issues?q=is%3Aclosed) issue matching what I'm seeing.\n - [ ] This is not a question. (Questions should be asked on [chat](https://zendframework.slack.com/) ([Signup here](https://zendframework-slack.herokuapp.com/)) or our [forums](https://discourse.zendframework.com/).)\n\nProvide a narrative description of what you are trying to accomplish.\n\n### Code to reproduce the issue\n\n<!-- Please provide the minimum code necessary to recreate the issue -->\n\n```php\n```\n\n### Expected results\n\n<!-- What do you think should have happened? -->\n\n### Actual results\n\n<!-- What did you actually observe? -->\n"
  },
  {
    "path": "docs/PULL_REQUEST_TEMPLATE.md",
    "content": "Provide a narrative description of what you are trying to accomplish:\n\n- [ ] Are you fixing a bug?\n  - [ ] Detail how the bug is invoked currently.\n  - [ ] Detail the original, incorrect behavior.\n  - [ ] Detail the new, expected behavior.\n  - [ ] Base your feature on the `master` branch, and submit against that branch.\n  - [ ] Add a regression test that demonstrates the bug, and proves the fix.\n  - [ ] Add a `CHANGELOG.md` entry for the fix.\n\n- [ ] Are you creating a new feature?\n  - [ ] Why is the new feature needed? What purpose does it serve?\n  - [ ] How will users use the new feature?\n  - [ ] Base your feature on the `develop` branch, and submit against that branch.\n  - [ ] Add only one feature per pull request; split multiple features over multiple pull requests\n  - [ ] Add tests for the new feature.\n  - [ ] Add documentation for the new feature.\n  - [ ] Add a `CHANGELOG.md` entry for the new feature.\n\n- [ ] Is this related to quality assurance?\n  <!-- Detail why the changes are necessary -->\n\n- [ ] Is this related to documentation?\n  <!-- Is it a typographical and/or grammatical fix? -->\n  <!-- Is it new documentation? -->\n"
  },
  {
    "path": "docs/SUPPORT.md",
    "content": "# Getting Support\n\nZend Framework offers three support channels:\n\n- For real-time questions, use our\n  [chat](https://zendframework-slack.herokuapp.com)\n- For detailed questions (e.g., those requiring examples) use our\n  [forums](https://discourse.zendframework.com/c/questions/components)\n- To report issues, use this repository's\n  [issue tracker](https://github.com/zendframework/zend-validator/issues/new)\n\n**DO NOT** use the issue tracker to ask questions; use chat or the forums for\nthat. Questions posed to the issue tracker will be closed.\n\nWhen reporting an issue, please include the following details:\n\n- A narrative description of what you are trying to accomplish.\n- The minimum code necessary to reproduce the issue.\n- The expected results of exercising that code.\n- The actual results received.\n\nWe may ask for additional details: what version of the library you are using,\nand what PHP version was used to reproduce the issue.\n\nYou may also submit a failing test case as a pull request.\n"
  },
  {
    "path": "docs/book/index.md",
    "content": "../../README.md"
  },
  {
    "path": "docs/book/intro.md",
    "content": "# Introduction\n\nzend-validator provides a set of commonly needed validators. It also provides a\nsimple validator chaining mechanism by which multiple validators may be applied\nto a single datum in a user-defined order.\n\n## What is a validator?\n\nA validator examines its input with respect to some requirements and produces a\nboolean result indicating whether the input successfully validates against the\nrequirements. If the input does not meet the requirements, a validator may\nadditionally provide information about which requirement(s) the input does not\nmeet.\n\nFor example, a web application might require that a username be between six and\ntwelve characters in length, and may only contain alphanumeric characters. A\nvalidator can be used for ensuring that a username meets these requirements. If\na chosen username does not meet one or both of the requirements, it would be\nuseful to know which of the requirements the username fails to meet.\n\n## Basic usage of validators\n\nHaving defined validation in this way provides the foundation for\n`Zend\\Validator\\ValidatorInterface`, which defines two methods, `isValid()` and\n`getMessages()`. The `isValid()` method performs validation upon the provided\nvalue, returning `true` if and only if the value passes against the validation\ncriteria.\n\nIf `isValid()` returns `false`, the `getMessages()` method will return an array\nof messages explaining the reason(s) for validation failure. The array keys are\nshort strings that identify the reasons for validation failure, and the array\nvalues are the corresponding human-readable string messages. The keys and values\nare class-dependent; each validation class defines its own set of validation\nfailure messages and the unique keys that identify them. Each class also has a\n`const` definition that matches each identifier for a validation failure cause.\n\n> ### Stateful validators\n>\n> The `getMessages()` methods return validation failure information only for the\n> most recent `isValid()` call. Each call to `isValid()` clears any messages and\n> errors caused by a previous `isValid()` call, because it's likely that each\n> call to `isValid()` is made for a different input value.\n\nThe following example illustrates validation of an e-mail address:\n\n```php\nuse Zend\\Validator\\EmailAddress;\n\n$validator = new EmailAddress();\n\nif ($validator->isValid($email)) {\n    // email appears to be valid\n} else {\n    // email is invalid; print the reasons\n    foreach ($validator->getMessages() as $messageId => $message) {\n        printf(\"Validation failure '%s': %s\\n\", $messageId, $message);\n    }\n}\n```\n\n## Customizing messages\n\nValidator classes provide a `setMessage()` method with which you can specify the\nformat of a message returned by `getMessages()` in case of validation failure.\nThe first argument of this method is a string containing the error message. You\ncan include tokens in this string which will be substituted with data relevant\nto the validator. The token `%value%` is supported by all validators; this is\nsubstituted with the value you passed to `isValid()`. Other tokens may be\nsupported on a case-by-case basis in each validation class. For example, `%max%`\nis a token supported by `Zend\\Validator\\LessThan`. The `getMessageVariables()`\nmethod returns an array of variable tokens supported by the validator.\n\nThe second optional argument is a string that identifies the validation failure\nmessage template to be set, which is useful when a validation class defines more\nthan one cause for failure. If you omit the second argument, `setMessage()`\nassumes the message you specify should be used for the first message template\ndeclared in the validation class. Many validation classes only have one error\nmessage template defined, so there is no need to specify which message template\nyou are changing.\n\n```php\nuse Zend\\Validator\\StringLength;\n\n$validator = new StringLength(8);\n\n$validator->setMessage(\n    'The string \\'%value%\\' is too short; it must be at least %min% characters',\n    StringLength::TOO_SHORT\n);\n\nif (! $validator->isValid('word')) {\n    $messages = $validator->getMessages();\n    echo current($messages);\n\n    // \"The string 'word' is too short; it must be at least 8 characters\"\n}\n```\n\nYou can set multiple messages using the `setMessages()` method. Its argument is\nan array containing key/message pairs.\n\n```php\nuse Zend\\Validator\\StringLength;\n\n$validator = new StringLength(['min' => 8, 'max' => 12]);\n\n$validator->setMessages([\n    StringLength::TOO_SHORT => 'The string \\'%value%\\' is too short',\n    StringLength::TOO_LONG  => 'The string \\'%value%\\' is too long',\n]);\n```\n\nIf your application requires even greater flexibility with which it reports\nvalidation failures, you can access properties by the same name as the message\ntokens supported by a given validation class. The `value` property is always\navailable in a validator; it is the value you specified as the argument of\n`isValid()`. Other properties may be supported on a case-by-case basis in each\nvalidation class.\n\n```php\nuse Zend\\Validator\\StringLength;\n\n$validator = new StringLength(['min' => 8, 'max' => 12]);\n\nif (! $validator->isValid('word')) {\n    printf(\n        \"Word failed: %s; its length is not between %d and %d\\n\",\n        $validator->value,\n        $validator->min,\n        $validator->max\n    );\n}\n```\n\n## Translating messages\n\n> ### Installation requirements\n>\n> The translation of validator messages depends on the zend-i18n component, so\n> be sure to have it installed before getting started:\n>\n> ```bash\n> $ composer require zendframework/zend-i18n\n> ```\n\nValidator classes provide a `setTranslator()` method with which you can specify\nan instance of `Zend\\Validator\\Translator\\TranslatorInterface` which will\ntranslate the messages in case of a validation failure. The `getTranslator()`\nmethod returns the translator instance. `Zend\\Mvc\\I18n\\Translator` provides an\nimplementation compatible with the validator component.\n\n```php\nuse Zend\\Mvc\\I18n\\Translator;\nuse Zend\\Validator\\StringLength;\n\n$validator = new StringLength(['min' => 8, 'max' => 12]);\n$translate = new Translator();\n// configure the translator...\n\n$validator->setTranslator($translate);\n```\n\nWith the static `AbstractValidator::setDefaultTranslator()` method you can set a\ninstance of `Zend\\Validator\\Translator\\TranslatorInterface` which will be used\nfor all validation classes, and can be retrieved with `getDefaultTranslator()`.\nThis prevents the need for setting a translator manually with each validator.\n\n```php\nuse Zend\\Mvc\\I18n\\Translator;\nuse Zend\\Validator\\AbstractValidator;\n\n$translate = new Translator();\n// configure the translator...\n\nAbstractValidator::setDefaultTranslator($translate);\n```\n\nSometimes it is necessary to disable the translator within a validator. To\nachieve this you can use the `setDisableTranslator()` method, which accepts a\nboolean parameter, and `isTranslatorDisabled()` to get the set value.\n\n```php\nuse Zend\\Validator\\StringLength;\n\n$validator = new StringLength(['min' => 8, 'max' => 12]);\nif (! $validator->isTranslatorDisabled()) {\n    $validator->setDisableTranslator();\n}\n```\n\nIt is also possible to use a translator instead of setting own messages with\n`setMessage()`. But doing so, you should keep in mind, that the translator works\nalso on messages you set your own.\n\n> ### Translation compatibility\n>\n> In versions 2.0 - 2.1, `Zend\\Validator\\AbstractValidator` implemented\n> `Zend\\I18n\\Translator\\TranslatorAwareInterface` and accepted instances of\n> `Zend\\I18n\\Translator\\Translator`. Starting in version 2.2.0, zend-validator\n> now defines a translator interface, > `Zend\\Validator\\Translator\\TranslatorInterface`,\n> as well as it's own -aware variant, > `Zend\\Validator\\Translator\\TranslatorAwareInterface`.\n> This was done to reduce dependencies for the component, and follows the\n> principal of Separated Interfaces.\n>\n> The upshot is that if you are migrating from a pre-2.2 version, and receiving\n> errors indicating that the translator provided does not implement\n> `Zend\\Validator\\Translator\\TranslatorInterface`, you will need to make a\n> change to your code.\n>\n> An implementation of `Zend\\Validator\\Translator\\TranslatorInterface` is\n> provided in `Zend\\Mvc\\I18n\\Translator`, which also extends\n> `Zend\\I18n\\Translator\\Translator`. This version can be instantiated and used\n> just as the original `Zend\\I18n` version.\n>\n> A new service has also been registered with the MVC, `MvcTranslator`, which\n> will return this specialized, bridge instance.\n>\n> Most users should see no issues, as `Zend\\Validator\\ValidatorPluginManager`\n> has been modified to use the `MvcTranslator` service internally, which is how\n> most developers were getting the translator instance into validators in the\n> first place. You will only need to change code if you were manually injecting\n> the instance previously.\n"
  },
  {
    "path": "docs/book/messages.md",
    "content": "# Validation Messages\n\nEach validator based on `Zend\\Validator\\ValidatorInterface` provides one or\nmultiple messages in the case of a failed validation. You can use this\ninformation to set your own messages, or to translate existing messages which a\nvalidator could return to something different.\n\nValidation messages are defined as constant/template pairs, with the constant\nrepresenting a translation key. Such constants are defined per-class.  Let's\nlook into `Zend\\Validator\\GreaterThan` for a descriptive example:\n\n```php\nprotected $messageTemplates = [\n    self::NOT_GREATER => \"'%value%' is not greater than '%min%'\",\n];\n```\n\nThe constant `self::NOT_GREATER` refers to the failure and is used as the\nmessage key, and the message template itself is used as the value within the\nmessage array.\n\nYou can retrieve all message templates from a validator by using the\n`getMessageTemplates()` method. It returns the above array containing all\nmessages a validator could return in the case of a failed validation.\n\n```php\n$validator = new Zend\\Validator\\GreaterThan();\n$messages  = $validator->getMessageTemplates();\n```\n\nUsing the `setMessage()` method you can set another message to be returned in\ncase of the specified failure.\n\n```php\nuse Zend\\Validator\\GreaterThan;\n\n$validator = new GreaterThan();\n$validator->setMessage('Please enter a lower value', GreaterThan::NOT_GREATER);\n```\n\nThe second parameter defines the failure which will be overridden. When you omit\nthis parameter, then the given message will be set for all possible failures of\nthis validator.\n\n## Using pre-translated validation messages\n\nzend-validator is shipped with more than 45 different validators with more than\n200 failure messages. It can be a tedious task to translate all of these\nmessages. For your convenience, pre-translated messages are provided in the\n[zendframework/zend-i18n-resources](https://docs.zendframework.com/zend-i18n-resources/)\npackage:\n\n```bash\n$ composer require zendframework/zend-i18n-resources\n```\n\nTo translate all validation messages to German for example, attach a translator\nto `Zend\\Validator\\AbstractValidator` using these resource files.\n\n```php\nuse Zend\\I18n\\Translator\\Resources;\nuse Zend\\Mvc\\I18n\\Translator;\nuse Zend\\Validator\\AbstractValidator;\n\n$translator = new Zend\\Mvc\\I18n\\Translator();\n$translator->addTranslationFilePattern(\n    'phpArray',\n    Resources::getBasePath(),\n    Resources::getPatternForValidator()\n);\n\nAbstractValidator::setDefaultTranslator($translator);\n```\n\n> ### Supported languages\n>\n> The supported languages may not be complete. New languages will be added with\n> each release. Additionally feel free to use the existing resource files to\n> make your own translations.\n>\n> You could also use these resource files to rewrite existing translations. So\n> you are not in need to create these files manually yourself.\n\n## Limit the size of a validation message\n\nSometimes it is necessary to limit the maximum size a validation message can\nhave; as an example, when your view allows a maximum size of 100 chars to be\nrendered on one line. To enable this, `Zend\\Validator\\AbstractValidator`\nis able to automatically limit the maximum returned size of a validation\nmessage.\n\nTo get the actual set size use `Zend\\Validator\\AbstractValidator::getMessageLength()`.\nIf it is `-1`, then the returned message will not be truncated. This is default\nbehaviour.\n\nTo limit the returned message size, use `Zend\\Validator\\AbstractValidator::setMessageLength()`.\nSet it to any integer size you need. When the returned message exceeds the set\nsize, then the message will be truncated and the string `**...**` will be added\ninstead of the rest of the message.\n\n```php\nZend\\Validator\\AbstractValidator::setMessageLength(100);\n```\n\n> ### Where is this parameter used?\n>\n> The set message length is used for all validators, even for self defined ones,\n> as long as they extend `Zend\\Validator\\AbstractValidator`.\n"
  },
  {
    "path": "docs/book/set.md",
    "content": "# Standard Validation Classes\n\nThe following validators come with the zend-validator distribution.\n\n- [Barcode](validators/barcode.md)\n- [Between](validators/between.md)\n- [Callback](validators/callback.md)\n- [CreditCard](validators/credit-card.md)\n- [Date](validators/date.md)\n- [RecordExists and NoRecordExists (database)](validators/db.md)\n- [Digits](validators/digits.md)\n- [EmailAddress](validators/email-address.md)\n- [Explode](validators/explode.md)\n- [File Validation Classes](validators/file/intro.md)\n- [GreaterThan](validators/greater-than.md)\n- [Hex](validators/hex.md)\n- [Hostname](validators/hostname.md)\n- [Iban](validators/iban.md)\n- [Identical](validators/identical.md)\n- [InArray](validators/in-array.md)\n- [Ip](validators/ip.md)\n- [Isbn](validators/isbn.md)\n- [IsCountable](validators/is-countable.md)\n- [IsInstanceOf](validators/isinstanceof.md)\n- [LessThan](validators/less-than.md)\n- [NotEmpty](validators/not-empty.md)\n- [Regex](validators/regex.md)\n- [Sitemap](validators/sitemap.md)\n- [Step](validators/step.md)\n- [StringLength](validators/string-length.md)\n- [Timezone](validators/timezone.md)\n- [Uri](validators/uri.md)\n- [Uuid](validators/uuid.md)\n\n## Additional validators\n\nSeveral other components offer validators as well:\n\n- [zend-i18n](https://docs.zendframework.com/zend-i18n/validators/)\n\n## Deprecated Validators\n\n### Ccnum\n\nThe `Ccnum` validator has been deprecated in favor of the `CreditCard`\nvalidator. For security reasons you should use `CreditCard` instead of `Ccnum`.\n"
  },
  {
    "path": "docs/book/validator-chains.md",
    "content": "# Validator Chains\n\n## Basic Usage\n\n> ### Installation requirements\n>\n> The validator chain depends on the zend-servicemanager component, so be sure\n> to have it installed before getting started:\n>\n> ```bash\n> $ composer require zendframework/zend-servicemanager\n> ```\n\nOften, multiple validations should be applied to some value in a particular\norder. The following code demonstrates a way to solve the example from the\n[introduction](intro.md), where a username must be between 6 and 12 alphanumeric\ncharacters:\n\n```php\nuse Zend\\I18n\\Validator\\Alnum;\nuse Zend\\Validator\\StringLength;\nuse Zend\\Validator\\ValidatorChain;\n\n// Create a validator chain and add validators to it\n$validatorChain = new ValidatorChain();\n$validatorChain->attach(new StringLength(['min' => 6, 'max' => 12]));\n$validatorChain->attach(new Alnum());\n\n// Validate the username\nif ($validatorChain->isValid($username)) {\n    // username passed validation\n} else {\n    // username failed validation; print reasons\n    foreach ($validatorChain->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nValidators are run in the order they were added to the `ValidatorChain`. In the\nabove example, the username is first checked to ensure that its length is\nbetween 6 and 12 characters, and then it is checked to ensure that it contains\nonly alphanumeric characters. The second validation, for alphanumeric\ncharacters, is performed regardless of whether the first validation, for length\nbetween 6 and 12 characters, succeeds. This means that if both validations fail,\n`getMessages()` will return failure messages from both validators.\n\nIn some cases, it makes sense to have a validator *break the chain* if its\nvalidation process fails. `ValidatorChain` supports such use cases with the\nsecond parameter to the `attach()` method. By setting `$breakChainOnFailure` to\n`true`, if the validator fails, it will short-circuit execution of the chain,\npreventing subsequent validators from executing.  If the above example were\nwritten as follows, then the alphanumeric validation would not occur if the\nstring length validation fails:\n\n```php\n$chain->attach(new StringLength(['min' => 6, 'max' => 12]), true);\n$chain->attach(new Alnum());\n```\n\nAny object that implements `Zend\\Validator\\ValidatorInterface` may be used in a\nvalidator chain.\n\n## Setting Validator Chain Order\n\nFor each validator added to the `ValidatorChain`, you can set a *priority* to\ndefine the chain order. The default value is `1`. Higher values indicate earlier\nexecution, while lower values execute later; use negative values to force late\nexecution.\n\nIn the following example, the username is first checked to ensure that its\nlength is between 7 and 9 characters, and then it is checked to ensure that its\nlength is between 3 and 5 characters.\n\n```php\nuse Zend\\I18n\\Validator\\Alnum;\nuse Zend\\Validator\\StringLength;\nuse Zend\\Validator\\ValidatorChain;\n\n$username = 'ABCDFE';\n\n// Create a validator chain and add validators to it\n$validatorChain = new ValidatorChain();\n$validatorChain->attach(\n    new StringLength(['min' => 3, 'max' => 5]),\n    true, // break chain on failure\n    1\n);\n$validatorChain->attach(\n    new StringLength(['min' => 7, 'max' => 9]),\n    true, // break chain on failure\n    2     // higher priority!\n);\n\n// Validate the username\nif ($validatorChain->isValid($username)) {\n    // username passed validation\n    echo \"Success\";\n} else {\n    // username failed validation; print reasons\n    foreach ($validatorChain->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n\n// This first example will display: The input is less than 7 characters long\n```\n"
  },
  {
    "path": "docs/book/validators/barcode.md",
    "content": "# Barcode Validator\n\n`Zend\\Validator\\Barcode` allows you to check if a given value can be represented\nas a barcode.\n\n## Supported barcodes\n\n`Zend\\Validator\\Barcode` supports multiple barcode standards and can be extended\nwith proprietary barcode implementations. The following barcode standards are\nsupported:\n\n### CODABAR\n\nAlso known as Code-a-bar.\n\nThis barcode has no length limitation. It supports only digits, and 6 special\nchars. Codabar is a self-checking barcode. This standard is very old. Common use\ncases are within airbills or photo labs where multi-part forms are used with\ndot-matrix printers.\n\n### CODE128\n\nCODE128 is a high density barcode.\n\nThis barcode has no length limitation. It supports the first 128 ascii\ncharacters. When used with printing characters it has an checksum which is\ncalculated modulo 103. This standard is used worldwide as it supports upper and\nlowercase characters.\n\n### CODE25\n\nOften called \"two of five\" or \"Code25 Industrial\".\n\nThis barcode has no length limitation. It supports only digits, and the last\ndigit can be an optional checksum which is calculated with modulo 10. This\nstandard is very old and nowadays not often used. Common use cases are within\nthe industry.\n\n### CODE25INTERLEAVED\n\nOften called \"Code 2 of 5 Interleaved\".\n\nThis standard is a variant of CODE25. It has no length limitation, but it must\ncontain an even amount of characters. It supports only digits, and the last\ndigit can be an optional checksum which is calculated with modulo 10. It is used\nworldwide and common on the market.\n\n### CODE39\n\nCODE39 is one of the oldest available codes.\n\nThis barcode has a variable length. It supports digits, upper cased alphabetical\ncharacters and 7 special characters like whitespace, point and dollar sign. It\ncan have an optional checksum which is calculated with modulo 43. This standard\nis used worldwide and common within the industry.\n\n### CODE39EXT\n\nCODE39EXT is an extension of CODE39.\n\nThis barcode has the same properties as CODE39. Additionally it allows the usage\nof all 128 ASCII characters. This standard is used worldwide and common within\nthe industry.\n\n### CODE93\n\nCODE93 is the successor of CODE39.\n\nThis barcode has a variable length. It supports digits, alphabetical characters\nand 7 special characters. It has an optional checksum which is calculated with\nmodulo 47 and contains 2 characters. This standard produces a denser code than\nCODE39 and is more secure.\n\n### CODE93EXT\n\nCODE93EXT is an extension of CODE93.\n\nThis barcode has the same properties as CODE93. Additionally it allows the usage\nof all 128 ASCII characters. This standard is used worldwide and common within\nthe industry.\n\n### EAN2\n\nEAN is the shortcut for \"European Article Number\".\n\nThese barcode must have 2 characters. It supports only digits and does not have\na checksum. This standard is mainly used as addition to EAN13 (ISBN) when\nprinted on books.\n\n### EAN5\n\nEAN is the shortcut for \"European Article Number\".\n\nThese barcode must have 5 characters. It supports only digits and does not have\na checksum. This standard is mainly used as addition to EAN13 (ISBN) when\nprinted on books.\n\n### EAN8\n\nEAN is the shortcut for \"European Article Number\".\n\nThese barcode can have 7 or 8 characters. It supports only digits. When it has a\nlength of 8 characters it includes a checksum. This standard is used worldwide\nbut has a very limited range. It can be found on small articles where a longer\nbarcode could not be printed.\n\n### EAN12\n\nEAN is the shortcut for \"European Article Number\".\n\nThis barcode must have a length of 12 characters. It supports only digits, and\nthe last digit is always a checksum which is calculated with modulo 10. This\nstandard is used within the USA and common on the market. It has been superseded\nby EAN13.\n\n### EAN13\n\nEAN is the shortcut for \"European Article Number\".\n\nThis barcode must have a length of 13 characters. It supports only digits, and\nthe last digit is always a checksum which is calculated with modulo 10. This\nstandard is used worldwide and common on the market.\n\n### EAN14\n\nEAN is the shortcut for \"European Article Number\".\n\nThis barcode must have a length of 14 characters. It supports only digits, and\nthe last digit is always a checksum which is calculated with modulo 10. This\nstandard is used worldwide and common on the market. It is the successor for\nEAN13.\n\n### EAN18\n\nEAN is the shortcut for \"European Article Number\".\n\nThis barcode must have a length of 18 characters. It support only digits. The\nlast digit is always a checksum digit which is calculated with modulo 10. This\ncode is often used for the identification of shipping containers.\n\n### GTIN12\n\nGTIN is the shortcut for \"Global Trade Item Number\".\n\nThis barcode uses the same standard as EAN12 and is its successor. It's commonly\nused within the USA.\n\n### GTIN13\n\nGTIN is the shortcut for \"Global Trade Item Number\".\n\nThis barcode uses the same standard as EAN13 and is its successor. It is used\nworldwide by industry.\n\n### GTIN14\n\nGTIN is the shortcut for \"Global Trade Item Number\".\n\nThis barcode uses the same standard as EAN14 and is its successor. It is used\nworldwide and common on the market.\n\n### IDENTCODE\n\nIdentcode is used by Deutsche Post and DHL. It's an specialized implementation of Code25.\n\nThis barcode must have a length of 12 characters. It supports only digits, and\nthe last digit is always a checksum which is calculated with modulo 10. This\nstandard is mainly used by the companies DP and DHL.\n\n### INTELLIGENTMAIL\n\nIntelligent Mail is a postal barcode.\n\nThis barcode can have a length of 20, 25, 29 or 31 characters. It supports only\ndigits, and contains no checksum. This standard is the successor of PLANET and\nPOSTNET. It is mainly used by the United States Postal Services.\n\n### ISSN\n\nISSN is the abbreviation for International Standard Serial Number.\n\nThis barcode can have a length of 8 or 13 characters. It supports only digits,\nand the last digit must be a checksum digit which is calculated with modulo 11.\nIt is used worldwide for printed publications.\n\n### ITF14\n\nITF14 is the GS1 implementation of an Interleaved Two of Five bar code.\n\nThis barcode is a special variant of Interleaved 2 of 5. It must have a length\nof 14 characters and is based on GTIN14. It supports only digits, and the last\ndigit must be a checksum digit which is calculated with modulo 10. It is used\nworldwide and common within the market.\n\n### LEITCODE\n\nLeitcode is used by Deutsche Post and DHL. It's an specialized implementation of Code25.\n\nThis barcode must have a length of 14 characters. It supports only digits, and\nthe last digit is always a checksum which is calculated with modulo 10. This\nstandard is mainly used by the companies DP and DHL.\n\n### PLANET\n\nPlanet is the abbreviation for Postal Alpha Numeric Encoding Technique.\n\nThis barcode can have a length of 12 or 14 characters. It supports only digits,\nand the last digit is always a checksum. This standard is mainly used by the\nUnited States Postal Services.\n\n### POSTNET\n\nPostnet is used by the US Postal Service.\n\nThis barcode can have a length of 6, 7, 10 or 12 characters. It supports only\ndigits, and the last digit is always a checksum. This standard is mainly used by\nthe United States Postal Services.\n\n### ROYALMAIL\n\nRoyalmail is used by Royal Mail.\n\nThis barcode has no defined length. It supports digits, uppercase letters, and\nthe last digit is always a checksum. This standard is mainly used by Royal Mail\nfor their Cleanmail Service. It is also called RM4SCC.\n\n### SSCC\n\nSSCC is the shortcut for \"Serial Shipping Container Code\".\n\nThis barcode is a variant of EAN barcode. It must have a length of 18 characters\nand supports only digits. The last digit must be a checksum digit which is\ncalculated with modulo 10. It is commonly used by the transport industry.\n\n### UPCA\n\nUPC is the shortcut for \"Universal Product Code\".\n\nThis barcode preceded EAN13. It must have a length of 12 characters and supports\nonly digits. The last digit must be a checksum digit which is calculated with\nmodulo 10. It is commonly used within the USA.\n\n### UPCE\n\nUPCE is the short variant from UPCA.\n\nThis barcode is a smaller variant of UPCA. It can have a length of 6, 7 or 8\ncharacters and supports only digits. When the barcode is 8 chars long it\nincludes a checksum which is calculated with modulo 10. It is commonly used with\nsmall products where a UPCA barcode would not fit.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Barcode`:\n\n- `adapter`: Sets the barcode adapter which will be used. Supported are all\n  above noted adapters. When using a self defined adapter, then you have to set\n  the complete class name.\n- `checksum`: `TRUE` when the barcode should contain a checksum. The default\n  value depends on the used adapter. Note that some adapters don't allow to set\n  this option.\n- `options`: Defines optional options for a self written adapters.\n\n## Basic usage\n\nTo validate if a given string is a barcode you must know its type. See the\nfollowing example for an EAN13 barcode:\n\n```php\n$valid = new Zend\\Validator\\Barcode('EAN13');\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n## Optional checksum\n\nSome barcodes can be provided with an optional checksum. These barcodes would be\nvalid even without checksum. Still, when you provide a checksum, then you should\nalso validate it. By default, these barcode types perform no checksum\nvalidation. By using the `checksum` option you can define if the checksum will\nbe validated or ignored.\n\n```php\n$valid = new Zend\\Validator\\Barcode([\n    'adapter'  => 'EAN13',\n    'checksum' => false,\n]);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n> ### Reduced security by disabling checksum validation\n>\n> By switching off checksum validation you will also reduce the security of the\n> used barcodes. Additionally you should note that you can also turn off the\n> checksum validation for those barcode types which must contain a checksum\n> value. Barcodes which would not be valid could then be returned as valid even\n> if they are not.\n\n## Writing custom adapters\n\nYou may write custom barcode validators for usage with `Zend\\Validator\\Barcode`;\nthis is often necessary when dealing with proprietary barcode types. To write\nyour own barcode validator, you need the following information.\n\n- `Length`: The length your barcode must have. It can have one of the following\n  values:\n    - `Integer`: A value greater 0, which means that the barcode must have this\n      length.\n    - `-1`: There is no limitation for the length of this barcode.\n    - `\"even\"`: The length of this barcode must have a even amount of digits.\n    - `\"odd\"`: The length of this barcode must have a odd amount of digits.\n    - `array`: An array of integer values. The length of this barcode must have\n    one of the set array values.\n- `Characters`: A string which contains all allowed characters for this barcode.\n  Also the integer value 128 is allowed, which means the first 128 characters of\n  the ASCII table.\n- `Checksum`: A string which will be used as callback for a method which does\n  the checksum validation.\n\nYour custom barcode validator must extend `Zend\\Validator\\Barcode\\AbstractAdapter`\nor implement `Zend\\Validator\\Barcode\\AdapterInterface`.\n\nAs an example, let's create a validator that expects an even number of\ncharacters that include all digits and the letters 'ABCDE', and which requires a\nchecksum.\n\n```php\nnamespace My\\Barcode;\n\nuse Zend\\Validator\\Barcode;\nuse Zend\\Validator\\Barcode\\AbstractAdapter;\n\nclass MyBar extends AbstractAdapter\n{\n    protected $length     = 'even';\n    protected $characters = '0123456789ABCDE';\n    protected $checksum   = 'mod66';\n\n    protected function mod66($barcode)\n    {\n        // do some validations and return a boolean\n    }\n}\n\n$valid = Barcode(MyBar::class);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/between.md",
    "content": "# Between Validator\n\n`Zend\\Validator\\Between` allows you to validate if a given value is between two\nother values.\n\n> ### Only supports number validation\n>\n> `Zend\\Validator\\Between` supports only the validation of numbers. Strings or\n> dates can not be validated with this validator.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Between`:\n\n- `inclusive`: Defines if the validation is inclusive of the minimum and maximum\n  border values, or exclusive. It defaults to `true`.\n- `max`: Sets the maximum border for the validation.\n- `min`: Sets the minimum border for the validation.\n\n## Default behaviour\n\nPer default, this validator checks if a value is between `min` and `max` where\nboth border values are allowed as value.\n\n```php\n$valid  = new Zend\\Validator\\Between(['min' => 0, 'max' => 10]);\n$value  = 10;\n$result = $valid->isValid($value);\n// returns true\n```\n\nIn the above example, the result is `true` due to the reason that the default\nsearch is inclusive of the border values. This means in our case that any value\nfrom '0' to '10' is allowed; values like '-1' and '11' will return `false`.\n\n## Excluding border values\n\nSometimes it is useful to validate a value by excluding the border values. See\nthe following example:\n\n```php\n$valid  = new Zend\\Validator\\Between([\n    'min' => 0,\n    'max' => 10,\n    'inclusive' => false,\n]);\n$value  = 10;\n$result = $valid->isValid($value);\n// returns false\n```\n\nThe example above is almost identical to our first example, but we now exclue\nthe border values; as such, the values '0' and '10' are no longer allowed and\nwill return `false`.\n"
  },
  {
    "path": "docs/book/validators/callback.md",
    "content": "# Callback Validator\n\n`Zend\\Validator\\Callback` allows you to provide a callback with which to\nvalidate a given value.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Callback`:\n\n- `callback`: Sets the callback which will be called for the validation.\n- `options`: Sets the additional options which will be given to the validator\n  and/or callback.\n\n## Basic usage\n\nThe simplest use case is to pass a function as a callback. Consider the\nfollowing function:\n\n```php\nfunction myMethod($value)\n{\n    // some validation\n    return true;\n}\n```\n\nTo use it within `Zend\\Validator\\Callback`, pass it to the constructor\n\n```php\n$valid = new Zend\\Validator\\Callback('myMethod');\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n## Usage with closures\n\nThe `Callback` validator supports any PHP callable, including PHP\n[closures](http://php.net/functions.anonymous).\n\n```php\n$valid = new Zend\\Validator\\Callback(function($value) {\n    // some validation\n    return true;\n});\n\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n## Usage with class-based callbacks\n\nOf course it's also possible to use a class method as callback. Consider the\nfollowing class definition:\n\n```php\nclass MyClass\n{\n    public function myMethod($value)\n    {\n        // some validation\n        return true;\n    }\n}\n```\n\nTo use it with the `Callback` validator, pass a callable using an instance of\nthe class:\n\n```php\n$valid = new Zend\\Validator\\Callback([new MyClass, 'myMethod']);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nYou may also define a static method as a callback. Consider the following class\ndefinition and validator usage:\n\n```php\nclass MyClass\n{\n    public static function test($value)\n    {\n        // some validation\n        return true;\n    }\n}\n\n$valid = new Zend\\Validator\\Callback(MyClass::class, 'test']);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nFinally, you may define the magic method `__invoke()` in your class. If you do\nso, you can provide a class instance itself as the callback:\n\n```php\nclass MyClass\n{\n    public function __invoke($value)\n    {\n        // some validation\n        return true;\n    }\n}\n\n$valid = new Zend\\Validator\\Callback(new MyClass());\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n## Adding options\n\n`Zend\\Validator\\Callback` also allows the usage of options which are provided as\nadditional arguments to the callback.\n\nConsider the following class and method definition:\n\n```php\nclass MyClass\n{\n    public static function myMethod($value, $option)\n    {\n        // some validation\n        return true;\n    }\n\n    /**\n     * Or, to use with contextual validation\n     */\n    public static function myMethod($value, $context, $option)\n    {\n        // some validation\n        return true;\n    }\n\n}\n```\n\nThere are two ways to inform the validator of additional options: pass them in\nthe constructor, or pass them to the `setOptions()` method.\n\nTo pass them to the constructor, you would need to pass an array containing two\nkeys, `callback` and `callbackOptions`:\n\n```php\n$valid = new Zend\\Validator\\Callback([\n    'callback'        => [MyClass::class, 'myMethod'],\n    'callbackOptions' => $options,\n]);\n\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nOtherwise, you may pass them to the validator after instantiation:\n\n```php\n$valid = new Zend\\Validator\\Callback([MyClass::class, 'myMethod']);\n$valid->setOptions($options);\n\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nWhen there are additional values given to `isValid()`, then these values will be\npassed as an additional argument:\n\n```php\n$valid = new Zend\\Validator\\Callback([MyClass::class, 'myMethod']);\n$valid->setOptions($options);\n\nif ($valid->isValid($input, $context)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nWhen making the call to the callback, the value to be validated will always be\npassed as the first argument to the callback followed by all other values given\nto `isValid()`; all other options will follow it. The amount and type of options\nwhich can be used is not limited.\n"
  },
  {
    "path": "docs/book/validators/credit-card.md",
    "content": "# CreditCard Validator\n\n`Zend\\Validator\\CreditCard` allows you to validate if a given value could be a\ncredit card number.\n\nA credit card contains several items of metadata, including a hologram, account\nnumber, logo, expiration date, security code, and the card holder name. The\nalgorithms for verifying the combination of metadata are only known to the\nissuing company, and should be verified with them for purposes of payment.\nHowever, it's often useful to know whether or not a given number actually falls\nwithin the ranges of possible numbers **prior** to performing such verification,\nand, as such, `Zend\\Validator\\CreditCard` verifies that the credit card number\nprovided is well-formed.\n\nFor those cases where you have a service that can perform comprehensive\nverification, `Zend\\Validator\\CreditCard` also provides the ability to attach a\nservice callback to trigger once the credit card number has been deemed valid;\nthis callback will then be triggered, and its return value will determine\noverall validity.\n\nThe following issuing institutes are accepted:\n\n- American Express\n- China UnionPay\n- Diners Club Card Blanche\n- Diners Club International\n- Diners Club US and Canada\n- Discover Card\n- JCB\n- Laser\n- Maestro\n- MasterCard\n- Solo\n- Visa\n- Visa Electron\n- Russia Mir\n\n> ### Invalid institutes\n>\n> The institutes **Bankcard** and **Diners Club enRoute** no longer exist, and\n> are treated as invalid.\n>\n> **Switch** has been rebranded to **Visa** and is therefore also treated as\n> invalid.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\CreditCard`:\n\n- `service`: A callback to an online service which will additionally be used for\n  the validation.\n- `type`: The type of credit card which will be validated. See the below list of\n  institutes for details.\n\n## Basic usage\n\nThere are several credit card institutes which can be validated by\n`Zend\\Validator\\CreditCard`. Per default, all known institutes will be accepted.\nSee the following example:\n\n```php\n$valid = new Zend\\Validator\\CreditCard();\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nThe above example would validate against all known credit card institutes.\n\n## Accepting only specific credit cards\n\nSometimes it is necessary to accept only specific credit card institutes instead\nof all; e.g., when you have a webshop which accepts only Visa and American\nExpress cards. `Zend\\Validator\\CreditCard` allows you to do exactly this by\nlimiting it to exactly these institutes.\n\nTo use a limitation you can either provide specific institutes at initiation, or\nafterwards by using `setType()`. Each can take several arguments.\n\nYou can provide a single institute:\n\n```php\nuse Zend\\Validator\\CreditCard;\n\n$valid = new CreditCard(CreditCard::AMERICAN_EXPRESS);\n```\n\nWhen you want to allow multiple institutes, then you can provide them as array:\n\n```php\nuse Zend\\Validator\\CreditCard;\n\n$valid = new CreditCard([\n    CreditCard::AMERICAN_EXPRESS,\n    CreditCard::VISA\n]);\n```\n\nAnd, as with all validators, you can also pass an associative array of options\nor an instance of `Traversable`. In this case you have to provide the institutes\nwith the `type` array key as demostrated here:\n\n```php\nuse Zend\\Validator\\CreditCard;\n\n$valid = new CreditCard([\n    'type' => [CreditCard::AMERICAN_EXPRESS]\n]);\n```\n\nYou can also manipulate institutes after instantiation by using the methods\n`setType()`, `addType()`, and `getType()`.\n\n```php\nuse Zend\\Validator\\CreditCard;\n\n$valid = new CreditCard();\n$valid->setType([\n    CreditCard::AMERICAN_EXPRESS,\n    CreditCard::VISA\n]);\n```\n\n> ### Default institute\n>\n> When no institute is given at initiation then `ALL` will be used, which sets\n> all institutes at once.\n>\n> In this case the usage of `addType()` is useless because all institutes are\n> already added.\n\n## Validation using APIs\n\nAs said before `Zend\\Validator\\CreditCard` will only validate the credit card\nnumber. Fortunately, some institutes provide online APIs which can validate a\ncredit card number by using algorithms which are not available to the public.\nMost of these services are paid services. Therefore, this check is deactivated\nper default.\n\nWhen you have access to such an API, then you can use it as an add on for\n`Zend\\Validator\\CreditCard` and increase the security of the validation.\n\nTo do so, provide a callback to invoke when generic validation has passed. This\nprevents the API from being called for invalid numbers, which increases the\nperformance of the application.\n\n`setService()` sets a new service, and `getService()` returns the set service.\nAs a configuration option, you can give the array key `service` at instantiatio.\nFor details about possible options, read the\n[Callback validator documentation](callback.md).\n\n```php\nuse Zend\\Validator\\CreditCard;\n\n// Your service class\nclass CcService\n{\n    public function checkOnline($cardnumber, $types)\n    {\n        // some online validation\n    }\n}\n\n// The validation\n$service = new CcService();\n$valid   = new CreditCard(CreditCard::VISA);\n$valid->setService([$service, 'checkOnline']);\n```\n\nThe callback method will be called with the credit card number as the first\nparameter, and the accepted types as the second parameter.\n"
  },
  {
    "path": "docs/book/validators/date.md",
    "content": "# Date Validator\n\n`Zend\\Validator\\Date` allows you to validate if a given value contains a date.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Date`:\n\n- `format`: Sets the format which is used to write the date.\n- `locale`: Sets the locale which will be used to validate date values.\n\n## Default date validation\n\nThe easiest way to validate a date is by using the default date format,\n`Y-m-d`.\n\n```php\n$validator = new Zend\\Validator\\Date();\n\n$validator->isValid('2000-10-10');   // returns true\n$validator->isValid('10.10.2000'); // returns false\n```\n\n## Specifying a date format\n\n`Zend\\Validator\\Date` also supports custom date formats. When you want to\nvalidate such a date, use the `format` option. This option accepts any format\nallowed by the PHP [DateTime::createFromFormat()](http://php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters) method.\n\n```php\n$validator = new Zend\\Validator\\Date(['format' => 'Y']);\n\n$validator->isValid('2010'); // returns true\n$validator->isValid('May');  // returns false\n```\n\n## Strict mode\n\n- **Since 2.13.0**\n\nBy default, `Zend\\Validator\\Date` only validates that it can convert the\nprovided value to a valid `DateTime` value.\n\nIf you want to require that the date is specified in a specific format, you can\nprovide both the [date format](#specifying-a-date-format) and the `strict`\noptions. In such a scenario, the value must both be covertable to a `DateTime`\nvalue **and** be in the same format as provided to the validator. (Generally,\nthis will mean the value must be a string.)\n\n```php\n$validator = new Zend\\Validator\\Date(['format' => 'Y-m-d', 'strict' => true]);\n\n$validator->isValid('2010-10-10'); // returns true\n$validator->isValid(new DateTime('2010-10-10)); // returns false; value is not a string\n$validator->isValid('2010.10.10'); // returns false; format differs\n```\n"
  },
  {
    "path": "docs/book/validators/db.md",
    "content": "# Db\\\\RecordExists and Db\\\\NoRecordExists Validators\n\n`Zend\\Validator\\Db\\RecordExists` and `Zend\\Validator\\Db\\NoRecordExists` provide\na means to test whether a record exists in a given table of a database, with a\ngiven value.\n\n> ### Installation requirements\n>\n> `Zend\\Validator\\Db\\NoRecordExists` and `Zend\\Validator\\Db\\RecordExists`\n> depends on the zend-db component, so be sure to have it installed before\n> getting started:\n>\n> ```bash\n> $ composer require zendframework/zend-db\n> ```\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Db\\NoRecordExists` and\n`Zend\\Validator\\Db\\RecordExists`:\n\n- `adapter`: The database adapter that will be used for the search.\n- `exclude`: Sets records that will be excluded from the search.\n- `field`: The database field within this table that will be searched for the record.\n- `schema`: Sets the schema that will be used for the search.\n- `table`: The table that will be searched for the record.\n\n## Basic usage\n\nAn example of basic usage of the validators:\n\n```php\n// Check that the email address exists in the database\n$validator = new Zend\\Validator\\Db\\RecordExists([\n    'table'   => 'users',\n    'field'   => 'emailaddress',\n    'adapter' => $dbAdapter,\n]);\n\nif ($validator->isValid($emailaddress)) {\n    // email address appears to be valid\n} else {\n    // email address is invalid; print the reasons\n    foreach ($validator->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThe above will test that a given email address is in the database table. If no\nrecord is found containing the value of `$emailaddress` in the specified column,\nthen an error message is displayed.\n\n```php\n// Check that the username is not present in the database\n$validator = new Zend\\Validator\\Db\\NoRecordExists([\n    'table'   => 'users',\n    'field'   => 'username',\n    'adapter' => $dbAdapter,\n]);\n\nif ($validator->isValid($username)) {\n    // username appears to be valid\n} else {\n    // username is invalid; print the reason\n    $messages = $validator->getMessages();\n    foreach ($messages as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThe above will test that a given username is *not* in the database table. If a\nrecord is found containing the value of `$username` in the specified column,\nthen an error message is displayed.\n\n## Excluding records\n\n`Zend\\Validator\\Db\\RecordExists` and `Zend\\Validator\\Db\\NoRecordExists` also\nprovide a means to test the database, excluding a part of the table, either by\nproviding a `WHERE` clause as a string, or an array with the keys `field` and\n`value`.\n\nWhen providing an array for the exclude clause, the `!=` operator is used, so\nyou can check the rest of a table for a value before altering a record (for\nexample on a user profile form)\n\n```php\n// Check no other users have the username\n$user_id   = $user->getId();\n$validator = new Zend\\Validator\\Db\\NoRecordExists([\n    'table' => 'users',\n    'field' => 'username',\n    'exclude' => [\n        'field' => 'id',\n        'value' => $user_id,\n    ],\n]);\n\nif ($validator->isValid($username)) {\n    // username appears to be valid\n} else {\n    // username is invalid; print the reason\n    $messages = $validator->getMessages();\n    foreach ($messages as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThe above example will check the table to ensure no records other than the one\nwhere `id = $user_id` contains the value `$username`.\n\nYou can also provide a string to the exclude clause so you can use an operator\nother than `!=`. This can be useful for testing against composite keys.\n\n```php\n$email     = 'user@example.com';\n$clause    = $dbAdapter->quoteIdentifier('email') . ' = ' . $dbAdapter->quoteValue($email);\n$validator = new Zend\\Validator\\Db\\RecordExists([\n    'table'   => 'users',\n    'field'   => 'username',\n    'adapter' => $dbAdapter,\n    'exclude' => $clause,\n]);\n\nif ($validator->isValid($username)) {\n    // username appears to be valid\n} else {\n    // username is invalid; print the reason\n    $messages = $validator->getMessages();\n    foreach ($messages as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThe above example will check the `users` table to ensure that only a record with\nboth the username `$username` and with the email `$email` is valid.\n\n## Database Schemas\n\nYou can specify a schema within your database for adapters such as PostgreSQL\nand DB/2 by supplying an array with `table` and `schema` keys, as demonstrated\nbelow:\n\n```php\n$validator = new Zend\\Validator\\Db\\RecordExists([\n    'table'  => 'users',\n    'schema' => 'my',\n    'field'  => 'id',\n]);\n```\n\n## Using a Select object\n\nIt is also possible to supply the validators with a `Zend\\Db\\Sql\\Select` object\nin place of options. The validator then uses this object instead of building its\nown. This allows for greater flexibility with selection of records used for\nvalidation.\n\n```php\nuse Zend\\Db\\Sql\\Select;\nuse Zend\\Validator\\Db\\RecordExists;\n\n$select = new Select();\n$select\n    ->from('users')\n    ->where->equalTo('id', $user_id)\n    ->where->equalTo('email', $email);\n\n$validator = new RecordExists($select);\n\n// We still need to set our database adapter\n$validator->setAdapter($dbAdapter);\n\n// Validation is then performed as usual\nif ($validator->isValid($username)) {\n    // username appears to be valid\n} else {\n    // username is invalid; print the reason\n    $messages = $validator->getMessages();\n    foreach ($messages as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThe above example will check the `users` table to ensure that only a record with\nboth the username `$username` and with the email `$email` is valid.\n"
  },
  {
    "path": "docs/book/validators/digits.md",
    "content": "# Digits Validator\n\n`Zend\\Validator\\Digits` validates if a given value contains only digits.\n\n> ### Installation requirements\n>\n> `Zend\\Validator\\Digits` depends on the zend-filter component, so be sure to\n> have it installed before getting started:\n>\n> ```bash\n> $ composer require zendframework/zend-filter\n> ```\n\n## Supported options\n\nThere are no additional options for `Zend\\Validator\\Digits`:\n\n## Validating digits\n\nTo validate if a given value contains only digits and no other characters,\ncall the validator as shown below:\n\n```php\n$validator = new Zend\\Validator\\Digits();\n\n$validator->isValid(\"1234567890\"); // returns true\n$validator->isValid(1234);         // returns true\n$validator->isValid('1a234');      // returns false\n```\n\n> ### Validating numbers\n>\n> When you want to validate numbers or numeric values, be aware that this\n> validator only validates *digits*. This means that any other sign like a\n> thousand separator or a comma will not pass this validator. In this case you\n> should use `Zend\\I18n\\Validator\\IsInt` or `Zend\\I18n\\Validator\\IsFloat`.\n"
  },
  {
    "path": "docs/book/validators/email-address.md",
    "content": "# EmailAddress Validator\n\n`Zend\\Validator\\EmailAddress` allows you to validate an email address. The\nvalidator first splits the email address on `local-part @ hostname` and attempts\nto match these against known specifications for email addresses and hostnames.\n\n## Basic usage\n\nA basic example of usage is below:\n\n```php\n$validator = new Zend\\Validator\\EmailAddress();\n\nif ($validator->isValid($email)) {\n    // email appears to be valid\n} else {\n    // email is invalid; print the reasons\n    foreach ($validator->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThis will match the email address `$email` and on failure populate\n`getMessages()` with useful error messages.\n\n## Supported Options\n\n`Zend\\Validator\\EmailAddress` supports several options which can either be set\nat instantiation, by giving an array with the related options, or afterwards, by\nusing `setOptions()`. The following options are supported:\n\n- `allow`: Defines which type of domain names are accepted. This option is used\n  in conjunction with the hostnameValidator option to set the hostname validator.\n  Possible values of this option defined in [Hostname](hostname.md) validator's\n  `ALLOW_*` constants:\n    - `ALLOW_DNS` (default) - Allows Internet domain names _(e.g. example.com)_\n    - `ALLOW_IP` - Allows IP addresses _(e.g. 192.168.0.1)_\n    - `ALLOW_LOCAL` - Allows local network such as _localhost_ or _www.localdomain_\n    - `ALLOW_URI`  - Allows hostnames in URI generic syntax. See [RFC 3986](https://www.ietf.org/rfc/rfc3986.txt)\n    - `ALLOW_ALL` - Allows all types of hostnames\n\n- `useDeepMxCheck`: Defines if the servers MX records should be verified by a deep check.\n  When this option is set to `true` then additionally to MX records also the `A`,\n  `A6` and `AAAA` records are used to verify if the server accepts emails. This\n  option defaults to `false`.\n- `useDomainCheck`: Defines if the domain part should be checked. When this option is\n  set to `false`, then only the local part of the email address will be checked.\n  In this case the hostname validator will not be called. This option defaults\n  to `true`.\n- `hostnameValidator`: Sets the hostname validator object instance with which the\n  domain part of the email address will be validated.\n- `useMxCheck`: Defines if the MX records from the server should be detected. If this\n  option is defined to `true` then the MX records are used to verify if the\n  server accepts emails. This option defaults to `false`.\n\n\n## Complex local parts\n\n`Zend\\Validator\\EmailAddress` will match any valid email address according to\nRFC2822. For example, valid emails include `bob@domain.com`,\n`bob+jones@domain.us`, `\"bob@jones\"@domain.com*` and `\"bob jones\"@domain.com`\n\nSome obsolete email formats will not currently validate (e.g. carriage returns\nor a `\\\\` character in an email address).\n\n## Validating only the local part\n\nIf you need `Zend\\Validator\\EmailAddress` to check only the local part of an\nemail address, and want to disable validation of the hostname, you can set the\n`domain` option to `false`. This forces `Zend\\Validator\\EmailAddress` not to\nvalidate the hostname part of the email address.\n\n```php\n$validator = new Zend\\Validator\\EmailAddress();\n$validator->setOptions(['domain' => FALSE]);\n```\n\n## Validating different types of hostnames\n\nThe hostname part of an email address is validated against the [Hostname validator](hostname.md).\nBy default only DNS hostnames of the form `domain.com` are accepted, though if\nyou wish you can accept IP addresses and Local hostnames too.\n\nTo do this you need to instantiate `Zend\\Validator\\EmailAddress` passing a\nparameter to indicate the type of hostnames you want to accept. More details are\nincluded in `Zend\\Validator\\Hostname`, though an example of how to accept both\nDNS and Local hostnames appears below:\n\n```php\nuse Zend\\Validator\\EmailAddress;\nuse Zend\\Validator\\Hostname;\n\n$validator = new EmailAddress( Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL);\n\nif ($validator->isValid($email)) {\n    // email appears to be valid\n} else {\n    // email is invalid; print the reasons\n    foreach ($validator->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\n## Checking if the hostname actually accepts email\n\nJust because an email address is in the correct format, it doesn't necessarily\nmean that email address actually exists. To help solve this problem, you can use\nMX validation to check whether an MX (email) entry exists in the DNS record for\nthe email's hostname. This tells you that the hostname accepts email, but\ndoesn't tell you the exact email address itself is valid.\n\nMX checking is not enabled by default. To enable MX checking you can pass a\nsecond parameter to the `Zend\\Validator\\EmailAddress` constructor.\n\n```php\n$validator = new Zend\\Validator\\EmailAddress([\n    'allow' => Zend\\Validator\\Hostname::ALLOW_DNS,\n    'useMxCheck'    => true,\n]);\n```\n\nAlternatively you can either pass `true` or `false` to `setValidateMx()` to\nenable or disable MX validation.\n\nBy enabling this setting, network functions will be used to check for the\npresence of an MX record on the hostname of the email address you wish to\nvalidate. Please be aware this will likely slow your script down.\n\nSometimes validation for MX records returns `false`, even if emails are\naccepted. The reason behind this behaviour is, that servers can accept emails\neven if they do not provide a MX record. In this case they can provide `A`,\n`A6`, or `AAAA` records. To allow `Zend\\Validator\\EmailAddress` to check also\nfor these other records, you need to set deep MX validation. This can be done at\ninitiation by setting the `deep` option or by using `setOptions()`.\n\n```php\n$validator = new Zend\\Validator\\EmailAddress([\n    'allow' => Zend\\Validator\\Hostname::ALLOW_DNS,\n    'useMxCheck'    => true,\n    'useDeepMxCheck'  => true,\n]);\n```\n\nSometimes it can be useful to get the server's MX information which have been\nused to do further processing. Simply use `getMXRecord()` after validation. This\nmethod returns the received MX record including weight and sorted by it.\n\n> ### Performance warning**\n>\n> You should be aware that enabling MX check will slow down you script because\n> of the used network functions. Enabling deep check will slow down your script\n> even more as it searches the given server for 3 additional types.\n\n> ### Disallowed IP addresses\n>\n> You should note that MX validation is only accepted for external servers. When\n> deep MX validation is enabled, then local IP addresses like `192.168.*` or\n> `169.254.*` are not accepted.\n\n## Validating International Domains Names\n\n`Zend\\Validator\\EmailAddress` will also match international characters that\nexist in some domains. This is known as International Domain Name (IDN) support.\nThis is enabled by default, though you can disable this by changing the setting\nvia the internal `Zend\\Validator\\Hostname` object that exists within\n`Zend\\Validator\\EmailAddress`.\n\n```php\n$validator->getHostnameValidator()->setValidateIdn(false);\n```\n\nMore information on the usage of `setValidateIdn()` appears in the\n[Hostname documentation](hostname.md).\n\nPlease note IDNs are only validated if you allow DNS hostnames to be validated.\n\n## Validating Top Level Domains\n\nBy default a hostname will be checked against a list of known TLDs. This is\nenabled by default, though you can disable this by changing the setting via the\ninternal `Zend\\Validator\\Hostname` object that exists within\n`Zend\\Validator\\EmailAddress`.\n\n```php\n$validator->getHostnameValidator()->setValidateTld(false);\n```\n\nMore information on the usage of `setValidateTld()` appears in the\n[Hostname documentation](hostname.md).\n\nPlease note TLDs are only validated if you allow DNS hostnames to be validated.\n\n## Setting messages\n\n`Zend\\Validator\\EmailAddress` makes also use of `Zend\\Validator\\Hostname` to\ncheck the hostname part of a given email address. You can specify messages for\n`Zend\\Validator\\Hostname` from within `Zend\\Validator\\EmailAddress`.\n\n```php\n$validator = new Zend\\Validator\\EmailAddress();\n$validator->setMessages([\n    Zend\\Validator\\Hostname::UNKNOWN_TLD => 'I don\\'t know the TLD you gave'\n]);\n```\n"
  },
  {
    "path": "docs/book/validators/explode.md",
    "content": "# Explode Validator\n\n`Zend\\Validator\\Explode` executes a validator for each item exploded from an\narray.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Explode`:\n\n- `valueDelimiter`: Defines the delimiter used to explode values from an array.\n  It defaults to `,`. If the given value is an array, this option isn't used.\n- `validator`: Sets the validator that will be executed on each exploded item.\n  This may be a validator instance, or a validator service name.\n\n## Basic usage\n\nTo validate if every item in an array is in a specified haystack:\n\n```php\n$inArrayValidator = new Zend\\Validator\\InArray([\n    'haystack' => [1, 2, 3, 4, 5, 6],\n]);\n\n$explodeValidator = new Zend\\Validator\\Explode([\n    'validator' => $inArrayValidator\n]);\n\n$explodeValidator->isValid([1, 4, 6]);    // returns true\n$explodeValidator->isValid([1, 4, 6, 8]); // returns false\n```\n\n## Exploding strings\n\nTo validate if every e-mail in a string is contained in a list of names:\n\n```php\n$inEmailListValidator = new Zend\\Validator\\InArray([\n    'haystack' => ['joseph@test.com', 'mark@test.com', 'lucia@test.com'],\n]);\n\n$explodeValidator = new Zend\\Validator\\Explode([\n    'validator' => $inEmailListValidator,\n    'valueDelimiter' => ','\n]);\n\n$explodeValidator->isValid('joseph@test.com,mark@test.com'); // returns true\n$explodeValidator->isValid('lucia@test.com,maria@test.com');  // returns false\n```\n"
  },
  {
    "path": "docs/book/validators/file/count.md",
    "content": "# Count\n\n`Zend\\Validator\\File\\Count` allows you to validate that the number of files\nuploaded matches criteria, including a minimum number of files and/or a maximum\nnumber of files.\n\n## Supported Options\n\nThe following options are supported:\n\n- `min`: The minimum number of uploaded files acceptable; `null` is equivalent\n  to `0`, indicating no minimum.\n- `max`: The maximum number of uploaded files acceptable; `null` is equivalent\n  to no maximum.\n\n## Basic Usage\n\n```php\n$validator = new Zend\\Validator\\File\\Count([\n    'min' => 1,\n    'max' => 5,\n]);\n\n// Setting to the $_FILES superglobal; could also use the zend-http\n// request's `getFiles()` or PSR-7 ServerRequest's `getUploadedFiles()`.\n$files = $_FILES;\n\nif ($validator->isValid($files)) {\n    // Received between 1 and 5 files!\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/crc32.md",
    "content": "# Crc32\n\n`Zend\\Validator\\File\\Crc32` allows you to validate if a given file's hashed\ncontents matches the supplied crc32 hash(es). It is subclassed from the [Hash\nvalidator](hash.md) to provide a validator that only supports the `crc32`\nalgorithm.\n\n> ### Requires the hash extension\n>\n> This validator requires the PHP [Hash extension](http://php.net/hash) with the\n> `crc32` algorithm.\n\n## Supported Options\n\nThe following options are supported:\n\n- `hash`: Single string hash to test the file against, or array of filename/hash\n  pairs.\n\n## Usage Examples\n\n```php\n// Does file have the given hash?\n$validator = new \\Zend\\Validator\\File\\Crc32('3b3652f');\n\n// Or, check file against multiple hashes\n$validator = new \\Zend\\Validator\\File\\Crc32(['3b3652f', 'e612b69']);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n    // file is valid\n}\n```\n\n## Public Methods\n\n### getCrc32\n\n```php\ngetCrc32() : array\n```\n\nReturns an array of all currently registered hashes to test against.\n\n### addCrc32\n\n```php\naddCrc32(string|array $options) : void\n```\n\nAdd a single hash to test against, or a set of filename/hash pairs to test\nagainst.\n\n### setCrc32\n\n```php\nsetCrc32(string|array $options): void\n```\n\nOverwrite the current list of registered hashes with the one(s) provided.\n"
  },
  {
    "path": "docs/book/validators/file/exclude-extension.md",
    "content": "# ExcludeExtension\n\n`Zend\\Validator\\File\\ExcludeExtension` checks the extension of files. It will\nassert `false` when a given file matches any of the defined extensions.\n\nThis validator is inversely related to the [Extension validator](extension.md);\nplease refer to that validator for full options and usage examples.\n"
  },
  {
    "path": "docs/book/validators/file/exclude-mime-type.md",
    "content": "ExcludeMimeType\n===============\n\n`Zend\\Validator\\File\\ExcludeMimeType` checks the MIME type of files. It will\nassert `false` when a given file matches any of the defined MIME types.\n\nThis validator is inversely related to the [MimeType validator](mime-type.md);\nplease refer to that validator's documentation for full options and usage\nexamples.\n"
  },
  {
    "path": "docs/book/validators/file/exists.md",
    "content": "# Exists\n\n`Zend\\Validator\\File\\Exists` checks for the existence of files in specified\ndirectories.\n\nThis validator is inversely related to the [NotExists validator](not-exists.md).\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `directory`: Array of directories, or comma-delimited string  of directories.\n\n## Usage Examples\n\n```php\nuse Zend\\Validator\\File\\Exists;\n\n// Only allow files that exist in ~both~ directories\n$validator = new Exists('/tmp,/var/tmp');\n\n// ...or with array notation\n$validator = new Exists(['/tmp', '/var/tmp']);\n\n// Perform validation\nif ($validator->isValid('/tmp/myfile.txt')) {\n    // file is valid\n}\n```\n\n> ### Checks against all directories\n>\n> This validator checks whether the specified file exists in **all** of the\n> given directories; validation will fail if the file does not exist in one\n> or more of them.\n"
  },
  {
    "path": "docs/book/validators/file/extension.md",
    "content": "# Extension\n\n`Zend\\Validator\\File\\Extension` checks the extension of files. It will assert\n`true` when a given file matches any of the defined extensions.\n\nThis validator is inversely related to the\n[ExcludeExtension validator](exclude-extension.md).\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `extension`: Array of extensions, or comma-delimited string of extensions,\n  against which to test.\n- `case`: Boolean indicating whether or not extensions should match case\n  sensitively; defaults to `false` (case-insensitive).\n- `allowNonExistentFile`: (**Since 2.13.0**) Boolean indicating whether or not\n  to allow validating a filename for a non-existent file. Defaults to `false`\n  (will not validate non-existent files).\n\n## Usage Examples\n\n```php\nuse Zend\\Validator\\File\\Extension;\n\n// Allow files with 'php' or 'exe' extensions\n$validator = new Extension('php,exe');\n\n// ...or with array notation\n$validator = new Extension(['php', 'exe']);\n\n// Test with case-sensitivity on\n$validator = new Extension(['php', 'exe'], true);\n\n// Using an options array:\n$validator = new Extension([\n    'extension' => ['php', 'exe'],\n    'case' => true,\n]);\n\n// Perform validation\nif ($validator->isValid('./myfile.php')) {\n    // file is valid\n}\n```\n\n## Public Methods\n\n### addExtension\n\n```php\naddExtension(string|array $options) : void\n```\n\nAdd one or more extensions as a comma-separated list, or as an array.\n"
  },
  {
    "path": "docs/book/validators/file/files-size.md",
    "content": "# FilesSize\n\n`Zend\\Validator\\File\\FilesSize` allows validating the total size of all file\nuploads in aggregate, allowing specifying a minimum upload size and/or a maximum\nupload size.\n\nOnly use this validator if you will be expecting multiple file uploads in a\nsingle payload, and want to ensure the aggregate size falls within a specific\nrange.\n\n## Supported Options\n\n`Zend\\Validator\\File\\FilesSize` supports the following options:\n\n- `min`: The minimum aggregate size of all file uploads. May be specified as an\n  integer or using SI units. `null` indicates no minimum size is required.\n- `max`: The maximum aggregate size of all file uploads. May be specified as an\n  integer or using SI units. `null` indicates no maximum size is required.\n- `useByteString`: A flag indicating whether sizes should be reported as\n  integers or using SI units when reporting validation errors.\n\nSee the [Size validator](size.md#supported-options) for details on supported SI\nunits.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\FilesSize;\n\n$validator = new FilesSize([\n    'min' => '1kB`,  // minimum of 1kB\n    'max' => `10MB', // maximum of 10MB\n]);\n\nif ($validator->isValid($_FILES)) {\n    // > 1kB, < 10MB in aggregate\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/hash.md",
    "content": "# Hash\n\n`Zend\\Validator\\File\\Hash` allows you to validate if a given file's hashed\ncontents matches the supplied hash(es) and algorithm(s).\n\n> ### Requires the hash extension\n>\n> This validator requires the PHP [Hash extension](http://php.net/hash). A list\n> of supported hash algorithms can be found with the\n> [hash\\_algos() function](http://php.net/hash_algos).\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `hash`: String hash or array of hashes against which to test.\n- `algorithm`: String hashing algorithm to use; defaults to `crc32`\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\Hash;\n\n// Does file have the given hash?\n$validator = new Hash('3b3652f', 'crc32');\n\n// Or, check file against multiple hashes\n$validator = new Hash(['3b3652f', 'e612b69'], 'crc32');\n\n// Or use options notation:\n$validator = new Hash([\n    'hash' => ['3b3652f', 'e612b69'],\n    'algorithm' => 'crc32',\n]);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n   // file is valid\n}\n```\n\n## Public Methods\n\n### getHash\n\n```php\ngetHash() : array\n```\n\nReturns an array containing the set of hashes against which to validate.\n\n### addHash\n\n```php\naddHash(string|array $options) : void\n```\n\nAdd one or more hashes against which to validate.\n\n### setHash\n\n```php\nsetHash(string|array $options) : void\n```\n\nOverwrite the current set of hashes with those provided to the method.\n"
  },
  {
    "path": "docs/book/validators/file/image-size.md",
    "content": "# ImageSize\n\n`Zend\\Validator\\File\\ImageSize` checks the size of image files. Minimum and/or\nmaximum dimensions can be set to validate against.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `minWidth`: Set the minimum image width as an integer; `null` (the default)\n  indicates no minimum.\n- `minHeight`: Set the minimum image height as an integer; `null` (the default)\n  indicates no minimum.\n- `maxWidth`: Set the maximum image width as an integer; `null` (the default)\n  indicates no maximum.\n- `maxHeight`: Set the maximum image height as an integer; `null` (the default)\n  indicates no maximum.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\ImageSize;\n\n// Is image size between 320x200 (min) and 640x480 (max)?\n$validator = new ImageSize(320, 200, 640, 480);\n\n// ...or with array notation\n$validator = new ImageSize([\n    'minWidth' => 320,\n    'minHeight' => 200,\n    'maxWidth' => 640,\n    'maxHeight' => 480,\n]);\n\n// Is image size equal to or larger than 320x200?\n$validator = new ImageSize([\n    'minWidth' => 320,\n    'minHeight' => 200,\n]);\n\n// Is image size equal to or smaller than 640x480?\n$validator = new ImageSize([\n    'maxWidth' => 640,\n    'maxHeight' => 480,\n]);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.jpg')) {\n    // file is valid\n}\n```\n\n## Public Methods\n\n### getImageMin\n\n```php\ngetImageMin() : array\n```\n\nReturns the minimum valid dimensions as an array with the keys `width` and\n`height`.\n\n### getImageMax\n\n```php\ngetImageMax() : array\n```\n\nReturns the maximum valid dimensions as an array with the keys `width` and\n`height`.\n"
  },
  {
    "path": "docs/book/validators/file/intro.md",
    "content": "# File Validation Classes\n\nZend Framework comes with a set of classes for validating both files and\nuploaded files, such as file size validation and CRC checking.\n\n- [Count](count.md)\n- [crc32](crc32.md)\n- [ExcludeExtension](exclude-extension.md)\n- [ExcludeMimeType](exclude-mime-type.md)\n- [Exists](exists.md)\n- [Extension](extension.md)\n- [FilesSize](files-size.md)\n- [Hash](hash.md)\n- [ImageSize](image-size.md)\n- [IsCompressed](is-compressed.md)\n- [IsImage](is-image.md)\n- [Md5](md5.md)\n- [MimeType](mime-type.md)\n- [NotExists](not-exists.md)\n- [Sha1](sha1.md)\n- [Size](size.md)\n- [Upload](upload.md)\n- [UploadFile](upload-file.md)\n- [WordCount](word-count.md)\n\n> ### Validation argument\n>\n> All of the File validators' `isValid()` methods support both a file path\n> `string` *or* a `$_FILES` array as the supplied argument. When a `$_FILES`\n> array is passed in, the `tmp_name` is used for the file path.\n"
  },
  {
    "path": "docs/book/validators/file/is-compressed.md",
    "content": "# IsCompressed\n\n`Zend\\Validator\\File\\IsCompressed` checks if a file is a compressed archive,\nsuch as zip or gzip. This validator is based on the\n[MimeType validator](mime-type.md), and supports the same methods and options.\n\nThe default list of [compressed file MIME types](https://github.com/zendframework/zend-validator/blob/master/src/File/IsCompressed.php#L45)\ncan be found in the source code.\n\nPlease refer to the [MimeType validator](mime-type.md) for options and public\nmethods.\n\n## Basic Usage\n\n```php\n$validator = new \\Zend\\Validator\\File\\IsCompressed();\n\nif ($validator->isValid('./myfile.zip')) {\n    // file is valid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/is-image.md",
    "content": "# IsImage\n\n`Zend\\Validator\\File\\IsImage` checks if a file is an image, such as jpg or png.\nThis validator is based on the [MimeType validator](mime-type.md) and supports\nthe same methods and options.\n\nThe default list of [image file MIME types](https://github.com/zendframework/zend-validator/blob/master/src/File/IsImage.php#L44)\ncan be found in the source code.\n\nPlease refer to the [MimeType validator](mime-type.md) for options and public\nmethods.\n\n## Basic Usage\n\n```php\n$validator = new Zend\\Validator\\File\\IsImage();\n\nif ($validator->isValid('./myfile.jpg')) {\n    // file is valid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/md5.md",
    "content": "# Md5\n\n`Zend\\Validator\\File\\Md5` allows you to validate if a given file's hashed\ncontents matches the supplied md5 hash(es). It is subclassed from the\n[Hash validator](hash.md) to provide a validator that supports only the MD5\nalgorithm.\n\n> ### Requires the hash extension\n>\n> This validator requires the PHP [Hash extension](http://php.net/hash) PHP with\n> the `md5` algorithm.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `hash`: String hash or array of hashes against which to validate.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\Md5;\n\n// Does file have the given hash?\n$validator = new Md5('3b3652f336522365223');\n\n// Or, check file against multiple hashes\n$validator = new Md5([\n    '3b3652f336522365223', 'eb3365f3365ddc65365'\n]);\n\n// Or use options notation:\n$validator = new Md5(['hash' => [\n    '3b3652f336522365223', 'eb3365f3365ddc65365'\n]]);\n\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n    // file is valid\n}\n```\n\n## Public Methods\n\n### getMd5\n\n```php\ngetMd5() : array\n```\n\nReturns an array of MD5 hashes against which to validate.\n\n### addMd5\n\n```php\naddMd5(string|array $options) : void\n```\n\nAdd one or more hashes to validate against.\n\n### setMd5\n\n```php\nsetMd5(string|array $options) : void\n```\n\nOverwrite any previously set hashes with those specified.\n"
  },
  {
    "path": "docs/book/validators/file/mime-type.md",
    "content": "# MimeType\n\n`Zend\\Validator\\File\\MimeType` checks the MIME type of files. It will assert\n`true` when a given file matches any defined MIME type.\n\nThis validator is inversely related to the\n[ExcludeMimeType validator](exclude-mime-type.md)\n\n> ### Compatibility\n>\n> This component will use the `FileInfo` extension if it is available. If it's\n> not, it will degrade to the `mime_content_type()` function. And if the\n> function call fails, it will use the MIME type which is given by HTTP. You\n> should be aware of possible security problems when you do not have `FileInfo`\n> or `mime_content_type()` available; the MIME type given by HTTP is not secure\n> and can be easily manipulated.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `mimeType`: Comma-delimited string of MIME types, or array of MIME types,\n  against which to test. Types can be specific (e.g., `image/jpeg`), or refer\n  only to the group (e.g., `image`).\n- `magicFile`: Location of the magicfile to use for MIME type comparisons;\n  defaults to the value of the `MAGIC` constant.\n- `enableHeaderCheck`: Boolean flag indicating whether or not to use HTTP\n  headers when determining the MIME type if neither the `FileInfo` nor\n  `mime_magic` extensions are available; defaults to `false`.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\MimeType;\n\n// Only allow 'gif' or 'jpg' files\n$validator = new MimeType('image/gif,image/jpeg');\n\n// ... or with array notation:\n$validator = new MimeType(['image/gif', 'image/jpeg']);\n\n// ... or restrict to  entire group of types:\n$validator = new MimeType(['image', 'audio']);\n\n// Specify a different magicFile:\n$validator = new MimeType([\n    'mimeType' => ['image/gif', 'image/jpeg'],\n    'magicFile' => '/path/to/magicfile.mgx',\n]);\n\n// Enable HTTP header scanning (do not do this!):\n$validator = new MimeType([\n    'mimeType' => ['image/gif', 'image/jpeg'],\n    'enableHeaderCheck' => true,\n]);\n\n// Perform validation\nif ($validator->isValid('./myfile.jpg')) {\n    // file is valid\n}\n```\n\n> ### Validating MIME groups is potentially dangerous\n>\n> Allowing \"groups\" of MIME types will accept **all** members of this group, even\n> if your application does not support them. For instance, When you allow\n> `image` you also allow `image/xpixmap` and `image/vasa`, both of which could\n> be problematic.\n"
  },
  {
    "path": "docs/book/validators/file/not-exists.md",
    "content": "# NotExists\n\n`Zend\\Validator\\File\\NotExists` checks for the existence of files in specified\ndirectories.\n\nThis validator is inversely related to the [Exists validator](exists.md).\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `directory`: Array of directories or comma-delimited string of directories\n  against which to validate.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\NotExists;\n\n// Only allow files that do not exist in ~either~ directories\n$validator = new NotExists('/tmp,/var/tmp');\n\n// ... or with array notation:\n$validator = new NotExists(['/tmp', '/var/tmp']);\n\n// ... or using options notation:\n$validator = new NotExists(['directory' => [\n    '/tmp',\n    '/var/tmp',\n]]);\n\n// Perform validation\nif ($validator->isValid('/home/myfile.txt')) {\n    // file is valid\n}\n```\n\n> ### Checks against all directories\n>\n> This validator checks whether the specified file does not exist in **any** of\n> the given directories; validation will fail if the file exists in one (or\n> more) of the given directories.\n"
  },
  {
    "path": "docs/book/validators/file/sha1.md",
    "content": "# Sha1\n\n`Zend\\Validator\\File\\Sha1` allows you to validate if a given file's hashed\ncontents matches the supplied sha1 hash(es). It is subclassed from the\n[Hash validator](hash.md) to provide a validator that only supports the `sha1`\nalgorithm.\n\n> ### Requires the hash extension\n>\n> This validator requires the PHP [Hash extension](http://php.net/hash) with the\n> `sha1` algorithm.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `hash`: String hash or array of hashes against which to validate.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\Sha1;\n\n// Does file have the given hash?\n$validator = new Sha1('3b3652f336522365223');\n\n// Or check file against multiple hashes:\n$validator = new Sha1([\n    '3b3652f336522365223',\n    'eb3365f3365ddc65365',\n]);\n\n// Or using options notation:\n$validator = new Sha1(['hash' => [\n    '3b3652f336522365223',\n    'eb3365f3365ddc65365',\n]]);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n    // file is valid\n}\n```\n\n## Public Methods\n\n### getSha1\n\n```php\ngetSha1() : array\n```\n\nReturns an array of sha1 hashes against which to validate.\n\n### addSha1\n\n```php\naddSha1(string|array $options) : void\n```\n\nAdd one or more hashes to validate against.\n\n### setSha1\n\n```php\nsetSha1(string|array $options) : void\n```\n\nOverwrite any previously set hashes with those specified.\n"
  },
  {
    "path": "docs/book/validators/file/size.md",
    "content": "# Size\n\n`Zend\\Validator\\File\\Size` checks for the size of a file.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `min`: Minimum file size in integer bytes, or in string SI notation; `null`\n  indicates no minimum required.\n- `max`: maximum file size in integer bytes, or in string SI notation; `null`\n  indicates no maximum required.\n- `useByteString`: Boolean flag indicating whether to dispaly error messages\n  using SI notation (default, `true`), or in bytes (`false`).\n\nSI units supported are: kB, MB, GB, TB, PB, and EB. All sizes are converted\nusing 1024 as the base value (ie. 1kB == 1024 bytes, 1MB == 1024kB).\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\Size;\n\n// Limit the file size to 40000 bytes\n$validator = new Size(40000);\n\n// Limit the file size to between 10kB and 4MB\n$validator = new Size([\n    'min' => '10kB',\n    'max' => '4MB',\n]);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n    // file is valid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/upload-file.md",
    "content": "# UploadFile\n\n`Zend\\Validator\\File\\UploadFile` checks whether a single file has been uploaded\nvia a form `POST` and will return descriptive messages for any upload errors.\n\n## Basic Usage\n\n```php\nuse Zend\\Http\\PhpEnvironment\\Request;\nuse Zend\\Validator\\File\\UploadFile;\n\n$request = new Request();\n$files   = $request->getFiles();\n// i.e. $files['my-upload']['error'] == 0\n\n$validator = new UploadFile();\nif ($validator->isValid($files['my-upload'])) {\n    // file is valid\n}\n```\n\n## PSR-7 Support\n\n- Since 2.11.0\n\nStarting in 2.11.0, you can also pass [PSR-7 UploadedFileInterface](https://www.php-fig.org/psr/psr-7/#uploadedfileinterface)\ninstances as values to the validator. When valid, `getValue()` will return the\ninstance validated verbatim:\n\n```php\n$validator = new UploadFile();\n\n// @var Psr\\Http\\Message\\UploadedFileInterface $uploadedFile\nif ($validator->isValid($uploadedFile)) {\n    // file is valid\n    $validInstance = $validator->getValue(); // === $uploadedFile\n}\n```\n\n## Usage with zend-inputfilter\n\nWhen using zend-inputfilter's [FileInput](https://docs.zendframework.com/zend-inputfilter/file-input/),\nthis validator will be automatically prepended to the validator chain.\n"
  },
  {
    "path": "docs/book/validators/file/upload.md",
    "content": "# Upload\n\n`Zend\\Validator\\File\\Upload` validates that a file upload operation was\nsuccessful.\n\n## Supported Options\n\n`Zend\\Validator\\File\\Upload` supports the following options:\n\n- `files`: array of file uploads. This is generally the `$_FILES` array, but\n  should be normalized per the details in [PSR-7](http://www.php-fig.org/psr/psr-7/#16-uploaded-files)\n  (which is also how [the zend-http Request](https://docs.zendframework.com/zend-http)\n  normalizes the array).\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\Upload;\n\n// Using zend-http's request:\n$validator = new Upload($request->getFiles());\n\n// Or using options notation:\n$validator = new Upload(['files' => $request->getFiles()]);\n\n// Validate:\nif ($validator->isValid('foo')) {\n    // \"foo\" file upload was successful\n}\n```\n\n## PSR-7 Support\n\n- Since 2.11.0\n\nStarting in 2.11.0, you can also pass an array of [PSR-7 UploadedFileInterface](https://www.php-fig.org/psr/psr-7/#uploadedfileinterface)\ninstances to the constructor, the `setFiles()` method, or the `isValid()`\nmethod (in the latter case, you are validating that _all_ uploaded files were\nvalid).\n\n```php\nuse Zend\\Validator\\File\\Upload;\n\n// @var Psr\\Http\\Message\\ServerRequestInterface $request\n$validator = new Upload($request->getUploadedFiles());\n\n// Or using options notation:\n$validator = new Upload([\n    'files' => $request->getUploadedFiles(),\n]);\n\n// Validate:\nif ($validator->isValid('foo')) {\n    // \"foo\" file upload was successful\n}\n```\n"
  },
  {
    "path": "docs/book/validators/file/word-count.md",
    "content": "# WordCount\n\n`Zend\\Validator\\File\\WordCount` validates that the number of words within a file\nmatch the specified criteria.\n\n## Supported Options\n\nThe following set of options are supported:\n\n- `min`: the minimum number of words required; `null` indicates no minimum.\n- `max`: the maximum number of words required; `null` indicates no maximum.\n\n## Basic Usage\n\n```php\nuse Zend\\Validator\\File\\WordCount;\n\n// Limit the amount of words to a maximum of 2000:\n$validator = new WordCount(2000);\n\n// Limit the amount of words to between 100 and 5000:\n$validator = new WordCount(100, 5000);\n\n// ... or use options notation:\n$validator = new WordCount([\n    'min' => 1000,\n    'max' => 5000,\n]);\n\n// Perform validation with file path\nif ($validator->isValid('./myfile.txt')) {\n    // file is valid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/greater-than.md",
    "content": "# GreaterThan Validator\n\n`Zend\\Validator\\GreaterThan` allows you to validate if a given value is greater\nthan a minimum border value.\n\n> ### Only supports numbers\n>\n> `Zend\\Validator\\GreaterThan` supports only the validation of numbers. Strings\n> or dates can not be validated with this validator.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\GreaterThan`:\n\n- `inclusive`: Defines if the validation is inclusive of the minimum value,\n  or exclusive. It defaults to `false`.\n- `min`: Sets the minimum allowed value.\n\n## Basic usage\n\nTo validate if a given value is greater than a defined minimum:\n\n```php\n$valid  = new Zend\\Validator\\GreaterThan(['min' => 10]);\n$value  = 8;\n$return = $valid->isValid($value);\n// returns false\n```\n\nThe above example returns `true` for all values which are greater than 10.\n\n## Inclusive validation\n\nSometimes it is useful to validate a value by including the minimum value.\n\n```php\n$valid  = new Zend\\Validator\\GreaterThan([\n    'min' => 10,\n    'inclusive' => true,\n]);\n$value  = 10;\n$result = $valid->isValid($value);\n// returns true\n```\n\nThe example is identical to our first example, with the exception that we\nincluded the minimum value. Now the value '10' is allowed and will return\n`true`.\n"
  },
  {
    "path": "docs/book/validators/hex.md",
    "content": "# Hex Validator\n\n`Zend\\Validator\\Hex` allows you to validate if a given value contains only\nhexadecimal characters. These are all characters from **0 to 9** and **A to F**,\ncase insensitive. There is no length limitation for the input you want to\nvalidate.\n\n```php\n$validator = new Zend\\Validator\\Hex();\nif ($validator->isValid('123ABC')) {\n    // value contains only hex chars\n} else {\n    // false\n}\n```\n\n> ### Invalid characters\n>\n> All other characters will return false, including whitespace and decimal\n> points. Additionally, unicode zeros and numbers from other scripts than latin\n> will not be treated as valid.\n\n## Supported options\n\nThere are no additional options for `Zend\\Validator\\Hex`.\n"
  },
  {
    "path": "docs/book/validators/hostname.md",
    "content": "# Hostname Validator\n\n`Zend\\Validator\\Hostname` allows you to validate a hostname against a set of\nknown specifications. It is possible to check for three different types of\nhostnames: a DNS Hostname (i.e. `domain.com`), IP address (i.e. 1.2.3.4), and\nLocal hostnames (i.e. localhost). By default, only DNS hostnames are matched.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Hostname`:\n\n- `allow`: Defines the sort of hostname which is allowed to be used.\n  [See below](#validating-different-types-of-hostnames) for details.\n- `idn`: Defines if IDN domains are allowed or not. This option defaults to\n  `true`.\n- `ip`: Allows defining a custom IP validator. This option defaults to a new\n  instance of `Zend\\Validator\\Ip`.\n- `tld`: Defines if TLDs are validated. This option defaults to `true`.\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\Hostname();\n\nif ($validator->isValid($hostname)) {\n    // hostname appears to be valid\n} else {\n    // hostname is invalid; print the reasons\n    foreach ($validator->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nThis will match the hostname `$hostname` and on failure populate `getMessages()`\nwith useful error messages.\n\n## Validating different types of hostnames\n\nYou may find you also want to match IP addresses, Local hostnames, or a\ncombination of all allowed types. This can be done by passing a parameter to\n`Zend\\Validator\\Hostname` when you instantiate it. The parameter should be an\ninteger which determines what types of hostnames are allowed. You are encouraged\nto use the `Zend\\Validator\\Hostname` constants to do this.\n\nThe `Zend\\Validator\\Hostname` constants are:\n\n- `ALLOW_DNS`, to allow only DNS hostnames\n- `ALLOW_IP` to allow IP addresses\n- `ALLOW_LOCAL` to allow local network names\n- `ALLOW_URI` to allow [RFC3986](http://tools.ietf.org/html/rfc3986)-compliant addresses\n- `ALLOW_ALL` to allow all four above types\n\n> ### Additional Information on `ALLOW_URI`\n>\n> `ALLOW_URI` allows checking hostnames according to\n> [RFC3986](http://tools.ietf.org/html/rfc3986). These are registered names\n> which are used by WINS, NetInfo and also local hostnames like those defined\n> within your `hosts` file.\n\nTo check for IP addresses only, you can use the example below:\n\n```php\nuse Zend\\Validator\\Hostname;\n\n$validator = new Hostname(Hostname::ALLOW_IP);\n\nif ($validator->isValid($hostname)) {\n    // hostname appears to be valid\n} else {\n    // hostname is invalid; print the reasons\n    foreach ($validator->getMessages() as $message) {\n        echo \"$message\\n\";\n    }\n}\n```\n\nAs well as using `ALLOW_ALL` to accept all common hostnames types, you can\ncombine these types to allow for combinations. For example, to accept DNS and\nLocal hostnames:\n\n```php\nuse Zend\\Validator\\Hostname;\n\n$validator = new Hostname(Hostname::ALLOW_DNS | Hostname::ALLOW_IP);\n```\n\n## Validating International Domains Names\n\nSome Country Code Top Level Domains (ccTLDs), such as 'de' (Germany), support\ninternational characters in domain names. These are known as International\nDomain Names (IDN). These domains can be matched by `Zend\\Validator\\Hostname`\nvia extended characters that are used in the validation process.\n\nAt the time of writing, more than 50 ccTLDs support IDN domains.\n\nThe `Hostname` validator matches IDN domains by default.  If you wish to disable\nIDN validation, either pass a parameter to the `Zend\\Validator\\Hostname`\nconstructor or call the `setValidateIdn()` method.\n\nYou can disable IDN validation by passing a second parameter to the\n`Zend\\Validator\\Hostname` constructor in the following way.\n\n```php\n$validator = new Zend\\Validator\\Hostname([\n    'allow' => Zend\\Validator\\Hostname::ALLOW_DNS,\n    'useIdnCheck'   => false,\n]);\n```\n\nAlternatively you can either pass `true` or `false` to `setValidateIdn()` to\nenable or disable IDN validation. If you are trying to match an IDN hostname\nwhich isn't currently supported, it is likely it will fail validation if it has\nany international characters in it. Where a ccTLD file doesn't exist in\n`Zend/Validator/Hostname` specifying the additional characters, a normal hostname\nvalidation is performed.\n\nPlease note that IDNs are only validated if you allow DNS hostnames to be\nvalidated.\n\n## Validating Top Level Domains\n\nBy default, a hostname will be verified against a list of known TLDs. If this\nfunctionality is not required, it can be disabled in much the same way as\ndisabling IDN support. You can disable TLD validation by passing a third\nparameter to the `Zend\\Validator\\Hostname` constructor. In the example below we\nare supporting IDN validation via the second parameter.\n\n```php\nuse Zend\\Validator\\Hostname;\n\n$validator = new Hostname([\n    'allow' => Hostname::ALLOW_DNS,\n    'useIdnCheck'   => true,\n    'useTldCheck'   => false,\n]);\n```\n\nAlternatively you can either pass `true` or `false` to `setValidateTld()` to\nenable or disable TLD validation.\n\nPlease note, TLDs are only validated if you allow DNS hostnames to be validated.\n"
  },
  {
    "path": "docs/book/validators/iban.md",
    "content": "# Iban Validator\n\n`Zend\\Validator\\Iban` validates if a given value could be a IBAN number. IBAN is\nthe abbreviation for \"International Bank Account Number\".\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Iban`:\n\n- `country_code`: Sets the country code which is used to get the IBAN format\n  for validation.\n\n## IBAN validation\n\nIBAN numbers are always related to a country. This means that different\ncountries use different formats for their IBAN numbers. This is the reason why\nIBAN numbers always need a country code. By knowing this we already know how\nto use `Zend\\Validator\\Iban`.\n\n### Ungreedy IBAN validation\n\nSometime it is useful just to validate if the given value is a IBAN number or\nnot. This means that you don't want to validate it against a defined country.\nThis can be done by using `false` as locale.\n\n```php\n$validator = new Zend\\Validator\\Iban(['country_code' => false]);\n// Note: you can also provide FALSE as the sole parameter\n\nif ($validator->isValid('AT611904300234573201')) {\n    // IBAN appears to be valid\n} else {\n    // IBAN is not valid\n}\n```\n\nIn this situation, any IBAN number from any country will considered valid. Note\nthat this should not be done when you accept only accounts from a single\ncountry!\n\n### Region aware IBAN validation\n\nTo validate against a defined country, you just provide a country code. You can\ndo this during instaniation via the option `country_code`, or afterwards by\nusing `setCountryCode()`.\n\n```php\n$validator = new Zend\\Validator\\Iban(['country_code' => 'AT']);\n\nif ($validator->isValid('AT611904300234573201')) {\n    // IBAN appears to be valid\n} else {\n    // IBAN is not valid\n}\n```\n"
  },
  {
    "path": "docs/book/validators/identical.md",
    "content": "# Identical Validator\n\n`Zend\\Validator\\Identical` allows you to validate if a given value is identical\nwith a set token.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Identical`:\n\n- `strict`: Defines if the validation should be strict (i.e., if types should\n  also be considered). The default value is `true`.\n- `token`: Sets the token against which the input will be validated.\n- `literal`: If set to `true`, the validation will skip the lookup for elements\n  in the form context, and validate the token just the way it was provided. The\n  default value is `false`.\n\n## Basic usage\n\nTo validate if two values are identical, you need to set the original value as\nthe token, as demonstrated in the following example:\ntoken.\n\n```php\n$valid = new Zend\\Validator\\Identical('origin');\n\nif ($valid->isValid($value)) {\n    return true;\n}\n```\n\nThe validation will only then return `true` when both values are 100% identical.\nIn our example, when `$value` is `'origin'`.\n\nYou can set the token after instantiation by using the method `setToken()`.\n\n## Identical objects\n\n`Zend\\Validator\\Identical` can validate not only strings, but any other variable\ntype, such as booleans, integers, floats, arrays, or even objects. As already\nnoted, the token and value must be identical.\n\n```php\n$valid = new Zend\\Validator\\Identical(123);\n\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\n> ### Type comparison\n>\n> You should be aware of the variable type used for validation. This means that\n> the string `'3'` is not identical to integer `3`. When you want non-strict\n> validation, you must set the `strict` option to `false`.\n\n## Form elements\n\n`Zend\\Validator\\Identical` supports the comparison of form elements. This can be\ndone by using the element's name as the `token`:\n\n```php\n$form->add([\n    'name' => 'elementOne',\n    'type' => 'Password',\n]);\n$form->add([\n    'name'       => 'elementTwo',\n    'type'       => 'Password',\n    'validators' => [\n        [\n            'name'    => 'Identical',\n            'options' => [\n                'token' => 'elementOne',\n            ],\n        ],\n    ],\n]);\n```\n\nBy using the element's name from the first element as the `token` for the second\nelement, the validator validates if the second element is equal with the first\nelement. In the case your user does not enter two identical values, you will get\na validation error.\n\n### Validating a Value From a Fieldset\n\nSometimes you will need to validate an input that lives inside a fieldset, and\nthis can be accomplished as follows:\n\n```php\nuse Zend\\Form\\Element;\nuse Zend\\Form\\Fieldset;\nuse Zend\\Form\\Form;\nuse Zend\\InputFilter\\Input;\nuse Zend\\InputFilter\\InputFilter;\n\n$userFieldset = new Fieldset('user'); // (1)\n$userFieldset->add([\n    'name' => 'email', // (2)\n    'type' => 'Email',\n]);\n\n// Let's add one fieldset inside the 'user' fieldset,\n// so we can see how to manage the token in a different deepness\n$deeperFieldset = new Fieldset('deeperFieldset'); // (3)\n$deeperFieldset->add([\n    'name'    => 'deeperFieldsetInput', // (4)\n    'type'    => 'Text',\n    'options' => [\n        'label' => 'What validator are we testing?',\n    ],\n]);\n$userFieldset->add($deeperFieldset);\n\n$signUpForm = new Form('signUp');\n$signUpForm->add($userFieldset);\n\n// Add an input that will validate the 'email' input from 'user' fieldset\n$signUpForm->add([\n    'name' => 'confirmEmail', // (5)\n    'type' => 'Email',\n]);\n\n// Add an input that will validate the 'deeperFieldsetInput' from\n// 'deeperFieldset' that lives inside the 'user' fieldset\n$signUpForm->add([\n    'name' => 'confirmTestingValidator', // (6)\n    'type' => 'Text',\n]);\n\n// This will ensure the user enter the same email in 'email' (2) and\n// 'confirmEmail' (5)\n$inputFilter = new InputFilter();\n$inputFilter->add([\n    'name' => 'confirmEmail', // references (5)\n    'validators' => [\n        [\n            'name' => 'Identical',\n            'options' => [\n                // 'user' key references 'user' fieldset (1), and 'email'\n                // references 'email' element inside 'user' fieldset (2)\n                'token' => ['user' => 'email'],\n            ],\n        ],\n    ],\n]);\n\n// This will ensure the user enter the same string in 'deeperFieldsetInput' (4)\n// and 'confirmTestingValidator' (6)\n$inputFilter->add([\n    'name' => 'confirmTestingValidator', // references (6)\n    'validators' => [\n        [\n            'name' => 'Identical',\n            'options' => [\n                'token' => [\n                    'user' => [ // references 'user' fieldset (1)\n                        // 'deeperFieldset' key references 'deeperFieldset'\n                        // fieldset (3); 'deeperFieldsetInput' references\n                        // 'deeperFieldsetInput' element (4)\n                        'deeperFieldset' => 'deeperFieldsetInput',\n                    ],\n                ],\n            ],\n        ],\n    ],\n]);\n\n$signUpForm->setInputFilter($inputFilter);\n```\n\n> #### Use one token per leaf\n>\n> Aways make sure that your token array have just one key per level all the way\n> till the leaf, otherwise you can end up with unexpected results.\n\n## Strict validation\n\nAs mentioned before, `Zend\\Validator\\Identical` validates tokens using strict\ntyping. You can change this behaviour by using the `strict` option. The default\nvalue for this property is `true`.\n\n```php\n$valid = new Zend\\Validator\\Identical(['token' => 123, 'strict' => false]);\n$input = '123';\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nThe difference to the previous example is that the validation returns in this\ncase `true`, even if you compare a integer with string value as long as the\ncontent is identical but not the type.\n\nFor convenience you can also use `setStrict()` and `getStrict()`.\n\n## Configuration\n\nAs all other validators, `Zend\\Validator\\Identical` also supports the usage of\nconfiguration settings during instantiation. This means that you can configure\nthis validator with a `Traversable` object.\n\nThere is a case which you should be aware of. If you are using an array as\ntoken, and it contains a `token` key, you should wrap it within another\n`token` key. See the examples below to understand this situation.\n\n```php\n// This will not validate ['token' => 123], it will actually validate the\n// integer 123\n$valid = new Zend\\Validator\\Identical(['token' => 123]);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nThe reason for this special case is that you can configure the token which has\nto be used by giving the `token` key.\n\nSo, when you are using an array as the token, and it contains one element with a\n`token` key, then you have to wrap it as shown in the example below:\n\n```php\n// Unlike the previous example, this will validate ['token' => 123]\n$valid = new Zend\\Validator\\Identical(['token' => ['token' => 123]]);\nif ($valid->isValid($input)) {\n    // input appears to be valid\n} else {\n    // input is invalid\n}\n```\n\nIf the array you are willing to validate does not have a `token` key, you do not\nneed to wrap it.\n"
  },
  {
    "path": "docs/book/validators/in-array.md",
    "content": "# InArray Validator\n\n`Zend\\Validator\\InArray` allows you to validate if a given value is contained\nwithin an array. It is also able to validate multidimensional arrays.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\InArray`:\n\n- `haystack`: Sets the haystack for the validation.\n- `recursive`: Defines if the validation should be done recursively. This option\n  defaults to `false`.\n- `strict`: Three modes of comparison are offered owing to an often overlooked,\n  and potentially dangerous security issue when validating string input from\n  user input.\n    - `InArray::COMPARE_STRICT`: This is a normal `in_array()` strict comparison\n      that checks value and type.\n    - `InArray::COMPARE_NOT_STRICT`: This is a normal `in_array()` non-strict\n      comparison that checks value only, but not type.\n    - `InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILTY`: This\n      operates in essentially the same way as `InArray::COMPARE_NOT_STRICT`,\n      but ensures that strings are not cast to integer during comparison,\n      preventing `0 == 'foo43'` types of false positives.\n\n> ### Use non-strict carefully\n>\n> Non-strict mode (`InArray::COMPARE_NOT_STRICT`) may give false positives when\n> strings are compared against ints or floats owing to `in_array()`'s behaviour\n> of converting strings to int in such cases. Therefore, `'foo'` would become\n> `0`, `'43foo'` would become `43`, while `foo43'` would also become `0`.\n\n## Array validation\n\nBasic usage is to provide an array during instantiation:\n\n```php\n$validator = new Zend\\Validator\\InArray([\n    'haystack' => ['value1', 'value2',...'valueN'],\n]);\n\nif ($validator->isValid('value')) {\n    // value found\n} else {\n    // no value found\n}\n```\n\nThis will behave exactly like PHP's `in_array()` method when passed only a\nneedle and haystack.\n\n> ### Non-strict by default\n>\n> By default, this validation is not strict, nor can it validate\n> multidimensional arrays.\n\nAlternately, you can define the array to validate against after object\nconstruction by using the `setHaystack()` method. `getHaystack()` returns the\nactual set haystack array.\n\n```php\n$validator = new Zend\\Validator\\InArray();\n$validator->setHaystack(['value1', 'value2',...'valueN']);\n\nif ($validator->isValid('value')) {\n    // value found\n} else {\n    // no value found\n}\n```\n\n## Array validation modes\n\nAs previously mentioned, there are possible security issues when using the\ndefault non-strict comparison mode, so rather than restricting the developer,\nwe've chosen to offer both strict and non-strict comparisons, and add a safer\nmiddle-ground.\n\nIt's possible to set the strict mode at initialisation and afterwards with the\n`setStrict` method. `InArray::COMPARE_STRICT` equates to `true` and\n`InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY` equates to\n`false`.\n\n```php\n// defaults to InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY\n$validator = new Zend\\Validator\\InArray([\n    'haystack' => ['value1', 'value2', /* ... */ 'valueN'],\n]);\n\n// set strict mode\n$validator = new Zend\\Validator\\InArray([\n    'haystack' => ['value1', 'value2', /* ... */ 'valueN'],\n    'strict'   => InArray::COMPARE_STRICT,  // equates to ``true``\n]);\n\n// set non-strict mode\n$validator = new Zend\\Validator\\InArray([\n    'haystack' => ['value1', 'value2', /* ... */ 'valueN'],\n    'strict'   => InArray:COMPARE_NOT_STRICT,  // equates to ``false``\n]);\n\n// or\n\n$validator->setStrict(InArray::COMPARE_STRICT);\n$validator->setStrict(InArray::COMPARE_NOT_STRICT);\n$validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n```\n\n> ### Non-strict safe-mode by default\n>\n> Note that the `strict` setting is per default `false`.\n\n## Recursive array validation\n\nIn addition to PHP's `in_array()` method, this validator can also be used to\nvalidate multidimensional arrays.\n\nTo validate multidimensional arrays you have to set the `recursive` option.\n\n```php\n$validator = new Zend\\Validator\\InArray([\n    'haystack' => [\n        'firstDimension' => ['value1', 'value2', / ... */ 'valueN'],\n        'secondDimension' => ['foo1', 'foo2', /* ... */ 'fooN'],\n    ],\n    'recursive' => true,\n]);\n\nif ($validator->isValid('value')) {\n    // value found\n} else {\n    // no value found\n}\n```\n\nYour array will then be validated recursively to see if the given value is\ncontained. Additionally you could use `setRecursive()` to set this option\nafterwards and `getRecursive()` to retrieve it.\n\n```php\n$validator = new Zend\\Validator\\InArray([\n    'firstDimension' => ['value1', 'value2', /* ... */ 'valueN'],\n    'secondDimension' => ['foo1', 'foo2', /* ... */ 'fooN'],\n]);\n\n$validator->setRecursive(true);\n\nif ($validator->isValid('value')) {\n    // value found\n} else {\n    // no value found\n}\n```\n\n> ### Default setting for recursion\n>\n> By default, the recursive validation is turned off.\n\n> ### Option keys within the haystack\n>\n> When you are using the keys `haystack`, `strict`, or `recursive` within\n> your haystack, then you must wrap the `haystack` key.\n"
  },
  {
    "path": "docs/book/validators/ip.md",
    "content": "# Ip Validator\n\n`Zend\\Validator\\Ip` allows you to validate if a given value is an IP address. It\nsupports the IPv4, IPv6, and IPvFuture definitions.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Ip`:\n\n- `allowipv4`: Defines if the validator allows IPv4 addresses. This option\n  defaults to `true`.\n- `allowipv6`: Defines if the validator allows IPv6 addresses. This option\n  defaults to `true`.\n- `allowipvfuture`: Defines if the validator allows IPvFuture addresses. This\n  option defaults to `false`.\n- `allowliteral`: Defines if the validator allows IPv6 or IPvFuture with URI\n  literal style (the IP surrounded by brackets). This option defaults to `true`.\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\Ip();\n\nif ($validator->isValid($ip)) {\n    // ip appears to be valid\n} else {\n    // ip is invalid; print the reasons\n}\n```\n\n> ### Invalid IP addresses\n>\n> Keep in mind that `Zend\\Validator\\Ip` only validates IP addresses. Addresses\n> like '`mydomain.com`' or '`192.168.50.1/index.html`' are not valid IP\n> addresses. They are either hostnames or valid URLs but not IP addresses.\n\n> ### IPv6/IPvFuture validation\n>\n> `Zend\\Validator\\Ip` validates IPv6/IPvFuture addresses using a regex. The\n> reason is that the filters and methods from PHP itself don't follow the RFC.\n> Many other available classes also don't follow it.\n\n## Validate IPv4 or IPV6 alone\n\nSometimes it's useful to validate only one of the supported formats; e.g., when\nyour network only supports IPv4. In this case it would be useless to allow IPv6\nwithin this validator.\n\nTo limit `Zend\\Validator\\Ip` to one protocol, you can set the options `allowipv4`\nor `allowipv6` to `false`. You can do this either by giving the option to the\nconstructor or by using `setOptions()` afterwards.\n\n```php\n$validator = new Zend\\Validator\\Ip(['allowipv6' => false]);\n\nif ($validator->isValid($ip)) {\n    // ip appears to be valid ipv4 address\n} else {\n    // ip is not an ipv4 address\n}\n```\n\n> ### Default behaviour\n>\n> The default behaviour which `Zend\\Validator\\Ip` follows is to allow both\n> standards.\n"
  },
  {
    "path": "docs/book/validators/is-countable.md",
    "content": "# IsCountable Validator\n\n- **Since 2.10.0**\n\n`Zend\\Validator\\IsCountable` allows you to validate that a value can be counted\n(i.e., it's an array or implements `Countable`), and, optionally:\n\n- the exact count of the value\n- the minimum count of the value\n- the maximum count of the value\n\nSpecifying either of the latter two is inconsistent with the first, and, as\nsuch, the validator does not allow setting both a count and a minimum or maximum\nvalue. You may, however specify both minimum and maximum values, in which case\nthe validator operates similar to the [Between validator](between.md).\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\IsCountable`:\n\n- `count`: Defines if the validation should look for a specific, exact count for\n  the value provided.\n- `max`: Sets the maximum value for the validation; if the count of the value is\n  greater than the maximum, validation fails..\n- `min`: Sets the minimum value for the validation; if the count of the value is\n  lower than the minimum, validation fails.\n\n## Default behaviour\n\nGiven no options, the validator simply tests to see that the value may be\ncounted (i.e., it's an array or `Countable` instance):\n\n```php\n$validator = new Zend\\Validator\\IsCountable();\n\n$validator->isValid(10);                    // false; not an array or Countable\n$validator->isValid([10]);                  // true; value is an array\n$validator->isValid(new ArrayObject([10])); // true; value is Countable\n$validator->isValid(new stdClass);          // false; value is not Countable\n```\n\n## Specifying an exact count\n\nYou can also specify an exact count; if the value is countable, and its count\nmatches, the the value is valid.\n\n```php\n$validator = new Zend\\Validator\\IsCountable(['count' => 3]);\n\n$validator->isValid([1, 2, 3]);                  // true; countable, and count is 3\n$validator->isValid(new ArrayObject([1, 2, 3])); // true; countable, and count is 3\n$validator->isValid([1]);                        // false; countable, but count is 1\n$validator->isValid(new ArrayObject([1]));       // false; countable, but count is 1\n```\n\n## Specifying a minimum count\n\nYou may specify a minimum count. When you do, the value must be countable, and\ngreater than or equal to the minimum count you specify in order to be valid.\n\n```php\n$validator = new Zend\\Validator\\IsCountable(['min' => 2]);\n\n$validator->isValid([1, 2, 3]);                  // true; countable, and count is 3\n$validator->isValid(new ArrayObject([1, 2, 3])); // true; countable, and count is 3\n$validator->isValid([1, 2]);                     // true; countable, and count is 2\n$validator->isValid(new ArrayObject([1, 2]));    // true; countable, and count is 2\n$validator->isValid([1]);                        // false; countable, but count is 1\n$validator->isValid(new ArrayObject([1]));       // false; countable, but count is 1\n```\n\n## Specifying a maximum count\n\nYou may specify a maximum count. When you do, the value must be countable, and\nless than or equal to the maximum count you specify in order to be valid.\n\n```php\n$validator = new Zend\\Validator\\IsCountable(['max' => 2]);\n\n$validator->isValid([1, 2, 3]);                  // false; countable, but count is 3\n$validator->isValid(new ArrayObject([1, 2, 3])); // false; countable, but count is 3\n$validator->isValid([1, 2]);                     // true; countable, and count is 2\n$validator->isValid(new ArrayObject([1, 2]));    // true; countable, and count is 2\n$validator->isValid([1]);                        // true; countable, and count is 1\n$validator->isValid(new ArrayObject([1]));       // true; countable, and count is 1\n```\n\n## Specifying both minimum and maximum\n\nIf you specify both a minimum and maximum, the count must be _between_ the two,\ninclusively (i.e., it may be the minimum or maximum, and any value between).\n\n```php\n$validator = new Zend\\Validator\\IsCountable([\n    'min' => 3,\n    'max' => 5,\n]);\n\n$validator->isValid([1, 2, 3]);                    // true; countable, and count is 3\n$validator->isValid(new ArrayObject([1, 2, 3]));   // true; countable, and count is 3\n$validator->isValid(range(1, 5));                  // true; countable, and count is 5\n$validator->isValid(new ArrayObject(range(1, 5))); // true; countable, and count is 5\n$validator->isValid([1, 2]);                       // false; countable, and count is 2\n$validator->isValid(new ArrayObject([1, 2]));      // false; countable, and count is 2\n$validator->isValid(range(1, 6));                  // false; countable, and count is 6\n$validator->isValid(new ArrayObject(range(1, 6))); // false; countable, and count is 6\n```\n"
  },
  {
    "path": "docs/book/validators/isbn.md",
    "content": "# Isbn Validator\n\n`Zend\\Validator\\Isbn` allows you to validate an ISBN-10 or ISBN-13 value.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Isbn`:\n\n- `separator`: Defines the allowed separator for the ISBN number. It defaults to\n  an empty string.\n- `type`: Defines the allowed ISBN types. It defaults to\n  `Zend\\Validator\\Isbn::AUTO`. For details, take a look at the section on\n  [explicit types](#setting-an-explicit-isbn-validation-type).\n\n## Basic usage\n\nA basic example of usage is below:\n\n```php\n$validator = new Zend\\Validator\\Isbn();\n\nif ($validator->isValid($isbn)) {\n    // isbn is valid\n} else {\n    // isbn is not valid\n}\n```\n\nThis will validate any ISBN-10 and ISBN-13 without separator.\n\n## Setting an explicit ISBN validation type\n\nAn example of an ISBN type restriction follows:\n\n```php\nuse Zend\\Validator\\Isbn;\n\n$validator = new Isbn();\n$validator->setType(Isbn::ISBN13);\n\n// OR\n$validator = new Isbn([ 'type' => Isbn::ISBN13]);\n\nif ($validator->isValid($isbn)) {\n    // this is a valid ISBN-13 value\n} else {\n    // this is an invalid ISBN-13 value\n}\n```\n\nThe above will validate only ISBN-13 values.\n\nValid types include:\n\n- `Zend\\Validator\\Isbn::AUTO` (default)\n- `Zend\\Validator\\Isbn::ISBN10`\n- `Zend\\Validator\\Isbn::ISBN13`\n\n## Specifying a separator restriction\n\nAn example of separator restriction:\n\n```php\n$validator = new Zend\\Validator\\Isbn();\n$validator->setSeparator('-');\n\n// OR\n$validator = new Zend\\Validator\\Isbn(['separator' => '-']);\n\nif ($validator->isValid($isbn)) {\n    // this is a valid ISBN with separator\n} else {\n    // this is an invalid ISBN with separator\n}\n```\n\n> ### Values without separators\n>\n> This will return `false` if `$isbn` doesn't contain a separator **or** if it's\n> an invalid *ISBN* value.\n\nValid separators include:\n\n- `` (empty) (default)\n- `-` (hyphen)\n- ` ` (space)\n"
  },
  {
    "path": "docs/book/validators/isinstanceof.md",
    "content": "# IsInstanceOf Validator\n\n`Zend\\Validator\\IsInstanceOf` allows you to validate whether a given object is\nan instance of a specific class or interface.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\IsInstanceOf`:\n\n- `className`: Defines the fully-qualified class name which objects must be an\n  instance of.\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\IsInstanceOf([\n    'className' => 'Zend\\Validator\\Digits'\n]);\n$object = new Zend\\Validator\\Digits();\n\nif ($validator->isValid($object)) {\n    // $object is an instance of Zend\\Validator\\Digits\n} else {\n    // false. You can use $validator->getMessages() to retrieve error messages\n}\n```\n\nIf a string argument is passed to the constructor of\n`Zend\\Validator\\IsInstanceOf`, then that value will be used as the class name:\n\n```php\nuse Zend\\Validator\\Digits;\nuse Zend\\Validator\\IsInstanceOf;\n\n$validator = new IsInstanceOf(Digits::class);\n$object = new Digits();\n\nif ($validator->isValid($object)) {\n    // $object is an instance of Zend\\Validator\\Digits\n} else {\n    // false. You can use $validator->getMessages() to retrieve error messages\n}\n```\n"
  },
  {
    "path": "docs/book/validators/less-than.md",
    "content": "# LessThan Validator\n\n`Zend\\Validator\\LessThan` allows you to validate if a given value is less than a\nmaximum value.\n\n> Supports only number validation\n>\n> `Zend\\Validator\\LessThan` supports only the validation of numbers. Strings or\n> dates can not be validated with this validator.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\LessThan`:\n\n- `inclusive`: Defines if the validation is inclusive the maximum value or\n  exclusive. It defaults to `false`.\n- `max`: Sets the maximum allowed value.\n\n## Basic usage\n\nTo validate if a given value is less than a defined maximum:\n\n```php\n$valid  = new Zend\\Validator\\LessThan(['max' => 10]);\n$value  = 12;\n$return = $valid->isValid($value);\n// returns false\n```\n\nThe above example returns `true` for all values lower than 10.\n\n## Inclusive validation\n\nSometimes it is useful to validate a value by including the maximum value:\n\n```php\n$valid  = new Zend\\Validator\\LessThan([\n    'max' => 10,\n    'inclusive' => true,\n]);\n$value  = 10;\n$result = $valid->isValid($value);\n// returns true\n```\n\nThe example is identical to our first example, with the exception that we've\nspecified that the maximum is inclusive. Now the value '10' is allowed and will\nreturn `true`.\n"
  },
  {
    "path": "docs/book/validators/not-empty.md",
    "content": "# NotEmpty Validator\n\nThis validator allows you to validate if a given value is not empty. This is\noften useful when working with form elements or other user input, where you can\nuse it to ensure required elements have values associated with them.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\NotEmpty`:\n\n- `type`: Sets the type of validation which will be processed; for details, see\n  the section on [specifying empty behavior](#specifying-empty-behavior).\n\n## Default behaviour\n\nBy default, this validator works differently than you would expect when you've\nworked with PHP's `empty()` operator. In particular, this validator will\nevaluate both the integer `0` and string `'0'` as empty.\n\n```php\n$valid = new Zend\\Validator\\NotEmpty();\n$value  = '';\n$result = $valid->isValid($value);\n// returns false\n```\n\n## Specifying empty behavior\n\nSome projects have differing opinions of what is considered an \"empty\" value: a\nstring with only whitespace might be considered empty, or `0` may be\nconsidered non-empty (particularly for boolean sequences). To accommodate\ndiffering needs, `Zend\\Validator\\NotEmpty` allows you to configure which types\nshould be validated as empty and which not.\n\nThe following types can be handled:\n\n- `boolean`: Returns `false` when the boolean value is `false`.\n- `integer`: Returns `false` when an integer `0` value is given. By default,\n  this validation is not activate and returns `true` for any integer values.\n- `float`: Returns `false` when a float `0.0` value is given. By default, this\n  validation is not activate and returns `true` on any float values.\n- `string`: Returns `false` when an empty string `''` is given.\n- `zero`: Returns `false` when the single character zero (`'0'`) is given.\n- `empty_array`: Returns `false` when an empty `array` is given.\n- `null`: Returns `false` when a `null` value is given.\n- `php`: Returns `false` on wherever PHP's `empty()` would return `true`.\n- `space`: Returns `false` when an string is given which contains only\n  whitespace.\n- `object`: Returns `true`. `false` will be returned when `object` is not\n  allowed but an object is given.\n- `object_string`: Returns `false` when an object is given and its\n  `__toString()` method returns an empty string.\n- `object_count`: Returns `false` when an object is given, it implements\n  `Countable`, and its count is 0.\n- `all`: Returns `false` on all above types.\n\nAll other given values will return `true` per default.\n\nThere are several ways to select which of the above types are validated. You can\ngive one or multiple types and add them, you can provide an array, you can use\nconstants, or you can provide a textual string. See the following examples:\n\n```php\nuse Zend\\Validator\\NotEmpty;\n\n// Returns false on 0\n$validator = new NotEmpty(NotEmpty::INTEGER);\n\n// Returns false on 0 or '0'\n$validator = new NotEmpty( NotEmpty::INTEGER | NotEmpty::ZERO);\n\n// Returns false on 0 or '0'\n$validator = new NotEmpty([ NotEmpty::INTEGER, NotEmpty::ZERO ]);\n\n// Returns false on 0 or '0'\n$validator = new NotEmpty(['integer', 'zero']);\n```\n\nYou can also provide an instance of `Traversable` to set the desired types. To\nset types after instantiation, use the `setType()` method.\n"
  },
  {
    "path": "docs/book/validators/regex.md",
    "content": "# Regex Validator\n\nThis validator allows you to validate if a given string conforms a defined\nregular expression.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Regex`:\n\n- `pattern`: Sets the regular expression pattern for this validator.\n\n## Usage\n\nValidation with regular expressions allows complex validations\nwithout writing a custom validator.\n\n```php\n$validator = new Zend\\Validator\\Regex(['pattern' => '/^Test/']);\n\n$validator->isValid(\"Test\"); // returns true\n$validator->isValid(\"Testing\"); // returns true\n$validator->isValid(\"Pest\"); // returns false\n```\n\nThe pattern uses the same syntax as `preg_match()`. For details about regular\nexpressions take a look into [PHP's manual about PCRE pattern\nsyntax](http://php.net/reference.pcre.pattern.syntax).\n\n## Pattern handling\n\nIt is also possible to set a different pattern afterwards by using\n`setPattern()` and to get the actual set pattern with `getPattern()`.\n\n```php\n$validator = new Zend\\Validator\\Regex(['pattern' => '/^Test/']);\n$validator->setPattern('ing$/');\n\n$validator->isValid(\"Test\"); // returns false\n$validator->isValid(\"Testing\"); // returns true\n$validator->isValid(\"Pest\"); // returns false\n```\n"
  },
  {
    "path": "docs/book/validators/sitemap.md",
    "content": "# Sitemap Validators\n\nThe following validators conform to the\n[Sitemap XML protocol](http://www.sitemaps.org/protocol.php).\n\n## Supported options\n\nThere are no additional supported options for any of the `Sitemap` validators.\n\n## Changefreq\n\n`Zend\\Validator\\Sitemap\\Changefreq` validates whether a string is valid for\nusing as a 'changefreq' element in a Sitemap XML document. Valid values are:\n'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', or 'never'.\n\nReturns `true` if and only if the value is a string and is equal to one of the\nfrequencies specified above.\n\n## Sitemap\\\\Lastmod\n\n`Zend\\Validator\\Sitemap\\Lastmod` validates whether a string is valid for using\nas a 'lastmod' element in a Sitemap XML document. The lastmod element should\ncontain a W3C date string, optionally discarding information about time.\n\nReturns `true` if and only if the given value is a string and is valid according\nto the protocol.\n\n```php\n$validator = new Zend\\Validator\\Sitemap\\Lastmod();\n\n$validator->isValid('1999-11-11T22:23:52-02:00'); // true\n$validator->isValid('2008-05-12T00:42:52+02:00'); // true\n$validator->isValid('1999-11-11'); // true\n$validator->isValid('2008-05-12'); // true\n\n$validator->isValid('1999-11-11t22:23:52-02:00'); // false\n$validator->isValid('2008-05-12T00:42:60+02:00'); // false\n$validator->isValid('1999-13-11'); // false\n$validator->isValid('2008-05-32'); // false\n$validator->isValid('yesterday'); // false\n```\n\n## Loc\n\n`Zend\\Validator\\Sitemap\\Loc` validates whether a string is valid for using as a\n'loc' element in a Sitemap XML document. This uses\n[Zend\\\\Uri\\\\Uri::isValid()](https://docs.zendframework.com/zend-uri/usage/#validating-the-uri)\ninternally.\n\n> ### Installation requirements\n>\n> `Zend\\Validator\\Sitemap\\Loc` depends on the zend-uri component, so be sure to\n> have it installed before getting started:\n>\n> ```bash\n> $ composer require zendframework/zend-uri\n> ```\n\n## Priority\n\n`Zend\\Validator\\Sitemap\\Priority` validates whether a value is valid for using\nas a 'priority' element in a Sitemap XML document. The value should be a decimal\nbetween 0.0 and 1.0. This validator accepts both numeric values and string\nvalues.\n\n```php\n$validator = new Zend\\Validator\\Sitemap\\Priority();\n\n$validator->isValid('0.1'); // true\n$validator->isValid('0.789'); // true\n$validator->isValid(0.8); // true\n$validator->isValid(1.0); // true\n\n$validator->isValid('1.1'); // false\n$validator->isValid('-0.4'); // false\n$validator->isValid(1.00001); // false\n$validator->isValid(0xFF); // false\n$validator->isValid('foo'); // false\n```\n"
  },
  {
    "path": "docs/book/validators/step.md",
    "content": "# Step Validator\n\n`Zend\\Validator\\Step` allows you to validate if a given value is a valid step\nvalue. This validator requires the value to be a numeric value (either string,\nint or float).\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Step`:\n\n- `baseValue`: This is the base value from which the step should be computed.\n  This option defaults to `0`\n- `step`: This is the step value. This option defaults to `1`\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\Step();\n\nif ($validator->isValid(1)) {\n    // value is a valid step value\n} else {\n    // false\n}\n```\n\n## Using floating-point values\n\nThe `Step` validator also supports floating-point base and step values:\n\n```php\n$validator = new Zend\\Validator\\Step([\n    'baseValue' => 1.1,\n    'step'      => 2.2,\n]);\n\necho $validator->isValid(1.1); // prints true\necho $validator->isValid(3.3); // prints true\necho $validator->isValid(3.35); // prints false\necho $validator->isValid(2.2); // prints false\n```\n"
  },
  {
    "path": "docs/book/validators/string-length.md",
    "content": "# StringLength Validator\n\nThis validator allows you to validate if a given string is between a defined\nlength.\n\n> ### Supports only string validation\n>\n> `Zend\\Validator\\StringLength` supports only the validation of strings.\n> Integers, floats, dates or objects can not be validated with this validator.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\StringLength`:\n\n- `encoding`: Sets the `ICONV` encoding to use with the string.\n- `min`: Sets the minimum allowed length for a string.\n- `max`: Sets the maximum allowed length for a string.\n\n## Default behaviour\n\nBy default, this validator checks if a value is between `min` and `max` using a\ndefault `min` value of `0` and default `max` value of `NULL` (meaning unlimited).\n\nAs such, without any options, the validator only checks that the input is a\nstring.\n\n## Limiting the maximum string length\n\nTo limit the maximum allowed length of a string you need to set the `max`\nproperty. It accepts an integer value as input.\n\n```php\n$validator = new Zend\\Validator\\StringLength(['max' => 6]);\n\n$validator->isValid(\"Test\"); // returns true\n$validator->isValid(\"Testing\"); // returns false\n```\n\nYou can set the maximum allowed length after instantiation by using the\n`setMax()` method; `getMax()` retrieves the value.\n\n```php\n$validator = new Zend\\Validator\\StringLength();\n$validator->setMax(6);\n\n$validator->isValid(\"Test\"); // returns true\n$validator->isValid(\"Testing\"); // returns false\n```\n\n## Limiting the minimum string length\n\nTo limit the minimal required string length, set the `min`\nproperty using an integer value:\n\n```php\n$validator = new Zend\\Validator\\StringLength(['min' => 5]);\n\n$validator->isValid(\"Test\"); // returns false\n$validator->isValid(\"Testing\"); // returns true\n```\n\nYou can set the value after instantiation using the `setMin()`\nmethod; `getMin()` retrieves the value.\n\n```php\n$validator = new Zend\\Validator\\StringLength();\n$validator->setMin(5);\n\n$validator->isValid(\"Test\"); // returns false\n$validator->isValid(\"Testing\"); // returns true\n```\n\n## Limiting both minimum and maximum string length\n\nSometimes you will need to set both a minimum and a maximum string length;\nas an example, in a username input, you may want to limit the name to a maximum\nof 30 characters, but require at least three charcters:\n\n```php\n$validator = new Zend\\Validator\\StringLength(['min' => 3, 'max' => 30]);\n\n$validator->isValid(\".\"); // returns false\n$validator->isValid(\"Test\"); // returns true\n$validator->isValid(\"Testing\"); // returns true\n```\n\n## Limiting to a strict length\n\nIf you need a strict length, then set the `min` and `max` properties to the same\nvalue:\n\n```php\n$validator = new Zend\\Validator\\StringLength(['min' => 4, 'max' => 4]);\n\n$validator->isValid('Tes'); // returns false\n$validator->isValid('Test'); // returns true\n$validator->isValid('Testi'); // returns false\n```\n\n> ### Setting a maximum lower than the minimum\n>\n> When you try to set a lower maximum value than the specified minimum value, or\n> a higher minimum value as the actual maximum value, the validator will raise\n> an exception.\n\n## Encoding of values\n\nStrings are always using a encoding. Even when you don't set the encoding\nexplicitly, PHP uses one. When your application is using a different encoding\nthan PHP itself, you should set an encoding manually.\n\nYou can set an encoding at instantiation with the `encoding` option, or by using\nthe `setEncoding()` method. We assume that your installation uses ISO and your\napplication it set to ISO. In this case you will see the below behaviour.\n\n```php\n$validator = new Zend\\Validator\\StringLength(['min' => 6]);\n$validator->isValid(\"Ärger\"); // returns false\n\n$validator->setEncoding(\"UTF-8\");\n$validator->isValid(\"Ärger\"); // returns true\n\n$validator2 = new Zend\\Validator\\StringLength([\n    'min' => 6,\n    'encoding' => 'UTF-8',\n]);\n$validator2->isValid(\"Ärger\"); // returns true\n```\n\nWhen your installation and your application are using different encodings, then\nyou should always set an encoding manually.\n\n## Validation Messages\nUsing the setMessage() method you can set another message to be returned in case of the specified failure.\n\n```php\n$validator = new Zend\\Validator\\StringLength(['min' => 3, 'max' => 30]);\n$validator->setMessage('Youre string is too long. You typed '%length%' chars.', Zend\\Validator\\StringLength::TOO_LONG);\n```\n"
  },
  {
    "path": "docs/book/validators/timezone.md",
    "content": "# Timezone Validator\n\n`Zend\\Validator\\Timezone` allows validating if an input string represents a\ntimezone.\n\n## Supported validation types\n\nThe `Zend\\Validator\\Timezone` validator is capable of validating the\nabbreviation (e.g. `ewt`) as well as the location string (e.g.\n`America/Los_Angeles`). These options are stored in the validator as\n`LOCATION`, `ABBREVIATION`, and `ALL` class constants.\n\n## Basic Usage\n\nThe default validation type will check against abbreviations as well as the\nlocation string.\n\n```php\n$validator = new Zend\\Validator\\Timezone();\n\n$validator->isValid('America/Los_Angeles'); // returns true\n$validator->isValid('ewt'); // returns true\n$validator->isValid('Foobar');  // returns false\n```\n\nTo validate against only the location string you can set the type:\n\n```php\nuse Zend\\Validator\\Timezone;\n\n$validator = new Timezone();\n$validator->setType(Timezone::LOCATION);\n\n$validator->isValid('America/Los_Angeles'); // returns true\n$validator->isValid('ewt'); // returns false\n$validator->isValid('Foobar');  // returns false\n```\n"
  },
  {
    "path": "docs/book/validators/undisclosed-password.md",
    "content": "# Undisclosed Password Validator\n\n- **Since 2.13.0**\n\n`Zend\\Validator\\UndisclosedPassword` allows you to validate if a given password was found in data breaches using the service [Have I Been Pwned?](https://www.haveibeenpwned.com), in a secure, anonymous way using [K-Anonymity](https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2) to ensure passwords are not send in full over the wire.\n\n> ### Installation requirements\n> \n> This validator needs to make a request over HTTP; therefore it requires an HTTP client. The validator provides support only for HTTP clients implementing [PSR-18](https://www.php-fig.org/psr/psr-18/) and [PSR-17](https://www.php-fig.org/psr/psr-17/) request and response factories.\n>\n> To ensure you have these installed before using this validator, run the following:\n>\n> ```bash\n> $ composer require psr/http-client\n> $ composer require psr/http-factory\n> ```\n\n## Basic usage\n\nThe validator has three required constructor arguments:\n\n- an HTTP Client that implements `Psr\\Http\\Client\\ClientInterface`\n- a `Psr\\Http\\Message\\RequestFactoryInterface` instance\n- a `Psr\\Http\\Message\\ResponseFactoryInterface` instance\n\nOnce you have an instance, you can then pass a password to its `isValid()` method to determine if it has been disclosed in a known data breach.\n\nIf the password was found via the service, `isValid()` will return `false`. If the password was not found, `isValid()` will return `true`.\n\n```php\n$validator = new Zend\\Validator\\UndisclosedPassword(\n    $httpClient, // a PSR-18 HttpClientInterface\n    $requestFactory, // a PSR-17 RequestFactoryInterface\n    $responseFactory // a PSR-17 ResponseFactoryInterface\n);\n\n$result = $validator->isValid('password');\n// $result is FALSE because \"password\" was found in a data breach\n\n$result = $validator->isValid('8aDk=XiW2E.77tLfuAcB'); \n// $result is TRUE because \"8aDk=XiW2E.77tLfuAcB\" was not found in a data breach\n```\n\n## A simple command line example\n\nIn this example, I'm using `zendframework/zend-diactoros` to provide HTTP messages, and `php-http/curl-client` as the HTTP client. Let's begin with installation of all required packages:\n\n```bash\n$ composer require \\\n    php-http/message \\\n    php-http/message-factory \\\n    php-http/discovery \\\n    php-http/curl-client \\\n    zendframework/zend-diactoros \\\n    zendframework/zend-validator\n```\n\nNext, I create a file, `undisclosed.php`, where I put my code:\n\n```php\n<?php\n\nnamespace Undisclosed;\n\nuse Http\\Client\\Curl\\Client;\nuse Zend\\Diactoros\\RequestFactory;\nuse Zend\\Diactoros\\ResponseFactory;\nuse Zend\\Validator\\UndisclosedPassword;\n\nrequire_once __DIR__ . '/vendor/autoload.php';\n\n\n$requestFactory = new RequestFactory();\n$responseFactory = new ResponseFactory();\n$client = new Client($responseFactory, null);\n\n$undisclosedPassword = new UndisclosedPassword($client, $requestFactory, $responseFactory);\necho 'Password \"password\" is ' . ($undisclosedPassword->isValid('password') ? 'not disclosed' : 'disclosed') . PHP_EOL;\necho 'Password \"NVt3MpvQ\" is ' . ($undisclosedPassword->isValid('NVt3MpvQ') ? 'not disclosed' : 'disclosed') . PHP_EOL;\n```\n\nTo run it, I use the PHP command line interpreter:\n\n```bash\n$ php undisclosed.php\n```\n\nAnd it gives me the following output:\n\n```bash\nPassword \"password\" is disclosed\nPassword \"NVt3MpvQ\" is not disclosed\n```\n"
  },
  {
    "path": "docs/book/validators/uri.md",
    "content": "# Uri Validator\n\n`Zend\\Validator\\Uri` allows you to validate a URI using the `Zend\\Uri\\Uri`\nhandler to parse the URI. The validator allows for both validation of absolute\nand/or relative URIs. There is the possibility to exchange the handler for\nanother one in case the parsing of the uri should be done differently.\n\n## Supported options\n\nThe following options are supported for `Zend\\Validator\\Uri`:\n\n- `uriHandler`: Defines the handler to be used to parse the uri. This options\n  defaults to a new instance of `Zend\\Uri\\Uri`.\n- `allowRelative`: Defines if relative paths are allowed. This option defaults\n  to `true`.\n- `allowAbsolute`: Defines if absolute paths are allowed. This option defaults\n  to `true`.\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\Uri();\n$uri = 'http://framework.zend.com/manual';\n\nif ($validator->isValid($uri)) {\n    // $uri was valid\n} else {\n    // false. You can use $validator->getMessages() to retrieve error messages\n}\n```\n"
  },
  {
    "path": "docs/book/validators/uuid.md",
    "content": "# UUID Validator\n\n`Zend\\Validator\\Uuid` allows validating [Universally Unique IDentifiers](https://en.wikipedia.org/wiki/Universally_unique_identifier)\n(UUIDs). UUIDs are 128-bit values that are guaranteed to be \"practically unique\"\nin order to help prevent identifier conflicts. Five separate UUID versions\nexist:\n\n- Version 1, which uses a combination of date-time and hardware MAC addresses to\n  generate the hash.\n- Version 2, which uses a combination of date-time and system user/group identifiers.\n- Version 3, which uses an MD5sum of a URI or distinguished name to generate the\n  hash.\n- Version 4, which uses a CSPRNG to generate the hash.\n- Version 5, which uses the same idea as Version 3, but using SHA-1 for hashing.\n\nThe `Uuid` validator is capable of validating whether a string is a valid UUID\nof any version. It does not validate that the UUID exists in your system,\nhowever, only that it is well-formed.\n\n> ### Introduced in 2.8.0\n>\n> `Zend\\Validator\\Uuid` was introduced with version 2.8.0.\n\n## Supported options\n\nThe `Uuid` validator has no additional options.\n\n## Basic usage\n\n```php\n$validator = new Zend\\Validator\\Uuid();\n\nif ($validator->isValid($uuid)) {\n    // UUID was valid\n} else {\n    // Invalid/mal-formed UUID; use $validator->getMessages() for more detail\n}\n```\n"
  },
  {
    "path": "docs/book/writing-validators.md",
    "content": "# Writing Validators\n\nzend-validator supplies a set of commonly needed validators, but many\napplications have needs for custom validators. The component allows this via\nimplementations of `Zend\\Validator\\ValidatorInterface`.\n\n`Zend\\Validator\\ValidatorInterface` defines two methods: `isValid()` and\n`getMessages()`. An object that implements the interface may be added to a\nvalidator chain using `Zend\\Validator\\ValidatorChain::addValidator()`. Such\nobjects may also be used with\n[zend-inputfilter](https://docs.zendframework.com/zend-inputfilter).\n\nValidators will return a boolean value from `isValid()`, and report information\nregarding **why** a value failed validation via `getMessages()`. The\navailability of the reasons for validation failures may be valuable to an\napplication for various purposes, such as providing statistics for usability\nanalysis.\n\nBasic validation failure message functionality is implemented in\n`Zend\\Validator\\AbstractValidator`, which you may extend for your custom\nvalidators.  Extending class you would implement the `isValid()` method logic\nand define the message variables and message templates that correspond to the\ntypes of validation failures that can occur. If a value fails your validation\ntests, then `isValid()` should return `false`. If the value passes your\nvalidation tests, then `isValid()` should return `true`.\n\nIn general, the `isValid()` method should not throw any exceptions, except where\nit is impossible to determine whether or not the input value is valid. A few\nexamples of reasonable cases for throwing an exception might be if a file cannot\nbe opened, an LDAP server could not be contacted, or a database connection is\nunavailable, where such a thing may be required for validation success or\nfailure to be determined.\n\n## Creating a Validation Class\n\nThe following example demonstrates how a custom validator might be written. In\nthis case, the validator tests that a value is a floating point value.\n\n```php\nnamespace MyValid;\n\nuse Zend\\Validator\\AbstractValidator;\n\nclass Float extends AbstractValidator\n{\n    const FLOAT = 'float';\n\n    protected $messageTemplates = [\n        self::FLOAT => \"'%value%' is not a floating point value\",\n    ];\n\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if (! is_float($value)) {\n            $this->error(self::FLOAT);\n            return false;\n        }\n\n        return true;\n    }\n}\n```\n\nThe class defines a template for its single validation failure message, which\nincludes the built-in magic parameter, `%value%`. The call to `setValue()`\nprepares the object to insert the tested value into the failure message\nautomatically, should the value fail validation. The call to `error()` tracks a\nreason for validation failure. Since this class only defines one failure\nmessage, it is not necessary to provide `error()` with the name of the failure\nmessage template.\n\n## Writing a Validation Class having Dependent Conditions\n\nThe following example demonstrates a more complex set of validation rules:\n\n- The input must be numeric.\n- The input must fall within a range of boundary values.\n\nAn input value would fail validation for exactly one of the following reasons:\n\n- The input value is not numeric.\n- The input value is less than the minimum allowed value.\n- The input value is more than the maximum allowed value.\n\nThese validation failure reasons are then translated to definitions in the\nclass:\n\n```php\nnamespace MyValid;\n\nuse Zend\\Validator\\AbstractValidator;\n\nclass NumericBetween extends AbstractValidator\n{\n    const MSG_NUMERIC = 'msgNumeric';\n    const MSG_MINIMUM = 'msgMinimum';\n    const MSG_MAXIMUM = 'msgMaximum';\n\n    public $minimum = 0;\n    public $maximum = 100;\n\n    protected $messageVariables = [\n        'min' => 'minimum',\n        'max' => 'maximum',\n    ];\n\n    protected $messageTemplates = [\n        self::MSG_NUMERIC => \"'%value%' is not numeric\",\n        self::MSG_MINIMUM => \"'%value%' must be at least '%min%'\",\n        self::MSG_MAXIMUM => \"'%value%' must be no more than '%max%'\",\n    ];\n\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if (! is_numeric($value)) {\n            $this->error(self::MSG_NUMERIC);\n            return false;\n        }\n\n        if ($value < $this->minimum) {\n            $this->error(self::MSG_MINIMUM);\n            return false;\n        }\n\n        if ($value > $this->maximum) {\n            $this->error(self::MSG_MAXIMUM);\n            return false;\n        }\n\n        return true;\n    }\n}\n```\n\nThe public properties `$minimum` and `$maximum` have been established to provide\nthe minimum and maximum boundaries, respectively, for a value to successfully\nvalidate. The class also defines two message variables that correspond to the\npublic properties and allow `min` and `max` to be used in message templates as\nmagic parameters, just as with `value`.\n\nNote that if any one of the validation checks in `isValid()` fails, an\nappropriate failure message is prepared, and the method immediately returns\n`false`. These validation rules are therefore sequentially dependent; that is,\nif one test should fail, there is no need to test any subsequent validation\nrules. This need not be the case, however. The following example illustrates how\nto write a class having independent validation rules, where the validation\nobject may return multiple reasons why a particular validation attempt failed.\n\n## Validation with Independent Conditions, Multiple Reasons for Failure\n\nConsider writing a validation class for password strength enforcement - when a\nuser is required to choose a password that meets certain criteria for helping\nsecure user accounts. Let us assume that the password security criteria enforce\nthat the password:\n\n- is at least 8 characters in length,\n- contains at least one uppercase letter,\n- contains at least one lowercase letter,\n- and contains at least one digit character.\n\nThe following class implements these validation criteria:\n\n```php\nnamespace MyValid;\n\nuse Zend\\Validator\\AbstractValidator;\n\nclass PasswordStrength extends AbstractValidator\n{\n    const LENGTH = 'length';\n    const UPPER  = 'upper';\n    const LOWER  = 'lower';\n    const DIGIT  = 'digit';\n\n    protected $messageTemplates = [\n        self::LENGTH => \"'%value%' must be at least 8 characters in length\",\n        self::UPPER  => \"'%value%' must contain at least one uppercase letter\",\n        self::LOWER  => \"'%value%' must contain at least one lowercase letter\",\n        self::DIGIT  => \"'%value%' must contain at least one digit character\",\n    ];\n\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        $isValid = true;\n\n        if (strlen($value) < 8) {\n            $this->error(self::LENGTH);\n            $isValid = false;\n        }\n\n        if (! preg_match('/[A-Z]/', $value)) {\n            $this->error(self::UPPER);\n            $isValid = false;\n        }\n\n        if (! preg_match('/[a-z]/', $value)) {\n            $this->error(self::LOWER);\n            $isValid = false;\n        }\n\n        if (! preg_match('/\\d/', $value)) {\n            $this->error(self::DIGIT);\n            $isValid = false;\n        }\n\n        return $isValid;\n    }\n}\n```\n\nNote that the four criteria tests in `isValid()` do not immediately return\n`false`. This allows the validation class to provide **all** of the reasons that\nthe input password failed to meet the validation requirements. If, for example,\na user were to input the string `#$%` as a password, `isValid()` would cause\nall four validation failure messages to be returned by a subsequent call to\n`getMessages()`.\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "docs_dir: docs/book\nsite_dir: docs/html\nnav:\n    - Home: index.md\n    - Introduction: intro.md\n    - Reference:\n        - \"Validator Chains\": validator-chains.md\n        - \"Writing Validators\": writing-validators.md\n        - \"Validation Messages\": messages.md\n        - \"Standard Validation Classes\": set.md\n        - Validators:\n            - Barcode: validators/barcode.md\n            - Between: validators/between.md\n            - Callback: validators/callback.md\n            - CreditCard: validators/credit-card.md\n            - Date: validators/date.md\n            - \"Db\\\\RecordExists and Db\\\\NoRecordExists\": validators/db.md\n            - Digits: validators/digits.md\n            - EmailAddress: validators/email-address.md\n            - Explode: validators/explode.md\n            - GreaterThan: validators/greater-than.md\n            - Hex: validators/hex.md\n            - Hostname: validators/hostname.md\n            - Iban: validators/iban.md\n            - Identical: validators/identical.md\n            - InArray: validators/in-array.md\n            - Ip: validators/ip.md\n            - Isbn: validators/isbn.md\n            - IsCountable: validators/is-countable.md\n            - IsInstanceOf: validators/isinstanceof.md\n            - LessThan: validators/less-than.md\n            - NotEmpty: validators/not-empty.md\n            - Regex: validators/regex.md\n            - Sitemap: validators/sitemap.md\n            - Step: validators/step.md\n            - StringLength: validators/string-length.md\n            - Timezone: validators/timezone.md\n            - UndisclosedPassword: validators/undisclosed-password.md\n            - Uri: validators/uri.md\n            - Uuid: validators/uuid.md\n        - \"File Validators\":\n            - Introduction: validators/file/intro.md\n            - Count: validators/file/count.md\n            - Crc32: validators/file/crc32.md\n            - ExcludeExtension: validators/file/exclude-extension.md\n            - ExcludeMimeType: validators/file/exclude-mime-type.md\n            - Exists: validators/file/exists.md\n            - Extension: validators/file/extension.md\n            - FilesSize: validators/file/files-size.md\n            - Hash: validators/file/hash.md\n            - ImageSize: validators/file/image-size.md\n            - IsCompressed: validators/file/is-compressed.md\n            - IsImage: validators/file/is-image.md\n            - Md5: validators/file/md5.md\n            - MimeType: validators/file/mime-type.md\n            - NotExists: validators/file/not-exists.md\n            - Sha1: validators/file/sha1.md\n            - Size: validators/file/size.md\n            - Upload: validators/file/upload.md\n            - UploadFile: validators/file/upload-file.md\n            - WordCount: validators/file/word-count.md\nsite_name: zend-validator\nsite_description: \"Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria.\"\nrepo_url: 'https://github.com/zendframework/zend-validator'\n"
  },
  {
    "path": "phpcs.xml",
    "content": "﻿<?xml version=\"1.0\"?>\n<ruleset name=\"Zend Framework coding standard\">\n    <rule ref=\"./vendor/zendframework/zend-coding-standard/ruleset.xml\"/>\n\n    <!-- Paths to check -->\n    <file>src</file>\n    <file>test</file>\n</ruleset>\n"
  },
  {
    "path": "phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"./vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"./vendor/autoload.php\"\n         beStrictAboutOutputDuringTests=\"true\"\n         beStrictAboutTestsThatDoNotTestAnything=\"true\"\n         colors=\"true\">\n    <testsuites>\n        <testsuite name=\"zend-validator Test Suite\">\n            <directory>./test/</directory>\n        </testsuite>\n    </testsuites>\n\n    <groups>\n        <exclude>\n            <group>disable</group>\n        </exclude>\n    </groups>\n\n    <filter>\n        <whitelist addUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./src</directory>\n        </whitelist>\n    </filter>\n\n    <php>\n        <ini name=\"date.timezone\" value=\"UTC\"/>\n\n        <!-- OB_ENABLED should be enabled for some tests to check if all\n             functionality works as expected. Such tests include those for\n             Zend\\Soap and Zend\\Session, which require that headers not be sent\n             in order to work. -->\n        <env name=\"TESTS_ZEND_OB_ENABLED\" value=\"false\" />\n\n        <env name=\"TESTS_ZEND_VALIDATOR_ONLINE_ENABLED\" value=\"false\" />\n    </php>\n</phpunit>\n"
  },
  {
    "path": "src/AbstractValidator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nabstract class AbstractValidator implements\n    Translator\\TranslatorAwareInterface,\n    ValidatorInterface\n{\n    /**\n     * The value to be validated\n     *\n     * @var mixed\n     */\n    protected $value;\n\n    /**\n     * Default translation object for all validate objects\n     * @var Translator\\TranslatorInterface\n     */\n    protected static $defaultTranslator;\n\n    /**\n     * Default text domain to be used with translator\n     * @var string\n     */\n    protected static $defaultTranslatorTextDomain = 'default';\n\n    /**\n     * Limits the maximum returned length of an error message\n     *\n     * @var int\n     */\n    protected static $messageLength = -1;\n\n    protected $abstractOptions = [\n        'messages'             => [], // Array of validation failure messages\n        'messageTemplates'     => [], // Array of validation failure message templates\n        'messageVariables'     => [], // Array of additional variables available for validation failure messages\n        'translator'           => null,    // Translation object to used -> Translator\\TranslatorInterface\n        'translatorTextDomain' => null,    // Translation text domain\n        'translatorEnabled'    => true,    // Is translation enabled?\n        'valueObscured'        => false,   // Flag indicating whether or not value should be obfuscated\n                                           // in error messages\n    ];\n\n    /**\n     * Abstract constructor for all validators\n     * A validator should accept following parameters:\n     *  - nothing f.e. Validator()\n     *  - one or multiple scalar values f.e. Validator($first, $second, $third)\n     *  - an array f.e. Validator(array($first => 'first', $second => 'second', $third => 'third'))\n     *  - an instance of Traversable f.e. Validator($config_instance)\n     *\n     * @param array|Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        // The abstract constructor allows no scalar values\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if (isset($this->messageTemplates)) {\n            $this->abstractOptions['messageTemplates'] = $this->messageTemplates;\n        }\n\n        if (isset($this->messageVariables)) {\n            $this->abstractOptions['messageVariables'] = $this->messageVariables;\n        }\n\n        if (is_array($options)) {\n            $this->setOptions($options);\n        }\n    }\n\n    /**\n     * Returns an option\n     *\n     * @param string $option Option to be returned\n     * @return mixed Returned option\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function getOption($option)\n    {\n        if (array_key_exists($option, $this->abstractOptions)) {\n            return $this->abstractOptions[$option];\n        }\n\n        if (isset($this->options) && array_key_exists($option, $this->options)) {\n            return $this->options[$option];\n        }\n\n        throw new Exception\\InvalidArgumentException(\"Invalid option '$option'\");\n    }\n\n    /**\n     * Returns all available options\n     *\n     * @return array Array with all available options\n     */\n    public function getOptions()\n    {\n        $result = $this->abstractOptions;\n        if (isset($this->options)) {\n            $result += $this->options;\n        }\n        return $result;\n    }\n\n    /**\n     * Sets one or multiple options\n     *\n     * @param  array|Traversable $options Options to set\n     * @throws Exception\\InvalidArgumentException If $options is not an array or Traversable\n     * @return AbstractValidator Provides fluid interface\n     */\n    public function setOptions($options = [])\n    {\n        if (! is_array($options) && ! $options instanceof Traversable) {\n            throw new Exception\\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable');\n        }\n\n        foreach ($options as $name => $option) {\n            $fname = 'set' . ucfirst($name);\n            $fname2 = 'is' . ucfirst($name);\n            if (($name !== 'setOptions') && method_exists($this, $name)) {\n                $this->{$name}($option);\n            } elseif (($fname !== 'setOptions') && method_exists($this, $fname)) {\n                $this->{$fname}($option);\n            } elseif (method_exists($this, $fname2)) {\n                $this->{$fname2}($option);\n            } elseif (isset($this->options)) {\n                $this->options[$name] = $option;\n            } else {\n                $this->abstractOptions[$name] = $option;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns array of validation failure messages\n     *\n     * @return array\n     */\n    public function getMessages()\n    {\n        return array_unique($this->abstractOptions['messages'], SORT_REGULAR);\n    }\n\n    /**\n     * Invoke as command\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function __invoke($value)\n    {\n        return $this->isValid($value);\n    }\n\n    /**\n     * Returns an array of the names of variables that are used in constructing validation failure messages\n     *\n     * @return array\n     */\n    public function getMessageVariables()\n    {\n        return array_keys($this->abstractOptions['messageVariables']);\n    }\n\n    /**\n     * Returns the message templates from the validator\n     *\n     * @return array\n     */\n    public function getMessageTemplates()\n    {\n        return $this->abstractOptions['messageTemplates'];\n    }\n\n    /**\n     * Sets the validation failure message template for a particular key\n     *\n     * @param  string $messageString\n     * @param  string $messageKey     OPTIONAL\n     * @return AbstractValidator Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setMessage($messageString, $messageKey = null)\n    {\n        if ($messageKey === null) {\n            $keys = array_keys($this->abstractOptions['messageTemplates']);\n            foreach ($keys as $key) {\n                $this->setMessage($messageString, $key);\n            }\n            return $this;\n        }\n\n        if (! isset($this->abstractOptions['messageTemplates'][$messageKey])) {\n            throw new Exception\\InvalidArgumentException(\"No message template exists for key '$messageKey'\");\n        }\n\n        $this->abstractOptions['messageTemplates'][$messageKey] = $messageString;\n        return $this;\n    }\n\n    /**\n     * Sets validation failure message templates given as an array, where the array keys are the message keys,\n     * and the array values are the message template strings.\n     *\n     * @param  array $messages\n     * @return AbstractValidator\n     */\n    public function setMessages(array $messages)\n    {\n        foreach ($messages as $key => $message) {\n            $this->setMessage($message, $key);\n        }\n        return $this;\n    }\n\n    /**\n     * Magic function returns the value of the requested property, if and only if it is the value or a\n     * message variable.\n     *\n     * @param  string $property\n     * @return mixed\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function __get($property)\n    {\n        if ($property == 'value') {\n            return $this->value;\n        }\n\n        if (array_key_exists($property, $this->abstractOptions['messageVariables'])) {\n            $result = $this->abstractOptions['messageVariables'][$property];\n            if (is_array($result)) {\n                return $this->{key($result)}[current($result)];\n            }\n            return $this->{$result};\n        }\n\n        if (isset($this->messageVariables) && array_key_exists($property, $this->messageVariables)) {\n            $result = $this->{$this->messageVariables[$property]};\n            if (is_array($result)) {\n                return $this->{key($result)}[current($result)];\n            }\n            return $this->{$result};\n        }\n\n        throw new Exception\\InvalidArgumentException(\"No property exists by the name '$property'\");\n    }\n\n    /**\n     * Constructs and returns a validation failure message with the given message key and value.\n     *\n     * Returns null if and only if $messageKey does not correspond to an existing template.\n     *\n     * If a translator is available and a translation exists for $messageKey,\n     * the translation will be used.\n     *\n     * @param  string              $messageKey\n     * @param  string|array|object $value\n     * @return string\n     */\n    protected function createMessage($messageKey, $value)\n    {\n        if (! isset($this->abstractOptions['messageTemplates'][$messageKey])) {\n            return;\n        }\n\n        $message = $this->abstractOptions['messageTemplates'][$messageKey];\n\n        $message = $this->translateMessage($messageKey, $message);\n\n        if (is_object($value) &&\n            ! in_array('__toString', get_class_methods($value))\n        ) {\n            $value = get_class($value) . ' object';\n        } elseif (is_array($value)) {\n            $value = var_export($value, 1);\n        } else {\n            $value = (string) $value;\n        }\n\n        if ($this->isValueObscured()) {\n            $value = str_repeat('*', strlen($value));\n        }\n\n        $message = str_replace('%value%', (string) $value, $message);\n        foreach ($this->abstractOptions['messageVariables'] as $ident => $property) {\n            if (is_array($property)) {\n                $value = $this->{key($property)}[current($property)];\n                if (is_array($value)) {\n                    $value = '[' . implode(', ', $value) . ']';\n                }\n            } else {\n                $value = $this->$property;\n            }\n            $message = str_replace(\"%$ident%\", (string) $value, $message);\n        }\n\n        $length = self::getMessageLength();\n        if (($length > -1) && (strlen($message) > $length)) {\n            $message = substr($message, 0, ($length - 3)) . '...';\n        }\n\n        return $message;\n    }\n\n    /**\n     * @param  string $messageKey\n     * @param  string $value      OPTIONAL\n     * @return void\n     */\n    protected function error($messageKey, $value = null)\n    {\n        if ($messageKey === null) {\n            $keys = array_keys($this->abstractOptions['messageTemplates']);\n            $messageKey = current($keys);\n        }\n\n        if ($value === null) {\n            $value = $this->value;\n        }\n\n        $this->abstractOptions['messages'][$messageKey] = $this->createMessage($messageKey, $value);\n    }\n\n    /**\n     * Returns the validation value\n     *\n     * @return mixed Value to be validated\n     */\n    protected function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Sets the value to be validated and clears the messages and errors arrays\n     *\n     * @param  mixed $value\n     * @return void\n     */\n    protected function setValue($value)\n    {\n        $this->value               = $value;\n        $this->abstractOptions['messages'] = [];\n    }\n\n    /**\n     * Set flag indicating whether or not value should be obfuscated in messages\n     *\n     * @param  bool $flag\n     * @return AbstractValidator\n     */\n    public function setValueObscured($flag)\n    {\n        $this->abstractOptions['valueObscured'] = (bool) $flag;\n        return $this;\n    }\n\n    /**\n     * Retrieve flag indicating whether or not value should be obfuscated in\n     * messages\n     *\n     * @return bool\n     */\n    public function isValueObscured()\n    {\n        return $this->abstractOptions['valueObscured'];\n    }\n\n    /**\n     * Set translation object\n     *\n     * @param  Translator\\TranslatorInterface|null $translator\n     * @param  string          $textDomain (optional)\n     * @return AbstractValidator\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setTranslator(Translator\\TranslatorInterface $translator = null, $textDomain = null)\n    {\n        $this->abstractOptions['translator'] = $translator;\n        if (null !== $textDomain) {\n            $this->setTranslatorTextDomain($textDomain);\n        }\n        return $this;\n    }\n\n    /**\n     * Return translation object\n     *\n     * @return Translator\\TranslatorInterface|null\n     */\n    public function getTranslator()\n    {\n        if (! $this->isTranslatorEnabled()) {\n            return;\n        }\n\n        if (null === $this->abstractOptions['translator']) {\n            $this->abstractOptions['translator'] = self::getDefaultTranslator();\n        }\n\n        return $this->abstractOptions['translator'];\n    }\n\n    /**\n     * Does this validator have its own specific translator?\n     *\n     * @return bool\n     */\n    public function hasTranslator()\n    {\n        return (bool) $this->abstractOptions['translator'];\n    }\n\n    /**\n     * Set translation text domain\n     *\n     * @param  string $textDomain\n     * @return AbstractValidator\n     */\n    public function setTranslatorTextDomain($textDomain = 'default')\n    {\n        $this->abstractOptions['translatorTextDomain'] = $textDomain;\n        return $this;\n    }\n\n    /**\n     * Return the translation text domain\n     *\n     * @return string\n     */\n    public function getTranslatorTextDomain()\n    {\n        if (null === $this->abstractOptions['translatorTextDomain']) {\n            $this->abstractOptions['translatorTextDomain'] =\n                self::getDefaultTranslatorTextDomain();\n        }\n        return $this->abstractOptions['translatorTextDomain'];\n    }\n\n    /**\n     * Set default translation object for all validate objects\n     *\n     * @param  Translator\\TranslatorInterface|null $translator\n     * @param  string          $textDomain (optional)\n     * @return void\n     * @throws Exception\\InvalidArgumentException\n     */\n    public static function setDefaultTranslator(Translator\\TranslatorInterface $translator = null, $textDomain = null)\n    {\n        static::$defaultTranslator = $translator;\n        if (null !== $textDomain) {\n            self::setDefaultTranslatorTextDomain($textDomain);\n        }\n    }\n\n    /**\n     * Get default translation object for all validate objects\n     *\n     * @return Translator\\TranslatorInterface|null\n     */\n    public static function getDefaultTranslator()\n    {\n        return static::$defaultTranslator;\n    }\n\n    /**\n     * Is there a default translation object set?\n     *\n     * @return bool\n     */\n    public static function hasDefaultTranslator()\n    {\n        return (bool) static::$defaultTranslator;\n    }\n\n    /**\n     * Set default translation text domain for all validate objects\n     *\n     * @param  string $textDomain\n     * @return void\n     */\n    public static function setDefaultTranslatorTextDomain($textDomain = 'default')\n    {\n        static::$defaultTranslatorTextDomain = $textDomain;\n    }\n\n    /**\n     * Get default translation text domain for all validate objects\n     *\n     * @return string\n     */\n    public static function getDefaultTranslatorTextDomain()\n    {\n        return static::$defaultTranslatorTextDomain;\n    }\n\n    /**\n     * Indicate whether or not translation should be enabled\n     *\n     * @param  bool $flag\n     * @return AbstractValidator\n     */\n    public function setTranslatorEnabled($flag = true)\n    {\n        $this->abstractOptions['translatorEnabled'] = (bool) $flag;\n        return $this;\n    }\n\n    /**\n     * Is translation enabled?\n     *\n     * @return bool\n     */\n    public function isTranslatorEnabled()\n    {\n        return $this->abstractOptions['translatorEnabled'];\n    }\n\n    /**\n     * Returns the maximum allowed message length\n     *\n     * @return int\n     */\n    public static function getMessageLength()\n    {\n        return static::$messageLength;\n    }\n\n    /**\n     * Sets the maximum allowed message length\n     *\n     * @param int $length\n     */\n    public static function setMessageLength($length = -1)\n    {\n        static::$messageLength = $length;\n    }\n\n    /**\n     * Translate a validation message\n     *\n     * @param  string $messageKey\n     * @param  string $message\n     * @return string\n     */\n    protected function translateMessage($messageKey, $message)\n    {\n        $translator = $this->getTranslator();\n        if (! $translator) {\n            return $message;\n        }\n\n        return $translator->translate($message, $this->getTranslatorTextDomain());\n    }\n}\n"
  },
  {
    "path": "src/Barcode/AbstractAdapter.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nabstract class AbstractAdapter implements AdapterInterface\n{\n    /**\n     * Allowed options for this adapter\n     * @var array\n     */\n    protected $options = [\n        'length'     => null,   // Allowed barcode lengths, integer, array, string\n        'characters' => null,   // Allowed barcode characters\n        'checksum'   => null,   // Callback to checksum function\n        'useChecksum' => true,  // Is a checksum value included?, boolean\n    ];\n\n    /**\n     * Checks the length of a barcode\n     *\n     * @param  string $value The barcode to check for proper length\n     * @return bool\n     */\n    public function hasValidLength($value)\n    {\n        if (! is_string($value)) {\n            return false;\n        }\n\n        $fixum  = strlen($value);\n        $found  = false;\n        $length = $this->getLength();\n        if (is_array($length)) {\n            foreach ($length as $value) {\n                if ($fixum == $value) {\n                    $found = true;\n                }\n\n                if ($value == -1) {\n                    $found = true;\n                }\n            }\n        } elseif ($fixum == $length) {\n            $found = true;\n        } elseif ($length == -1) {\n            $found = true;\n        } elseif ($length == 'even') {\n            $count = $fixum % 2;\n            $found = (0 == $count);\n        } elseif ($length == 'odd') {\n            $count = $fixum % 2;\n            $found = (1 == $count);\n        }\n\n        return $found;\n    }\n\n    /**\n     * Checks for allowed characters within the barcode\n     *\n     * @param  string $value The barcode to check for allowed characters\n     * @return bool\n     */\n    public function hasValidCharacters($value)\n    {\n        if (! is_string($value)) {\n            return false;\n        }\n\n        $characters = $this->getCharacters();\n        if ($characters == 128) {\n            for ($x = 0; $x < 128; ++$x) {\n                $value = str_replace(chr($x), '', $value);\n            }\n        } else {\n            $chars = str_split($characters);\n            foreach ($chars as $char) {\n                $value = str_replace($char, '', $value);\n            }\n        }\n\n        if (strlen($value) > 0) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validates the checksum\n     *\n     * @param  string $value The barcode to check the checksum for\n     * @return bool\n     */\n    public function hasValidChecksum($value)\n    {\n        $checksum = $this->getChecksum();\n        if (! empty($checksum)) {\n            if (method_exists($this, $checksum)) {\n                return $this->$checksum($value);\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns the allowed barcode length\n     *\n     * @return int|array\n     */\n    public function getLength()\n    {\n        return $this->options['length'];\n    }\n\n    /**\n     * Returns the allowed characters\n     *\n     * @return int|string|array\n     */\n    public function getCharacters()\n    {\n        return $this->options['characters'];\n    }\n\n    /**\n     * Returns the checksum function name\n     *\n     */\n    public function getChecksum()\n    {\n        return $this->options['checksum'];\n    }\n\n    /**\n     * Sets the checksum validation method\n     *\n     * @param callable $checksum Checksum method to call\n     * @return AbstractAdapter\n     */\n    protected function setChecksum($checksum)\n    {\n        $this->options['checksum'] = $checksum;\n        return $this;\n    }\n\n    /**\n     * Sets the checksum validation, if no value is given, the actual setting is returned\n     *\n     * @param  bool $check\n     * @return AbstractAdapter|bool\n     */\n    public function useChecksum($check = null)\n    {\n        if ($check === null) {\n            return $this->options['useChecksum'];\n        }\n\n        $this->options['useChecksum'] = (bool) $check;\n        return $this;\n    }\n\n    /**\n     * Sets the length of this barcode\n     *\n     * @param int|array $length\n     * @return AbstractAdapter\n     */\n    protected function setLength($length)\n    {\n        $this->options['length'] = $length;\n        return $this;\n    }\n\n    /**\n     * Sets the allowed characters of this barcode\n     *\n     * @param int $characters\n     * @return AbstractAdapter\n     */\n    protected function setCharacters($characters)\n    {\n        $this->options['characters'] = $characters;\n        return $this;\n    }\n\n    /**\n     * Validates the checksum (Modulo 10)\n     * GTIN implementation factor 3\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function gtin($value)\n    {\n        $barcode = substr($value, 0, -1);\n        $sum     = 0;\n        $length  = strlen($barcode) - 1;\n\n        for ($i = 0; $i <= $length; $i++) {\n            if (($i % 2) === 0) {\n                $sum += $barcode[$length - $i] * 3;\n            } else {\n                $sum += $barcode[$length - $i];\n            }\n        }\n\n        $calc     = $sum % 10;\n        $checksum = ($calc === 0) ? 0 : (10 - $calc);\n        if ($value[$length + 1] != $checksum) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validates the checksum (Modulo 10)\n     * IDENTCODE implementation factors 9 and 4\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function identcode($value)\n    {\n        $barcode = substr($value, 0, -1);\n        $sum     = 0;\n        $length  = strlen($value) - 2;\n\n        for ($i = 0; $i <= $length; $i++) {\n            if (($i % 2) === 0) {\n                $sum += $barcode[$length - $i] * 4;\n            } else {\n                $sum += $barcode[$length - $i] * 9;\n            }\n        }\n\n        $calc     = $sum % 10;\n        $checksum = ($calc === 0) ? 0 : (10 - $calc);\n        if ($value[$length + 1] != $checksum) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validates the checksum (Modulo 10)\n     * CODE25 implementation factor 3\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function code25($value)\n    {\n        $barcode = substr($value, 0, -1);\n        $sum     = 0;\n        $length  = strlen($barcode) - 1;\n\n        for ($i = 0; $i <= $length; $i++) {\n            if (($i % 2) === 0) {\n                $sum += $barcode[$i] * 3;\n            } else {\n                $sum += $barcode[$i];\n            }\n        }\n\n        $calc     = $sum % 10;\n        $checksum = ($calc === 0) ? 0 : (10 - $calc);\n        if ($value[$length + 1] != $checksum) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validates the checksum ()\n     * POSTNET implementation\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function postnet($value)\n    {\n        $checksum = substr($value, -1, 1);\n        $values   = str_split(substr($value, 0, -1));\n\n        $check = 0;\n        foreach ($values as $row) {\n            $check += $row;\n        }\n\n        $check %= 10;\n        $check = 10 - $check;\n        if ($check == $checksum) {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Barcode/AdapterInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\ninterface AdapterInterface\n{\n    /**\n     * Checks the length of a barcode\n     *\n     * @param  string $value  The barcode to check for proper length\n     * @return bool\n     */\n    public function hasValidLength($value);\n\n    /**\n     * Checks for allowed characters within the barcode\n     *\n     * @param  string $value The barcode to check for allowed characters\n     * @return bool\n     */\n    public function hasValidCharacters($value);\n\n    /**\n     * Validates the checksum\n     *\n     * @param string $value The barcode to check the checksum for\n     * @return bool\n     */\n    public function hasValidChecksum($value);\n\n    /**\n     * Returns the allowed barcode length\n     *\n     * @return int|array\n     */\n    public function getLength();\n\n    /**\n     * Returns the allowed characters\n     *\n     * @return int|string|array\n     */\n    public function getCharacters();\n\n    /**\n     * Returns if barcode uses a checksum\n     *\n     * @return bool\n     */\n    public function getChecksum();\n\n    /**\n     * Sets the checksum validation, if no value is given, the actual setting is returned\n     *\n     * @param  bool $check\n     * @return AbstractAdapter|bool\n     */\n    public function useChecksum($check = null);\n}\n"
  },
  {
    "path": "src/Barcode/Codabar.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Codabar extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters('0123456789-$:/.+ABCDTN*E');\n        $this->useChecksum(false);\n    }\n\n    /**\n     * Checks for allowed characters\n     * @see Zend\\Validator\\Barcode.AbstractAdapter::checkChars()\n     */\n    public function hasValidCharacters($value)\n    {\n        if (strpbrk($value, 'ABCD')) {\n            $first = $value[0];\n            if (! strpbrk($first, 'ABCD')) {\n                // Missing start char\n                return false;\n            }\n\n            $last = substr($value, -1, 1);\n            if (! strpbrk($last, 'ABCD')) {\n                // Missing stop char\n                return false;\n            }\n\n            $value = substr($value, 1, -1);\n        } elseif (strpbrk($value, 'TN*E')) {\n            $first = $value[0];\n            if (! strpbrk($first, 'TN*E')) {\n                // Missing start char\n                return false;\n            }\n\n            $last = substr($value, -1, 1);\n            if (! strpbrk($last, 'TN*E')) {\n                // Missing stop char\n                return false;\n            }\n\n            $value = substr($value, 1, -1);\n        }\n\n        $chars  = $this->getCharacters();\n        $this->setCharacters('0123456789-$:/.+');\n        $result = parent::hasValidCharacters($value);\n        $this->setCharacters($chars);\n        return $result;\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code128.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nuse Zend\\Stdlib\\StringUtils;\nuse Zend\\Stdlib\\StringWrapper\\StringWrapperInterface;\nuse Zend\\Validator\\Exception;\n\nclass Code128 extends AbstractAdapter\n{\n    /**\n     * The used string wrapper used for basic UTF-8 string functions\n     *\n     * @var StringWrapperInterface\n     */\n    protected $utf8StringWrapper;\n\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters([\n            'A' => [\n                 0 => ' ',  1 => '!',  2 => '\"',  3 => '#',  4 => '$',  5 => '%',  6 => '&',  7 => \"'\",\n                 8 => '(',  9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/',\n                16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7',\n                24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?',\n                32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G',\n                40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O',\n                48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W',\n                56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\\\', 61 => ']', 62 => '^', 63 => '_',\n                64 => 0x00, 65 => 0x01, 66 => 0x02, 67 => 0x03, 68 => 0x04, 69 => 0x05, 70 => 0x06, 71 => 0x07,\n                72 => 0x08, 73 => 0x09, 74 => 0x0A, 75 => 0x0B, 76 => 0x0C, 77 => 0x0D, 78 => 0x0E, 79 => 0x0F,\n                80 => 0x10, 81 => 0x11, 82 => 0x12, 83 => 0x13, 84 => 0x14, 85 => 0x15, 86 => 0x16, 87 => 0x17,\n                88 => 0x18, 89 => 0x19, 90 => 0x1A, 91 => 0x1B, 92 => 0x1C, 93 => 0x1D, 94 => 0x1E, 95 => 0x1F,\n                96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',\n               104 => 'ˆ', 105 => '‰', 106 => 'Š'],\n            'B' => [\n                 0 => ' ',  1 => '!',  2 => '\"',  3 => '#',  4 => '$',  5 => '%',  6 => '&',  7 => \"'\",\n                 8 => '(',  9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/',\n                16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7',\n                24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?',\n                32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G',\n                40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O',\n                48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W',\n                56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\\\', 61 => ']', 62 => '^', 63 => '_',\n                64 => '`', 65 => 'a', 66 => 'b', 67 => 'c', 68 => 'd', 69 => 'e', 70 => 'f', 71 => 'g',\n                72 => 'h', 73 => 'i', 74 => 'j', 75 => 'k', 76 => 'l', 77 => 'm', 78 => 'n', 79 => 'o',\n                80 => 'p', 81 => 'q', 82 => 'r', 83 => 's', 84 => 't', 85 => 'u', 86 => 'v', 87 => 'w',\n                88 => 'x', 89 => 'y', 90 => 'z', 91 => '{', 92 => '|', 93 => '}', 94 => '~', 95 => 0x7F,\n                96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',\n               104 => 'ˆ', 105 => '‰', 106 => 'Š'],\n            'C' => [\n                 0 => '00',  1 => '01',  2 => '02',  3 => '03',  4 => '04',  5 => '05',  6 => '06',  7 => '07',\n                 8 => '08',  9 => '09', 10 => '10', 11 => '11', 12 => '12', 13 => '13', 14 => '14', 15 => '15',\n                16 => '16', 17 => '17', 18 => '18', 19 => '19', 20 => '20', 21 => '21', 22 => '22', 23 => '23',\n                24 => '24', 25 => '25', 26 => '26', 27 => '27', 28 => '28', 29 => '29', 30 => '30', 31 => '31',\n                32 => '32', 33 => '33', 34 => '34', 35 => '35', 36 => '36', 37 => '37', 38 => '38', 39 => '39',\n                40 => '40', 41 => '41', 42 => '42', 43 => '43', 44 => '44', 45 => '45', 46 => '46', 47 => '47',\n                48 => '48', 49 => '49', 50 => '50', 51 => '51', 52 => '52', 53 => '53', 54 => '54', 55 => '55',\n                56 => '56', 57 => '57', 58 => '58', 59 => '59', 60 => '60', 61 => '61', 62 => '62', 63 => '63',\n                64 => '64', 65 => '65', 66 => '66', 67 => '67', 68 => '68', 69 => '69', 70 => '70', 71 => '71',\n                72 => '72', 73 => '73', 74 => '74', 75 => '75', 76 => '76', 77 => '77', 78 => '78', 79 => '79',\n                80 => '80', 81 => '81', 82 => '82', 83 => '83', 84 => '84', 85 => '85', 86 => '86', 87 => '87',\n                88 => '88', 89 => '89', 90 => '90', 91 => '91', 92 => '92', 93 => '93', 94 => '94', 95 => '95',\n                96 => '96', 97 => '97', 98 => '98', 99 => '99', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',\n               104 => 'ˆ', 105 => '‰', 106 => 'Š']\n        ]);\n        $this->setChecksum('code128');\n    }\n\n    public function setUtf8StringWrapper(StringWrapperInterface $utf8StringWrapper)\n    {\n        if (! $utf8StringWrapper->isSupported('UTF-8')) {\n            throw new Exception\\InvalidArgumentException(\n                \"The string wrapper needs to support UTF-8 character encoding\"\n            );\n        }\n        $this->utf8StringWrapper = $utf8StringWrapper;\n    }\n\n    /**\n     * Get the string wrapper supporting UTF-8 character encoding\n     *\n     * @return StringWrapperInterface\n     */\n    public function getUtf8StringWrapper()\n    {\n        if (! $this->utf8StringWrapper) {\n            $this->utf8StringWrapper = StringUtils::getWrapper('UTF-8');\n        }\n        return $this->utf8StringWrapper;\n    }\n\n    /**\n     * Checks for allowed characters within the barcode\n     *\n     * @param  string $value The barcode to check for allowed characters\n     * @return bool\n     */\n    public function hasValidCharacters($value)\n    {\n        if (! is_string($value)) {\n            return false;\n        }\n\n        // get used string wrapper for UTF-8 character encoding\n        $strWrapper = $this->getUtf8StringWrapper();\n\n        // detect starting charset\n        $set        = $this->getCodingSet($value);\n        $read       = $set;\n        if ($set != '') {\n            $value = $strWrapper->substr($value, 1, null);\n        }\n\n        // process barcode\n        while ($value != '') {\n            $char = $strWrapper->substr($value, 0, 1);\n\n            switch ($char) {\n                // Function definition\n                case 'Ç':\n                case 'ü':\n                case 'å':\n                    break;\n\n                // Switch 1 char between A and B\n                case 'é':\n                    if ($set == 'A') {\n                        $read = 'B';\n                    } elseif ($set == 'B') {\n                        $read = 'A';\n                    }\n                    break;\n\n                // Switch to C\n                case 'â':\n                    $set = 'C';\n                    $read = 'C';\n                    break;\n\n                // Switch to B\n                case 'ä':\n                    $set  = 'B';\n                    $read = 'B';\n                    break;\n\n                // Switch to A\n                case 'à':\n                    $set  = 'A';\n                    $read = 'A';\n                    break;\n\n                // Doubled start character\n                case '‡':\n                case 'ˆ':\n                case '‰':\n                    return false;\n\n                // Chars after the stop character\n                case 'Š':\n                    break 2;\n\n                default:\n                    // Does the char exist within the charset to read?\n                    if ($this->ord128($char, $read) == -1) {\n                        return false;\n                    }\n\n                    break;\n            }\n\n            $value = $strWrapper->substr($value, 1, null);\n            $read  = $set;\n        }\n\n        if (($value != '') && ($strWrapper->strlen($value) != 1)) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validates the checksum ()\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function code128($value)\n    {\n        $sum        = 0;\n        $pos        = 1;\n        $set        = $this->getCodingSet($value);\n        $read       = $set;\n        $usecheck   = $this->useChecksum(null);\n        $strWrapper = $this->getUtf8StringWrapper();\n        $char       = $strWrapper->substr($value, 0, 1);\n        if ($char == '‡') {\n            $sum = 103;\n        } elseif ($char == 'ˆ') {\n            $sum = 104;\n        } elseif ($char == '‰') {\n            $sum = 105;\n        } elseif ($usecheck == true) {\n            // no start value, unable to detect a proper checksum\n            return false;\n        }\n\n        $value = $strWrapper->substr($value, 1, null);\n        while ($strWrapper->strpos($value, 'Š') || ($value != '')) {\n            $char = $strWrapper->substr($value, 0, 1);\n            if ($read == 'C') {\n                $char = $strWrapper->substr($value, 0, 2);\n            }\n\n            switch ($char) {\n                // Function definition\n                case 'Ç':\n                case 'ü':\n                case 'å':\n                    $sum += ($pos * $this->ord128($char, $set));\n                    break;\n\n                case 'é':\n                    $sum += ($pos * $this->ord128($char, $set));\n                    if ($set == 'A') {\n                        $read = 'B';\n                    } elseif ($set == 'B') {\n                        $read = 'A';\n                    }\n                    break;\n\n                // Switch to C\n                case 'â':\n                    $sum += ($pos * $this->ord128($char, $set));\n                    $set = 'C';\n                    $read = 'C';\n                    break;\n\n                // Switch to B\n                case 'ä':\n                    $sum += ($pos * $this->ord128($char, $set));\n                    $set  = 'B';\n                    $read = 'B';\n                    break;\n\n                // Switch to A\n                case 'à':\n                    $sum += ($pos * $this->ord128($char, $set));\n                    $set  = 'A';\n                    $read = 'A';\n                    break;\n\n                case '‡':\n                case 'ˆ':\n                case '‰':\n                    return false;\n                    break;\n\n                default:\n                    // Does the char exist within the charset to read?\n                    if ($this->ord128($char, $read) == -1) {\n                        return false;\n                    }\n\n                    $sum += ($pos * $this->ord128($char, $set));\n                    break;\n            }\n\n            $value = $strWrapper->substr($value, 1);\n            ++$pos;\n            if (($strWrapper->strpos($value, 'Š') == 1) && ($strWrapper->strlen($value) == 2)) {\n                // break by stop and checksum char\n                break;\n            }\n            $read  = $set;\n        }\n\n        if (($strWrapper->strpos($value, 'Š') != 1) || ($strWrapper->strlen($value) != 2)) {\n            // return false if checksum is not readable and true if no startvalue is detected\n            return (! $usecheck);\n        }\n\n        $mod = $sum % 103;\n        if ($strWrapper->substr($value, 0, 1) == $this->chr128($mod, $set)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns the coding set for a barcode\n     *\n     * @param string $value Barcode\n     * @return string\n     */\n    protected function getCodingSet($value)\n    {\n        $value = $this->getUtf8StringWrapper()->substr($value, 0, 1);\n        switch ($value) {\n            case '‡':\n                return 'A';\n                break;\n            case 'ˆ':\n                return 'B';\n                break;\n            case '‰':\n                return 'C';\n                break;\n        }\n\n        return '';\n    }\n\n    /**\n     * Internal method to return the code128 integer from an ascii value\n     *\n     * Table A\n     *    ASCII       CODE128\n     *  32 to  95 ==  0 to  63\n     *   0 to  31 == 64 to  95\n     * 128 to 138 == 96 to 106\n     *\n     * Table B\n     *    ASCII       CODE128\n     *  32 to 138 == 0 to 106\n     *\n     * Table C\n     *    ASCII       CODE128\n     *  \"00\" to \"99\" ==   0 to  99\n     *   132 to  138 == 100 to 106\n     *\n     * @param string $value\n     * @param string $set\n     * @return int\n     */\n    protected function ord128($value, $set)\n    {\n        $ord = ord($value);\n        if ($set == 'A') {\n            if ($ord < 32) {\n                return ($ord + 64);\n            } elseif ($ord < 96) {\n                return ($ord - 32);\n            } elseif ($ord > 138) {\n                return -1;\n            } else {\n                return ($ord - 32);\n            }\n        } elseif ($set == 'B') {\n            if ($ord < 32) {\n                return -1;\n            } elseif ($ord <= 138) {\n                return ($ord - 32);\n            } else {\n                return -1;\n            }\n        } elseif ($set == 'C') {\n            $val = (int) $value;\n            if (($val >= 0) && ($val <= 99)) {\n                return $val;\n            } elseif (($ord >= 132) && ($ord <= 138)) {\n                return ($ord - 32);\n            } else {\n                return -1;\n            }\n        } else {\n            if ($ord < 32) {\n                return ($ord + 64);\n            } elseif ($ord <= 138) {\n                return ($ord - 32);\n            } else {\n                return -1;\n            }\n        }\n    }\n\n    /**\n     * Internal Method to return the ascii value from a code128 integer\n     *\n     * Table A\n     *    ASCII       CODE128\n     *  32 to  95 ==  0 to  63\n     *   0 to  31 == 64 to  95\n     * 128 to 138 == 96 to 106\n     *\n     * Table B\n     *    ASCII       CODE128\n     *  32 to 138 == 0 to 106\n     *\n     * Table C\n     *    ASCII       CODE128\n     *  \"00\" to \"99\" ==   0 to  99\n     *   132 to  138 == 100 to 106\n     *\n     * @param int $value\n     * @param string $set\n     * @return string\n     */\n    protected function chr128($value, $set)\n    {\n        if ($set == 'A') {\n            if ($value < 64) {\n                return chr($value + 32);\n            } elseif ($value < 96) {\n                return chr($value - 64);\n            } elseif ($value > 106) {\n                return -1;\n            } else {\n                return chr($value + 32);\n            }\n        } elseif ($set == 'B') {\n            if ($value > 106) {\n                return -1;\n            } else {\n                return chr($value + 32);\n            }\n        } elseif ($set == 'C') {\n            if (($value >= 0) && ($value <= 9)) {\n                return \"0\" . (string) $value;\n            } elseif ($value <= 99) {\n                return (string) $value;\n            } elseif ($value <= 106) {\n                return chr($value + 32);\n            } else {\n                return -1;\n            }\n        } else {\n            if ($value <= 106) {\n                return ($value + 32);\n            } else {\n                return -1;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code25.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code25 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('code25');\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code25interleaved.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code25interleaved extends AbstractAdapter\n{\n    /**\n     * Constructor\n     *\n     * Sets check flag to false.\n     */\n    public function __construct()\n    {\n        $this->setLength('even');\n        $this->setCharacters('0123456789');\n        $this->setChecksum('code25');\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code39.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code39 extends AbstractAdapter\n{\n    /**\n     * @var array\n     */\n    protected $check = [\n        '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6,\n        '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13,\n        'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20,\n        'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27,\n        'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34,\n        'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41,\n        '%' => 42,\n    ];\n\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%');\n        $this->setChecksum('code39');\n        $this->useChecksum(false);\n    }\n\n    /**\n     * Validates the checksum (Modulo 43)\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function code39($value)\n    {\n        $checksum = substr($value, -1, 1);\n        $value    = str_split(substr($value, 0, -1));\n        $count    = 0;\n        foreach ($value as $char) {\n            $count += $this->check[$char];\n        }\n\n        $mod = $count % 43;\n        if ($mod == $this->check[$checksum]) {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code39ext.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code39ext extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters(128);\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code93.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code93 extends AbstractAdapter\n{\n    /**\n     * Note that the characters !\"§& are only synonyms\n     * @var array\n     */\n    protected $check = [\n        '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6,\n        '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13,\n        'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20,\n        'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27,\n        'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34,\n        'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41,\n        '%' => 42, '!' => 43, '\"' => 44, '§' => 45, '&' => 46,\n    ];\n\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%');\n        $this->setChecksum('code93');\n        $this->useChecksum(false);\n    }\n\n    /**\n     * Validates the checksum (Modulo CK)\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function code93($value)\n    {\n        $checksum = substr($value, -2, 2);\n        $value    = str_split(substr($value, 0, -2));\n        $count    = 0;\n        $length   = count($value) % 20;\n        foreach ($value as $char) {\n            if ($length == 0) {\n                $length = 20;\n            }\n\n            $count += $this->check[$char] * $length;\n            --$length;\n        }\n\n        $check   = array_search(($count % 47), $this->check);\n        $value[] = $check;\n        $count   = 0;\n        $length  = count($value) % 15;\n        foreach ($value as $char) {\n            if ($length == 0) {\n                $length = 15;\n            }\n\n            $count += $this->check[$char] * $length;\n            --$length;\n        }\n        $check .= array_search(($count % 47), $this->check);\n\n        if ($check == $checksum) {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Code93ext.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Code93ext extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters(128);\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean12.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean12 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(12);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean13.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean13 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(13);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean14.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean14 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(14);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean18.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean18 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(18);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean2.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean2 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(2);\n        $this->setCharacters('0123456789');\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean5.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean5 extends AbstractAdapter\n{\n    /**\n     * Constructor\n     *\n     * Sets check flag to false.\n     */\n    public function __construct()\n    {\n        $this->setLength(5);\n        $this->setCharacters('0123456789');\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Ean8.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Ean8 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength([7, 8]);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n\n    /**\n     * Overrides parent checkLength\n     *\n     * @param string $value Value\n     * @return bool\n     */\n    public function hasValidLength($value)\n    {\n        if (strlen($value) == 7) {\n            $this->useChecksum(false);\n        } else {\n            $this->useChecksum(true);\n        }\n\n        return parent::hasValidLength($value);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Gtin12.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Gtin12 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(12);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Gtin13.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Gtin13 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(13);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Gtin14.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Gtin14 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(14);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Identcode.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Identcode extends AbstractAdapter\n{\n    /**\n     * Allowed barcode lengths\n     * @var int\n     */\n    protected $length = 12;\n\n    /**\n     * Allowed barcode characters\n     * @var string\n     */\n    protected $characters = '0123456789';\n\n    /**\n     * Checksum function\n     * @var string\n     */\n    protected $checksum = 'identcode';\n\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(12);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('identcode');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Intelligentmail.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Intelligentmail extends AbstractAdapter\n{\n    /**\n     * Constructor\n     *\n     * Sets check flag to false.\n     */\n    public function __construct()\n    {\n        $this->setLength([20, 25, 29, 31]);\n        $this->setCharacters('0123456789');\n        $this->useChecksum(false);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Issn.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Issn extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength([8, 13]);\n        $this->setCharacters('0123456789X');\n        $this->setChecksum('gtin');\n    }\n\n    /**\n     * Allows X on length of 8 chars\n     *\n     * @param  string $value The barcode to check for allowed characters\n     * @return bool\n     */\n    public function hasValidCharacters($value)\n    {\n        if (strlen($value) != 8) {\n            if (strpos($value, 'X') !== false) {\n                return false;\n            }\n        }\n\n        return parent::hasValidCharacters($value);\n    }\n\n    /**\n     * Validates the checksum\n     *\n     * @param  string $value The barcode to check the checksum for\n     * @return bool\n     */\n    public function hasValidChecksum($value)\n    {\n        if (strlen($value) == 8) {\n            $this->setChecksum('issn');\n        } else {\n            $this->setChecksum('gtin');\n        }\n\n        return parent::hasValidChecksum($value);\n    }\n\n    /**\n     * Validates the checksum ()\n     * ISSN implementation (reversed mod11)\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function issn($value)\n    {\n        $checksum = substr($value, -1, 1);\n        $values   = str_split(substr($value, 0, -1));\n        $check    = 0;\n        $multi    = 8;\n        foreach ($values as $token) {\n            if ($token == 'X') {\n                $token = 10;\n            }\n\n            $check += ($token * $multi);\n            --$multi;\n        }\n\n        $check %= 11;\n        $check  = ($check === 0 ? 0 : (11 - $check));\n        if ($check == $checksum) {\n            return true;\n        } elseif (($check == 10) && ($checksum == 'X')) {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Itf14.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Itf14 extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(14);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Leitcode.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Leitcode extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(14);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('identcode');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Planet.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Planet extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength([12, 14]);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('postnet');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Postnet.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Postnet extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength([6, 7, 10, 12]);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('postnet');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Royalmail.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Royalmail extends AbstractAdapter\n{\n    protected $rows = [\n        '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1,\n        '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2,\n        'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3,\n        'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4,\n        'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5,\n        'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0,\n     ];\n\n    protected $columns = [\n        '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0,\n        '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0,\n        'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0,\n        'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0,\n        'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0,\n        'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0,\n    ];\n\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');\n        $this->setChecksum('royalmail');\n    }\n\n    /**\n     * Validates the checksum ()\n     *\n     * @param  string $value The barcode to validate\n     * @return bool\n     */\n    protected function royalmail($value)\n    {\n        $checksum = substr($value, -1, 1);\n        $values   = str_split(substr($value, 0, -1));\n        $rowvalue = 0;\n        $colvalue = 0;\n        foreach ($values as $row) {\n            $rowvalue += $this->rows[$row];\n            $colvalue += $this->columns[$row];\n        }\n\n        $rowvalue %= 6;\n        $colvalue %= 6;\n\n        $rowchkvalue = array_keys($this->rows, $rowvalue);\n        $colchkvalue = array_keys($this->columns, $colvalue);\n        $intersect = array_intersect($rowchkvalue, $colchkvalue);\n        $chkvalue    = current($intersect);\n        if ($chkvalue == $checksum) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Allows start and stop tag within checked chars\n     *\n     * @param  string $value The barcode to check for allowed characters\n     * @return bool\n     */\n    public function hasValidCharacters($value)\n    {\n        if ($value[0] == '(') {\n            $value = substr($value, 1);\n\n            if ($value[strlen($value) - 1] == ')') {\n                $value = substr($value, 0, -1);\n            } else {\n                return false;\n            }\n        }\n\n        return parent::hasValidCharacters($value);\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Sscc.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Sscc extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(18);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Upca.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Upca extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength(12);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n}\n"
  },
  {
    "path": "src/Barcode/Upce.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass Upce extends AbstractAdapter\n{\n    /**\n     * Constructor for this barcode adapter\n     */\n    public function __construct()\n    {\n        $this->setLength([6, 7, 8]);\n        $this->setCharacters('0123456789');\n        $this->setChecksum('gtin');\n    }\n\n    /**\n     * Overrides parent checkLength\n     *\n     * @param string $value Value\n     * @return bool\n     */\n    public function hasValidLength($value)\n    {\n        if (strlen($value) != 8) {\n            $this->useChecksum(false);\n        } else {\n            $this->useChecksum(true);\n        }\n\n        return parent::hasValidLength($value);\n    }\n}\n"
  },
  {
    "path": "src/Barcode.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\n\nclass Barcode extends AbstractValidator\n{\n    const INVALID        = 'barcodeInvalid';\n    const FAILED         = 'barcodeFailed';\n    const INVALID_CHARS  = 'barcodeInvalidChars';\n    const INVALID_LENGTH = 'barcodeInvalidLength';\n\n    protected $messageTemplates = [\n        self::FAILED         => \"The input failed checksum validation\",\n        self::INVALID_CHARS  => \"The input contains invalid characters\",\n        self::INVALID_LENGTH => \"The input should have a length of %length% characters\",\n        self::INVALID        => \"Invalid type given. String expected\",\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'length' => ['options' => 'length'],\n    ];\n\n    protected $options = [\n        'adapter'     => null,  // Barcode adapter Zend\\Validator\\Barcode\\AbstractAdapter\n        'options'     => null,  // Options for this adapter\n        'length'      => null,\n        'useChecksum' => null,\n    ];\n\n    /**\n     * Constructor for barcodes\n     *\n     * @param array|string $options Options to use\n     */\n    public function __construct($options = null)\n    {\n        if ($options === null) {\n            $options = [];\n        }\n\n        if (! is_array($options) && ! ($options instanceof Traversable)) {\n            $options = ['adapter' => $options];\n        }\n\n        if (array_key_exists('options', $options)) {\n            $options['options'] = ['options' => $options['options']];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set adapter\n     *\n     * @return Barcode\\AbstractAdapter\n     */\n    public function getAdapter()\n    {\n        if (! ($this->options['adapter'] instanceof Barcode\\AdapterInterface)) {\n            $this->setAdapter('Ean13');\n        }\n\n        return $this->options['adapter'];\n    }\n\n    /**\n     * Sets a new barcode adapter\n     *\n     * @param  string|Barcode\\AbstractAdapter $adapter Barcode adapter to use\n     * @param  array  $options Options for this adapter\n     * @return Barcode\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setAdapter($adapter, $options = null)\n    {\n        if (is_string($adapter)) {\n            $adapter = ucfirst(strtolower($adapter));\n            $adapter = 'Zend\\\\Validator\\\\Barcode\\\\' . $adapter;\n\n            if (! class_exists($adapter)) {\n                throw new Exception\\InvalidArgumentException('Barcode adapter matching \"' . $adapter . '\" not found');\n            }\n\n            $adapter = new $adapter($options);\n        }\n\n        if (! $adapter instanceof Barcode\\AdapterInterface) {\n            throw new Exception\\InvalidArgumentException(\n                sprintf(\n                    \"Adapter %s does not implement Zend\\\\Validator\\\\Barcode\\\\AdapterInterface\",\n                    (is_object($adapter) ? get_class($adapter) : gettype($adapter))\n                )\n            );\n        }\n\n        $this->options['adapter'] = $adapter;\n\n        return $this;\n    }\n\n    /**\n     * Returns the checksum option\n     *\n     * @return string\n     */\n    public function getChecksum()\n    {\n        return $this->getAdapter()->getChecksum();\n    }\n\n    /**\n     * Sets if checksum should be validated, if no value is given the actual setting is returned\n     *\n     * @param  bool $checksum\n     * @return bool\n     */\n    public function useChecksum($checksum = null)\n    {\n        return $this->getAdapter()->useChecksum($checksum);\n    }\n\n    /**\n     * Defined by Zend\\Validator\\ValidatorInterface\n     *\n     * Returns true if and only if $value contains a valid barcode\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        $adapter                 = $this->getAdapter();\n        $this->options['length'] = $adapter->getLength();\n        $result                  = $adapter->hasValidLength($value);\n        if (! $result) {\n            if (is_array($this->options['length'])) {\n                $temp = $this->options['length'];\n                $this->options['length'] = \"\";\n                foreach ($temp as $length) {\n                    $this->options['length'] .= \"/\";\n                    $this->options['length'] .= $length;\n                }\n\n                $this->options['length'] = substr($this->options['length'], 1);\n            }\n\n            $this->error(self::INVALID_LENGTH);\n            return false;\n        }\n\n        $result = $adapter->hasValidCharacters($value);\n        if (! $result) {\n            $this->error(self::INVALID_CHARS);\n            return false;\n        }\n\n        if ($this->useChecksum(null)) {\n            $result = $adapter->hasValidChecksum($value);\n            if (! $result) {\n                $this->error(self::FAILED);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Between.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass Between extends AbstractValidator\n{\n    const NOT_BETWEEN        = 'notBetween';\n    const NOT_BETWEEN_STRICT = 'notBetweenStrict';\n    const VALUE_NOT_NUMERIC  = 'valueNotNumeric';\n    const VALUE_NOT_STRING   = 'valueNotString';\n\n    /**\n     * Retain if min and max are numeric values. Allow to not compare string and numeric types\n     *\n     * @var boolean\n     */\n    private $numeric;\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_BETWEEN        => \"The input is not between '%min%' and '%max%', inclusively\",\n        self::NOT_BETWEEN_STRICT => \"The input is not strictly between '%min%' and '%max%'\",\n        self::VALUE_NOT_NUMERIC  => \"The min ('%min%') and max ('%max%') values are numeric, but the input is not\",\n        self::VALUE_NOT_STRING   => \"The min ('%min%') and max ('%max%') values are non-numeric strings, \"\n        .    \"but the input is not a string\",\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'min' => ['options' => 'min'],\n        'max' => ['options' => 'max'],\n    ];\n\n    /**\n     * Options for the between validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'inclusive' => true,  // Whether to do inclusive comparisons, allowing equivalence to min and/or max\n        'min'       => 0,\n        'max'       => PHP_INT_MAX,\n    ];\n\n    /**\n     * Sets validator options\n     * Accepts the following option keys:\n     *   'min' => scalar, minimum border\n     *   'max' => scalar, maximum border\n     *   'inclusive' => boolean, inclusive border values\n     *\n     * @param  array|Traversable $options\n     *\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp['min'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['max'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['inclusive'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('min', $options) || ! array_key_exists('max', $options)) {\n            throw new Exception\\InvalidArgumentException(\"Missing option: 'min' and 'max' have to be given\");\n        }\n\n        if ((isset($options['min']) && is_numeric($options['min']))\n            && (isset($options['max']) && is_numeric($options['max']))\n        ) {\n            $this->numeric = true;\n        } elseif ((isset($options['min']) && is_string($options['min']))\n            && (isset($options['max']) && is_string($options['max']))\n        ) {\n            $this->numeric = false;\n        } else {\n            throw new Exception\\InvalidArgumentException(\n                \"Invalid options: 'min' and 'max' should be of the same scalar type\"\n            );\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the min option\n     *\n     * @return mixed\n     */\n    public function getMin()\n    {\n        return $this->options['min'];\n    }\n\n    /**\n     * Sets the min option\n     *\n     * @param  mixed $min\n     * @return Between Provides a fluent interface\n     */\n    public function setMin($min)\n    {\n        $this->options['min'] = $min;\n        return $this;\n    }\n\n    /**\n     * Returns the max option\n     *\n     * @return mixed\n     */\n    public function getMax()\n    {\n        return $this->options['max'];\n    }\n\n    /**\n     * Sets the max option\n     *\n     * @param  mixed $max\n     * @return Between Provides a fluent interface\n     */\n    public function setMax($max)\n    {\n        $this->options['max'] = $max;\n        return $this;\n    }\n\n    /**\n     * Returns the inclusive option\n     *\n     * @return bool\n     */\n    public function getInclusive()\n    {\n        return $this->options['inclusive'];\n    }\n\n    /**\n     * Sets the inclusive option\n     *\n     * @param  bool $inclusive\n     * @return Between Provides a fluent interface\n     */\n    public function setInclusive($inclusive)\n    {\n        $this->options['inclusive'] = $inclusive;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is between min and max options, inclusively\n     * if inclusive option is true.\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if ($this->numeric && ! is_numeric($value)) {\n            $this->error(self::VALUE_NOT_NUMERIC);\n            return false;\n        }\n        if (! $this->numeric && ! is_string($value)) {\n            $this->error(self::VALUE_NOT_STRING);\n            return false;\n        }\n\n        if ($this->getInclusive()) {\n            if ($this->getMin() > $value || $value > $this->getMax()) {\n                $this->error(self::NOT_BETWEEN);\n                return false;\n            }\n        } else {\n            if ($this->getMin() >= $value || $value >= $this->getMax()) {\n                $this->error(self::NOT_BETWEEN_STRICT);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Bitwise.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\n\nclass Bitwise extends AbstractValidator\n{\n    const OP_AND = 'and';\n    const OP_XOR = 'xor';\n\n    const NOT_AND        = 'notAnd';\n    const NOT_AND_STRICT = 'notAndStrict';\n    const NOT_XOR        = 'notXor';\n\n    /**\n     * @var integer\n     */\n    protected $control;\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_AND        => \"The input has no common bit set with '%control%'\",\n        self::NOT_AND_STRICT => \"The input doesn't have the same bits set as '%control%'\",\n        self::NOT_XOR        => \"The input has common bit set with '%control%'\",\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'control' => 'control',\n    ];\n\n    /**\n     * @var integer\n     */\n    protected $operator;\n\n    /**\n     * @var boolean\n     */\n    protected $strict = false;\n\n    /**\n     * Sets validator options\n     * Accepts the following option keys:\n     *   'control'  => integer\n     *   'operator' =>\n     *   'strict'   => boolean\n     *\n     * @param array|Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = iterator_to_array($options);\n        }\n\n        if (! is_array($options)) {\n            $options = func_get_args();\n\n            $temp['control'] = array_shift($options);\n\n            if (! empty($options)) {\n                $temp['operator'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['strict'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the control parameter.\n     *\n     * @return integer\n     */\n    public function getControl()\n    {\n        return $this->control;\n    }\n\n    /**\n     * Returns the operator parameter.\n     *\n     * @return string\n     */\n    public function getOperator()\n    {\n        return $this->operator;\n    }\n\n    /**\n     * Returns the strict parameter.\n     *\n     * @return boolean\n     */\n    public function getStrict()\n    {\n        return $this->strict;\n    }\n\n    /**\n     * Returns true if and only if $value is between min and max options, inclusively\n     * if inclusive option is true.\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if (self::OP_AND === $this->operator) {\n            if ($this->strict) {\n                // All the bits set in value must be set in control\n                $this->error(self::NOT_AND_STRICT);\n\n                return (bool) (($this->control & $value) == $value);\n            } else {\n                // At least one of the bits must be common between value and control\n                $this->error(self::NOT_AND);\n\n                return (bool) ($this->control & $value);\n            }\n        } elseif (self::OP_XOR === $this->operator) {\n            $this->error(self::NOT_XOR);\n\n            return (bool) (($this->control ^ $value) === ($this->control | $value));\n        }\n\n        return false;\n    }\n\n    /**\n     * Sets the control parameter.\n     *\n     * @param  integer $control\n     * @return Bitwise\n     */\n    public function setControl($control)\n    {\n        $this->control = (int) $control;\n\n        return $this;\n    }\n\n    /**\n     * Sets the operator parameter.\n     *\n     * @param  string  $operator\n     * @return Bitwise\n     */\n    public function setOperator($operator)\n    {\n        $this->operator = $operator;\n\n        return $this;\n    }\n\n    /**\n     * Sets the strict parameter.\n     *\n     * @param  boolean $strict\n     * @return Bitwise\n     */\n    public function setStrict($strict)\n    {\n        $this->strict = (bool) $strict;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "src/Callback.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nclass Callback extends AbstractValidator\n{\n    /**\n     * Invalid callback\n     */\n    const INVALID_CALLBACK = 'callbackInvalid';\n\n    /**\n     * Invalid value\n     */\n    const INVALID_VALUE = 'callbackValue';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID_VALUE    => \"The input is not valid\",\n        self::INVALID_CALLBACK => \"An exception has been raised within the callback\",\n    ];\n\n    /**\n     * Default options to set for the validator\n     *\n     * @var mixed\n     */\n    protected $options = [\n        'callback'         => null,     // Callback in a call_user_func format, string || array\n        'callbackOptions'  => [],  // Options for the callback\n    ];\n\n    /**\n     * Constructor\n     *\n     * @param array|callable $options\n     */\n    public function __construct($options = null)\n    {\n        if (is_callable($options)) {\n            $options = ['callback' => $options];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set callback\n     *\n     * @return mixed\n     */\n    public function getCallback()\n    {\n        return $this->options['callback'];\n    }\n\n    /**\n     * Sets the callback\n     *\n     * @param  string|array|callable $callback\n     * @return Callback Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setCallback($callback)\n    {\n        if (! is_callable($callback)) {\n            throw new Exception\\InvalidArgumentException('Invalid callback given');\n        }\n\n        $this->options['callback'] = $callback;\n        return $this;\n    }\n\n    /**\n     * Returns the set options for the callback\n     *\n     * @return mixed\n     */\n    public function getCallbackOptions()\n    {\n        return $this->options['callbackOptions'];\n    }\n\n    /**\n     * Sets options for the callback\n     *\n     * @param  mixed $options\n     * @return Callback Provides a fluent interface\n     */\n    public function setCallbackOptions($options)\n    {\n        $this->options['callbackOptions'] = (array) $options;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the set callback returns\n     * for the provided $value\n     *\n     * @param  mixed $value\n     * @param  mixed $context Additional context to provide to the callback\n     * @return bool\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function isValid($value, $context = null)\n    {\n        $this->setValue($value);\n\n        $options  = $this->getCallbackOptions();\n        $callback = $this->getCallback();\n        if (empty($callback)) {\n            throw new Exception\\InvalidArgumentException('No callback given');\n        }\n\n        $args = [$value];\n        if (empty($options) && ! empty($context)) {\n            $args[] = $context;\n        }\n        if (! empty($options) && empty($context)) {\n            $args = array_merge($args, $options);\n        }\n        if (! empty($options) && ! empty($context)) {\n            $args[] = $context;\n            $args   = array_merge($args, $options);\n        }\n\n        try {\n            if (! call_user_func_array($callback, $args)) {\n                $this->error(self::INVALID_VALUE);\n                return false;\n            }\n        } catch (\\Exception $e) {\n            $this->error(self::INVALID_CALLBACK);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/ConfigProvider.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nclass ConfigProvider\n{\n    /**\n     * Return configuration for this component.\n     *\n     * @return array\n     */\n    public function __invoke()\n    {\n        return [\n            'dependencies' => $this->getDependencyConfig(),\n        ];\n    }\n\n    /**\n     * Return dependency mappings for this component.\n     *\n     * @return array\n     */\n    public function getDependencyConfig()\n    {\n        return [\n            'aliases' => [\n                'ValidatorManager' => ValidatorPluginManager::class,\n            ],\n            'factories' => [\n                ValidatorPluginManager::class => ValidatorPluginManagerFactory::class,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "src/CreditCard.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass CreditCard extends AbstractValidator\n{\n    /**\n     * Detected CCI list\n     *\n     * @var string\n     */\n    const ALL              = 'All';\n    const AMERICAN_EXPRESS = 'American_Express';\n    const UNIONPAY         = 'Unionpay';\n    const DINERS_CLUB      = 'Diners_Club';\n    const DINERS_CLUB_US   = 'Diners_Club_US';\n    const DISCOVER         = 'Discover';\n    const JCB              = 'JCB';\n    const LASER            = 'Laser';\n    const MAESTRO          = 'Maestro';\n    const MASTERCARD       = 'Mastercard';\n    const SOLO             = 'Solo';\n    const VISA             = 'Visa';\n    const MIR              = 'Mir';\n\n    const CHECKSUM       = 'creditcardChecksum';\n    const CONTENT        = 'creditcardContent';\n    const INVALID        = 'creditcardInvalid';\n    const LENGTH         = 'creditcardLength';\n    const PREFIX         = 'creditcardPrefix';\n    const SERVICE        = 'creditcardService';\n    const SERVICEFAILURE = 'creditcardServiceFailure';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::CHECKSUM       => \"The input seems to contain an invalid checksum\",\n        self::CONTENT        => \"The input must contain only digits\",\n        self::INVALID        => \"Invalid type given. String expected\",\n        self::LENGTH         => \"The input contains an invalid amount of digits\",\n        self::PREFIX         => \"The input is not from an allowed institute\",\n        self::SERVICE        => \"The input seems to be an invalid credit card number\",\n        self::SERVICEFAILURE => \"An exception has been raised while validating the input\",\n    ];\n\n    /**\n     * List of CCV names\n     *\n     * @var array\n     */\n    protected $cardName = [\n        0  => self::AMERICAN_EXPRESS,\n        1  => self::DINERS_CLUB,\n        2  => self::DINERS_CLUB_US,\n        3  => self::DISCOVER,\n        4  => self::JCB,\n        5  => self::LASER,\n        6  => self::MAESTRO,\n        7  => self::MASTERCARD,\n        8  => self::SOLO,\n        9  => self::UNIONPAY,\n        10 => self::VISA,\n        11 => self::MIR,\n    ];\n\n    /**\n     * List of allowed CCV lengths\n     *\n     * @var array\n     */\n    protected $cardLength = [\n        self::AMERICAN_EXPRESS => [15],\n        self::DINERS_CLUB      => [14],\n        self::DINERS_CLUB_US   => [16],\n        self::DISCOVER         => [16, 19],\n        self::JCB              => [15, 16],\n        self::LASER            => [16, 17, 18, 19],\n        self::MAESTRO          => [12, 13, 14, 15, 16, 17, 18, 19],\n        self::MASTERCARD       => [16],\n        self::SOLO             => [16, 18, 19],\n        self::UNIONPAY         => [16, 17, 18, 19],\n        self::VISA             => [13, 16, 19],\n        self::MIR              => [13, 16],\n    ];\n\n    /**\n     * List of accepted CCV provider tags\n     *\n     * @var array\n     */\n    protected $cardType = [\n        self::AMERICAN_EXPRESS => ['34', '37'],\n        self::DINERS_CLUB      => ['300', '301', '302', '303', '304', '305', '36'],\n        self::DINERS_CLUB_US   => ['54', '55'],\n        self::DISCOVER         => ['6011', '622126', '622127', '622128', '622129', '62213',\n                                        '62214', '62215', '62216', '62217', '62218', '62219',\n                                        '6222', '6223', '6224', '6225', '6226', '6227', '6228',\n                                        '62290', '62291', '622920', '622921', '622922', '622923',\n                                        '622924', '622925', '644', '645', '646', '647', '648',\n                                        '649', '65'],\n        self::JCB              => ['1800', '2131', '3528', '3529', '353', '354', '355', '356', '357', '358'],\n        self::LASER            => ['6304', '6706', '6771', '6709'],\n        self::MAESTRO          => ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763',\n                                        '6764', '6765', '6766', '6772'],\n        self::MASTERCARD       => ['2221', '2222', '2223', '2224', '2225', '2226', '2227', '2228', '2229',\n                                        '223', '224', '225', '226', '227', '228', '229',\n                                        '23', '24', '25', '26', '271', '2720',\n                                        '51', '52', '53', '54', '55'],\n        self::SOLO             => ['6334', '6767'],\n        self::UNIONPAY         => ['622126', '622127', '622128', '622129', '62213', '62214',\n                                        '62215', '62216', '62217', '62218', '62219', '6222', '6223',\n                                        '6224', '6225', '6226', '6227', '6228', '62290', '62291',\n                                        '622920', '622921', '622922', '622923', '622924', '622925'],\n        self::VISA             => ['4'],\n        self::MIR              => ['2200', '2201', '2202', '2203', '2204'],\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'service' => null,     // Service callback for additional validation\n        'type'    => [],  // CCIs which are accepted by validation\n    ];\n\n    /**\n     * Constructor\n     *\n     * @param string|array|Traversable $options OPTIONAL Type of CCI to allow\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        } elseif (! is_array($options)) {\n            $options = func_get_args();\n            $temp['type'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['service'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('type', $options)) {\n            $options['type'] = self::ALL;\n        }\n\n        $this->setType($options['type']);\n        unset($options['type']);\n\n        if (array_key_exists('service', $options)) {\n            $this->setService($options['service']);\n            unset($options['service']);\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns a list of accepted CCIs\n     *\n     * @return array\n     */\n    public function getType()\n    {\n        return $this->options['type'];\n    }\n\n    /**\n     * Sets CCIs which are accepted by validation\n     *\n     * @param  string|array $type Type to allow for validation\n     * @return CreditCard Provides a fluid interface\n     */\n    public function setType($type)\n    {\n        $this->options['type'] = [];\n        return $this->addType($type);\n    }\n\n    /**\n     * Adds a CCI to be accepted by validation\n     *\n     * @param  string|array $type Type to allow for validation\n     * @return CreditCard Provides a fluid interface\n     */\n    public function addType($type)\n    {\n        if (is_string($type)) {\n            $type = [$type];\n        }\n\n        foreach ($type as $typ) {\n            if (($typ == self::ALL)) {\n                $this->options['type'] = array_keys($this->cardLength);\n                continue;\n            }\n\n            if (in_array($typ, $this->options['type'])) {\n                continue;\n            }\n\n            $constant = 'static::' . strtoupper($typ);\n            if (! defined($constant) || in_array(constant($constant), $this->options['type'])) {\n                continue;\n            }\n            $this->options['type'][] = constant($constant);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns the actual set service\n     *\n     * @return callable\n     */\n    public function getService()\n    {\n        return $this->options['service'];\n    }\n\n    /**\n     * Sets a new callback for service validation\n     *\n     * @param  callable $service\n     * @return CreditCard\n     * @throws Exception\\InvalidArgumentException on invalid service callback\n     */\n    public function setService($service)\n    {\n        if (! is_callable($service)) {\n            throw new Exception\\InvalidArgumentException('Invalid callback given');\n        }\n\n        $this->options['service'] = $service;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value follows the Luhn algorithm (mod-10 checksum)\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if (! is_string($value)) {\n            $this->error(self::INVALID, $value);\n            return false;\n        }\n\n        if (! ctype_digit($value)) {\n            $this->error(self::CONTENT, $value);\n            return false;\n        }\n\n        $length = strlen($value);\n        $types  = $this->getType();\n        $foundp = false;\n        $foundl = false;\n        foreach ($types as $type) {\n            foreach ($this->cardType[$type] as $prefix) {\n                if (0 === strpos($value, $prefix)) {\n                    $foundp = true;\n                    if (in_array($length, $this->cardLength[$type])) {\n                        $foundl = true;\n                        break 2;\n                    }\n                }\n            }\n        }\n\n        if ($foundp == false) {\n            $this->error(self::PREFIX, $value);\n            return false;\n        }\n\n        if ($foundl == false) {\n            $this->error(self::LENGTH, $value);\n            return false;\n        }\n\n        $sum    = 0;\n        $weight = 2;\n\n        for ($i = $length - 2; $i >= 0; $i--) {\n            $digit = $weight * $value[$i];\n            $sum += floor($digit / 10) + $digit % 10;\n            $weight = $weight % 2 + 1;\n        }\n\n        if ((10 - $sum % 10) % 10 != $value[$length - 1]) {\n            $this->error(self::CHECKSUM, $value);\n            return false;\n        }\n\n        $service = $this->getService();\n        if (! empty($service)) {\n            try {\n                $callback = new Callback($service);\n                $callback->setOptions($this->getType());\n                if (! $callback->isValid($value)) {\n                    $this->error(self::SERVICE, $value);\n                    return false;\n                }\n            } catch (\\Exception $e) {\n                $this->error(self::SERVICEFAILURE, $value);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Csrf.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Math\\Rand;\nuse Zend\\Session\\Container as SessionContainer;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass Csrf extends AbstractValidator\n{\n    /**\n     * Error codes\n     * @const string\n     */\n    const NOT_SAME = 'notSame';\n\n    /**\n     * Error messages\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_SAME => \"The form submitted did not originate from the expected site\",\n    ];\n\n    /**\n     * Actual hash used.\n     *\n     * @var mixed\n     */\n    protected $hash;\n\n    /**\n     * Static cache of the session names to generated hashes\n     * @todo unused, left here to avoid BC breaks\n     *\n     * @var array\n     */\n    protected static $hashCache;\n\n    /**\n     * Name of CSRF element (used to create non-colliding hashes)\n     *\n     * @var string\n     */\n    protected $name = 'csrf';\n\n    /**\n     * Salt for CSRF token\n     * @var string\n     */\n    protected $salt = 'salt';\n\n    /**\n     * @var SessionContainer\n     */\n    protected $session;\n\n    /**\n     * TTL for CSRF token\n     * @var int|null\n     */\n    protected $timeout = 300;\n\n    /**\n     * Constructor\n     *\n     * @param  array|Traversable $options\n     */\n    public function __construct($options = [])\n    {\n        parent::__construct($options);\n\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if (! is_array($options)) {\n            $options = (array) $options;\n        }\n\n        foreach ($options as $key => $value) {\n            switch (strtolower($key)) {\n                case 'name':\n                    $this->setName($value);\n                    break;\n                case 'salt':\n                    $this->setSalt($value);\n                    break;\n                case 'session':\n                    $this->setSession($value);\n                    break;\n                case 'timeout':\n                    $this->setTimeout($value);\n                    break;\n                default:\n                    // ignore unknown options\n                    break;\n            }\n        }\n    }\n\n    /**\n     * Does the provided token match the one generated?\n     *\n     * @param  string $value\n     * @param  mixed $context\n     * @return bool\n     */\n    public function isValid($value, $context = null)\n    {\n        if (! is_string($value)) {\n            return false;\n        }\n\n        $this->setValue($value);\n\n        $tokenId = $this->getTokenIdFromHash($value);\n        $hash = $this->getValidationToken($tokenId);\n\n        $tokenFromValue = $this->getTokenFromHash($value);\n        $tokenFromHash = $this->getTokenFromHash($hash);\n\n        if (! $tokenFromValue || ! $tokenFromHash || ($tokenFromValue !== $tokenFromHash)) {\n            $this->error(self::NOT_SAME);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Set CSRF name\n     *\n     * @param  string $name\n     * @return Csrf\n     */\n    public function setName($name)\n    {\n        $this->name = (string) $name;\n        return $this;\n    }\n\n    /**\n     * Get CSRF name\n     *\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Set session container\n     *\n     * @param  SessionContainer $session\n     * @return Csrf\n     */\n    public function setSession(SessionContainer $session)\n    {\n        $this->session = $session;\n        if ($this->hash) {\n            $this->initCsrfToken();\n        }\n        return $this;\n    }\n\n    /**\n     * Get session container\n     *\n     * Instantiate session container if none currently exists\n     *\n     * @return SessionContainer\n     */\n    public function getSession()\n    {\n        if (null === $this->session) {\n            // Using fully qualified name, to ensure polyfill class alias is used\n            $this->session = new SessionContainer($this->getSessionName());\n        }\n        return $this->session;\n    }\n\n    /**\n     * Salt for CSRF token\n     *\n     * @param  string $salt\n     * @return Csrf\n     */\n    public function setSalt($salt)\n    {\n        $this->salt = (string) $salt;\n        return $this;\n    }\n\n    /**\n     * Retrieve salt for CSRF token\n     *\n     * @return string\n     */\n    public function getSalt()\n    {\n        return $this->salt;\n    }\n\n    /**\n     * Retrieve CSRF token\n     *\n     * If no CSRF token currently exists, or should be regenerated,\n     * generates one.\n     *\n     * @param  bool $regenerate    default false\n     * @return string\n     */\n    public function getHash($regenerate = false)\n    {\n        if ((null === $this->hash) || $regenerate) {\n            $this->generateHash();\n        }\n        return $this->hash;\n    }\n\n    /**\n     * Get session namespace for CSRF token\n     *\n     * Generates a session namespace based on salt, element name, and class.\n     *\n     * @return string\n     */\n    public function getSessionName()\n    {\n        return str_replace('\\\\', '_', __CLASS__) . '_'\n            . $this->getSalt() . '_'\n            . strtr($this->getName(), ['[' => '_', ']' => '']);\n    }\n\n    /**\n     * Set timeout for CSRF session token\n     *\n     * @param  int|null $ttl\n     * @return Csrf\n     */\n    public function setTimeout($ttl)\n    {\n        $this->timeout = ($ttl !== null) ? (int) $ttl : null;\n        return $this;\n    }\n\n    /**\n     * Get CSRF session token timeout\n     *\n     * @return int\n     */\n    public function getTimeout()\n    {\n        return $this->timeout;\n    }\n\n    /**\n     * Initialize CSRF token in session\n     *\n     * @return void\n     */\n    protected function initCsrfToken()\n    {\n        $session = $this->getSession();\n        $timeout = $this->getTimeout();\n        if (null !== $timeout) {\n            $session->setExpirationSeconds($timeout);\n        }\n\n        $hash = $this->getHash();\n        $token = $this->getTokenFromHash($hash);\n        $tokenId = $this->getTokenIdFromHash($hash);\n\n        if (! $session->tokenList) {\n            $session->tokenList = [];\n        }\n        $session->tokenList[$tokenId] = $token;\n        $session->hash = $hash; // @todo remove this, left for BC\n    }\n\n    /**\n     * Generate CSRF token\n     *\n     * Generates CSRF token and stores both in {@link $hash} and element\n     * value.\n     *\n     * @return void\n     */\n    protected function generateHash()\n    {\n        $token = md5($this->getSalt() . Rand::getBytes(32) .  $this->getName());\n\n        $this->hash = $this->formatHash($token, $this->generateTokenId());\n\n        $this->setValue($this->hash);\n        $this->initCsrfToken();\n    }\n\n    /**\n     * @return string\n     */\n    protected function generateTokenId()\n    {\n        return md5(Rand::getBytes(32));\n    }\n\n    /**\n     * Get validation token\n     *\n     * Retrieve token from session, if it exists.\n     *\n     * @param string $tokenId\n     * @return null|string\n     */\n    protected function getValidationToken($tokenId = null)\n    {\n        $session = $this->getSession();\n\n        /**\n         * if no tokenId is passed we revert to the old behaviour\n         * @todo remove, here for BC\n         */\n        if (! $tokenId && isset($session->hash)) {\n            return $session->hash;\n        }\n\n        if ($tokenId && isset($session->tokenList[$tokenId])) {\n            return $this->formatHash($session->tokenList[$tokenId], $tokenId);\n        }\n\n        return;\n    }\n\n    /**\n     * @param $token\n     * @param $tokenId\n     * @return string\n     */\n    protected function formatHash($token, $tokenId)\n    {\n        return sprintf('%s-%s', $token, $tokenId);\n    }\n\n    /**\n     * @param $hash\n     * @return string\n     */\n    protected function getTokenFromHash($hash)\n    {\n        $data = explode('-', $hash);\n        return $data[0] ?: null;\n    }\n\n    /**\n     * @param $hash\n     * @return string\n     */\n    protected function getTokenIdFromHash($hash)\n    {\n        $data = explode('-', $hash);\n\n        if (! isset($data[1])) {\n            return;\n        }\n\n        return $data[1];\n    }\n}\n"
  },
  {
    "path": "src/Date.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2019 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse DateTime;\nuse DateTimeImmutable;\nuse Traversable;\n\n/**\n * Validates that a given value is a DateTime instance or can be converted into one.\n */\nclass Date extends AbstractValidator\n{\n    /**#@+\n     * Validity constants\n     * @var string\n     */\n    const INVALID        = 'dateInvalid';\n    const INVALID_DATE   = 'dateInvalidDate';\n    const FALSEFORMAT    = 'dateFalseFormat';\n    /**#@-*/\n\n    /**\n     * Default format constant\n     * @var string\n     */\n    const FORMAT_DEFAULT = 'Y-m-d';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID      => \"Invalid type given. String, integer, array or DateTime expected\",\n        self::INVALID_DATE => \"The input does not appear to be a valid date\",\n        self::FALSEFORMAT  => \"The input does not fit the date format '%format%'\",\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'format' => 'format',\n    ];\n\n    /**\n     * @var string\n     */\n    protected $format = self::FORMAT_DEFAULT;\n\n    /**\n     * @var bool\n     */\n    protected $strict = false;\n\n    /**\n     * Sets validator options\n     *\n     * @param  string|array|Traversable $options OPTIONAL\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = iterator_to_array($options);\n        } elseif (! is_array($options)) {\n            $options = func_get_args();\n            $temp['format'] = array_shift($options);\n            $options = $temp;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the format option\n     *\n     * @return string|null\n     */\n    public function getFormat()\n    {\n        return $this->format;\n    }\n\n    /**\n     * Sets the format option\n     *\n     * Format cannot be null.  It will always default to 'Y-m-d', even\n     * if null is provided.\n     *\n     * @param  string $format\n     * @return Date provides a fluent interface\n     * @todo   validate the format\n     */\n    public function setFormat($format = self::FORMAT_DEFAULT)\n    {\n        $this->format = (empty($format)) ? self::FORMAT_DEFAULT : $format;\n        return $this;\n    }\n\n    public function setStrict(bool $strict) : self\n    {\n        $this->strict = $strict;\n        return $this;\n    }\n\n    public function isStrict() : bool\n    {\n        return $this->strict;\n    }\n\n    /**\n     * Returns true if $value is a DateTime instance or can be converted into one.\n     *\n     * @param  string|array|int|DateTime $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        $date = $this->convertToDateTime($value);\n        if (! $date) {\n            $this->error(self::INVALID_DATE);\n            return false;\n        }\n\n        if ($this->isStrict() && $date->format($this->getFormat()) !== $value) {\n            $this->error(self::FALSEFORMAT);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Attempts to convert an int, string, or array to a DateTime object\n     *\n     * @param  string|int|array $param\n     * @param  bool             $addErrors\n     * @return bool|DateTime\n     */\n    protected function convertToDateTime($param, $addErrors = true)\n    {\n        if ($param instanceof DateTime || $param instanceof DateTimeImmutable) {\n            return $param;\n        }\n\n        $type = gettype($param);\n        if (! in_array($type, ['string', 'integer', 'double', 'array'])) {\n            if ($addErrors) {\n                $this->error(self::INVALID);\n            }\n            return false;\n        }\n\n        $convertMethod = 'convert' . ucfirst($type);\n        return $this->{$convertMethod}($param, $addErrors);\n    }\n\n    /**\n     * Attempts to convert an integer into a DateTime object\n     *\n     * @param  integer $value\n     * @return bool|DateTime\n     */\n    protected function convertInteger($value)\n    {\n        return date_create(\"@$value\");\n    }\n\n    /**\n     * Attempts to convert an double into a DateTime object\n     *\n     * @param  double $value\n     * @return bool|DateTime\n     */\n    protected function convertDouble($value)\n    {\n        return DateTime::createFromFormat('U', $value);\n    }\n\n    /**\n     * Attempts to convert a string into a DateTime object\n     *\n     * @param  string $value\n     * @param  bool   $addErrors\n     * @return bool|DateTime\n     */\n    protected function convertString($value, $addErrors = true)\n    {\n        $date = DateTime::createFromFormat($this->format, $value);\n\n        // Invalid dates can show up as warnings (ie. \"2007-02-99\")\n        // and still return a DateTime object.\n        $errors = DateTime::getLastErrors();\n        if ($errors['warning_count'] > 0) {\n            if ($addErrors) {\n                $this->error(self::FALSEFORMAT);\n            }\n            return false;\n        }\n\n        return $date;\n    }\n\n    /**\n     * Implodes the array into a string and proxies to {@link convertString()}.\n     *\n     * @param  array $value\n     * @param  bool  $addErrors\n     * @return bool|DateTime\n     * @todo   enhance the implosion\n     */\n    protected function convertArray(array $value, $addErrors = true)\n    {\n        return $this->convertString(implode('-', $value), $addErrors);\n    }\n}\n"
  },
  {
    "path": "src/DateStep.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse DateInterval;\nuse DateTime;\nuse DateTimeZone;\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass DateStep extends Date\n{\n    const NOT_STEP       = 'dateStepNotStep';\n\n    const FORMAT_DEFAULT = DateTime::ISO8601;\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID      => \"Invalid type given. String, integer, array or DateTime expected\",\n        self::INVALID_DATE => \"The input does not appear to be a valid date\",\n        self::FALSEFORMAT  => \"The input does not fit the date format '%format%'\",\n        self::NOT_STEP     => \"The input is not a valid step\",\n    ];\n\n    /**\n     * Optional base date value\n     *\n     * @var string|int|\\DateTime\n     */\n    protected $baseValue = '1970-01-01T00:00:00Z';\n\n    /**\n     * Date step interval (defaults to 1 day).\n     * Uses the DateInterval specification.\n     *\n     * @var DateInterval\n     */\n    protected $step;\n\n    /**\n     * Optional timezone to be used when the baseValue\n     * and validation values do not contain timezone info\n     *\n     * @var DateTimeZone\n     */\n    protected $timezone;\n\n    /**\n     * Set default options for this instance\n     *\n     * @param array $options\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        } elseif (! is_array($options)) {\n            $options = func_get_args();\n            $temp['baseValue'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['step'] = array_shift($options);\n            }\n            if (! empty($options)) {\n                $temp['format'] = array_shift($options);\n            }\n            if (! empty($options)) {\n                $temp['timezone'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! isset($options['step'])) {\n            $options['step'] = new DateInterval('P1D');\n        }\n        if (! isset($options['timezone'])) {\n            $options['timezone'] = new DateTimeZone(date_default_timezone_get());\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Sets the base value from which the step should be computed\n     *\n     * @param  string|int|\\DateTime $baseValue\n     * @return DateStep\n     */\n    public function setBaseValue($baseValue)\n    {\n        $this->baseValue = $baseValue;\n        return $this;\n    }\n\n    /**\n     * Returns the base value from which the step should be computed\n     *\n     * @return string|int|\\DateTime\n     */\n    public function getBaseValue()\n    {\n        return $this->baseValue;\n    }\n\n    /**\n     * Sets the step date interval\n     *\n     * @param  DateInterval $step\n     * @return DateStep\n     */\n    public function setStep(DateInterval $step)\n    {\n        $this->step = $step;\n        return $this;\n    }\n\n    /**\n     * Returns the step date interval\n     *\n     * @return DateInterval\n     */\n    public function getStep()\n    {\n        return $this->step;\n    }\n\n    /**\n     * Returns the timezone option\n     *\n     * @return DateTimeZone\n     */\n    public function getTimezone()\n    {\n        return $this->timezone;\n    }\n\n    /**\n     * Sets the timezone option\n     *\n     * @param  DateTimeZone $timezone\n     * @return DateStep\n     */\n    public function setTimezone(DateTimeZone $timezone)\n    {\n        $this->timezone = $timezone;\n        return $this;\n    }\n\n    /**\n     * Supports formats with ISO week (W) definitions\n     *\n     * @see Date::convertString()\n     */\n    protected function convertString($value, $addErrors = true)\n    {\n        // Custom week format support\n        if (strpos($this->format, 'Y-\\WW') === 0\n            && preg_match('/^([0-9]{4})\\-W([0-9]{2})/', $value, $matches)\n        ) {\n            $date = new DateTime();\n            $date->setISODate($matches[1], $matches[2]);\n        } else {\n            $date = DateTime::createFromFormat($this->format, $value, new DateTimeZone('UTC'));\n        }\n\n        // Invalid dates can show up as warnings (ie. \"2007-02-99\")\n        // and still return a DateTime object.\n        $errors = DateTime::getLastErrors();\n        if ($errors['warning_count'] > 0) {\n            if ($addErrors) {\n                $this->error(self::FALSEFORMAT);\n            }\n            return false;\n        }\n\n        return $date;\n    }\n\n    /**\n     * Returns true if a date is within a valid step\n     *\n     * @param  string|int|\\DateTime $value\n     * @return bool\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function isValid($value)\n    {\n        if (! parent::isValid($value)) {\n            return false;\n        }\n\n        $valueDate = $this->convertToDateTime($value, false); // avoid duplicate errors\n        $baseDate  = $this->convertToDateTime($this->baseValue, false);\n        $step      = $this->getStep();\n\n        // Same date?\n        if ($valueDate == $baseDate) {\n            return true;\n        }\n\n        // Optimization for simple intervals.\n        // Handle intervals of just one date or time unit.\n        $intervalParts = explode('|', $step->format('%y|%m|%d|%h|%i|%s'));\n        $partCounts    = array_count_values($intervalParts);\n\n        $unitKeys = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n        $intervalParts = array_combine($unitKeys, $intervalParts);\n\n        // Get absolute time difference to avoid special cases of missing/added time\n        $absoluteValueDate = new DateTime($valueDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));\n        $absoluteBaseDate = new DateTime($baseDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));\n\n        $timeDiff  = $absoluteValueDate->diff($absoluteBaseDate, 1);\n        $diffParts = array_combine($unitKeys, explode('|', $timeDiff->format('%y|%m|%d|%h|%i|%s')));\n\n        if (5 === $partCounts[\"0\"]) {\n            // Find the unit with the non-zero interval\n            $intervalUnit = null;\n            $stepValue    = null;\n            foreach ($intervalParts as $key => $value) {\n                if (0 != $value) {\n                    $intervalUnit = $key;\n                    $stepValue    = (int) $value;\n                    break;\n                }\n            }\n\n            // Check date units\n            if (in_array($intervalUnit, ['years', 'months', 'days'])) {\n                switch ($intervalUnit) {\n                    case 'years':\n                        if (0 == $diffParts['months'] && 0 == $diffParts['days']\n                            && 0 == $diffParts['hours'] && 0 == $diffParts['minutes']\n                            && 0 == $diffParts['seconds']\n                        ) {\n                            if (($diffParts['years'] % $stepValue) === 0) {\n                                return true;\n                            }\n                        }\n                        break;\n                    case 'months':\n                        if (0 == $diffParts['days'] && 0 == $diffParts['hours']\n                            && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']\n                        ) {\n                            $months = ($diffParts['years'] * 12) + $diffParts['months'];\n                            if (($months % $stepValue) === 0) {\n                                return true;\n                            }\n                        }\n                        break;\n                    case 'days':\n                        if (0 == $diffParts['hours'] && 0 == $diffParts['minutes']\n                            && 0 == $diffParts['seconds']\n                        ) {\n                            $days = $timeDiff->format('%a'); // Total days\n                            if (($days % $stepValue) === 0) {\n                                return true;\n                            }\n                        }\n                        break;\n                }\n                $this->error(self::NOT_STEP);\n                return false;\n            }\n\n            // Check time units\n            if (in_array($intervalUnit, ['hours', 'minutes', 'seconds'])) {\n                // Simple test if $stepValue is 1.\n                if (1 == $stepValue) {\n                    if ('hours' === $intervalUnit\n                        && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']\n                    ) {\n                        return true;\n                    } elseif ('minutes' === $intervalUnit && 0 == $diffParts['seconds']) {\n                        return true;\n                    } elseif ('seconds' === $intervalUnit) {\n                        return true;\n                    }\n\n                    $this->error(self::NOT_STEP);\n\n                    return false;\n                }\n\n                // Simple test for same day, when using default baseDate\n                if ($baseDate->format('Y-m-d') == $valueDate->format('Y-m-d')\n                    && $baseDate->format('Y-m-d') == '1970-01-01'\n                ) {\n                    switch ($intervalUnit) {\n                        case 'hours':\n                            if (0 == $diffParts['minutes'] && 0 == $diffParts['seconds']) {\n                                if (($diffParts['hours'] % $stepValue) === 0) {\n                                    return true;\n                                }\n                            }\n                            break;\n                        case 'minutes':\n                            if (0 == $diffParts['seconds']) {\n                                $minutes = ($diffParts['hours'] * 60) + $diffParts['minutes'];\n                                if (($minutes % $stepValue) === 0) {\n                                    return true;\n                                }\n                            }\n                            break;\n                        case 'seconds':\n                            $seconds = ($diffParts['hours'] * 60 * 60)\n                                       + ($diffParts['minutes'] * 60)\n                                       + $diffParts['seconds'];\n                            if (($seconds % $stepValue) === 0) {\n                                return true;\n                            }\n                            break;\n                    }\n                    $this->error(self::NOT_STEP);\n                    return false;\n                }\n            }\n        }\n\n        return $this->fallbackIncrementalIterationLogic($baseDate, $valueDate, $intervalParts, $diffParts, $step);\n    }\n\n    /**\n     * Fall back to slower (but accurate) method for complex intervals.\n     * Keep adding steps to the base date until a match is found\n     * or until the value is exceeded.\n     *\n     * This is really slow if the interval is small, especially if the\n     * default base date of 1/1/1970 is used. We can skip a chunk of\n     * iterations by starting at the lower bound of steps needed to reach\n     * the target\n     *\n     * @param DateTime     $baseDate\n     * @param DateTime     $valueDate\n     * @param int[]        $intervalParts\n     * @param int[]        $diffParts\n     * @param DateInterval $step\n     *\n     * @return bool\n     */\n    private function fallbackIncrementalIterationLogic(\n        DateTime $baseDate,\n        DateTime $valueDate,\n        array $intervalParts,\n        array $diffParts,\n        DateInterval $step\n    ) {\n        list($minSteps, $requiredIterations) = $this->computeMinStepAndRequiredIterations($intervalParts, $diffParts);\n        $minimumInterval                     = $this->computeMinimumInterval($intervalParts, $minSteps);\n        $isIncrementalStepping               = $baseDate < $valueDate;\n        $dateModificationOperation           = $isIncrementalStepping ? 'add' : 'sub';\n\n        for ($offsetIterations = 0; $offsetIterations < $requiredIterations; $offsetIterations += 1) {\n            $baseDate->{$dateModificationOperation}($minimumInterval);\n        }\n\n        while (($isIncrementalStepping && $baseDate < $valueDate)\n            || (! $isIncrementalStepping && $baseDate > $valueDate)\n        ) {\n            $baseDate->{$dateModificationOperation}($step);\n\n            if ($baseDate == $valueDate) {\n                return true;\n            }\n        }\n\n        $this->error(self::NOT_STEP);\n\n        return false;\n    }\n\n    /**\n     * Computes minimum interval to use for iterations while checking steps\n     *\n     * @param int[] $intervalParts\n     * @param int   $minSteps\n     *\n     * @return DateInterval\n     */\n    private function computeMinimumInterval(array $intervalParts, $minSteps)\n    {\n        return new DateInterval(sprintf(\n            'P%dY%dM%dDT%dH%dM%dS',\n            $intervalParts['years'] * $minSteps,\n            $intervalParts['months'] * $minSteps,\n            $intervalParts['days'] * $minSteps,\n            $intervalParts['hours'] * $minSteps,\n            $intervalParts['minutes'] * $minSteps,\n            $intervalParts['seconds'] * $minSteps\n        ));\n    }\n\n    /**\n     * @param int[] $intervalParts\n     * @param int[] $diffParts\n     *\n     * @return int[] (ordered tuple containing minimum steps and required step iterations\n     */\n    private function computeMinStepAndRequiredIterations(array $intervalParts, array $diffParts)\n    {\n        $minSteps = $this->computeMinSteps($intervalParts, $diffParts);\n\n        // If we use PHP_INT_MAX DateInterval::__construct falls over with a bad format error\n        // before we reach the max on 64 bit machines\n        $maxInteger             = min(pow(2, 31), PHP_INT_MAX);\n        // check for integer overflow and split $minimum interval if needed\n        $maximumInterval        = max($intervalParts);\n        $requiredStepIterations = 1;\n\n        if (($minSteps * $maximumInterval) > $maxInteger) {\n            $requiredStepIterations = ceil(($minSteps * $maximumInterval) / $maxInteger);\n            $minSteps               = floor($minSteps / $requiredStepIterations);\n        }\n\n        return [$minSteps, $minSteps ? $requiredStepIterations : 0];\n    }\n\n    /**\n     * Multiply the step interval by the lower bound of steps to reach the target\n     *\n     * @param int[] $intervalParts\n     * @param int[] $diffParts\n     *\n     * @return int\n     */\n    private function computeMinSteps(array $intervalParts, array $diffParts)\n    {\n        $intervalMaxSeconds = $this->computeIntervalMaxSeconds($intervalParts);\n\n        return (0 == $intervalMaxSeconds)\n            ? 0\n            : max(floor($this->computeDiffMinSeconds($diffParts) / $intervalMaxSeconds) - 1, 0);\n    }\n\n    /**\n     * Get upper bound of the given interval in seconds\n     * Converts a given `$intervalParts` array into seconds\n     *\n     * @param int[] $intervalParts\n     *\n     * @return int\n     */\n    private function computeIntervalMaxSeconds(array $intervalParts)\n    {\n        return ($intervalParts['years'] * 60 * 60 * 24 * 366)\n            + ($intervalParts['months'] * 60 * 60 * 24 * 31)\n            + ($intervalParts['days'] * 60 * 60 * 24)\n            + ($intervalParts['hours'] * 60 * 60)\n            + ($intervalParts['minutes'] * 60)\n            + $intervalParts['seconds'];\n    }\n\n    /**\n     * Get lower bound of difference in secondss\n     * Converts a given `$diffParts` array into seconds\n     *\n     * @param int[] $diffParts\n     *\n     * @return int\n     */\n    private function computeDiffMinSeconds(array $diffParts)\n    {\n        return ($diffParts['years'] * 60 * 60 * 24 * 365)\n            + ($diffParts['months'] * 60 * 60 * 24 * 28)\n            + ($diffParts['days'] * 60 * 60 * 24)\n            + ($diffParts['hours'] * 60 * 60)\n            + ($diffParts['minutes'] * 60)\n            + $diffParts['seconds'];\n    }\n}\n"
  },
  {
    "path": "src/Db/AbstractDb.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Db;\n\nuse Traversable;\nuse Zend\\Db\\Adapter\\Adapter as DbAdapter;\nuse Zend\\Db\\Adapter\\AdapterAwareInterface;\nuse Zend\\Db\\Adapter\\AdapterAwareTrait;\nuse Zend\\Db\\Sql\\Select;\nuse Zend\\Db\\Sql\\Sql;\nuse Zend\\Db\\Sql\\TableIdentifier;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\n\n/**\n * Class for Database record validation\n */\nabstract class AbstractDb extends AbstractValidator implements AdapterAwareInterface\n{\n    use AdapterAwareTrait;\n\n    /**\n     * Error constants\n     */\n    const ERROR_NO_RECORD_FOUND = 'noRecordFound';\n    const ERROR_RECORD_FOUND    = 'recordFound';\n\n    /**\n     * @var array Message templates\n     */\n    protected $messageTemplates = [\n        self::ERROR_NO_RECORD_FOUND => \"No record matching the input was found\",\n        self::ERROR_RECORD_FOUND    => \"A record matching the input was found\",\n    ];\n\n    /**\n     * Select object to use. can be set, or will be auto-generated\n     *\n     * @var Select\n     */\n    protected $select;\n\n    /**\n     * @var string\n     */\n    protected $schema = null;\n\n    /**\n     * @var string\n     */\n    protected $table = '';\n\n    /**\n     * @var string\n     */\n    protected $field = '';\n\n    /**\n     * @var mixed\n     */\n    protected $exclude = null;\n\n    /**\n     * Provides basic configuration for use with Zend\\Validator\\Db Validators\n     * Setting $exclude allows a single record to be excluded from matching.\n     * Exclude can either be a String containing a where clause, or an array with `field` and `value` keys\n     * to define the where clause added to the sql.\n     * A database adapter may optionally be supplied to avoid using the registered default adapter.\n     *\n     * The following option keys are supported:\n     * 'table'   => The database table to validate against\n     * 'schema'  => The schema keys\n     * 'field'   => The field to check for a match\n     * 'exclude' => An optional where clause or field/value pair to exclude from the query\n     * 'adapter' => An optional database adapter to use\n     *\n     * @param array|Traversable|Select $options Options to use for this validator\n     * @throws \\Zend\\Validator\\Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        parent::__construct($options);\n\n        if ($options instanceof Select) {\n            $this->setSelect($options);\n            return;\n        }\n\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        } elseif (func_num_args() > 1) {\n            $options       = func_get_args();\n            $firstArgument = array_shift($options);\n            if (is_array($firstArgument)) {\n                $temp = ArrayUtils::iteratorToArray($firstArgument);\n            } else {\n                $temp['table'] = $firstArgument;\n            }\n\n            $temp['field'] = array_shift($options);\n\n            if (! empty($options)) {\n                $temp['exclude'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['adapter'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('table', $options) && ! array_key_exists('schema', $options)) {\n            throw new Exception\\InvalidArgumentException('Table or Schema option missing!');\n        }\n\n        if (! array_key_exists('field', $options)) {\n            throw new Exception\\InvalidArgumentException('Field option missing!');\n        }\n\n        if (array_key_exists('adapter', $options)) {\n            $this->setAdapter($options['adapter']);\n        }\n\n        if (array_key_exists('exclude', $options)) {\n            $this->setExclude($options['exclude']);\n        }\n\n        $this->setField($options['field']);\n        if (array_key_exists('table', $options)) {\n            $this->setTable($options['table']);\n        }\n\n        if (array_key_exists('schema', $options)) {\n            $this->setSchema($options['schema']);\n        }\n    }\n\n    /**\n     * Returns the set adapter\n     *\n     * @throws \\Zend\\Validator\\Exception\\RuntimeException When no database adapter is defined\n     * @return DbAdapter\n     */\n    public function getAdapter()\n    {\n        return $this->adapter;\n    }\n\n    /**\n     * Sets a new database adapter\n     *\n     * @param  DbAdapter $adapter\n     * @return self Provides a fluent interface\n     */\n    public function setAdapter(DbAdapter $adapter)\n    {\n        return $this->setDbAdapter($adapter);\n    }\n\n    /**\n     * Returns the set exclude clause\n     *\n     * @return string|array\n     */\n    public function getExclude()\n    {\n        return $this->exclude;\n    }\n\n    /**\n     * Sets a new exclude clause\n     *\n     * @param string|array $exclude\n     * @return self Provides a fluent interface\n     */\n    public function setExclude($exclude)\n    {\n        $this->exclude = $exclude;\n        $this->select  = null;\n        return $this;\n    }\n\n    /**\n     * Returns the set field\n     *\n     * @return string|array\n     */\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    /**\n     * Sets a new field\n     *\n     * @param string $field\n     * @return AbstractDb\n     */\n    public function setField($field)\n    {\n        $this->field  = (string) $field;\n        $this->select = null;\n        return $this;\n    }\n\n    /**\n     * Returns the set table\n     *\n     * @return string\n     */\n    public function getTable()\n    {\n        return $this->table;\n    }\n\n    /**\n     * Sets a new table\n     *\n     * @param string $table\n     * @return self Provides a fluent interface\n     */\n    public function setTable($table)\n    {\n        $this->table  = (string) $table;\n        $this->select = null;\n        return $this;\n    }\n\n    /**\n     * Returns the set schema\n     *\n     * @return string\n     */\n    public function getSchema()\n    {\n        return $this->schema;\n    }\n\n    /**\n     * Sets a new schema\n     *\n     * @param string $schema\n     * @return self Provides a fluent interface\n     */\n    public function setSchema($schema)\n    {\n        $this->schema = $schema;\n        $this->select = null;\n        return $this;\n    }\n\n    /**\n     * Sets the select object to be used by the validator\n     *\n     * @param  Select $select\n     * @return self Provides a fluent interface\n     */\n    public function setSelect(Select $select)\n    {\n        $this->select = $select;\n        return $this;\n    }\n\n    /**\n     * Gets the select object to be used by the validator.\n     * If no select object was supplied to the constructor,\n     * then it will auto-generate one from the given table,\n     * schema, field, and adapter options.\n     *\n     * @return Select The Select object which will be used\n     */\n    public function getSelect()\n    {\n        if ($this->select instanceof Select) {\n            return $this->select;\n        }\n\n        // Build select object\n        $select          = new Select();\n        $tableIdentifier = new TableIdentifier($this->table, $this->schema);\n        $select->from($tableIdentifier)->columns([$this->field]);\n        $select->where->equalTo($this->field, null);\n\n        if ($this->exclude !== null) {\n            if (is_array($this->exclude)) {\n                $select->where->notEqualTo(\n                    $this->exclude['field'],\n                    $this->exclude['value']\n                );\n            } else {\n                $select->where($this->exclude);\n            }\n        }\n\n        $this->select = $select;\n\n        return $this->select;\n    }\n\n    /**\n     * Run query and returns matches, or null if no matches are found.\n     *\n     * @param  string $value\n     * @return array when matches are found.\n     */\n    protected function query($value)\n    {\n        $sql = new Sql($this->getAdapter());\n        $select = $this->getSelect();\n        $statement = $sql->prepareStatementForSqlObject($select);\n        $parameters = $statement->getParameterContainer();\n        $parameters['where1'] = $value;\n        $result = $statement->execute();\n\n        return $result->current();\n    }\n}\n"
  },
  {
    "path": "src/Db/NoRecordExists.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Db;\n\nuse Zend\\Validator\\Exception;\n\n/**\n * Confirms a record does not exist in a table.\n */\nclass NoRecordExists extends AbstractDb\n{\n    public function isValid($value)\n    {\n        /*\n         * Check for an adapter being defined. If not, throw an exception.\n         */\n        if (null === $this->adapter) {\n            throw new Exception\\RuntimeException('No database adapter present');\n        }\n\n        $valid = true;\n        $this->setValue($value);\n\n        $result = $this->query($value);\n        if ($result) {\n            $valid = false;\n            $this->error(self::ERROR_RECORD_FOUND);\n        }\n\n        return $valid;\n    }\n}\n"
  },
  {
    "path": "src/Db/RecordExists.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Db;\n\nuse Zend\\Validator\\Exception;\n\n/**\n * Confirms a record exists in a table.\n */\nclass RecordExists extends AbstractDb\n{\n    public function isValid($value)\n    {\n        /*\n         * Check for an adapter being defined. If not, throw an exception.\n         */\n        if (null === $this->adapter) {\n            throw new Exception\\RuntimeException('No database adapter present');\n        }\n\n        $valid = true;\n        $this->setValue($value);\n\n        $result = $this->query($value);\n        if (! $result) {\n            $valid = false;\n            $this->error(self::ERROR_NO_RECORD_FOUND);\n        }\n\n        return $valid;\n    }\n}\n"
  },
  {
    "path": "src/Digits.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Zend\\Filter\\Digits as DigitsFilter;\n\nclass Digits extends AbstractValidator\n{\n    const NOT_DIGITS   = 'notDigits';\n    const STRING_EMPTY = 'digitsStringEmpty';\n    const INVALID      = 'digitsInvalid';\n\n    /**\n     * Digits filter used for validation\n     *\n     * @var \\Zend\\Filter\\Digits\n     */\n    protected static $filter = null;\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_DIGITS   => \"The input must contain only digits\",\n        self::STRING_EMPTY => \"The input is an empty string\",\n        self::INVALID      => \"Invalid type given. String, integer or float expected\",\n    ];\n\n    /**\n     * Returns true if and only if $value only contains digit characters\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value) && ! is_int($value) && ! is_float($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue((string) $value);\n\n        if ('' === $this->getValue()) {\n            $this->error(self::STRING_EMPTY);\n            return false;\n        }\n\n        if (null === static::$filter) {\n            static::$filter = new DigitsFilter();\n        }\n\n        if ($this->getValue() !== static::$filter->filter($this->getValue())) {\n            $this->error(self::NOT_DIGITS);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/EmailAddress.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse UConverter;\n\nclass EmailAddress extends AbstractValidator\n{\n    const INVALID            = 'emailAddressInvalid';\n    const INVALID_FORMAT     = 'emailAddressInvalidFormat';\n    const INVALID_HOSTNAME   = 'emailAddressInvalidHostname';\n    const INVALID_MX_RECORD  = 'emailAddressInvalidMxRecord';\n    const INVALID_SEGMENT    = 'emailAddressInvalidSegment';\n    const DOT_ATOM           = 'emailAddressDotAtom';\n    const QUOTED_STRING      = 'emailAddressQuotedString';\n    const INVALID_LOCAL_PART = 'emailAddressInvalidLocalPart';\n    const LENGTH_EXCEEDED    = 'emailAddressLengthExceeded';\n\n    // @codingStandardsIgnoreStart\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID            => \"Invalid type given. String expected\",\n        self::INVALID_FORMAT     => \"The input is not a valid email address. Use the basic format local-part@hostname\",\n        self::INVALID_HOSTNAME   => \"'%hostname%' is not a valid hostname for the email address\",\n        self::INVALID_MX_RECORD  => \"'%hostname%' does not appear to have any valid MX or A records for the email address\",\n        self::INVALID_SEGMENT    => \"'%hostname%' is not in a routable network segment. The email address should not be resolved from public network\",\n        self::DOT_ATOM           => \"'%localPart%' can not be matched against dot-atom format\",\n        self::QUOTED_STRING      => \"'%localPart%' can not be matched against quoted-string format\",\n        self::INVALID_LOCAL_PART => \"'%localPart%' is not a valid local part for the email address\",\n        self::LENGTH_EXCEEDED    => \"The input exceeds the allowed length\",\n    ];\n    // @codingStandardsIgnoreEnd\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'hostname'  => 'hostname',\n        'localPart' => 'localPart'\n    ];\n\n    /**\n     * @var string\n     */\n    protected $hostname;\n\n    /**\n     * @var string\n     */\n    protected $localPart;\n\n    /**\n     * Returns the found mx record informations\n     *\n     * @var array\n     */\n    protected $mxRecord = [];\n\n    /**\n     * Internal options array\n     */\n    protected $options = [\n        'useMxCheck'        => false,\n        'useDeepMxCheck'    => false,\n        'useDomainCheck'    => true,\n        'allow'             => Hostname::ALLOW_DNS,\n        'strict'            => true,\n        'hostnameValidator' => null,\n    ];\n\n    /**\n     * Instantiates hostname validator for local use\n     *\n     * The following additional option keys are supported:\n     * 'hostnameValidator' => A hostname validator, see Zend\\Validator\\Hostname\n     * 'allow'             => Options for the hostname validator, see Zend\\Validator\\Hostname::ALLOW_*\n     * 'strict'            => Whether to adhere to strictest requirements in the spec\n     * 'useMxCheck'        => If MX check should be enabled, boolean\n     * 'useDeepMxCheck'    => If a deep MX check should be done, boolean\n     *\n     * @param array|\\Traversable $options OPTIONAL\n     */\n    public function __construct($options = [])\n    {\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp['allow'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['useMxCheck'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['hostnameValidator'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Sets the validation failure message template for a particular key\n     * Adds the ability to set messages to the attached hostname validator\n     *\n     * @param  string $messageString\n     * @param  string $messageKey     OPTIONAL\n     * @return AbstractValidator Provides a fluent interface\n     */\n    public function setMessage($messageString, $messageKey = null)\n    {\n        if ($messageKey === null) {\n            $this->getHostnameValidator()->setMessage($messageString);\n            parent::setMessage($messageString);\n            return $this;\n        }\n\n        if (! isset($this->messageTemplates[$messageKey])) {\n            $this->getHostnameValidator()->setMessage($messageString, $messageKey);\n        } else {\n            parent::setMessage($messageString, $messageKey);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns the set hostname validator\n     *\n     * If was not previously set then lazy load a new one\n     *\n     * @return Hostname\n     */\n    public function getHostnameValidator()\n    {\n        if (! isset($this->options['hostnameValidator'])) {\n            $this->options['hostnameValidator'] = new Hostname($this->getAllow());\n        }\n\n        return $this->options['hostnameValidator'];\n    }\n\n    /**\n     * @param Hostname $hostnameValidator OPTIONAL\n     * @return EmailAddress Provides a fluent interface\n     */\n    public function setHostnameValidator(Hostname $hostnameValidator = null)\n    {\n        $this->options['hostnameValidator'] = $hostnameValidator;\n\n        return $this;\n    }\n\n    /**\n     * Returns the allow option of the attached hostname validator\n     *\n     * @return int\n     */\n    public function getAllow()\n    {\n        return $this->options['allow'];\n    }\n\n    /**\n     * Sets the allow option of the hostname validator to use\n     *\n     * @param int $allow\n     * @return EmailAddress Provides a fluent interface\n     */\n    public function setAllow($allow)\n    {\n        $this->options['allow'] = $allow;\n        if (isset($this->options['hostnameValidator'])) {\n            $this->options['hostnameValidator']->setAllow($allow);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Whether MX checking via getmxrr is supported or not\n     *\n     * @return bool\n     */\n    public function isMxSupported()\n    {\n        return function_exists('getmxrr');\n    }\n\n    /**\n     * Returns the set validateMx option\n     *\n     * @return bool\n     */\n    public function getMxCheck()\n    {\n        return $this->options['useMxCheck'];\n    }\n\n    /**\n     * Set whether we check for a valid MX record via DNS\n     *\n     * This only applies when DNS hostnames are validated\n     *\n     * @param  bool $mx Set allowed to true to validate for MX records, and false to not validate them\n     * @return EmailAddress Fluid Interface\n     */\n    public function useMxCheck($mx)\n    {\n        $this->options['useMxCheck'] = (bool) $mx;\n        return $this;\n    }\n\n    /**\n     * Returns the set deepMxCheck option\n     *\n     * @return bool\n     */\n    public function getDeepMxCheck()\n    {\n        return $this->options['useDeepMxCheck'];\n    }\n\n    /**\n     * Use deep validation for MX records\n     *\n     * @param  bool $deep Set deep to true to perform a deep validation process for MX records\n     * @return EmailAddress Fluid Interface\n     */\n    public function useDeepMxCheck($deep)\n    {\n        $this->options['useDeepMxCheck'] = (bool) $deep;\n        return $this;\n    }\n\n    /**\n     * Returns the set domainCheck option\n     *\n     * @return bool\n     */\n    public function getDomainCheck()\n    {\n        return $this->options['useDomainCheck'];\n    }\n\n    /**\n     * Sets if the domain should also be checked\n     * or only the local part of the email address\n     *\n     * @param  bool $domain\n     * @return EmailAddress Fluid Interface\n     */\n    public function useDomainCheck($domain = true)\n    {\n        $this->options['useDomainCheck'] = (bool) $domain;\n        return $this;\n    }\n\n    /**\n     * Returns if the given host is reserved\n     *\n     * The following addresses are seen as reserved\n     * '0.0.0.0/8', '10.0.0.0/8', '127.0.0.0/8'\n     * '100.64.0.0/10'\n     * '172.16.0.0/12'\n     * '198.18.0.0/15'\n     * '169.254.0.0/16', '192.168.0.0/16'\n     * '192.0.2.0/24', '192.88.99.0/24', '198.51.100.0/24', '203.0.113.0/24'\n     * '224.0.0.0/4', '240.0.0.0/4'\n     * @see http://en.wikipedia.org/wiki/Reserved_IP_addresses\n     *\n     * As of RFC5753 (JAN 2010), the following blocks are no longer reserved:\n     *   - 128.0.0.0/16\n     *   - 191.255.0.0/16\n     *   - 223.255.255.0/24\n     * @see http://tools.ietf.org/html/rfc5735#page-6\n     *\n     * As of RFC6598 (APR 2012), the following blocks are now reserved:\n     *   - 100.64.0.0/10\n     * @see http://tools.ietf.org/html/rfc6598#section-7\n     *\n     * @param string $host\n     * @return bool Returns false when minimal one of the given addresses is not reserved\n     */\n    protected function isReserved($host)\n    {\n        if (! preg_match('/^([0-9]{1,3}\\.){3}[0-9]{1,3}$/', $host)) {\n            $host = gethostbynamel($host);\n        } else {\n            $host = [$host];\n        }\n\n        if (empty($host)) {\n            return false;\n        }\n\n        foreach ($host as $server) {\n            // @codingStandardsIgnoreStart\n            // Search for 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8\n            if (!preg_match('/^(0|10|127)(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server) &&\n                // Search for 100.64.0.0/10\n                !preg_match('/^100\\.(6[0-4]|[7-9][0-9]|1[0-1][0-9]|12[0-7])(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&\n                // Search for 172.16.0.0/12\n                !preg_match('/^172\\.(1[6-9]|2[0-9]|3[0-1])(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&\n                // Search for 198.18.0.0/15\n                !preg_match('/^198\\.(1[8-9])(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&\n                // Search for 169.254.0.0/16, 192.168.0.0/16\n                !preg_match('/^(169\\.254|192\\.168)(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&\n                // Search for 192.0.2.0/24, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24\n                !preg_match('/^(192\\.0\\.2|192\\.88\\.99|198\\.51\\.100|203\\.0\\.113)\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$/', $server) &&\n                // Search for 224.0.0.0/4, 240.0.0.0/4\n                !preg_match('/^(2(2[4-9]|[3-4][0-9]|5[0-5]))(\\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server)\n            ) {\n                return false;\n            }\n            // @codingStandardsIgnoreEnd\n        }\n\n        return true;\n    }\n\n    /**\n     * Internal method to validate the local part of the email address\n     *\n     * @return bool\n     */\n    protected function validateLocalPart()\n    {\n        // First try to match the local part on the common dot-atom format\n        $result = false;\n\n        // Dot-atom characters are: 1*atext *(\".\" 1*atext)\n        // atext: ALPHA / DIGIT / and \"!\", \"#\", \"$\", \"%\", \"&\", \"'\", \"*\",\n        //        \"+\", \"-\", \"/\", \"=\", \"?\", \"^\", \"_\", \"`\", \"{\", \"|\", \"}\", \"~\"\n        $atext = 'a-zA-Z0-9\\x21\\x23\\x24\\x25\\x26\\x27\\x2a\\x2b\\x2d\\x2f\\x3d\\x3f\\x5e\\x5f\\x60\\x7b\\x7c\\x7d\\x7e';\n        if (preg_match('/^[' . $atext . ']+(\\x2e+[' . $atext . ']+)*$/', $this->localPart)) {\n            $result = true;\n        } elseif ($this->validateInternationalizedLocalPart($this->localPart)) {\n            $result = true;\n        } else {\n            // Try quoted string format (RFC 5321 Chapter 4.1.2)\n\n            // Quoted-string characters are: DQUOTE *(qtext/quoted-pair) DQUOTE\n            $qtext      = '\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e'; // %d32-33 / %d35-91 / %d93-126\n            $quotedPair = '\\x20-\\x7e'; // %d92 %d32-126\n            if (preg_match('/^\"(['. $qtext .']|\\x5c[' . $quotedPair . '])*\"$/', $this->localPart)) {\n                $result = true;\n            } else {\n                $this->error(self::DOT_ATOM);\n                $this->error(self::QUOTED_STRING);\n                $this->error(self::INVALID_LOCAL_PART);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * @param string $localPart Address local part to validate.\n     * @return bool\n     */\n    protected function validateInternationalizedLocalPart($localPart)\n    {\n        if (extension_loaded('intl')\n            && false === UConverter::transcode($localPart, 'UTF-8', 'UTF-8')\n        ) {\n            // invalid utf?\n            return false;\n        }\n\n        $atext = 'a-zA-Z0-9\\x21\\x23\\x24\\x25\\x26\\x27\\x2a\\x2b\\x2d\\x2f\\x3d\\x3f\\x5e\\x5f\\x60\\x7b\\x7c\\x7d\\x7e';\n        // RFC 6532 extends atext to include non-ascii utf\n        // @see https://tools.ietf.org/html/rfc6532#section-3.1\n        $uatext = $atext . '\\x{80}-\\x{FFFF}';\n        return (bool) preg_match('/^[' . $uatext . ']+(\\x2e+[' . $uatext . ']+)*$/u', $localPart);\n    }\n\n    /**\n     * Returns the found MX Record information after validation including weight for further processing\n     *\n     * @return array\n     */\n    public function getMXRecord()\n    {\n        return $this->mxRecord;\n    }\n\n    /**\n     * Internal method to validate the servers MX records\n     *\n     * @return bool\n     */\n    protected function validateMXRecords()\n    {\n        $mxHosts = [];\n        $weight  = [];\n        $result = getmxrr($this->hostname, $mxHosts, $weight);\n        if (! empty($mxHosts) && ! empty($weight)) {\n            $this->mxRecord = array_combine($mxHosts, $weight) ?: [];\n        } else {\n            $this->mxRecord = [];\n        }\n\n        arsort($this->mxRecord);\n\n        // Fallback to IPv4 hosts if no MX record found (RFC 2821 SS 5).\n        if (! $result) {\n            $result = gethostbynamel($this->hostname);\n            if (is_array($result)) {\n                $this->mxRecord = array_flip($result);\n            }\n        }\n\n        if (! $result) {\n            $this->error(self::INVALID_MX_RECORD);\n            return $result;\n        }\n\n        if (! $this->options['useDeepMxCheck']) {\n            return $result;\n        }\n\n        $validAddress = false;\n        $reserved     = true;\n        foreach ($this->mxRecord as $hostname => $weight) {\n            $res = $this->isReserved($hostname);\n            if (! $res) {\n                $reserved = false;\n            }\n\n            if (! $res\n                && (checkdnsrr($hostname, \"A\")\n                || checkdnsrr($hostname, \"AAAA\")\n                || checkdnsrr($hostname, \"A6\"))\n            ) {\n                $validAddress = true;\n                break;\n            }\n        }\n\n        if (! $validAddress) {\n            $result = false;\n            $error  = ($reserved) ? self::INVALID_SEGMENT : self::INVALID_MX_RECORD;\n            $this->error($error);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Internal method to validate the hostname part of the email address\n     *\n     * @return bool\n     */\n    protected function validateHostnamePart()\n    {\n        $hostname = $this->getHostnameValidator()->setTranslator($this->getTranslator())\n                         ->isValid($this->hostname);\n        if (! $hostname) {\n            $this->error(self::INVALID_HOSTNAME);\n            // Get messages and errors from hostnameValidator\n            foreach ($this->getHostnameValidator()->getMessages() as $code => $message) {\n                $this->abstractOptions['messages'][$code] = $message;\n            }\n        } elseif ($this->options['useMxCheck']) {\n            // MX check on hostname\n            $hostname = $this->validateMXRecords();\n        }\n\n        return $hostname;\n    }\n\n    /**\n     * Splits the given value in hostname and local part of the email address\n     *\n     * @param string $value Email address to be split\n     * @return bool Returns false when the email can not be split\n     */\n    protected function splitEmailParts($value)\n    {\n        $value = is_string($value) ? $value : '';\n\n        // Split email address up and disallow '..'\n        if (strpos($value, '..') !== false\n            || ! preg_match('/^(.+)@([^@]+)$/', $value, $matches)\n        ) {\n            return false;\n        }\n\n        $this->localPart = $matches[1];\n        $this->hostname  = $this->idnToAscii($matches[2]);\n\n        return true;\n    }\n\n    /**\n     * Defined by Zend\\Validator\\ValidatorInterface\n     *\n     * Returns true if and only if $value is a valid email address\n     * according to RFC2822\n     *\n     * @link   http://www.ietf.org/rfc/rfc2822.txt RFC2822\n     * @link   http://www.columbia.edu/kermit/ascii.html US-ASCII characters\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $length  = true;\n        $this->setValue($value);\n\n        // Split email address up and disallow '..'\n        if (! $this->splitEmailParts($this->getValue())) {\n            $this->error(self::INVALID_FORMAT);\n            return false;\n        }\n\n        if ($this->getOption('strict') && (strlen($this->localPart) > 64) || (strlen($this->hostname) > 255)) {\n            $length = false;\n            $this->error(self::LENGTH_EXCEEDED);\n        }\n\n        // Match hostname part\n        $hostname = false;\n        if ($this->options['useDomainCheck']) {\n            $hostname = $this->validateHostnamePart();\n        }\n\n        $local = $this->validateLocalPart();\n\n        // If both parts valid, return true\n        return ($local && $length) && (! $this->options['useDomainCheck'] || $hostname);\n    }\n\n    /**\n     * Safely convert UTF-8 encoded domain name to ASCII\n     * @param string $email  the UTF-8 encoded email\n     * @return string\n     */\n    protected function idnToAscii($email)\n    {\n        if (extension_loaded('intl')) {\n            if (defined('INTL_IDNA_VARIANT_UTS46')) {\n                return (idn_to_ascii($email, 0, INTL_IDNA_VARIANT_UTS46) ?: $email);\n            }\n            return (idn_to_ascii($email) ?: $email);\n        }\n        return $email;\n    }\n\n    /**\n     * Safely convert ASCII encoded domain name to UTF-8\n     * @param string $email the ASCII encoded email\n     * @return string\n     */\n    protected function idnToUtf8($email)\n    {\n        if (strlen($email) == 0) {\n            return $email;\n        }\n\n        if (extension_loaded('intl')) {\n            // The documentation does not clarify what kind of failure\n            // can happen in idn_to_utf8. One can assume if the source\n            // is not IDN encoded, it would fail, but it usually returns\n            // the source string in those cases.\n            // But not when the source string is long enough.\n            // Thus we default to source string ourselves.\n            if (defined('INTL_IDNA_VARIANT_UTS46')) {\n                return idn_to_utf8($email, 0, INTL_IDNA_VARIANT_UTS46) ?: $email;\n            }\n            return idn_to_utf8($email) ?: $email;\n        }\n        return $email;\n    }\n}\n"
  },
  {
    "path": "src/Exception/BadMethodCallException.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\nclass BadMethodCallException extends \\BadMethodCallException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "src/Exception/ExceptionInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\ninterface ExceptionInterface\n{\n}\n"
  },
  {
    "path": "src/Exception/ExtensionNotLoadedException.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\nclass ExtensionNotLoadedException extends RuntimeException\n{\n}\n"
  },
  {
    "path": "src/Exception/InvalidArgumentException.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\nclass InvalidArgumentException extends \\InvalidArgumentException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "src/Exception/InvalidMagicMimeFileException.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\nclass InvalidMagicMimeFileException extends InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "src/Exception/RuntimeException.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Exception;\n\nclass RuntimeException extends \\RuntimeException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "src/Explode.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\ServiceManager\\ServiceManager;\n\nclass Explode extends AbstractValidator implements ValidatorPluginManagerAwareInterface\n{\n    const INVALID = 'explodeInvalid';\n\n    protected $pluginManager;\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID => \"Invalid type given\",\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [];\n\n    /**\n     * @var string\n     */\n    protected $valueDelimiter = ',';\n\n    /**\n     * @var ValidatorInterface\n     */\n    protected $validator;\n\n    /**\n     * @var bool\n     */\n    protected $breakOnFirstFailure = false;\n\n    /**\n     * Sets the delimiter string that the values will be split upon\n     *\n     * @param string $delimiter\n     * @return Explode\n     */\n    public function setValueDelimiter($delimiter)\n    {\n        $this->valueDelimiter = $delimiter;\n        return $this;\n    }\n\n    /**\n     * Returns the delimiter string that the values will be split upon\n     *\n     * @return string\n     */\n    public function getValueDelimiter()\n    {\n        return $this->valueDelimiter;\n    }\n\n    /**\n     * Set validator plugin manager\n     *\n     * @param ValidatorPluginManager $pluginManager\n     */\n    public function setValidatorPluginManager(ValidatorPluginManager $pluginManager)\n    {\n        $this->pluginManager = $pluginManager;\n    }\n\n    /**\n     * Get validator plugin manager\n     *\n     * @return ValidatorPluginManager\n     */\n    public function getValidatorPluginManager()\n    {\n        if (! $this->pluginManager) {\n            $this->setValidatorPluginManager(new ValidatorPluginManager(new ServiceManager));\n        }\n\n        return $this->pluginManager;\n    }\n\n    /**\n     * Sets the Validator for validating each value\n     *\n     * @param ValidatorInterface|array $validator\n     * @throws Exception\\RuntimeException\n     * @return Explode\n     */\n    public function setValidator($validator)\n    {\n        if (is_array($validator)) {\n            if (! isset($validator['name'])) {\n                throw new Exception\\RuntimeException(\n                    'Invalid validator specification provided; does not include \"name\" key'\n                );\n            }\n            $name = $validator['name'];\n            $options = isset($validator['options']) ? $validator['options'] : [];\n            $validator = $this->getValidatorPluginManager()->get($name, $options);\n        }\n\n        if (! $validator instanceof ValidatorInterface) {\n            throw new Exception\\RuntimeException(\n                'Invalid validator given'\n            );\n        }\n\n        $this->validator = $validator;\n        return $this;\n    }\n\n    /**\n     * Gets the Validator for validating each value\n     *\n     * @return ValidatorInterface\n     */\n    public function getValidator()\n    {\n        return $this->validator;\n    }\n\n    /**\n     * Set break on first failure setting\n     *\n     * @param  bool $break\n     * @return Explode\n     */\n    public function setBreakOnFirstFailure($break)\n    {\n        $this->breakOnFirstFailure = (bool) $break;\n        return $this;\n    }\n\n    /**\n     * Get break on first failure setting\n     *\n     * @return bool\n     */\n    public function isBreakOnFirstFailure()\n    {\n        return $this->breakOnFirstFailure;\n    }\n\n    /**\n     * Defined by Zend\\Validator\\ValidatorInterface\n     *\n     * Returns true if all values validate true\n     *\n     * @param  mixed $value\n     * @param  mixed $context Extra \"context\" to provide the composed validator\n     * @return bool\n     * @throws Exception\\RuntimeException\n     */\n    public function isValid($value, $context = null)\n    {\n        $this->setValue($value);\n\n        if ($value instanceof Traversable) {\n            $value = ArrayUtils::iteratorToArray($value);\n        }\n\n        if (is_array($value)) {\n            $values = $value;\n        } elseif (is_string($value)) {\n            $delimiter = $this->getValueDelimiter();\n            // Skip explode if delimiter is null,\n            // used when value is expected to be either an\n            // array when multiple values and a string for\n            // single values (ie. MultiCheckbox form behavior)\n            $values = (null !== $delimiter)\n                      ? explode($this->valueDelimiter, $value)\n                      : [$value];\n        } else {\n            $values = [$value];\n        }\n\n        $validator = $this->getValidator();\n\n        if (! $validator) {\n            throw new Exception\\RuntimeException(sprintf(\n                '%s expects a validator to be set; none given',\n                __METHOD__\n            ));\n        }\n\n        foreach ($values as $value) {\n            if (! $validator->isValid($value, $context)) {\n                $this->abstractOptions['messages'][] = $validator->getMessages();\n\n                if ($this->isBreakOnFirstFailure()) {\n                    return false;\n                }\n            }\n        }\n\n        return ! $this->abstractOptions['messages'];\n    }\n}\n"
  },
  {
    "path": "src/File/Count.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for counting all given files\n *\n */\nclass Count extends AbstractValidator\n{\n    /**#@+\n     * @const string Error constants\n     */\n    const TOO_MANY = 'fileCountTooMany';\n    const TOO_FEW  = 'fileCountTooFew';\n    /**#@-*/\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::TOO_MANY => \"Too many files, maximum '%max%' are allowed but '%count%' are given\",\n        self::TOO_FEW  => \"Too few files, minimum '%min%' are expected but '%count%' are given\",\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'min'   => ['options' => 'min'],\n        'max'   => ['options' => 'max'],\n        'count' => 'count'\n    ];\n\n    /**\n     * Actual filecount\n     *\n     * @var int\n     */\n    protected $count;\n\n    /**\n     * Internal file array\n     * @var array\n     */\n    protected $files;\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'min' => null,  // Minimum file count, if null there is no minimum file count\n        'max' => null,  // Maximum file count, if null there is no maximum file count\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * Min limits the file count, when used with max=null it is the maximum file count\n     * It also accepts an array with the keys 'min' and 'max'\n     *\n     * If $options is an integer, it will be used as maximum file count\n     * As Array is accepts the following keys:\n     * 'min': Minimum filecount\n     * 'max': Maximum filecount\n     *\n     * @param  int|array|\\Traversable $options Options for the adapter\n     */\n    public function __construct($options = null)\n    {\n        if (1 < func_num_args()) {\n            $args = func_get_args();\n            $options = [\n                'min' => array_shift($args),\n                'max' => array_shift($args),\n            ];\n        }\n\n        if (is_string($options) || is_numeric($options)) {\n            $options = ['max' => $options];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the minimum file count\n     *\n     * @return int\n     */\n    public function getMin()\n    {\n        return $this->options['min'];\n    }\n\n    /**\n     * Sets the minimum file count\n     *\n     * @param  int|array $min The minimum file count\n     * @return Count Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException When min is greater than max\n     */\n    public function setMin($min)\n    {\n        if (is_array($min) && isset($min['min'])) {\n            $min = $min['min'];\n        }\n\n        if (! is_numeric($min)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $min = (int) $min;\n        if (($this->getMax() !== null) && ($min > $this->getMax())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum must be less than or equal to the maximum file count, but {$min} > {$this->getMax()}\"\n            );\n        }\n\n        $this->options['min'] = $min;\n        return $this;\n    }\n\n    /**\n     * Returns the maximum file count\n     *\n     * @return int\n     */\n    public function getMax()\n    {\n        return $this->options['max'];\n    }\n\n    /**\n     * Sets the maximum file count\n     *\n     * @param  int|array $max The maximum file count\n     * @return Count Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException When max is smaller than min\n     */\n    public function setMax($max)\n    {\n        if (is_array($max) && isset($max['max'])) {\n            $max = $max['max'];\n        }\n\n        if (! is_numeric($max)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $max = (int) $max;\n        if (($this->getMin() !== null) && ($max < $this->getMin())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum must be greater than or equal to the minimum file count, but {$max} < {$this->getMin()}\"\n            );\n        }\n\n        $this->options['max'] = $max;\n        return $this;\n    }\n\n    /**\n     * Adds a file for validation\n     *\n     * @param string|array $file\n     * @return Count\n     */\n    public function addFile($file)\n    {\n        if (is_string($file)) {\n            $file = [$file];\n        }\n\n        if (is_array($file)) {\n            foreach ($file as $name) {\n                if (! isset($this->files[$name]) && ! empty($name)) {\n                    $this->files[$name] = $name;\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the file count of all checked files is at least min and\n     * not bigger than max (when max is not null). Attention: When checking with set min you\n     * must give all files with the first call, otherwise you will get a false.\n     *\n     * @param  string|array $value Filenames to check for count\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        if (($file !== null) && ! array_key_exists('destination', $file)) {\n            $file['destination'] = dirname($value);\n        }\n\n        if (($file !== null) && array_key_exists('tmp_name', $file)) {\n            $value = $file['destination'] . DIRECTORY_SEPARATOR . $file['name'];\n        }\n\n        if (($file === null) || ! empty($file['tmp_name'])) {\n            $this->addFile($value);\n        }\n\n        $this->count = count($this->files);\n        if (($this->getMax() !== null) && ($this->count > $this->getMax())) {\n            return $this->throwError($file, self::TOO_MANY);\n        }\n\n        if (($this->getMin() !== null) && ($this->count < $this->getMin())) {\n            return $this->throwError($file, self::TOO_FEW);\n        }\n\n        return true;\n    }\n\n    /**\n     * Throws an error of the given type\n     *\n     * @param  string $file\n     * @param  string $errorType\n     * @return false\n     */\n    protected function throwError($file, $errorType)\n    {\n        if ($file !== null) {\n            if (is_array($file)) {\n                if (array_key_exists('name', $file)) {\n                    $this->value = $file['name'];\n                }\n            } elseif (is_string($file)) {\n                $this->value = $file;\n            }\n        }\n\n        $this->error($errorType);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/Crc32.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the crc32 hash of given files\n */\nclass Crc32 extends Hash\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_NOT_MATCH = 'fileCrc32DoesNotMatch';\n    const NOT_DETECTED   = 'fileCrc32NotDetected';\n    const NOT_FOUND      = 'fileCrc32NotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_NOT_MATCH => \"File does not match the given crc32 hashes\",\n        self::NOT_DETECTED   => \"A crc32 hash could not be evaluated for the given file\",\n        self::NOT_FOUND      => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var string\n     */\n    protected $options = [\n        'algorithm' => 'crc32',\n        'hash'      => null,\n    ];\n\n    /**\n     * Returns all set crc32 hashes\n     *\n     * @return array\n     */\n    public function getCrc32()\n    {\n        return $this->getHash();\n    }\n\n    /**\n     * Sets the crc32 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return self Provides a fluent interface\n     */\n    public function setCrc32($options)\n    {\n        $this->setHash($options);\n        return $this;\n    }\n\n    /**\n     * Adds the crc32 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return self Provides a fluent interface\n     */\n    public function addCrc32($options)\n    {\n        $this->addHash($options);\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the given file confirms the set hash\n     *\n     * @param  string|array $value Filename to check for hash\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $hashes   = array_unique(array_keys($this->getHash()));\n        $filehash = hash_file('crc32', $fileInfo['file']);\n        if ($filehash === false) {\n            $this->error(self::NOT_DETECTED);\n            return false;\n        }\n\n        foreach ($hashes as $hash) {\n            if ($filehash === $hash) {\n                return true;\n            }\n        }\n\n        $this->error(self::DOES_NOT_MATCH);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/ExcludeExtension.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\File\\FileInformationTrait;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for the excluding file extensions\n */\nclass ExcludeExtension extends Extension\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const FALSE_EXTENSION = 'fileExcludeExtensionFalse';\n    const NOT_FOUND       = 'fileExcludeExtensionNotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_EXTENSION => \"File has an incorrect extension\",\n        self::NOT_FOUND       => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Returns true if and only if the file extension of $value is not included in the\n     * set extension list\n     *\n     * @param  string|array $value Real file to check for extension\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        // Is file readable ?\n        if (! $this->getAllowNonExistentFile()\n            && (empty($fileInfo['file']) || false === is_readable($fileInfo['file']))\n        ) {\n            if (preg_match('/nofile\\.mo$/', $fileInfo['file'])) {\n            }\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $this->setValue($fileInfo['filename']);\n\n        $extension  = substr($fileInfo['filename'], strrpos($fileInfo['filename'], '.') + 1);\n        $extensions = $this->getExtension();\n\n        if ($this->getCase() && (! in_array($extension, $extensions))) {\n            return true;\n        } elseif (! $this->getCase()) {\n            foreach ($extensions as $ext) {\n                if (strtolower($ext) == strtolower($extension)) {\n                    if (preg_match('/nofile\\.mo$/', $fileInfo['file'])) {\n                    }\n                    $this->error(self::FALSE_EXTENSION);\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        $this->error(self::FALSE_EXTENSION);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/ExcludeMimeType.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse finfo;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the mime type of a file\n */\nclass ExcludeMimeType extends MimeType\n{\n    use FileInformationTrait;\n\n    const FALSE_TYPE   = 'fileExcludeMimeTypeFalse';\n    const NOT_DETECTED = 'fileExcludeMimeTypeNotDetected';\n    const NOT_READABLE = 'fileExcludeMimeTypeNotReadable';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_TYPE   => \"File has an incorrect mimetype of '%type%'\",\n        self::NOT_DETECTED => \"The mimetype could not be detected from the file\",\n        self::NOT_READABLE => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Returns true if the mimetype of the file does not matche the given ones. Also parts\n     * of mimetypes can be checked. If you give for example \"image\" all image\n     * mime types will not be accepted like \"image/gif\", \"image/jpeg\" and so on.\n     *\n     * @param  string|array $value Real file to check for mimetype\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file, true);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_READABLE);\n            return false;\n        }\n\n        $mimefile = $this->getMagicFile();\n        if (class_exists('finfo', false)) {\n            if (! $this->isMagicFileDisabled() && (! empty($mimefile) && empty($this->finfo))) {\n                $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile);\n            }\n\n            if (empty($this->finfo)) {\n                $this->finfo = finfo_open(FILEINFO_MIME_TYPE);\n            }\n\n            $this->type = null;\n            if (! empty($this->finfo)) {\n                $this->type = finfo_file($this->finfo, $fileInfo['file']);\n            }\n        }\n\n        if (empty($this->type) && $this->getHeaderCheck()) {\n            $this->type = $fileInfo['filetype'];\n        }\n\n        if (empty($this->type)) {\n            $this->error(self::NOT_DETECTED);\n            return false;\n        }\n\n        $mimetype = $this->getMimeType(true);\n        if (in_array($this->type, $mimetype)) {\n            $this->error(self::FALSE_TYPE);\n            return false;\n        }\n\n        $types = explode('/', $this->type);\n        $types = array_merge($types, explode('-', $this->type));\n        $types = array_merge($types, explode(';', $this->type));\n        foreach ($mimetype as $mime) {\n            if (in_array($mime, $types)) {\n                $this->error(self::FALSE_TYPE);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/File/Exists.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator which checks if the file already exists in the directory\n */\nclass Exists extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_NOT_EXIST = 'fileExistsDoesNotExist';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_NOT_EXIST => \"File does not exist\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'directory' => null,  // internal list of directories\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'directory' => ['options' => 'directory'],\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param  string|array|\\Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        if (is_string($options)) {\n            $options = explode(',', $options);\n        }\n\n        if (is_array($options) && ! array_key_exists('directory', $options)) {\n            $options = ['directory' => $options];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set file directories which are checked\n     *\n     * @param  bool $asArray Returns the values as array; when false, a concatenated string is returned\n     * @return string|null\n     */\n    public function getDirectory($asArray = false)\n    {\n        $asArray   = (bool) $asArray;\n        $directory = $this->options['directory'];\n        if ($asArray && isset($directory)) {\n            $directory = explode(',', (string) $directory);\n        }\n\n        return $directory;\n    }\n\n    /**\n     * Sets the file directory which will be checked\n     *\n     * @param  string|array $directory The directories to validate\n     * @return Extension Provides a fluent interface\n     */\n    public function setDirectory($directory)\n    {\n        $this->options['directory'] = null;\n        $this->addDirectory($directory);\n        return $this;\n    }\n\n    /**\n     * Adds the file directory which will be checked\n     *\n     * @param  string|array $directory The directory to add for validation\n     * @return Extension Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function addDirectory($directory)\n    {\n        $directories = $this->getDirectory(true);\n        if (! isset($directories)) {\n            $directories = [];\n        }\n\n        if (is_string($directory)) {\n            $directory = explode(',', $directory);\n        } elseif (! is_array($directory)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        foreach ($directory as $content) {\n            if (empty($content) || ! is_string($content)) {\n                continue;\n            }\n\n            $directories[] = trim($content);\n        }\n        $directories = array_unique($directories);\n\n        // Sanity check to ensure no empty values\n        foreach ($directories as $key => $dir) {\n            if (empty($dir)) {\n                unset($directories[$key]);\n            }\n        }\n\n        $this->options['directory'] = (! empty($directory))\n            ? implode(',', $directories) : null;\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the file already exists in the set directories\n     *\n     * @param  string|array $value Real file to check for existence\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file, false, true);\n\n        $this->setValue($fileInfo['filename']);\n\n        $check = false;\n        $directories = $this->getDirectory(true);\n        if (! isset($directories)) {\n            $check = true;\n            if (! file_exists($fileInfo['file'])) {\n                $this->error(self::DOES_NOT_EXIST);\n                return false;\n            }\n        } else {\n            foreach ($directories as $directory) {\n                if (! isset($directory) || '' === $directory) {\n                    continue;\n                }\n\n                $check = true;\n                if (! file_exists($directory . DIRECTORY_SEPARATOR . $fileInfo['basename'])) {\n                    $this->error(self::DOES_NOT_EXIST);\n                    return false;\n                }\n            }\n        }\n\n        if (! $check) {\n            $this->error(self::DOES_NOT_EXIST);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/File/Extension.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\File\\FileInformationTrait;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for the file extension of a file\n */\nclass Extension extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const FALSE_EXTENSION = 'fileExtensionFalse';\n    const NOT_FOUND       = 'fileExtensionNotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_EXTENSION => \"File has an incorrect extension\",\n        self::NOT_FOUND       => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'case'      => false,   // Validate case sensitive\n        'extension' => '',      // List of extensions\n        'allowNonExistentFile' => false, // Allow validation even if file does not exist\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'extension' => ['options' => 'extension'],\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param  string|array|Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        $case = null;\n        if (1 < func_num_args()) {\n            $case = func_get_arg(1);\n        }\n\n        if (is_array($options)) {\n            if (isset($options['case'])) {\n                $case = $options['case'];\n                unset($options['case']);\n            }\n\n            if (! array_key_exists('extension', $options)) {\n                $options = ['extension' => $options];\n            }\n        } else {\n            $options = ['extension' => $options];\n        }\n\n        if ($case !== null) {\n            $options['case'] = $case;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the case option\n     *\n     * @return bool\n     */\n    public function getCase()\n    {\n        return $this->options['case'];\n    }\n\n    /**\n     * Sets the case to use\n     *\n     * @param  bool $case\n     * @return self Provides a fluent interface\n     */\n    public function setCase($case)\n    {\n        $this->options['case'] = (bool) $case;\n        return $this;\n    }\n\n    /**\n     * Returns the set file extension\n     *\n     * @return array\n     */\n    public function getExtension()\n    {\n        $extension = explode(',', $this->options['extension']);\n\n        return $extension;\n    }\n\n    /**\n     * Sets the file extensions\n     *\n     * @param  string|array $extension The extensions to validate\n     * @return self Provides a fluent interface\n     */\n    public function setExtension($extension)\n    {\n        $this->options['extension'] = null;\n        $this->addExtension($extension);\n        return $this;\n    }\n\n    /**\n     * Adds the file extensions\n     *\n     * @param  string|array $extension The extensions to add for validation\n     * @return self Provides a fluent interface\n     */\n    public function addExtension($extension)\n    {\n        $extensions = $this->getExtension();\n        if (is_string($extension)) {\n            $extension = explode(',', $extension);\n        }\n\n        foreach ($extension as $content) {\n            if (empty($content) || ! is_string($content)) {\n                continue;\n            }\n\n            $extensions[] = trim($content);\n        }\n\n        $extensions = array_unique($extensions);\n\n        // Sanity check to ensure no empty values\n        foreach ($extensions as $key => $ext) {\n            if (empty($ext)) {\n                unset($extensions[$key]);\n            }\n        }\n\n        $this->options['extension'] = implode(',', $extensions);\n        return $this;\n    }\n\n    /**\n     * Returns whether or not to allow validation of non-existent files.\n     *\n     * @return bool\n     */\n    public function getAllowNonExistentFile()\n    {\n        return $this->options['allowNonExistentFile'];\n    }\n\n    /**\n     * Sets the flag indicating whether or not to allow validation of non-existent files.\n     *\n     * @param  bool $flag Whether or not to allow validation of non-existent files.\n     * @return self Provides a fluent interface\n     */\n    public function setAllowNonExistentFile($flag)\n    {\n        $this->options['allowNonExistentFile'] = (bool) $flag;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the file extension of $value is included in the\n     * set extension list\n     *\n     * @param  string|array $value Real file to check for extension\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        // Is file readable ?\n        if (! $this->getAllowNonExistentFile()\n            && (empty($fileInfo['file']) || false === is_readable($fileInfo['file']))\n        ) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $this->setValue($fileInfo['filename']);\n\n        $extension  = substr($fileInfo['filename'], strrpos($fileInfo['filename'], '.') + 1);\n        $extensions = $this->getExtension();\n\n        if ($this->getCase() && (in_array($extension, $extensions))) {\n            return true;\n        } elseif (! $this->getCase()) {\n            foreach ($extensions as $ext) {\n                if (strtolower($ext) == strtolower($extension)) {\n                    return true;\n                }\n            }\n        }\n\n        $this->error(self::FALSE_EXTENSION);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/FileInformationTrait.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2019 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Zend\\Validator\\Exception;\n\ntrait FileInformationTrait\n{\n    /**\n     * Returns array if the procedure is identified\n     *\n     * @param  string|array|object $value    Filename to check\n     * @param  null|array          $file     File data (when using legacy Zend_File_Transfer API)\n     * @param  bool                $hasType  Return with filetype (optional)\n     * @param  bool                $basename Return with basename - is calculated from location path (optional)\n     * @return array\n     */\n    protected function getFileInfo(\n        $value,\n        array $file = null,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        if (is_string($value) && is_array($file)) {\n            return $this->getLegacyFileInfo($file, $hasType, $hasBasename);\n        }\n\n        if (is_array($value)) {\n            return $this->getSapiFileInfo($value, $hasType, $hasBasename);\n        }\n\n        if ($value instanceof UploadedFileInterface) {\n            return $this->getPsr7FileInfo($value, $hasType, $hasBasename);\n        }\n\n        return $this->getFileBasedFileInfo($value, $hasType, $hasBasename);\n    }\n\n    /**\n     * Generate file information array with legacy Zend_File_Transfer API\n     *\n     * @param array  $file        File data\n     * @param bool   $hasType     Return with filetype\n     * @param bool   $hasBasename Basename is calculated from location path\n     * @return array\n     */\n    private function getLegacyFileInfo(\n        array $file,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        $fileInfo = [];\n\n        $fileInfo['filename'] = $file['name'];\n        $fileInfo['file']     = $file['tmp_name'];\n\n        if ($hasBasename) {\n            $fileInfo['basename'] = basename($fileInfo['file']);\n        }\n\n        if ($hasType) {\n            $fileInfo['filetype'] = $file['type'];\n        }\n\n        return $fileInfo;\n    }\n\n    /**\n     * Generate file information array with SAPI\n     *\n     * @param array $file        File data from SAPI\n     * @param bool  $hasType     Return with filetype\n     * @param bool  $hasBasename Filename is calculated from location path\n     * @return array\n     */\n    private function getSapiFileInfo(\n        array $file,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        if (! isset($file['tmp_name']) || ! isset($file['name'])) {\n            throw new Exception\\InvalidArgumentException(\n                'Value array must be in $_FILES format'\n            );\n        }\n\n        $fileInfo = [];\n\n        $fileInfo['file']     = $file['tmp_name'];\n        $fileInfo['filename'] = $file['name'];\n\n        if ($hasBasename) {\n            $fileInfo['basename'] = basename($fileInfo['file']);\n        }\n\n        if ($hasType) {\n            $fileInfo['filetype'] = $file['type'];\n        }\n\n        return $fileInfo;\n    }\n\n    /**\n     * Generate file information array with PSR-7 UploadedFileInterface\n     *\n     * @param UploadedFileInterface $file\n     * @param bool                  $hasType     Return with filetype\n     * @param bool                  $hasBasename Filename is calculated from location path\n     * @return array\n     */\n    private function getPsr7FileInfo(\n        UploadedFileInterface $file,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        $fileInfo = [];\n\n        $fileInfo['file']     = $file->getStream()->getMetadata('uri');\n        $fileInfo['filename'] = $file->getClientFilename();\n\n        if ($hasBasename) {\n            $fileInfo['basename'] = basename($fileInfo['file']);\n        }\n\n        if ($hasType) {\n            $fileInfo['filetype'] = $file->getClientMediaType();\n        }\n\n        return $fileInfo;\n    }\n\n    /**\n     * Generate file information array with base method\n     *\n     * @param string $file        File path\n     * @param bool   $hasType     Return with filetype\n     * @param bool   $hasBasename Filename is calculated from location path\n     * @return array\n     */\n    private function getFileBasedFileInfo(\n        $file,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        $fileInfo = [];\n\n        $fileInfo['file']     = $file;\n        $fileInfo['filename'] = basename($fileInfo['file']);\n\n        if ($hasBasename) {\n            $fileInfo['basename'] = basename($fileInfo['file']);\n        }\n\n        if ($hasType) {\n            $fileInfo['filetype'] = null;\n        }\n\n        return $fileInfo;\n    }\n}\n"
  },
  {
    "path": "src/File/FilesSize.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\Stdlib\\ErrorHandler;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for the size of all files which will be validated in sum\n *\n */\nclass FilesSize extends Size\n{\n    /**\n     * @const string Error constants\n     */\n    const TOO_BIG      = 'fileFilesSizeTooBig';\n    const TOO_SMALL    = 'fileFilesSizeTooSmall';\n    const NOT_READABLE = 'fileFilesSizeNotReadable';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::TOO_BIG      => \"All files in sum should have a maximum size of '%max%' but '%size%' were detected\",\n        self::TOO_SMALL    => \"All files in sum should have a minimum size of '%min%' but '%size%' were detected\",\n        self::NOT_READABLE => \"One or more files can not be read\",\n    ];\n\n    /**\n     * Internal file array\n     *\n     * @var array\n     */\n    protected $files;\n\n    /**\n     * Sets validator options\n     *\n     * Min limits the used disk space for all files, when used with max=null it is the maximum file size\n     * It also accepts an array with the keys 'min' and 'max'\n     *\n     * @param  int|array|Traversable $options Options for this validator\n     * @throws \\Zend\\Validator\\Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        $this->files = [];\n        $this->setSize(0);\n\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        } elseif (is_scalar($options)) {\n            $options = ['max' => $options];\n        } elseif (! is_array($options)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        if (1 < func_num_args()) {\n            $argv = func_get_args();\n            array_shift($argv);\n            $options['max'] = array_shift($argv);\n            if (! empty($argv)) {\n                $options['useByteString'] = array_shift($argv);\n            }\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns true if and only if the disk usage of all files is at least min and\n     * not bigger than max (when max is not null).\n     *\n     * @param  string|array $value Real file to check for size\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        if (is_string($value)) {\n            $value = [$value];\n        } elseif (is_array($value) && isset($value['tmp_name'])) {\n            $value = [$value];\n        }\n\n        $min  = $this->getMin(true);\n        $max  = $this->getMax(true);\n        $size = $this->getSize();\n        foreach ($value as $files) {\n            if (is_array($files)) {\n                if (! isset($files['tmp_name']) || ! isset($files['name'])) {\n                    throw new Exception\\InvalidArgumentException(\n                        'Value array must be in $_FILES format'\n                    );\n                }\n                $file  = $files;\n                $files = $files['tmp_name'];\n            }\n\n            // Is file readable ?\n            if (empty($files) || false === is_readable($files)) {\n                $this->throwError($file, self::NOT_READABLE);\n                continue;\n            }\n\n            if (! isset($this->files[$files])) {\n                $this->files[$files] = $files;\n            } else {\n                // file already counted... do not count twice\n                continue;\n            }\n\n            // limited to 2GB files\n            ErrorHandler::start();\n            $size += filesize($files);\n            ErrorHandler::stop();\n            $this->size = $size;\n            if (($max !== null) && ($max < $size)) {\n                if ($this->getByteString()) {\n                    $this->options['max'] = $this->toByteString($max);\n                    $this->size           = $this->toByteString($size);\n                    $this->throwError($file, self::TOO_BIG);\n                    $this->options['max'] = $max;\n                    $this->size           = $size;\n                } else {\n                    $this->throwError($file, self::TOO_BIG);\n                }\n            }\n        }\n\n        // Check that aggregate files are >= minimum size\n        if (($min !== null) && ($size < $min)) {\n            if ($this->getByteString()) {\n                $this->options['min'] = $this->toByteString($min);\n                $this->size           = $this->toByteString($size);\n                $this->throwError($file, self::TOO_SMALL);\n                $this->options['min'] = $min;\n                $this->size           = $size;\n            } else {\n                $this->throwError($file, self::TOO_SMALL);\n            }\n        }\n\n        if ($this->getMessages()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Throws an error of the given type\n     *\n     * @param  string $file\n     * @param  string $errorType\n     * @return false\n     */\n    protected function throwError($file, $errorType)\n    {\n        if ($file !== null) {\n            if (is_array($file)) {\n                if (array_key_exists('name', $file)) {\n                    $this->value = $file['name'];\n                }\n            } elseif (is_string($file)) {\n                $this->value = $file;\n            }\n        }\n\n        $this->error($errorType);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/Hash.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the hash of given files\n */\nclass Hash extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_NOT_MATCH = 'fileHashDoesNotMatch';\n    const NOT_DETECTED   = 'fileHashHashNotDetected';\n    const NOT_FOUND      = 'fileHashNotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_NOT_MATCH => \"File does not match the given hashes\",\n        self::NOT_DETECTED   => \"A hash could not be evaluated for the given file\",\n        self::NOT_FOUND      => \"File is not readable or does not exist\"\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var string\n     */\n    protected $options = [\n        'algorithm' => 'crc32',\n        'hash'      => null,\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param string|array $options\n     */\n    public function __construct($options = null)\n    {\n        if (is_scalar($options) ||\n            (is_array($options) && ! array_key_exists('hash', $options))) {\n            $options = ['hash' => $options];\n        }\n\n        if (1 < func_num_args()) {\n            $options['algorithm'] = func_get_arg(1);\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set hash values as array, the hash as key and the algorithm the value\n     *\n     * @return array\n     */\n    public function getHash()\n    {\n        return $this->options['hash'];\n    }\n\n    /**\n     * Sets the hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return self Provides a fluent interface\n     */\n    public function setHash($options)\n    {\n        $this->options['hash'] = null;\n        $this->addHash($options);\n\n        return $this;\n    }\n\n    /**\n     * Adds the hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @throws Exception\\InvalidArgumentException\n     * @return self Provides a fluent interface\n     */\n    public function addHash($options)\n    {\n        if (is_string($options)) {\n            $options = [$options];\n        } elseif (! is_array($options)) {\n            throw new Exception\\InvalidArgumentException(\"False parameter given\");\n        }\n\n        $known = hash_algos();\n        if (! isset($options['algorithm'])) {\n            $algorithm = $this->options['algorithm'];\n        } else {\n            $algorithm = $options['algorithm'];\n            unset($options['algorithm']);\n        }\n\n        if (! in_array($algorithm, $known)) {\n            throw new Exception\\InvalidArgumentException(\"Unknown algorithm '{$algorithm}'\");\n        }\n\n        foreach ($options as $value) {\n            if (! is_string($value)) {\n                throw new Exception\\InvalidArgumentException(sprintf(\n                    'Hash must be a string, %s received',\n                    is_object($value) ? get_class($value) : gettype($value)\n                ));\n            }\n            $this->options['hash'][$value] = $algorithm;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the given file confirms the set hash\n     *\n     * @param  string|array $value File to check for hash\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $algos = array_unique(array_values($this->getHash()));\n        foreach ($algos as $algorithm) {\n            $filehash = hash_file($algorithm, $fileInfo['file']);\n\n            if ($filehash === false) {\n                $this->error(self::NOT_DETECTED);\n                return false;\n            }\n\n            if (isset($this->getHash()[$filehash]) && $this->getHash()[$filehash] === $algorithm) {\n                return true;\n            }\n        }\n\n        $this->error(self::DOES_NOT_MATCH);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/ImageSize.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Stdlib\\ErrorHandler;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the image size of an image file\n */\nclass ImageSize extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const WIDTH_TOO_BIG    = 'fileImageSizeWidthTooBig';\n    const WIDTH_TOO_SMALL  = 'fileImageSizeWidthTooSmall';\n    const HEIGHT_TOO_BIG   = 'fileImageSizeHeightTooBig';\n    const HEIGHT_TOO_SMALL = 'fileImageSizeHeightTooSmall';\n    const NOT_DETECTED     = 'fileImageSizeNotDetected';\n    const NOT_READABLE     = 'fileImageSizeNotReadable';\n\n    /**\n     * @var array Error message template\n     */\n    protected $messageTemplates = [\n        self::WIDTH_TOO_BIG    => \"Maximum allowed width for image should be '%maxwidth%' but '%width%' detected\",\n        self::WIDTH_TOO_SMALL  => \"Minimum expected width for image should be '%minwidth%' but '%width%' detected\",\n        self::HEIGHT_TOO_BIG   => \"Maximum allowed height for image should be '%maxheight%' but '%height%' detected\",\n        self::HEIGHT_TOO_SMALL => \"Minimum expected height for image should be '%minheight%' but '%height%' detected\",\n        self::NOT_DETECTED     => \"The size of image could not be detected\",\n        self::NOT_READABLE     => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'minwidth'  => ['options' => 'minWidth'],\n        'maxwidth'  => ['options' => 'maxWidth'],\n        'minheight' => ['options' => 'minHeight'],\n        'maxheight' => ['options' => 'maxHeight'],\n        'width'     => 'width',\n        'height'    => 'height'\n    ];\n\n    /**\n     * Detected width\n     *\n     * @var int\n     */\n    protected $width;\n\n    /**\n     * Detected height\n     *\n     * @var int\n     */\n    protected $height;\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'minWidth'  => null,  // Minimum image width\n        'maxWidth'  => null,  // Maximum image width\n        'minHeight' => null,  // Minimum image height\n        'maxHeight' => null,  // Maximum image height\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * Accepts the following option keys:\n     * - minheight\n     * - minwidth\n     * - maxheight\n     * - maxwidth\n     *\n     * @param  array|\\Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        if (1 < func_num_args()) {\n            if (! is_array($options)) {\n                $options = ['minWidth' => $options];\n            }\n\n            $argv = func_get_args();\n            array_shift($argv);\n            $options['minHeight'] = array_shift($argv);\n            if (! empty($argv)) {\n                $options['maxWidth'] = array_shift($argv);\n                if (! empty($argv)) {\n                    $options['maxHeight'] = array_shift($argv);\n                }\n            }\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the minimum allowed width\n     *\n     * @return int\n     */\n    public function getMinWidth()\n    {\n        return $this->options['minWidth'];\n    }\n\n    /**\n     * Sets the minimum allowed width\n     *\n     * @param  int $minWidth\n     * @throws Exception\\InvalidArgumentException When minwidth is greater than maxwidth\n     * @return self Provides a fluid interface\n     */\n    public function setMinWidth($minWidth)\n    {\n        if (($this->getMaxWidth() !== null) && ($minWidth > $this->getMaxWidth())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum image width must be less than or equal to the \"\n                . \" maximum image width, but {$minWidth} > {$this->getMaxWidth()}\"\n            );\n        }\n\n        $this->options['minWidth']  = (int) $minWidth;\n        return $this;\n    }\n\n    /**\n     * Returns the maximum allowed width\n     *\n     * @return int\n     */\n    public function getMaxWidth()\n    {\n        return $this->options['maxWidth'];\n    }\n\n    /**\n     * Sets the maximum allowed width\n     *\n     * @param  int $maxWidth\n     * @throws Exception\\InvalidArgumentException When maxwidth is less than minwidth\n     * @return self Provides a fluid interface\n     */\n    public function setMaxWidth($maxWidth)\n    {\n        if (($this->getMinWidth() !== null) && ($maxWidth < $this->getMinWidth())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum image width must be greater than or equal to the \"\n                . \"minimum image width, but {$maxWidth} < {$this->getMinWidth()}\"\n            );\n        }\n\n        $this->options['maxWidth']  = (int) $maxWidth;\n        return $this;\n    }\n\n    /**\n     * Returns the minimum allowed height\n     *\n     * @return int\n     */\n    public function getMinHeight()\n    {\n        return $this->options['minHeight'];\n    }\n\n    /**\n     * Sets the minimum allowed height\n     *\n     * @param  int $minHeight\n     * @throws Exception\\InvalidArgumentException When minheight is greater than maxheight\n     * @return self Provides a fluid interface\n     */\n    public function setMinHeight($minHeight)\n    {\n        if (($this->getMaxHeight() !== null) && ($minHeight > $this->getMaxHeight())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum image height must be less than or equal to the \"\n                . \" maximum image height, but {$minHeight} > {$this->getMaxHeight()}\"\n            );\n        }\n\n        $this->options['minHeight']  = (int) $minHeight;\n        return $this;\n    }\n\n    /**\n     * Returns the maximum allowed height\n     *\n     * @return int\n     */\n    public function getMaxHeight()\n    {\n        return $this->options['maxHeight'];\n    }\n\n    /**\n     * Sets the maximum allowed height\n     *\n     * @param  int $maxHeight\n     * @throws Exception\\InvalidArgumentException When maxheight is less than minheight\n     * @return self Provides a fluid interface\n     */\n    public function setMaxHeight($maxHeight)\n    {\n        if (($this->getMinHeight() !== null) && ($maxHeight < $this->getMinHeight())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum image height must be greater than or equal to the \"\n                . \"minimum image height, but {$maxHeight} < {$this->getMinHeight()}\"\n            );\n        }\n\n        $this->options['maxHeight']  = (int) $maxHeight;\n        return $this;\n    }\n\n    /**\n     * Returns the set minimum image sizes\n     *\n     * @return array\n     */\n    public function getImageMin()\n    {\n        return ['minWidth' => $this->getMinWidth(), 'minHeight' => $this->getMinHeight()];\n    }\n\n    /**\n     * Returns the set maximum image sizes\n     *\n     * @return array\n     */\n    public function getImageMax()\n    {\n        return ['maxWidth' => $this->getMaxWidth(), 'maxHeight' => $this->getMaxHeight()];\n    }\n\n    /**\n     * Returns the set image width sizes\n     *\n     * @return array\n     */\n    public function getImageWidth()\n    {\n        return ['minWidth' => $this->getMinWidth(), 'maxWidth' => $this->getMaxWidth()];\n    }\n\n    /**\n     * Returns the set image height sizes\n     *\n     * @return array\n     */\n    public function getImageHeight()\n    {\n        return ['minHeight' => $this->getMinHeight(), 'maxHeight' => $this->getMaxHeight()];\n    }\n\n    /**\n     * Sets the minimum image size\n     *\n     * @param  array $options                 The minimum image dimensions\n     * @return self Provides a fluent interface\n     */\n    public function setImageMin($options)\n    {\n        $this->setOptions($options);\n        return $this;\n    }\n\n    /**\n     * Sets the maximum image size\n     *\n     * @param  array|\\Traversable $options The maximum image dimensions\n     * @return self Provides a fluent interface\n     */\n    public function setImageMax($options)\n    {\n        $this->setOptions($options);\n        return $this;\n    }\n\n    /**\n     * Sets the minimum and maximum image width\n     *\n     * @param  array $options               The image width dimensions\n     * @return self Provides a fluent interface\n     */\n    public function setImageWidth($options)\n    {\n        $this->setImageMin($options);\n        $this->setImageMax($options);\n\n        return $this;\n    }\n\n    /**\n     * Sets the minimum and maximum image height\n     *\n     * @param  array $options               The image height dimensions\n     * @return self Provides a fluent interface\n     */\n    public function setImageHeight($options)\n    {\n        $this->setImageMin($options);\n        $this->setImageMax($options);\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the image size of $value is at least min and\n     * not bigger than max\n     *\n     * @param  string|array $value Real file to check for image size\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_READABLE);\n            return false;\n        }\n\n        ErrorHandler::start();\n        $size = getimagesize($fileInfo['file']);\n        ErrorHandler::stop();\n\n        if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) {\n            $this->error(self::NOT_DETECTED);\n            return false;\n        }\n\n        $this->width  = $size[0];\n        $this->height = $size[1];\n        if ($this->width < $this->getMinWidth()) {\n            $this->error(self::WIDTH_TOO_SMALL);\n        }\n\n        if (($this->getMaxWidth() !== null) && ($this->getMaxWidth() < $this->width)) {\n            $this->error(self::WIDTH_TOO_BIG);\n        }\n\n        if ($this->height < $this->getMinHeight()) {\n            $this->error(self::HEIGHT_TOO_SMALL);\n        }\n\n        if (($this->getMaxHeight() !== null) && ($this->getMaxHeight() < $this->height)) {\n            $this->error(self::HEIGHT_TOO_BIG);\n        }\n\n        if ($this->getMessages()) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/File/IsCompressed.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\n/**\n * Validator which checks if the file already exists in the directory\n */\nclass IsCompressed extends MimeType\n{\n    /**\n     * @const string Error constants\n     */\n    const FALSE_TYPE   = 'fileIsCompressedFalseType';\n    const NOT_DETECTED = 'fileIsCompressedNotDetected';\n    const NOT_READABLE = 'fileIsCompressedNotReadable';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_TYPE   => \"File is not compressed, '%type%' detected\",\n        self::NOT_DETECTED => \"The mimetype could not be detected from the file\",\n        self::NOT_READABLE => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param string|array|Traversable $options\n     */\n    public function __construct($options = [])\n    {\n        // http://hul.harvard.edu/ois/systems/wax/wax-public-help/mimetypes.htm\n        $default = [\n            'application/arj',\n            'application/gnutar',\n            'application/lha',\n            'application/lzx',\n            'application/vnd.ms-cab-compressed',\n            'application/x-ace-compressed',\n            'application/x-arc',\n            'application/x-archive',\n            'application/x-arj',\n            'application/x-bzip',\n            'application/x-bzip2',\n            'application/x-cab-compressed',\n            'application/x-compress',\n            'application/x-compressed',\n            'application/x-cpio',\n            'application/x-debian-package',\n            'application/x-eet',\n            'application/x-gzip',\n            'application/x-java-pack200',\n            'application/x-lha',\n            'application/x-lharc',\n            'application/x-lzh',\n            'application/x-lzma',\n            'application/x-lzx',\n            'application/x-rar',\n            'application/x-sit',\n            'application/x-stuffit',\n            'application/x-tar',\n            'application/zip',\n            'application/x-zip',\n            'application/zoo',\n            'multipart/x-gzip',\n        ];\n\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if ($options === null) {\n            $options = [];\n        }\n\n        parent::__construct($options);\n\n        if (! $this->getMimeType()) {\n            $this->setMimeType($default);\n        }\n    }\n}\n"
  },
  {
    "path": "src/File/IsImage.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\n/**\n * Validator which checks if the file is an image\n */\nclass IsImage extends MimeType\n{\n    /**\n     * @const string Error constants\n     */\n    const FALSE_TYPE   = 'fileIsImageFalseType';\n    const NOT_DETECTED = 'fileIsImageNotDetected';\n    const NOT_READABLE = 'fileIsImageNotReadable';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_TYPE   => \"File is no image, '%type%' detected\",\n        self::NOT_DETECTED => \"The mimetype could not be detected from the file\",\n        self::NOT_READABLE => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param array|Traversable|string $options\n     */\n    public function __construct($options = [])\n    {\n        // http://www.iana.org/assignments/media-types/media-types.xhtml#image\n        $default = [\n            'application/cdf',\n            'application/dicom',\n            'application/fractals',\n            'application/postscript',\n            'application/vnd.hp-hpgl',\n            'application/vnd.oasis.opendocument.graphics',\n            'application/x-cdf',\n            'application/x-cmu-raster',\n            'application/x-ima',\n            'application/x-inventor',\n            'application/x-koan',\n            'application/x-portable-anymap',\n            'application/x-world-x-3dmf',\n            'image/bmp',\n            'image/c',\n            'image/cgm',\n            'image/fif',\n            'image/gif',\n            'image/jpeg',\n            'image/jpm',\n            'image/jpx',\n            'image/jp2',\n            'image/naplps',\n            'image/pjpeg',\n            'image/png',\n            'image/svg',\n            'image/svg+xml',\n            'image/tiff',\n            'image/vnd.adobe.photoshop',\n            'image/vnd.djvu',\n            'image/vnd.fpx',\n            'image/vnd.net-fpx',\n            'image/webp',\n            'image/x-cmu-raster',\n            'image/x-cmx',\n            'image/x-coreldraw',\n            'image/x-cpi',\n            'image/x-emf',\n            'image/x-ico',\n            'image/x-icon',\n            'image/x-jg',\n            'image/x-ms-bmp',\n            'image/x-niff',\n            'image/x-pict',\n            'image/x-pcx',\n            'image/x-png',\n            'image/x-portable-anymap',\n            'image/x-portable-bitmap',\n            'image/x-portable-greymap',\n            'image/x-portable-pixmap',\n            'image/x-quicktime',\n            'image/x-rgb',\n            'image/x-tiff',\n            'image/x-unknown',\n            'image/x-windows-bmp',\n            'image/x-xpmi',\n        ];\n\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if ($options === null) {\n            $options = [];\n        }\n\n        parent::__construct($options);\n\n        if (! $this->getMimeType()) {\n            $this->setMimeType($default);\n        }\n    }\n}\n"
  },
  {
    "path": "src/File/Md5.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the md5 hash of given files\n */\nclass Md5 extends Hash\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_NOT_MATCH = 'fileMd5DoesNotMatch';\n    const NOT_DETECTED   = 'fileMd5NotDetected';\n    const NOT_FOUND      = 'fileMd5NotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_NOT_MATCH => \"File does not match the given md5 hashes\",\n        self::NOT_DETECTED   => \"An md5 hash could not be evaluated for the given file\",\n        self::NOT_FOUND      => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var string\n     */\n    protected $options = [\n        'algorithm' => 'md5',\n        'hash'      => null,\n    ];\n\n    /**\n     * Returns all set md5 hashes\n     *\n     * @return array\n     */\n    public function getMd5()\n    {\n        return $this->getHash();\n    }\n\n    /**\n     * Sets the md5 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return Hash Provides a fluent interface\n     */\n    public function setMd5($options)\n    {\n        $this->setHash($options);\n        return $this;\n    }\n\n    /**\n     * Adds the md5 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return Hash Provides a fluent interface\n     */\n    public function addMd5($options)\n    {\n        $this->addHash($options);\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the given file confirms the set hash\n     *\n     * @param  string|array $value Filename to check for hash\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $hashes   = array_unique(array_keys($this->getHash()));\n        $filehash = hash_file('md5', $fileInfo['file']);\n        if ($filehash === false) {\n            $this->error(self::NOT_DETECTED);\n            return false;\n        }\n\n        foreach ($hashes as $hash) {\n            if ($filehash === $hash) {\n                return true;\n            }\n        }\n\n        $this->error(self::DOES_NOT_MATCH);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/MimeType.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\Stdlib\\ErrorHandler;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the mime type of a file\n */\nclass MimeType extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**#@+\n     * @const Error type constants\n     */\n    const FALSE_TYPE   = 'fileMimeTypeFalse';\n    const NOT_DETECTED = 'fileMimeTypeNotDetected';\n    const NOT_READABLE = 'fileMimeTypeNotReadable';\n    /**#@-*/\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::FALSE_TYPE   => \"File has an incorrect mimetype of '%type%'\",\n        self::NOT_DETECTED => \"The mimetype could not be detected from the file\",\n        self::NOT_READABLE => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'type' => 'type'\n    ];\n\n    /**\n     * @var string\n     */\n    protected $type;\n\n    /**\n     * Finfo object to use\n     *\n     * @var resource\n     */\n    protected $finfo;\n\n    /**\n     * If no environment variable 'MAGIC' is set, try and autodiscover it based on common locations\n     * @var array\n     */\n    protected $magicFiles = [\n        '/usr/share/misc/magic',\n        '/usr/share/misc/magic.mime',\n        '/usr/share/misc/magic.mgc',\n        '/usr/share/mime/magic',\n        '/usr/share/mime/magic.mime',\n        '/usr/share/mime/magic.mgc',\n        '/usr/share/file/magic',\n        '/usr/share/file/magic.mime',\n        '/usr/share/file/magic.mgc',\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'enableHeaderCheck' => false,  // Allow header check\n        'disableMagicFile'  => false,  // Disable usage of magicfile\n        'magicFile'         => null,   // Magicfile to use\n        'mimeType'          => null,   // Mimetype to allow\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * Mimetype to accept\n     * - NULL means default PHP usage by using the environment variable 'magic'\n     * - FALSE means disabling searching for mimetype, should be used for PHP 5.3\n     * - A string is the mimetype file to use\n     *\n     * @param  string|array|Traversable $options\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        } elseif (is_string($options)) {\n            $this->setMimeType($options);\n            $options = [];\n        } elseif (is_array($options)) {\n            if (isset($options['magicFile'])) {\n                $this->setMagicFile($options['magicFile']);\n                unset($options['magicFile']);\n            }\n\n            if (isset($options['enableHeaderCheck'])) {\n                $this->enableHeaderCheck($options['enableHeaderCheck']);\n                unset($options['enableHeaderCheck']);\n            }\n\n            if (array_key_exists('mimeType', $options)) {\n                $this->setMimeType($options['mimeType']);\n                unset($options['mimeType']);\n            }\n\n            // Handle cases where mimetypes are interspersed with options, or\n            // options are simply an array of mime types\n            foreach (array_keys($options) as $key) {\n                if (! is_int($key)) {\n                    continue;\n                }\n                $this->addMimeType($options[$key]);\n                unset($options[$key]);\n            }\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the actual set magicfile\n     *\n     * @return string\n     */\n    public function getMagicFile()\n    {\n        if (null === $this->options['magicFile']) {\n            $magic = getenv('magic');\n            if (! empty($magic)) {\n                $this->setMagicFile($magic);\n                if ($this->options['magicFile'] === null) {\n                    $this->options['magicFile'] = false;\n                }\n                return $this->options['magicFile'];\n            }\n\n            foreach ($this->magicFiles as $file) {\n                try {\n                    $this->setMagicFile($file);\n                } catch (Exception\\ExceptionInterface $e) {\n                    // suppressing errors which are thrown due to open_basedir restrictions\n                    continue;\n                }\n\n                if ($this->options['magicFile'] !== null) {\n                    return $this->options['magicFile'];\n                }\n            }\n\n            if ($this->options['magicFile'] === null) {\n                $this->options['magicFile'] = false;\n            }\n        }\n\n        return $this->options['magicFile'];\n    }\n\n    /**\n     * Sets the magicfile to use\n     * if null, the MAGIC constant from php is used\n     * if the MAGIC file is erroneous, no file will be set\n     * if false, the default MAGIC file from PHP will be used\n     *\n     * @param  string $file\n     * @throws Exception\\RuntimeException When finfo can not read the magicfile\n     * @throws Exception\\InvalidArgumentException\n     * @throws Exception\\InvalidMagicMimeFileException\n     * @return self Provides fluid interface\n     */\n    public function setMagicFile($file)\n    {\n        if ($file === false) {\n            $this->options['magicFile'] = false;\n        } elseif (empty($file)) {\n            $this->options['magicFile'] = null;\n        } elseif (! (class_exists('finfo', false))) {\n            $this->options['magicFile'] = null;\n            throw new Exception\\RuntimeException('Magicfile can not be set; there is no finfo extension installed');\n        } elseif (! is_file($file) || ! is_readable($file)) {\n            throw new Exception\\InvalidArgumentException(sprintf(\n                'The given magicfile (\"%s\") could not be read',\n                $file\n            ));\n        } else {\n            ErrorHandler::start(E_NOTICE | E_WARNING);\n            $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $file);\n            $error       = ErrorHandler::stop();\n            if (empty($this->finfo)) {\n                $this->finfo = null;\n                throw new Exception\\InvalidMagicMimeFileException(sprintf(\n                    'The given magicfile (\"%s\") could not be used by ext/finfo',\n                    $file\n                ), 0, $error);\n            }\n            $this->options['magicFile'] = $file;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Disables usage of MagicFile\n     *\n     * @param $disable boolean False disables usage of magic file\n     * @return self Provides fluid interface\n     */\n    public function disableMagicFile($disable)\n    {\n        $this->options['disableMagicFile'] = (bool) $disable;\n        return $this;\n    }\n\n    /**\n     * Is usage of MagicFile disabled?\n     *\n     * @return bool\n     */\n    public function isMagicFileDisabled()\n    {\n        return $this->options['disableMagicFile'];\n    }\n\n    /**\n     * Returns the Header Check option\n     *\n     * @return bool\n     */\n    public function getHeaderCheck()\n    {\n        return $this->options['enableHeaderCheck'];\n    }\n\n    /**\n     * Defines if the http header should be used\n     * Note that this is unsafe and therefor the default value is false\n     *\n     * @param  bool $headerCheck\n     * @return self Provides fluid interface\n     */\n    public function enableHeaderCheck($headerCheck = true)\n    {\n        $this->options['enableHeaderCheck'] = (bool) $headerCheck;\n        return $this;\n    }\n\n    /**\n     * Returns the set mimetypes\n     *\n     * @param  bool $asArray Returns the values as array, when false a concatenated string is returned\n     * @return string|array\n     */\n    public function getMimeType($asArray = false)\n    {\n        $asArray  = (bool) $asArray;\n        $mimetype = (string) $this->options['mimeType'];\n        if ($asArray) {\n            $mimetype = explode(',', $mimetype);\n        }\n\n        return $mimetype;\n    }\n\n    /**\n     * Sets the mimetypes\n     *\n     * @param  string|array $mimetype The mimetypes to validate\n     * @return self Provides a fluent interface\n     */\n    public function setMimeType($mimetype)\n    {\n        $this->options['mimeType'] = null;\n        $this->addMimeType($mimetype);\n        return $this;\n    }\n\n    /**\n     * Adds the mimetypes\n     *\n     * @param  string|array $mimetype The mimetypes to add for validation\n     * @throws Exception\\InvalidArgumentException\n     * @return self Provides a fluent interface\n     */\n    public function addMimeType($mimetype)\n    {\n        $mimetypes = $this->getMimeType(true);\n\n        if (is_string($mimetype)) {\n            $mimetype = explode(',', $mimetype);\n        } elseif (! is_array($mimetype)) {\n            throw new Exception\\InvalidArgumentException(\"Invalid options to validator provided\");\n        }\n\n        if (isset($mimetype['magicFile'])) {\n            unset($mimetype['magicFile']);\n        }\n\n        foreach ($mimetype as $content) {\n            if (empty($content) || ! is_string($content)) {\n                continue;\n            }\n            $mimetypes[] = trim($content);\n        }\n        $mimetypes = array_unique($mimetypes);\n\n        // Sanity check to ensure no empty values\n        foreach ($mimetypes as $key => $mt) {\n            if (empty($mt)) {\n                unset($mimetypes[$key]);\n            }\n        }\n\n        $this->options['mimeType'] = implode(',', $mimetypes);\n\n        return $this;\n    }\n\n    /**\n     * Defined by Zend\\Validator\\ValidatorInterface\n     *\n     * Returns true if the mimetype of the file matches the given ones. Also parts\n     * of mimetypes can be checked. If you give for example \"image\" all image\n     * mime types will be accepted like \"image/gif\", \"image/jpeg\" and so on.\n     *\n     * @param  string|array $value Real file to check for mimetype\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file, true);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(static::NOT_READABLE);\n            return false;\n        }\n\n        $mimefile = $this->getMagicFile();\n        if (class_exists('finfo', false)) {\n            if (! $this->isMagicFileDisabled() && (! empty($mimefile) && empty($this->finfo))) {\n                ErrorHandler::start(E_NOTICE | E_WARNING);\n                $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile);\n                ErrorHandler::stop();\n            }\n\n            if (empty($this->finfo)) {\n                ErrorHandler::start(E_NOTICE | E_WARNING);\n                $this->finfo = finfo_open(FILEINFO_MIME_TYPE);\n                ErrorHandler::stop();\n            }\n\n            $this->type = null;\n            if (! empty($this->finfo)) {\n                $this->type = finfo_file($this->finfo, $fileInfo['file']);\n                unset($this->finfo);\n            }\n        }\n\n        if (empty($this->type) && $this->getHeaderCheck()) {\n            $this->type = $fileInfo['filetype'];\n        }\n\n        if (empty($this->type)) {\n            $this->error(static::NOT_DETECTED);\n            return false;\n        }\n\n        $mimetype = $this->getMimeType(true);\n        if (in_array($this->type, $mimetype)) {\n            return true;\n        }\n\n        $types = explode('/', $this->type);\n        $types = array_merge($types, explode('-', $this->type));\n        $types = array_merge($types, explode(';', $this->type));\n        foreach ($mimetype as $mime) {\n            if (in_array($mime, $types)) {\n                return true;\n            }\n        }\n\n        $this->error(static::FALSE_TYPE);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/NotExists.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator which checks if the destination file does not exist\n */\nclass NotExists extends Exists\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_EXIST = 'fileNotExistsDoesExist';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_EXIST => \"File exists\",\n    ];\n\n    /**\n     * Returns true if and only if the file does not exist in the set destinations\n     *\n     * @param  string|array $value Real file to check for existence\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file, false, true);\n\n        $this->setValue($fileInfo['filename']);\n\n        $check = false;\n        $directories = $this->getDirectory(true);\n        if (! isset($directories)) {\n            $check = true;\n            if (file_exists($fileInfo['file'])) {\n                $this->error(self::DOES_EXIST);\n                return false;\n            }\n        } else {\n            foreach ($directories as $directory) {\n                if (! isset($directory) || '' === $directory) {\n                    continue;\n                }\n\n                $check = true;\n                if (file_exists($directory . DIRECTORY_SEPARATOR . $fileInfo['basename'])) {\n                    $this->error(self::DOES_EXIST);\n                    return false;\n                }\n            }\n        }\n\n        if (! $check) {\n            $this->error(self::DOES_EXIST);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/File/Sha1.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the sha1 hash of given files\n */\nclass Sha1 extends Hash\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const DOES_NOT_MATCH = 'fileSha1DoesNotMatch';\n    const NOT_DETECTED   = 'fileSha1NotDetected';\n    const NOT_FOUND      = 'fileSha1NotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::DOES_NOT_MATCH => \"File does not match the given sha1 hashes\",\n        self::NOT_DETECTED   => \"A sha1 hash could not be evaluated for the given file\",\n        self::NOT_FOUND      => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var string\n     */\n    protected $options = [\n        'algorithm' => 'sha1',\n        'hash'      => null,\n    ];\n\n    /**\n     * Returns all set sha1 hashes\n     *\n     * @return array\n     */\n    public function getSha1()\n    {\n        return $this->getHash();\n    }\n\n    /**\n     * Sets the sha1 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return Hash Provides a fluent interface\n     */\n    public function setSha1($options)\n    {\n        $this->setHash($options);\n        return $this;\n    }\n\n    /**\n     * Adds the sha1 hash for one or multiple files\n     *\n     * @param  string|array $options\n     * @return Hash Provides a fluent interface\n     */\n    public function addSha1($options)\n    {\n        $this->addHash($options);\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the given file confirms the set hash\n     *\n     * @param  string $value|array Filename to check for hash\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $hashes   = array_unique(array_keys($this->getHash()));\n        $filehash = hash_file('sha1', $fileInfo['file']);\n        if ($filehash === false) {\n            $this->error(self::NOT_DETECTED);\n            return false;\n        }\n\n        foreach ($hashes as $hash) {\n            if ($filehash === $hash) {\n                return true;\n            }\n        }\n\n        $this->error(self::DOES_NOT_MATCH);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/Size.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Stdlib\\ErrorHandler;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for the maximum size of a file up to a max of 2GB\n */\nclass Size extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const TOO_BIG   = 'fileSizeTooBig';\n    const TOO_SMALL = 'fileSizeTooSmall';\n    const NOT_FOUND = 'fileSizeNotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::TOO_BIG   => \"Maximum allowed size for file is '%max%' but '%size%' detected\",\n        self::TOO_SMALL => \"Minimum expected size for file is '%min%' but '%size%' detected\",\n        self::NOT_FOUND => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'min'  => ['options' => 'min'],\n        'max'  => ['options' => 'max'],\n        'size' => 'size',\n    ];\n\n    /**\n     * Detected size\n     *\n     * @var int\n     */\n    protected $size;\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'min'           => null, // Minimum file size, if null there is no minimum\n        'max'           => null, // Maximum file size, if null there is no maximum\n        'useByteString' => true, // Use byte string?\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * If $options is an integer, it will be used as maximum file size\n     * As Array is accepts the following keys:\n     * 'min': Minimum file size\n     * 'max': Maximum file size\n     * 'useByteString': Use bytestring or real size for messages\n     *\n     * @param  int|array|\\Traversable $options Options for the adapter\n     */\n    public function __construct($options = null)\n    {\n        if (is_string($options) || is_numeric($options)) {\n            $options = ['max' => $options];\n        }\n\n        if (1 < func_num_args()) {\n            $argv = func_get_args();\n            array_shift($argv);\n            $options['max'] = array_shift($argv);\n            if (! empty($argv)) {\n                $options['useByteString'] = array_shift($argv);\n            }\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Should messages return bytes as integer or as string in SI notation\n     *\n     * @param  bool $byteString Use bytestring ?\n     * @return int\n     */\n    public function useByteString($byteString = true)\n    {\n        $this->options['useByteString'] = (bool) $byteString;\n        return $this;\n    }\n\n    /**\n     * Will bytestring be used?\n     *\n     * @return bool\n     */\n    public function getByteString()\n    {\n        return $this->options['useByteString'];\n    }\n\n    /**\n     * Returns the minimum file size\n     *\n     * @param  bool $raw Whether or not to force return of the raw value (defaults off)\n     * @return int|string\n     */\n    public function getMin($raw = false)\n    {\n        $min = $this->options['min'];\n        if (! $raw && $this->getByteString()) {\n            $min = $this->toByteString($min);\n        }\n\n        return $min;\n    }\n\n    /**\n     * Sets the minimum file size\n     *\n     * File size can be an integer or a byte string\n     * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'\n     * For example: 2000, 2MB, 0.2GB\n     *\n     * @param  int|string $min The minimum file size\n     * @throws Exception\\InvalidArgumentException When min is greater than max\n     * @return self Provides a fluent interface\n     */\n    public function setMin($min)\n    {\n        if (! is_string($min) && ! is_numeric($min)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $min = (int) $this->fromByteString($min);\n        $max = $this->getMax(true);\n        if (($max !== null) && ($min > $max)) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum must be less than or equal to the maximum file size, but $min > $max\"\n            );\n        }\n\n        $this->options['min'] = $min;\n        return $this;\n    }\n\n    /**\n     * Returns the maximum file size\n     *\n     * @param  bool $raw Whether or not to force return of the raw value (defaults off)\n     * @return int|string\n     */\n    public function getMax($raw = false)\n    {\n        $max = $this->options['max'];\n        if (! $raw && $this->getByteString()) {\n            $max = $this->toByteString($max);\n        }\n\n        return $max;\n    }\n\n    /**\n     * Sets the maximum file size\n     *\n     * File size can be an integer or a byte string\n     * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'\n     * For example: 2000, 2MB, 0.2GB\n     *\n     * @param  int|string $max The maximum file size\n     * @throws Exception\\InvalidArgumentException When max is smaller than min\n     * @return self Provides a fluent interface\n     */\n    public function setMax($max)\n    {\n        if (! is_string($max) && ! is_numeric($max)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $max = (int) $this->fromByteString($max);\n        $min = $this->getMin(true);\n        if (($min !== null) && ($max < $min)) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum must be greater than or equal to the minimum file size, but $max < $min\"\n            );\n        }\n\n        $this->options['max'] = $max;\n        return $this;\n    }\n\n    /**\n     * Retrieve current detected file size\n     *\n     * @return int\n     */\n    protected function getSize()\n    {\n        return $this->size;\n    }\n\n    /**\n     * Set current size\n     *\n     * @param  int $size\n     * @return self\n     */\n    protected function setSize($size)\n    {\n        $this->size = $size;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the file size of $value is at least min and\n     * not bigger than max (when max is not null).\n     *\n     * @param  string|array $value File to check for size\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        // limited to 4GB files\n        ErrorHandler::start();\n        $size = sprintf(\"%u\", filesize($fileInfo['file']));\n        ErrorHandler::stop();\n        $this->size = $size;\n\n        // Check to see if it's smaller than min size\n        $min = $this->getMin(true);\n        $max = $this->getMax(true);\n        if (($min !== null) && ($size < $min)) {\n            if ($this->getByteString()) {\n                $this->options['min'] = $this->toByteString($min);\n                $this->size           = $this->toByteString($size);\n                $this->error(self::TOO_SMALL);\n                $this->options['min'] = $min;\n                $this->size           = $size;\n            } else {\n                $this->error(self::TOO_SMALL);\n            }\n        }\n\n        // Check to see if it's larger than max size\n        if (($max !== null) && ($max < $size)) {\n            if ($this->getByteString()) {\n                $this->options['max'] = $this->toByteString($max);\n                $this->size           = $this->toByteString($size);\n                $this->error(self::TOO_BIG);\n                $this->options['max'] = $max;\n                $this->size           = $size;\n            } else {\n                $this->error(self::TOO_BIG);\n            }\n        }\n\n        if ($this->getMessages()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Returns the formatted size\n     *\n     * @param  int $size\n     * @return string\n     */\n    protected function toByteString($size)\n    {\n        $sizes = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n        for ($i = 0; $size >= 1024 && $i < 9; $i++) {\n            $size /= 1024;\n        }\n\n        return round($size, 2) . $sizes[$i];\n    }\n\n    /**\n     * Returns the unformatted size\n     *\n     * @param  string $size\n     * @return int\n     */\n    protected function fromByteString($size)\n    {\n        if (is_numeric($size)) {\n            return (int) $size;\n        }\n\n        $type  = trim(substr($size, -2, 1));\n\n        $value = substr($size, 0, -1);\n        if (! is_numeric($value)) {\n            $value = trim(substr($value, 0, -1));\n        }\n\n        switch (strtoupper($type)) {\n            case 'Y':\n                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024);\n                break;\n            case 'Z':\n                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024);\n                break;\n            case 'E':\n                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024);\n                break;\n            case 'P':\n                $value *= (1024 * 1024 * 1024 * 1024 * 1024);\n                break;\n            case 'T':\n                $value *= (1024 * 1024 * 1024 * 1024);\n                break;\n            case 'G':\n                $value *= (1024 * 1024 * 1024);\n                break;\n            case 'M':\n                $value *= (1024 * 1024);\n                break;\n            case 'K':\n                $value *= 1024;\n                break;\n            default:\n                break;\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "src/File/Upload.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Countable;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for the maximum size of a file up to a max of 2GB\n *\n */\nclass Upload extends AbstractValidator\n{\n    /**\n     * @const string Error constants\n     */\n    const INI_SIZE       = 'fileUploadErrorIniSize';\n    const FORM_SIZE      = 'fileUploadErrorFormSize';\n    const PARTIAL        = 'fileUploadErrorPartial';\n    const NO_FILE        = 'fileUploadErrorNoFile';\n    const NO_TMP_DIR     = 'fileUploadErrorNoTmpDir';\n    const CANT_WRITE     = 'fileUploadErrorCantWrite';\n    const EXTENSION      = 'fileUploadErrorExtension';\n    const ATTACK         = 'fileUploadErrorAttack';\n    const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound';\n    const UNKNOWN        = 'fileUploadErrorUnknown';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::INI_SIZE       => \"File '%value%' exceeds upload_max_filesize directive in php.ini\",\n        self::FORM_SIZE      => \"File '%value%' exceeds the MAX_FILE_SIZE directive that was \"\n            . 'specified in the HTML form',\n        self::PARTIAL        => \"File '%value%' was only partially uploaded\",\n        self::NO_FILE        => \"File '%value%' was not uploaded\",\n        self::NO_TMP_DIR     => \"Missing a temporary folder to store '%value%'\",\n        self::CANT_WRITE     => \"Failed to write file '%value%' to disk\",\n        self::EXTENSION      => \"A PHP extension stopped uploading the file '%value%'\",\n        self::ATTACK         => \"File '%value%' was illegally uploaded. This could be a possible attack\",\n        self::FILE_NOT_FOUND => \"File '%value%' was not found\",\n        self::UNKNOWN        => \"Unknown error while uploading file '%value%'\"\n    ];\n\n    protected $options = [\n        'files' => [],\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * The array $files must be given in syntax of Zend\\File\\Transfer\\Transfer to be checked\n     * If no files are given the $_FILES array will be used automatically.\n     * NOTE: This validator will only work with HTTP POST uploads!\n     *\n     * @param  array|\\Traversable $options Array of files in syntax of \\Zend\\File\\Transfer\\Transfer\n     */\n    public function __construct($options = [])\n    {\n        if (is_array($options) && ! array_key_exists('files', $options)) {\n            $options = ['files' => $options];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the array of set files\n     *\n     * @param  string $file (Optional) The file to return in detail\n     * @return array\n     * @throws Exception\\InvalidArgumentException If file is not found\n     */\n    public function getFiles($file = null)\n    {\n        if ($file !== null) {\n            $return = [];\n            foreach ($this->options['files'] as $name => $content) {\n                if ($name === $file) {\n                    $return[$file] = $this->options['files'][$name];\n                }\n\n                if ($content instanceof UploadedFileInterface) {\n                    if ($content->getClientFilename() === $file) {\n                        $return[$name] = $this->options['files'][$name];\n                    }\n                } elseif ($content['name'] === $file) {\n                    $return[$name] = $this->options['files'][$name];\n                }\n            }\n\n            if (! $return) {\n                throw new Exception\\InvalidArgumentException(\"The file '$file' was not found\");\n            }\n\n            return $return;\n        }\n\n        return $this->options['files'];\n    }\n\n    /**\n     * Sets the files to be checked\n     *\n     * @param  array $files The files to check in syntax of \\Zend\\File\\Transfer\\Transfer\n     * @return Upload Provides a fluent interface\n     */\n    public function setFiles($files = [])\n    {\n        if (null === $files\n            || ((is_array($files) || $files instanceof Countable)\n                && count($files) === 0)\n        ) {\n            $this->options['files'] = $_FILES;\n        } else {\n            $this->options['files'] = $files;\n        }\n\n        if ($this->options['files'] === null) {\n            $this->options['files'] = [];\n        }\n\n        foreach ($this->options['files'] as $file => $content) {\n            if (! $content instanceof UploadedFileInterface\n                && ! isset($content['error'])\n            ) {\n                unset($this->options['files'][$file]);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the file was uploaded without errors\n     *\n     * @param  string $value Single file to check for upload errors, when giving null the $_FILES array\n     *                       from initialization will be used\n     * @param  mixed  $file\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $files = [];\n        $this->setValue($value);\n        if (array_key_exists($value, $this->getFiles())) {\n            $files = array_merge($files, $this->getFiles($value));\n        } else {\n            foreach ($this->getFiles() as $file => $content) {\n                if ($content instanceof UploadedFileInterface) {\n                    if ($content->getClientFilename() === $value) {\n                        $files = array_merge($files, $this->getFiles($file));\n                    }\n\n                    // PSR cannot search by tmp_name because it does not have\n                    // a public interface to get it, only user defined name\n                    // from form field.\n                    continue;\n                }\n\n\n                if (isset($content['name']) && ($content['name'] === $value)) {\n                    $files = array_merge($files, $this->getFiles($file));\n                }\n\n                if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) {\n                    $files = array_merge($files, $this->getFiles($file));\n                }\n            }\n        }\n\n        if (empty($files)) {\n            return $this->throwError($file, self::FILE_NOT_FOUND);\n        }\n\n        foreach ($files as $file => $content) {\n            $this->value = $file;\n            $error = $content instanceof UploadedFileInterface\n                ? $content->getError()\n                : $content['error'];\n\n            switch ($error) {\n                case 0:\n                    if ($content instanceof UploadedFileInterface) {\n                        // done!\n                        break;\n                    }\n\n                    // For standard SAPI environments, check that the upload\n                    // was valid\n                    if (! is_uploaded_file($content['tmp_name'])) {\n                        $this->throwError($content, self::ATTACK);\n                    }\n                    break;\n\n                case 1:\n                    $this->throwError($content, self::INI_SIZE);\n                    break;\n\n                case 2:\n                    $this->throwError($content, self::FORM_SIZE);\n                    break;\n\n                case 3:\n                    $this->throwError($content, self::PARTIAL);\n                    break;\n\n                case 4:\n                    $this->throwError($content, self::NO_FILE);\n                    break;\n\n                case 6:\n                    $this->throwError($content, self::NO_TMP_DIR);\n                    break;\n\n                case 7:\n                    $this->throwError($content, self::CANT_WRITE);\n                    break;\n\n                case 8:\n                    $this->throwError($content, self::EXTENSION);\n                    break;\n\n                default:\n                    $this->throwError($content, self::UNKNOWN);\n                    break;\n            }\n        }\n\n        if ($this->getMessages()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Throws an error of the given type\n     *\n     * @param  array|string|UploadedFileInterface $file\n     * @param  string $errorType\n     * @return false\n     */\n    protected function throwError($file, $errorType)\n    {\n        if ($file !== null) {\n            if (is_array($file)) {\n                if (array_key_exists('name', $file)) {\n                    $this->value = $file['name'];\n                }\n            } elseif (is_string($file)) {\n                $this->value = $file;\n            } elseif ($file instanceof UploadedFileInterface) {\n                $this->value = $file->getClientFilename();\n            }\n        }\n\n        $this->error($errorType);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/File/UploadFile.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\n\n/**\n * Validator for the maximum size of a file up to a max of 2GB\n */\nclass UploadFile extends AbstractValidator\n{\n    /**\n     * @const string Error constants\n     */\n    const INI_SIZE       = 'fileUploadFileErrorIniSize';\n    const FORM_SIZE      = 'fileUploadFileErrorFormSize';\n    const PARTIAL        = 'fileUploadFileErrorPartial';\n    const NO_FILE        = 'fileUploadFileErrorNoFile';\n    const NO_TMP_DIR     = 'fileUploadFileErrorNoTmpDir';\n    const CANT_WRITE     = 'fileUploadFileErrorCantWrite';\n    const EXTENSION      = 'fileUploadFileErrorExtension';\n    const ATTACK         = 'fileUploadFileErrorAttack';\n    const FILE_NOT_FOUND = 'fileUploadFileErrorFileNotFound';\n    const UNKNOWN        = 'fileUploadFileErrorUnknown';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::INI_SIZE       => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',\n        self::FORM_SIZE      => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was '\n            . 'specified in the HTML form',\n        self::PARTIAL        => 'The uploaded file was only partially uploaded',\n        self::NO_FILE        => 'No file was uploaded',\n        self::NO_TMP_DIR     => 'Missing a temporary folder',\n        self::CANT_WRITE     => 'Failed to write file to disk',\n        self::EXTENSION      => 'A PHP extension stopped the file upload',\n        self::ATTACK         => 'File was illegally uploaded. This could be a possible attack',\n        self::FILE_NOT_FOUND => 'File was not found',\n        self::UNKNOWN        => 'Unknown error while uploading file',\n    ];\n\n    /**\n     * Returns true if and only if the file was uploaded without errors\n     *\n     * @param  string|array|UploadedFileInterface $value File to check for upload errors\n     * @return bool\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function isValid($value)\n    {\n        if (is_array($value)) {\n            if (! isset($value['tmp_name']) || ! isset($value['name']) || ! isset($value['error'])) {\n                throw new Exception\\InvalidArgumentException(\n                    'Value array must be in $_FILES format'\n                );\n            }\n\n            return $this->validateUploadedFile(\n                $value['error'],\n                $value['name'],\n                $value['tmp_name']\n            );\n        }\n\n        if ($value instanceof UploadedFileInterface) {\n            return $this->validatePsr7UploadedFile($value);\n        }\n\n        if (is_string($value)) {\n            return $this->validateUploadedFile(0, basename($value), $value);\n        }\n\n        $this->error(self::UNKNOWN);\n        return false;\n    }\n\n    /**\n     * @param int $error UPLOAD_ERR_* constant value\n     * @return bool\n     */\n    private function validateFileFromErrorCode($error)\n    {\n        switch ($error) {\n            case UPLOAD_ERR_OK:\n                return true;\n\n            case UPLOAD_ERR_INI_SIZE:\n                $this->error(self::INI_SIZE);\n                return false;\n\n            case UPLOAD_ERR_FORM_SIZE:\n                $this->error(self::FORM_SIZE);\n                return false;\n\n            case UPLOAD_ERR_PARTIAL:\n                $this->error(self::PARTIAL);\n                return false;\n\n            case UPLOAD_ERR_NO_FILE:\n                $this->error(self::NO_FILE);\n                return false;\n\n            case UPLOAD_ERR_NO_TMP_DIR:\n                $this->error(self::NO_TMP_DIR);\n                return false;\n\n            case UPLOAD_ERR_CANT_WRITE:\n                $this->error(self::CANT_WRITE);\n                return false;\n\n            case UPLOAD_ERR_EXTENSION:\n                $this->error(self::EXTENSION);\n                return false;\n\n            default:\n                $this->error(self::UNKNOWN);\n                return false;\n        }\n    }\n\n    /**\n     * @param  int $error UPLOAD_ERR_* constant\n     * @param  string $filename\n     * @param  string $uploadedFile Name of uploaded file (gen tmp_name)\n     * @return bool\n     */\n    private function validateUploadedFile($error, $filename, $uploadedFile)\n    {\n        $this->setValue($filename);\n\n        // Normal errors can be validated normally\n        if ($error !== UPLOAD_ERR_OK) {\n            return $this->validateFileFromErrorCode($error);\n        }\n\n        // Did we get no name? Is the file missing?\n        if (empty($uploadedFile) || false === is_file($uploadedFile)) {\n            $this->error(self::FILE_NOT_FOUND);\n            return false;\n        }\n\n        // Do we have an invalid upload?\n        if (! is_uploaded_file($uploadedFile)) {\n            $this->error(self::ATTACK);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * @return bool\n     */\n    private function validatePsr7UploadedFile(UploadedFileInterface $uploadedFile)\n    {\n        $this->setValue($uploadedFile);\n        return $this->validateFileFromErrorCode($uploadedFile->getError());\n    }\n}\n"
  },
  {
    "path": "src/File/WordCount.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\File;\n\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Exception;\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n * Validator for counting all words in a file\n */\nclass WordCount extends AbstractValidator\n{\n    use FileInformationTrait;\n\n    /**\n     * @const string Error constants\n     */\n    const TOO_MUCH  = 'fileWordCountTooMuch';\n    const TOO_LESS  = 'fileWordCountTooLess';\n    const NOT_FOUND = 'fileWordCountNotFound';\n\n    /**\n     * @var array Error message templates\n     */\n    protected $messageTemplates = [\n        self::TOO_MUCH  => \"Too many words, maximum '%max%' are allowed but '%count%' were counted\",\n        self::TOO_LESS  => \"Too few words, minimum '%min%' are expected but '%count%' were counted\",\n        self::NOT_FOUND => \"File is not readable or does not exist\",\n    ];\n\n    /**\n     * @var array Error message template variables\n     */\n    protected $messageVariables = [\n        'min'   => ['options' => 'min'],\n        'max'   => ['options' => 'max'],\n        'count' => 'count'\n    ];\n\n    /**\n     * Word count\n     *\n     * @var int\n     */\n    protected $count;\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'min' => null,  // Minimum word count, if null there is no minimum word count\n        'max' => null,  // Maximum word count, if null there is no maximum word count\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * Min limits the word count, when used with max=null it is the maximum word count\n     * It also accepts an array with the keys 'min' and 'max'\n     *\n     * If $options is an integer, it will be used as maximum word count\n     * As Array is accepts the following keys:\n     * 'min': Minimum word count\n     * 'max': Maximum word count\n     *\n     * @param  int|array|\\Traversable $options Options for the adapter\n     */\n    public function __construct($options = null)\n    {\n        if (1 < func_num_args()) {\n            $args    = func_get_args();\n            $options = [\n                'min' => array_shift($args),\n                'max' => array_shift($args),\n            ];\n        }\n\n        if (is_string($options) || is_numeric($options)) {\n            $options = ['max' => $options];\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the minimum word count\n     *\n     * @return int\n     */\n    public function getMin()\n    {\n        return $this->options['min'];\n    }\n\n    /**\n     * Sets the minimum word count\n     *\n     * @param  int|array $min The minimum word count\n     * @throws Exception\\InvalidArgumentException When min is greater than max\n     * @return self Provides a fluent interface\n     */\n    public function setMin($min)\n    {\n        if (is_array($min) and isset($min['min'])) {\n            $min = $min['min'];\n        }\n\n        if (! is_numeric($min)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $min = (int) $min;\n        if (($this->getMax() !== null) && ($min > $this->getMax())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum must be less than or equal to the maximum word count, but $min > {$this->getMax()}\"\n            );\n        }\n\n        $this->options['min'] = $min;\n        return $this;\n    }\n\n    /**\n     * Returns the maximum word count\n     *\n     * @return int\n     */\n    public function getMax()\n    {\n        return $this->options['max'];\n    }\n\n    /**\n     * Sets the maximum file count\n     *\n     * @param  int|array $max The maximum word count\n     * @throws Exception\\InvalidArgumentException When max is smaller than min\n     * @return self Provides a fluent interface\n     */\n    public function setMax($max)\n    {\n        if (is_array($max) and isset($max['max'])) {\n            $max = $max['max'];\n        }\n\n        if (! is_numeric($max)) {\n            throw new Exception\\InvalidArgumentException('Invalid options to validator provided');\n        }\n\n        $max = (int) $max;\n        if (($this->getMin() !== null) && ($max < $this->getMin())) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum must be greater than or equal to the minimum word count, but $max < {$this->getMin()}\"\n            );\n        }\n\n        $this->options['max'] = $max;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the counted words are at least min and\n     * not bigger than max (when max is not null).\n     *\n     * @param  string|array $value Filename to check for word count\n     * @param  array        $file  File data from \\Zend\\File\\Transfer\\Transfer (optional)\n     * @return bool\n     */\n    public function isValid($value, $file = null)\n    {\n        $fileInfo = $this->getFileInfo($value, $file);\n\n        $this->setValue($fileInfo['filename']);\n\n        // Is file readable ?\n        if (empty($fileInfo['file']) || false === is_readable($fileInfo['file'])) {\n            $this->error(self::NOT_FOUND);\n            return false;\n        }\n\n        $content     = file_get_contents($fileInfo['file']);\n        $this->count = str_word_count($content);\n        if (($this->getMax() !== null) && ($this->count > $this->getMax())) {\n            $this->error(self::TOO_MUCH);\n            return false;\n        }\n\n        if (($this->getMin() !== null) && ($this->count < $this->getMin())) {\n            $this->error(self::TOO_LESS);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/GpsPoint.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nfinal class GpsPoint extends AbstractValidator\n{\n\n    const OUT_OF_BOUNDS = 'gpsPointOutOfBounds';\n    const CONVERT_ERROR = 'gpsPointConvertError';\n    const INCOMPLETE_COORDINATE = 'gpsPointIncompleteCoordinate';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        'gpsPointOutOfBounds' => '%value% is out of Bounds.',\n        'gpsPointConvertError' => '%value% can not converted into a Decimal Degree Value.',\n        'gpsPointIncompleteCoordinate' => '%value% did not provided a complete Coordinate',\n    ];\n\n    /**\n     * Returns true if and only if $value meets the validation requirements\n     *\n     * If $value fails validation, then this method returns false, and\n     * getMessages() will return an array of messages that explain why the\n     * validation failed.\n     *\n     * @param  mixed $value\n     * @return bool\n     * @throws Exception\\RuntimeException If validation of $value is impossible\n     */\n    public function isValid($value)\n    {\n        if (strpos($value, ',') === false) {\n            $this->error(GpsPoint::INCOMPLETE_COORDINATE, $value);\n            return false;\n        }\n\n        list($lat, $long) = explode(',', $value);\n\n        if ($this->isValidCoordinate($lat, 90.0000) && $this->isValidCoordinate($long, 180.000)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @param string $value\n     * @param $maxBoundary\n     * @return bool\n     */\n    private function isValidCoordinate($value, $maxBoundary)\n    {\n        $this->value = $value;\n\n        $value = $this->removeWhiteSpace($value);\n        if ($this->isDMSValue($value)) {\n            $value = $this->convertValue($value);\n        } else {\n            $value = $this->removeDegreeSign($value);\n        }\n\n        if ($value === false || $value === null) {\n            $this->error(self::CONVERT_ERROR);\n            return false;\n        }\n\n        $doubleLatitude = (double)$value;\n\n        if ($doubleLatitude <= $maxBoundary && $doubleLatitude >= $maxBoundary * -1) {\n            return true;\n        }\n\n        $this->error(self::OUT_OF_BOUNDS);\n        return false;\n    }\n\n    /**\n     * Determines if the give value is a Degrees Minutes Second Definition\n     *\n     * @param $value\n     * @return bool\n     */\n    private function isDMSValue($value)\n    {\n        return preg_match('/([°\\'\"]+[NESW])/', $value) > 0;\n    }\n\n\n    /**\n     * @param string $value\n     * @return bool|string\n     */\n    private function convertValue($value)\n    {\n        $matches = [];\n        $result = preg_match_all('/(\\d{1,3})°(\\d{1,2})\\'(\\d{1,2}[\\.\\d]{0,6})\"[NESW]/i', $value, $matches);\n\n        if ($result === false || $result === 0) {\n            return false;\n        }\n\n        return $matches[1][0] + $matches[2][0] / 60 + ((double)$matches[3][0]) / 3600;\n    }\n\n    /**\n     * @param string $value\n     * @return string\n     */\n    private function removeWhiteSpace($value)\n    {\n        return preg_replace('/\\s/', '', $value);\n    }\n\n    /**\n     * @param string $value\n     * @return string\n     */\n    private function removeDegreeSign($value)\n    {\n        return str_replace('°', '', $value);\n    }\n}\n"
  },
  {
    "path": "src/GreaterThan.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass GreaterThan extends AbstractValidator\n{\n    const NOT_GREATER           = 'notGreaterThan';\n    const NOT_GREATER_INCLUSIVE = 'notGreaterThanInclusive';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_GREATER => \"The input is not greater than '%min%'\",\n        self::NOT_GREATER_INCLUSIVE => \"The input is not greater than or equal to '%min%'\"\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'min' => 'min'\n    ];\n\n    /**\n     * Minimum value\n     *\n     * @var mixed\n     */\n    protected $min;\n\n    /**\n     * Whether to do inclusive comparisons, allowing equivalence to max\n     *\n     * If false, then strict comparisons are done, and the value may equal\n     * the min option\n     *\n     * @var bool\n     */\n    protected $inclusive;\n\n    /**\n     * Sets validator options\n     *\n     * @param  array|Traversable $options\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp['min'] = array_shift($options);\n\n            if (! empty($options)) {\n                $temp['inclusive'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('min', $options)) {\n            throw new Exception\\InvalidArgumentException(\"Missing option 'min'\");\n        }\n\n        if (! array_key_exists('inclusive', $options)) {\n            $options['inclusive'] = false;\n        }\n\n        $this->setMin($options['min'])\n             ->setInclusive($options['inclusive']);\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the min option\n     *\n     * @return mixed\n     */\n    public function getMin()\n    {\n        return $this->min;\n    }\n\n    /**\n     * Sets the min option\n     *\n     * @param  mixed $min\n     * @return GreaterThan Provides a fluent interface\n     */\n    public function setMin($min)\n    {\n        $this->min = $min;\n        return $this;\n    }\n\n    /**\n     * Returns the inclusive option\n     *\n     * @return bool\n     */\n    public function getInclusive()\n    {\n        return $this->inclusive;\n    }\n\n    /**\n     * Sets the inclusive option\n     *\n     * @param  bool $inclusive\n     * @return GreaterThan Provides a fluent interface\n     */\n    public function setInclusive($inclusive)\n    {\n        $this->inclusive = $inclusive;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is greater than min option\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if ($this->inclusive) {\n            if ($this->min > $value) {\n                $this->error(self::NOT_GREATER_INCLUSIVE);\n                return false;\n            }\n        } else {\n            if ($this->min >= $value) {\n                $this->error(self::NOT_GREATER);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Hex.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nclass Hex extends AbstractValidator\n{\n    const INVALID = 'hexInvalid';\n    const NOT_HEX = 'notHex';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID => \"Invalid type given. String expected\",\n        self::NOT_HEX => \"The input contains non-hexadecimal characters\",\n    ];\n\n    /**\n     * Returns true if and only if $value contains only hexadecimal digit characters\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value) && ! is_int($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        if (! ctype_xdigit((string) $value)) {\n            $this->error(self::NOT_HEX);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Hostname/Biz.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Hostname;\n\n/**\n * Resource file for biz idn validation\n */\nreturn [\n    1  => '/^[\\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',\n    2  => '/^[\\x{002d}0-9a-záéíñóúü]{1,63}$/iu',\n    3  => '/^[\\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',\n    4  => '/^[\\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',\n    5  => '/^[\\x{AC00}-\\x{D7A3}]{1,17}$/iu',\n    6  => '/^[\\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',\n    7  => '/^[\\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',\n    8  => '/^[\\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu',\n    9  => '/^[\\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',\n    10 => '/^[\\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu',\n    11 => '/^[\\x{002d}0-9a-z\\x{3005}-\\x{3007}\\x{3041}-\\x{3093}\\x{309D}\\x{309E}\\x{30A1}-\\x{30F6}\\x{30FC}' .\n          '\\x{30FD}\\x{30FE}\\x{4E00}\\x{4E01}\\x{4E03}\\x{4E07}\\x{4E08}\\x{4E09}\\x{4E0A}' .\n          '\\x{4E0B}\\x{4E0D}\\x{4E0E}\\x{4E10}\\x{4E11}\\x{4E14}\\x{4E15}\\x{4E16}\\x{4E17}' .\n          '\\x{4E18}\\x{4E19}\\x{4E1E}\\x{4E21}\\x{4E26}\\x{4E2A}\\x{4E2D}\\x{4E31}\\x{4E32}' .\n          '\\x{4E36}\\x{4E38}\\x{4E39}\\x{4E3B}\\x{4E3C}\\x{4E3F}\\x{4E42}\\x{4E43}\\x{4E45}' .\n          '\\x{4E4B}\\x{4E4D}\\x{4E4E}\\x{4E4F}\\x{4E55}\\x{4E56}\\x{4E57}\\x{4E58}\\x{4E59}' .\n          '\\x{4E5D}\\x{4E5E}\\x{4E5F}\\x{4E62}\\x{4E71}\\x{4E73}\\x{4E7E}\\x{4E80}\\x{4E82}' .\n          '\\x{4E85}\\x{4E86}\\x{4E88}\\x{4E89}\\x{4E8A}\\x{4E8B}\\x{4E8C}\\x{4E8E}\\x{4E91}' .\n          '\\x{4E92}\\x{4E94}\\x{4E95}\\x{4E98}\\x{4E99}\\x{4E9B}\\x{4E9C}\\x{4E9E}\\x{4E9F}' .\n          '\\x{4EA0}\\x{4EA1}\\x{4EA2}\\x{4EA4}\\x{4EA5}\\x{4EA6}\\x{4EA8}\\x{4EAB}\\x{4EAC}' .\n          '\\x{4EAD}\\x{4EAE}\\x{4EB0}\\x{4EB3}\\x{4EB6}\\x{4EBA}\\x{4EC0}\\x{4EC1}\\x{4EC2}' .\n          '\\x{4EC4}\\x{4EC6}\\x{4EC7}\\x{4ECA}\\x{4ECB}\\x{4ECD}\\x{4ECE}\\x{4ECF}\\x{4ED4}' .\n          '\\x{4ED5}\\x{4ED6}\\x{4ED7}\\x{4ED8}\\x{4ED9}\\x{4EDD}\\x{4EDE}\\x{4EDF}\\x{4EE3}' .\n          '\\x{4EE4}\\x{4EE5}\\x{4EED}\\x{4EEE}\\x{4EF0}\\x{4EF2}\\x{4EF6}\\x{4EF7}\\x{4EFB}' .\n          '\\x{4F01}\\x{4F09}\\x{4F0A}\\x{4F0D}\\x{4F0E}\\x{4F0F}\\x{4F10}\\x{4F11}\\x{4F1A}' .\n          '\\x{4F1C}\\x{4F1D}\\x{4F2F}\\x{4F30}\\x{4F34}\\x{4F36}\\x{4F38}\\x{4F3A}\\x{4F3C}' .\n          '\\x{4F3D}\\x{4F43}\\x{4F46}\\x{4F47}\\x{4F4D}\\x{4F4E}\\x{4F4F}\\x{4F50}\\x{4F51}' .\n          '\\x{4F53}\\x{4F55}\\x{4F57}\\x{4F59}\\x{4F5A}\\x{4F5B}\\x{4F5C}\\x{4F5D}\\x{4F5E}' .\n          '\\x{4F69}\\x{4F6F}\\x{4F70}\\x{4F73}\\x{4F75}\\x{4F76}\\x{4F7B}\\x{4F7C}\\x{4F7F}' .\n          '\\x{4F83}\\x{4F86}\\x{4F88}\\x{4F8B}\\x{4F8D}\\x{4F8F}\\x{4F91}\\x{4F96}\\x{4F98}' .\n          '\\x{4F9B}\\x{4F9D}\\x{4FA0}\\x{4FA1}\\x{4FAB}\\x{4FAD}\\x{4FAE}\\x{4FAF}\\x{4FB5}' .\n          '\\x{4FB6}\\x{4FBF}\\x{4FC2}\\x{4FC3}\\x{4FC4}\\x{4FCA}\\x{4FCE}\\x{4FD0}\\x{4FD1}' .\n          '\\x{4FD4}\\x{4FD7}\\x{4FD8}\\x{4FDA}\\x{4FDB}\\x{4FDD}\\x{4FDF}\\x{4FE1}\\x{4FE3}' .\n          '\\x{4FE4}\\x{4FE5}\\x{4FEE}\\x{4FEF}\\x{4FF3}\\x{4FF5}\\x{4FF6}\\x{4FF8}\\x{4FFA}' .\n          '\\x{4FFE}\\x{5005}\\x{5006}\\x{5009}\\x{500B}\\x{500D}\\x{500F}\\x{5011}\\x{5012}' .\n          '\\x{5014}\\x{5016}\\x{5019}\\x{501A}\\x{501F}\\x{5021}\\x{5023}\\x{5024}\\x{5025}' .\n          '\\x{5026}\\x{5028}\\x{5029}\\x{502A}\\x{502B}\\x{502C}\\x{502D}\\x{5036}\\x{5039}' .\n          '\\x{5043}\\x{5047}\\x{5048}\\x{5049}\\x{504F}\\x{5050}\\x{5055}\\x{5056}\\x{505A}' .\n          '\\x{505C}\\x{5065}\\x{506C}\\x{5072}\\x{5074}\\x{5075}\\x{5076}\\x{5078}\\x{507D}' .\n          '\\x{5080}\\x{5085}\\x{508D}\\x{5091}\\x{5098}\\x{5099}\\x{509A}\\x{50AC}\\x{50AD}' .\n          '\\x{50B2}\\x{50B3}\\x{50B4}\\x{50B5}\\x{50B7}\\x{50BE}\\x{50C2}\\x{50C5}\\x{50C9}' .\n          '\\x{50CA}\\x{50CD}\\x{50CF}\\x{50D1}\\x{50D5}\\x{50D6}\\x{50DA}\\x{50DE}\\x{50E3}' .\n          '\\x{50E5}\\x{50E7}\\x{50ED}\\x{50EE}\\x{50F5}\\x{50F9}\\x{50FB}\\x{5100}\\x{5101}' .\n          '\\x{5102}\\x{5104}\\x{5109}\\x{5112}\\x{5114}\\x{5115}\\x{5116}\\x{5118}\\x{511A}' .\n          '\\x{511F}\\x{5121}\\x{512A}\\x{5132}\\x{5137}\\x{513A}\\x{513B}\\x{513C}\\x{513F}' .\n          '\\x{5140}\\x{5141}\\x{5143}\\x{5144}\\x{5145}\\x{5146}\\x{5147}\\x{5148}\\x{5149}' .\n          '\\x{514B}\\x{514C}\\x{514D}\\x{514E}\\x{5150}\\x{5152}\\x{5154}\\x{515A}\\x{515C}' .\n          '\\x{5162}\\x{5165}\\x{5168}\\x{5169}\\x{516A}\\x{516B}\\x{516C}\\x{516D}\\x{516E}' .\n          '\\x{5171}\\x{5175}\\x{5176}\\x{5177}\\x{5178}\\x{517C}\\x{5180}\\x{5182}\\x{5185}' .\n          '\\x{5186}\\x{5189}\\x{518A}\\x{518C}\\x{518D}\\x{518F}\\x{5190}\\x{5191}\\x{5192}' .\n          '\\x{5193}\\x{5195}\\x{5196}\\x{5197}\\x{5199}\\x{51A0}\\x{51A2}\\x{51A4}\\x{51A5}' .\n          '\\x{51A6}\\x{51A8}\\x{51A9}\\x{51AA}\\x{51AB}\\x{51AC}\\x{51B0}\\x{51B1}\\x{51B2}' .\n          '\\x{51B3}\\x{51B4}\\x{51B5}\\x{51B6}\\x{51B7}\\x{51BD}\\x{51C4}\\x{51C5}\\x{51C6}' .\n          '\\x{51C9}\\x{51CB}\\x{51CC}\\x{51CD}\\x{51D6}\\x{51DB}\\x{51DC}\\x{51DD}\\x{51E0}' .\n          '\\x{51E1}\\x{51E6}\\x{51E7}\\x{51E9}\\x{51EA}\\x{51ED}\\x{51F0}\\x{51F1}\\x{51F5}' .\n          '\\x{51F6}\\x{51F8}\\x{51F9}\\x{51FA}\\x{51FD}\\x{51FE}\\x{5200}\\x{5203}\\x{5204}' .\n          '\\x{5206}\\x{5207}\\x{5208}\\x{520A}\\x{520B}\\x{520E}\\x{5211}\\x{5214}\\x{5217}' .\n          '\\x{521D}\\x{5224}\\x{5225}\\x{5227}\\x{5229}\\x{522A}\\x{522E}\\x{5230}\\x{5233}' .\n          '\\x{5236}\\x{5237}\\x{5238}\\x{5239}\\x{523A}\\x{523B}\\x{5243}\\x{5244}\\x{5247}' .\n          '\\x{524A}\\x{524B}\\x{524C}\\x{524D}\\x{524F}\\x{5254}\\x{5256}\\x{525B}\\x{525E}' .\n          '\\x{5263}\\x{5264}\\x{5265}\\x{5269}\\x{526A}\\x{526F}\\x{5270}\\x{5271}\\x{5272}' .\n          '\\x{5273}\\x{5274}\\x{5275}\\x{527D}\\x{527F}\\x{5283}\\x{5287}\\x{5288}\\x{5289}' .\n          '\\x{528D}\\x{5291}\\x{5292}\\x{5294}\\x{529B}\\x{529F}\\x{52A0}\\x{52A3}\\x{52A9}' .\n          '\\x{52AA}\\x{52AB}\\x{52AC}\\x{52AD}\\x{52B1}\\x{52B4}\\x{52B5}\\x{52B9}\\x{52BC}' .\n          '\\x{52BE}\\x{52C1}\\x{52C3}\\x{52C5}\\x{52C7}\\x{52C9}\\x{52CD}\\x{52D2}\\x{52D5}' .\n          '\\x{52D7}\\x{52D8}\\x{52D9}\\x{52DD}\\x{52DE}\\x{52DF}\\x{52E0}\\x{52E2}\\x{52E3}' .\n          '\\x{52E4}\\x{52E6}\\x{52E7}\\x{52F2}\\x{52F3}\\x{52F5}\\x{52F8}\\x{52F9}\\x{52FA}' .\n          '\\x{52FE}\\x{52FF}\\x{5301}\\x{5302}\\x{5305}\\x{5306}\\x{5308}\\x{530D}\\x{530F}' .\n          '\\x{5310}\\x{5315}\\x{5316}\\x{5317}\\x{5319}\\x{531A}\\x{531D}\\x{5320}\\x{5321}' .\n          '\\x{5323}\\x{532A}\\x{532F}\\x{5331}\\x{5333}\\x{5338}\\x{5339}\\x{533A}\\x{533B}' .\n          '\\x{533F}\\x{5340}\\x{5341}\\x{5343}\\x{5345}\\x{5346}\\x{5347}\\x{5348}\\x{5349}' .\n          '\\x{534A}\\x{534D}\\x{5351}\\x{5352}\\x{5353}\\x{5354}\\x{5357}\\x{5358}\\x{535A}' .\n          '\\x{535C}\\x{535E}\\x{5360}\\x{5366}\\x{5369}\\x{536E}\\x{536F}\\x{5370}\\x{5371}' .\n          '\\x{5373}\\x{5374}\\x{5375}\\x{5377}\\x{5378}\\x{537B}\\x{537F}\\x{5382}\\x{5384}' .\n          '\\x{5396}\\x{5398}\\x{539A}\\x{539F}\\x{53A0}\\x{53A5}\\x{53A6}\\x{53A8}\\x{53A9}' .\n          '\\x{53AD}\\x{53AE}\\x{53B0}\\x{53B3}\\x{53B6}\\x{53BB}\\x{53C2}\\x{53C3}\\x{53C8}' .\n          '\\x{53C9}\\x{53CA}\\x{53CB}\\x{53CC}\\x{53CD}\\x{53CE}\\x{53D4}\\x{53D6}\\x{53D7}' .\n          '\\x{53D9}\\x{53DB}\\x{53DF}\\x{53E1}\\x{53E2}\\x{53E3}\\x{53E4}\\x{53E5}\\x{53E8}' .\n          '\\x{53E9}\\x{53EA}\\x{53EB}\\x{53EC}\\x{53ED}\\x{53EE}\\x{53EF}\\x{53F0}\\x{53F1}' .\n          '\\x{53F2}\\x{53F3}\\x{53F6}\\x{53F7}\\x{53F8}\\x{53FA}\\x{5401}\\x{5403}\\x{5404}' .\n          '\\x{5408}\\x{5409}\\x{540A}\\x{540B}\\x{540C}\\x{540D}\\x{540E}\\x{540F}\\x{5410}' .\n          '\\x{5411}\\x{541B}\\x{541D}\\x{541F}\\x{5420}\\x{5426}\\x{5429}\\x{542B}\\x{542C}' .\n          '\\x{542D}\\x{542E}\\x{5436}\\x{5438}\\x{5439}\\x{543B}\\x{543C}\\x{543D}\\x{543E}' .\n          '\\x{5440}\\x{5442}\\x{5446}\\x{5448}\\x{5449}\\x{544A}\\x{544E}\\x{5451}\\x{545F}' .\n          '\\x{5468}\\x{546A}\\x{5470}\\x{5471}\\x{5473}\\x{5475}\\x{5476}\\x{5477}\\x{547B}' .\n          '\\x{547C}\\x{547D}\\x{5480}\\x{5484}\\x{5486}\\x{548B}\\x{548C}\\x{548E}\\x{548F}' .\n          '\\x{5490}\\x{5492}\\x{54A2}\\x{54A4}\\x{54A5}\\x{54A8}\\x{54AB}\\x{54AC}\\x{54AF}' .\n          '\\x{54B2}\\x{54B3}\\x{54B8}\\x{54BC}\\x{54BD}\\x{54BE}\\x{54C0}\\x{54C1}\\x{54C2}' .\n          '\\x{54C4}\\x{54C7}\\x{54C8}\\x{54C9}\\x{54D8}\\x{54E1}\\x{54E2}\\x{54E5}\\x{54E6}' .\n          '\\x{54E8}\\x{54E9}\\x{54ED}\\x{54EE}\\x{54F2}\\x{54FA}\\x{54FD}\\x{5504}\\x{5506}' .\n          '\\x{5507}\\x{550F}\\x{5510}\\x{5514}\\x{5516}\\x{552E}\\x{552F}\\x{5531}\\x{5533}' .\n          '\\x{5538}\\x{5539}\\x{553E}\\x{5540}\\x{5544}\\x{5545}\\x{5546}\\x{554C}\\x{554F}' .\n          '\\x{5553}\\x{5556}\\x{5557}\\x{555C}\\x{555D}\\x{5563}\\x{557B}\\x{557C}\\x{557E}' .\n          '\\x{5580}\\x{5583}\\x{5584}\\x{5587}\\x{5589}\\x{558A}\\x{558B}\\x{5598}\\x{5599}' .\n          '\\x{559A}\\x{559C}\\x{559D}\\x{559E}\\x{559F}\\x{55A7}\\x{55A8}\\x{55A9}\\x{55AA}' .\n          '\\x{55AB}\\x{55AC}\\x{55AE}\\x{55B0}\\x{55B6}\\x{55C4}\\x{55C5}\\x{55C7}\\x{55D4}' .\n          '\\x{55DA}\\x{55DC}\\x{55DF}\\x{55E3}\\x{55E4}\\x{55F7}\\x{55F9}\\x{55FD}\\x{55FE}' .\n          '\\x{5606}\\x{5609}\\x{5614}\\x{5616}\\x{5617}\\x{5618}\\x{561B}\\x{5629}\\x{562F}' .\n          '\\x{5631}\\x{5632}\\x{5634}\\x{5636}\\x{5638}\\x{5642}\\x{564C}\\x{564E}\\x{5650}' .\n          '\\x{565B}\\x{5664}\\x{5668}\\x{566A}\\x{566B}\\x{566C}\\x{5674}\\x{5678}\\x{567A}' .\n          '\\x{5680}\\x{5686}\\x{5687}\\x{568A}\\x{568F}\\x{5694}\\x{56A0}\\x{56A2}\\x{56A5}' .\n          '\\x{56AE}\\x{56B4}\\x{56B6}\\x{56BC}\\x{56C0}\\x{56C1}\\x{56C2}\\x{56C3}\\x{56C8}' .\n          '\\x{56CE}\\x{56D1}\\x{56D3}\\x{56D7}\\x{56D8}\\x{56DA}\\x{56DB}\\x{56DE}\\x{56E0}' .\n          '\\x{56E3}\\x{56EE}\\x{56F0}\\x{56F2}\\x{56F3}\\x{56F9}\\x{56FA}\\x{56FD}\\x{56FF}' .\n          '\\x{5700}\\x{5703}\\x{5704}\\x{5708}\\x{5709}\\x{570B}\\x{570D}\\x{570F}\\x{5712}' .\n          '\\x{5713}\\x{5716}\\x{5718}\\x{571C}\\x{571F}\\x{5726}\\x{5727}\\x{5728}\\x{572D}' .\n          '\\x{5730}\\x{5737}\\x{5738}\\x{573B}\\x{5740}\\x{5742}\\x{5747}\\x{574A}\\x{574E}' .\n          '\\x{574F}\\x{5750}\\x{5751}\\x{5761}\\x{5764}\\x{5766}\\x{5769}\\x{576A}\\x{577F}' .\n          '\\x{5782}\\x{5788}\\x{5789}\\x{578B}\\x{5793}\\x{57A0}\\x{57A2}\\x{57A3}\\x{57A4}' .\n          '\\x{57AA}\\x{57B0}\\x{57B3}\\x{57C0}\\x{57C3}\\x{57C6}\\x{57CB}\\x{57CE}\\x{57D2}' .\n          '\\x{57D3}\\x{57D4}\\x{57D6}\\x{57DC}\\x{57DF}\\x{57E0}\\x{57E3}\\x{57F4}\\x{57F7}' .\n          '\\x{57F9}\\x{57FA}\\x{57FC}\\x{5800}\\x{5802}\\x{5805}\\x{5806}\\x{580A}\\x{580B}' .\n          '\\x{5815}\\x{5819}\\x{581D}\\x{5821}\\x{5824}\\x{582A}\\x{582F}\\x{5830}\\x{5831}' .\n          '\\x{5834}\\x{5835}\\x{583A}\\x{583D}\\x{5840}\\x{5841}\\x{584A}\\x{584B}\\x{5851}' .\n          '\\x{5852}\\x{5854}\\x{5857}\\x{5858}\\x{5859}\\x{585A}\\x{585E}\\x{5862}\\x{5869}' .\n          '\\x{586B}\\x{5870}\\x{5872}\\x{5875}\\x{5879}\\x{587E}\\x{5883}\\x{5885}\\x{5893}' .\n          '\\x{5897}\\x{589C}\\x{589F}\\x{58A8}\\x{58AB}\\x{58AE}\\x{58B3}\\x{58B8}\\x{58B9}' .\n          '\\x{58BA}\\x{58BB}\\x{58BE}\\x{58C1}\\x{58C5}\\x{58C7}\\x{58CA}\\x{58CC}\\x{58D1}' .\n          '\\x{58D3}\\x{58D5}\\x{58D7}\\x{58D8}\\x{58D9}\\x{58DC}\\x{58DE}\\x{58DF}\\x{58E4}' .\n          '\\x{58E5}\\x{58EB}\\x{58EC}\\x{58EE}\\x{58EF}\\x{58F0}\\x{58F1}\\x{58F2}\\x{58F7}' .\n          '\\x{58F9}\\x{58FA}\\x{58FB}\\x{58FC}\\x{58FD}\\x{5902}\\x{5909}\\x{590A}\\x{590F}' .\n          '\\x{5910}\\x{5915}\\x{5916}\\x{5918}\\x{5919}\\x{591A}\\x{591B}\\x{591C}\\x{5922}' .\n          '\\x{5925}\\x{5927}\\x{5929}\\x{592A}\\x{592B}\\x{592C}\\x{592D}\\x{592E}\\x{5931}' .\n          '\\x{5932}\\x{5937}\\x{5938}\\x{593E}\\x{5944}\\x{5947}\\x{5948}\\x{5949}\\x{594E}' .\n          '\\x{594F}\\x{5950}\\x{5951}\\x{5954}\\x{5955}\\x{5957}\\x{5958}\\x{595A}\\x{5960}' .\n          '\\x{5962}\\x{5965}\\x{5967}\\x{5968}\\x{5969}\\x{596A}\\x{596C}\\x{596E}\\x{5973}' .\n          '\\x{5974}\\x{5978}\\x{597D}\\x{5981}\\x{5982}\\x{5983}\\x{5984}\\x{598A}\\x{598D}' .\n          '\\x{5993}\\x{5996}\\x{5999}\\x{599B}\\x{599D}\\x{59A3}\\x{59A5}\\x{59A8}\\x{59AC}' .\n          '\\x{59B2}\\x{59B9}\\x{59BB}\\x{59BE}\\x{59C6}\\x{59C9}\\x{59CB}\\x{59D0}\\x{59D1}' .\n          '\\x{59D3}\\x{59D4}\\x{59D9}\\x{59DA}\\x{59DC}\\x{59E5}\\x{59E6}\\x{59E8}\\x{59EA}' .\n          '\\x{59EB}\\x{59F6}\\x{59FB}\\x{59FF}\\x{5A01}\\x{5A03}\\x{5A09}\\x{5A11}\\x{5A18}' .\n          '\\x{5A1A}\\x{5A1C}\\x{5A1F}\\x{5A20}\\x{5A25}\\x{5A29}\\x{5A2F}\\x{5A35}\\x{5A36}' .\n          '\\x{5A3C}\\x{5A40}\\x{5A41}\\x{5A46}\\x{5A49}\\x{5A5A}\\x{5A62}\\x{5A66}\\x{5A6A}' .\n          '\\x{5A6C}\\x{5A7F}\\x{5A92}\\x{5A9A}\\x{5A9B}\\x{5ABC}\\x{5ABD}\\x{5ABE}\\x{5AC1}' .\n          '\\x{5AC2}\\x{5AC9}\\x{5ACB}\\x{5ACC}\\x{5AD0}\\x{5AD6}\\x{5AD7}\\x{5AE1}\\x{5AE3}' .\n          '\\x{5AE6}\\x{5AE9}\\x{5AFA}\\x{5AFB}\\x{5B09}\\x{5B0B}\\x{5B0C}\\x{5B16}\\x{5B22}' .\n          '\\x{5B2A}\\x{5B2C}\\x{5B30}\\x{5B32}\\x{5B36}\\x{5B3E}\\x{5B40}\\x{5B43}\\x{5B45}' .\n          '\\x{5B50}\\x{5B51}\\x{5B54}\\x{5B55}\\x{5B57}\\x{5B58}\\x{5B5A}\\x{5B5B}\\x{5B5C}' .\n          '\\x{5B5D}\\x{5B5F}\\x{5B63}\\x{5B64}\\x{5B65}\\x{5B66}\\x{5B69}\\x{5B6B}\\x{5B70}' .\n          '\\x{5B71}\\x{5B73}\\x{5B75}\\x{5B78}\\x{5B7A}\\x{5B80}\\x{5B83}\\x{5B85}\\x{5B87}' .\n          '\\x{5B88}\\x{5B89}\\x{5B8B}\\x{5B8C}\\x{5B8D}\\x{5B8F}\\x{5B95}\\x{5B97}\\x{5B98}' .\n          '\\x{5B99}\\x{5B9A}\\x{5B9B}\\x{5B9C}\\x{5B9D}\\x{5B9F}\\x{5BA2}\\x{5BA3}\\x{5BA4}' .\n          '\\x{5BA5}\\x{5BA6}\\x{5BAE}\\x{5BB0}\\x{5BB3}\\x{5BB4}\\x{5BB5}\\x{5BB6}\\x{5BB8}' .\n          '\\x{5BB9}\\x{5BBF}\\x{5BC2}\\x{5BC3}\\x{5BC4}\\x{5BC5}\\x{5BC6}\\x{5BC7}\\x{5BC9}' .\n          '\\x{5BCC}\\x{5BD0}\\x{5BD2}\\x{5BD3}\\x{5BD4}\\x{5BDB}\\x{5BDD}\\x{5BDE}\\x{5BDF}' .\n          '\\x{5BE1}\\x{5BE2}\\x{5BE4}\\x{5BE5}\\x{5BE6}\\x{5BE7}\\x{5BE8}\\x{5BE9}\\x{5BEB}' .\n          '\\x{5BEE}\\x{5BF0}\\x{5BF3}\\x{5BF5}\\x{5BF6}\\x{5BF8}\\x{5BFA}\\x{5BFE}\\x{5BFF}' .\n          '\\x{5C01}\\x{5C02}\\x{5C04}\\x{5C05}\\x{5C06}\\x{5C07}\\x{5C08}\\x{5C09}\\x{5C0A}' .\n          '\\x{5C0B}\\x{5C0D}\\x{5C0E}\\x{5C0F}\\x{5C11}\\x{5C13}\\x{5C16}\\x{5C1A}\\x{5C20}' .\n          '\\x{5C22}\\x{5C24}\\x{5C28}\\x{5C2D}\\x{5C31}\\x{5C38}\\x{5C39}\\x{5C3A}\\x{5C3B}' .\n          '\\x{5C3C}\\x{5C3D}\\x{5C3E}\\x{5C3F}\\x{5C40}\\x{5C41}\\x{5C45}\\x{5C46}\\x{5C48}' .\n          '\\x{5C4A}\\x{5C4B}\\x{5C4D}\\x{5C4E}\\x{5C4F}\\x{5C50}\\x{5C51}\\x{5C53}\\x{5C55}' .\n          '\\x{5C5E}\\x{5C60}\\x{5C61}\\x{5C64}\\x{5C65}\\x{5C6C}\\x{5C6E}\\x{5C6F}\\x{5C71}' .\n          '\\x{5C76}\\x{5C79}\\x{5C8C}\\x{5C90}\\x{5C91}\\x{5C94}\\x{5CA1}\\x{5CA8}\\x{5CA9}' .\n          '\\x{5CAB}\\x{5CAC}\\x{5CB1}\\x{5CB3}\\x{5CB6}\\x{5CB7}\\x{5CB8}\\x{5CBB}\\x{5CBC}' .\n          '\\x{5CBE}\\x{5CC5}\\x{5CC7}\\x{5CD9}\\x{5CE0}\\x{5CE1}\\x{5CE8}\\x{5CE9}\\x{5CEA}' .\n          '\\x{5CED}\\x{5CEF}\\x{5CF0}\\x{5CF6}\\x{5CFA}\\x{5CFB}\\x{5CFD}\\x{5D07}\\x{5D0B}' .\n          '\\x{5D0E}\\x{5D11}\\x{5D14}\\x{5D15}\\x{5D16}\\x{5D17}\\x{5D18}\\x{5D19}\\x{5D1A}' .\n          '\\x{5D1B}\\x{5D1F}\\x{5D22}\\x{5D29}\\x{5D4B}\\x{5D4C}\\x{5D4E}\\x{5D50}\\x{5D52}' .\n          '\\x{5D5C}\\x{5D69}\\x{5D6C}\\x{5D6F}\\x{5D73}\\x{5D76}\\x{5D82}\\x{5D84}\\x{5D87}' .\n          '\\x{5D8B}\\x{5D8C}\\x{5D90}\\x{5D9D}\\x{5DA2}\\x{5DAC}\\x{5DAE}\\x{5DB7}\\x{5DBA}' .\n          '\\x{5DBC}\\x{5DBD}\\x{5DC9}\\x{5DCC}\\x{5DCD}\\x{5DD2}\\x{5DD3}\\x{5DD6}\\x{5DDB}' .\n          '\\x{5DDD}\\x{5DDE}\\x{5DE1}\\x{5DE3}\\x{5DE5}\\x{5DE6}\\x{5DE7}\\x{5DE8}\\x{5DEB}' .\n          '\\x{5DEE}\\x{5DF1}\\x{5DF2}\\x{5DF3}\\x{5DF4}\\x{5DF5}\\x{5DF7}\\x{5DFB}\\x{5DFD}' .\n          '\\x{5DFE}\\x{5E02}\\x{5E03}\\x{5E06}\\x{5E0B}\\x{5E0C}\\x{5E11}\\x{5E16}\\x{5E19}' .\n          '\\x{5E1A}\\x{5E1B}\\x{5E1D}\\x{5E25}\\x{5E2B}\\x{5E2D}\\x{5E2F}\\x{5E30}\\x{5E33}' .\n          '\\x{5E36}\\x{5E37}\\x{5E38}\\x{5E3D}\\x{5E40}\\x{5E43}\\x{5E44}\\x{5E45}\\x{5E47}' .\n          '\\x{5E4C}\\x{5E4E}\\x{5E54}\\x{5E55}\\x{5E57}\\x{5E5F}\\x{5E61}\\x{5E62}\\x{5E63}' .\n          '\\x{5E64}\\x{5E72}\\x{5E73}\\x{5E74}\\x{5E75}\\x{5E76}\\x{5E78}\\x{5E79}\\x{5E7A}' .\n          '\\x{5E7B}\\x{5E7C}\\x{5E7D}\\x{5E7E}\\x{5E7F}\\x{5E81}\\x{5E83}\\x{5E84}\\x{5E87}' .\n          '\\x{5E8A}\\x{5E8F}\\x{5E95}\\x{5E96}\\x{5E97}\\x{5E9A}\\x{5E9C}\\x{5EA0}\\x{5EA6}' .\n          '\\x{5EA7}\\x{5EAB}\\x{5EAD}\\x{5EB5}\\x{5EB6}\\x{5EB7}\\x{5EB8}\\x{5EC1}\\x{5EC2}' .\n          '\\x{5EC3}\\x{5EC8}\\x{5EC9}\\x{5ECA}\\x{5ECF}\\x{5ED0}\\x{5ED3}\\x{5ED6}\\x{5EDA}' .\n          '\\x{5EDB}\\x{5EDD}\\x{5EDF}\\x{5EE0}\\x{5EE1}\\x{5EE2}\\x{5EE3}\\x{5EE8}\\x{5EE9}' .\n          '\\x{5EEC}\\x{5EF0}\\x{5EF1}\\x{5EF3}\\x{5EF4}\\x{5EF6}\\x{5EF7}\\x{5EF8}\\x{5EFA}' .\n          '\\x{5EFB}\\x{5EFC}\\x{5EFE}\\x{5EFF}\\x{5F01}\\x{5F03}\\x{5F04}\\x{5F09}\\x{5F0A}' .\n          '\\x{5F0B}\\x{5F0C}\\x{5F0D}\\x{5F0F}\\x{5F10}\\x{5F11}\\x{5F13}\\x{5F14}\\x{5F15}' .\n          '\\x{5F16}\\x{5F17}\\x{5F18}\\x{5F1B}\\x{5F1F}\\x{5F25}\\x{5F26}\\x{5F27}\\x{5F29}' .\n          '\\x{5F2D}\\x{5F2F}\\x{5F31}\\x{5F35}\\x{5F37}\\x{5F38}\\x{5F3C}\\x{5F3E}\\x{5F41}' .\n          '\\x{5F48}\\x{5F4A}\\x{5F4C}\\x{5F4E}\\x{5F51}\\x{5F53}\\x{5F56}\\x{5F57}\\x{5F59}' .\n          '\\x{5F5C}\\x{5F5D}\\x{5F61}\\x{5F62}\\x{5F66}\\x{5F69}\\x{5F6A}\\x{5F6B}\\x{5F6C}' .\n          '\\x{5F6D}\\x{5F70}\\x{5F71}\\x{5F73}\\x{5F77}\\x{5F79}\\x{5F7C}\\x{5F7F}\\x{5F80}' .\n          '\\x{5F81}\\x{5F82}\\x{5F83}\\x{5F84}\\x{5F85}\\x{5F87}\\x{5F88}\\x{5F8A}\\x{5F8B}' .\n          '\\x{5F8C}\\x{5F90}\\x{5F91}\\x{5F92}\\x{5F93}\\x{5F97}\\x{5F98}\\x{5F99}\\x{5F9E}' .\n          '\\x{5FA0}\\x{5FA1}\\x{5FA8}\\x{5FA9}\\x{5FAA}\\x{5FAD}\\x{5FAE}\\x{5FB3}\\x{5FB4}' .\n          '\\x{5FB9}\\x{5FBC}\\x{5FBD}\\x{5FC3}\\x{5FC5}\\x{5FCC}\\x{5FCD}\\x{5FD6}\\x{5FD7}' .\n          '\\x{5FD8}\\x{5FD9}\\x{5FDC}\\x{5FDD}\\x{5FE0}\\x{5FE4}\\x{5FEB}\\x{5FF0}\\x{5FF1}' .\n          '\\x{5FF5}\\x{5FF8}\\x{5FFB}\\x{5FFD}\\x{5FFF}\\x{600E}\\x{600F}\\x{6010}\\x{6012}' .\n          '\\x{6015}\\x{6016}\\x{6019}\\x{601B}\\x{601C}\\x{601D}\\x{6020}\\x{6021}\\x{6025}' .\n          '\\x{6026}\\x{6027}\\x{6028}\\x{6029}\\x{602A}\\x{602B}\\x{602F}\\x{6031}\\x{603A}' .\n          '\\x{6041}\\x{6042}\\x{6043}\\x{6046}\\x{604A}\\x{604B}\\x{604D}\\x{6050}\\x{6052}' .\n          '\\x{6055}\\x{6059}\\x{605A}\\x{605F}\\x{6060}\\x{6062}\\x{6063}\\x{6064}\\x{6065}' .\n          '\\x{6068}\\x{6069}\\x{606A}\\x{606B}\\x{606C}\\x{606D}\\x{606F}\\x{6070}\\x{6075}' .\n          '\\x{6077}\\x{6081}\\x{6083}\\x{6084}\\x{6089}\\x{608B}\\x{608C}\\x{608D}\\x{6092}' .\n          '\\x{6094}\\x{6096}\\x{6097}\\x{609A}\\x{609B}\\x{609F}\\x{60A0}\\x{60A3}\\x{60A6}' .\n          '\\x{60A7}\\x{60A9}\\x{60AA}\\x{60B2}\\x{60B3}\\x{60B4}\\x{60B5}\\x{60B6}\\x{60B8}' .\n          '\\x{60BC}\\x{60BD}\\x{60C5}\\x{60C6}\\x{60C7}\\x{60D1}\\x{60D3}\\x{60D8}\\x{60DA}' .\n          '\\x{60DC}\\x{60DF}\\x{60E0}\\x{60E1}\\x{60E3}\\x{60E7}\\x{60E8}\\x{60F0}\\x{60F1}' .\n          '\\x{60F3}\\x{60F4}\\x{60F6}\\x{60F7}\\x{60F9}\\x{60FA}\\x{60FB}\\x{6100}\\x{6101}' .\n          '\\x{6103}\\x{6106}\\x{6108}\\x{6109}\\x{610D}\\x{610E}\\x{610F}\\x{6115}\\x{611A}' .\n          '\\x{611B}\\x{611F}\\x{6121}\\x{6127}\\x{6128}\\x{612C}\\x{6134}\\x{613C}\\x{613D}' .\n          '\\x{613E}\\x{613F}\\x{6142}\\x{6144}\\x{6147}\\x{6148}\\x{614A}\\x{614B}\\x{614C}' .\n          '\\x{614D}\\x{614E}\\x{6153}\\x{6155}\\x{6158}\\x{6159}\\x{615A}\\x{615D}\\x{615F}' .\n          '\\x{6162}\\x{6163}\\x{6165}\\x{6167}\\x{6168}\\x{616B}\\x{616E}\\x{616F}\\x{6170}' .\n          '\\x{6171}\\x{6173}\\x{6174}\\x{6175}\\x{6176}\\x{6177}\\x{617E}\\x{6182}\\x{6187}' .\n          '\\x{618A}\\x{618E}\\x{6190}\\x{6191}\\x{6194}\\x{6196}\\x{6199}\\x{619A}\\x{61A4}' .\n          '\\x{61A7}\\x{61A9}\\x{61AB}\\x{61AC}\\x{61AE}\\x{61B2}\\x{61B6}\\x{61BA}\\x{61BE}' .\n          '\\x{61C3}\\x{61C6}\\x{61C7}\\x{61C8}\\x{61C9}\\x{61CA}\\x{61CB}\\x{61CC}\\x{61CD}' .\n          '\\x{61D0}\\x{61E3}\\x{61E6}\\x{61F2}\\x{61F4}\\x{61F6}\\x{61F7}\\x{61F8}\\x{61FA}' .\n          '\\x{61FC}\\x{61FD}\\x{61FE}\\x{61FF}\\x{6200}\\x{6208}\\x{6209}\\x{620A}\\x{620C}' .\n          '\\x{620D}\\x{620E}\\x{6210}\\x{6211}\\x{6212}\\x{6214}\\x{6216}\\x{621A}\\x{621B}' .\n          '\\x{621D}\\x{621E}\\x{621F}\\x{6221}\\x{6226}\\x{622A}\\x{622E}\\x{622F}\\x{6230}' .\n          '\\x{6232}\\x{6233}\\x{6234}\\x{6238}\\x{623B}\\x{623F}\\x{6240}\\x{6241}\\x{6247}' .\n          '\\x{6248}\\x{6249}\\x{624B}\\x{624D}\\x{624E}\\x{6253}\\x{6255}\\x{6258}\\x{625B}' .\n          '\\x{625E}\\x{6260}\\x{6263}\\x{6268}\\x{626E}\\x{6271}\\x{6276}\\x{6279}\\x{627C}' .\n          '\\x{627E}\\x{627F}\\x{6280}\\x{6282}\\x{6283}\\x{6284}\\x{6289}\\x{628A}\\x{6291}' .\n          '\\x{6292}\\x{6293}\\x{6294}\\x{6295}\\x{6296}\\x{6297}\\x{6298}\\x{629B}\\x{629C}' .\n          '\\x{629E}\\x{62AB}\\x{62AC}\\x{62B1}\\x{62B5}\\x{62B9}\\x{62BB}\\x{62BC}\\x{62BD}' .\n          '\\x{62C2}\\x{62C5}\\x{62C6}\\x{62C7}\\x{62C8}\\x{62C9}\\x{62CA}\\x{62CC}\\x{62CD}' .\n          '\\x{62CF}\\x{62D0}\\x{62D1}\\x{62D2}\\x{62D3}\\x{62D4}\\x{62D7}\\x{62D8}\\x{62D9}' .\n          '\\x{62DB}\\x{62DC}\\x{62DD}\\x{62E0}\\x{62E1}\\x{62EC}\\x{62ED}\\x{62EE}\\x{62EF}' .\n          '\\x{62F1}\\x{62F3}\\x{62F5}\\x{62F6}\\x{62F7}\\x{62FE}\\x{62FF}\\x{6301}\\x{6302}' .\n          '\\x{6307}\\x{6308}\\x{6309}\\x{630C}\\x{6311}\\x{6319}\\x{631F}\\x{6327}\\x{6328}' .\n          '\\x{632B}\\x{632F}\\x{633A}\\x{633D}\\x{633E}\\x{633F}\\x{6349}\\x{634C}\\x{634D}' .\n          '\\x{634F}\\x{6350}\\x{6355}\\x{6357}\\x{635C}\\x{6367}\\x{6368}\\x{6369}\\x{636B}' .\n          '\\x{636E}\\x{6372}\\x{6376}\\x{6377}\\x{637A}\\x{637B}\\x{6380}\\x{6383}\\x{6388}' .\n          '\\x{6389}\\x{638C}\\x{638E}\\x{638F}\\x{6392}\\x{6396}\\x{6398}\\x{639B}\\x{639F}' .\n          '\\x{63A0}\\x{63A1}\\x{63A2}\\x{63A3}\\x{63A5}\\x{63A7}\\x{63A8}\\x{63A9}\\x{63AA}' .\n          '\\x{63AB}\\x{63AC}\\x{63B2}\\x{63B4}\\x{63B5}\\x{63BB}\\x{63BE}\\x{63C0}\\x{63C3}' .\n          '\\x{63C4}\\x{63C6}\\x{63C9}\\x{63CF}\\x{63D0}\\x{63D2}\\x{63D6}\\x{63DA}\\x{63DB}' .\n          '\\x{63E1}\\x{63E3}\\x{63E9}\\x{63EE}\\x{63F4}\\x{63F6}\\x{63FA}\\x{6406}\\x{640D}' .\n          '\\x{640F}\\x{6413}\\x{6416}\\x{6417}\\x{641C}\\x{6426}\\x{6428}\\x{642C}\\x{642D}' .\n          '\\x{6434}\\x{6436}\\x{643A}\\x{643E}\\x{6442}\\x{644E}\\x{6458}\\x{6467}\\x{6469}' .\n          '\\x{646F}\\x{6476}\\x{6478}\\x{647A}\\x{6483}\\x{6488}\\x{6492}\\x{6493}\\x{6495}' .\n          '\\x{649A}\\x{649E}\\x{64A4}\\x{64A5}\\x{64A9}\\x{64AB}\\x{64AD}\\x{64AE}\\x{64B0}' .\n          '\\x{64B2}\\x{64B9}\\x{64BB}\\x{64BC}\\x{64C1}\\x{64C2}\\x{64C5}\\x{64C7}\\x{64CD}' .\n          '\\x{64D2}\\x{64D4}\\x{64D8}\\x{64DA}\\x{64E0}\\x{64E1}\\x{64E2}\\x{64E3}\\x{64E6}' .\n          '\\x{64E7}\\x{64EC}\\x{64EF}\\x{64F1}\\x{64F2}\\x{64F4}\\x{64F6}\\x{64FA}\\x{64FD}' .\n          '\\x{64FE}\\x{6500}\\x{6505}\\x{6518}\\x{651C}\\x{651D}\\x{6523}\\x{6524}\\x{652A}' .\n          '\\x{652B}\\x{652C}\\x{652F}\\x{6534}\\x{6535}\\x{6536}\\x{6537}\\x{6538}\\x{6539}' .\n          '\\x{653B}\\x{653E}\\x{653F}\\x{6545}\\x{6548}\\x{654D}\\x{654F}\\x{6551}\\x{6555}' .\n          '\\x{6556}\\x{6557}\\x{6558}\\x{6559}\\x{655D}\\x{655E}\\x{6562}\\x{6563}\\x{6566}' .\n          '\\x{656C}\\x{6570}\\x{6572}\\x{6574}\\x{6575}\\x{6577}\\x{6578}\\x{6582}\\x{6583}' .\n          '\\x{6587}\\x{6588}\\x{6589}\\x{658C}\\x{658E}\\x{6590}\\x{6591}\\x{6597}\\x{6599}' .\n          '\\x{659B}\\x{659C}\\x{659F}\\x{65A1}\\x{65A4}\\x{65A5}\\x{65A7}\\x{65AB}\\x{65AC}' .\n          '\\x{65AD}\\x{65AF}\\x{65B0}\\x{65B7}\\x{65B9}\\x{65BC}\\x{65BD}\\x{65C1}\\x{65C3}' .\n          '\\x{65C4}\\x{65C5}\\x{65C6}\\x{65CB}\\x{65CC}\\x{65CF}\\x{65D2}\\x{65D7}\\x{65D9}' .\n          '\\x{65DB}\\x{65E0}\\x{65E1}\\x{65E2}\\x{65E5}\\x{65E6}\\x{65E7}\\x{65E8}\\x{65E9}' .\n          '\\x{65EC}\\x{65ED}\\x{65F1}\\x{65FA}\\x{65FB}\\x{6602}\\x{6603}\\x{6606}\\x{6607}' .\n          '\\x{660A}\\x{660C}\\x{660E}\\x{660F}\\x{6613}\\x{6614}\\x{661C}\\x{661F}\\x{6620}' .\n          '\\x{6625}\\x{6627}\\x{6628}\\x{662D}\\x{662F}\\x{6634}\\x{6635}\\x{6636}\\x{663C}' .\n          '\\x{663F}\\x{6641}\\x{6642}\\x{6643}\\x{6644}\\x{6649}\\x{664B}\\x{664F}\\x{6652}' .\n          '\\x{665D}\\x{665E}\\x{665F}\\x{6662}\\x{6664}\\x{6666}\\x{6667}\\x{6668}\\x{6669}' .\n          '\\x{666E}\\x{666F}\\x{6670}\\x{6674}\\x{6676}\\x{667A}\\x{6681}\\x{6683}\\x{6684}' .\n          '\\x{6687}\\x{6688}\\x{6689}\\x{668E}\\x{6691}\\x{6696}\\x{6697}\\x{6698}\\x{669D}' .\n          '\\x{66A2}\\x{66A6}\\x{66AB}\\x{66AE}\\x{66B4}\\x{66B8}\\x{66B9}\\x{66BC}\\x{66BE}' .\n          '\\x{66C1}\\x{66C4}\\x{66C7}\\x{66C9}\\x{66D6}\\x{66D9}\\x{66DA}\\x{66DC}\\x{66DD}' .\n          '\\x{66E0}\\x{66E6}\\x{66E9}\\x{66F0}\\x{66F2}\\x{66F3}\\x{66F4}\\x{66F5}\\x{66F7}' .\n          '\\x{66F8}\\x{66F9}\\x{66FC}\\x{66FD}\\x{66FE}\\x{66FF}\\x{6700}\\x{6703}\\x{6708}' .\n          '\\x{6709}\\x{670B}\\x{670D}\\x{670F}\\x{6714}\\x{6715}\\x{6716}\\x{6717}\\x{671B}' .\n          '\\x{671D}\\x{671E}\\x{671F}\\x{6726}\\x{6727}\\x{6728}\\x{672A}\\x{672B}\\x{672C}' .\n          '\\x{672D}\\x{672E}\\x{6731}\\x{6734}\\x{6736}\\x{6737}\\x{6738}\\x{673A}\\x{673D}' .\n          '\\x{673F}\\x{6741}\\x{6746}\\x{6749}\\x{674E}\\x{674F}\\x{6750}\\x{6751}\\x{6753}' .\n          '\\x{6756}\\x{6759}\\x{675C}\\x{675E}\\x{675F}\\x{6760}\\x{6761}\\x{6762}\\x{6763}' .\n          '\\x{6764}\\x{6765}\\x{676A}\\x{676D}\\x{676F}\\x{6770}\\x{6771}\\x{6772}\\x{6773}' .\n          '\\x{6775}\\x{6777}\\x{677C}\\x{677E}\\x{677F}\\x{6785}\\x{6787}\\x{6789}\\x{678B}' .\n          '\\x{678C}\\x{6790}\\x{6795}\\x{6797}\\x{679A}\\x{679C}\\x{679D}\\x{67A0}\\x{67A1}' .\n          '\\x{67A2}\\x{67A6}\\x{67A9}\\x{67AF}\\x{67B3}\\x{67B4}\\x{67B6}\\x{67B7}\\x{67B8}' .\n          '\\x{67B9}\\x{67C1}\\x{67C4}\\x{67C6}\\x{67CA}\\x{67CE}\\x{67CF}\\x{67D0}\\x{67D1}' .\n          '\\x{67D3}\\x{67D4}\\x{67D8}\\x{67DA}\\x{67DD}\\x{67DE}\\x{67E2}\\x{67E4}\\x{67E7}' .\n          '\\x{67E9}\\x{67EC}\\x{67EE}\\x{67EF}\\x{67F1}\\x{67F3}\\x{67F4}\\x{67F5}\\x{67FB}' .\n          '\\x{67FE}\\x{67FF}\\x{6802}\\x{6803}\\x{6804}\\x{6813}\\x{6816}\\x{6817}\\x{681E}' .\n          '\\x{6821}\\x{6822}\\x{6829}\\x{682A}\\x{682B}\\x{6832}\\x{6834}\\x{6838}\\x{6839}' .\n          '\\x{683C}\\x{683D}\\x{6840}\\x{6841}\\x{6842}\\x{6843}\\x{6846}\\x{6848}\\x{684D}' .\n          '\\x{684E}\\x{6850}\\x{6851}\\x{6853}\\x{6854}\\x{6859}\\x{685C}\\x{685D}\\x{685F}' .\n          '\\x{6863}\\x{6867}\\x{6874}\\x{6876}\\x{6877}\\x{687E}\\x{687F}\\x{6881}\\x{6883}' .\n          '\\x{6885}\\x{688D}\\x{688F}\\x{6893}\\x{6894}\\x{6897}\\x{689B}\\x{689D}\\x{689F}' .\n          '\\x{68A0}\\x{68A2}\\x{68A6}\\x{68A7}\\x{68A8}\\x{68AD}\\x{68AF}\\x{68B0}\\x{68B1}' .\n          '\\x{68B3}\\x{68B5}\\x{68B6}\\x{68B9}\\x{68BA}\\x{68BC}\\x{68C4}\\x{68C6}\\x{68C9}' .\n          '\\x{68CA}\\x{68CB}\\x{68CD}\\x{68D2}\\x{68D4}\\x{68D5}\\x{68D7}\\x{68D8}\\x{68DA}' .\n          '\\x{68DF}\\x{68E0}\\x{68E1}\\x{68E3}\\x{68E7}\\x{68EE}\\x{68EF}\\x{68F2}\\x{68F9}' .\n          '\\x{68FA}\\x{6900}\\x{6901}\\x{6904}\\x{6905}\\x{6908}\\x{690B}\\x{690C}\\x{690D}' .\n          '\\x{690E}\\x{690F}\\x{6912}\\x{6919}\\x{691A}\\x{691B}\\x{691C}\\x{6921}\\x{6922}' .\n          '\\x{6923}\\x{6925}\\x{6926}\\x{6928}\\x{692A}\\x{6930}\\x{6934}\\x{6936}\\x{6939}' .\n          '\\x{693D}\\x{693F}\\x{694A}\\x{6953}\\x{6954}\\x{6955}\\x{6959}\\x{695A}\\x{695C}' .\n          '\\x{695D}\\x{695E}\\x{6960}\\x{6961}\\x{6962}\\x{696A}\\x{696B}\\x{696D}\\x{696E}' .\n          '\\x{696F}\\x{6973}\\x{6974}\\x{6975}\\x{6977}\\x{6978}\\x{6979}\\x{697C}\\x{697D}' .\n          '\\x{697E}\\x{6981}\\x{6982}\\x{698A}\\x{698E}\\x{6991}\\x{6994}\\x{6995}\\x{699B}' .\n          '\\x{699C}\\x{69A0}\\x{69A7}\\x{69AE}\\x{69B1}\\x{69B2}\\x{69B4}\\x{69BB}\\x{69BE}' .\n          '\\x{69BF}\\x{69C1}\\x{69C3}\\x{69C7}\\x{69CA}\\x{69CB}\\x{69CC}\\x{69CD}\\x{69CE}' .\n          '\\x{69D0}\\x{69D3}\\x{69D8}\\x{69D9}\\x{69DD}\\x{69DE}\\x{69E7}\\x{69E8}\\x{69EB}' .\n          '\\x{69ED}\\x{69F2}\\x{69F9}\\x{69FB}\\x{69FD}\\x{69FF}\\x{6A02}\\x{6A05}\\x{6A0A}' .\n          '\\x{6A0B}\\x{6A0C}\\x{6A12}\\x{6A13}\\x{6A14}\\x{6A17}\\x{6A19}\\x{6A1B}\\x{6A1E}' .\n          '\\x{6A1F}\\x{6A21}\\x{6A22}\\x{6A23}\\x{6A29}\\x{6A2A}\\x{6A2B}\\x{6A2E}\\x{6A35}' .\n          '\\x{6A36}\\x{6A38}\\x{6A39}\\x{6A3A}\\x{6A3D}\\x{6A44}\\x{6A47}\\x{6A48}\\x{6A4B}' .\n          '\\x{6A58}\\x{6A59}\\x{6A5F}\\x{6A61}\\x{6A62}\\x{6A66}\\x{6A72}\\x{6A78}\\x{6A7F}' .\n          '\\x{6A80}\\x{6A84}\\x{6A8D}\\x{6A8E}\\x{6A90}\\x{6A97}\\x{6A9C}\\x{6AA0}\\x{6AA2}' .\n          '\\x{6AA3}\\x{6AAA}\\x{6AAC}\\x{6AAE}\\x{6AB3}\\x{6AB8}\\x{6ABB}\\x{6AC1}\\x{6AC2}' .\n          '\\x{6AC3}\\x{6AD1}\\x{6AD3}\\x{6ADA}\\x{6ADB}\\x{6ADE}\\x{6ADF}\\x{6AE8}\\x{6AEA}' .\n          '\\x{6AFA}\\x{6AFB}\\x{6B04}\\x{6B05}\\x{6B0A}\\x{6B12}\\x{6B16}\\x{6B1D}\\x{6B1F}' .\n          '\\x{6B20}\\x{6B21}\\x{6B23}\\x{6B27}\\x{6B32}\\x{6B37}\\x{6B38}\\x{6B39}\\x{6B3A}' .\n          '\\x{6B3D}\\x{6B3E}\\x{6B43}\\x{6B47}\\x{6B49}\\x{6B4C}\\x{6B4E}\\x{6B50}\\x{6B53}' .\n          '\\x{6B54}\\x{6B59}\\x{6B5B}\\x{6B5F}\\x{6B61}\\x{6B62}\\x{6B63}\\x{6B64}\\x{6B66}' .\n          '\\x{6B69}\\x{6B6A}\\x{6B6F}\\x{6B73}\\x{6B74}\\x{6B78}\\x{6B79}\\x{6B7B}\\x{6B7F}' .\n          '\\x{6B80}\\x{6B83}\\x{6B84}\\x{6B86}\\x{6B89}\\x{6B8A}\\x{6B8B}\\x{6B8D}\\x{6B95}' .\n          '\\x{6B96}\\x{6B98}\\x{6B9E}\\x{6BA4}\\x{6BAA}\\x{6BAB}\\x{6BAF}\\x{6BB1}\\x{6BB2}' .\n          '\\x{6BB3}\\x{6BB4}\\x{6BB5}\\x{6BB7}\\x{6BBA}\\x{6BBB}\\x{6BBC}\\x{6BBF}\\x{6BC0}' .\n          '\\x{6BC5}\\x{6BC6}\\x{6BCB}\\x{6BCD}\\x{6BCE}\\x{6BD2}\\x{6BD3}\\x{6BD4}\\x{6BD8}' .\n          '\\x{6BDB}\\x{6BDF}\\x{6BEB}\\x{6BEC}\\x{6BEF}\\x{6BF3}\\x{6C08}\\x{6C0F}\\x{6C11}' .\n          '\\x{6C13}\\x{6C14}\\x{6C17}\\x{6C1B}\\x{6C23}\\x{6C24}\\x{6C34}\\x{6C37}\\x{6C38}' .\n          '\\x{6C3E}\\x{6C40}\\x{6C41}\\x{6C42}\\x{6C4E}\\x{6C50}\\x{6C55}\\x{6C57}\\x{6C5A}' .\n          '\\x{6C5D}\\x{6C5E}\\x{6C5F}\\x{6C60}\\x{6C62}\\x{6C68}\\x{6C6A}\\x{6C70}\\x{6C72}' .\n          '\\x{6C73}\\x{6C7A}\\x{6C7D}\\x{6C7E}\\x{6C81}\\x{6C82}\\x{6C83}\\x{6C88}\\x{6C8C}' .\n          '\\x{6C8D}\\x{6C90}\\x{6C92}\\x{6C93}\\x{6C96}\\x{6C99}\\x{6C9A}\\x{6C9B}\\x{6CA1}' .\n          '\\x{6CA2}\\x{6CAB}\\x{6CAE}\\x{6CB1}\\x{6CB3}\\x{6CB8}\\x{6CB9}\\x{6CBA}\\x{6CBB}' .\n          '\\x{6CBC}\\x{6CBD}\\x{6CBE}\\x{6CBF}\\x{6CC1}\\x{6CC4}\\x{6CC5}\\x{6CC9}\\x{6CCA}' .\n          '\\x{6CCC}\\x{6CD3}\\x{6CD5}\\x{6CD7}\\x{6CD9}\\x{6CDB}\\x{6CDD}\\x{6CE1}\\x{6CE2}' .\n          '\\x{6CE3}\\x{6CE5}\\x{6CE8}\\x{6CEA}\\x{6CEF}\\x{6CF0}\\x{6CF1}\\x{6CF3}\\x{6D0B}' .\n          '\\x{6D0C}\\x{6D12}\\x{6D17}\\x{6D19}\\x{6D1B}\\x{6D1E}\\x{6D1F}\\x{6D25}\\x{6D29}' .\n          '\\x{6D2A}\\x{6D2B}\\x{6D32}\\x{6D33}\\x{6D35}\\x{6D36}\\x{6D38}\\x{6D3B}\\x{6D3D}' .\n          '\\x{6D3E}\\x{6D41}\\x{6D44}\\x{6D45}\\x{6D59}\\x{6D5A}\\x{6D5C}\\x{6D63}\\x{6D64}' .\n          '\\x{6D66}\\x{6D69}\\x{6D6A}\\x{6D6C}\\x{6D6E}\\x{6D74}\\x{6D77}\\x{6D78}\\x{6D79}' .\n          '\\x{6D85}\\x{6D88}\\x{6D8C}\\x{6D8E}\\x{6D93}\\x{6D95}\\x{6D99}\\x{6D9B}\\x{6D9C}' .\n          '\\x{6DAF}\\x{6DB2}\\x{6DB5}\\x{6DB8}\\x{6DBC}\\x{6DC0}\\x{6DC5}\\x{6DC6}\\x{6DC7}' .\n          '\\x{6DCB}\\x{6DCC}\\x{6DD1}\\x{6DD2}\\x{6DD5}\\x{6DD8}\\x{6DD9}\\x{6DDE}\\x{6DE1}' .\n          '\\x{6DE4}\\x{6DE6}\\x{6DE8}\\x{6DEA}\\x{6DEB}\\x{6DEC}\\x{6DEE}\\x{6DF1}\\x{6DF3}' .\n          '\\x{6DF5}\\x{6DF7}\\x{6DF9}\\x{6DFA}\\x{6DFB}\\x{6E05}\\x{6E07}\\x{6E08}\\x{6E09}' .\n          '\\x{6E0A}\\x{6E0B}\\x{6E13}\\x{6E15}\\x{6E19}\\x{6E1A}\\x{6E1B}\\x{6E1D}\\x{6E1F}' .\n          '\\x{6E20}\\x{6E21}\\x{6E23}\\x{6E24}\\x{6E25}\\x{6E26}\\x{6E29}\\x{6E2B}\\x{6E2C}' .\n          '\\x{6E2D}\\x{6E2E}\\x{6E2F}\\x{6E38}\\x{6E3A}\\x{6E3E}\\x{6E43}\\x{6E4A}\\x{6E4D}' .\n          '\\x{6E4E}\\x{6E56}\\x{6E58}\\x{6E5B}\\x{6E5F}\\x{6E67}\\x{6E6B}\\x{6E6E}\\x{6E6F}' .\n          '\\x{6E72}\\x{6E76}\\x{6E7E}\\x{6E7F}\\x{6E80}\\x{6E82}\\x{6E8C}\\x{6E8F}\\x{6E90}' .\n          '\\x{6E96}\\x{6E98}\\x{6E9C}\\x{6E9D}\\x{6E9F}\\x{6EA2}\\x{6EA5}\\x{6EAA}\\x{6EAF}' .\n          '\\x{6EB2}\\x{6EB6}\\x{6EB7}\\x{6EBA}\\x{6EBD}\\x{6EC2}\\x{6EC4}\\x{6EC5}\\x{6EC9}' .\n          '\\x{6ECB}\\x{6ECC}\\x{6ED1}\\x{6ED3}\\x{6ED4}\\x{6ED5}\\x{6EDD}\\x{6EDE}\\x{6EEC}' .\n          '\\x{6EEF}\\x{6EF2}\\x{6EF4}\\x{6EF7}\\x{6EF8}\\x{6EFE}\\x{6EFF}\\x{6F01}\\x{6F02}' .\n          '\\x{6F06}\\x{6F09}\\x{6F0F}\\x{6F11}\\x{6F13}\\x{6F14}\\x{6F15}\\x{6F20}\\x{6F22}' .\n          '\\x{6F23}\\x{6F2B}\\x{6F2C}\\x{6F31}\\x{6F32}\\x{6F38}\\x{6F3E}\\x{6F3F}\\x{6F41}' .\n          '\\x{6F45}\\x{6F54}\\x{6F58}\\x{6F5B}\\x{6F5C}\\x{6F5F}\\x{6F64}\\x{6F66}\\x{6F6D}' .\n          '\\x{6F6E}\\x{6F6F}\\x{6F70}\\x{6F74}\\x{6F78}\\x{6F7A}\\x{6F7C}\\x{6F80}\\x{6F81}' .\n          '\\x{6F82}\\x{6F84}\\x{6F86}\\x{6F8E}\\x{6F91}\\x{6F97}\\x{6FA1}\\x{6FA3}\\x{6FA4}' .\n          '\\x{6FAA}\\x{6FB1}\\x{6FB3}\\x{6FB9}\\x{6FC0}\\x{6FC1}\\x{6FC2}\\x{6FC3}\\x{6FC6}' .\n          '\\x{6FD4}\\x{6FD5}\\x{6FD8}\\x{6FDB}\\x{6FDF}\\x{6FE0}\\x{6FE1}\\x{6FE4}\\x{6FEB}' .\n          '\\x{6FEC}\\x{6FEE}\\x{6FEF}\\x{6FF1}\\x{6FF3}\\x{6FF6}\\x{6FFA}\\x{6FFE}\\x{7001}' .\n          '\\x{7009}\\x{700B}\\x{700F}\\x{7011}\\x{7015}\\x{7018}\\x{701A}\\x{701B}\\x{701D}' .\n          '\\x{701E}\\x{701F}\\x{7026}\\x{7027}\\x{702C}\\x{7030}\\x{7032}\\x{703E}\\x{704C}' .\n          '\\x{7051}\\x{7058}\\x{7063}\\x{706B}\\x{706F}\\x{7070}\\x{7078}\\x{707C}\\x{707D}' .\n          '\\x{7089}\\x{708A}\\x{708E}\\x{7092}\\x{7099}\\x{70AC}\\x{70AD}\\x{70AE}\\x{70AF}' .\n          '\\x{70B3}\\x{70B8}\\x{70B9}\\x{70BA}\\x{70C8}\\x{70CB}\\x{70CF}\\x{70D9}\\x{70DD}' .\n          '\\x{70DF}\\x{70F1}\\x{70F9}\\x{70FD}\\x{7109}\\x{7114}\\x{7119}\\x{711A}\\x{711C}' .\n          '\\x{7121}\\x{7126}\\x{7136}\\x{713C}\\x{7149}\\x{714C}\\x{714E}\\x{7155}\\x{7156}' .\n          '\\x{7159}\\x{7162}\\x{7164}\\x{7165}\\x{7166}\\x{7167}\\x{7169}\\x{716C}\\x{716E}' .\n          '\\x{717D}\\x{7184}\\x{7188}\\x{718A}\\x{718F}\\x{7194}\\x{7195}\\x{7199}\\x{719F}' .\n          '\\x{71A8}\\x{71AC}\\x{71B1}\\x{71B9}\\x{71BE}\\x{71C3}\\x{71C8}\\x{71C9}\\x{71CE}' .\n          '\\x{71D0}\\x{71D2}\\x{71D4}\\x{71D5}\\x{71D7}\\x{71DF}\\x{71E0}\\x{71E5}\\x{71E6}' .\n          '\\x{71E7}\\x{71EC}\\x{71ED}\\x{71EE}\\x{71F5}\\x{71F9}\\x{71FB}\\x{71FC}\\x{71FF}' .\n          '\\x{7206}\\x{720D}\\x{7210}\\x{721B}\\x{7228}\\x{722A}\\x{722C}\\x{722D}\\x{7230}' .\n          '\\x{7232}\\x{7235}\\x{7236}\\x{723A}\\x{723B}\\x{723C}\\x{723D}\\x{723E}\\x{723F}' .\n          '\\x{7240}\\x{7246}\\x{7247}\\x{7248}\\x{724B}\\x{724C}\\x{7252}\\x{7258}\\x{7259}' .\n          '\\x{725B}\\x{725D}\\x{725F}\\x{7261}\\x{7262}\\x{7267}\\x{7269}\\x{7272}\\x{7274}' .\n          '\\x{7279}\\x{727D}\\x{727E}\\x{7280}\\x{7281}\\x{7282}\\x{7287}\\x{7292}\\x{7296}' .\n          '\\x{72A0}\\x{72A2}\\x{72A7}\\x{72AC}\\x{72AF}\\x{72B2}\\x{72B6}\\x{72B9}\\x{72C2}' .\n          '\\x{72C3}\\x{72C4}\\x{72C6}\\x{72CE}\\x{72D0}\\x{72D2}\\x{72D7}\\x{72D9}\\x{72DB}' .\n          '\\x{72E0}\\x{72E1}\\x{72E2}\\x{72E9}\\x{72EC}\\x{72ED}\\x{72F7}\\x{72F8}\\x{72F9}' .\n          '\\x{72FC}\\x{72FD}\\x{730A}\\x{7316}\\x{7317}\\x{731B}\\x{731C}\\x{731D}\\x{731F}' .\n          '\\x{7325}\\x{7329}\\x{732A}\\x{732B}\\x{732E}\\x{732F}\\x{7334}\\x{7336}\\x{7337}' .\n          '\\x{733E}\\x{733F}\\x{7344}\\x{7345}\\x{734E}\\x{734F}\\x{7357}\\x{7363}\\x{7368}' .\n          '\\x{736A}\\x{7370}\\x{7372}\\x{7375}\\x{7378}\\x{737A}\\x{737B}\\x{7384}\\x{7387}' .\n          '\\x{7389}\\x{738B}\\x{7396}\\x{73A9}\\x{73B2}\\x{73B3}\\x{73BB}\\x{73C0}\\x{73C2}' .\n          '\\x{73C8}\\x{73CA}\\x{73CD}\\x{73CE}\\x{73DE}\\x{73E0}\\x{73E5}\\x{73EA}\\x{73ED}' .\n          '\\x{73EE}\\x{73F1}\\x{73F8}\\x{73FE}\\x{7403}\\x{7405}\\x{7406}\\x{7409}\\x{7422}' .\n          '\\x{7425}\\x{7432}\\x{7433}\\x{7434}\\x{7435}\\x{7436}\\x{743A}\\x{743F}\\x{7441}' .\n          '\\x{7455}\\x{7459}\\x{745A}\\x{745B}\\x{745C}\\x{745E}\\x{745F}\\x{7460}\\x{7463}' .\n          '\\x{7464}\\x{7469}\\x{746A}\\x{746F}\\x{7470}\\x{7473}\\x{7476}\\x{747E}\\x{7483}' .\n          '\\x{748B}\\x{749E}\\x{74A2}\\x{74A7}\\x{74B0}\\x{74BD}\\x{74CA}\\x{74CF}\\x{74D4}' .\n          '\\x{74DC}\\x{74E0}\\x{74E2}\\x{74E3}\\x{74E6}\\x{74E7}\\x{74E9}\\x{74EE}\\x{74F0}' .\n          '\\x{74F1}\\x{74F2}\\x{74F6}\\x{74F7}\\x{74F8}\\x{7503}\\x{7504}\\x{7505}\\x{750C}' .\n          '\\x{750D}\\x{750E}\\x{7511}\\x{7513}\\x{7515}\\x{7518}\\x{751A}\\x{751C}\\x{751E}' .\n          '\\x{751F}\\x{7523}\\x{7525}\\x{7526}\\x{7528}\\x{752B}\\x{752C}\\x{7530}\\x{7531}' .\n          '\\x{7532}\\x{7533}\\x{7537}\\x{7538}\\x{753A}\\x{753B}\\x{753C}\\x{7544}\\x{7546}' .\n          '\\x{7549}\\x{754A}\\x{754B}\\x{754C}\\x{754D}\\x{754F}\\x{7551}\\x{7554}\\x{7559}' .\n          '\\x{755A}\\x{755B}\\x{755C}\\x{755D}\\x{7560}\\x{7562}\\x{7564}\\x{7565}\\x{7566}' .\n          '\\x{7567}\\x{7569}\\x{756A}\\x{756B}\\x{756D}\\x{7570}\\x{7573}\\x{7574}\\x{7576}' .\n          '\\x{7577}\\x{7578}\\x{757F}\\x{7582}\\x{7586}\\x{7587}\\x{7589}\\x{758A}\\x{758B}' .\n          '\\x{758E}\\x{758F}\\x{7591}\\x{7594}\\x{759A}\\x{759D}\\x{75A3}\\x{75A5}\\x{75AB}' .\n          '\\x{75B1}\\x{75B2}\\x{75B3}\\x{75B5}\\x{75B8}\\x{75B9}\\x{75BC}\\x{75BD}\\x{75BE}' .\n          '\\x{75C2}\\x{75C3}\\x{75C5}\\x{75C7}\\x{75CA}\\x{75CD}\\x{75D2}\\x{75D4}\\x{75D5}' .\n          '\\x{75D8}\\x{75D9}\\x{75DB}\\x{75DE}\\x{75E2}\\x{75E3}\\x{75E9}\\x{75F0}\\x{75F2}' .\n          '\\x{75F3}\\x{75F4}\\x{75FA}\\x{75FC}\\x{75FE}\\x{75FF}\\x{7601}\\x{7609}\\x{760B}' .\n          '\\x{760D}\\x{761F}\\x{7620}\\x{7621}\\x{7622}\\x{7624}\\x{7627}\\x{7630}\\x{7634}' .\n          '\\x{763B}\\x{7642}\\x{7646}\\x{7647}\\x{7648}\\x{764C}\\x{7652}\\x{7656}\\x{7658}' .\n          '\\x{765C}\\x{7661}\\x{7662}\\x{7667}\\x{7668}\\x{7669}\\x{766A}\\x{766C}\\x{7670}' .\n          '\\x{7672}\\x{7676}\\x{7678}\\x{767A}\\x{767B}\\x{767C}\\x{767D}\\x{767E}\\x{7680}' .\n          '\\x{7683}\\x{7684}\\x{7686}\\x{7687}\\x{7688}\\x{768B}\\x{768E}\\x{7690}\\x{7693}' .\n          '\\x{7696}\\x{7699}\\x{769A}\\x{76AE}\\x{76B0}\\x{76B4}\\x{76B7}\\x{76B8}\\x{76B9}' .\n          '\\x{76BA}\\x{76BF}\\x{76C2}\\x{76C3}\\x{76C6}\\x{76C8}\\x{76CA}\\x{76CD}\\x{76D2}' .\n          '\\x{76D6}\\x{76D7}\\x{76DB}\\x{76DC}\\x{76DE}\\x{76DF}\\x{76E1}\\x{76E3}\\x{76E4}' .\n          '\\x{76E5}\\x{76E7}\\x{76EA}\\x{76EE}\\x{76F2}\\x{76F4}\\x{76F8}\\x{76FB}\\x{76FE}' .\n          '\\x{7701}\\x{7704}\\x{7707}\\x{7708}\\x{7709}\\x{770B}\\x{770C}\\x{771B}\\x{771E}' .\n          '\\x{771F}\\x{7720}\\x{7724}\\x{7725}\\x{7726}\\x{7729}\\x{7737}\\x{7738}\\x{773A}' .\n          '\\x{773C}\\x{7740}\\x{7747}\\x{775A}\\x{775B}\\x{7761}\\x{7763}\\x{7765}\\x{7766}' .\n          '\\x{7768}\\x{776B}\\x{7779}\\x{777E}\\x{777F}\\x{778B}\\x{778E}\\x{7791}\\x{779E}' .\n          '\\x{77A0}\\x{77A5}\\x{77AC}\\x{77AD}\\x{77B0}\\x{77B3}\\x{77B6}\\x{77B9}\\x{77BB}' .\n          '\\x{77BC}\\x{77BD}\\x{77BF}\\x{77C7}\\x{77CD}\\x{77D7}\\x{77DA}\\x{77DB}\\x{77DC}' .\n          '\\x{77E2}\\x{77E3}\\x{77E5}\\x{77E7}\\x{77E9}\\x{77ED}\\x{77EE}\\x{77EF}\\x{77F3}' .\n          '\\x{77FC}\\x{7802}\\x{780C}\\x{7812}\\x{7814}\\x{7815}\\x{7820}\\x{7825}\\x{7826}' .\n          '\\x{7827}\\x{7832}\\x{7834}\\x{783A}\\x{783F}\\x{7845}\\x{785D}\\x{786B}\\x{786C}' .\n          '\\x{786F}\\x{7872}\\x{7874}\\x{787C}\\x{7881}\\x{7886}\\x{7887}\\x{788C}\\x{788D}' .\n          '\\x{788E}\\x{7891}\\x{7893}\\x{7895}\\x{7897}\\x{789A}\\x{78A3}\\x{78A7}\\x{78A9}' .\n          '\\x{78AA}\\x{78AF}\\x{78B5}\\x{78BA}\\x{78BC}\\x{78BE}\\x{78C1}\\x{78C5}\\x{78C6}' .\n          '\\x{78CA}\\x{78CB}\\x{78D0}\\x{78D1}\\x{78D4}\\x{78DA}\\x{78E7}\\x{78E8}\\x{78EC}' .\n          '\\x{78EF}\\x{78F4}\\x{78FD}\\x{7901}\\x{7907}\\x{790E}\\x{7911}\\x{7912}\\x{7919}' .\n          '\\x{7926}\\x{792A}\\x{792B}\\x{792C}\\x{793A}\\x{793C}\\x{793E}\\x{7940}\\x{7941}' .\n          '\\x{7947}\\x{7948}\\x{7949}\\x{7950}\\x{7953}\\x{7955}\\x{7956}\\x{7957}\\x{795A}' .\n          '\\x{795D}\\x{795E}\\x{795F}\\x{7960}\\x{7962}\\x{7965}\\x{7968}\\x{796D}\\x{7977}' .\n          '\\x{797A}\\x{797F}\\x{7980}\\x{7981}\\x{7984}\\x{7985}\\x{798A}\\x{798D}\\x{798E}' .\n          '\\x{798F}\\x{799D}\\x{79A6}\\x{79A7}\\x{79AA}\\x{79AE}\\x{79B0}\\x{79B3}\\x{79B9}' .\n          '\\x{79BA}\\x{79BD}\\x{79BE}\\x{79BF}\\x{79C0}\\x{79C1}\\x{79C9}\\x{79CB}\\x{79D1}' .\n          '\\x{79D2}\\x{79D5}\\x{79D8}\\x{79DF}\\x{79E1}\\x{79E3}\\x{79E4}\\x{79E6}\\x{79E7}' .\n          '\\x{79E9}\\x{79EC}\\x{79F0}\\x{79FB}\\x{7A00}\\x{7A08}\\x{7A0B}\\x{7A0D}\\x{7A0E}' .\n          '\\x{7A14}\\x{7A17}\\x{7A18}\\x{7A19}\\x{7A1A}\\x{7A1C}\\x{7A1F}\\x{7A20}\\x{7A2E}' .\n          '\\x{7A31}\\x{7A32}\\x{7A37}\\x{7A3B}\\x{7A3C}\\x{7A3D}\\x{7A3E}\\x{7A3F}\\x{7A40}' .\n          '\\x{7A42}\\x{7A43}\\x{7A46}\\x{7A49}\\x{7A4D}\\x{7A4E}\\x{7A4F}\\x{7A50}\\x{7A57}' .\n          '\\x{7A61}\\x{7A62}\\x{7A63}\\x{7A69}\\x{7A6B}\\x{7A70}\\x{7A74}\\x{7A76}\\x{7A79}' .\n          '\\x{7A7A}\\x{7A7D}\\x{7A7F}\\x{7A81}\\x{7A83}\\x{7A84}\\x{7A88}\\x{7A92}\\x{7A93}' .\n          '\\x{7A95}\\x{7A96}\\x{7A97}\\x{7A98}\\x{7A9F}\\x{7AA9}\\x{7AAA}\\x{7AAE}\\x{7AAF}' .\n          '\\x{7AB0}\\x{7AB6}\\x{7ABA}\\x{7ABF}\\x{7AC3}\\x{7AC4}\\x{7AC5}\\x{7AC7}\\x{7AC8}' .\n          '\\x{7ACA}\\x{7ACB}\\x{7ACD}\\x{7ACF}\\x{7AD2}\\x{7AD3}\\x{7AD5}\\x{7AD9}\\x{7ADA}' .\n          '\\x{7ADC}\\x{7ADD}\\x{7ADF}\\x{7AE0}\\x{7AE1}\\x{7AE2}\\x{7AE3}\\x{7AE5}\\x{7AE6}' .\n          '\\x{7AEA}\\x{7AED}\\x{7AEF}\\x{7AF0}\\x{7AF6}\\x{7AF8}\\x{7AF9}\\x{7AFA}\\x{7AFF}' .\n          '\\x{7B02}\\x{7B04}\\x{7B06}\\x{7B08}\\x{7B0A}\\x{7B0B}\\x{7B0F}\\x{7B11}\\x{7B18}' .\n          '\\x{7B19}\\x{7B1B}\\x{7B1E}\\x{7B20}\\x{7B25}\\x{7B26}\\x{7B28}\\x{7B2C}\\x{7B33}' .\n          '\\x{7B35}\\x{7B36}\\x{7B39}\\x{7B45}\\x{7B46}\\x{7B48}\\x{7B49}\\x{7B4B}\\x{7B4C}' .\n          '\\x{7B4D}\\x{7B4F}\\x{7B50}\\x{7B51}\\x{7B52}\\x{7B54}\\x{7B56}\\x{7B5D}\\x{7B65}' .\n          '\\x{7B67}\\x{7B6C}\\x{7B6E}\\x{7B70}\\x{7B71}\\x{7B74}\\x{7B75}\\x{7B7A}\\x{7B86}' .\n          '\\x{7B87}\\x{7B8B}\\x{7B8D}\\x{7B8F}\\x{7B92}\\x{7B94}\\x{7B95}\\x{7B97}\\x{7B98}' .\n          '\\x{7B99}\\x{7B9A}\\x{7B9C}\\x{7B9D}\\x{7B9F}\\x{7BA1}\\x{7BAA}\\x{7BAD}\\x{7BB1}' .\n          '\\x{7BB4}\\x{7BB8}\\x{7BC0}\\x{7BC1}\\x{7BC4}\\x{7BC6}\\x{7BC7}\\x{7BC9}\\x{7BCB}' .\n          '\\x{7BCC}\\x{7BCF}\\x{7BDD}\\x{7BE0}\\x{7BE4}\\x{7BE5}\\x{7BE6}\\x{7BE9}\\x{7BED}' .\n          '\\x{7BF3}\\x{7BF6}\\x{7BF7}\\x{7C00}\\x{7C07}\\x{7C0D}\\x{7C11}\\x{7C12}\\x{7C13}' .\n          '\\x{7C14}\\x{7C17}\\x{7C1F}\\x{7C21}\\x{7C23}\\x{7C27}\\x{7C2A}\\x{7C2B}\\x{7C37}' .\n          '\\x{7C38}\\x{7C3D}\\x{7C3E}\\x{7C3F}\\x{7C40}\\x{7C43}\\x{7C4C}\\x{7C4D}\\x{7C4F}' .\n          '\\x{7C50}\\x{7C54}\\x{7C56}\\x{7C58}\\x{7C5F}\\x{7C60}\\x{7C64}\\x{7C65}\\x{7C6C}' .\n          '\\x{7C73}\\x{7C75}\\x{7C7E}\\x{7C81}\\x{7C82}\\x{7C83}\\x{7C89}\\x{7C8B}\\x{7C8D}' .\n          '\\x{7C90}\\x{7C92}\\x{7C95}\\x{7C97}\\x{7C98}\\x{7C9B}\\x{7C9F}\\x{7CA1}\\x{7CA2}' .\n          '\\x{7CA4}\\x{7CA5}\\x{7CA7}\\x{7CA8}\\x{7CAB}\\x{7CAD}\\x{7CAE}\\x{7CB1}\\x{7CB2}' .\n          '\\x{7CB3}\\x{7CB9}\\x{7CBD}\\x{7CBE}\\x{7CC0}\\x{7CC2}\\x{7CC5}\\x{7CCA}\\x{7CCE}' .\n          '\\x{7CD2}\\x{7CD6}\\x{7CD8}\\x{7CDC}\\x{7CDE}\\x{7CDF}\\x{7CE0}\\x{7CE2}\\x{7CE7}' .\n          '\\x{7CEF}\\x{7CF2}\\x{7CF4}\\x{7CF6}\\x{7CF8}\\x{7CFA}\\x{7CFB}\\x{7CFE}\\x{7D00}' .\n          '\\x{7D02}\\x{7D04}\\x{7D05}\\x{7D06}\\x{7D0A}\\x{7D0B}\\x{7D0D}\\x{7D10}\\x{7D14}' .\n          '\\x{7D15}\\x{7D17}\\x{7D18}\\x{7D19}\\x{7D1A}\\x{7D1B}\\x{7D1C}\\x{7D20}\\x{7D21}' .\n          '\\x{7D22}\\x{7D2B}\\x{7D2C}\\x{7D2E}\\x{7D2F}\\x{7D30}\\x{7D32}\\x{7D33}\\x{7D35}' .\n          '\\x{7D39}\\x{7D3A}\\x{7D3F}\\x{7D42}\\x{7D43}\\x{7D44}\\x{7D45}\\x{7D46}\\x{7D4B}' .\n          '\\x{7D4C}\\x{7D4E}\\x{7D4F}\\x{7D50}\\x{7D56}\\x{7D5B}\\x{7D5E}\\x{7D61}\\x{7D62}' .\n          '\\x{7D63}\\x{7D66}\\x{7D68}\\x{7D6E}\\x{7D71}\\x{7D72}\\x{7D73}\\x{7D75}\\x{7D76}' .\n          '\\x{7D79}\\x{7D7D}\\x{7D89}\\x{7D8F}\\x{7D93}\\x{7D99}\\x{7D9A}\\x{7D9B}\\x{7D9C}' .\n          '\\x{7D9F}\\x{7DA2}\\x{7DA3}\\x{7DAB}\\x{7DAC}\\x{7DAD}\\x{7DAE}\\x{7DAF}\\x{7DB0}' .\n          '\\x{7DB1}\\x{7DB2}\\x{7DB4}\\x{7DB5}\\x{7DB8}\\x{7DBA}\\x{7DBB}\\x{7DBD}\\x{7DBE}' .\n          '\\x{7DBF}\\x{7DC7}\\x{7DCA}\\x{7DCB}\\x{7DCF}\\x{7DD1}\\x{7DD2}\\x{7DD5}\\x{7DD8}' .\n          '\\x{7DDA}\\x{7DDC}\\x{7DDD}\\x{7DDE}\\x{7DE0}\\x{7DE1}\\x{7DE4}\\x{7DE8}\\x{7DE9}' .\n          '\\x{7DEC}\\x{7DEF}\\x{7DF2}\\x{7DF4}\\x{7DFB}\\x{7E01}\\x{7E04}\\x{7E05}\\x{7E09}' .\n          '\\x{7E0A}\\x{7E0B}\\x{7E12}\\x{7E1B}\\x{7E1E}\\x{7E1F}\\x{7E21}\\x{7E22}\\x{7E23}' .\n          '\\x{7E26}\\x{7E2B}\\x{7E2E}\\x{7E31}\\x{7E32}\\x{7E35}\\x{7E37}\\x{7E39}\\x{7E3A}' .\n          '\\x{7E3B}\\x{7E3D}\\x{7E3E}\\x{7E41}\\x{7E43}\\x{7E46}\\x{7E4A}\\x{7E4B}\\x{7E4D}' .\n          '\\x{7E54}\\x{7E55}\\x{7E56}\\x{7E59}\\x{7E5A}\\x{7E5D}\\x{7E5E}\\x{7E66}\\x{7E67}' .\n          '\\x{7E69}\\x{7E6A}\\x{7E6D}\\x{7E70}\\x{7E79}\\x{7E7B}\\x{7E7C}\\x{7E7D}\\x{7E7F}' .\n          '\\x{7E82}\\x{7E83}\\x{7E88}\\x{7E89}\\x{7E8C}\\x{7E8E}\\x{7E8F}\\x{7E90}\\x{7E92}' .\n          '\\x{7E93}\\x{7E94}\\x{7E96}\\x{7E9B}\\x{7E9C}\\x{7F36}\\x{7F38}\\x{7F3A}\\x{7F45}' .\n          '\\x{7F4C}\\x{7F4D}\\x{7F4E}\\x{7F50}\\x{7F51}\\x{7F54}\\x{7F55}\\x{7F58}\\x{7F5F}' .\n          '\\x{7F60}\\x{7F67}\\x{7F68}\\x{7F69}\\x{7F6A}\\x{7F6B}\\x{7F6E}\\x{7F70}\\x{7F72}' .\n          '\\x{7F75}\\x{7F77}\\x{7F78}\\x{7F79}\\x{7F82}\\x{7F83}\\x{7F85}\\x{7F86}\\x{7F87}' .\n          '\\x{7F88}\\x{7F8A}\\x{7F8C}\\x{7F8E}\\x{7F94}\\x{7F9A}\\x{7F9D}\\x{7F9E}\\x{7FA3}' .\n          '\\x{7FA4}\\x{7FA8}\\x{7FA9}\\x{7FAE}\\x{7FAF}\\x{7FB2}\\x{7FB6}\\x{7FB8}\\x{7FB9}' .\n          '\\x{7FBD}\\x{7FC1}\\x{7FC5}\\x{7FC6}\\x{7FCA}\\x{7FCC}\\x{7FD2}\\x{7FD4}\\x{7FD5}' .\n          '\\x{7FE0}\\x{7FE1}\\x{7FE6}\\x{7FE9}\\x{7FEB}\\x{7FF0}\\x{7FF3}\\x{7FF9}\\x{7FFB}' .\n          '\\x{7FFC}\\x{8000}\\x{8001}\\x{8003}\\x{8004}\\x{8005}\\x{8006}\\x{800B}\\x{800C}' .\n          '\\x{8010}\\x{8012}\\x{8015}\\x{8017}\\x{8018}\\x{8019}\\x{801C}\\x{8021}\\x{8028}' .\n          '\\x{8033}\\x{8036}\\x{803B}\\x{803D}\\x{803F}\\x{8046}\\x{804A}\\x{8052}\\x{8056}' .\n          '\\x{8058}\\x{805A}\\x{805E}\\x{805F}\\x{8061}\\x{8062}\\x{8068}\\x{806F}\\x{8070}' .\n          '\\x{8072}\\x{8073}\\x{8074}\\x{8076}\\x{8077}\\x{8079}\\x{807D}\\x{807E}\\x{807F}' .\n          '\\x{8084}\\x{8085}\\x{8086}\\x{8087}\\x{8089}\\x{808B}\\x{808C}\\x{8093}\\x{8096}' .\n          '\\x{8098}\\x{809A}\\x{809B}\\x{809D}\\x{80A1}\\x{80A2}\\x{80A5}\\x{80A9}\\x{80AA}' .\n          '\\x{80AC}\\x{80AD}\\x{80AF}\\x{80B1}\\x{80B2}\\x{80B4}\\x{80BA}\\x{80C3}\\x{80C4}' .\n          '\\x{80C6}\\x{80CC}\\x{80CE}\\x{80D6}\\x{80D9}\\x{80DA}\\x{80DB}\\x{80DD}\\x{80DE}' .\n          '\\x{80E1}\\x{80E4}\\x{80E5}\\x{80EF}\\x{80F1}\\x{80F4}\\x{80F8}\\x{80FC}\\x{80FD}' .\n          '\\x{8102}\\x{8105}\\x{8106}\\x{8107}\\x{8108}\\x{8109}\\x{810A}\\x{811A}\\x{811B}' .\n          '\\x{8123}\\x{8129}\\x{812F}\\x{8131}\\x{8133}\\x{8139}\\x{813E}\\x{8146}\\x{814B}' .\n          '\\x{814E}\\x{8150}\\x{8151}\\x{8153}\\x{8154}\\x{8155}\\x{815F}\\x{8165}\\x{8166}' .\n          '\\x{816B}\\x{816E}\\x{8170}\\x{8171}\\x{8174}\\x{8178}\\x{8179}\\x{817A}\\x{817F}' .\n          '\\x{8180}\\x{8182}\\x{8183}\\x{8188}\\x{818A}\\x{818F}\\x{8193}\\x{8195}\\x{819A}' .\n          '\\x{819C}\\x{819D}\\x{81A0}\\x{81A3}\\x{81A4}\\x{81A8}\\x{81A9}\\x{81B0}\\x{81B3}' .\n          '\\x{81B5}\\x{81B8}\\x{81BA}\\x{81BD}\\x{81BE}\\x{81BF}\\x{81C0}\\x{81C2}\\x{81C6}' .\n          '\\x{81C8}\\x{81C9}\\x{81CD}\\x{81D1}\\x{81D3}\\x{81D8}\\x{81D9}\\x{81DA}\\x{81DF}' .\n          '\\x{81E0}\\x{81E3}\\x{81E5}\\x{81E7}\\x{81E8}\\x{81EA}\\x{81ED}\\x{81F3}\\x{81F4}' .\n          '\\x{81FA}\\x{81FB}\\x{81FC}\\x{81FE}\\x{8201}\\x{8202}\\x{8205}\\x{8207}\\x{8208}' .\n          '\\x{8209}\\x{820A}\\x{820C}\\x{820D}\\x{820E}\\x{8210}\\x{8212}\\x{8216}\\x{8217}' .\n          '\\x{8218}\\x{821B}\\x{821C}\\x{821E}\\x{821F}\\x{8229}\\x{822A}\\x{822B}\\x{822C}' .\n          '\\x{822E}\\x{8233}\\x{8235}\\x{8236}\\x{8237}\\x{8238}\\x{8239}\\x{8240}\\x{8247}' .\n          '\\x{8258}\\x{8259}\\x{825A}\\x{825D}\\x{825F}\\x{8262}\\x{8264}\\x{8266}\\x{8268}' .\n          '\\x{826A}\\x{826B}\\x{826E}\\x{826F}\\x{8271}\\x{8272}\\x{8276}\\x{8277}\\x{8278}' .\n          '\\x{827E}\\x{828B}\\x{828D}\\x{8292}\\x{8299}\\x{829D}\\x{829F}\\x{82A5}\\x{82A6}' .\n          '\\x{82AB}\\x{82AC}\\x{82AD}\\x{82AF}\\x{82B1}\\x{82B3}\\x{82B8}\\x{82B9}\\x{82BB}' .\n          '\\x{82BD}\\x{82C5}\\x{82D1}\\x{82D2}\\x{82D3}\\x{82D4}\\x{82D7}\\x{82D9}\\x{82DB}' .\n          '\\x{82DC}\\x{82DE}\\x{82DF}\\x{82E1}\\x{82E3}\\x{82E5}\\x{82E6}\\x{82E7}\\x{82EB}' .\n          '\\x{82F1}\\x{82F3}\\x{82F4}\\x{82F9}\\x{82FA}\\x{82FB}\\x{8302}\\x{8303}\\x{8304}' .\n          '\\x{8305}\\x{8306}\\x{8309}\\x{830E}\\x{8316}\\x{8317}\\x{8318}\\x{831C}\\x{8323}' .\n          '\\x{8328}\\x{832B}\\x{832F}\\x{8331}\\x{8332}\\x{8334}\\x{8335}\\x{8336}\\x{8338}' .\n          '\\x{8339}\\x{8340}\\x{8345}\\x{8349}\\x{834A}\\x{834F}\\x{8350}\\x{8352}\\x{8358}' .\n          '\\x{8373}\\x{8375}\\x{8377}\\x{837B}\\x{837C}\\x{8385}\\x{8387}\\x{8389}\\x{838A}' .\n          '\\x{838E}\\x{8393}\\x{8396}\\x{839A}\\x{839E}\\x{839F}\\x{83A0}\\x{83A2}\\x{83A8}' .\n          '\\x{83AA}\\x{83AB}\\x{83B1}\\x{83B5}\\x{83BD}\\x{83C1}\\x{83C5}\\x{83CA}\\x{83CC}' .\n          '\\x{83CE}\\x{83D3}\\x{83D6}\\x{83D8}\\x{83DC}\\x{83DF}\\x{83E0}\\x{83E9}\\x{83EB}' .\n          '\\x{83EF}\\x{83F0}\\x{83F1}\\x{83F2}\\x{83F4}\\x{83F7}\\x{83FB}\\x{83FD}\\x{8403}' .\n          '\\x{8404}\\x{8407}\\x{840B}\\x{840C}\\x{840D}\\x{840E}\\x{8413}\\x{8420}\\x{8422}' .\n          '\\x{8429}\\x{842A}\\x{842C}\\x{8431}\\x{8435}\\x{8438}\\x{843C}\\x{843D}\\x{8446}' .\n          '\\x{8449}\\x{844E}\\x{8457}\\x{845B}\\x{8461}\\x{8462}\\x{8463}\\x{8466}\\x{8469}' .\n          '\\x{846B}\\x{846C}\\x{846D}\\x{846E}\\x{846F}\\x{8471}\\x{8475}\\x{8477}\\x{8479}' .\n          '\\x{847A}\\x{8482}\\x{8484}\\x{848B}\\x{8490}\\x{8494}\\x{8499}\\x{849C}\\x{849F}' .\n          '\\x{84A1}\\x{84AD}\\x{84B2}\\x{84B8}\\x{84B9}\\x{84BB}\\x{84BC}\\x{84BF}\\x{84C1}' .\n          '\\x{84C4}\\x{84C6}\\x{84C9}\\x{84CA}\\x{84CB}\\x{84CD}\\x{84D0}\\x{84D1}\\x{84D6}' .\n          '\\x{84D9}\\x{84DA}\\x{84EC}\\x{84EE}\\x{84F4}\\x{84FC}\\x{84FF}\\x{8500}\\x{8506}' .\n          '\\x{8511}\\x{8513}\\x{8514}\\x{8515}\\x{8517}\\x{8518}\\x{851A}\\x{851F}\\x{8521}' .\n          '\\x{8526}\\x{852C}\\x{852D}\\x{8535}\\x{853D}\\x{8540}\\x{8541}\\x{8543}\\x{8548}' .\n          '\\x{8549}\\x{854A}\\x{854B}\\x{854E}\\x{8555}\\x{8557}\\x{8558}\\x{855A}\\x{8563}' .\n          '\\x{8568}\\x{8569}\\x{856A}\\x{856D}\\x{8577}\\x{857E}\\x{8580}\\x{8584}\\x{8587}' .\n          '\\x{8588}\\x{858A}\\x{8590}\\x{8591}\\x{8594}\\x{8597}\\x{8599}\\x{859B}\\x{859C}' .\n          '\\x{85A4}\\x{85A6}\\x{85A8}\\x{85A9}\\x{85AA}\\x{85AB}\\x{85AC}\\x{85AE}\\x{85AF}' .\n          '\\x{85B9}\\x{85BA}\\x{85C1}\\x{85C9}\\x{85CD}\\x{85CF}\\x{85D0}\\x{85D5}\\x{85DC}' .\n          '\\x{85DD}\\x{85E4}\\x{85E5}\\x{85E9}\\x{85EA}\\x{85F7}\\x{85F9}\\x{85FA}\\x{85FB}' .\n          '\\x{85FE}\\x{8602}\\x{8606}\\x{8607}\\x{860A}\\x{860B}\\x{8613}\\x{8616}\\x{8617}' .\n          '\\x{861A}\\x{8622}\\x{862D}\\x{862F}\\x{8630}\\x{863F}\\x{864D}\\x{864E}\\x{8650}' .\n          '\\x{8654}\\x{8655}\\x{865A}\\x{865C}\\x{865E}\\x{865F}\\x{8667}\\x{866B}\\x{8671}' .\n          '\\x{8679}\\x{867B}\\x{868A}\\x{868B}\\x{868C}\\x{8693}\\x{8695}\\x{86A3}\\x{86A4}' .\n          '\\x{86A9}\\x{86AA}\\x{86AB}\\x{86AF}\\x{86B0}\\x{86B6}\\x{86C4}\\x{86C6}\\x{86C7}' .\n          '\\x{86C9}\\x{86CB}\\x{86CD}\\x{86CE}\\x{86D4}\\x{86D9}\\x{86DB}\\x{86DE}\\x{86DF}' .\n          '\\x{86E4}\\x{86E9}\\x{86EC}\\x{86ED}\\x{86EE}\\x{86EF}\\x{86F8}\\x{86F9}\\x{86FB}' .\n          '\\x{86FE}\\x{8700}\\x{8702}\\x{8703}\\x{8706}\\x{8708}\\x{8709}\\x{870A}\\x{870D}' .\n          '\\x{8711}\\x{8712}\\x{8718}\\x{871A}\\x{871C}\\x{8725}\\x{8729}\\x{8734}\\x{8737}' .\n          '\\x{873B}\\x{873F}\\x{8749}\\x{874B}\\x{874C}\\x{874E}\\x{8753}\\x{8755}\\x{8757}' .\n          '\\x{8759}\\x{875F}\\x{8760}\\x{8763}\\x{8766}\\x{8768}\\x{876A}\\x{876E}\\x{8774}' .\n          '\\x{8776}\\x{8778}\\x{877F}\\x{8782}\\x{878D}\\x{879F}\\x{87A2}\\x{87AB}\\x{87AF}' .\n          '\\x{87B3}\\x{87BA}\\x{87BB}\\x{87BD}\\x{87C0}\\x{87C4}\\x{87C6}\\x{87C7}\\x{87CB}' .\n          '\\x{87D0}\\x{87D2}\\x{87E0}\\x{87EF}\\x{87F2}\\x{87F6}\\x{87F7}\\x{87F9}\\x{87FB}' .\n          '\\x{87FE}\\x{8805}\\x{880D}\\x{880E}\\x{880F}\\x{8811}\\x{8815}\\x{8816}\\x{8821}' .\n          '\\x{8822}\\x{8823}\\x{8827}\\x{8831}\\x{8836}\\x{8839}\\x{883B}\\x{8840}\\x{8842}' .\n          '\\x{8844}\\x{8846}\\x{884C}\\x{884D}\\x{8852}\\x{8853}\\x{8857}\\x{8859}\\x{885B}' .\n          '\\x{885D}\\x{885E}\\x{8861}\\x{8862}\\x{8863}\\x{8868}\\x{886B}\\x{8870}\\x{8872}' .\n          '\\x{8875}\\x{8877}\\x{887D}\\x{887E}\\x{887F}\\x{8881}\\x{8882}\\x{8888}\\x{888B}' .\n          '\\x{888D}\\x{8892}\\x{8896}\\x{8897}\\x{8899}\\x{889E}\\x{88A2}\\x{88A4}\\x{88AB}' .\n          '\\x{88AE}\\x{88B0}\\x{88B1}\\x{88B4}\\x{88B5}\\x{88B7}\\x{88BF}\\x{88C1}\\x{88C2}' .\n          '\\x{88C3}\\x{88C4}\\x{88C5}\\x{88CF}\\x{88D4}\\x{88D5}\\x{88D8}\\x{88D9}\\x{88DC}' .\n          '\\x{88DD}\\x{88DF}\\x{88E1}\\x{88E8}\\x{88F2}\\x{88F3}\\x{88F4}\\x{88F8}\\x{88F9}' .\n          '\\x{88FC}\\x{88FD}\\x{88FE}\\x{8902}\\x{8904}\\x{8907}\\x{890A}\\x{890C}\\x{8910}' .\n          '\\x{8912}\\x{8913}\\x{891D}\\x{891E}\\x{8925}\\x{892A}\\x{892B}\\x{8936}\\x{8938}' .\n          '\\x{893B}\\x{8941}\\x{8943}\\x{8944}\\x{894C}\\x{894D}\\x{8956}\\x{895E}\\x{895F}' .\n          '\\x{8960}\\x{8964}\\x{8966}\\x{896A}\\x{896D}\\x{896F}\\x{8972}\\x{8974}\\x{8977}' .\n          '\\x{897E}\\x{897F}\\x{8981}\\x{8983}\\x{8986}\\x{8987}\\x{8988}\\x{898A}\\x{898B}' .\n          '\\x{898F}\\x{8993}\\x{8996}\\x{8997}\\x{8998}\\x{899A}\\x{89A1}\\x{89A6}\\x{89A7}' .\n          '\\x{89A9}\\x{89AA}\\x{89AC}\\x{89AF}\\x{89B2}\\x{89B3}\\x{89BA}\\x{89BD}\\x{89BF}' .\n          '\\x{89C0}\\x{89D2}\\x{89DA}\\x{89DC}\\x{89DD}\\x{89E3}\\x{89E6}\\x{89E7}\\x{89F4}' .\n          '\\x{89F8}\\x{8A00}\\x{8A02}\\x{8A03}\\x{8A08}\\x{8A0A}\\x{8A0C}\\x{8A0E}\\x{8A10}' .\n          '\\x{8A13}\\x{8A16}\\x{8A17}\\x{8A18}\\x{8A1B}\\x{8A1D}\\x{8A1F}\\x{8A23}\\x{8A25}' .\n          '\\x{8A2A}\\x{8A2D}\\x{8A31}\\x{8A33}\\x{8A34}\\x{8A36}\\x{8A3A}\\x{8A3B}\\x{8A3C}' .\n          '\\x{8A41}\\x{8A46}\\x{8A48}\\x{8A50}\\x{8A51}\\x{8A52}\\x{8A54}\\x{8A55}\\x{8A5B}' .\n          '\\x{8A5E}\\x{8A60}\\x{8A62}\\x{8A63}\\x{8A66}\\x{8A69}\\x{8A6B}\\x{8A6C}\\x{8A6D}' .\n          '\\x{8A6E}\\x{8A70}\\x{8A71}\\x{8A72}\\x{8A73}\\x{8A7C}\\x{8A82}\\x{8A84}\\x{8A85}' .\n          '\\x{8A87}\\x{8A89}\\x{8A8C}\\x{8A8D}\\x{8A91}\\x{8A93}\\x{8A95}\\x{8A98}\\x{8A9A}' .\n          '\\x{8A9E}\\x{8AA0}\\x{8AA1}\\x{8AA3}\\x{8AA4}\\x{8AA5}\\x{8AA6}\\x{8AA8}\\x{8AAC}' .\n          '\\x{8AAD}\\x{8AB0}\\x{8AB2}\\x{8AB9}\\x{8ABC}\\x{8ABF}\\x{8AC2}\\x{8AC4}\\x{8AC7}' .\n          '\\x{8ACB}\\x{8ACC}\\x{8ACD}\\x{8ACF}\\x{8AD2}\\x{8AD6}\\x{8ADA}\\x{8ADB}\\x{8ADC}' .\n          '\\x{8ADE}\\x{8AE0}\\x{8AE1}\\x{8AE2}\\x{8AE4}\\x{8AE6}\\x{8AE7}\\x{8AEB}\\x{8AED}' .\n          '\\x{8AEE}\\x{8AF1}\\x{8AF3}\\x{8AF7}\\x{8AF8}\\x{8AFA}\\x{8AFE}\\x{8B00}\\x{8B01}' .\n          '\\x{8B02}\\x{8B04}\\x{8B07}\\x{8B0C}\\x{8B0E}\\x{8B10}\\x{8B14}\\x{8B16}\\x{8B17}' .\n          '\\x{8B19}\\x{8B1A}\\x{8B1B}\\x{8B1D}\\x{8B20}\\x{8B21}\\x{8B26}\\x{8B28}\\x{8B2B}' .\n          '\\x{8B2C}\\x{8B33}\\x{8B39}\\x{8B3E}\\x{8B41}\\x{8B49}\\x{8B4C}\\x{8B4E}\\x{8B4F}' .\n          '\\x{8B56}\\x{8B58}\\x{8B5A}\\x{8B5B}\\x{8B5C}\\x{8B5F}\\x{8B66}\\x{8B6B}\\x{8B6C}' .\n          '\\x{8B6F}\\x{8B70}\\x{8B71}\\x{8B72}\\x{8B74}\\x{8B77}\\x{8B7D}\\x{8B80}\\x{8B83}' .\n          '\\x{8B8A}\\x{8B8C}\\x{8B8E}\\x{8B90}\\x{8B92}\\x{8B93}\\x{8B96}\\x{8B99}\\x{8B9A}' .\n          '\\x{8C37}\\x{8C3A}\\x{8C3F}\\x{8C41}\\x{8C46}\\x{8C48}\\x{8C4A}\\x{8C4C}\\x{8C4E}' .\n          '\\x{8C50}\\x{8C55}\\x{8C5A}\\x{8C61}\\x{8C62}\\x{8C6A}\\x{8C6B}\\x{8C6C}\\x{8C78}' .\n          '\\x{8C79}\\x{8C7A}\\x{8C7C}\\x{8C82}\\x{8C85}\\x{8C89}\\x{8C8A}\\x{8C8C}\\x{8C8D}' .\n          '\\x{8C8E}\\x{8C94}\\x{8C98}\\x{8C9D}\\x{8C9E}\\x{8CA0}\\x{8CA1}\\x{8CA2}\\x{8CA7}' .\n          '\\x{8CA8}\\x{8CA9}\\x{8CAA}\\x{8CAB}\\x{8CAC}\\x{8CAD}\\x{8CAE}\\x{8CAF}\\x{8CB0}' .\n          '\\x{8CB2}\\x{8CB3}\\x{8CB4}\\x{8CB6}\\x{8CB7}\\x{8CB8}\\x{8CBB}\\x{8CBC}\\x{8CBD}' .\n          '\\x{8CBF}\\x{8CC0}\\x{8CC1}\\x{8CC2}\\x{8CC3}\\x{8CC4}\\x{8CC7}\\x{8CC8}\\x{8CCA}' .\n          '\\x{8CCD}\\x{8CCE}\\x{8CD1}\\x{8CD3}\\x{8CDA}\\x{8CDB}\\x{8CDC}\\x{8CDE}\\x{8CE0}' .\n          '\\x{8CE2}\\x{8CE3}\\x{8CE4}\\x{8CE6}\\x{8CEA}\\x{8CED}\\x{8CFA}\\x{8CFB}\\x{8CFC}' .\n          '\\x{8CFD}\\x{8D04}\\x{8D05}\\x{8D07}\\x{8D08}\\x{8D0A}\\x{8D0B}\\x{8D0D}\\x{8D0F}' .\n          '\\x{8D10}\\x{8D13}\\x{8D14}\\x{8D16}\\x{8D64}\\x{8D66}\\x{8D67}\\x{8D6B}\\x{8D6D}' .\n          '\\x{8D70}\\x{8D71}\\x{8D73}\\x{8D74}\\x{8D77}\\x{8D81}\\x{8D85}\\x{8D8A}\\x{8D99}' .\n          '\\x{8DA3}\\x{8DA8}\\x{8DB3}\\x{8DBA}\\x{8DBE}\\x{8DC2}\\x{8DCB}\\x{8DCC}\\x{8DCF}' .\n          '\\x{8DD6}\\x{8DDA}\\x{8DDB}\\x{8DDD}\\x{8DDF}\\x{8DE1}\\x{8DE3}\\x{8DE8}\\x{8DEA}' .\n          '\\x{8DEB}\\x{8DEF}\\x{8DF3}\\x{8DF5}\\x{8DFC}\\x{8DFF}\\x{8E08}\\x{8E09}\\x{8E0A}' .\n          '\\x{8E0F}\\x{8E10}\\x{8E1D}\\x{8E1E}\\x{8E1F}\\x{8E2A}\\x{8E30}\\x{8E34}\\x{8E35}' .\n          '\\x{8E42}\\x{8E44}\\x{8E47}\\x{8E48}\\x{8E49}\\x{8E4A}\\x{8E4C}\\x{8E50}\\x{8E55}' .\n          '\\x{8E59}\\x{8E5F}\\x{8E60}\\x{8E63}\\x{8E64}\\x{8E72}\\x{8E74}\\x{8E76}\\x{8E7C}' .\n          '\\x{8E81}\\x{8E84}\\x{8E85}\\x{8E87}\\x{8E8A}\\x{8E8B}\\x{8E8D}\\x{8E91}\\x{8E93}' .\n          '\\x{8E94}\\x{8E99}\\x{8EA1}\\x{8EAA}\\x{8EAB}\\x{8EAC}\\x{8EAF}\\x{8EB0}\\x{8EB1}' .\n          '\\x{8EBE}\\x{8EC5}\\x{8EC6}\\x{8EC8}\\x{8ECA}\\x{8ECB}\\x{8ECC}\\x{8ECD}\\x{8ED2}' .\n          '\\x{8EDB}\\x{8EDF}\\x{8EE2}\\x{8EE3}\\x{8EEB}\\x{8EF8}\\x{8EFB}\\x{8EFC}\\x{8EFD}' .\n          '\\x{8EFE}\\x{8F03}\\x{8F05}\\x{8F09}\\x{8F0A}\\x{8F0C}\\x{8F12}\\x{8F13}\\x{8F14}' .\n          '\\x{8F15}\\x{8F19}\\x{8F1B}\\x{8F1C}\\x{8F1D}\\x{8F1F}\\x{8F26}\\x{8F29}\\x{8F2A}' .\n          '\\x{8F2F}\\x{8F33}\\x{8F38}\\x{8F39}\\x{8F3B}\\x{8F3E}\\x{8F3F}\\x{8F42}\\x{8F44}' .\n          '\\x{8F45}\\x{8F46}\\x{8F49}\\x{8F4C}\\x{8F4D}\\x{8F4E}\\x{8F57}\\x{8F5C}\\x{8F5F}' .\n          '\\x{8F61}\\x{8F62}\\x{8F63}\\x{8F64}\\x{8F9B}\\x{8F9C}\\x{8F9E}\\x{8F9F}\\x{8FA3}' .\n          '\\x{8FA7}\\x{8FA8}\\x{8FAD}\\x{8FAE}\\x{8FAF}\\x{8FB0}\\x{8FB1}\\x{8FB2}\\x{8FB7}' .\n          '\\x{8FBA}\\x{8FBB}\\x{8FBC}\\x{8FBF}\\x{8FC2}\\x{8FC4}\\x{8FC5}\\x{8FCE}\\x{8FD1}' .\n          '\\x{8FD4}\\x{8FDA}\\x{8FE2}\\x{8FE5}\\x{8FE6}\\x{8FE9}\\x{8FEA}\\x{8FEB}\\x{8FED}' .\n          '\\x{8FEF}\\x{8FF0}\\x{8FF4}\\x{8FF7}\\x{8FF8}\\x{8FF9}\\x{8FFA}\\x{8FFD}\\x{9000}' .\n          '\\x{9001}\\x{9003}\\x{9005}\\x{9006}\\x{900B}\\x{900D}\\x{900E}\\x{900F}\\x{9010}' .\n          '\\x{9011}\\x{9013}\\x{9014}\\x{9015}\\x{9016}\\x{9017}\\x{9019}\\x{901A}\\x{901D}' .\n          '\\x{901E}\\x{901F}\\x{9020}\\x{9021}\\x{9022}\\x{9023}\\x{9027}\\x{902E}\\x{9031}' .\n          '\\x{9032}\\x{9035}\\x{9036}\\x{9038}\\x{9039}\\x{903C}\\x{903E}\\x{9041}\\x{9042}' .\n          '\\x{9045}\\x{9047}\\x{9049}\\x{904A}\\x{904B}\\x{904D}\\x{904E}\\x{904F}\\x{9050}' .\n          '\\x{9051}\\x{9052}\\x{9053}\\x{9054}\\x{9055}\\x{9056}\\x{9058}\\x{9059}\\x{905C}' .\n          '\\x{905E}\\x{9060}\\x{9061}\\x{9063}\\x{9065}\\x{9068}\\x{9069}\\x{906D}\\x{906E}' .\n          '\\x{906F}\\x{9072}\\x{9075}\\x{9076}\\x{9077}\\x{9078}\\x{907A}\\x{907C}\\x{907D}' .\n          '\\x{907F}\\x{9080}\\x{9081}\\x{9082}\\x{9083}\\x{9084}\\x{9087}\\x{9089}\\x{908A}' .\n          '\\x{908F}\\x{9091}\\x{90A3}\\x{90A6}\\x{90A8}\\x{90AA}\\x{90AF}\\x{90B1}\\x{90B5}' .\n          '\\x{90B8}\\x{90C1}\\x{90CA}\\x{90CE}\\x{90DB}\\x{90E1}\\x{90E2}\\x{90E4}\\x{90E8}' .\n          '\\x{90ED}\\x{90F5}\\x{90F7}\\x{90FD}\\x{9102}\\x{9112}\\x{9119}\\x{912D}\\x{9130}' .\n          '\\x{9132}\\x{9149}\\x{914A}\\x{914B}\\x{914C}\\x{914D}\\x{914E}\\x{9152}\\x{9154}' .\n          '\\x{9156}\\x{9158}\\x{9162}\\x{9163}\\x{9165}\\x{9169}\\x{916A}\\x{916C}\\x{9172}' .\n          '\\x{9173}\\x{9175}\\x{9177}\\x{9178}\\x{9182}\\x{9187}\\x{9189}\\x{918B}\\x{918D}' .\n          '\\x{9190}\\x{9192}\\x{9197}\\x{919C}\\x{91A2}\\x{91A4}\\x{91AA}\\x{91AB}\\x{91AF}' .\n          '\\x{91B4}\\x{91B5}\\x{91B8}\\x{91BA}\\x{91C0}\\x{91C1}\\x{91C6}\\x{91C7}\\x{91C8}' .\n          '\\x{91C9}\\x{91CB}\\x{91CC}\\x{91CD}\\x{91CE}\\x{91CF}\\x{91D0}\\x{91D1}\\x{91D6}' .\n          '\\x{91D8}\\x{91DB}\\x{91DC}\\x{91DD}\\x{91DF}\\x{91E1}\\x{91E3}\\x{91E6}\\x{91E7}' .\n          '\\x{91F5}\\x{91F6}\\x{91FC}\\x{91FF}\\x{920D}\\x{920E}\\x{9211}\\x{9214}\\x{9215}' .\n          '\\x{921E}\\x{9229}\\x{922C}\\x{9234}\\x{9237}\\x{923F}\\x{9244}\\x{9245}\\x{9248}' .\n          '\\x{9249}\\x{924B}\\x{9250}\\x{9257}\\x{925A}\\x{925B}\\x{925E}\\x{9262}\\x{9264}' .\n          '\\x{9266}\\x{9271}\\x{927E}\\x{9280}\\x{9283}\\x{9285}\\x{9291}\\x{9293}\\x{9295}' .\n          '\\x{9296}\\x{9298}\\x{929A}\\x{929B}\\x{929C}\\x{92AD}\\x{92B7}\\x{92B9}\\x{92CF}' .\n          '\\x{92D2}\\x{92E4}\\x{92E9}\\x{92EA}\\x{92ED}\\x{92F2}\\x{92F3}\\x{92F8}\\x{92FA}' .\n          '\\x{92FC}\\x{9306}\\x{930F}\\x{9310}\\x{9318}\\x{9319}\\x{931A}\\x{9320}\\x{9322}' .\n          '\\x{9323}\\x{9326}\\x{9328}\\x{932B}\\x{932C}\\x{932E}\\x{932F}\\x{9332}\\x{9335}' .\n          '\\x{933A}\\x{933B}\\x{9344}\\x{934B}\\x{934D}\\x{9354}\\x{9356}\\x{935B}\\x{935C}' .\n          '\\x{9360}\\x{936C}\\x{936E}\\x{9375}\\x{937C}\\x{937E}\\x{938C}\\x{9394}\\x{9396}' .\n          '\\x{9397}\\x{939A}\\x{93A7}\\x{93AC}\\x{93AD}\\x{93AE}\\x{93B0}\\x{93B9}\\x{93C3}' .\n          '\\x{93C8}\\x{93D0}\\x{93D1}\\x{93D6}\\x{93D7}\\x{93D8}\\x{93DD}\\x{93E1}\\x{93E4}' .\n          '\\x{93E5}\\x{93E8}\\x{9403}\\x{9407}\\x{9410}\\x{9413}\\x{9414}\\x{9418}\\x{9419}' .\n          '\\x{941A}\\x{9421}\\x{942B}\\x{9435}\\x{9436}\\x{9438}\\x{943A}\\x{9441}\\x{9444}' .\n          '\\x{9451}\\x{9452}\\x{9453}\\x{945A}\\x{945B}\\x{945E}\\x{9460}\\x{9462}\\x{946A}' .\n          '\\x{9470}\\x{9475}\\x{9477}\\x{947C}\\x{947D}\\x{947E}\\x{947F}\\x{9481}\\x{9577}' .\n          '\\x{9580}\\x{9582}\\x{9583}\\x{9587}\\x{9589}\\x{958A}\\x{958B}\\x{958F}\\x{9591}' .\n          '\\x{9593}\\x{9594}\\x{9596}\\x{9598}\\x{9599}\\x{95A0}\\x{95A2}\\x{95A3}\\x{95A4}' .\n          '\\x{95A5}\\x{95A7}\\x{95A8}\\x{95AD}\\x{95B2}\\x{95B9}\\x{95BB}\\x{95BC}\\x{95BE}' .\n          '\\x{95C3}\\x{95C7}\\x{95CA}\\x{95CC}\\x{95CD}\\x{95D4}\\x{95D5}\\x{95D6}\\x{95D8}' .\n          '\\x{95DC}\\x{95E1}\\x{95E2}\\x{95E5}\\x{961C}\\x{9621}\\x{9628}\\x{962A}\\x{962E}' .\n          '\\x{962F}\\x{9632}\\x{963B}\\x{963F}\\x{9640}\\x{9642}\\x{9644}\\x{964B}\\x{964C}' .\n          '\\x{964D}\\x{964F}\\x{9650}\\x{965B}\\x{965C}\\x{965D}\\x{965E}\\x{965F}\\x{9662}' .\n          '\\x{9663}\\x{9664}\\x{9665}\\x{9666}\\x{966A}\\x{966C}\\x{9670}\\x{9672}\\x{9673}' .\n          '\\x{9675}\\x{9676}\\x{9677}\\x{9678}\\x{967A}\\x{967D}\\x{9685}\\x{9686}\\x{9688}' .\n          '\\x{968A}\\x{968B}\\x{968D}\\x{968E}\\x{968F}\\x{9694}\\x{9695}\\x{9697}\\x{9698}' .\n          '\\x{9699}\\x{969B}\\x{969C}\\x{96A0}\\x{96A3}\\x{96A7}\\x{96A8}\\x{96AA}\\x{96B0}' .\n          '\\x{96B1}\\x{96B2}\\x{96B4}\\x{96B6}\\x{96B7}\\x{96B8}\\x{96B9}\\x{96BB}\\x{96BC}' .\n          '\\x{96C0}\\x{96C1}\\x{96C4}\\x{96C5}\\x{96C6}\\x{96C7}\\x{96C9}\\x{96CB}\\x{96CC}' .\n          '\\x{96CD}\\x{96CE}\\x{96D1}\\x{96D5}\\x{96D6}\\x{96D9}\\x{96DB}\\x{96DC}\\x{96E2}' .\n          '\\x{96E3}\\x{96E8}\\x{96EA}\\x{96EB}\\x{96F0}\\x{96F2}\\x{96F6}\\x{96F7}\\x{96F9}' .\n          '\\x{96FB}\\x{9700}\\x{9704}\\x{9706}\\x{9707}\\x{9708}\\x{970A}\\x{970D}\\x{970E}' .\n          '\\x{970F}\\x{9711}\\x{9713}\\x{9716}\\x{9719}\\x{971C}\\x{971E}\\x{9724}\\x{9727}' .\n          '\\x{972A}\\x{9730}\\x{9732}\\x{9738}\\x{9739}\\x{973D}\\x{973E}\\x{9742}\\x{9744}' .\n          '\\x{9746}\\x{9748}\\x{9749}\\x{9752}\\x{9756}\\x{9759}\\x{975C}\\x{975E}\\x{9760}' .\n          '\\x{9761}\\x{9762}\\x{9764}\\x{9766}\\x{9768}\\x{9769}\\x{976B}\\x{976D}\\x{9771}' .\n          '\\x{9774}\\x{9779}\\x{977A}\\x{977C}\\x{9781}\\x{9784}\\x{9785}\\x{9786}\\x{978B}' .\n          '\\x{978D}\\x{978F}\\x{9790}\\x{9798}\\x{979C}\\x{97A0}\\x{97A3}\\x{97A6}\\x{97A8}' .\n          '\\x{97AB}\\x{97AD}\\x{97B3}\\x{97B4}\\x{97C3}\\x{97C6}\\x{97C8}\\x{97CB}\\x{97D3}' .\n          '\\x{97DC}\\x{97ED}\\x{97EE}\\x{97F2}\\x{97F3}\\x{97F5}\\x{97F6}\\x{97FB}\\x{97FF}' .\n          '\\x{9801}\\x{9802}\\x{9803}\\x{9805}\\x{9806}\\x{9808}\\x{980C}\\x{980F}\\x{9810}' .\n          '\\x{9811}\\x{9812}\\x{9813}\\x{9817}\\x{9818}\\x{981A}\\x{9821}\\x{9824}\\x{982C}' .\n          '\\x{982D}\\x{9834}\\x{9837}\\x{9838}\\x{983B}\\x{983C}\\x{983D}\\x{9846}\\x{984B}' .\n          '\\x{984C}\\x{984D}\\x{984E}\\x{984F}\\x{9854}\\x{9855}\\x{9858}\\x{985B}\\x{985E}' .\n          '\\x{9867}\\x{986B}\\x{986F}\\x{9870}\\x{9871}\\x{9873}\\x{9874}\\x{98A8}\\x{98AA}' .\n          '\\x{98AF}\\x{98B1}\\x{98B6}\\x{98C3}\\x{98C4}\\x{98C6}\\x{98DB}\\x{98DC}\\x{98DF}' .\n          '\\x{98E2}\\x{98E9}\\x{98EB}\\x{98ED}\\x{98EE}\\x{98EF}\\x{98F2}\\x{98F4}\\x{98FC}' .\n          '\\x{98FD}\\x{98FE}\\x{9903}\\x{9905}\\x{9909}\\x{990A}\\x{990C}\\x{9910}\\x{9912}' .\n          '\\x{9913}\\x{9914}\\x{9918}\\x{991D}\\x{991E}\\x{9920}\\x{9921}\\x{9924}\\x{9928}' .\n          '\\x{992C}\\x{992E}\\x{993D}\\x{993E}\\x{9942}\\x{9945}\\x{9949}\\x{994B}\\x{994C}' .\n          '\\x{9950}\\x{9951}\\x{9952}\\x{9955}\\x{9957}\\x{9996}\\x{9997}\\x{9998}\\x{9999}' .\n          '\\x{99A5}\\x{99A8}\\x{99AC}\\x{99AD}\\x{99AE}\\x{99B3}\\x{99B4}\\x{99BC}\\x{99C1}' .\n          '\\x{99C4}\\x{99C5}\\x{99C6}\\x{99C8}\\x{99D0}\\x{99D1}\\x{99D2}\\x{99D5}\\x{99D8}' .\n          '\\x{99DB}\\x{99DD}\\x{99DF}\\x{99E2}\\x{99ED}\\x{99EE}\\x{99F1}\\x{99F2}\\x{99F8}' .\n          '\\x{99FB}\\x{99FF}\\x{9A01}\\x{9A05}\\x{9A0E}\\x{9A0F}\\x{9A12}\\x{9A13}\\x{9A19}' .\n          '\\x{9A28}\\x{9A2B}\\x{9A30}\\x{9A37}\\x{9A3E}\\x{9A40}\\x{9A42}\\x{9A43}\\x{9A45}' .\n          '\\x{9A4D}\\x{9A55}\\x{9A57}\\x{9A5A}\\x{9A5B}\\x{9A5F}\\x{9A62}\\x{9A64}\\x{9A65}' .\n          '\\x{9A69}\\x{9A6A}\\x{9A6B}\\x{9AA8}\\x{9AAD}\\x{9AB0}\\x{9AB8}\\x{9ABC}\\x{9AC0}' .\n          '\\x{9AC4}\\x{9ACF}\\x{9AD1}\\x{9AD3}\\x{9AD4}\\x{9AD8}\\x{9ADE}\\x{9ADF}\\x{9AE2}' .\n          '\\x{9AE3}\\x{9AE6}\\x{9AEA}\\x{9AEB}\\x{9AED}\\x{9AEE}\\x{9AEF}\\x{9AF1}\\x{9AF4}' .\n          '\\x{9AF7}\\x{9AFB}\\x{9B06}\\x{9B18}\\x{9B1A}\\x{9B1F}\\x{9B22}\\x{9B23}\\x{9B25}' .\n          '\\x{9B27}\\x{9B28}\\x{9B29}\\x{9B2A}\\x{9B2E}\\x{9B2F}\\x{9B31}\\x{9B32}\\x{9B3B}' .\n          '\\x{9B3C}\\x{9B41}\\x{9B42}\\x{9B43}\\x{9B44}\\x{9B45}\\x{9B4D}\\x{9B4E}\\x{9B4F}' .\n          '\\x{9B51}\\x{9B54}\\x{9B58}\\x{9B5A}\\x{9B6F}\\x{9B74}\\x{9B83}\\x{9B8E}\\x{9B91}' .\n          '\\x{9B92}\\x{9B93}\\x{9B96}\\x{9B97}\\x{9B9F}\\x{9BA0}\\x{9BA8}\\x{9BAA}\\x{9BAB}' .\n          '\\x{9BAD}\\x{9BAE}\\x{9BB4}\\x{9BB9}\\x{9BC0}\\x{9BC6}\\x{9BC9}\\x{9BCA}\\x{9BCF}' .\n          '\\x{9BD1}\\x{9BD2}\\x{9BD4}\\x{9BD6}\\x{9BDB}\\x{9BE1}\\x{9BE2}\\x{9BE3}\\x{9BE4}' .\n          '\\x{9BE8}\\x{9BF0}\\x{9BF1}\\x{9BF2}\\x{9BF5}\\x{9C04}\\x{9C06}\\x{9C08}\\x{9C09}' .\n          '\\x{9C0A}\\x{9C0C}\\x{9C0D}\\x{9C10}\\x{9C12}\\x{9C13}\\x{9C14}\\x{9C15}\\x{9C1B}' .\n          '\\x{9C21}\\x{9C24}\\x{9C25}\\x{9C2D}\\x{9C2E}\\x{9C2F}\\x{9C30}\\x{9C32}\\x{9C39}' .\n          '\\x{9C3A}\\x{9C3B}\\x{9C3E}\\x{9C46}\\x{9C47}\\x{9C48}\\x{9C52}\\x{9C57}\\x{9C5A}' .\n          '\\x{9C60}\\x{9C67}\\x{9C76}\\x{9C78}\\x{9CE5}\\x{9CE7}\\x{9CE9}\\x{9CEB}\\x{9CEC}' .\n          '\\x{9CF0}\\x{9CF3}\\x{9CF4}\\x{9CF6}\\x{9D03}\\x{9D06}\\x{9D07}\\x{9D08}\\x{9D09}' .\n          '\\x{9D0E}\\x{9D12}\\x{9D15}\\x{9D1B}\\x{9D1F}\\x{9D23}\\x{9D26}\\x{9D28}\\x{9D2A}' .\n          '\\x{9D2B}\\x{9D2C}\\x{9D3B}\\x{9D3E}\\x{9D3F}\\x{9D41}\\x{9D44}\\x{9D46}\\x{9D48}' .\n          '\\x{9D50}\\x{9D51}\\x{9D59}\\x{9D5C}\\x{9D5D}\\x{9D5E}\\x{9D60}\\x{9D61}\\x{9D64}' .\n          '\\x{9D6C}\\x{9D6F}\\x{9D72}\\x{9D7A}\\x{9D87}\\x{9D89}\\x{9D8F}\\x{9D9A}\\x{9DA4}' .\n          '\\x{9DA9}\\x{9DAB}\\x{9DAF}\\x{9DB2}\\x{9DB4}\\x{9DB8}\\x{9DBA}\\x{9DBB}\\x{9DC1}' .\n          '\\x{9DC2}\\x{9DC4}\\x{9DC6}\\x{9DCF}\\x{9DD3}\\x{9DD9}\\x{9DE6}\\x{9DED}\\x{9DEF}' .\n          '\\x{9DF2}\\x{9DF8}\\x{9DF9}\\x{9DFA}\\x{9DFD}\\x{9E1A}\\x{9E1B}\\x{9E1E}\\x{9E75}' .\n          '\\x{9E78}\\x{9E79}\\x{9E7D}\\x{9E7F}\\x{9E81}\\x{9E88}\\x{9E8B}\\x{9E8C}\\x{9E91}' .\n          '\\x{9E92}\\x{9E93}\\x{9E95}\\x{9E97}\\x{9E9D}\\x{9E9F}\\x{9EA5}\\x{9EA6}\\x{9EA9}' .\n          '\\x{9EAA}\\x{9EAD}\\x{9EB8}\\x{9EB9}\\x{9EBA}\\x{9EBB}\\x{9EBC}\\x{9EBE}\\x{9EBF}' .\n          '\\x{9EC4}\\x{9ECC}\\x{9ECD}\\x{9ECE}\\x{9ECF}\\x{9ED0}\\x{9ED2}\\x{9ED4}\\x{9ED8}' .\n          '\\x{9ED9}\\x{9EDB}\\x{9EDC}\\x{9EDD}\\x{9EDE}\\x{9EE0}\\x{9EE5}\\x{9EE8}\\x{9EEF}' .\n          '\\x{9EF4}\\x{9EF6}\\x{9EF7}\\x{9EF9}\\x{9EFB}\\x{9EFC}\\x{9EFD}\\x{9F07}\\x{9F08}' .\n          '\\x{9F0E}\\x{9F13}\\x{9F15}\\x{9F20}\\x{9F21}\\x{9F2C}\\x{9F3B}\\x{9F3E}\\x{9F4A}' .\n          '\\x{9F4B}\\x{9F4E}\\x{9F4F}\\x{9F52}\\x{9F54}\\x{9F5F}\\x{9F60}\\x{9F61}\\x{9F62}' .\n          '\\x{9F63}\\x{9F66}\\x{9F67}\\x{9F6A}\\x{9F6C}\\x{9F72}\\x{9F76}\\x{9F77}\\x{9F8D}' .\n          '\\x{9F95}\\x{9F9C}\\x{9F9D}\\x{9FA0}]{1,15}$/iu',\n    12 => '/^[\\x{002d}0-9a-z\\x{3447}\\x{3473}\\x{359E}\\x{360E}\\x{361A}\\x{3918}\\x{396E}\\x{39CF}\\x{39D0}' .\n          '\\x{39DF}\\x{3A73}\\x{3B4E}\\x{3C6E}\\x{3CE0}\\x{4056}\\x{415F}\\x{4337}\\x{43AC}' .\n          '\\x{43B1}\\x{43DD}\\x{44D6}\\x{464C}\\x{4661}\\x{4723}\\x{4729}\\x{477C}\\x{478D}' .\n          '\\x{4947}\\x{497A}\\x{497D}\\x{4982}\\x{4983}\\x{4985}\\x{4986}\\x{499B}\\x{499F}' .\n          '\\x{49B6}\\x{49B7}\\x{4C77}\\x{4C9F}\\x{4CA0}\\x{4CA1}\\x{4CA2}\\x{4CA3}\\x{4D13}' .\n          '\\x{4D14}\\x{4D15}\\x{4D16}\\x{4D17}\\x{4D18}\\x{4D19}\\x{4DAE}\\x{4E00}\\x{4E01}' .\n          '\\x{4E02}\\x{4E03}\\x{4E04}\\x{4E05}\\x{4E06}\\x{4E07}\\x{4E08}\\x{4E09}\\x{4E0A}' .\n          '\\x{4E0B}\\x{4E0C}\\x{4E0D}\\x{4E0E}\\x{4E0F}\\x{4E10}\\x{4E11}\\x{4E13}\\x{4E14}' .\n          '\\x{4E15}\\x{4E16}\\x{4E17}\\x{4E18}\\x{4E19}\\x{4E1A}\\x{4E1B}\\x{4E1C}\\x{4E1D}' .\n          '\\x{4E1E}\\x{4E1F}\\x{4E20}\\x{4E21}\\x{4E22}\\x{4E23}\\x{4E24}\\x{4E25}\\x{4E26}' .\n          '\\x{4E27}\\x{4E28}\\x{4E2A}\\x{4E2B}\\x{4E2C}\\x{4E2D}\\x{4E2E}\\x{4E2F}\\x{4E30}' .\n          '\\x{4E31}\\x{4E32}\\x{4E33}\\x{4E34}\\x{4E35}\\x{4E36}\\x{4E37}\\x{4E38}\\x{4E39}' .\n          '\\x{4E3A}\\x{4E3B}\\x{4E3C}\\x{4E3D}\\x{4E3E}\\x{4E3F}\\x{4E40}\\x{4E41}\\x{4E42}' .\n          '\\x{4E43}\\x{4E44}\\x{4E45}\\x{4E46}\\x{4E47}\\x{4E48}\\x{4E49}\\x{4E4A}\\x{4E4B}' .\n          '\\x{4E4C}\\x{4E4D}\\x{4E4E}\\x{4E4F}\\x{4E50}\\x{4E51}\\x{4E52}\\x{4E53}\\x{4E54}' .\n          '\\x{4E56}\\x{4E57}\\x{4E58}\\x{4E59}\\x{4E5A}\\x{4E5B}\\x{4E5C}\\x{4E5D}\\x{4E5E}' .\n          '\\x{4E5F}\\x{4E60}\\x{4E61}\\x{4E62}\\x{4E63}\\x{4E64}\\x{4E65}\\x{4E66}\\x{4E67}' .\n          '\\x{4E69}\\x{4E6A}\\x{4E6B}\\x{4E6C}\\x{4E6D}\\x{4E6E}\\x{4E6F}\\x{4E70}\\x{4E71}' .\n          '\\x{4E72}\\x{4E73}\\x{4E74}\\x{4E75}\\x{4E76}\\x{4E77}\\x{4E78}\\x{4E7A}\\x{4E7B}' .\n          '\\x{4E7C}\\x{4E7D}\\x{4E7E}\\x{4E7F}\\x{4E80}\\x{4E81}\\x{4E82}\\x{4E83}\\x{4E84}' .\n          '\\x{4E85}\\x{4E86}\\x{4E87}\\x{4E88}\\x{4E89}\\x{4E8B}\\x{4E8C}\\x{4E8D}\\x{4E8E}' .\n          '\\x{4E8F}\\x{4E90}\\x{4E91}\\x{4E92}\\x{4E93}\\x{4E94}\\x{4E95}\\x{4E97}\\x{4E98}' .\n          '\\x{4E99}\\x{4E9A}\\x{4E9B}\\x{4E9C}\\x{4E9D}\\x{4E9E}\\x{4E9F}\\x{4EA0}\\x{4EA1}' .\n          '\\x{4EA2}\\x{4EA4}\\x{4EA5}\\x{4EA6}\\x{4EA7}\\x{4EA8}\\x{4EA9}\\x{4EAA}\\x{4EAB}' .\n          '\\x{4EAC}\\x{4EAD}\\x{4EAE}\\x{4EAF}\\x{4EB0}\\x{4EB1}\\x{4EB2}\\x{4EB3}\\x{4EB4}' .\n          '\\x{4EB5}\\x{4EB6}\\x{4EB7}\\x{4EB8}\\x{4EB9}\\x{4EBA}\\x{4EBB}\\x{4EBD}\\x{4EBE}' .\n          '\\x{4EBF}\\x{4EC0}\\x{4EC1}\\x{4EC2}\\x{4EC3}\\x{4EC4}\\x{4EC5}\\x{4EC6}\\x{4EC7}' .\n          '\\x{4EC8}\\x{4EC9}\\x{4ECA}\\x{4ECB}\\x{4ECD}\\x{4ECE}\\x{4ECF}\\x{4ED0}\\x{4ED1}' .\n          '\\x{4ED2}\\x{4ED3}\\x{4ED4}\\x{4ED5}\\x{4ED6}\\x{4ED7}\\x{4ED8}\\x{4ED9}\\x{4EDA}' .\n          '\\x{4EDB}\\x{4EDC}\\x{4EDD}\\x{4EDE}\\x{4EDF}\\x{4EE0}\\x{4EE1}\\x{4EE2}\\x{4EE3}' .\n          '\\x{4EE4}\\x{4EE5}\\x{4EE6}\\x{4EE8}\\x{4EE9}\\x{4EEA}\\x{4EEB}\\x{4EEC}\\x{4EEF}' .\n          '\\x{4EF0}\\x{4EF1}\\x{4EF2}\\x{4EF3}\\x{4EF4}\\x{4EF5}\\x{4EF6}\\x{4EF7}\\x{4EFB}' .\n          '\\x{4EFD}\\x{4EFF}\\x{4F00}\\x{4F01}\\x{4F02}\\x{4F03}\\x{4F04}\\x{4F05}\\x{4F06}' .\n          '\\x{4F08}\\x{4F09}\\x{4F0A}\\x{4F0B}\\x{4F0C}\\x{4F0D}\\x{4F0E}\\x{4F0F}\\x{4F10}' .\n          '\\x{4F11}\\x{4F12}\\x{4F13}\\x{4F14}\\x{4F15}\\x{4F17}\\x{4F18}\\x{4F19}\\x{4F1A}' .\n          '\\x{4F1B}\\x{4F1C}\\x{4F1D}\\x{4F1E}\\x{4F1F}\\x{4F20}\\x{4F21}\\x{4F22}\\x{4F23}' .\n          '\\x{4F24}\\x{4F25}\\x{4F26}\\x{4F27}\\x{4F29}\\x{4F2A}\\x{4F2B}\\x{4F2C}\\x{4F2D}' .\n          '\\x{4F2E}\\x{4F2F}\\x{4F30}\\x{4F32}\\x{4F33}\\x{4F34}\\x{4F36}\\x{4F38}\\x{4F39}' .\n          '\\x{4F3A}\\x{4F3B}\\x{4F3C}\\x{4F3D}\\x{4F3E}\\x{4F3F}\\x{4F41}\\x{4F42}\\x{4F43}' .\n          '\\x{4F45}\\x{4F46}\\x{4F47}\\x{4F48}\\x{4F49}\\x{4F4A}\\x{4F4B}\\x{4F4C}\\x{4F4D}' .\n          '\\x{4F4E}\\x{4F4F}\\x{4F50}\\x{4F51}\\x{4F52}\\x{4F53}\\x{4F54}\\x{4F55}\\x{4F56}' .\n          '\\x{4F57}\\x{4F58}\\x{4F59}\\x{4F5A}\\x{4F5B}\\x{4F5C}\\x{4F5D}\\x{4F5E}\\x{4F5F}' .\n          '\\x{4F60}\\x{4F61}\\x{4F62}\\x{4F63}\\x{4F64}\\x{4F65}\\x{4F66}\\x{4F67}\\x{4F68}' .\n          '\\x{4F69}\\x{4F6A}\\x{4F6B}\\x{4F6C}\\x{4F6D}\\x{4F6E}\\x{4F6F}\\x{4F70}\\x{4F72}' .\n          '\\x{4F73}\\x{4F74}\\x{4F75}\\x{4F76}\\x{4F77}\\x{4F78}\\x{4F79}\\x{4F7A}\\x{4F7B}' .\n          '\\x{4F7C}\\x{4F7D}\\x{4F7E}\\x{4F7F}\\x{4F80}\\x{4F81}\\x{4F82}\\x{4F83}\\x{4F84}' .\n          '\\x{4F85}\\x{4F86}\\x{4F87}\\x{4F88}\\x{4F89}\\x{4F8A}\\x{4F8B}\\x{4F8D}\\x{4F8F}' .\n          '\\x{4F90}\\x{4F91}\\x{4F92}\\x{4F93}\\x{4F94}\\x{4F95}\\x{4F96}\\x{4F97}\\x{4F98}' .\n          '\\x{4F99}\\x{4F9A}\\x{4F9B}\\x{4F9C}\\x{4F9D}\\x{4F9E}\\x{4F9F}\\x{4FA0}\\x{4FA1}' .\n          '\\x{4FA3}\\x{4FA4}\\x{4FA5}\\x{4FA6}\\x{4FA7}\\x{4FA8}\\x{4FA9}\\x{4FAA}\\x{4FAB}' .\n          '\\x{4FAC}\\x{4FAE}\\x{4FAF}\\x{4FB0}\\x{4FB1}\\x{4FB2}\\x{4FB3}\\x{4FB4}\\x{4FB5}' .\n          '\\x{4FB6}\\x{4FB7}\\x{4FB8}\\x{4FB9}\\x{4FBA}\\x{4FBB}\\x{4FBC}\\x{4FBE}\\x{4FBF}' .\n          '\\x{4FC0}\\x{4FC1}\\x{4FC2}\\x{4FC3}\\x{4FC4}\\x{4FC5}\\x{4FC7}\\x{4FC9}\\x{4FCA}' .\n          '\\x{4FCB}\\x{4FCD}\\x{4FCE}\\x{4FCF}\\x{4FD0}\\x{4FD1}\\x{4FD2}\\x{4FD3}\\x{4FD4}' .\n          '\\x{4FD5}\\x{4FD6}\\x{4FD7}\\x{4FD8}\\x{4FD9}\\x{4FDA}\\x{4FDB}\\x{4FDC}\\x{4FDD}' .\n          '\\x{4FDE}\\x{4FDF}\\x{4FE0}\\x{4FE1}\\x{4FE3}\\x{4FE4}\\x{4FE5}\\x{4FE6}\\x{4FE7}' .\n          '\\x{4FE8}\\x{4FE9}\\x{4FEA}\\x{4FEB}\\x{4FEC}\\x{4FED}\\x{4FEE}\\x{4FEF}\\x{4FF0}' .\n          '\\x{4FF1}\\x{4FF2}\\x{4FF3}\\x{4FF4}\\x{4FF5}\\x{4FF6}\\x{4FF7}\\x{4FF8}\\x{4FF9}' .\n          '\\x{4FFA}\\x{4FFB}\\x{4FFE}\\x{4FFF}\\x{5000}\\x{5001}\\x{5002}\\x{5003}\\x{5004}' .\n          '\\x{5005}\\x{5006}\\x{5007}\\x{5008}\\x{5009}\\x{500A}\\x{500B}\\x{500C}\\x{500D}' .\n          '\\x{500E}\\x{500F}\\x{5011}\\x{5012}\\x{5013}\\x{5014}\\x{5015}\\x{5016}\\x{5017}' .\n          '\\x{5018}\\x{5019}\\x{501A}\\x{501B}\\x{501C}\\x{501D}\\x{501E}\\x{501F}\\x{5020}' .\n          '\\x{5021}\\x{5022}\\x{5023}\\x{5024}\\x{5025}\\x{5026}\\x{5027}\\x{5028}\\x{5029}' .\n          '\\x{502A}\\x{502B}\\x{502C}\\x{502D}\\x{502E}\\x{502F}\\x{5030}\\x{5031}\\x{5032}' .\n          '\\x{5033}\\x{5035}\\x{5036}\\x{5037}\\x{5039}\\x{503A}\\x{503B}\\x{503C}\\x{503E}' .\n          '\\x{503F}\\x{5040}\\x{5041}\\x{5043}\\x{5044}\\x{5045}\\x{5046}\\x{5047}\\x{5048}' .\n          '\\x{5049}\\x{504A}\\x{504B}\\x{504C}\\x{504D}\\x{504E}\\x{504F}\\x{5051}\\x{5053}' .\n          '\\x{5054}\\x{5055}\\x{5056}\\x{5057}\\x{5059}\\x{505A}\\x{505B}\\x{505C}\\x{505D}' .\n          '\\x{505E}\\x{505F}\\x{5060}\\x{5061}\\x{5062}\\x{5063}\\x{5064}\\x{5065}\\x{5066}' .\n          '\\x{5067}\\x{5068}\\x{5069}\\x{506A}\\x{506B}\\x{506C}\\x{506D}\\x{506E}\\x{506F}' .\n          '\\x{5070}\\x{5071}\\x{5072}\\x{5073}\\x{5074}\\x{5075}\\x{5076}\\x{5077}\\x{5078}' .\n          '\\x{5079}\\x{507A}\\x{507B}\\x{507D}\\x{507E}\\x{507F}\\x{5080}\\x{5082}\\x{5083}' .\n          '\\x{5084}\\x{5085}\\x{5086}\\x{5087}\\x{5088}\\x{5089}\\x{508A}\\x{508B}\\x{508C}' .\n          '\\x{508D}\\x{508E}\\x{508F}\\x{5090}\\x{5091}\\x{5092}\\x{5094}\\x{5095}\\x{5096}' .\n          '\\x{5098}\\x{5099}\\x{509A}\\x{509B}\\x{509C}\\x{509D}\\x{509E}\\x{50A2}\\x{50A3}' .\n          '\\x{50A4}\\x{50A5}\\x{50A6}\\x{50A7}\\x{50A8}\\x{50A9}\\x{50AA}\\x{50AB}\\x{50AC}' .\n          '\\x{50AD}\\x{50AE}\\x{50AF}\\x{50B0}\\x{50B1}\\x{50B2}\\x{50B3}\\x{50B4}\\x{50B5}' .\n          '\\x{50B6}\\x{50B7}\\x{50B8}\\x{50BA}\\x{50BB}\\x{50BC}\\x{50BD}\\x{50BE}\\x{50BF}' .\n          '\\x{50C0}\\x{50C1}\\x{50C2}\\x{50C4}\\x{50C5}\\x{50C6}\\x{50C7}\\x{50C8}\\x{50C9}' .\n          '\\x{50CA}\\x{50CB}\\x{50CC}\\x{50CD}\\x{50CE}\\x{50CF}\\x{50D0}\\x{50D1}\\x{50D2}' .\n          '\\x{50D3}\\x{50D4}\\x{50D5}\\x{50D6}\\x{50D7}\\x{50D9}\\x{50DA}\\x{50DB}\\x{50DC}' .\n          '\\x{50DD}\\x{50DE}\\x{50E0}\\x{50E3}\\x{50E4}\\x{50E5}\\x{50E6}\\x{50E7}\\x{50E8}' .\n          '\\x{50E9}\\x{50EA}\\x{50EC}\\x{50ED}\\x{50EE}\\x{50EF}\\x{50F0}\\x{50F1}\\x{50F2}' .\n          '\\x{50F3}\\x{50F5}\\x{50F6}\\x{50F8}\\x{50F9}\\x{50FA}\\x{50FB}\\x{50FC}\\x{50FD}' .\n          '\\x{50FE}\\x{50FF}\\x{5100}\\x{5101}\\x{5102}\\x{5103}\\x{5104}\\x{5105}\\x{5106}' .\n          '\\x{5107}\\x{5108}\\x{5109}\\x{510A}\\x{510B}\\x{510C}\\x{510D}\\x{510E}\\x{510F}' .\n          '\\x{5110}\\x{5111}\\x{5112}\\x{5113}\\x{5114}\\x{5115}\\x{5116}\\x{5117}\\x{5118}' .\n          '\\x{5119}\\x{511A}\\x{511C}\\x{511D}\\x{511E}\\x{511F}\\x{5120}\\x{5121}\\x{5122}' .\n          '\\x{5123}\\x{5124}\\x{5125}\\x{5126}\\x{5127}\\x{5129}\\x{512A}\\x{512C}\\x{512D}' .\n          '\\x{512E}\\x{512F}\\x{5130}\\x{5131}\\x{5132}\\x{5133}\\x{5134}\\x{5135}\\x{5136}' .\n          '\\x{5137}\\x{5138}\\x{5139}\\x{513A}\\x{513B}\\x{513C}\\x{513D}\\x{513E}\\x{513F}' .\n          '\\x{5140}\\x{5141}\\x{5143}\\x{5144}\\x{5145}\\x{5146}\\x{5147}\\x{5148}\\x{5149}' .\n          '\\x{514B}\\x{514C}\\x{514D}\\x{514E}\\x{5150}\\x{5151}\\x{5152}\\x{5154}\\x{5155}' .\n          '\\x{5156}\\x{5157}\\x{5159}\\x{515A}\\x{515B}\\x{515C}\\x{515D}\\x{515E}\\x{515F}' .\n          '\\x{5161}\\x{5162}\\x{5163}\\x{5165}\\x{5166}\\x{5167}\\x{5168}\\x{5169}\\x{516A}' .\n          '\\x{516B}\\x{516C}\\x{516D}\\x{516E}\\x{516F}\\x{5170}\\x{5171}\\x{5173}\\x{5174}' .\n          '\\x{5175}\\x{5176}\\x{5177}\\x{5178}\\x{5179}\\x{517A}\\x{517B}\\x{517C}\\x{517D}' .\n          '\\x{517F}\\x{5180}\\x{5181}\\x{5182}\\x{5185}\\x{5186}\\x{5187}\\x{5188}\\x{5189}' .\n          '\\x{518A}\\x{518B}\\x{518C}\\x{518D}\\x{518F}\\x{5190}\\x{5191}\\x{5192}\\x{5193}' .\n          '\\x{5194}\\x{5195}\\x{5196}\\x{5197}\\x{5198}\\x{5199}\\x{519A}\\x{519B}\\x{519C}' .\n          '\\x{519D}\\x{519E}\\x{519F}\\x{51A0}\\x{51A2}\\x{51A4}\\x{51A5}\\x{51A6}\\x{51A7}' .\n          '\\x{51A8}\\x{51AA}\\x{51AB}\\x{51AC}\\x{51AE}\\x{51AF}\\x{51B0}\\x{51B1}\\x{51B2}' .\n          '\\x{51B3}\\x{51B5}\\x{51B6}\\x{51B7}\\x{51B9}\\x{51BB}\\x{51BC}\\x{51BD}\\x{51BE}' .\n          '\\x{51BF}\\x{51C0}\\x{51C1}\\x{51C3}\\x{51C4}\\x{51C5}\\x{51C6}\\x{51C7}\\x{51C8}' .\n          '\\x{51C9}\\x{51CA}\\x{51CB}\\x{51CC}\\x{51CD}\\x{51CE}\\x{51CF}\\x{51D0}\\x{51D1}' .\n          '\\x{51D4}\\x{51D5}\\x{51D6}\\x{51D7}\\x{51D8}\\x{51D9}\\x{51DA}\\x{51DB}\\x{51DC}' .\n          '\\x{51DD}\\x{51DE}\\x{51E0}\\x{51E1}\\x{51E2}\\x{51E3}\\x{51E4}\\x{51E5}\\x{51E7}' .\n          '\\x{51E8}\\x{51E9}\\x{51EA}\\x{51EB}\\x{51ED}\\x{51EF}\\x{51F0}\\x{51F1}\\x{51F3}' .\n          '\\x{51F4}\\x{51F5}\\x{51F6}\\x{51F7}\\x{51F8}\\x{51F9}\\x{51FA}\\x{51FB}\\x{51FC}' .\n          '\\x{51FD}\\x{51FE}\\x{51FF}\\x{5200}\\x{5201}\\x{5202}\\x{5203}\\x{5204}\\x{5205}' .\n          '\\x{5206}\\x{5207}\\x{5208}\\x{5209}\\x{520A}\\x{520B}\\x{520C}\\x{520D}\\x{520E}' .\n          '\\x{520F}\\x{5210}\\x{5211}\\x{5212}\\x{5213}\\x{5214}\\x{5215}\\x{5216}\\x{5217}' .\n          '\\x{5218}\\x{5219}\\x{521A}\\x{521B}\\x{521C}\\x{521D}\\x{521E}\\x{521F}\\x{5220}' .\n          '\\x{5221}\\x{5222}\\x{5223}\\x{5224}\\x{5225}\\x{5226}\\x{5228}\\x{5229}\\x{522A}' .\n          '\\x{522B}\\x{522C}\\x{522D}\\x{522E}\\x{522F}\\x{5230}\\x{5231}\\x{5232}\\x{5233}' .\n          '\\x{5234}\\x{5235}\\x{5236}\\x{5237}\\x{5238}\\x{5239}\\x{523A}\\x{523B}\\x{523C}' .\n          '\\x{523D}\\x{523E}\\x{523F}\\x{5240}\\x{5241}\\x{5242}\\x{5243}\\x{5244}\\x{5245}' .\n          '\\x{5246}\\x{5247}\\x{5248}\\x{5249}\\x{524A}\\x{524B}\\x{524C}\\x{524D}\\x{524E}' .\n          '\\x{5250}\\x{5251}\\x{5252}\\x{5254}\\x{5255}\\x{5256}\\x{5257}\\x{5258}\\x{5259}' .\n          '\\x{525A}\\x{525B}\\x{525C}\\x{525D}\\x{525E}\\x{525F}\\x{5260}\\x{5261}\\x{5262}' .\n          '\\x{5263}\\x{5264}\\x{5265}\\x{5267}\\x{5268}\\x{5269}\\x{526A}\\x{526B}\\x{526C}' .\n          '\\x{526D}\\x{526E}\\x{526F}\\x{5270}\\x{5272}\\x{5273}\\x{5274}\\x{5275}\\x{5276}' .\n          '\\x{5277}\\x{5278}\\x{527A}\\x{527B}\\x{527C}\\x{527D}\\x{527E}\\x{527F}\\x{5280}' .\n          '\\x{5281}\\x{5282}\\x{5283}\\x{5284}\\x{5286}\\x{5287}\\x{5288}\\x{5289}\\x{528A}' .\n          '\\x{528B}\\x{528C}\\x{528D}\\x{528F}\\x{5290}\\x{5291}\\x{5292}\\x{5293}\\x{5294}' .\n          '\\x{5295}\\x{5296}\\x{5297}\\x{5298}\\x{5299}\\x{529A}\\x{529B}\\x{529C}\\x{529D}' .\n          '\\x{529E}\\x{529F}\\x{52A0}\\x{52A1}\\x{52A2}\\x{52A3}\\x{52A5}\\x{52A6}\\x{52A7}' .\n          '\\x{52A8}\\x{52A9}\\x{52AA}\\x{52AB}\\x{52AC}\\x{52AD}\\x{52AE}\\x{52AF}\\x{52B0}' .\n          '\\x{52B1}\\x{52B2}\\x{52B3}\\x{52B4}\\x{52B5}\\x{52B6}\\x{52B7}\\x{52B8}\\x{52B9}' .\n          '\\x{52BA}\\x{52BB}\\x{52BC}\\x{52BD}\\x{52BE}\\x{52BF}\\x{52C0}\\x{52C1}\\x{52C2}' .\n          '\\x{52C3}\\x{52C6}\\x{52C7}\\x{52C9}\\x{52CA}\\x{52CB}\\x{52CD}\\x{52CF}\\x{52D0}' .\n          '\\x{52D2}\\x{52D3}\\x{52D5}\\x{52D6}\\x{52D7}\\x{52D8}\\x{52D9}\\x{52DA}\\x{52DB}' .\n          '\\x{52DC}\\x{52DD}\\x{52DE}\\x{52DF}\\x{52E0}\\x{52E2}\\x{52E3}\\x{52E4}\\x{52E6}' .\n          '\\x{52E7}\\x{52E8}\\x{52E9}\\x{52EA}\\x{52EB}\\x{52EC}\\x{52ED}\\x{52EF}\\x{52F0}' .\n          '\\x{52F1}\\x{52F2}\\x{52F3}\\x{52F4}\\x{52F5}\\x{52F6}\\x{52F7}\\x{52F8}\\x{52F9}' .\n          '\\x{52FA}\\x{52FB}\\x{52FC}\\x{52FD}\\x{52FE}\\x{52FF}\\x{5300}\\x{5301}\\x{5302}' .\n          '\\x{5305}\\x{5306}\\x{5307}\\x{5308}\\x{5309}\\x{530A}\\x{530B}\\x{530C}\\x{530D}' .\n          '\\x{530E}\\x{530F}\\x{5310}\\x{5311}\\x{5312}\\x{5313}\\x{5314}\\x{5315}\\x{5316}' .\n          '\\x{5317}\\x{5319}\\x{531A}\\x{531C}\\x{531D}\\x{531F}\\x{5320}\\x{5321}\\x{5322}' .\n          '\\x{5323}\\x{5324}\\x{5325}\\x{5326}\\x{5328}\\x{532A}\\x{532B}\\x{532C}\\x{532D}' .\n          '\\x{532E}\\x{532F}\\x{5330}\\x{5331}\\x{5333}\\x{5334}\\x{5337}\\x{5339}\\x{533A}' .\n          '\\x{533B}\\x{533C}\\x{533D}\\x{533E}\\x{533F}\\x{5340}\\x{5341}\\x{5343}\\x{5344}' .\n          '\\x{5345}\\x{5346}\\x{5347}\\x{5348}\\x{5349}\\x{534A}\\x{534B}\\x{534C}\\x{534D}' .\n          '\\x{534E}\\x{534F}\\x{5350}\\x{5351}\\x{5352}\\x{5353}\\x{5354}\\x{5355}\\x{5356}' .\n          '\\x{5357}\\x{5358}\\x{5359}\\x{535A}\\x{535C}\\x{535E}\\x{535F}\\x{5360}\\x{5361}' .\n          '\\x{5362}\\x{5363}\\x{5364}\\x{5365}\\x{5366}\\x{5367}\\x{5369}\\x{536B}\\x{536C}' .\n          '\\x{536E}\\x{536F}\\x{5370}\\x{5371}\\x{5372}\\x{5373}\\x{5374}\\x{5375}\\x{5376}' .\n          '\\x{5377}\\x{5378}\\x{5379}\\x{537A}\\x{537B}\\x{537C}\\x{537D}\\x{537E}\\x{537F}' .\n          '\\x{5381}\\x{5382}\\x{5383}\\x{5384}\\x{5385}\\x{5386}\\x{5387}\\x{5388}\\x{5389}' .\n          '\\x{538A}\\x{538B}\\x{538C}\\x{538D}\\x{538E}\\x{538F}\\x{5390}\\x{5391}\\x{5392}' .\n          '\\x{5393}\\x{5394}\\x{5395}\\x{5396}\\x{5397}\\x{5398}\\x{5399}\\x{539A}\\x{539B}' .\n          '\\x{539C}\\x{539D}\\x{539E}\\x{539F}\\x{53A0}\\x{53A2}\\x{53A3}\\x{53A4}\\x{53A5}' .\n          '\\x{53A6}\\x{53A7}\\x{53A8}\\x{53A9}\\x{53AC}\\x{53AD}\\x{53AE}\\x{53B0}\\x{53B1}' .\n          '\\x{53B2}\\x{53B3}\\x{53B4}\\x{53B5}\\x{53B6}\\x{53B7}\\x{53B8}\\x{53B9}\\x{53BB}' .\n          '\\x{53BC}\\x{53BD}\\x{53BE}\\x{53BF}\\x{53C0}\\x{53C1}\\x{53C2}\\x{53C3}\\x{53C4}' .\n          '\\x{53C6}\\x{53C7}\\x{53C8}\\x{53C9}\\x{53CA}\\x{53CB}\\x{53CC}\\x{53CD}\\x{53CE}' .\n          '\\x{53D0}\\x{53D1}\\x{53D2}\\x{53D3}\\x{53D4}\\x{53D5}\\x{53D6}\\x{53D7}\\x{53D8}' .\n          '\\x{53D9}\\x{53DB}\\x{53DC}\\x{53DF}\\x{53E0}\\x{53E1}\\x{53E2}\\x{53E3}\\x{53E4}' .\n          '\\x{53E5}\\x{53E6}\\x{53E8}\\x{53E9}\\x{53EA}\\x{53EB}\\x{53EC}\\x{53ED}\\x{53EE}' .\n          '\\x{53EF}\\x{53F0}\\x{53F1}\\x{53F2}\\x{53F3}\\x{53F4}\\x{53F5}\\x{53F6}\\x{53F7}' .\n          '\\x{53F8}\\x{53F9}\\x{53FA}\\x{53FB}\\x{53FC}\\x{53FD}\\x{53FE}\\x{5401}\\x{5402}' .\n          '\\x{5403}\\x{5404}\\x{5405}\\x{5406}\\x{5407}\\x{5408}\\x{5409}\\x{540A}\\x{540B}' .\n          '\\x{540C}\\x{540D}\\x{540E}\\x{540F}\\x{5410}\\x{5411}\\x{5412}\\x{5413}\\x{5414}' .\n          '\\x{5415}\\x{5416}\\x{5417}\\x{5418}\\x{5419}\\x{541B}\\x{541C}\\x{541D}\\x{541E}' .\n          '\\x{541F}\\x{5420}\\x{5421}\\x{5423}\\x{5424}\\x{5425}\\x{5426}\\x{5427}\\x{5428}' .\n          '\\x{5429}\\x{542A}\\x{542B}\\x{542C}\\x{542D}\\x{542E}\\x{542F}\\x{5430}\\x{5431}' .\n          '\\x{5432}\\x{5433}\\x{5434}\\x{5435}\\x{5436}\\x{5437}\\x{5438}\\x{5439}\\x{543A}' .\n          '\\x{543B}\\x{543C}\\x{543D}\\x{543E}\\x{543F}\\x{5440}\\x{5441}\\x{5442}\\x{5443}' .\n          '\\x{5444}\\x{5445}\\x{5446}\\x{5447}\\x{5448}\\x{5449}\\x{544A}\\x{544B}\\x{544D}' .\n          '\\x{544E}\\x{544F}\\x{5450}\\x{5451}\\x{5452}\\x{5453}\\x{5454}\\x{5455}\\x{5456}' .\n          '\\x{5457}\\x{5458}\\x{5459}\\x{545A}\\x{545B}\\x{545C}\\x{545E}\\x{545F}\\x{5460}' .\n          '\\x{5461}\\x{5462}\\x{5463}\\x{5464}\\x{5465}\\x{5466}\\x{5467}\\x{5468}\\x{546A}' .\n          '\\x{546B}\\x{546C}\\x{546D}\\x{546E}\\x{546F}\\x{5470}\\x{5471}\\x{5472}\\x{5473}' .\n          '\\x{5474}\\x{5475}\\x{5476}\\x{5477}\\x{5478}\\x{5479}\\x{547A}\\x{547B}\\x{547C}' .\n          '\\x{547D}\\x{547E}\\x{547F}\\x{5480}\\x{5481}\\x{5482}\\x{5483}\\x{5484}\\x{5485}' .\n          '\\x{5486}\\x{5487}\\x{5488}\\x{5489}\\x{548B}\\x{548C}\\x{548D}\\x{548E}\\x{548F}' .\n          '\\x{5490}\\x{5491}\\x{5492}\\x{5493}\\x{5494}\\x{5495}\\x{5496}\\x{5497}\\x{5498}' .\n          '\\x{5499}\\x{549A}\\x{549B}\\x{549C}\\x{549D}\\x{549E}\\x{549F}\\x{54A0}\\x{54A1}' .\n          '\\x{54A2}\\x{54A3}\\x{54A4}\\x{54A5}\\x{54A6}\\x{54A7}\\x{54A8}\\x{54A9}\\x{54AA}' .\n          '\\x{54AB}\\x{54AC}\\x{54AD}\\x{54AE}\\x{54AF}\\x{54B0}\\x{54B1}\\x{54B2}\\x{54B3}' .\n          '\\x{54B4}\\x{54B6}\\x{54B7}\\x{54B8}\\x{54B9}\\x{54BA}\\x{54BB}\\x{54BC}\\x{54BD}' .\n          '\\x{54BE}\\x{54BF}\\x{54C0}\\x{54C1}\\x{54C2}\\x{54C3}\\x{54C4}\\x{54C5}\\x{54C6}' .\n          '\\x{54C7}\\x{54C8}\\x{54C9}\\x{54CA}\\x{54CB}\\x{54CC}\\x{54CD}\\x{54CE}\\x{54CF}' .\n          '\\x{54D0}\\x{54D1}\\x{54D2}\\x{54D3}\\x{54D4}\\x{54D5}\\x{54D6}\\x{54D7}\\x{54D8}' .\n          '\\x{54D9}\\x{54DA}\\x{54DB}\\x{54DC}\\x{54DD}\\x{54DE}\\x{54DF}\\x{54E0}\\x{54E1}' .\n          '\\x{54E2}\\x{54E3}\\x{54E4}\\x{54E5}\\x{54E6}\\x{54E7}\\x{54E8}\\x{54E9}\\x{54EA}' .\n          '\\x{54EB}\\x{54EC}\\x{54ED}\\x{54EE}\\x{54EF}\\x{54F0}\\x{54F1}\\x{54F2}\\x{54F3}' .\n          '\\x{54F4}\\x{54F5}\\x{54F7}\\x{54F8}\\x{54F9}\\x{54FA}\\x{54FB}\\x{54FC}\\x{54FD}' .\n          '\\x{54FE}\\x{54FF}\\x{5500}\\x{5501}\\x{5502}\\x{5503}\\x{5504}\\x{5505}\\x{5506}' .\n          '\\x{5507}\\x{5508}\\x{5509}\\x{550A}\\x{550B}\\x{550C}\\x{550D}\\x{550E}\\x{550F}' .\n          '\\x{5510}\\x{5511}\\x{5512}\\x{5513}\\x{5514}\\x{5516}\\x{5517}\\x{551A}\\x{551B}' .\n          '\\x{551C}\\x{551D}\\x{551E}\\x{551F}\\x{5520}\\x{5521}\\x{5522}\\x{5523}\\x{5524}' .\n          '\\x{5525}\\x{5526}\\x{5527}\\x{5528}\\x{5529}\\x{552A}\\x{552B}\\x{552C}\\x{552D}' .\n          '\\x{552E}\\x{552F}\\x{5530}\\x{5531}\\x{5532}\\x{5533}\\x{5534}\\x{5535}\\x{5536}' .\n          '\\x{5537}\\x{5538}\\x{5539}\\x{553A}\\x{553B}\\x{553C}\\x{553D}\\x{553E}\\x{553F}' .\n          '\\x{5540}\\x{5541}\\x{5542}\\x{5543}\\x{5544}\\x{5545}\\x{5546}\\x{5548}\\x{5549}' .\n          '\\x{554A}\\x{554B}\\x{554C}\\x{554D}\\x{554E}\\x{554F}\\x{5550}\\x{5551}\\x{5552}' .\n          '\\x{5553}\\x{5554}\\x{5555}\\x{5556}\\x{5557}\\x{5558}\\x{5559}\\x{555A}\\x{555B}' .\n          '\\x{555C}\\x{555D}\\x{555E}\\x{555F}\\x{5561}\\x{5562}\\x{5563}\\x{5564}\\x{5565}' .\n          '\\x{5566}\\x{5567}\\x{5568}\\x{5569}\\x{556A}\\x{556B}\\x{556C}\\x{556D}\\x{556E}' .\n          '\\x{556F}\\x{5570}\\x{5571}\\x{5572}\\x{5573}\\x{5574}\\x{5575}\\x{5576}\\x{5577}' .\n          '\\x{5578}\\x{5579}\\x{557B}\\x{557C}\\x{557D}\\x{557E}\\x{557F}\\x{5580}\\x{5581}' .\n          '\\x{5582}\\x{5583}\\x{5584}\\x{5585}\\x{5586}\\x{5587}\\x{5588}\\x{5589}\\x{558A}' .\n          '\\x{558B}\\x{558C}\\x{558D}\\x{558E}\\x{558F}\\x{5590}\\x{5591}\\x{5592}\\x{5593}' .\n          '\\x{5594}\\x{5595}\\x{5596}\\x{5597}\\x{5598}\\x{5599}\\x{559A}\\x{559B}\\x{559C}' .\n          '\\x{559D}\\x{559E}\\x{559F}\\x{55A0}\\x{55A1}\\x{55A2}\\x{55A3}\\x{55A4}\\x{55A5}' .\n          '\\x{55A6}\\x{55A7}\\x{55A8}\\x{55A9}\\x{55AA}\\x{55AB}\\x{55AC}\\x{55AD}\\x{55AE}' .\n          '\\x{55AF}\\x{55B0}\\x{55B1}\\x{55B2}\\x{55B3}\\x{55B4}\\x{55B5}\\x{55B6}\\x{55B7}' .\n          '\\x{55B8}\\x{55B9}\\x{55BA}\\x{55BB}\\x{55BC}\\x{55BD}\\x{55BE}\\x{55BF}\\x{55C0}' .\n          '\\x{55C1}\\x{55C2}\\x{55C3}\\x{55C4}\\x{55C5}\\x{55C6}\\x{55C7}\\x{55C8}\\x{55C9}' .\n          '\\x{55CA}\\x{55CB}\\x{55CC}\\x{55CD}\\x{55CE}\\x{55CF}\\x{55D0}\\x{55D1}\\x{55D2}' .\n          '\\x{55D3}\\x{55D4}\\x{55D5}\\x{55D6}\\x{55D7}\\x{55D8}\\x{55D9}\\x{55DA}\\x{55DB}' .\n          '\\x{55DC}\\x{55DD}\\x{55DE}\\x{55DF}\\x{55E1}\\x{55E2}\\x{55E3}\\x{55E4}\\x{55E5}' .\n          '\\x{55E6}\\x{55E7}\\x{55E8}\\x{55E9}\\x{55EA}\\x{55EB}\\x{55EC}\\x{55ED}\\x{55EE}' .\n          '\\x{55EF}\\x{55F0}\\x{55F1}\\x{55F2}\\x{55F3}\\x{55F4}\\x{55F5}\\x{55F6}\\x{55F7}' .\n          '\\x{55F9}\\x{55FA}\\x{55FB}\\x{55FC}\\x{55FD}\\x{55FE}\\x{55FF}\\x{5600}\\x{5601}' .\n          '\\x{5602}\\x{5603}\\x{5604}\\x{5606}\\x{5607}\\x{5608}\\x{5609}\\x{560C}\\x{560D}' .\n          '\\x{560E}\\x{560F}\\x{5610}\\x{5611}\\x{5612}\\x{5613}\\x{5614}\\x{5615}\\x{5616}' .\n          '\\x{5617}\\x{5618}\\x{5619}\\x{561A}\\x{561B}\\x{561C}\\x{561D}\\x{561E}\\x{561F}' .\n          '\\x{5621}\\x{5622}\\x{5623}\\x{5624}\\x{5625}\\x{5626}\\x{5627}\\x{5628}\\x{5629}' .\n          '\\x{562A}\\x{562C}\\x{562D}\\x{562E}\\x{562F}\\x{5630}\\x{5631}\\x{5632}\\x{5633}' .\n          '\\x{5634}\\x{5635}\\x{5636}\\x{5638}\\x{5639}\\x{563A}\\x{563B}\\x{563D}\\x{563E}' .\n          '\\x{563F}\\x{5640}\\x{5641}\\x{5642}\\x{5643}\\x{5645}\\x{5646}\\x{5647}\\x{5648}' .\n          '\\x{5649}\\x{564A}\\x{564C}\\x{564D}\\x{564E}\\x{564F}\\x{5650}\\x{5652}\\x{5653}' .\n          '\\x{5654}\\x{5655}\\x{5657}\\x{5658}\\x{5659}\\x{565A}\\x{565B}\\x{565C}\\x{565D}' .\n          '\\x{565E}\\x{5660}\\x{5662}\\x{5663}\\x{5664}\\x{5665}\\x{5666}\\x{5667}\\x{5668}' .\n          '\\x{5669}\\x{566A}\\x{566B}\\x{566C}\\x{566D}\\x{566E}\\x{566F}\\x{5670}\\x{5671}' .\n          '\\x{5672}\\x{5673}\\x{5674}\\x{5676}\\x{5677}\\x{5678}\\x{5679}\\x{567A}\\x{567B}' .\n          '\\x{567C}\\x{567E}\\x{567F}\\x{5680}\\x{5681}\\x{5682}\\x{5683}\\x{5684}\\x{5685}' .\n          '\\x{5686}\\x{5687}\\x{568A}\\x{568C}\\x{568D}\\x{568E}\\x{568F}\\x{5690}\\x{5691}' .\n          '\\x{5692}\\x{5693}\\x{5694}\\x{5695}\\x{5697}\\x{5698}\\x{5699}\\x{569A}\\x{569B}' .\n          '\\x{569C}\\x{569D}\\x{569F}\\x{56A0}\\x{56A1}\\x{56A3}\\x{56A4}\\x{56A5}\\x{56A6}' .\n          '\\x{56A7}\\x{56A8}\\x{56A9}\\x{56AA}\\x{56AB}\\x{56AC}\\x{56AD}\\x{56AE}\\x{56AF}' .\n          '\\x{56B0}\\x{56B1}\\x{56B2}\\x{56B3}\\x{56B4}\\x{56B5}\\x{56B6}\\x{56B7}\\x{56B8}' .\n          '\\x{56B9}\\x{56BB}\\x{56BC}\\x{56BD}\\x{56BE}\\x{56BF}\\x{56C0}\\x{56C1}\\x{56C2}' .\n          '\\x{56C3}\\x{56C4}\\x{56C5}\\x{56C6}\\x{56C7}\\x{56C8}\\x{56C9}\\x{56CA}\\x{56CB}' .\n          '\\x{56CC}\\x{56CD}\\x{56CE}\\x{56D0}\\x{56D1}\\x{56D2}\\x{56D3}\\x{56D4}\\x{56D5}' .\n          '\\x{56D6}\\x{56D7}\\x{56D8}\\x{56DA}\\x{56DB}\\x{56DC}\\x{56DD}\\x{56DE}\\x{56DF}' .\n          '\\x{56E0}\\x{56E1}\\x{56E2}\\x{56E3}\\x{56E4}\\x{56E5}\\x{56E7}\\x{56E8}\\x{56E9}' .\n          '\\x{56EA}\\x{56EB}\\x{56EC}\\x{56ED}\\x{56EE}\\x{56EF}\\x{56F0}\\x{56F1}\\x{56F2}' .\n          '\\x{56F3}\\x{56F4}\\x{56F5}\\x{56F7}\\x{56F9}\\x{56FA}\\x{56FD}\\x{56FE}\\x{56FF}' .\n          '\\x{5700}\\x{5701}\\x{5702}\\x{5703}\\x{5704}\\x{5706}\\x{5707}\\x{5708}\\x{5709}' .\n          '\\x{570A}\\x{570B}\\x{570C}\\x{570D}\\x{570E}\\x{570F}\\x{5710}\\x{5712}\\x{5713}' .\n          '\\x{5714}\\x{5715}\\x{5716}\\x{5718}\\x{5719}\\x{571A}\\x{571B}\\x{571C}\\x{571D}' .\n          '\\x{571E}\\x{571F}\\x{5720}\\x{5722}\\x{5723}\\x{5725}\\x{5726}\\x{5727}\\x{5728}' .\n          '\\x{5729}\\x{572A}\\x{572B}\\x{572C}\\x{572D}\\x{572E}\\x{572F}\\x{5730}\\x{5731}' .\n          '\\x{5732}\\x{5733}\\x{5734}\\x{5735}\\x{5736}\\x{5737}\\x{5738}\\x{5739}\\x{573A}' .\n          '\\x{573B}\\x{573C}\\x{573E}\\x{573F}\\x{5740}\\x{5741}\\x{5742}\\x{5744}\\x{5745}' .\n          '\\x{5746}\\x{5747}\\x{5749}\\x{574A}\\x{574B}\\x{574C}\\x{574D}\\x{574E}\\x{574F}' .\n          '\\x{5750}\\x{5751}\\x{5752}\\x{5753}\\x{5754}\\x{5757}\\x{5759}\\x{575A}\\x{575B}' .\n          '\\x{575C}\\x{575D}\\x{575E}\\x{575F}\\x{5760}\\x{5761}\\x{5762}\\x{5764}\\x{5765}' .\n          '\\x{5766}\\x{5767}\\x{5768}\\x{5769}\\x{576A}\\x{576B}\\x{576C}\\x{576D}\\x{576F}' .\n          '\\x{5770}\\x{5771}\\x{5772}\\x{5773}\\x{5774}\\x{5775}\\x{5776}\\x{5777}\\x{5779}' .\n          '\\x{577A}\\x{577B}\\x{577C}\\x{577D}\\x{577E}\\x{577F}\\x{5780}\\x{5782}\\x{5783}' .\n          '\\x{5784}\\x{5785}\\x{5786}\\x{5788}\\x{5789}\\x{578A}\\x{578B}\\x{578C}\\x{578D}' .\n          '\\x{578E}\\x{578F}\\x{5790}\\x{5791}\\x{5792}\\x{5793}\\x{5794}\\x{5795}\\x{5797}' .\n          '\\x{5798}\\x{5799}\\x{579A}\\x{579B}\\x{579C}\\x{579D}\\x{579E}\\x{579F}\\x{57A0}' .\n          '\\x{57A1}\\x{57A2}\\x{57A3}\\x{57A4}\\x{57A5}\\x{57A6}\\x{57A7}\\x{57A9}\\x{57AA}' .\n          '\\x{57AB}\\x{57AC}\\x{57AD}\\x{57AE}\\x{57AF}\\x{57B0}\\x{57B1}\\x{57B2}\\x{57B3}' .\n          '\\x{57B4}\\x{57B5}\\x{57B6}\\x{57B7}\\x{57B8}\\x{57B9}\\x{57BA}\\x{57BB}\\x{57BC}' .\n          '\\x{57BD}\\x{57BE}\\x{57BF}\\x{57C0}\\x{57C1}\\x{57C2}\\x{57C3}\\x{57C4}\\x{57C5}' .\n          '\\x{57C6}\\x{57C7}\\x{57C8}\\x{57C9}\\x{57CB}\\x{57CC}\\x{57CD}\\x{57CE}\\x{57CF}' .\n          '\\x{57D0}\\x{57D2}\\x{57D3}\\x{57D4}\\x{57D5}\\x{57D6}\\x{57D8}\\x{57D9}\\x{57DA}' .\n          '\\x{57DC}\\x{57DD}\\x{57DF}\\x{57E0}\\x{57E1}\\x{57E2}\\x{57E3}\\x{57E4}\\x{57E5}' .\n          '\\x{57E6}\\x{57E7}\\x{57E8}\\x{57E9}\\x{57EA}\\x{57EB}\\x{57EC}\\x{57ED}\\x{57EE}' .\n          '\\x{57EF}\\x{57F0}\\x{57F1}\\x{57F2}\\x{57F3}\\x{57F4}\\x{57F5}\\x{57F6}\\x{57F7}' .\n          '\\x{57F8}\\x{57F9}\\x{57FA}\\x{57FB}\\x{57FC}\\x{57FD}\\x{57FE}\\x{57FF}\\x{5800}' .\n          '\\x{5801}\\x{5802}\\x{5803}\\x{5804}\\x{5805}\\x{5806}\\x{5807}\\x{5808}\\x{5809}' .\n          '\\x{580A}\\x{580B}\\x{580C}\\x{580D}\\x{580E}\\x{580F}\\x{5810}\\x{5811}\\x{5812}' .\n          '\\x{5813}\\x{5814}\\x{5815}\\x{5816}\\x{5819}\\x{581A}\\x{581B}\\x{581C}\\x{581D}' .\n          '\\x{581E}\\x{581F}\\x{5820}\\x{5821}\\x{5822}\\x{5823}\\x{5824}\\x{5825}\\x{5826}' .\n          '\\x{5827}\\x{5828}\\x{5829}\\x{582A}\\x{582B}\\x{582C}\\x{582D}\\x{582E}\\x{582F}' .\n          '\\x{5830}\\x{5831}\\x{5832}\\x{5833}\\x{5834}\\x{5835}\\x{5836}\\x{5837}\\x{5838}' .\n          '\\x{5839}\\x{583A}\\x{583B}\\x{583C}\\x{583D}\\x{583E}\\x{583F}\\x{5840}\\x{5842}' .\n          '\\x{5843}\\x{5844}\\x{5845}\\x{5846}\\x{5847}\\x{5848}\\x{5849}\\x{584A}\\x{584B}' .\n          '\\x{584C}\\x{584D}\\x{584E}\\x{584F}\\x{5851}\\x{5852}\\x{5853}\\x{5854}\\x{5855}' .\n          '\\x{5857}\\x{5858}\\x{5859}\\x{585A}\\x{585B}\\x{585C}\\x{585D}\\x{585E}\\x{585F}' .\n          '\\x{5861}\\x{5862}\\x{5863}\\x{5864}\\x{5865}\\x{5868}\\x{5869}\\x{586A}\\x{586B}' .\n          '\\x{586C}\\x{586D}\\x{586E}\\x{586F}\\x{5870}\\x{5871}\\x{5872}\\x{5873}\\x{5874}' .\n          '\\x{5875}\\x{5876}\\x{5878}\\x{5879}\\x{587A}\\x{587B}\\x{587C}\\x{587D}\\x{587E}' .\n          '\\x{587F}\\x{5880}\\x{5881}\\x{5882}\\x{5883}\\x{5884}\\x{5885}\\x{5886}\\x{5887}' .\n          '\\x{5888}\\x{5889}\\x{588A}\\x{588B}\\x{588C}\\x{588D}\\x{588E}\\x{588F}\\x{5890}' .\n          '\\x{5891}\\x{5892}\\x{5893}\\x{5894}\\x{5896}\\x{5897}\\x{5898}\\x{5899}\\x{589A}' .\n          '\\x{589B}\\x{589C}\\x{589D}\\x{589E}\\x{589F}\\x{58A0}\\x{58A1}\\x{58A2}\\x{58A3}' .\n          '\\x{58A4}\\x{58A5}\\x{58A6}\\x{58A7}\\x{58A8}\\x{58A9}\\x{58AB}\\x{58AC}\\x{58AD}' .\n          '\\x{58AE}\\x{58AF}\\x{58B0}\\x{58B1}\\x{58B2}\\x{58B3}\\x{58B4}\\x{58B7}\\x{58B8}' .\n          '\\x{58B9}\\x{58BA}\\x{58BB}\\x{58BC}\\x{58BD}\\x{58BE}\\x{58BF}\\x{58C1}\\x{58C2}' .\n          '\\x{58C5}\\x{58C6}\\x{58C7}\\x{58C8}\\x{58C9}\\x{58CA}\\x{58CB}\\x{58CE}\\x{58CF}' .\n          '\\x{58D1}\\x{58D2}\\x{58D3}\\x{58D4}\\x{58D5}\\x{58D6}\\x{58D7}\\x{58D8}\\x{58D9}' .\n          '\\x{58DA}\\x{58DB}\\x{58DD}\\x{58DE}\\x{58DF}\\x{58E0}\\x{58E2}\\x{58E3}\\x{58E4}' .\n          '\\x{58E5}\\x{58E7}\\x{58E8}\\x{58E9}\\x{58EA}\\x{58EB}\\x{58EC}\\x{58ED}\\x{58EE}' .\n          '\\x{58EF}\\x{58F0}\\x{58F1}\\x{58F2}\\x{58F3}\\x{58F4}\\x{58F6}\\x{58F7}\\x{58F8}' .\n          '\\x{58F9}\\x{58FA}\\x{58FB}\\x{58FC}\\x{58FD}\\x{58FE}\\x{58FF}\\x{5900}\\x{5902}' .\n          '\\x{5903}\\x{5904}\\x{5906}\\x{5907}\\x{5909}\\x{590A}\\x{590B}\\x{590C}\\x{590D}' .\n          '\\x{590E}\\x{590F}\\x{5910}\\x{5912}\\x{5914}\\x{5915}\\x{5916}\\x{5917}\\x{5918}' .\n          '\\x{5919}\\x{591A}\\x{591B}\\x{591C}\\x{591D}\\x{591E}\\x{591F}\\x{5920}\\x{5921}' .\n          '\\x{5922}\\x{5924}\\x{5925}\\x{5926}\\x{5927}\\x{5928}\\x{5929}\\x{592A}\\x{592B}' .\n          '\\x{592C}\\x{592D}\\x{592E}\\x{592F}\\x{5930}\\x{5931}\\x{5932}\\x{5934}\\x{5935}' .\n          '\\x{5937}\\x{5938}\\x{5939}\\x{593A}\\x{593B}\\x{593C}\\x{593D}\\x{593E}\\x{593F}' .\n          '\\x{5940}\\x{5941}\\x{5942}\\x{5943}\\x{5944}\\x{5945}\\x{5946}\\x{5947}\\x{5948}' .\n          '\\x{5949}\\x{594A}\\x{594B}\\x{594C}\\x{594D}\\x{594E}\\x{594F}\\x{5950}\\x{5951}' .\n          '\\x{5952}\\x{5953}\\x{5954}\\x{5955}\\x{5956}\\x{5957}\\x{5958}\\x{595A}\\x{595C}' .\n          '\\x{595D}\\x{595E}\\x{595F}\\x{5960}\\x{5961}\\x{5962}\\x{5963}\\x{5964}\\x{5965}' .\n          '\\x{5966}\\x{5967}\\x{5968}\\x{5969}\\x{596A}\\x{596B}\\x{596C}\\x{596D}\\x{596E}' .\n          '\\x{596F}\\x{5970}\\x{5971}\\x{5972}\\x{5973}\\x{5974}\\x{5975}\\x{5976}\\x{5977}' .\n          '\\x{5978}\\x{5979}\\x{597A}\\x{597B}\\x{597C}\\x{597D}\\x{597E}\\x{597F}\\x{5980}' .\n          '\\x{5981}\\x{5982}\\x{5983}\\x{5984}\\x{5985}\\x{5986}\\x{5987}\\x{5988}\\x{5989}' .\n          '\\x{598A}\\x{598B}\\x{598C}\\x{598D}\\x{598E}\\x{598F}\\x{5990}\\x{5991}\\x{5992}' .\n          '\\x{5993}\\x{5994}\\x{5995}\\x{5996}\\x{5997}\\x{5998}\\x{5999}\\x{599A}\\x{599C}' .\n          '\\x{599D}\\x{599E}\\x{599F}\\x{59A0}\\x{59A1}\\x{59A2}\\x{59A3}\\x{59A4}\\x{59A5}' .\n          '\\x{59A6}\\x{59A7}\\x{59A8}\\x{59A9}\\x{59AA}\\x{59AB}\\x{59AC}\\x{59AD}\\x{59AE}' .\n          '\\x{59AF}\\x{59B0}\\x{59B1}\\x{59B2}\\x{59B3}\\x{59B4}\\x{59B5}\\x{59B6}\\x{59B8}' .\n          '\\x{59B9}\\x{59BA}\\x{59BB}\\x{59BC}\\x{59BD}\\x{59BE}\\x{59BF}\\x{59C0}\\x{59C1}' .\n          '\\x{59C2}\\x{59C3}\\x{59C4}\\x{59C5}\\x{59C6}\\x{59C7}\\x{59C8}\\x{59C9}\\x{59CA}' .\n          '\\x{59CB}\\x{59CC}\\x{59CD}\\x{59CE}\\x{59CF}\\x{59D0}\\x{59D1}\\x{59D2}\\x{59D3}' .\n          '\\x{59D4}\\x{59D5}\\x{59D6}\\x{59D7}\\x{59D8}\\x{59D9}\\x{59DA}\\x{59DB}\\x{59DC}' .\n          '\\x{59DD}\\x{59DE}\\x{59DF}\\x{59E0}\\x{59E1}\\x{59E2}\\x{59E3}\\x{59E4}\\x{59E5}' .\n          '\\x{59E6}\\x{59E8}\\x{59E9}\\x{59EA}\\x{59EB}\\x{59EC}\\x{59ED}\\x{59EE}\\x{59EF}' .\n          '\\x{59F0}\\x{59F1}\\x{59F2}\\x{59F3}\\x{59F4}\\x{59F5}\\x{59F6}\\x{59F7}\\x{59F8}' .\n          '\\x{59F9}\\x{59FA}\\x{59FB}\\x{59FC}\\x{59FD}\\x{59FE}\\x{59FF}\\x{5A00}\\x{5A01}' .\n          '\\x{5A02}\\x{5A03}\\x{5A04}\\x{5A05}\\x{5A06}\\x{5A07}\\x{5A08}\\x{5A09}\\x{5A0A}' .\n          '\\x{5A0B}\\x{5A0C}\\x{5A0D}\\x{5A0E}\\x{5A0F}\\x{5A10}\\x{5A11}\\x{5A12}\\x{5A13}' .\n          '\\x{5A14}\\x{5A15}\\x{5A16}\\x{5A17}\\x{5A18}\\x{5A19}\\x{5A1A}\\x{5A1B}\\x{5A1C}' .\n          '\\x{5A1D}\\x{5A1E}\\x{5A1F}\\x{5A20}\\x{5A21}\\x{5A22}\\x{5A23}\\x{5A25}\\x{5A27}' .\n          '\\x{5A28}\\x{5A29}\\x{5A2A}\\x{5A2B}\\x{5A2D}\\x{5A2E}\\x{5A2F}\\x{5A31}\\x{5A32}' .\n          '\\x{5A33}\\x{5A34}\\x{5A35}\\x{5A36}\\x{5A37}\\x{5A38}\\x{5A39}\\x{5A3A}\\x{5A3B}' .\n          '\\x{5A3C}\\x{5A3D}\\x{5A3E}\\x{5A3F}\\x{5A40}\\x{5A41}\\x{5A42}\\x{5A43}\\x{5A44}' .\n          '\\x{5A45}\\x{5A46}\\x{5A47}\\x{5A48}\\x{5A49}\\x{5A4A}\\x{5A4B}\\x{5A4C}\\x{5A4D}' .\n          '\\x{5A4E}\\x{5A4F}\\x{5A50}\\x{5A51}\\x{5A52}\\x{5A53}\\x{5A55}\\x{5A56}\\x{5A57}' .\n          '\\x{5A58}\\x{5A5A}\\x{5A5B}\\x{5A5C}\\x{5A5D}\\x{5A5E}\\x{5A5F}\\x{5A60}\\x{5A61}' .\n          '\\x{5A62}\\x{5A63}\\x{5A64}\\x{5A65}\\x{5A66}\\x{5A67}\\x{5A68}\\x{5A69}\\x{5A6A}' .\n          '\\x{5A6B}\\x{5A6C}\\x{5A6D}\\x{5A6E}\\x{5A70}\\x{5A72}\\x{5A73}\\x{5A74}\\x{5A75}' .\n          '\\x{5A76}\\x{5A77}\\x{5A78}\\x{5A79}\\x{5A7A}\\x{5A7B}\\x{5A7C}\\x{5A7D}\\x{5A7E}' .\n          '\\x{5A7F}\\x{5A80}\\x{5A81}\\x{5A82}\\x{5A83}\\x{5A84}\\x{5A85}\\x{5A86}\\x{5A88}' .\n          '\\x{5A89}\\x{5A8A}\\x{5A8B}\\x{5A8C}\\x{5A8E}\\x{5A8F}\\x{5A90}\\x{5A91}\\x{5A92}' .\n          '\\x{5A93}\\x{5A94}\\x{5A95}\\x{5A96}\\x{5A97}\\x{5A98}\\x{5A99}\\x{5A9A}\\x{5A9B}' .\n          '\\x{5A9C}\\x{5A9D}\\x{5A9E}\\x{5A9F}\\x{5AA0}\\x{5AA1}\\x{5AA2}\\x{5AA3}\\x{5AA4}' .\n          '\\x{5AA5}\\x{5AA6}\\x{5AA7}\\x{5AA8}\\x{5AA9}\\x{5AAA}\\x{5AAC}\\x{5AAD}\\x{5AAE}' .\n          '\\x{5AAF}\\x{5AB0}\\x{5AB1}\\x{5AB2}\\x{5AB3}\\x{5AB4}\\x{5AB5}\\x{5AB6}\\x{5AB7}' .\n          '\\x{5AB8}\\x{5AB9}\\x{5ABA}\\x{5ABB}\\x{5ABC}\\x{5ABD}\\x{5ABE}\\x{5ABF}\\x{5AC0}' .\n          '\\x{5AC1}\\x{5AC2}\\x{5AC3}\\x{5AC4}\\x{5AC5}\\x{5AC6}\\x{5AC7}\\x{5AC8}\\x{5AC9}' .\n          '\\x{5ACA}\\x{5ACB}\\x{5ACC}\\x{5ACD}\\x{5ACE}\\x{5ACF}\\x{5AD1}\\x{5AD2}\\x{5AD4}' .\n          '\\x{5AD5}\\x{5AD6}\\x{5AD7}\\x{5AD8}\\x{5AD9}\\x{5ADA}\\x{5ADB}\\x{5ADC}\\x{5ADD}' .\n          '\\x{5ADE}\\x{5ADF}\\x{5AE0}\\x{5AE1}\\x{5AE2}\\x{5AE3}\\x{5AE4}\\x{5AE5}\\x{5AE6}' .\n          '\\x{5AE7}\\x{5AE8}\\x{5AE9}\\x{5AEA}\\x{5AEB}\\x{5AEC}\\x{5AED}\\x{5AEE}\\x{5AF1}' .\n          '\\x{5AF2}\\x{5AF3}\\x{5AF4}\\x{5AF5}\\x{5AF6}\\x{5AF7}\\x{5AF8}\\x{5AF9}\\x{5AFA}' .\n          '\\x{5AFB}\\x{5AFC}\\x{5AFD}\\x{5AFE}\\x{5AFF}\\x{5B00}\\x{5B01}\\x{5B02}\\x{5B03}' .\n          '\\x{5B04}\\x{5B05}\\x{5B06}\\x{5B07}\\x{5B08}\\x{5B09}\\x{5B0B}\\x{5B0C}\\x{5B0E}' .\n          '\\x{5B0F}\\x{5B10}\\x{5B11}\\x{5B12}\\x{5B13}\\x{5B14}\\x{5B15}\\x{5B16}\\x{5B17}' .\n          '\\x{5B18}\\x{5B19}\\x{5B1A}\\x{5B1B}\\x{5B1C}\\x{5B1D}\\x{5B1E}\\x{5B1F}\\x{5B20}' .\n          '\\x{5B21}\\x{5B22}\\x{5B23}\\x{5B24}\\x{5B25}\\x{5B26}\\x{5B27}\\x{5B28}\\x{5B29}' .\n          '\\x{5B2A}\\x{5B2B}\\x{5B2C}\\x{5B2D}\\x{5B2E}\\x{5B2F}\\x{5B30}\\x{5B31}\\x{5B32}' .\n          '\\x{5B33}\\x{5B34}\\x{5B35}\\x{5B36}\\x{5B37}\\x{5B38}\\x{5B3A}\\x{5B3B}\\x{5B3C}' .\n          '\\x{5B3D}\\x{5B3E}\\x{5B3F}\\x{5B40}\\x{5B41}\\x{5B42}\\x{5B43}\\x{5B44}\\x{5B45}' .\n          '\\x{5B47}\\x{5B48}\\x{5B49}\\x{5B4A}\\x{5B4B}\\x{5B4C}\\x{5B4D}\\x{5B4E}\\x{5B50}' .\n          '\\x{5B51}\\x{5B53}\\x{5B54}\\x{5B55}\\x{5B56}\\x{5B57}\\x{5B58}\\x{5B59}\\x{5B5A}' .\n          '\\x{5B5B}\\x{5B5C}\\x{5B5D}\\x{5B5E}\\x{5B5F}\\x{5B62}\\x{5B63}\\x{5B64}\\x{5B65}' .\n          '\\x{5B66}\\x{5B67}\\x{5B68}\\x{5B69}\\x{5B6A}\\x{5B6B}\\x{5B6C}\\x{5B6D}\\x{5B6E}' .\n          '\\x{5B70}\\x{5B71}\\x{5B72}\\x{5B73}\\x{5B74}\\x{5B75}\\x{5B76}\\x{5B77}\\x{5B78}' .\n          '\\x{5B7A}\\x{5B7B}\\x{5B7C}\\x{5B7D}\\x{5B7F}\\x{5B80}\\x{5B81}\\x{5B82}\\x{5B83}' .\n          '\\x{5B84}\\x{5B85}\\x{5B87}\\x{5B88}\\x{5B89}\\x{5B8A}\\x{5B8B}\\x{5B8C}\\x{5B8D}' .\n          '\\x{5B8E}\\x{5B8F}\\x{5B91}\\x{5B92}\\x{5B93}\\x{5B94}\\x{5B95}\\x{5B96}\\x{5B97}' .\n          '\\x{5B98}\\x{5B99}\\x{5B9A}\\x{5B9B}\\x{5B9C}\\x{5B9D}\\x{5B9E}\\x{5B9F}\\x{5BA0}' .\n          '\\x{5BA1}\\x{5BA2}\\x{5BA3}\\x{5BA4}\\x{5BA5}\\x{5BA6}\\x{5BA7}\\x{5BA8}\\x{5BAA}' .\n          '\\x{5BAB}\\x{5BAC}\\x{5BAD}\\x{5BAE}\\x{5BAF}\\x{5BB0}\\x{5BB1}\\x{5BB3}\\x{5BB4}' .\n          '\\x{5BB5}\\x{5BB6}\\x{5BB8}\\x{5BB9}\\x{5BBA}\\x{5BBB}\\x{5BBD}\\x{5BBE}\\x{5BBF}' .\n          '\\x{5BC0}\\x{5BC1}\\x{5BC2}\\x{5BC3}\\x{5BC4}\\x{5BC5}\\x{5BC6}\\x{5BC7}\\x{5BCA}' .\n          '\\x{5BCB}\\x{5BCC}\\x{5BCD}\\x{5BCE}\\x{5BCF}\\x{5BD0}\\x{5BD1}\\x{5BD2}\\x{5BD3}' .\n          '\\x{5BD4}\\x{5BD5}\\x{5BD6}\\x{5BD8}\\x{5BD9}\\x{5BDB}\\x{5BDC}\\x{5BDD}\\x{5BDE}' .\n          '\\x{5BDF}\\x{5BE0}\\x{5BE1}\\x{5BE2}\\x{5BE3}\\x{5BE4}\\x{5BE5}\\x{5BE6}\\x{5BE7}' .\n          '\\x{5BE8}\\x{5BE9}\\x{5BEA}\\x{5BEB}\\x{5BEC}\\x{5BED}\\x{5BEE}\\x{5BEF}\\x{5BF0}' .\n          '\\x{5BF1}\\x{5BF2}\\x{5BF3}\\x{5BF4}\\x{5BF5}\\x{5BF6}\\x{5BF7}\\x{5BF8}\\x{5BF9}' .\n          '\\x{5BFA}\\x{5BFB}\\x{5BFC}\\x{5BFD}\\x{5BFF}\\x{5C01}\\x{5C03}\\x{5C04}\\x{5C05}' .\n          '\\x{5C06}\\x{5C07}\\x{5C08}\\x{5C09}\\x{5C0A}\\x{5C0B}\\x{5C0C}\\x{5C0D}\\x{5C0E}' .\n          '\\x{5C0F}\\x{5C10}\\x{5C11}\\x{5C12}\\x{5C13}\\x{5C14}\\x{5C15}\\x{5C16}\\x{5C17}' .\n          '\\x{5C18}\\x{5C19}\\x{5C1A}\\x{5C1C}\\x{5C1D}\\x{5C1E}\\x{5C1F}\\x{5C20}\\x{5C21}' .\n          '\\x{5C22}\\x{5C24}\\x{5C25}\\x{5C27}\\x{5C28}\\x{5C2A}\\x{5C2B}\\x{5C2C}\\x{5C2D}' .\n          '\\x{5C2E}\\x{5C2F}\\x{5C30}\\x{5C31}\\x{5C32}\\x{5C33}\\x{5C34}\\x{5C35}\\x{5C37}' .\n          '\\x{5C38}\\x{5C39}\\x{5C3A}\\x{5C3B}\\x{5C3C}\\x{5C3D}\\x{5C3E}\\x{5C3F}\\x{5C40}' .\n          '\\x{5C41}\\x{5C42}\\x{5C43}\\x{5C44}\\x{5C45}\\x{5C46}\\x{5C47}\\x{5C48}\\x{5C49}' .\n          '\\x{5C4A}\\x{5C4B}\\x{5C4C}\\x{5C4D}\\x{5C4E}\\x{5C4F}\\x{5C50}\\x{5C51}\\x{5C52}' .\n          '\\x{5C53}\\x{5C54}\\x{5C55}\\x{5C56}\\x{5C57}\\x{5C58}\\x{5C59}\\x{5C5B}\\x{5C5C}' .\n          '\\x{5C5D}\\x{5C5E}\\x{5C5F}\\x{5C60}\\x{5C61}\\x{5C62}\\x{5C63}\\x{5C64}\\x{5C65}' .\n          '\\x{5C66}\\x{5C67}\\x{5C68}\\x{5C69}\\x{5C6A}\\x{5C6B}\\x{5C6C}\\x{5C6D}\\x{5C6E}' .\n          '\\x{5C6F}\\x{5C70}\\x{5C71}\\x{5C72}\\x{5C73}\\x{5C74}\\x{5C75}\\x{5C76}\\x{5C77}' .\n          '\\x{5C78}\\x{5C79}\\x{5C7A}\\x{5C7B}\\x{5C7C}\\x{5C7D}\\x{5C7E}\\x{5C7F}\\x{5C80}' .\n          '\\x{5C81}\\x{5C82}\\x{5C83}\\x{5C84}\\x{5C86}\\x{5C87}\\x{5C88}\\x{5C89}\\x{5C8A}' .\n          '\\x{5C8B}\\x{5C8C}\\x{5C8D}\\x{5C8E}\\x{5C8F}\\x{5C90}\\x{5C91}\\x{5C92}\\x{5C93}' .\n          '\\x{5C94}\\x{5C95}\\x{5C96}\\x{5C97}\\x{5C98}\\x{5C99}\\x{5C9A}\\x{5C9B}\\x{5C9C}' .\n          '\\x{5C9D}\\x{5C9E}\\x{5C9F}\\x{5CA0}\\x{5CA1}\\x{5CA2}\\x{5CA3}\\x{5CA4}\\x{5CA5}' .\n          '\\x{5CA6}\\x{5CA7}\\x{5CA8}\\x{5CA9}\\x{5CAA}\\x{5CAB}\\x{5CAC}\\x{5CAD}\\x{5CAE}' .\n          '\\x{5CAF}\\x{5CB0}\\x{5CB1}\\x{5CB2}\\x{5CB3}\\x{5CB5}\\x{5CB6}\\x{5CB7}\\x{5CB8}' .\n          '\\x{5CBA}\\x{5CBB}\\x{5CBC}\\x{5CBD}\\x{5CBE}\\x{5CBF}\\x{5CC1}\\x{5CC2}\\x{5CC3}' .\n          '\\x{5CC4}\\x{5CC5}\\x{5CC6}\\x{5CC7}\\x{5CC8}\\x{5CC9}\\x{5CCA}\\x{5CCB}\\x{5CCC}' .\n          '\\x{5CCD}\\x{5CCE}\\x{5CCF}\\x{5CD0}\\x{5CD1}\\x{5CD2}\\x{5CD3}\\x{5CD4}\\x{5CD6}' .\n          '\\x{5CD7}\\x{5CD8}\\x{5CD9}\\x{5CDA}\\x{5CDB}\\x{5CDC}\\x{5CDE}\\x{5CDF}\\x{5CE0}' .\n          '\\x{5CE1}\\x{5CE2}\\x{5CE3}\\x{5CE4}\\x{5CE5}\\x{5CE6}\\x{5CE7}\\x{5CE8}\\x{5CE9}' .\n          '\\x{5CEA}\\x{5CEB}\\x{5CEC}\\x{5CED}\\x{5CEE}\\x{5CEF}\\x{5CF0}\\x{5CF1}\\x{5CF2}' .\n          '\\x{5CF3}\\x{5CF4}\\x{5CF6}\\x{5CF7}\\x{5CF8}\\x{5CF9}\\x{5CFA}\\x{5CFB}\\x{5CFC}' .\n          '\\x{5CFD}\\x{5CFE}\\x{5CFF}\\x{5D00}\\x{5D01}\\x{5D02}\\x{5D03}\\x{5D04}\\x{5D05}' .\n          '\\x{5D06}\\x{5D07}\\x{5D08}\\x{5D09}\\x{5D0A}\\x{5D0B}\\x{5D0C}\\x{5D0D}\\x{5D0E}' .\n          '\\x{5D0F}\\x{5D10}\\x{5D11}\\x{5D12}\\x{5D13}\\x{5D14}\\x{5D15}\\x{5D16}\\x{5D17}' .\n          '\\x{5D18}\\x{5D19}\\x{5D1A}\\x{5D1B}\\x{5D1C}\\x{5D1D}\\x{5D1E}\\x{5D1F}\\x{5D20}' .\n          '\\x{5D21}\\x{5D22}\\x{5D23}\\x{5D24}\\x{5D25}\\x{5D26}\\x{5D27}\\x{5D28}\\x{5D29}' .\n          '\\x{5D2A}\\x{5D2C}\\x{5D2D}\\x{5D2E}\\x{5D30}\\x{5D31}\\x{5D32}\\x{5D33}\\x{5D34}' .\n          '\\x{5D35}\\x{5D36}\\x{5D37}\\x{5D38}\\x{5D39}\\x{5D3A}\\x{5D3C}\\x{5D3D}\\x{5D3E}' .\n          '\\x{5D3F}\\x{5D40}\\x{5D41}\\x{5D42}\\x{5D43}\\x{5D44}\\x{5D45}\\x{5D46}\\x{5D47}' .\n          '\\x{5D48}\\x{5D49}\\x{5D4A}\\x{5D4B}\\x{5D4C}\\x{5D4D}\\x{5D4E}\\x{5D4F}\\x{5D50}' .\n          '\\x{5D51}\\x{5D52}\\x{5D54}\\x{5D55}\\x{5D56}\\x{5D58}\\x{5D59}\\x{5D5A}\\x{5D5B}' .\n          '\\x{5D5D}\\x{5D5E}\\x{5D5F}\\x{5D61}\\x{5D62}\\x{5D63}\\x{5D64}\\x{5D65}\\x{5D66}' .\n          '\\x{5D67}\\x{5D68}\\x{5D69}\\x{5D6A}\\x{5D6B}\\x{5D6C}\\x{5D6D}\\x{5D6E}\\x{5D6F}' .\n          '\\x{5D70}\\x{5D71}\\x{5D72}\\x{5D73}\\x{5D74}\\x{5D75}\\x{5D76}\\x{5D77}\\x{5D78}' .\n          '\\x{5D79}\\x{5D7A}\\x{5D7B}\\x{5D7C}\\x{5D7D}\\x{5D7E}\\x{5D7F}\\x{5D80}\\x{5D81}' .\n          '\\x{5D82}\\x{5D84}\\x{5D85}\\x{5D86}\\x{5D87}\\x{5D88}\\x{5D89}\\x{5D8A}\\x{5D8B}' .\n          '\\x{5D8C}\\x{5D8D}\\x{5D8E}\\x{5D8F}\\x{5D90}\\x{5D91}\\x{5D92}\\x{5D93}\\x{5D94}' .\n          '\\x{5D95}\\x{5D97}\\x{5D98}\\x{5D99}\\x{5D9A}\\x{5D9B}\\x{5D9C}\\x{5D9D}\\x{5D9E}' .\n          '\\x{5D9F}\\x{5DA0}\\x{5DA1}\\x{5DA2}\\x{5DA5}\\x{5DA6}\\x{5DA7}\\x{5DA8}\\x{5DA9}' .\n          '\\x{5DAA}\\x{5DAC}\\x{5DAD}\\x{5DAE}\\x{5DAF}\\x{5DB0}\\x{5DB1}\\x{5DB2}\\x{5DB4}' .\n          '\\x{5DB5}\\x{5DB6}\\x{5DB7}\\x{5DB8}\\x{5DBA}\\x{5DBB}\\x{5DBC}\\x{5DBD}\\x{5DBE}' .\n          '\\x{5DBF}\\x{5DC0}\\x{5DC1}\\x{5DC2}\\x{5DC3}\\x{5DC5}\\x{5DC6}\\x{5DC7}\\x{5DC8}' .\n          '\\x{5DC9}\\x{5DCA}\\x{5DCB}\\x{5DCC}\\x{5DCD}\\x{5DCE}\\x{5DCF}\\x{5DD0}\\x{5DD1}' .\n          '\\x{5DD2}\\x{5DD3}\\x{5DD4}\\x{5DD5}\\x{5DD6}\\x{5DD8}\\x{5DD9}\\x{5DDB}\\x{5DDD}' .\n          '\\x{5DDE}\\x{5DDF}\\x{5DE0}\\x{5DE1}\\x{5DE2}\\x{5DE3}\\x{5DE4}\\x{5DE5}\\x{5DE6}' .\n          '\\x{5DE7}\\x{5DE8}\\x{5DE9}\\x{5DEA}\\x{5DEB}\\x{5DEC}\\x{5DED}\\x{5DEE}\\x{5DEF}' .\n          '\\x{5DF0}\\x{5DF1}\\x{5DF2}\\x{5DF3}\\x{5DF4}\\x{5DF5}\\x{5DF7}\\x{5DF8}\\x{5DF9}' .\n          '\\x{5DFA}\\x{5DFB}\\x{5DFC}\\x{5DFD}\\x{5DFE}\\x{5DFF}\\x{5E00}\\x{5E01}\\x{5E02}' .\n          '\\x{5E03}\\x{5E04}\\x{5E05}\\x{5E06}\\x{5E07}\\x{5E08}\\x{5E09}\\x{5E0A}\\x{5E0B}' .\n          '\\x{5E0C}\\x{5E0D}\\x{5E0E}\\x{5E0F}\\x{5E10}\\x{5E11}\\x{5E13}\\x{5E14}\\x{5E15}' .\n          '\\x{5E16}\\x{5E17}\\x{5E18}\\x{5E19}\\x{5E1A}\\x{5E1B}\\x{5E1C}\\x{5E1D}\\x{5E1E}' .\n          '\\x{5E1F}\\x{5E20}\\x{5E21}\\x{5E22}\\x{5E23}\\x{5E24}\\x{5E25}\\x{5E26}\\x{5E27}' .\n          '\\x{5E28}\\x{5E29}\\x{5E2A}\\x{5E2B}\\x{5E2C}\\x{5E2D}\\x{5E2E}\\x{5E2F}\\x{5E30}' .\n          '\\x{5E31}\\x{5E32}\\x{5E33}\\x{5E34}\\x{5E35}\\x{5E36}\\x{5E37}\\x{5E38}\\x{5E39}' .\n          '\\x{5E3A}\\x{5E3B}\\x{5E3C}\\x{5E3D}\\x{5E3E}\\x{5E40}\\x{5E41}\\x{5E42}\\x{5E43}' .\n          '\\x{5E44}\\x{5E45}\\x{5E46}\\x{5E47}\\x{5E49}\\x{5E4A}\\x{5E4B}\\x{5E4C}\\x{5E4D}' .\n          '\\x{5E4E}\\x{5E4F}\\x{5E50}\\x{5E52}\\x{5E53}\\x{5E54}\\x{5E55}\\x{5E56}\\x{5E57}' .\n          '\\x{5E58}\\x{5E59}\\x{5E5A}\\x{5E5B}\\x{5E5C}\\x{5E5D}\\x{5E5E}\\x{5E5F}\\x{5E60}' .\n          '\\x{5E61}\\x{5E62}\\x{5E63}\\x{5E64}\\x{5E65}\\x{5E66}\\x{5E67}\\x{5E68}\\x{5E69}' .\n          '\\x{5E6A}\\x{5E6B}\\x{5E6C}\\x{5E6D}\\x{5E6E}\\x{5E6F}\\x{5E70}\\x{5E71}\\x{5E72}' .\n          '\\x{5E73}\\x{5E74}\\x{5E75}\\x{5E76}\\x{5E77}\\x{5E78}\\x{5E79}\\x{5E7A}\\x{5E7B}' .\n          '\\x{5E7C}\\x{5E7D}\\x{5E7E}\\x{5E7F}\\x{5E80}\\x{5E81}\\x{5E82}\\x{5E83}\\x{5E84}' .\n          '\\x{5E85}\\x{5E86}\\x{5E87}\\x{5E88}\\x{5E89}\\x{5E8A}\\x{5E8B}\\x{5E8C}\\x{5E8D}' .\n          '\\x{5E8E}\\x{5E8F}\\x{5E90}\\x{5E91}\\x{5E93}\\x{5E94}\\x{5E95}\\x{5E96}\\x{5E97}' .\n          '\\x{5E98}\\x{5E99}\\x{5E9A}\\x{5E9B}\\x{5E9C}\\x{5E9D}\\x{5E9E}\\x{5E9F}\\x{5EA0}' .\n          '\\x{5EA1}\\x{5EA2}\\x{5EA3}\\x{5EA4}\\x{5EA5}\\x{5EA6}\\x{5EA7}\\x{5EA8}\\x{5EA9}' .\n          '\\x{5EAA}\\x{5EAB}\\x{5EAC}\\x{5EAD}\\x{5EAE}\\x{5EAF}\\x{5EB0}\\x{5EB1}\\x{5EB2}' .\n          '\\x{5EB3}\\x{5EB4}\\x{5EB5}\\x{5EB6}\\x{5EB7}\\x{5EB8}\\x{5EB9}\\x{5EBB}\\x{5EBC}' .\n          '\\x{5EBD}\\x{5EBE}\\x{5EBF}\\x{5EC1}\\x{5EC2}\\x{5EC3}\\x{5EC4}\\x{5EC5}\\x{5EC6}' .\n          '\\x{5EC7}\\x{5EC8}\\x{5EC9}\\x{5ECA}\\x{5ECB}\\x{5ECC}\\x{5ECD}\\x{5ECE}\\x{5ECF}' .\n          '\\x{5ED0}\\x{5ED1}\\x{5ED2}\\x{5ED3}\\x{5ED4}\\x{5ED5}\\x{5ED6}\\x{5ED7}\\x{5ED8}' .\n          '\\x{5ED9}\\x{5EDA}\\x{5EDB}\\x{5EDC}\\x{5EDD}\\x{5EDE}\\x{5EDF}\\x{5EE0}\\x{5EE1}' .\n          '\\x{5EE2}\\x{5EE3}\\x{5EE4}\\x{5EE5}\\x{5EE6}\\x{5EE7}\\x{5EE8}\\x{5EE9}\\x{5EEA}' .\n          '\\x{5EEC}\\x{5EED}\\x{5EEE}\\x{5EEF}\\x{5EF0}\\x{5EF1}\\x{5EF2}\\x{5EF3}\\x{5EF4}' .\n          '\\x{5EF5}\\x{5EF6}\\x{5EF7}\\x{5EF8}\\x{5EFA}\\x{5EFB}\\x{5EFC}\\x{5EFD}\\x{5EFE}' .\n          '\\x{5EFF}\\x{5F00}\\x{5F01}\\x{5F02}\\x{5F03}\\x{5F04}\\x{5F05}\\x{5F06}\\x{5F07}' .\n          '\\x{5F08}\\x{5F0A}\\x{5F0B}\\x{5F0C}\\x{5F0D}\\x{5F0F}\\x{5F11}\\x{5F12}\\x{5F13}' .\n          '\\x{5F14}\\x{5F15}\\x{5F16}\\x{5F17}\\x{5F18}\\x{5F19}\\x{5F1A}\\x{5F1B}\\x{5F1C}' .\n          '\\x{5F1D}\\x{5F1E}\\x{5F1F}\\x{5F20}\\x{5F21}\\x{5F22}\\x{5F23}\\x{5F24}\\x{5F25}' .\n          '\\x{5F26}\\x{5F27}\\x{5F28}\\x{5F29}\\x{5F2A}\\x{5F2B}\\x{5F2C}\\x{5F2D}\\x{5F2E}' .\n          '\\x{5F2F}\\x{5F30}\\x{5F31}\\x{5F32}\\x{5F33}\\x{5F34}\\x{5F35}\\x{5F36}\\x{5F37}' .\n          '\\x{5F38}\\x{5F39}\\x{5F3A}\\x{5F3C}\\x{5F3E}\\x{5F3F}\\x{5F40}\\x{5F41}\\x{5F42}' .\n          '\\x{5F43}\\x{5F44}\\x{5F45}\\x{5F46}\\x{5F47}\\x{5F48}\\x{5F49}\\x{5F4A}\\x{5F4B}' .\n          '\\x{5F4C}\\x{5F4D}\\x{5F4E}\\x{5F4F}\\x{5F50}\\x{5F51}\\x{5F52}\\x{5F53}\\x{5F54}' .\n          '\\x{5F55}\\x{5F56}\\x{5F57}\\x{5F58}\\x{5F59}\\x{5F5A}\\x{5F5B}\\x{5F5C}\\x{5F5D}' .\n          '\\x{5F5E}\\x{5F5F}\\x{5F60}\\x{5F61}\\x{5F62}\\x{5F63}\\x{5F64}\\x{5F65}\\x{5F66}' .\n          '\\x{5F67}\\x{5F68}\\x{5F69}\\x{5F6A}\\x{5F6B}\\x{5F6C}\\x{5F6D}\\x{5F6E}\\x{5F6F}' .\n          '\\x{5F70}\\x{5F71}\\x{5F72}\\x{5F73}\\x{5F74}\\x{5F75}\\x{5F76}\\x{5F77}\\x{5F78}' .\n          '\\x{5F79}\\x{5F7A}\\x{5F7B}\\x{5F7C}\\x{5F7D}\\x{5F7E}\\x{5F7F}\\x{5F80}\\x{5F81}' .\n          '\\x{5F82}\\x{5F83}\\x{5F84}\\x{5F85}\\x{5F86}\\x{5F87}\\x{5F88}\\x{5F89}\\x{5F8A}' .\n          '\\x{5F8B}\\x{5F8C}\\x{5F8D}\\x{5F8E}\\x{5F90}\\x{5F91}\\x{5F92}\\x{5F93}\\x{5F94}' .\n          '\\x{5F95}\\x{5F96}\\x{5F97}\\x{5F98}\\x{5F99}\\x{5F9B}\\x{5F9C}\\x{5F9D}\\x{5F9E}' .\n          '\\x{5F9F}\\x{5FA0}\\x{5FA1}\\x{5FA2}\\x{5FA5}\\x{5FA6}\\x{5FA7}\\x{5FA8}\\x{5FA9}' .\n          '\\x{5FAA}\\x{5FAB}\\x{5FAC}\\x{5FAD}\\x{5FAE}\\x{5FAF}\\x{5FB1}\\x{5FB2}\\x{5FB3}' .\n          '\\x{5FB4}\\x{5FB5}\\x{5FB6}\\x{5FB7}\\x{5FB8}\\x{5FB9}\\x{5FBA}\\x{5FBB}\\x{5FBC}' .\n          '\\x{5FBD}\\x{5FBE}\\x{5FBF}\\x{5FC0}\\x{5FC1}\\x{5FC3}\\x{5FC4}\\x{5FC5}\\x{5FC6}' .\n          '\\x{5FC7}\\x{5FC8}\\x{5FC9}\\x{5FCA}\\x{5FCB}\\x{5FCC}\\x{5FCD}\\x{5FCF}\\x{5FD0}' .\n          '\\x{5FD1}\\x{5FD2}\\x{5FD3}\\x{5FD4}\\x{5FD5}\\x{5FD6}\\x{5FD7}\\x{5FD8}\\x{5FD9}' .\n          '\\x{5FDA}\\x{5FDC}\\x{5FDD}\\x{5FDE}\\x{5FE0}\\x{5FE1}\\x{5FE3}\\x{5FE4}\\x{5FE5}' .\n          '\\x{5FE6}\\x{5FE7}\\x{5FE8}\\x{5FE9}\\x{5FEA}\\x{5FEB}\\x{5FED}\\x{5FEE}\\x{5FEF}' .\n          '\\x{5FF0}\\x{5FF1}\\x{5FF2}\\x{5FF3}\\x{5FF4}\\x{5FF5}\\x{5FF6}\\x{5FF7}\\x{5FF8}' .\n          '\\x{5FF9}\\x{5FFA}\\x{5FFB}\\x{5FFD}\\x{5FFE}\\x{5FFF}\\x{6000}\\x{6001}\\x{6002}' .\n          '\\x{6003}\\x{6004}\\x{6005}\\x{6006}\\x{6007}\\x{6008}\\x{6009}\\x{600A}\\x{600B}' .\n          '\\x{600C}\\x{600D}\\x{600E}\\x{600F}\\x{6010}\\x{6011}\\x{6012}\\x{6013}\\x{6014}' .\n          '\\x{6015}\\x{6016}\\x{6017}\\x{6018}\\x{6019}\\x{601A}\\x{601B}\\x{601C}\\x{601D}' .\n          '\\x{601E}\\x{601F}\\x{6020}\\x{6021}\\x{6022}\\x{6024}\\x{6025}\\x{6026}\\x{6027}' .\n          '\\x{6028}\\x{6029}\\x{602A}\\x{602B}\\x{602C}\\x{602D}\\x{602E}\\x{602F}\\x{6030}' .\n          '\\x{6031}\\x{6032}\\x{6033}\\x{6034}\\x{6035}\\x{6036}\\x{6037}\\x{6038}\\x{6039}' .\n          '\\x{603A}\\x{603B}\\x{603C}\\x{603D}\\x{603E}\\x{603F}\\x{6040}\\x{6041}\\x{6042}' .\n          '\\x{6043}\\x{6044}\\x{6045}\\x{6046}\\x{6047}\\x{6048}\\x{6049}\\x{604A}\\x{604B}' .\n          '\\x{604C}\\x{604D}\\x{604E}\\x{604F}\\x{6050}\\x{6051}\\x{6052}\\x{6053}\\x{6054}' .\n          '\\x{6055}\\x{6057}\\x{6058}\\x{6059}\\x{605A}\\x{605B}\\x{605C}\\x{605D}\\x{605E}' .\n          '\\x{605F}\\x{6062}\\x{6063}\\x{6064}\\x{6065}\\x{6066}\\x{6067}\\x{6068}\\x{6069}' .\n          '\\x{606A}\\x{606B}\\x{606C}\\x{606D}\\x{606E}\\x{606F}\\x{6070}\\x{6072}\\x{6073}' .\n          '\\x{6075}\\x{6076}\\x{6077}\\x{6078}\\x{6079}\\x{607A}\\x{607B}\\x{607C}\\x{607D}' .\n          '\\x{607E}\\x{607F}\\x{6080}\\x{6081}\\x{6082}\\x{6083}\\x{6084}\\x{6085}\\x{6086}' .\n          '\\x{6087}\\x{6088}\\x{6089}\\x{608A}\\x{608B}\\x{608C}\\x{608D}\\x{608E}\\x{608F}' .\n          '\\x{6090}\\x{6092}\\x{6094}\\x{6095}\\x{6096}\\x{6097}\\x{6098}\\x{6099}\\x{609A}' .\n          '\\x{609B}\\x{609C}\\x{609D}\\x{609E}\\x{609F}\\x{60A0}\\x{60A1}\\x{60A2}\\x{60A3}' .\n          '\\x{60A4}\\x{60A6}\\x{60A7}\\x{60A8}\\x{60AA}\\x{60AB}\\x{60AC}\\x{60AD}\\x{60AE}' .\n          '\\x{60AF}\\x{60B0}\\x{60B1}\\x{60B2}\\x{60B3}\\x{60B4}\\x{60B5}\\x{60B6}\\x{60B7}' .\n          '\\x{60B8}\\x{60B9}\\x{60BA}\\x{60BB}\\x{60BC}\\x{60BD}\\x{60BE}\\x{60BF}\\x{60C0}' .\n          '\\x{60C1}\\x{60C2}\\x{60C3}\\x{60C4}\\x{60C5}\\x{60C6}\\x{60C7}\\x{60C8}\\x{60C9}' .\n          '\\x{60CA}\\x{60CB}\\x{60CC}\\x{60CD}\\x{60CE}\\x{60CF}\\x{60D0}\\x{60D1}\\x{60D3}' .\n          '\\x{60D4}\\x{60D5}\\x{60D7}\\x{60D8}\\x{60D9}\\x{60DA}\\x{60DB}\\x{60DC}\\x{60DD}' .\n          '\\x{60DF}\\x{60E0}\\x{60E1}\\x{60E2}\\x{60E4}\\x{60E6}\\x{60E7}\\x{60E8}\\x{60E9}' .\n          '\\x{60EA}\\x{60EB}\\x{60EC}\\x{60ED}\\x{60EE}\\x{60EF}\\x{60F0}\\x{60F1}\\x{60F2}' .\n          '\\x{60F3}\\x{60F4}\\x{60F5}\\x{60F6}\\x{60F7}\\x{60F8}\\x{60F9}\\x{60FA}\\x{60FB}' .\n          '\\x{60FC}\\x{60FE}\\x{60FF}\\x{6100}\\x{6101}\\x{6103}\\x{6104}\\x{6105}\\x{6106}' .\n          '\\x{6108}\\x{6109}\\x{610A}\\x{610B}\\x{610C}\\x{610D}\\x{610E}\\x{610F}\\x{6110}' .\n          '\\x{6112}\\x{6113}\\x{6114}\\x{6115}\\x{6116}\\x{6117}\\x{6118}\\x{6119}\\x{611A}' .\n          '\\x{611B}\\x{611C}\\x{611D}\\x{611F}\\x{6120}\\x{6122}\\x{6123}\\x{6124}\\x{6125}' .\n          '\\x{6126}\\x{6127}\\x{6128}\\x{6129}\\x{612A}\\x{612B}\\x{612C}\\x{612D}\\x{612E}' .\n          '\\x{612F}\\x{6130}\\x{6132}\\x{6134}\\x{6136}\\x{6137}\\x{613A}\\x{613B}\\x{613C}' .\n          '\\x{613D}\\x{613E}\\x{613F}\\x{6140}\\x{6141}\\x{6142}\\x{6143}\\x{6144}\\x{6145}' .\n          '\\x{6146}\\x{6147}\\x{6148}\\x{6149}\\x{614A}\\x{614B}\\x{614C}\\x{614D}\\x{614E}' .\n          '\\x{614F}\\x{6150}\\x{6151}\\x{6152}\\x{6153}\\x{6154}\\x{6155}\\x{6156}\\x{6157}' .\n          '\\x{6158}\\x{6159}\\x{615A}\\x{615B}\\x{615C}\\x{615D}\\x{615E}\\x{615F}\\x{6161}' .\n          '\\x{6162}\\x{6163}\\x{6164}\\x{6165}\\x{6166}\\x{6167}\\x{6168}\\x{6169}\\x{616A}' .\n          '\\x{616B}\\x{616C}\\x{616D}\\x{616E}\\x{6170}\\x{6171}\\x{6172}\\x{6173}\\x{6174}' .\n          '\\x{6175}\\x{6176}\\x{6177}\\x{6178}\\x{6179}\\x{617A}\\x{617C}\\x{617E}\\x{6180}' .\n          '\\x{6181}\\x{6182}\\x{6183}\\x{6184}\\x{6185}\\x{6187}\\x{6188}\\x{6189}\\x{618A}' .\n          '\\x{618B}\\x{618C}\\x{618D}\\x{618E}\\x{618F}\\x{6190}\\x{6191}\\x{6192}\\x{6193}' .\n          '\\x{6194}\\x{6195}\\x{6196}\\x{6198}\\x{6199}\\x{619A}\\x{619B}\\x{619D}\\x{619E}' .\n          '\\x{619F}\\x{61A0}\\x{61A1}\\x{61A2}\\x{61A3}\\x{61A4}\\x{61A5}\\x{61A6}\\x{61A7}' .\n          '\\x{61A8}\\x{61A9}\\x{61AA}\\x{61AB}\\x{61AC}\\x{61AD}\\x{61AE}\\x{61AF}\\x{61B0}' .\n          '\\x{61B1}\\x{61B2}\\x{61B3}\\x{61B4}\\x{61B5}\\x{61B6}\\x{61B7}\\x{61B8}\\x{61BA}' .\n          '\\x{61BC}\\x{61BD}\\x{61BE}\\x{61BF}\\x{61C0}\\x{61C1}\\x{61C2}\\x{61C3}\\x{61C4}' .\n          '\\x{61C5}\\x{61C6}\\x{61C7}\\x{61C8}\\x{61C9}\\x{61CA}\\x{61CB}\\x{61CC}\\x{61CD}' .\n          '\\x{61CE}\\x{61CF}\\x{61D0}\\x{61D1}\\x{61D2}\\x{61D4}\\x{61D6}\\x{61D7}\\x{61D8}' .\n          '\\x{61D9}\\x{61DA}\\x{61DB}\\x{61DC}\\x{61DD}\\x{61DE}\\x{61DF}\\x{61E0}\\x{61E1}' .\n          '\\x{61E2}\\x{61E3}\\x{61E4}\\x{61E5}\\x{61E6}\\x{61E7}\\x{61E8}\\x{61E9}\\x{61EA}' .\n          '\\x{61EB}\\x{61ED}\\x{61EE}\\x{61F0}\\x{61F1}\\x{61F2}\\x{61F3}\\x{61F5}\\x{61F6}' .\n          '\\x{61F7}\\x{61F8}\\x{61F9}\\x{61FA}\\x{61FB}\\x{61FC}\\x{61FD}\\x{61FE}\\x{61FF}' .\n          '\\x{6200}\\x{6201}\\x{6202}\\x{6203}\\x{6204}\\x{6206}\\x{6207}\\x{6208}\\x{6209}' .\n          '\\x{620A}\\x{620B}\\x{620C}\\x{620D}\\x{620E}\\x{620F}\\x{6210}\\x{6211}\\x{6212}' .\n          '\\x{6213}\\x{6214}\\x{6215}\\x{6216}\\x{6217}\\x{6218}\\x{6219}\\x{621A}\\x{621B}' .\n          '\\x{621C}\\x{621D}\\x{621E}\\x{621F}\\x{6220}\\x{6221}\\x{6222}\\x{6223}\\x{6224}' .\n          '\\x{6225}\\x{6226}\\x{6227}\\x{6228}\\x{6229}\\x{622A}\\x{622B}\\x{622C}\\x{622D}' .\n          '\\x{622E}\\x{622F}\\x{6230}\\x{6231}\\x{6232}\\x{6233}\\x{6234}\\x{6236}\\x{6237}' .\n          '\\x{6238}\\x{623A}\\x{623B}\\x{623C}\\x{623D}\\x{623E}\\x{623F}\\x{6240}\\x{6241}' .\n          '\\x{6242}\\x{6243}\\x{6244}\\x{6245}\\x{6246}\\x{6247}\\x{6248}\\x{6249}\\x{624A}' .\n          '\\x{624B}\\x{624C}\\x{624D}\\x{624E}\\x{624F}\\x{6250}\\x{6251}\\x{6252}\\x{6253}' .\n          '\\x{6254}\\x{6255}\\x{6256}\\x{6258}\\x{6259}\\x{625A}\\x{625B}\\x{625C}\\x{625D}' .\n          '\\x{625E}\\x{625F}\\x{6260}\\x{6261}\\x{6262}\\x{6263}\\x{6264}\\x{6265}\\x{6266}' .\n          '\\x{6267}\\x{6268}\\x{6269}\\x{626A}\\x{626B}\\x{626C}\\x{626D}\\x{626E}\\x{626F}' .\n          '\\x{6270}\\x{6271}\\x{6272}\\x{6273}\\x{6274}\\x{6275}\\x{6276}\\x{6277}\\x{6278}' .\n          '\\x{6279}\\x{627A}\\x{627B}\\x{627C}\\x{627D}\\x{627E}\\x{627F}\\x{6280}\\x{6281}' .\n          '\\x{6283}\\x{6284}\\x{6285}\\x{6286}\\x{6287}\\x{6288}\\x{6289}\\x{628A}\\x{628B}' .\n          '\\x{628C}\\x{628E}\\x{628F}\\x{6290}\\x{6291}\\x{6292}\\x{6293}\\x{6294}\\x{6295}' .\n          '\\x{6296}\\x{6297}\\x{6298}\\x{6299}\\x{629A}\\x{629B}\\x{629C}\\x{629E}\\x{629F}' .\n          '\\x{62A0}\\x{62A1}\\x{62A2}\\x{62A3}\\x{62A4}\\x{62A5}\\x{62A7}\\x{62A8}\\x{62A9}' .\n          '\\x{62AA}\\x{62AB}\\x{62AC}\\x{62AD}\\x{62AE}\\x{62AF}\\x{62B0}\\x{62B1}\\x{62B2}' .\n          '\\x{62B3}\\x{62B4}\\x{62B5}\\x{62B6}\\x{62B7}\\x{62B8}\\x{62B9}\\x{62BA}\\x{62BB}' .\n          '\\x{62BC}\\x{62BD}\\x{62BE}\\x{62BF}\\x{62C0}\\x{62C1}\\x{62C2}\\x{62C3}\\x{62C4}' .\n          '\\x{62C5}\\x{62C6}\\x{62C7}\\x{62C8}\\x{62C9}\\x{62CA}\\x{62CB}\\x{62CC}\\x{62CD}' .\n          '\\x{62CE}\\x{62CF}\\x{62D0}\\x{62D1}\\x{62D2}\\x{62D3}\\x{62D4}\\x{62D5}\\x{62D6}' .\n          '\\x{62D7}\\x{62D8}\\x{62D9}\\x{62DA}\\x{62DB}\\x{62DC}\\x{62DD}\\x{62DF}\\x{62E0}' .\n          '\\x{62E1}\\x{62E2}\\x{62E3}\\x{62E4}\\x{62E5}\\x{62E6}\\x{62E7}\\x{62E8}\\x{62E9}' .\n          '\\x{62EB}\\x{62EC}\\x{62ED}\\x{62EE}\\x{62EF}\\x{62F0}\\x{62F1}\\x{62F2}\\x{62F3}' .\n          '\\x{62F4}\\x{62F5}\\x{62F6}\\x{62F7}\\x{62F8}\\x{62F9}\\x{62FA}\\x{62FB}\\x{62FC}' .\n          '\\x{62FD}\\x{62FE}\\x{62FF}\\x{6300}\\x{6301}\\x{6302}\\x{6303}\\x{6304}\\x{6305}' .\n          '\\x{6306}\\x{6307}\\x{6308}\\x{6309}\\x{630B}\\x{630C}\\x{630D}\\x{630E}\\x{630F}' .\n          '\\x{6310}\\x{6311}\\x{6312}\\x{6313}\\x{6314}\\x{6315}\\x{6316}\\x{6318}\\x{6319}' .\n          '\\x{631A}\\x{631B}\\x{631C}\\x{631D}\\x{631E}\\x{631F}\\x{6320}\\x{6321}\\x{6322}' .\n          '\\x{6323}\\x{6324}\\x{6325}\\x{6326}\\x{6327}\\x{6328}\\x{6329}\\x{632A}\\x{632B}' .\n          '\\x{632C}\\x{632D}\\x{632E}\\x{632F}\\x{6330}\\x{6332}\\x{6333}\\x{6334}\\x{6336}' .\n          '\\x{6338}\\x{6339}\\x{633A}\\x{633B}\\x{633C}\\x{633D}\\x{633E}\\x{6340}\\x{6341}' .\n          '\\x{6342}\\x{6343}\\x{6344}\\x{6345}\\x{6346}\\x{6347}\\x{6348}\\x{6349}\\x{634A}' .\n          '\\x{634B}\\x{634C}\\x{634D}\\x{634E}\\x{634F}\\x{6350}\\x{6351}\\x{6352}\\x{6353}' .\n          '\\x{6354}\\x{6355}\\x{6356}\\x{6357}\\x{6358}\\x{6359}\\x{635A}\\x{635C}\\x{635D}' .\n          '\\x{635E}\\x{635F}\\x{6360}\\x{6361}\\x{6362}\\x{6363}\\x{6364}\\x{6365}\\x{6366}' .\n          '\\x{6367}\\x{6368}\\x{6369}\\x{636A}\\x{636B}\\x{636C}\\x{636D}\\x{636E}\\x{636F}' .\n          '\\x{6370}\\x{6371}\\x{6372}\\x{6373}\\x{6374}\\x{6375}\\x{6376}\\x{6377}\\x{6378}' .\n          '\\x{6379}\\x{637A}\\x{637B}\\x{637C}\\x{637D}\\x{637E}\\x{6380}\\x{6381}\\x{6382}' .\n          '\\x{6383}\\x{6384}\\x{6385}\\x{6386}\\x{6387}\\x{6388}\\x{6389}\\x{638A}\\x{638C}' .\n          '\\x{638D}\\x{638E}\\x{638F}\\x{6390}\\x{6391}\\x{6392}\\x{6394}\\x{6395}\\x{6396}' .\n          '\\x{6397}\\x{6398}\\x{6399}\\x{639A}\\x{639B}\\x{639C}\\x{639D}\\x{639E}\\x{639F}' .\n          '\\x{63A0}\\x{63A1}\\x{63A2}\\x{63A3}\\x{63A4}\\x{63A5}\\x{63A6}\\x{63A7}\\x{63A8}' .\n          '\\x{63A9}\\x{63AA}\\x{63AB}\\x{63AC}\\x{63AD}\\x{63AE}\\x{63AF}\\x{63B0}\\x{63B1}' .\n          '\\x{63B2}\\x{63B3}\\x{63B4}\\x{63B5}\\x{63B6}\\x{63B7}\\x{63B8}\\x{63B9}\\x{63BA}' .\n          '\\x{63BC}\\x{63BD}\\x{63BE}\\x{63BF}\\x{63C0}\\x{63C1}\\x{63C2}\\x{63C3}\\x{63C4}' .\n          '\\x{63C5}\\x{63C6}\\x{63C7}\\x{63C8}\\x{63C9}\\x{63CA}\\x{63CB}\\x{63CC}\\x{63CD}' .\n          '\\x{63CE}\\x{63CF}\\x{63D0}\\x{63D2}\\x{63D3}\\x{63D4}\\x{63D5}\\x{63D6}\\x{63D7}' .\n          '\\x{63D8}\\x{63D9}\\x{63DA}\\x{63DB}\\x{63DC}\\x{63DD}\\x{63DE}\\x{63DF}\\x{63E0}' .\n          '\\x{63E1}\\x{63E2}\\x{63E3}\\x{63E4}\\x{63E5}\\x{63E6}\\x{63E7}\\x{63E8}\\x{63E9}' .\n          '\\x{63EA}\\x{63EB}\\x{63EC}\\x{63ED}\\x{63EE}\\x{63EF}\\x{63F0}\\x{63F1}\\x{63F2}' .\n          '\\x{63F3}\\x{63F4}\\x{63F5}\\x{63F6}\\x{63F7}\\x{63F8}\\x{63F9}\\x{63FA}\\x{63FB}' .\n          '\\x{63FC}\\x{63FD}\\x{63FE}\\x{63FF}\\x{6400}\\x{6401}\\x{6402}\\x{6403}\\x{6404}' .\n          '\\x{6405}\\x{6406}\\x{6408}\\x{6409}\\x{640A}\\x{640B}\\x{640C}\\x{640D}\\x{640E}' .\n          '\\x{640F}\\x{6410}\\x{6411}\\x{6412}\\x{6413}\\x{6414}\\x{6415}\\x{6416}\\x{6417}' .\n          '\\x{6418}\\x{6419}\\x{641A}\\x{641B}\\x{641C}\\x{641D}\\x{641E}\\x{641F}\\x{6420}' .\n          '\\x{6421}\\x{6422}\\x{6423}\\x{6424}\\x{6425}\\x{6426}\\x{6427}\\x{6428}\\x{6429}' .\n          '\\x{642A}\\x{642B}\\x{642C}\\x{642D}\\x{642E}\\x{642F}\\x{6430}\\x{6431}\\x{6432}' .\n          '\\x{6433}\\x{6434}\\x{6435}\\x{6436}\\x{6437}\\x{6438}\\x{6439}\\x{643A}\\x{643D}' .\n          '\\x{643E}\\x{643F}\\x{6440}\\x{6441}\\x{6443}\\x{6444}\\x{6445}\\x{6446}\\x{6447}' .\n          '\\x{6448}\\x{644A}\\x{644B}\\x{644C}\\x{644D}\\x{644E}\\x{644F}\\x{6450}\\x{6451}' .\n          '\\x{6452}\\x{6453}\\x{6454}\\x{6455}\\x{6456}\\x{6457}\\x{6458}\\x{6459}\\x{645B}' .\n          '\\x{645C}\\x{645D}\\x{645E}\\x{645F}\\x{6460}\\x{6461}\\x{6462}\\x{6463}\\x{6464}' .\n          '\\x{6465}\\x{6466}\\x{6467}\\x{6468}\\x{6469}\\x{646A}\\x{646B}\\x{646C}\\x{646D}' .\n          '\\x{646E}\\x{646F}\\x{6470}\\x{6471}\\x{6472}\\x{6473}\\x{6474}\\x{6475}\\x{6476}' .\n          '\\x{6477}\\x{6478}\\x{6479}\\x{647A}\\x{647B}\\x{647C}\\x{647D}\\x{647F}\\x{6480}' .\n          '\\x{6481}\\x{6482}\\x{6483}\\x{6484}\\x{6485}\\x{6487}\\x{6488}\\x{6489}\\x{648A}' .\n          '\\x{648B}\\x{648C}\\x{648D}\\x{648E}\\x{648F}\\x{6490}\\x{6491}\\x{6492}\\x{6493}' .\n          '\\x{6494}\\x{6495}\\x{6496}\\x{6497}\\x{6498}\\x{6499}\\x{649A}\\x{649B}\\x{649C}' .\n          '\\x{649D}\\x{649E}\\x{649F}\\x{64A0}\\x{64A2}\\x{64A3}\\x{64A4}\\x{64A5}\\x{64A6}' .\n          '\\x{64A7}\\x{64A8}\\x{64A9}\\x{64AA}\\x{64AB}\\x{64AC}\\x{64AD}\\x{64AE}\\x{64B0}' .\n          '\\x{64B1}\\x{64B2}\\x{64B3}\\x{64B4}\\x{64B5}\\x{64B7}\\x{64B8}\\x{64B9}\\x{64BA}' .\n          '\\x{64BB}\\x{64BC}\\x{64BD}\\x{64BE}\\x{64BF}\\x{64C0}\\x{64C1}\\x{64C2}\\x{64C3}' .\n          '\\x{64C4}\\x{64C5}\\x{64C6}\\x{64C7}\\x{64C9}\\x{64CA}\\x{64CB}\\x{64CC}\\x{64CD}' .\n          '\\x{64CE}\\x{64CF}\\x{64D0}\\x{64D1}\\x{64D2}\\x{64D3}\\x{64D4}\\x{64D6}\\x{64D7}' .\n          '\\x{64D8}\\x{64D9}\\x{64DA}\\x{64DB}\\x{64DC}\\x{64DD}\\x{64DE}\\x{64DF}\\x{64E0}' .\n          '\\x{64E2}\\x{64E3}\\x{64E4}\\x{64E6}\\x{64E7}\\x{64E8}\\x{64E9}\\x{64EA}\\x{64EB}' .\n          '\\x{64EC}\\x{64ED}\\x{64EF}\\x{64F0}\\x{64F1}\\x{64F2}\\x{64F3}\\x{64F4}\\x{64F6}' .\n          '\\x{64F7}\\x{64F8}\\x{64FA}\\x{64FB}\\x{64FC}\\x{64FD}\\x{64FE}\\x{64FF}\\x{6500}' .\n          '\\x{6501}\\x{6503}\\x{6504}\\x{6505}\\x{6506}\\x{6507}\\x{6508}\\x{6509}\\x{650B}' .\n          '\\x{650C}\\x{650D}\\x{650E}\\x{650F}\\x{6510}\\x{6511}\\x{6512}\\x{6513}\\x{6514}' .\n          '\\x{6515}\\x{6516}\\x{6517}\\x{6518}\\x{6519}\\x{651A}\\x{651B}\\x{651C}\\x{651D}' .\n          '\\x{651E}\\x{6520}\\x{6521}\\x{6522}\\x{6523}\\x{6524}\\x{6525}\\x{6526}\\x{6527}' .\n          '\\x{6529}\\x{652A}\\x{652B}\\x{652C}\\x{652D}\\x{652E}\\x{652F}\\x{6530}\\x{6531}' .\n          '\\x{6532}\\x{6533}\\x{6534}\\x{6535}\\x{6536}\\x{6537}\\x{6538}\\x{6539}\\x{653A}' .\n          '\\x{653B}\\x{653C}\\x{653D}\\x{653E}\\x{653F}\\x{6541}\\x{6543}\\x{6544}\\x{6545}' .\n          '\\x{6546}\\x{6547}\\x{6548}\\x{6549}\\x{654A}\\x{654B}\\x{654C}\\x{654D}\\x{654E}' .\n          '\\x{654F}\\x{6550}\\x{6551}\\x{6552}\\x{6553}\\x{6554}\\x{6555}\\x{6556}\\x{6557}' .\n          '\\x{6558}\\x{6559}\\x{655B}\\x{655C}\\x{655D}\\x{655E}\\x{6560}\\x{6561}\\x{6562}' .\n          '\\x{6563}\\x{6564}\\x{6565}\\x{6566}\\x{6567}\\x{6568}\\x{6569}\\x{656A}\\x{656B}' .\n          '\\x{656C}\\x{656E}\\x{656F}\\x{6570}\\x{6571}\\x{6572}\\x{6573}\\x{6574}\\x{6575}' .\n          '\\x{6576}\\x{6577}\\x{6578}\\x{6579}\\x{657A}\\x{657B}\\x{657C}\\x{657E}\\x{657F}' .\n          '\\x{6580}\\x{6581}\\x{6582}\\x{6583}\\x{6584}\\x{6585}\\x{6586}\\x{6587}\\x{6588}' .\n          '\\x{6589}\\x{658B}\\x{658C}\\x{658D}\\x{658E}\\x{658F}\\x{6590}\\x{6591}\\x{6592}' .\n          '\\x{6593}\\x{6594}\\x{6595}\\x{6596}\\x{6597}\\x{6598}\\x{6599}\\x{659B}\\x{659C}' .\n          '\\x{659D}\\x{659E}\\x{659F}\\x{65A0}\\x{65A1}\\x{65A2}\\x{65A3}\\x{65A4}\\x{65A5}' .\n          '\\x{65A6}\\x{65A7}\\x{65A8}\\x{65A9}\\x{65AA}\\x{65AB}\\x{65AC}\\x{65AD}\\x{65AE}' .\n          '\\x{65AF}\\x{65B0}\\x{65B1}\\x{65B2}\\x{65B3}\\x{65B4}\\x{65B6}\\x{65B7}\\x{65B8}' .\n          '\\x{65B9}\\x{65BA}\\x{65BB}\\x{65BC}\\x{65BD}\\x{65BF}\\x{65C0}\\x{65C1}\\x{65C2}' .\n          '\\x{65C3}\\x{65C4}\\x{65C5}\\x{65C6}\\x{65C7}\\x{65CA}\\x{65CB}\\x{65CC}\\x{65CD}' .\n          '\\x{65CE}\\x{65CF}\\x{65D0}\\x{65D2}\\x{65D3}\\x{65D4}\\x{65D5}\\x{65D6}\\x{65D7}' .\n          '\\x{65DA}\\x{65DB}\\x{65DD}\\x{65DE}\\x{65DF}\\x{65E0}\\x{65E1}\\x{65E2}\\x{65E3}' .\n          '\\x{65E5}\\x{65E6}\\x{65E7}\\x{65E8}\\x{65E9}\\x{65EB}\\x{65EC}\\x{65ED}\\x{65EE}' .\n          '\\x{65EF}\\x{65F0}\\x{65F1}\\x{65F2}\\x{65F3}\\x{65F4}\\x{65F5}\\x{65F6}\\x{65F7}' .\n          '\\x{65F8}\\x{65FA}\\x{65FB}\\x{65FC}\\x{65FD}\\x{6600}\\x{6601}\\x{6602}\\x{6603}' .\n          '\\x{6604}\\x{6605}\\x{6606}\\x{6607}\\x{6608}\\x{6609}\\x{660A}\\x{660B}\\x{660C}' .\n          '\\x{660D}\\x{660E}\\x{660F}\\x{6610}\\x{6611}\\x{6612}\\x{6613}\\x{6614}\\x{6615}' .\n          '\\x{6616}\\x{6618}\\x{6619}\\x{661A}\\x{661B}\\x{661C}\\x{661D}\\x{661F}\\x{6620}' .\n          '\\x{6621}\\x{6622}\\x{6623}\\x{6624}\\x{6625}\\x{6626}\\x{6627}\\x{6628}\\x{6629}' .\n          '\\x{662A}\\x{662B}\\x{662D}\\x{662E}\\x{662F}\\x{6630}\\x{6631}\\x{6632}\\x{6633}' .\n          '\\x{6634}\\x{6635}\\x{6636}\\x{6639}\\x{663A}\\x{663C}\\x{663D}\\x{663E}\\x{6640}' .\n          '\\x{6641}\\x{6642}\\x{6643}\\x{6644}\\x{6645}\\x{6646}\\x{6647}\\x{6649}\\x{664A}' .\n          '\\x{664B}\\x{664C}\\x{664E}\\x{664F}\\x{6650}\\x{6651}\\x{6652}\\x{6653}\\x{6654}' .\n          '\\x{6655}\\x{6656}\\x{6657}\\x{6658}\\x{6659}\\x{665A}\\x{665B}\\x{665C}\\x{665D}' .\n          '\\x{665E}\\x{665F}\\x{6661}\\x{6662}\\x{6664}\\x{6665}\\x{6666}\\x{6668}\\x{6669}' .\n          '\\x{666A}\\x{666B}\\x{666C}\\x{666D}\\x{666E}\\x{666F}\\x{6670}\\x{6671}\\x{6672}' .\n          '\\x{6673}\\x{6674}\\x{6675}\\x{6676}\\x{6677}\\x{6678}\\x{6679}\\x{667A}\\x{667B}' .\n          '\\x{667C}\\x{667D}\\x{667E}\\x{667F}\\x{6680}\\x{6681}\\x{6682}\\x{6683}\\x{6684}' .\n          '\\x{6685}\\x{6686}\\x{6687}\\x{6688}\\x{6689}\\x{668A}\\x{668B}\\x{668C}\\x{668D}' .\n          '\\x{668E}\\x{668F}\\x{6690}\\x{6691}\\x{6693}\\x{6694}\\x{6695}\\x{6696}\\x{6697}' .\n          '\\x{6698}\\x{6699}\\x{669A}\\x{669B}\\x{669D}\\x{669F}\\x{66A0}\\x{66A1}\\x{66A2}' .\n          '\\x{66A3}\\x{66A4}\\x{66A5}\\x{66A6}\\x{66A7}\\x{66A8}\\x{66A9}\\x{66AA}\\x{66AB}' .\n          '\\x{66AE}\\x{66AF}\\x{66B0}\\x{66B1}\\x{66B2}\\x{66B3}\\x{66B4}\\x{66B5}\\x{66B6}' .\n          '\\x{66B7}\\x{66B8}\\x{66B9}\\x{66BA}\\x{66BB}\\x{66BC}\\x{66BD}\\x{66BE}\\x{66BF}' .\n          '\\x{66C0}\\x{66C1}\\x{66C2}\\x{66C3}\\x{66C4}\\x{66C5}\\x{66C6}\\x{66C7}\\x{66C8}' .\n          '\\x{66C9}\\x{66CA}\\x{66CB}\\x{66CC}\\x{66CD}\\x{66CE}\\x{66CF}\\x{66D1}\\x{66D2}' .\n          '\\x{66D4}\\x{66D5}\\x{66D6}\\x{66D8}\\x{66D9}\\x{66DA}\\x{66DB}\\x{66DC}\\x{66DD}' .\n          '\\x{66DE}\\x{66E0}\\x{66E1}\\x{66E2}\\x{66E3}\\x{66E4}\\x{66E5}\\x{66E6}\\x{66E7}' .\n          '\\x{66E8}\\x{66E9}\\x{66EA}\\x{66EB}\\x{66EC}\\x{66ED}\\x{66EE}\\x{66F0}\\x{66F1}' .\n          '\\x{66F2}\\x{66F3}\\x{66F4}\\x{66F5}\\x{66F6}\\x{66F7}\\x{66F8}\\x{66F9}\\x{66FA}' .\n          '\\x{66FB}\\x{66FC}\\x{66FE}\\x{66FF}\\x{6700}\\x{6701}\\x{6703}\\x{6704}\\x{6705}' .\n          '\\x{6706}\\x{6708}\\x{6709}\\x{670A}\\x{670B}\\x{670C}\\x{670D}\\x{670E}\\x{670F}' .\n          '\\x{6710}\\x{6711}\\x{6712}\\x{6713}\\x{6714}\\x{6715}\\x{6716}\\x{6717}\\x{6718}' .\n          '\\x{671A}\\x{671B}\\x{671C}\\x{671D}\\x{671E}\\x{671F}\\x{6720}\\x{6721}\\x{6722}' .\n          '\\x{6723}\\x{6725}\\x{6726}\\x{6727}\\x{6728}\\x{672A}\\x{672B}\\x{672C}\\x{672D}' .\n          '\\x{672E}\\x{672F}\\x{6730}\\x{6731}\\x{6732}\\x{6733}\\x{6734}\\x{6735}\\x{6736}' .\n          '\\x{6737}\\x{6738}\\x{6739}\\x{673A}\\x{673B}\\x{673C}\\x{673D}\\x{673E}\\x{673F}' .\n          '\\x{6740}\\x{6741}\\x{6742}\\x{6743}\\x{6744}\\x{6745}\\x{6746}\\x{6747}\\x{6748}' .\n          '\\x{6749}\\x{674A}\\x{674B}\\x{674C}\\x{674D}\\x{674E}\\x{674F}\\x{6750}\\x{6751}' .\n          '\\x{6752}\\x{6753}\\x{6754}\\x{6755}\\x{6756}\\x{6757}\\x{6758}\\x{6759}\\x{675A}' .\n          '\\x{675B}\\x{675C}\\x{675D}\\x{675E}\\x{675F}\\x{6760}\\x{6761}\\x{6762}\\x{6763}' .\n          '\\x{6764}\\x{6765}\\x{6766}\\x{6768}\\x{6769}\\x{676A}\\x{676B}\\x{676C}\\x{676D}' .\n          '\\x{676E}\\x{676F}\\x{6770}\\x{6771}\\x{6772}\\x{6773}\\x{6774}\\x{6775}\\x{6776}' .\n          '\\x{6777}\\x{6778}\\x{6779}\\x{677A}\\x{677B}\\x{677C}\\x{677D}\\x{677E}\\x{677F}' .\n          '\\x{6780}\\x{6781}\\x{6782}\\x{6783}\\x{6784}\\x{6785}\\x{6786}\\x{6787}\\x{6789}' .\n          '\\x{678A}\\x{678B}\\x{678C}\\x{678D}\\x{678E}\\x{678F}\\x{6790}\\x{6791}\\x{6792}' .\n          '\\x{6793}\\x{6794}\\x{6795}\\x{6797}\\x{6798}\\x{6799}\\x{679A}\\x{679B}\\x{679C}' .\n          '\\x{679D}\\x{679E}\\x{679F}\\x{67A0}\\x{67A1}\\x{67A2}\\x{67A3}\\x{67A4}\\x{67A5}' .\n          '\\x{67A6}\\x{67A7}\\x{67A8}\\x{67AA}\\x{67AB}\\x{67AC}\\x{67AD}\\x{67AE}\\x{67AF}' .\n          '\\x{67B0}\\x{67B1}\\x{67B2}\\x{67B3}\\x{67B4}\\x{67B5}\\x{67B6}\\x{67B7}\\x{67B8}' .\n          '\\x{67B9}\\x{67BA}\\x{67BB}\\x{67BC}\\x{67BE}\\x{67C0}\\x{67C1}\\x{67C2}\\x{67C3}' .\n          '\\x{67C4}\\x{67C5}\\x{67C6}\\x{67C7}\\x{67C8}\\x{67C9}\\x{67CA}\\x{67CB}\\x{67CC}' .\n          '\\x{67CD}\\x{67CE}\\x{67CF}\\x{67D0}\\x{67D1}\\x{67D2}\\x{67D3}\\x{67D4}\\x{67D6}' .\n          '\\x{67D8}\\x{67D9}\\x{67DA}\\x{67DB}\\x{67DC}\\x{67DD}\\x{67DE}\\x{67DF}\\x{67E0}' .\n          '\\x{67E1}\\x{67E2}\\x{67E3}\\x{67E4}\\x{67E5}\\x{67E6}\\x{67E7}\\x{67E8}\\x{67E9}' .\n          '\\x{67EA}\\x{67EB}\\x{67EC}\\x{67ED}\\x{67EE}\\x{67EF}\\x{67F0}\\x{67F1}\\x{67F2}' .\n          '\\x{67F3}\\x{67F4}\\x{67F5}\\x{67F6}\\x{67F7}\\x{67F8}\\x{67FA}\\x{67FB}\\x{67FC}' .\n          '\\x{67FD}\\x{67FE}\\x{67FF}\\x{6800}\\x{6802}\\x{6803}\\x{6804}\\x{6805}\\x{6806}' .\n          '\\x{6807}\\x{6808}\\x{6809}\\x{680A}\\x{680B}\\x{680C}\\x{680D}\\x{680E}\\x{680F}' .\n          '\\x{6810}\\x{6811}\\x{6812}\\x{6813}\\x{6814}\\x{6816}\\x{6817}\\x{6818}\\x{6819}' .\n          '\\x{681A}\\x{681B}\\x{681C}\\x{681D}\\x{681F}\\x{6820}\\x{6821}\\x{6822}\\x{6823}' .\n          '\\x{6824}\\x{6825}\\x{6826}\\x{6828}\\x{6829}\\x{682A}\\x{682B}\\x{682C}\\x{682D}' .\n          '\\x{682E}\\x{682F}\\x{6831}\\x{6832}\\x{6833}\\x{6834}\\x{6835}\\x{6836}\\x{6837}' .\n          '\\x{6838}\\x{6839}\\x{683A}\\x{683B}\\x{683C}\\x{683D}\\x{683E}\\x{683F}\\x{6840}' .\n          '\\x{6841}\\x{6842}\\x{6843}\\x{6844}\\x{6845}\\x{6846}\\x{6847}\\x{6848}\\x{6849}' .\n          '\\x{684A}\\x{684B}\\x{684C}\\x{684D}\\x{684E}\\x{684F}\\x{6850}\\x{6851}\\x{6852}' .\n          '\\x{6853}\\x{6854}\\x{6855}\\x{6856}\\x{6857}\\x{685B}\\x{685D}\\x{6860}\\x{6861}' .\n          '\\x{6862}\\x{6863}\\x{6864}\\x{6865}\\x{6866}\\x{6867}\\x{6868}\\x{6869}\\x{686A}' .\n          '\\x{686B}\\x{686C}\\x{686D}\\x{686E}\\x{686F}\\x{6870}\\x{6871}\\x{6872}\\x{6873}' .\n          '\\x{6874}\\x{6875}\\x{6876}\\x{6877}\\x{6878}\\x{6879}\\x{687B}\\x{687C}\\x{687D}' .\n          '\\x{687E}\\x{687F}\\x{6880}\\x{6881}\\x{6882}\\x{6883}\\x{6884}\\x{6885}\\x{6886}' .\n          '\\x{6887}\\x{6888}\\x{6889}\\x{688A}\\x{688B}\\x{688C}\\x{688D}\\x{688E}\\x{688F}' .\n          '\\x{6890}\\x{6891}\\x{6892}\\x{6893}\\x{6894}\\x{6896}\\x{6897}\\x{6898}\\x{689A}' .\n          '\\x{689B}\\x{689C}\\x{689D}\\x{689E}\\x{689F}\\x{68A0}\\x{68A1}\\x{68A2}\\x{68A3}' .\n          '\\x{68A4}\\x{68A6}\\x{68A7}\\x{68A8}\\x{68A9}\\x{68AA}\\x{68AB}\\x{68AC}\\x{68AD}' .\n          '\\x{68AE}\\x{68AF}\\x{68B0}\\x{68B1}\\x{68B2}\\x{68B3}\\x{68B4}\\x{68B5}\\x{68B6}' .\n          '\\x{68B7}\\x{68B9}\\x{68BB}\\x{68BC}\\x{68BD}\\x{68BE}\\x{68BF}\\x{68C0}\\x{68C1}' .\n          '\\x{68C2}\\x{68C4}\\x{68C6}\\x{68C7}\\x{68C8}\\x{68C9}\\x{68CA}\\x{68CB}\\x{68CC}' .\n          '\\x{68CD}\\x{68CE}\\x{68CF}\\x{68D0}\\x{68D1}\\x{68D2}\\x{68D3}\\x{68D4}\\x{68D5}' .\n          '\\x{68D6}\\x{68D7}\\x{68D8}\\x{68DA}\\x{68DB}\\x{68DC}\\x{68DD}\\x{68DE}\\x{68DF}' .\n          '\\x{68E0}\\x{68E1}\\x{68E3}\\x{68E4}\\x{68E6}\\x{68E7}\\x{68E8}\\x{68E9}\\x{68EA}' .\n          '\\x{68EB}\\x{68EC}\\x{68ED}\\x{68EE}\\x{68EF}\\x{68F0}\\x{68F1}\\x{68F2}\\x{68F3}' .\n          '\\x{68F4}\\x{68F5}\\x{68F6}\\x{68F7}\\x{68F8}\\x{68F9}\\x{68FA}\\x{68FB}\\x{68FC}' .\n          '\\x{68FD}\\x{68FE}\\x{68FF}\\x{6901}\\x{6902}\\x{6903}\\x{6904}\\x{6905}\\x{6906}' .\n          '\\x{6907}\\x{6908}\\x{690A}\\x{690B}\\x{690C}\\x{690D}\\x{690E}\\x{690F}\\x{6910}' .\n          '\\x{6911}\\x{6912}\\x{6913}\\x{6914}\\x{6915}\\x{6916}\\x{6917}\\x{6918}\\x{6919}' .\n          '\\x{691A}\\x{691B}\\x{691C}\\x{691D}\\x{691E}\\x{691F}\\x{6920}\\x{6921}\\x{6922}' .\n          '\\x{6923}\\x{6924}\\x{6925}\\x{6926}\\x{6927}\\x{6928}\\x{6929}\\x{692A}\\x{692B}' .\n          '\\x{692C}\\x{692D}\\x{692E}\\x{692F}\\x{6930}\\x{6931}\\x{6932}\\x{6933}\\x{6934}' .\n          '\\x{6935}\\x{6936}\\x{6937}\\x{6938}\\x{6939}\\x{693A}\\x{693B}\\x{693C}\\x{693D}' .\n          '\\x{693F}\\x{6940}\\x{6941}\\x{6942}\\x{6943}\\x{6944}\\x{6945}\\x{6946}\\x{6947}' .\n          '\\x{6948}\\x{6949}\\x{694A}\\x{694B}\\x{694C}\\x{694E}\\x{694F}\\x{6950}\\x{6951}' .\n          '\\x{6952}\\x{6953}\\x{6954}\\x{6955}\\x{6956}\\x{6957}\\x{6958}\\x{6959}\\x{695A}' .\n          '\\x{695B}\\x{695C}\\x{695D}\\x{695E}\\x{695F}\\x{6960}\\x{6961}\\x{6962}\\x{6963}' .\n          '\\x{6964}\\x{6965}\\x{6966}\\x{6967}\\x{6968}\\x{6969}\\x{696A}\\x{696B}\\x{696C}' .\n          '\\x{696D}\\x{696E}\\x{696F}\\x{6970}\\x{6971}\\x{6972}\\x{6973}\\x{6974}\\x{6975}' .\n          '\\x{6976}\\x{6977}\\x{6978}\\x{6979}\\x{697A}\\x{697B}\\x{697C}\\x{697D}\\x{697E}' .\n          '\\x{697F}\\x{6980}\\x{6981}\\x{6982}\\x{6983}\\x{6984}\\x{6985}\\x{6986}\\x{6987}' .\n          '\\x{6988}\\x{6989}\\x{698A}\\x{698B}\\x{698C}\\x{698D}\\x{698E}\\x{698F}\\x{6990}' .\n          '\\x{6991}\\x{6992}\\x{6993}\\x{6994}\\x{6995}\\x{6996}\\x{6997}\\x{6998}\\x{6999}' .\n          '\\x{699A}\\x{699B}\\x{699C}\\x{699D}\\x{699E}\\x{69A0}\\x{69A1}\\x{69A3}\\x{69A4}' .\n          '\\x{69A5}\\x{69A6}\\x{69A7}\\x{69A8}\\x{69A9}\\x{69AA}\\x{69AB}\\x{69AC}\\x{69AD}' .\n          '\\x{69AE}\\x{69AF}\\x{69B0}\\x{69B1}\\x{69B2}\\x{69B3}\\x{69B4}\\x{69B5}\\x{69B6}' .\n          '\\x{69B7}\\x{69B8}\\x{69B9}\\x{69BA}\\x{69BB}\\x{69BC}\\x{69BD}\\x{69BE}\\x{69BF}' .\n          '\\x{69C1}\\x{69C2}\\x{69C3}\\x{69C4}\\x{69C5}\\x{69C6}\\x{69C7}\\x{69C8}\\x{69C9}' .\n          '\\x{69CA}\\x{69CB}\\x{69CC}\\x{69CD}\\x{69CE}\\x{69CF}\\x{69D0}\\x{69D3}\\x{69D4}' .\n          '\\x{69D8}\\x{69D9}\\x{69DA}\\x{69DB}\\x{69DC}\\x{69DD}\\x{69DE}\\x{69DF}\\x{69E0}' .\n          '\\x{69E1}\\x{69E2}\\x{69E3}\\x{69E4}\\x{69E5}\\x{69E6}\\x{69E7}\\x{69E8}\\x{69E9}' .\n          '\\x{69EA}\\x{69EB}\\x{69EC}\\x{69ED}\\x{69EE}\\x{69EF}\\x{69F0}\\x{69F1}\\x{69F2}' .\n          '\\x{69F3}\\x{69F4}\\x{69F5}\\x{69F6}\\x{69F7}\\x{69F8}\\x{69FA}\\x{69FB}\\x{69FC}' .\n          '\\x{69FD}\\x{69FE}\\x{69FF}\\x{6A00}\\x{6A01}\\x{6A02}\\x{6A04}\\x{6A05}\\x{6A06}' .\n          '\\x{6A07}\\x{6A08}\\x{6A09}\\x{6A0A}\\x{6A0B}\\x{6A0D}\\x{6A0E}\\x{6A0F}\\x{6A10}' .\n          '\\x{6A11}\\x{6A12}\\x{6A13}\\x{6A14}\\x{6A15}\\x{6A16}\\x{6A17}\\x{6A18}\\x{6A19}' .\n          '\\x{6A1A}\\x{6A1B}\\x{6A1D}\\x{6A1E}\\x{6A1F}\\x{6A20}\\x{6A21}\\x{6A22}\\x{6A23}' .\n          '\\x{6A25}\\x{6A26}\\x{6A27}\\x{6A28}\\x{6A29}\\x{6A2A}\\x{6A2B}\\x{6A2C}\\x{6A2D}' .\n          '\\x{6A2E}\\x{6A2F}\\x{6A30}\\x{6A31}\\x{6A32}\\x{6A33}\\x{6A34}\\x{6A35}\\x{6A36}' .\n          '\\x{6A38}\\x{6A39}\\x{6A3A}\\x{6A3B}\\x{6A3C}\\x{6A3D}\\x{6A3E}\\x{6A3F}\\x{6A40}' .\n          '\\x{6A41}\\x{6A42}\\x{6A43}\\x{6A44}\\x{6A45}\\x{6A46}\\x{6A47}\\x{6A48}\\x{6A49}' .\n          '\\x{6A4B}\\x{6A4C}\\x{6A4D}\\x{6A4E}\\x{6A4F}\\x{6A50}\\x{6A51}\\x{6A52}\\x{6A54}' .\n          '\\x{6A55}\\x{6A56}\\x{6A57}\\x{6A58}\\x{6A59}\\x{6A5A}\\x{6A5B}\\x{6A5D}\\x{6A5E}' .\n          '\\x{6A5F}\\x{6A60}\\x{6A61}\\x{6A62}\\x{6A63}\\x{6A64}\\x{6A65}\\x{6A66}\\x{6A67}' .\n          '\\x{6A68}\\x{6A69}\\x{6A6A}\\x{6A6B}\\x{6A6C}\\x{6A6D}\\x{6A6F}\\x{6A71}\\x{6A72}' .\n          '\\x{6A73}\\x{6A74}\\x{6A75}\\x{6A76}\\x{6A77}\\x{6A78}\\x{6A79}\\x{6A7A}\\x{6A7B}' .\n          '\\x{6A7C}\\x{6A7D}\\x{6A7E}\\x{6A7F}\\x{6A80}\\x{6A81}\\x{6A82}\\x{6A83}\\x{6A84}' .\n          '\\x{6A85}\\x{6A87}\\x{6A88}\\x{6A89}\\x{6A8B}\\x{6A8C}\\x{6A8D}\\x{6A8E}\\x{6A90}' .\n          '\\x{6A91}\\x{6A92}\\x{6A93}\\x{6A94}\\x{6A95}\\x{6A96}\\x{6A97}\\x{6A98}\\x{6A9A}' .\n          '\\x{6A9B}\\x{6A9C}\\x{6A9E}\\x{6A9F}\\x{6AA0}\\x{6AA1}\\x{6AA2}\\x{6AA3}\\x{6AA4}' .\n          '\\x{6AA5}\\x{6AA6}\\x{6AA7}\\x{6AA8}\\x{6AA9}\\x{6AAB}\\x{6AAC}\\x{6AAD}\\x{6AAE}' .\n          '\\x{6AAF}\\x{6AB0}\\x{6AB2}\\x{6AB3}\\x{6AB4}\\x{6AB5}\\x{6AB6}\\x{6AB7}\\x{6AB8}' .\n          '\\x{6AB9}\\x{6ABA}\\x{6ABB}\\x{6ABC}\\x{6ABD}\\x{6ABF}\\x{6AC1}\\x{6AC2}\\x{6AC3}' .\n          '\\x{6AC5}\\x{6AC6}\\x{6AC7}\\x{6ACA}\\x{6ACB}\\x{6ACC}\\x{6ACD}\\x{6ACE}\\x{6ACF}' .\n          '\\x{6AD0}\\x{6AD1}\\x{6AD2}\\x{6AD3}\\x{6AD4}\\x{6AD5}\\x{6AD6}\\x{6AD7}\\x{6AD9}' .\n          '\\x{6ADA}\\x{6ADB}\\x{6ADC}\\x{6ADD}\\x{6ADE}\\x{6ADF}\\x{6AE0}\\x{6AE1}\\x{6AE2}' .\n          '\\x{6AE3}\\x{6AE4}\\x{6AE5}\\x{6AE6}\\x{6AE7}\\x{6AE8}\\x{6AEA}\\x{6AEB}\\x{6AEC}' .\n          '\\x{6AED}\\x{6AEE}\\x{6AEF}\\x{6AF0}\\x{6AF1}\\x{6AF2}\\x{6AF3}\\x{6AF4}\\x{6AF5}' .\n          '\\x{6AF6}\\x{6AF7}\\x{6AF8}\\x{6AF9}\\x{6AFA}\\x{6AFB}\\x{6AFC}\\x{6AFD}\\x{6AFE}' .\n          '\\x{6AFF}\\x{6B00}\\x{6B01}\\x{6B02}\\x{6B03}\\x{6B04}\\x{6B05}\\x{6B06}\\x{6B07}' .\n          '\\x{6B08}\\x{6B09}\\x{6B0A}\\x{6B0B}\\x{6B0C}\\x{6B0D}\\x{6B0F}\\x{6B10}\\x{6B11}' .\n          '\\x{6B12}\\x{6B13}\\x{6B14}\\x{6B15}\\x{6B16}\\x{6B17}\\x{6B18}\\x{6B19}\\x{6B1A}' .\n          '\\x{6B1C}\\x{6B1D}\\x{6B1E}\\x{6B1F}\\x{6B20}\\x{6B21}\\x{6B22}\\x{6B23}\\x{6B24}' .\n          '\\x{6B25}\\x{6B26}\\x{6B27}\\x{6B28}\\x{6B29}\\x{6B2A}\\x{6B2B}\\x{6B2C}\\x{6B2D}' .\n          '\\x{6B2F}\\x{6B30}\\x{6B31}\\x{6B32}\\x{6B33}\\x{6B34}\\x{6B36}\\x{6B37}\\x{6B38}' .\n          '\\x{6B39}\\x{6B3A}\\x{6B3B}\\x{6B3C}\\x{6B3D}\\x{6B3E}\\x{6B3F}\\x{6B41}\\x{6B42}' .\n          '\\x{6B43}\\x{6B44}\\x{6B45}\\x{6B46}\\x{6B47}\\x{6B48}\\x{6B49}\\x{6B4A}\\x{6B4B}' .\n          '\\x{6B4C}\\x{6B4D}\\x{6B4E}\\x{6B4F}\\x{6B50}\\x{6B51}\\x{6B52}\\x{6B53}\\x{6B54}' .\n          '\\x{6B55}\\x{6B56}\\x{6B59}\\x{6B5A}\\x{6B5B}\\x{6B5C}\\x{6B5E}\\x{6B5F}\\x{6B60}' .\n          '\\x{6B61}\\x{6B62}\\x{6B63}\\x{6B64}\\x{6B65}\\x{6B66}\\x{6B67}\\x{6B69}\\x{6B6A}' .\n          '\\x{6B6B}\\x{6B6D}\\x{6B6F}\\x{6B70}\\x{6B72}\\x{6B73}\\x{6B74}\\x{6B76}\\x{6B77}' .\n          '\\x{6B78}\\x{6B79}\\x{6B7A}\\x{6B7B}\\x{6B7C}\\x{6B7E}\\x{6B7F}\\x{6B80}\\x{6B81}' .\n          '\\x{6B82}\\x{6B83}\\x{6B84}\\x{6B85}\\x{6B86}\\x{6B87}\\x{6B88}\\x{6B89}\\x{6B8A}' .\n          '\\x{6B8B}\\x{6B8C}\\x{6B8D}\\x{6B8E}\\x{6B8F}\\x{6B90}\\x{6B91}\\x{6B92}\\x{6B93}' .\n          '\\x{6B94}\\x{6B95}\\x{6B96}\\x{6B97}\\x{6B98}\\x{6B99}\\x{6B9A}\\x{6B9B}\\x{6B9C}' .\n          '\\x{6B9D}\\x{6B9E}\\x{6B9F}\\x{6BA0}\\x{6BA1}\\x{6BA2}\\x{6BA3}\\x{6BA4}\\x{6BA5}' .\n          '\\x{6BA6}\\x{6BA7}\\x{6BA8}\\x{6BA9}\\x{6BAA}\\x{6BAB}\\x{6BAC}\\x{6BAD}\\x{6BAE}' .\n          '\\x{6BAF}\\x{6BB0}\\x{6BB2}\\x{6BB3}\\x{6BB4}\\x{6BB5}\\x{6BB6}\\x{6BB7}\\x{6BB9}' .\n          '\\x{6BBA}\\x{6BBB}\\x{6BBC}\\x{6BBD}\\x{6BBE}\\x{6BBF}\\x{6BC0}\\x{6BC1}\\x{6BC2}' .\n          '\\x{6BC3}\\x{6BC4}\\x{6BC5}\\x{6BC6}\\x{6BC7}\\x{6BC8}\\x{6BC9}\\x{6BCA}\\x{6BCB}' .\n          '\\x{6BCC}\\x{6BCD}\\x{6BCE}\\x{6BCF}\\x{6BD0}\\x{6BD1}\\x{6BD2}\\x{6BD3}\\x{6BD4}' .\n          '\\x{6BD5}\\x{6BD6}\\x{6BD7}\\x{6BD8}\\x{6BD9}\\x{6BDA}\\x{6BDB}\\x{6BDC}\\x{6BDD}' .\n          '\\x{6BDE}\\x{6BDF}\\x{6BE0}\\x{6BE1}\\x{6BE2}\\x{6BE3}\\x{6BE4}\\x{6BE5}\\x{6BE6}' .\n          '\\x{6BE7}\\x{6BE8}\\x{6BEA}\\x{6BEB}\\x{6BEC}\\x{6BED}\\x{6BEE}\\x{6BEF}\\x{6BF0}' .\n          '\\x{6BF2}\\x{6BF3}\\x{6BF5}\\x{6BF6}\\x{6BF7}\\x{6BF8}\\x{6BF9}\\x{6BFB}\\x{6BFC}' .\n          '\\x{6BFD}\\x{6BFE}\\x{6BFF}\\x{6C00}\\x{6C01}\\x{6C02}\\x{6C03}\\x{6C04}\\x{6C05}' .\n          '\\x{6C06}\\x{6C07}\\x{6C08}\\x{6C09}\\x{6C0B}\\x{6C0C}\\x{6C0D}\\x{6C0E}\\x{6C0F}' .\n          '\\x{6C10}\\x{6C11}\\x{6C12}\\x{6C13}\\x{6C14}\\x{6C15}\\x{6C16}\\x{6C18}\\x{6C19}' .\n          '\\x{6C1A}\\x{6C1B}\\x{6C1D}\\x{6C1E}\\x{6C1F}\\x{6C20}\\x{6C21}\\x{6C22}\\x{6C23}' .\n          '\\x{6C24}\\x{6C25}\\x{6C26}\\x{6C27}\\x{6C28}\\x{6C29}\\x{6C2A}\\x{6C2B}\\x{6C2C}' .\n          '\\x{6C2E}\\x{6C2F}\\x{6C30}\\x{6C31}\\x{6C32}\\x{6C33}\\x{6C34}\\x{6C35}\\x{6C36}' .\n          '\\x{6C37}\\x{6C38}\\x{6C3A}\\x{6C3B}\\x{6C3D}\\x{6C3E}\\x{6C3F}\\x{6C40}\\x{6C41}' .\n          '\\x{6C42}\\x{6C43}\\x{6C44}\\x{6C46}\\x{6C47}\\x{6C48}\\x{6C49}\\x{6C4A}\\x{6C4B}' .\n          '\\x{6C4C}\\x{6C4D}\\x{6C4E}\\x{6C4F}\\x{6C50}\\x{6C51}\\x{6C52}\\x{6C53}\\x{6C54}' .\n          '\\x{6C55}\\x{6C56}\\x{6C57}\\x{6C58}\\x{6C59}\\x{6C5A}\\x{6C5B}\\x{6C5C}\\x{6C5D}' .\n          '\\x{6C5E}\\x{6C5F}\\x{6C60}\\x{6C61}\\x{6C62}\\x{6C63}\\x{6C64}\\x{6C65}\\x{6C66}' .\n          '\\x{6C67}\\x{6C68}\\x{6C69}\\x{6C6A}\\x{6C6B}\\x{6C6D}\\x{6C6F}\\x{6C70}\\x{6C71}' .\n          '\\x{6C72}\\x{6C73}\\x{6C74}\\x{6C75}\\x{6C76}\\x{6C77}\\x{6C78}\\x{6C79}\\x{6C7A}' .\n          '\\x{6C7B}\\x{6C7C}\\x{6C7D}\\x{6C7E}\\x{6C7F}\\x{6C80}\\x{6C81}\\x{6C82}\\x{6C83}' .\n          '\\x{6C84}\\x{6C85}\\x{6C86}\\x{6C87}\\x{6C88}\\x{6C89}\\x{6C8A}\\x{6C8B}\\x{6C8C}' .\n          '\\x{6C8D}\\x{6C8E}\\x{6C8F}\\x{6C90}\\x{6C91}\\x{6C92}\\x{6C93}\\x{6C94}\\x{6C95}' .\n          '\\x{6C96}\\x{6C97}\\x{6C98}\\x{6C99}\\x{6C9A}\\x{6C9B}\\x{6C9C}\\x{6C9D}\\x{6C9E}' .\n          '\\x{6C9F}\\x{6CA1}\\x{6CA2}\\x{6CA3}\\x{6CA4}\\x{6CA5}\\x{6CA6}\\x{6CA7}\\x{6CA8}' .\n          '\\x{6CA9}\\x{6CAA}\\x{6CAB}\\x{6CAC}\\x{6CAD}\\x{6CAE}\\x{6CAF}\\x{6CB0}\\x{6CB1}' .\n          '\\x{6CB2}\\x{6CB3}\\x{6CB4}\\x{6CB5}\\x{6CB6}\\x{6CB7}\\x{6CB8}\\x{6CB9}\\x{6CBA}' .\n          '\\x{6CBB}\\x{6CBC}\\x{6CBD}\\x{6CBE}\\x{6CBF}\\x{6CC0}\\x{6CC1}\\x{6CC2}\\x{6CC3}' .\n          '\\x{6CC4}\\x{6CC5}\\x{6CC6}\\x{6CC7}\\x{6CC8}\\x{6CC9}\\x{6CCA}\\x{6CCB}\\x{6CCC}' .\n          '\\x{6CCD}\\x{6CCE}\\x{6CCF}\\x{6CD0}\\x{6CD1}\\x{6CD2}\\x{6CD3}\\x{6CD4}\\x{6CD5}' .\n          '\\x{6CD6}\\x{6CD7}\\x{6CD9}\\x{6CDA}\\x{6CDB}\\x{6CDC}\\x{6CDD}\\x{6CDE}\\x{6CDF}' .\n          '\\x{6CE0}\\x{6CE1}\\x{6CE2}\\x{6CE3}\\x{6CE4}\\x{6CE5}\\x{6CE6}\\x{6CE7}\\x{6CE8}' .\n          '\\x{6CE9}\\x{6CEA}\\x{6CEB}\\x{6CEC}\\x{6CED}\\x{6CEE}\\x{6CEF}\\x{6CF0}\\x{6CF1}' .\n          '\\x{6CF2}\\x{6CF3}\\x{6CF5}\\x{6CF6}\\x{6CF7}\\x{6CF8}\\x{6CF9}\\x{6CFA}\\x{6CFB}' .\n          '\\x{6CFC}\\x{6CFD}\\x{6CFE}\\x{6CFF}\\x{6D00}\\x{6D01}\\x{6D03}\\x{6D04}\\x{6D05}' .\n          '\\x{6D06}\\x{6D07}\\x{6D08}\\x{6D09}\\x{6D0A}\\x{6D0B}\\x{6D0C}\\x{6D0D}\\x{6D0E}' .\n          '\\x{6D0F}\\x{6D10}\\x{6D11}\\x{6D12}\\x{6D13}\\x{6D14}\\x{6D15}\\x{6D16}\\x{6D17}' .\n          '\\x{6D18}\\x{6D19}\\x{6D1A}\\x{6D1B}\\x{6D1D}\\x{6D1E}\\x{6D1F}\\x{6D20}\\x{6D21}' .\n          '\\x{6D22}\\x{6D23}\\x{6D25}\\x{6D26}\\x{6D27}\\x{6D28}\\x{6D29}\\x{6D2A}\\x{6D2B}' .\n          '\\x{6D2C}\\x{6D2D}\\x{6D2E}\\x{6D2F}\\x{6D30}\\x{6D31}\\x{6D32}\\x{6D33}\\x{6D34}' .\n          '\\x{6D35}\\x{6D36}\\x{6D37}\\x{6D38}\\x{6D39}\\x{6D3A}\\x{6D3B}\\x{6D3C}\\x{6D3D}' .\n          '\\x{6D3E}\\x{6D3F}\\x{6D40}\\x{6D41}\\x{6D42}\\x{6D43}\\x{6D44}\\x{6D45}\\x{6D46}' .\n          '\\x{6D47}\\x{6D48}\\x{6D49}\\x{6D4A}\\x{6D4B}\\x{6D4C}\\x{6D4D}\\x{6D4E}\\x{6D4F}' .\n          '\\x{6D50}\\x{6D51}\\x{6D52}\\x{6D53}\\x{6D54}\\x{6D55}\\x{6D56}\\x{6D57}\\x{6D58}' .\n          '\\x{6D59}\\x{6D5A}\\x{6D5B}\\x{6D5C}\\x{6D5D}\\x{6D5E}\\x{6D5F}\\x{6D60}\\x{6D61}' .\n          '\\x{6D62}\\x{6D63}\\x{6D64}\\x{6D65}\\x{6D66}\\x{6D67}\\x{6D68}\\x{6D69}\\x{6D6A}' .\n          '\\x{6D6B}\\x{6D6C}\\x{6D6D}\\x{6D6E}\\x{6D6F}\\x{6D70}\\x{6D72}\\x{6D73}\\x{6D74}' .\n          '\\x{6D75}\\x{6D76}\\x{6D77}\\x{6D78}\\x{6D79}\\x{6D7A}\\x{6D7B}\\x{6D7C}\\x{6D7D}' .\n          '\\x{6D7E}\\x{6D7F}\\x{6D80}\\x{6D82}\\x{6D83}\\x{6D84}\\x{6D85}\\x{6D86}\\x{6D87}' .\n          '\\x{6D88}\\x{6D89}\\x{6D8A}\\x{6D8B}\\x{6D8C}\\x{6D8D}\\x{6D8E}\\x{6D8F}\\x{6D90}' .\n          '\\x{6D91}\\x{6D92}\\x{6D93}\\x{6D94}\\x{6D95}\\x{6D97}\\x{6D98}\\x{6D99}\\x{6D9A}' .\n          '\\x{6D9B}\\x{6D9D}\\x{6D9E}\\x{6D9F}\\x{6DA0}\\x{6DA1}\\x{6DA2}\\x{6DA3}\\x{6DA4}' .\n          '\\x{6DA5}\\x{6DA6}\\x{6DA7}\\x{6DA8}\\x{6DA9}\\x{6DAA}\\x{6DAB}\\x{6DAC}\\x{6DAD}' .\n          '\\x{6DAE}\\x{6DAF}\\x{6DB2}\\x{6DB3}\\x{6DB4}\\x{6DB5}\\x{6DB7}\\x{6DB8}\\x{6DB9}' .\n          '\\x{6DBA}\\x{6DBB}\\x{6DBC}\\x{6DBD}\\x{6DBE}\\x{6DBF}\\x{6DC0}\\x{6DC1}\\x{6DC2}' .\n          '\\x{6DC3}\\x{6DC4}\\x{6DC5}\\x{6DC6}\\x{6DC7}\\x{6DC8}\\x{6DC9}\\x{6DCA}\\x{6DCB}' .\n          '\\x{6DCC}\\x{6DCD}\\x{6DCE}\\x{6DCF}\\x{6DD0}\\x{6DD1}\\x{6DD2}\\x{6DD3}\\x{6DD4}' .\n          '\\x{6DD5}\\x{6DD6}\\x{6DD7}\\x{6DD8}\\x{6DD9}\\x{6DDA}\\x{6DDB}\\x{6DDC}\\x{6DDD}' .\n          '\\x{6DDE}\\x{6DDF}\\x{6DE0}\\x{6DE1}\\x{6DE2}\\x{6DE3}\\x{6DE4}\\x{6DE5}\\x{6DE6}' .\n          '\\x{6DE7}\\x{6DE8}\\x{6DE9}\\x{6DEA}\\x{6DEB}\\x{6DEC}\\x{6DED}\\x{6DEE}\\x{6DEF}' .\n          '\\x{6DF0}\\x{6DF1}\\x{6DF2}\\x{6DF3}\\x{6DF4}\\x{6DF5}\\x{6DF6}\\x{6DF7}\\x{6DF8}' .\n          '\\x{6DF9}\\x{6DFA}\\x{6DFB}\\x{6DFC}\\x{6DFD}\\x{6E00}\\x{6E03}\\x{6E04}\\x{6E05}' .\n          '\\x{6E07}\\x{6E08}\\x{6E09}\\x{6E0A}\\x{6E0B}\\x{6E0C}\\x{6E0D}\\x{6E0E}\\x{6E0F}' .\n          '\\x{6E10}\\x{6E11}\\x{6E14}\\x{6E15}\\x{6E16}\\x{6E17}\\x{6E19}\\x{6E1A}\\x{6E1B}' .\n          '\\x{6E1C}\\x{6E1D}\\x{6E1E}\\x{6E1F}\\x{6E20}\\x{6E21}\\x{6E22}\\x{6E23}\\x{6E24}' .\n          '\\x{6E25}\\x{6E26}\\x{6E27}\\x{6E28}\\x{6E29}\\x{6E2B}\\x{6E2C}\\x{6E2D}\\x{6E2E}' .\n          '\\x{6E2F}\\x{6E30}\\x{6E31}\\x{6E32}\\x{6E33}\\x{6E34}\\x{6E35}\\x{6E36}\\x{6E37}' .\n          '\\x{6E38}\\x{6E39}\\x{6E3A}\\x{6E3B}\\x{6E3C}\\x{6E3D}\\x{6E3E}\\x{6E3F}\\x{6E40}' .\n          '\\x{6E41}\\x{6E42}\\x{6E43}\\x{6E44}\\x{6E45}\\x{6E46}\\x{6E47}\\x{6E48}\\x{6E49}' .\n          '\\x{6E4A}\\x{6E4B}\\x{6E4D}\\x{6E4E}\\x{6E4F}\\x{6E50}\\x{6E51}\\x{6E52}\\x{6E53}' .\n          '\\x{6E54}\\x{6E55}\\x{6E56}\\x{6E57}\\x{6E58}\\x{6E59}\\x{6E5A}\\x{6E5B}\\x{6E5C}' .\n          '\\x{6E5D}\\x{6E5E}\\x{6E5F}\\x{6E60}\\x{6E61}\\x{6E62}\\x{6E63}\\x{6E64}\\x{6E65}' .\n          '\\x{6E66}\\x{6E67}\\x{6E68}\\x{6E69}\\x{6E6A}\\x{6E6B}\\x{6E6D}\\x{6E6E}\\x{6E6F}' .\n          '\\x{6E70}\\x{6E71}\\x{6E72}\\x{6E73}\\x{6E74}\\x{6E75}\\x{6E77}\\x{6E78}\\x{6E79}' .\n          '\\x{6E7E}\\x{6E7F}\\x{6E80}\\x{6E81}\\x{6E82}\\x{6E83}\\x{6E84}\\x{6E85}\\x{6E86}' .\n          '\\x{6E87}\\x{6E88}\\x{6E89}\\x{6E8A}\\x{6E8D}\\x{6E8E}\\x{6E8F}\\x{6E90}\\x{6E91}' .\n          '\\x{6E92}\\x{6E93}\\x{6E94}\\x{6E96}\\x{6E97}\\x{6E98}\\x{6E99}\\x{6E9A}\\x{6E9B}' .\n          '\\x{6E9C}\\x{6E9D}\\x{6E9E}\\x{6E9F}\\x{6EA0}\\x{6EA1}\\x{6EA2}\\x{6EA3}\\x{6EA4}' .\n          '\\x{6EA5}\\x{6EA6}\\x{6EA7}\\x{6EA8}\\x{6EA9}\\x{6EAA}\\x{6EAB}\\x{6EAC}\\x{6EAD}' .\n          '\\x{6EAE}\\x{6EAF}\\x{6EB0}\\x{6EB1}\\x{6EB2}\\x{6EB3}\\x{6EB4}\\x{6EB5}\\x{6EB6}' .\n          '\\x{6EB7}\\x{6EB8}\\x{6EB9}\\x{6EBA}\\x{6EBB}\\x{6EBC}\\x{6EBD}\\x{6EBE}\\x{6EBF}' .\n          '\\x{6EC0}\\x{6EC1}\\x{6EC2}\\x{6EC3}\\x{6EC4}\\x{6EC5}\\x{6EC6}\\x{6EC7}\\x{6EC8}' .\n          '\\x{6EC9}\\x{6ECA}\\x{6ECB}\\x{6ECC}\\x{6ECD}\\x{6ECE}\\x{6ECF}\\x{6ED0}\\x{6ED1}' .\n          '\\x{6ED2}\\x{6ED3}\\x{6ED4}\\x{6ED5}\\x{6ED6}\\x{6ED7}\\x{6ED8}\\x{6ED9}\\x{6EDA}' .\n          '\\x{6EDC}\\x{6EDE}\\x{6EDF}\\x{6EE0}\\x{6EE1}\\x{6EE2}\\x{6EE4}\\x{6EE5}\\x{6EE6}' .\n          '\\x{6EE7}\\x{6EE8}\\x{6EE9}\\x{6EEA}\\x{6EEB}\\x{6EEC}\\x{6EED}\\x{6EEE}\\x{6EEF}' .\n          '\\x{6EF0}\\x{6EF1}\\x{6EF2}\\x{6EF3}\\x{6EF4}\\x{6EF5}\\x{6EF6}\\x{6EF7}\\x{6EF8}' .\n          '\\x{6EF9}\\x{6EFA}\\x{6EFB}\\x{6EFC}\\x{6EFD}\\x{6EFE}\\x{6EFF}\\x{6F00}\\x{6F01}' .\n          '\\x{6F02}\\x{6F03}\\x{6F05}\\x{6F06}\\x{6F07}\\x{6F08}\\x{6F09}\\x{6F0A}\\x{6F0C}' .\n          '\\x{6F0D}\\x{6F0E}\\x{6F0F}\\x{6F10}\\x{6F11}\\x{6F12}\\x{6F13}\\x{6F14}\\x{6F15}' .\n          '\\x{6F16}\\x{6F17}\\x{6F18}\\x{6F19}\\x{6F1A}\\x{6F1B}\\x{6F1C}\\x{6F1D}\\x{6F1E}' .\n          '\\x{6F1F}\\x{6F20}\\x{6F21}\\x{6F22}\\x{6F23}\\x{6F24}\\x{6F25}\\x{6F26}\\x{6F27}' .\n          '\\x{6F28}\\x{6F29}\\x{6F2A}\\x{6F2B}\\x{6F2C}\\x{6F2D}\\x{6F2E}\\x{6F2F}\\x{6F30}' .\n          '\\x{6F31}\\x{6F32}\\x{6F33}\\x{6F34}\\x{6F35}\\x{6F36}\\x{6F37}\\x{6F38}\\x{6F39}' .\n          '\\x{6F3A}\\x{6F3B}\\x{6F3C}\\x{6F3D}\\x{6F3E}\\x{6F3F}\\x{6F40}\\x{6F41}\\x{6F43}' .\n          '\\x{6F44}\\x{6F45}\\x{6F46}\\x{6F47}\\x{6F49}\\x{6F4B}\\x{6F4C}\\x{6F4D}\\x{6F4E}' .\n          '\\x{6F4F}\\x{6F50}\\x{6F51}\\x{6F52}\\x{6F53}\\x{6F54}\\x{6F55}\\x{6F56}\\x{6F57}' .\n          '\\x{6F58}\\x{6F59}\\x{6F5A}\\x{6F5B}\\x{6F5C}\\x{6F5D}\\x{6F5E}\\x{6F5F}\\x{6F60}' .\n          '\\x{6F61}\\x{6F62}\\x{6F63}\\x{6F64}\\x{6F65}\\x{6F66}\\x{6F67}\\x{6F68}\\x{6F69}' .\n          '\\x{6F6A}\\x{6F6B}\\x{6F6C}\\x{6F6D}\\x{6F6E}\\x{6F6F}\\x{6F70}\\x{6F71}\\x{6F72}' .\n          '\\x{6F73}\\x{6F74}\\x{6F75}\\x{6F76}\\x{6F77}\\x{6F78}\\x{6F7A}\\x{6F7B}\\x{6F7C}' .\n          '\\x{6F7D}\\x{6F7E}\\x{6F7F}\\x{6F80}\\x{6F81}\\x{6F82}\\x{6F83}\\x{6F84}\\x{6F85}' .\n          '\\x{6F86}\\x{6F87}\\x{6F88}\\x{6F89}\\x{6F8A}\\x{6F8B}\\x{6F8C}\\x{6F8D}\\x{6F8E}' .\n          '\\x{6F8F}\\x{6F90}\\x{6F91}\\x{6F92}\\x{6F93}\\x{6F94}\\x{6F95}\\x{6F96}\\x{6F97}' .\n          '\\x{6F99}\\x{6F9B}\\x{6F9C}\\x{6F9D}\\x{6F9E}\\x{6FA0}\\x{6FA1}\\x{6FA2}\\x{6FA3}' .\n          '\\x{6FA4}\\x{6FA5}\\x{6FA6}\\x{6FA7}\\x{6FA8}\\x{6FA9}\\x{6FAA}\\x{6FAB}\\x{6FAC}' .\n          '\\x{6FAD}\\x{6FAE}\\x{6FAF}\\x{6FB0}\\x{6FB1}\\x{6FB2}\\x{6FB3}\\x{6FB4}\\x{6FB5}' .\n          '\\x{6FB6}\\x{6FB8}\\x{6FB9}\\x{6FBA}\\x{6FBB}\\x{6FBC}\\x{6FBD}\\x{6FBE}\\x{6FBF}' .\n          '\\x{6FC0}\\x{6FC1}\\x{6FC2}\\x{6FC3}\\x{6FC4}\\x{6FC6}\\x{6FC7}\\x{6FC8}\\x{6FC9}' .\n          '\\x{6FCA}\\x{6FCB}\\x{6FCC}\\x{6FCD}\\x{6FCE}\\x{6FCF}\\x{6FD1}\\x{6FD2}\\x{6FD4}' .\n          '\\x{6FD5}\\x{6FD6}\\x{6FD7}\\x{6FD8}\\x{6FD9}\\x{6FDA}\\x{6FDB}\\x{6FDC}\\x{6FDD}' .\n          '\\x{6FDE}\\x{6FDF}\\x{6FE0}\\x{6FE1}\\x{6FE2}\\x{6FE3}\\x{6FE4}\\x{6FE5}\\x{6FE6}' .\n          '\\x{6FE7}\\x{6FE8}\\x{6FE9}\\x{6FEA}\\x{6FEB}\\x{6FEC}\\x{6FED}\\x{6FEE}\\x{6FEF}' .\n          '\\x{6FF0}\\x{6FF1}\\x{6FF2}\\x{6FF3}\\x{6FF4}\\x{6FF6}\\x{6FF7}\\x{6FF8}\\x{6FF9}' .\n          '\\x{6FFA}\\x{6FFB}\\x{6FFC}\\x{6FFE}\\x{6FFF}\\x{7000}\\x{7001}\\x{7002}\\x{7003}' .\n          '\\x{7004}\\x{7005}\\x{7006}\\x{7007}\\x{7008}\\x{7009}\\x{700A}\\x{700B}\\x{700C}' .\n          '\\x{700D}\\x{700E}\\x{700F}\\x{7011}\\x{7012}\\x{7014}\\x{7015}\\x{7016}\\x{7017}' .\n          '\\x{7018}\\x{7019}\\x{701A}\\x{701B}\\x{701C}\\x{701D}\\x{701F}\\x{7020}\\x{7021}' .\n          '\\x{7022}\\x{7023}\\x{7024}\\x{7025}\\x{7026}\\x{7027}\\x{7028}\\x{7029}\\x{702A}' .\n          '\\x{702B}\\x{702C}\\x{702D}\\x{702E}\\x{702F}\\x{7030}\\x{7031}\\x{7032}\\x{7033}' .\n          '\\x{7034}\\x{7035}\\x{7036}\\x{7037}\\x{7038}\\x{7039}\\x{703A}\\x{703B}\\x{703C}' .\n          '\\x{703D}\\x{703E}\\x{703F}\\x{7040}\\x{7041}\\x{7042}\\x{7043}\\x{7044}\\x{7045}' .\n          '\\x{7046}\\x{7048}\\x{7049}\\x{704A}\\x{704C}\\x{704D}\\x{704F}\\x{7050}\\x{7051}' .\n          '\\x{7052}\\x{7053}\\x{7054}\\x{7055}\\x{7056}\\x{7057}\\x{7058}\\x{7059}\\x{705A}' .\n          '\\x{705B}\\x{705C}\\x{705D}\\x{705E}\\x{705F}\\x{7060}\\x{7061}\\x{7062}\\x{7063}' .\n          '\\x{7064}\\x{7065}\\x{7066}\\x{7067}\\x{7068}\\x{7069}\\x{706A}\\x{706B}\\x{706C}' .\n          '\\x{706D}\\x{706E}\\x{706F}\\x{7070}\\x{7071}\\x{7074}\\x{7075}\\x{7076}\\x{7077}' .\n          '\\x{7078}\\x{7079}\\x{707A}\\x{707C}\\x{707D}\\x{707E}\\x{707F}\\x{7080}\\x{7082}' .\n          '\\x{7083}\\x{7084}\\x{7085}\\x{7086}\\x{7087}\\x{7088}\\x{7089}\\x{708A}\\x{708B}' .\n          '\\x{708C}\\x{708E}\\x{708F}\\x{7090}\\x{7091}\\x{7092}\\x{7093}\\x{7094}\\x{7095}' .\n          '\\x{7096}\\x{7098}\\x{7099}\\x{709A}\\x{709C}\\x{709D}\\x{709E}\\x{709F}\\x{70A0}' .\n          '\\x{70A1}\\x{70A2}\\x{70A3}\\x{70A4}\\x{70A5}\\x{70A6}\\x{70A7}\\x{70A8}\\x{70A9}' .\n          '\\x{70AB}\\x{70AC}\\x{70AD}\\x{70AE}\\x{70AF}\\x{70B0}\\x{70B1}\\x{70B3}\\x{70B4}' .\n          '\\x{70B5}\\x{70B7}\\x{70B8}\\x{70B9}\\x{70BA}\\x{70BB}\\x{70BC}\\x{70BD}\\x{70BE}' .\n          '\\x{70BF}\\x{70C0}\\x{70C1}\\x{70C2}\\x{70C3}\\x{70C4}\\x{70C5}\\x{70C6}\\x{70C7}' .\n          '\\x{70C8}\\x{70C9}\\x{70CA}\\x{70CB}\\x{70CC}\\x{70CD}\\x{70CE}\\x{70CF}\\x{70D0}' .\n          '\\x{70D1}\\x{70D2}\\x{70D3}\\x{70D4}\\x{70D6}\\x{70D7}\\x{70D8}\\x{70D9}\\x{70DA}' .\n          '\\x{70DB}\\x{70DC}\\x{70DD}\\x{70DE}\\x{70DF}\\x{70E0}\\x{70E1}\\x{70E2}\\x{70E3}' .\n          '\\x{70E4}\\x{70E5}\\x{70E6}\\x{70E7}\\x{70E8}\\x{70E9}\\x{70EA}\\x{70EB}\\x{70EC}' .\n          '\\x{70ED}\\x{70EE}\\x{70EF}\\x{70F0}\\x{70F1}\\x{70F2}\\x{70F3}\\x{70F4}\\x{70F5}' .\n          '\\x{70F6}\\x{70F7}\\x{70F8}\\x{70F9}\\x{70FA}\\x{70FB}\\x{70FC}\\x{70FD}\\x{70FF}' .\n          '\\x{7100}\\x{7101}\\x{7102}\\x{7103}\\x{7104}\\x{7105}\\x{7106}\\x{7107}\\x{7109}' .\n          '\\x{710A}\\x{710B}\\x{710C}\\x{710D}\\x{710E}\\x{710F}\\x{7110}\\x{7111}\\x{7112}' .\n          '\\x{7113}\\x{7115}\\x{7116}\\x{7117}\\x{7118}\\x{7119}\\x{711A}\\x{711B}\\x{711C}' .\n          '\\x{711D}\\x{711E}\\x{711F}\\x{7120}\\x{7121}\\x{7122}\\x{7123}\\x{7125}\\x{7126}' .\n          '\\x{7127}\\x{7128}\\x{7129}\\x{712A}\\x{712B}\\x{712C}\\x{712D}\\x{712E}\\x{712F}' .\n          '\\x{7130}\\x{7131}\\x{7132}\\x{7135}\\x{7136}\\x{7137}\\x{7138}\\x{7139}\\x{713A}' .\n          '\\x{713B}\\x{713D}\\x{713E}\\x{713F}\\x{7140}\\x{7141}\\x{7142}\\x{7143}\\x{7144}' .\n          '\\x{7145}\\x{7146}\\x{7147}\\x{7148}\\x{7149}\\x{714A}\\x{714B}\\x{714C}\\x{714D}' .\n          '\\x{714E}\\x{714F}\\x{7150}\\x{7151}\\x{7152}\\x{7153}\\x{7154}\\x{7156}\\x{7158}' .\n          '\\x{7159}\\x{715A}\\x{715B}\\x{715C}\\x{715D}\\x{715E}\\x{715F}\\x{7160}\\x{7161}' .\n          '\\x{7162}\\x{7163}\\x{7164}\\x{7165}\\x{7166}\\x{7167}\\x{7168}\\x{7169}\\x{716A}' .\n          '\\x{716C}\\x{716E}\\x{716F}\\x{7170}\\x{7171}\\x{7172}\\x{7173}\\x{7174}\\x{7175}' .\n          '\\x{7176}\\x{7177}\\x{7178}\\x{7179}\\x{717A}\\x{717B}\\x{717C}\\x{717D}\\x{717E}' .\n          '\\x{717F}\\x{7180}\\x{7181}\\x{7182}\\x{7183}\\x{7184}\\x{7185}\\x{7186}\\x{7187}' .\n          '\\x{7188}\\x{7189}\\x{718A}\\x{718B}\\x{718C}\\x{718E}\\x{718F}\\x{7190}\\x{7191}' .\n          '\\x{7192}\\x{7193}\\x{7194}\\x{7195}\\x{7197}\\x{7198}\\x{7199}\\x{719A}\\x{719B}' .\n          '\\x{719C}\\x{719D}\\x{719E}\\x{719F}\\x{71A0}\\x{71A1}\\x{71A2}\\x{71A3}\\x{71A4}' .\n          '\\x{71A5}\\x{71A7}\\x{71A8}\\x{71A9}\\x{71AA}\\x{71AC}\\x{71AD}\\x{71AE}\\x{71AF}' .\n          '\\x{71B0}\\x{71B1}\\x{71B2}\\x{71B3}\\x{71B4}\\x{71B5}\\x{71B7}\\x{71B8}\\x{71B9}' .\n          '\\x{71BA}\\x{71BB}\\x{71BC}\\x{71BD}\\x{71BE}\\x{71BF}\\x{71C0}\\x{71C1}\\x{71C2}' .\n          '\\x{71C3}\\x{71C4}\\x{71C5}\\x{71C6}\\x{71C7}\\x{71C8}\\x{71C9}\\x{71CA}\\x{71CB}' .\n          '\\x{71CD}\\x{71CE}\\x{71CF}\\x{71D0}\\x{71D1}\\x{71D2}\\x{71D4}\\x{71D5}\\x{71D6}' .\n          '\\x{71D7}\\x{71D8}\\x{71D9}\\x{71DA}\\x{71DB}\\x{71DC}\\x{71DD}\\x{71DE}\\x{71DF}' .\n          '\\x{71E0}\\x{71E1}\\x{71E2}\\x{71E3}\\x{71E4}\\x{71E5}\\x{71E6}\\x{71E7}\\x{71E8}' .\n          '\\x{71E9}\\x{71EA}\\x{71EB}\\x{71EC}\\x{71ED}\\x{71EE}\\x{71EF}\\x{71F0}\\x{71F1}' .\n          '\\x{71F2}\\x{71F4}\\x{71F5}\\x{71F6}\\x{71F7}\\x{71F8}\\x{71F9}\\x{71FB}\\x{71FC}' .\n          '\\x{71FD}\\x{71FE}\\x{71FF}\\x{7201}\\x{7202}\\x{7203}\\x{7204}\\x{7205}\\x{7206}' .\n          '\\x{7207}\\x{7208}\\x{7209}\\x{720A}\\x{720C}\\x{720D}\\x{720E}\\x{720F}\\x{7210}' .\n          '\\x{7212}\\x{7213}\\x{7214}\\x{7216}\\x{7218}\\x{7219}\\x{721A}\\x{721B}\\x{721C}' .\n          '\\x{721D}\\x{721E}\\x{721F}\\x{7221}\\x{7222}\\x{7223}\\x{7226}\\x{7227}\\x{7228}' .\n          '\\x{7229}\\x{722A}\\x{722B}\\x{722C}\\x{722D}\\x{722E}\\x{7230}\\x{7231}\\x{7232}' .\n          '\\x{7233}\\x{7235}\\x{7236}\\x{7237}\\x{7238}\\x{7239}\\x{723A}\\x{723B}\\x{723C}' .\n          '\\x{723D}\\x{723E}\\x{723F}\\x{7240}\\x{7241}\\x{7242}\\x{7243}\\x{7244}\\x{7246}' .\n          '\\x{7247}\\x{7248}\\x{7249}\\x{724A}\\x{724B}\\x{724C}\\x{724D}\\x{724F}\\x{7251}' .\n          '\\x{7252}\\x{7253}\\x{7254}\\x{7256}\\x{7257}\\x{7258}\\x{7259}\\x{725A}\\x{725B}' .\n          '\\x{725C}\\x{725D}\\x{725E}\\x{725F}\\x{7260}\\x{7261}\\x{7262}\\x{7263}\\x{7264}' .\n          '\\x{7265}\\x{7266}\\x{7267}\\x{7268}\\x{7269}\\x{726A}\\x{726B}\\x{726C}\\x{726D}' .\n          '\\x{726E}\\x{726F}\\x{7270}\\x{7271}\\x{7272}\\x{7273}\\x{7274}\\x{7275}\\x{7276}' .\n          '\\x{7277}\\x{7278}\\x{7279}\\x{727A}\\x{727B}\\x{727C}\\x{727D}\\x{727E}\\x{727F}' .\n          '\\x{7280}\\x{7281}\\x{7282}\\x{7283}\\x{7284}\\x{7285}\\x{7286}\\x{7287}\\x{7288}' .\n          '\\x{7289}\\x{728A}\\x{728B}\\x{728C}\\x{728D}\\x{728E}\\x{728F}\\x{7290}\\x{7291}' .\n          '\\x{7292}\\x{7293}\\x{7294}\\x{7295}\\x{7296}\\x{7297}\\x{7298}\\x{7299}\\x{729A}' .\n          '\\x{729B}\\x{729C}\\x{729D}\\x{729E}\\x{729F}\\x{72A1}\\x{72A2}\\x{72A3}\\x{72A4}' .\n          '\\x{72A5}\\x{72A6}\\x{72A7}\\x{72A8}\\x{72A9}\\x{72AA}\\x{72AC}\\x{72AD}\\x{72AE}' .\n          '\\x{72AF}\\x{72B0}\\x{72B1}\\x{72B2}\\x{72B3}\\x{72B4}\\x{72B5}\\x{72B6}\\x{72B7}' .\n          '\\x{72B8}\\x{72B9}\\x{72BA}\\x{72BB}\\x{72BC}\\x{72BD}\\x{72BF}\\x{72C0}\\x{72C1}' .\n          '\\x{72C2}\\x{72C3}\\x{72C4}\\x{72C5}\\x{72C6}\\x{72C7}\\x{72C8}\\x{72C9}\\x{72CA}' .\n          '\\x{72CB}\\x{72CC}\\x{72CD}\\x{72CE}\\x{72CF}\\x{72D0}\\x{72D1}\\x{72D2}\\x{72D3}' .\n          '\\x{72D4}\\x{72D5}\\x{72D6}\\x{72D7}\\x{72D8}\\x{72D9}\\x{72DA}\\x{72DB}\\x{72DC}' .\n          '\\x{72DD}\\x{72DE}\\x{72DF}\\x{72E0}\\x{72E1}\\x{72E2}\\x{72E3}\\x{72E4}\\x{72E5}' .\n          '\\x{72E6}\\x{72E7}\\x{72E8}\\x{72E9}\\x{72EA}\\x{72EB}\\x{72EC}\\x{72ED}\\x{72EE}' .\n          '\\x{72EF}\\x{72F0}\\x{72F1}\\x{72F2}\\x{72F3}\\x{72F4}\\x{72F5}\\x{72F6}\\x{72F7}' .\n          '\\x{72F8}\\x{72F9}\\x{72FA}\\x{72FB}\\x{72FC}\\x{72FD}\\x{72FE}\\x{72FF}\\x{7300}' .\n          '\\x{7301}\\x{7303}\\x{7304}\\x{7305}\\x{7306}\\x{7307}\\x{7308}\\x{7309}\\x{730A}' .\n          '\\x{730B}\\x{730C}\\x{730D}\\x{730E}\\x{730F}\\x{7311}\\x{7312}\\x{7313}\\x{7314}' .\n          '\\x{7315}\\x{7316}\\x{7317}\\x{7318}\\x{7319}\\x{731A}\\x{731B}\\x{731C}\\x{731D}' .\n          '\\x{731E}\\x{7320}\\x{7321}\\x{7322}\\x{7323}\\x{7324}\\x{7325}\\x{7326}\\x{7327}' .\n          '\\x{7329}\\x{732A}\\x{732B}\\x{732C}\\x{732D}\\x{732E}\\x{7330}\\x{7331}\\x{7332}' .\n          '\\x{7333}\\x{7334}\\x{7335}\\x{7336}\\x{7337}\\x{7338}\\x{7339}\\x{733A}\\x{733B}' .\n          '\\x{733C}\\x{733D}\\x{733E}\\x{733F}\\x{7340}\\x{7341}\\x{7342}\\x{7343}\\x{7344}' .\n          '\\x{7345}\\x{7346}\\x{7347}\\x{7348}\\x{7349}\\x{734A}\\x{734B}\\x{734C}\\x{734D}' .\n          '\\x{734E}\\x{7350}\\x{7351}\\x{7352}\\x{7354}\\x{7355}\\x{7356}\\x{7357}\\x{7358}' .\n          '\\x{7359}\\x{735A}\\x{735B}\\x{735C}\\x{735D}\\x{735E}\\x{735F}\\x{7360}\\x{7361}' .\n          '\\x{7362}\\x{7364}\\x{7365}\\x{7366}\\x{7367}\\x{7368}\\x{7369}\\x{736A}\\x{736B}' .\n          '\\x{736C}\\x{736D}\\x{736E}\\x{736F}\\x{7370}\\x{7371}\\x{7372}\\x{7373}\\x{7374}' .\n          '\\x{7375}\\x{7376}\\x{7377}\\x{7378}\\x{7379}\\x{737A}\\x{737B}\\x{737C}\\x{737D}' .\n          '\\x{737E}\\x{737F}\\x{7380}\\x{7381}\\x{7382}\\x{7383}\\x{7384}\\x{7385}\\x{7386}' .\n          '\\x{7387}\\x{7388}\\x{7389}\\x{738A}\\x{738B}\\x{738C}\\x{738D}\\x{738E}\\x{738F}' .\n          '\\x{7390}\\x{7391}\\x{7392}\\x{7393}\\x{7394}\\x{7395}\\x{7396}\\x{7397}\\x{7398}' .\n          '\\x{7399}\\x{739A}\\x{739B}\\x{739D}\\x{739E}\\x{739F}\\x{73A0}\\x{73A1}\\x{73A2}' .\n          '\\x{73A3}\\x{73A4}\\x{73A5}\\x{73A6}\\x{73A7}\\x{73A8}\\x{73A9}\\x{73AA}\\x{73AB}' .\n          '\\x{73AC}\\x{73AD}\\x{73AE}\\x{73AF}\\x{73B0}\\x{73B1}\\x{73B2}\\x{73B3}\\x{73B4}' .\n          '\\x{73B5}\\x{73B6}\\x{73B7}\\x{73B8}\\x{73B9}\\x{73BA}\\x{73BB}\\x{73BC}\\x{73BD}' .\n          '\\x{73BE}\\x{73BF}\\x{73C0}\\x{73C2}\\x{73C3}\\x{73C4}\\x{73C5}\\x{73C6}\\x{73C7}' .\n          '\\x{73C8}\\x{73C9}\\x{73CA}\\x{73CB}\\x{73CC}\\x{73CD}\\x{73CE}\\x{73CF}\\x{73D0}' .\n          '\\x{73D1}\\x{73D2}\\x{73D3}\\x{73D4}\\x{73D5}\\x{73D6}\\x{73D7}\\x{73D8}\\x{73D9}' .\n          '\\x{73DA}\\x{73DB}\\x{73DC}\\x{73DD}\\x{73DE}\\x{73DF}\\x{73E0}\\x{73E2}\\x{73E3}' .\n          '\\x{73E5}\\x{73E6}\\x{73E7}\\x{73E8}\\x{73E9}\\x{73EA}\\x{73EB}\\x{73EC}\\x{73ED}' .\n          '\\x{73EE}\\x{73EF}\\x{73F0}\\x{73F1}\\x{73F2}\\x{73F4}\\x{73F5}\\x{73F6}\\x{73F7}' .\n          '\\x{73F8}\\x{73F9}\\x{73FA}\\x{73FC}\\x{73FD}\\x{73FE}\\x{73FF}\\x{7400}\\x{7401}' .\n          '\\x{7402}\\x{7403}\\x{7404}\\x{7405}\\x{7406}\\x{7407}\\x{7408}\\x{7409}\\x{740A}' .\n          '\\x{740B}\\x{740C}\\x{740D}\\x{740E}\\x{740F}\\x{7410}\\x{7411}\\x{7412}\\x{7413}' .\n          '\\x{7414}\\x{7415}\\x{7416}\\x{7417}\\x{7419}\\x{741A}\\x{741B}\\x{741C}\\x{741D}' .\n          '\\x{741E}\\x{741F}\\x{7420}\\x{7421}\\x{7422}\\x{7423}\\x{7424}\\x{7425}\\x{7426}' .\n          '\\x{7427}\\x{7428}\\x{7429}\\x{742A}\\x{742B}\\x{742C}\\x{742D}\\x{742E}\\x{742F}' .\n          '\\x{7430}\\x{7431}\\x{7432}\\x{7433}\\x{7434}\\x{7435}\\x{7436}\\x{7437}\\x{7438}' .\n          '\\x{743A}\\x{743B}\\x{743C}\\x{743D}\\x{743F}\\x{7440}\\x{7441}\\x{7442}\\x{7443}' .\n          '\\x{7444}\\x{7445}\\x{7446}\\x{7448}\\x{744A}\\x{744B}\\x{744C}\\x{744D}\\x{744E}' .\n          '\\x{744F}\\x{7450}\\x{7451}\\x{7452}\\x{7453}\\x{7454}\\x{7455}\\x{7456}\\x{7457}' .\n          '\\x{7459}\\x{745A}\\x{745B}\\x{745C}\\x{745D}\\x{745E}\\x{745F}\\x{7461}\\x{7462}' .\n          '\\x{7463}\\x{7464}\\x{7465}\\x{7466}\\x{7467}\\x{7468}\\x{7469}\\x{746A}\\x{746B}' .\n          '\\x{746C}\\x{746D}\\x{746E}\\x{746F}\\x{7470}\\x{7471}\\x{7472}\\x{7473}\\x{7474}' .\n          '\\x{7475}\\x{7476}\\x{7477}\\x{7478}\\x{7479}\\x{747A}\\x{747C}\\x{747D}\\x{747E}' .\n          '\\x{747F}\\x{7480}\\x{7481}\\x{7482}\\x{7483}\\x{7485}\\x{7486}\\x{7487}\\x{7488}' .\n          '\\x{7489}\\x{748A}\\x{748B}\\x{748C}\\x{748D}\\x{748E}\\x{748F}\\x{7490}\\x{7491}' .\n          '\\x{7492}\\x{7493}\\x{7494}\\x{7495}\\x{7497}\\x{7498}\\x{7499}\\x{749A}\\x{749B}' .\n          '\\x{749C}\\x{749E}\\x{749F}\\x{74A0}\\x{74A1}\\x{74A3}\\x{74A4}\\x{74A5}\\x{74A6}' .\n          '\\x{74A7}\\x{74A8}\\x{74A9}\\x{74AA}\\x{74AB}\\x{74AC}\\x{74AD}\\x{74AE}\\x{74AF}' .\n          '\\x{74B0}\\x{74B1}\\x{74B2}\\x{74B3}\\x{74B4}\\x{74B5}\\x{74B6}\\x{74B7}\\x{74B8}' .\n          '\\x{74B9}\\x{74BA}\\x{74BB}\\x{74BC}\\x{74BD}\\x{74BE}\\x{74BF}\\x{74C0}\\x{74C1}' .\n          '\\x{74C2}\\x{74C3}\\x{74C4}\\x{74C5}\\x{74C6}\\x{74CA}\\x{74CB}\\x{74CD}\\x{74CE}' .\n          '\\x{74CF}\\x{74D0}\\x{74D1}\\x{74D2}\\x{74D3}\\x{74D4}\\x{74D5}\\x{74D6}\\x{74D7}' .\n          '\\x{74D8}\\x{74D9}\\x{74DA}\\x{74DB}\\x{74DC}\\x{74DD}\\x{74DE}\\x{74DF}\\x{74E0}' .\n          '\\x{74E1}\\x{74E2}\\x{74E3}\\x{74E4}\\x{74E5}\\x{74E6}\\x{74E7}\\x{74E8}\\x{74E9}' .\n          '\\x{74EA}\\x{74EC}\\x{74ED}\\x{74EE}\\x{74EF}\\x{74F0}\\x{74F1}\\x{74F2}\\x{74F3}' .\n          '\\x{74F4}\\x{74F5}\\x{74F6}\\x{74F7}\\x{74F8}\\x{74F9}\\x{74FA}\\x{74FB}\\x{74FC}' .\n          '\\x{74FD}\\x{74FE}\\x{74FF}\\x{7500}\\x{7501}\\x{7502}\\x{7503}\\x{7504}\\x{7505}' .\n          '\\x{7506}\\x{7507}\\x{7508}\\x{7509}\\x{750A}\\x{750B}\\x{750C}\\x{750D}\\x{750F}' .\n          '\\x{7510}\\x{7511}\\x{7512}\\x{7513}\\x{7514}\\x{7515}\\x{7516}\\x{7517}\\x{7518}' .\n          '\\x{7519}\\x{751A}\\x{751B}\\x{751C}\\x{751D}\\x{751E}\\x{751F}\\x{7521}\\x{7522}' .\n          '\\x{7523}\\x{7524}\\x{7525}\\x{7526}\\x{7527}\\x{7528}\\x{7529}\\x{752A}\\x{752B}' .\n          '\\x{752C}\\x{752D}\\x{752E}\\x{752F}\\x{7530}\\x{7531}\\x{7532}\\x{7533}\\x{7535}' .\n          '\\x{7536}\\x{7537}\\x{7538}\\x{7539}\\x{753A}\\x{753B}\\x{753C}\\x{753D}\\x{753E}' .\n          '\\x{753F}\\x{7540}\\x{7542}\\x{7543}\\x{7544}\\x{7545}\\x{7546}\\x{7547}\\x{7548}' .\n          '\\x{7549}\\x{754B}\\x{754C}\\x{754D}\\x{754E}\\x{754F}\\x{7550}\\x{7551}\\x{7553}' .\n          '\\x{7554}\\x{7556}\\x{7557}\\x{7558}\\x{7559}\\x{755A}\\x{755B}\\x{755C}\\x{755D}' .\n          '\\x{755F}\\x{7560}\\x{7562}\\x{7563}\\x{7564}\\x{7565}\\x{7566}\\x{7567}\\x{7568}' .\n          '\\x{7569}\\x{756A}\\x{756B}\\x{756C}\\x{756D}\\x{756E}\\x{756F}\\x{7570}\\x{7572}' .\n          '\\x{7574}\\x{7575}\\x{7576}\\x{7577}\\x{7578}\\x{7579}\\x{757C}\\x{757D}\\x{757E}' .\n          '\\x{757F}\\x{7580}\\x{7581}\\x{7582}\\x{7583}\\x{7584}\\x{7586}\\x{7587}\\x{7588}' .\n          '\\x{7589}\\x{758A}\\x{758B}\\x{758C}\\x{758D}\\x{758F}\\x{7590}\\x{7591}\\x{7592}' .\n          '\\x{7593}\\x{7594}\\x{7595}\\x{7596}\\x{7597}\\x{7598}\\x{7599}\\x{759A}\\x{759B}' .\n          '\\x{759C}\\x{759D}\\x{759E}\\x{759F}\\x{75A0}\\x{75A1}\\x{75A2}\\x{75A3}\\x{75A4}' .\n          '\\x{75A5}\\x{75A6}\\x{75A7}\\x{75A8}\\x{75AA}\\x{75AB}\\x{75AC}\\x{75AD}\\x{75AE}' .\n          '\\x{75AF}\\x{75B0}\\x{75B1}\\x{75B2}\\x{75B3}\\x{75B4}\\x{75B5}\\x{75B6}\\x{75B8}' .\n          '\\x{75B9}\\x{75BA}\\x{75BB}\\x{75BC}\\x{75BD}\\x{75BE}\\x{75BF}\\x{75C0}\\x{75C1}' .\n          '\\x{75C2}\\x{75C3}\\x{75C4}\\x{75C5}\\x{75C6}\\x{75C7}\\x{75C8}\\x{75C9}\\x{75CA}' .\n          '\\x{75CB}\\x{75CC}\\x{75CD}\\x{75CE}\\x{75CF}\\x{75D0}\\x{75D1}\\x{75D2}\\x{75D3}' .\n          '\\x{75D4}\\x{75D5}\\x{75D6}\\x{75D7}\\x{75D8}\\x{75D9}\\x{75DA}\\x{75DB}\\x{75DD}' .\n          '\\x{75DE}\\x{75DF}\\x{75E0}\\x{75E1}\\x{75E2}\\x{75E3}\\x{75E4}\\x{75E5}\\x{75E6}' .\n          '\\x{75E7}\\x{75E8}\\x{75EA}\\x{75EB}\\x{75EC}\\x{75ED}\\x{75EF}\\x{75F0}\\x{75F1}' .\n          '\\x{75F2}\\x{75F3}\\x{75F4}\\x{75F5}\\x{75F6}\\x{75F7}\\x{75F8}\\x{75F9}\\x{75FA}' .\n          '\\x{75FB}\\x{75FC}\\x{75FD}\\x{75FE}\\x{75FF}\\x{7600}\\x{7601}\\x{7602}\\x{7603}' .\n          '\\x{7604}\\x{7605}\\x{7606}\\x{7607}\\x{7608}\\x{7609}\\x{760A}\\x{760B}\\x{760C}' .\n          '\\x{760D}\\x{760E}\\x{760F}\\x{7610}\\x{7611}\\x{7612}\\x{7613}\\x{7614}\\x{7615}' .\n          '\\x{7616}\\x{7617}\\x{7618}\\x{7619}\\x{761A}\\x{761B}\\x{761C}\\x{761D}\\x{761E}' .\n          '\\x{761F}\\x{7620}\\x{7621}\\x{7622}\\x{7623}\\x{7624}\\x{7625}\\x{7626}\\x{7627}' .\n          '\\x{7628}\\x{7629}\\x{762A}\\x{762B}\\x{762D}\\x{762E}\\x{762F}\\x{7630}\\x{7631}' .\n          '\\x{7632}\\x{7633}\\x{7634}\\x{7635}\\x{7636}\\x{7637}\\x{7638}\\x{7639}\\x{763A}' .\n          '\\x{763B}\\x{763C}\\x{763D}\\x{763E}\\x{763F}\\x{7640}\\x{7641}\\x{7642}\\x{7643}' .\n          '\\x{7646}\\x{7647}\\x{7648}\\x{7649}\\x{764A}\\x{764B}\\x{764C}\\x{764D}\\x{764F}' .\n          '\\x{7650}\\x{7652}\\x{7653}\\x{7654}\\x{7656}\\x{7657}\\x{7658}\\x{7659}\\x{765A}' .\n          '\\x{765B}\\x{765C}\\x{765D}\\x{765E}\\x{765F}\\x{7660}\\x{7661}\\x{7662}\\x{7663}' .\n          '\\x{7664}\\x{7665}\\x{7666}\\x{7667}\\x{7668}\\x{7669}\\x{766A}\\x{766B}\\x{766C}' .\n          '\\x{766D}\\x{766E}\\x{766F}\\x{7670}\\x{7671}\\x{7672}\\x{7674}\\x{7675}\\x{7676}' .\n          '\\x{7677}\\x{7678}\\x{7679}\\x{767B}\\x{767C}\\x{767D}\\x{767E}\\x{767F}\\x{7680}' .\n          '\\x{7681}\\x{7682}\\x{7683}\\x{7684}\\x{7685}\\x{7686}\\x{7687}\\x{7688}\\x{7689}' .\n          '\\x{768A}\\x{768B}\\x{768C}\\x{768E}\\x{768F}\\x{7690}\\x{7691}\\x{7692}\\x{7693}' .\n          '\\x{7694}\\x{7695}\\x{7696}\\x{7697}\\x{7698}\\x{7699}\\x{769A}\\x{769B}\\x{769C}' .\n          '\\x{769D}\\x{769E}\\x{769F}\\x{76A0}\\x{76A3}\\x{76A4}\\x{76A6}\\x{76A7}\\x{76A9}' .\n          '\\x{76AA}\\x{76AB}\\x{76AC}\\x{76AD}\\x{76AE}\\x{76AF}\\x{76B0}\\x{76B1}\\x{76B2}' .\n          '\\x{76B4}\\x{76B5}\\x{76B7}\\x{76B8}\\x{76BA}\\x{76BB}\\x{76BC}\\x{76BD}\\x{76BE}' .\n          '\\x{76BF}\\x{76C0}\\x{76C2}\\x{76C3}\\x{76C4}\\x{76C5}\\x{76C6}\\x{76C7}\\x{76C8}' .\n          '\\x{76C9}\\x{76CA}\\x{76CD}\\x{76CE}\\x{76CF}\\x{76D0}\\x{76D1}\\x{76D2}\\x{76D3}' .\n          '\\x{76D4}\\x{76D5}\\x{76D6}\\x{76D7}\\x{76D8}\\x{76DA}\\x{76DB}\\x{76DC}\\x{76DD}' .\n          '\\x{76DE}\\x{76DF}\\x{76E0}\\x{76E1}\\x{76E2}\\x{76E3}\\x{76E4}\\x{76E5}\\x{76E6}' .\n          '\\x{76E7}\\x{76E8}\\x{76E9}\\x{76EA}\\x{76EC}\\x{76ED}\\x{76EE}\\x{76EF}\\x{76F0}' .\n          '\\x{76F1}\\x{76F2}\\x{76F3}\\x{76F4}\\x{76F5}\\x{76F6}\\x{76F7}\\x{76F8}\\x{76F9}' .\n          '\\x{76FA}\\x{76FB}\\x{76FC}\\x{76FD}\\x{76FE}\\x{76FF}\\x{7701}\\x{7703}\\x{7704}' .\n          '\\x{7705}\\x{7706}\\x{7707}\\x{7708}\\x{7709}\\x{770A}\\x{770B}\\x{770C}\\x{770D}' .\n          '\\x{770F}\\x{7710}\\x{7711}\\x{7712}\\x{7713}\\x{7714}\\x{7715}\\x{7716}\\x{7717}' .\n          '\\x{7718}\\x{7719}\\x{771A}\\x{771B}\\x{771C}\\x{771D}\\x{771E}\\x{771F}\\x{7720}' .\n          '\\x{7722}\\x{7723}\\x{7725}\\x{7726}\\x{7727}\\x{7728}\\x{7729}\\x{772A}\\x{772C}' .\n          '\\x{772D}\\x{772E}\\x{772F}\\x{7730}\\x{7731}\\x{7732}\\x{7733}\\x{7734}\\x{7735}' .\n          '\\x{7736}\\x{7737}\\x{7738}\\x{7739}\\x{773A}\\x{773B}\\x{773C}\\x{773D}\\x{773E}' .\n          '\\x{7740}\\x{7741}\\x{7743}\\x{7744}\\x{7745}\\x{7746}\\x{7747}\\x{7748}\\x{7749}' .\n          '\\x{774A}\\x{774B}\\x{774C}\\x{774D}\\x{774E}\\x{774F}\\x{7750}\\x{7751}\\x{7752}' .\n          '\\x{7753}\\x{7754}\\x{7755}\\x{7756}\\x{7757}\\x{7758}\\x{7759}\\x{775A}\\x{775B}' .\n          '\\x{775C}\\x{775D}\\x{775E}\\x{775F}\\x{7760}\\x{7761}\\x{7762}\\x{7763}\\x{7765}' .\n          '\\x{7766}\\x{7767}\\x{7768}\\x{7769}\\x{776A}\\x{776B}\\x{776C}\\x{776D}\\x{776E}' .\n          '\\x{776F}\\x{7770}\\x{7771}\\x{7772}\\x{7773}\\x{7774}\\x{7775}\\x{7776}\\x{7777}' .\n          '\\x{7778}\\x{7779}\\x{777A}\\x{777B}\\x{777C}\\x{777D}\\x{777E}\\x{777F}\\x{7780}' .\n          '\\x{7781}\\x{7782}\\x{7783}\\x{7784}\\x{7785}\\x{7786}\\x{7787}\\x{7788}\\x{7789}' .\n          '\\x{778A}\\x{778B}\\x{778C}\\x{778D}\\x{778E}\\x{778F}\\x{7790}\\x{7791}\\x{7792}' .\n          '\\x{7793}\\x{7794}\\x{7795}\\x{7797}\\x{7798}\\x{7799}\\x{779A}\\x{779B}\\x{779C}' .\n          '\\x{779D}\\x{779E}\\x{779F}\\x{77A0}\\x{77A1}\\x{77A2}\\x{77A3}\\x{77A5}\\x{77A6}' .\n          '\\x{77A7}\\x{77A8}\\x{77A9}\\x{77AA}\\x{77AB}\\x{77AC}\\x{77AD}\\x{77AE}\\x{77AF}' .\n          '\\x{77B0}\\x{77B1}\\x{77B2}\\x{77B3}\\x{77B4}\\x{77B5}\\x{77B6}\\x{77B7}\\x{77B8}' .\n          '\\x{77B9}\\x{77BA}\\x{77BB}\\x{77BC}\\x{77BD}\\x{77BF}\\x{77C0}\\x{77C2}\\x{77C3}' .\n          '\\x{77C4}\\x{77C5}\\x{77C6}\\x{77C7}\\x{77C8}\\x{77C9}\\x{77CA}\\x{77CB}\\x{77CC}' .\n          '\\x{77CD}\\x{77CE}\\x{77CF}\\x{77D0}\\x{77D1}\\x{77D3}\\x{77D4}\\x{77D5}\\x{77D6}' .\n          '\\x{77D7}\\x{77D8}\\x{77D9}\\x{77DA}\\x{77DB}\\x{77DC}\\x{77DE}\\x{77DF}\\x{77E0}' .\n          '\\x{77E1}\\x{77E2}\\x{77E3}\\x{77E5}\\x{77E7}\\x{77E8}\\x{77E9}\\x{77EA}\\x{77EB}' .\n          '\\x{77EC}\\x{77ED}\\x{77EE}\\x{77EF}\\x{77F0}\\x{77F1}\\x{77F2}\\x{77F3}\\x{77F6}' .\n          '\\x{77F7}\\x{77F8}\\x{77F9}\\x{77FA}\\x{77FB}\\x{77FC}\\x{77FD}\\x{77FE}\\x{77FF}' .\n          '\\x{7800}\\x{7801}\\x{7802}\\x{7803}\\x{7804}\\x{7805}\\x{7806}\\x{7808}\\x{7809}' .\n          '\\x{780A}\\x{780B}\\x{780C}\\x{780D}\\x{780E}\\x{780F}\\x{7810}\\x{7811}\\x{7812}' .\n          '\\x{7813}\\x{7814}\\x{7815}\\x{7816}\\x{7817}\\x{7818}\\x{7819}\\x{781A}\\x{781B}' .\n          '\\x{781C}\\x{781D}\\x{781E}\\x{781F}\\x{7820}\\x{7821}\\x{7822}\\x{7823}\\x{7825}' .\n          '\\x{7826}\\x{7827}\\x{7828}\\x{7829}\\x{782A}\\x{782B}\\x{782C}\\x{782D}\\x{782E}' .\n          '\\x{782F}\\x{7830}\\x{7831}\\x{7832}\\x{7833}\\x{7834}\\x{7835}\\x{7837}\\x{7838}' .\n          '\\x{7839}\\x{783A}\\x{783B}\\x{783C}\\x{783D}\\x{783E}\\x{7840}\\x{7841}\\x{7843}' .\n          '\\x{7844}\\x{7845}\\x{7847}\\x{7848}\\x{7849}\\x{784A}\\x{784C}\\x{784D}\\x{784E}' .\n          '\\x{7850}\\x{7851}\\x{7852}\\x{7853}\\x{7854}\\x{7855}\\x{7856}\\x{7857}\\x{7858}' .\n          '\\x{7859}\\x{785A}\\x{785B}\\x{785C}\\x{785D}\\x{785E}\\x{785F}\\x{7860}\\x{7861}' .\n          '\\x{7862}\\x{7863}\\x{7864}\\x{7865}\\x{7866}\\x{7867}\\x{7868}\\x{7869}\\x{786A}' .\n          '\\x{786B}\\x{786C}\\x{786D}\\x{786E}\\x{786F}\\x{7870}\\x{7871}\\x{7872}\\x{7873}' .\n          '\\x{7874}\\x{7875}\\x{7877}\\x{7878}\\x{7879}\\x{787A}\\x{787B}\\x{787C}\\x{787D}' .\n          '\\x{787E}\\x{787F}\\x{7880}\\x{7881}\\x{7882}\\x{7883}\\x{7884}\\x{7885}\\x{7886}' .\n          '\\x{7887}\\x{7889}\\x{788A}\\x{788B}\\x{788C}\\x{788D}\\x{788E}\\x{788F}\\x{7890}' .\n          '\\x{7891}\\x{7892}\\x{7893}\\x{7894}\\x{7895}\\x{7896}\\x{7897}\\x{7898}\\x{7899}' .\n          '\\x{789A}\\x{789B}\\x{789C}\\x{789D}\\x{789E}\\x{789F}\\x{78A0}\\x{78A1}\\x{78A2}' .\n          '\\x{78A3}\\x{78A4}\\x{78A5}\\x{78A6}\\x{78A7}\\x{78A8}\\x{78A9}\\x{78AA}\\x{78AB}' .\n          '\\x{78AC}\\x{78AD}\\x{78AE}\\x{78AF}\\x{78B0}\\x{78B1}\\x{78B2}\\x{78B3}\\x{78B4}' .\n          '\\x{78B5}\\x{78B6}\\x{78B7}\\x{78B8}\\x{78B9}\\x{78BA}\\x{78BB}\\x{78BC}\\x{78BD}' .\n          '\\x{78BE}\\x{78BF}\\x{78C0}\\x{78C1}\\x{78C3}\\x{78C4}\\x{78C5}\\x{78C6}\\x{78C8}' .\n          '\\x{78C9}\\x{78CA}\\x{78CB}\\x{78CC}\\x{78CD}\\x{78CE}\\x{78CF}\\x{78D0}\\x{78D1}' .\n          '\\x{78D3}\\x{78D4}\\x{78D5}\\x{78D6}\\x{78D7}\\x{78D8}\\x{78D9}\\x{78DA}\\x{78DB}' .\n          '\\x{78DC}\\x{78DD}\\x{78DE}\\x{78DF}\\x{78E0}\\x{78E1}\\x{78E2}\\x{78E3}\\x{78E4}' .\n          '\\x{78E5}\\x{78E6}\\x{78E7}\\x{78E8}\\x{78E9}\\x{78EA}\\x{78EB}\\x{78EC}\\x{78ED}' .\n          '\\x{78EE}\\x{78EF}\\x{78F1}\\x{78F2}\\x{78F3}\\x{78F4}\\x{78F5}\\x{78F6}\\x{78F7}' .\n          '\\x{78F9}\\x{78FA}\\x{78FB}\\x{78FC}\\x{78FD}\\x{78FE}\\x{78FF}\\x{7901}\\x{7902}' .\n          '\\x{7903}\\x{7904}\\x{7905}\\x{7906}\\x{7907}\\x{7909}\\x{790A}\\x{790B}\\x{790C}' .\n          '\\x{790E}\\x{790F}\\x{7910}\\x{7911}\\x{7912}\\x{7913}\\x{7914}\\x{7916}\\x{7917}' .\n          '\\x{7918}\\x{7919}\\x{791A}\\x{791B}\\x{791C}\\x{791D}\\x{791E}\\x{7921}\\x{7922}' .\n          '\\x{7923}\\x{7924}\\x{7925}\\x{7926}\\x{7927}\\x{7928}\\x{7929}\\x{792A}\\x{792B}' .\n          '\\x{792C}\\x{792D}\\x{792E}\\x{792F}\\x{7930}\\x{7931}\\x{7933}\\x{7934}\\x{7935}' .\n          '\\x{7937}\\x{7938}\\x{7939}\\x{793A}\\x{793B}\\x{793C}\\x{793D}\\x{793E}\\x{793F}' .\n          '\\x{7940}\\x{7941}\\x{7942}\\x{7943}\\x{7944}\\x{7945}\\x{7946}\\x{7947}\\x{7948}' .\n          '\\x{7949}\\x{794A}\\x{794B}\\x{794C}\\x{794D}\\x{794E}\\x{794F}\\x{7950}\\x{7951}' .\n          '\\x{7952}\\x{7953}\\x{7954}\\x{7955}\\x{7956}\\x{7957}\\x{7958}\\x{795A}\\x{795B}' .\n          '\\x{795C}\\x{795D}\\x{795E}\\x{795F}\\x{7960}\\x{7961}\\x{7962}\\x{7963}\\x{7964}' .\n          '\\x{7965}\\x{7966}\\x{7967}\\x{7968}\\x{7969}\\x{796A}\\x{796B}\\x{796D}\\x{796F}' .\n          '\\x{7970}\\x{7971}\\x{7972}\\x{7973}\\x{7974}\\x{7977}\\x{7978}\\x{7979}\\x{797A}' .\n          '\\x{797B}\\x{797C}\\x{797D}\\x{797E}\\x{797F}\\x{7980}\\x{7981}\\x{7982}\\x{7983}' .\n          '\\x{7984}\\x{7985}\\x{7988}\\x{7989}\\x{798A}\\x{798B}\\x{798C}\\x{798D}\\x{798E}' .\n          '\\x{798F}\\x{7990}\\x{7991}\\x{7992}\\x{7993}\\x{7994}\\x{7995}\\x{7996}\\x{7997}' .\n          '\\x{7998}\\x{7999}\\x{799A}\\x{799B}\\x{799C}\\x{799F}\\x{79A0}\\x{79A1}\\x{79A2}' .\n          '\\x{79A3}\\x{79A4}\\x{79A5}\\x{79A6}\\x{79A7}\\x{79A8}\\x{79AA}\\x{79AB}\\x{79AC}' .\n          '\\x{79AD}\\x{79AE}\\x{79AF}\\x{79B0}\\x{79B1}\\x{79B2}\\x{79B3}\\x{79B4}\\x{79B5}' .\n          '\\x{79B6}\\x{79B7}\\x{79B8}\\x{79B9}\\x{79BA}\\x{79BB}\\x{79BD}\\x{79BE}\\x{79BF}' .\n          '\\x{79C0}\\x{79C1}\\x{79C2}\\x{79C3}\\x{79C5}\\x{79C6}\\x{79C8}\\x{79C9}\\x{79CA}' .\n          '\\x{79CB}\\x{79CD}\\x{79CE}\\x{79CF}\\x{79D0}\\x{79D1}\\x{79D2}\\x{79D3}\\x{79D5}' .\n          '\\x{79D6}\\x{79D8}\\x{79D9}\\x{79DA}\\x{79DB}\\x{79DC}\\x{79DD}\\x{79DE}\\x{79DF}' .\n          '\\x{79E0}\\x{79E1}\\x{79E2}\\x{79E3}\\x{79E4}\\x{79E5}\\x{79E6}\\x{79E7}\\x{79E8}' .\n          '\\x{79E9}\\x{79EA}\\x{79EB}\\x{79EC}\\x{79ED}\\x{79EE}\\x{79EF}\\x{79F0}\\x{79F1}' .\n          '\\x{79F2}\\x{79F3}\\x{79F4}\\x{79F5}\\x{79F6}\\x{79F7}\\x{79F8}\\x{79F9}\\x{79FA}' .\n          '\\x{79FB}\\x{79FC}\\x{79FD}\\x{79FE}\\x{79FF}\\x{7A00}\\x{7A02}\\x{7A03}\\x{7A04}' .\n          '\\x{7A05}\\x{7A06}\\x{7A08}\\x{7A0A}\\x{7A0B}\\x{7A0C}\\x{7A0D}\\x{7A0E}\\x{7A0F}' .\n          '\\x{7A10}\\x{7A11}\\x{7A12}\\x{7A13}\\x{7A14}\\x{7A15}\\x{7A16}\\x{7A17}\\x{7A18}' .\n          '\\x{7A19}\\x{7A1A}\\x{7A1B}\\x{7A1C}\\x{7A1D}\\x{7A1E}\\x{7A1F}\\x{7A20}\\x{7A21}' .\n          '\\x{7A22}\\x{7A23}\\x{7A24}\\x{7A25}\\x{7A26}\\x{7A27}\\x{7A28}\\x{7A29}\\x{7A2A}' .\n          '\\x{7A2B}\\x{7A2D}\\x{7A2E}\\x{7A2F}\\x{7A30}\\x{7A31}\\x{7A32}\\x{7A33}\\x{7A34}' .\n          '\\x{7A35}\\x{7A37}\\x{7A39}\\x{7A3B}\\x{7A3C}\\x{7A3D}\\x{7A3E}\\x{7A3F}\\x{7A40}' .\n          '\\x{7A41}\\x{7A42}\\x{7A43}\\x{7A44}\\x{7A45}\\x{7A46}\\x{7A47}\\x{7A48}\\x{7A49}' .\n          '\\x{7A4A}\\x{7A4B}\\x{7A4C}\\x{7A4D}\\x{7A4E}\\x{7A50}\\x{7A51}\\x{7A52}\\x{7A53}' .\n          '\\x{7A54}\\x{7A55}\\x{7A56}\\x{7A57}\\x{7A58}\\x{7A59}\\x{7A5A}\\x{7A5B}\\x{7A5C}' .\n          '\\x{7A5D}\\x{7A5E}\\x{7A5F}\\x{7A60}\\x{7A61}\\x{7A62}\\x{7A65}\\x{7A66}\\x{7A67}' .\n          '\\x{7A68}\\x{7A69}\\x{7A6B}\\x{7A6C}\\x{7A6D}\\x{7A6E}\\x{7A70}\\x{7A71}\\x{7A72}' .\n          '\\x{7A73}\\x{7A74}\\x{7A75}\\x{7A76}\\x{7A77}\\x{7A78}\\x{7A79}\\x{7A7A}\\x{7A7B}' .\n          '\\x{7A7C}\\x{7A7D}\\x{7A7E}\\x{7A7F}\\x{7A80}\\x{7A81}\\x{7A83}\\x{7A84}\\x{7A85}' .\n          '\\x{7A86}\\x{7A87}\\x{7A88}\\x{7A89}\\x{7A8A}\\x{7A8B}\\x{7A8C}\\x{7A8D}\\x{7A8E}' .\n          '\\x{7A8F}\\x{7A90}\\x{7A91}\\x{7A92}\\x{7A93}\\x{7A94}\\x{7A95}\\x{7A96}\\x{7A97}' .\n          '\\x{7A98}\\x{7A99}\\x{7A9C}\\x{7A9D}\\x{7A9E}\\x{7A9F}\\x{7AA0}\\x{7AA1}\\x{7AA2}' .\n          '\\x{7AA3}\\x{7AA4}\\x{7AA5}\\x{7AA6}\\x{7AA7}\\x{7AA8}\\x{7AA9}\\x{7AAA}\\x{7AAB}' .\n          '\\x{7AAC}\\x{7AAD}\\x{7AAE}\\x{7AAF}\\x{7AB0}\\x{7AB1}\\x{7AB2}\\x{7AB3}\\x{7AB4}' .\n          '\\x{7AB5}\\x{7AB6}\\x{7AB7}\\x{7AB8}\\x{7ABA}\\x{7ABE}\\x{7ABF}\\x{7AC0}\\x{7AC1}' .\n          '\\x{7AC4}\\x{7AC5}\\x{7AC7}\\x{7AC8}\\x{7AC9}\\x{7ACA}\\x{7ACB}\\x{7ACC}\\x{7ACD}' .\n          '\\x{7ACE}\\x{7ACF}\\x{7AD0}\\x{7AD1}\\x{7AD2}\\x{7AD3}\\x{7AD4}\\x{7AD5}\\x{7AD6}' .\n          '\\x{7AD8}\\x{7AD9}\\x{7ADB}\\x{7ADC}\\x{7ADD}\\x{7ADE}\\x{7ADF}\\x{7AE0}\\x{7AE1}' .\n          '\\x{7AE2}\\x{7AE3}\\x{7AE4}\\x{7AE5}\\x{7AE6}\\x{7AE7}\\x{7AE8}\\x{7AEA}\\x{7AEB}' .\n          '\\x{7AEC}\\x{7AED}\\x{7AEE}\\x{7AEF}\\x{7AF0}\\x{7AF1}\\x{7AF2}\\x{7AF3}\\x{7AF4}' .\n          '\\x{7AF6}\\x{7AF7}\\x{7AF8}\\x{7AF9}\\x{7AFA}\\x{7AFB}\\x{7AFD}\\x{7AFE}\\x{7AFF}' .\n          '\\x{7B00}\\x{7B01}\\x{7B02}\\x{7B03}\\x{7B04}\\x{7B05}\\x{7B06}\\x{7B08}\\x{7B09}' .\n          '\\x{7B0A}\\x{7B0B}\\x{7B0C}\\x{7B0D}\\x{7B0E}\\x{7B0F}\\x{7B10}\\x{7B11}\\x{7B12}' .\n          '\\x{7B13}\\x{7B14}\\x{7B15}\\x{7B16}\\x{7B17}\\x{7B18}\\x{7B19}\\x{7B1A}\\x{7B1B}' .\n          '\\x{7B1C}\\x{7B1D}\\x{7B1E}\\x{7B20}\\x{7B21}\\x{7B22}\\x{7B23}\\x{7B24}\\x{7B25}' .\n          '\\x{7B26}\\x{7B28}\\x{7B2A}\\x{7B2B}\\x{7B2C}\\x{7B2D}\\x{7B2E}\\x{7B2F}\\x{7B30}' .\n          '\\x{7B31}\\x{7B32}\\x{7B33}\\x{7B34}\\x{7B35}\\x{7B36}\\x{7B37}\\x{7B38}\\x{7B39}' .\n          '\\x{7B3A}\\x{7B3B}\\x{7B3C}\\x{7B3D}\\x{7B3E}\\x{7B3F}\\x{7B40}\\x{7B41}\\x{7B43}' .\n          '\\x{7B44}\\x{7B45}\\x{7B46}\\x{7B47}\\x{7B48}\\x{7B49}\\x{7B4A}\\x{7B4B}\\x{7B4C}' .\n          '\\x{7B4D}\\x{7B4E}\\x{7B4F}\\x{7B50}\\x{7B51}\\x{7B52}\\x{7B54}\\x{7B55}\\x{7B56}' .\n          '\\x{7B57}\\x{7B58}\\x{7B59}\\x{7B5A}\\x{7B5B}\\x{7B5C}\\x{7B5D}\\x{7B5E}\\x{7B5F}' .\n          '\\x{7B60}\\x{7B61}\\x{7B62}\\x{7B63}\\x{7B64}\\x{7B65}\\x{7B66}\\x{7B67}\\x{7B68}' .\n          '\\x{7B69}\\x{7B6A}\\x{7B6B}\\x{7B6C}\\x{7B6D}\\x{7B6E}\\x{7B70}\\x{7B71}\\x{7B72}' .\n          '\\x{7B73}\\x{7B74}\\x{7B75}\\x{7B76}\\x{7B77}\\x{7B78}\\x{7B79}\\x{7B7B}\\x{7B7C}' .\n          '\\x{7B7D}\\x{7B7E}\\x{7B7F}\\x{7B80}\\x{7B81}\\x{7B82}\\x{7B83}\\x{7B84}\\x{7B85}' .\n          '\\x{7B87}\\x{7B88}\\x{7B89}\\x{7B8A}\\x{7B8B}\\x{7B8C}\\x{7B8D}\\x{7B8E}\\x{7B8F}' .\n          '\\x{7B90}\\x{7B91}\\x{7B93}\\x{7B94}\\x{7B95}\\x{7B96}\\x{7B97}\\x{7B98}\\x{7B99}' .\n          '\\x{7B9A}\\x{7B9B}\\x{7B9C}\\x{7B9D}\\x{7B9E}\\x{7B9F}\\x{7BA0}\\x{7BA1}\\x{7BA2}' .\n          '\\x{7BA4}\\x{7BA6}\\x{7BA7}\\x{7BA8}\\x{7BA9}\\x{7BAA}\\x{7BAB}\\x{7BAC}\\x{7BAD}' .\n          '\\x{7BAE}\\x{7BAF}\\x{7BB1}\\x{7BB3}\\x{7BB4}\\x{7BB5}\\x{7BB6}\\x{7BB7}\\x{7BB8}' .\n          '\\x{7BB9}\\x{7BBA}\\x{7BBB}\\x{7BBC}\\x{7BBD}\\x{7BBE}\\x{7BBF}\\x{7BC0}\\x{7BC1}' .\n          '\\x{7BC2}\\x{7BC3}\\x{7BC4}\\x{7BC5}\\x{7BC6}\\x{7BC7}\\x{7BC8}\\x{7BC9}\\x{7BCA}' .\n          '\\x{7BCB}\\x{7BCC}\\x{7BCD}\\x{7BCE}\\x{7BD0}\\x{7BD1}\\x{7BD2}\\x{7BD3}\\x{7BD4}' .\n          '\\x{7BD5}\\x{7BD6}\\x{7BD7}\\x{7BD8}\\x{7BD9}\\x{7BDA}\\x{7BDB}\\x{7BDC}\\x{7BDD}' .\n          '\\x{7BDE}\\x{7BDF}\\x{7BE0}\\x{7BE1}\\x{7BE2}\\x{7BE3}\\x{7BE4}\\x{7BE5}\\x{7BE6}' .\n          '\\x{7BE7}\\x{7BE8}\\x{7BE9}\\x{7BEA}\\x{7BEB}\\x{7BEC}\\x{7BED}\\x{7BEE}\\x{7BEF}' .\n          '\\x{7BF0}\\x{7BF1}\\x{7BF2}\\x{7BF3}\\x{7BF4}\\x{7BF5}\\x{7BF6}\\x{7BF7}\\x{7BF8}' .\n          '\\x{7BF9}\\x{7BFB}\\x{7BFC}\\x{7BFD}\\x{7BFE}\\x{7BFF}\\x{7C00}\\x{7C01}\\x{7C02}' .\n          '\\x{7C03}\\x{7C04}\\x{7C05}\\x{7C06}\\x{7C07}\\x{7C08}\\x{7C09}\\x{7C0A}\\x{7C0B}' .\n          '\\x{7C0C}\\x{7C0D}\\x{7C0E}\\x{7C0F}\\x{7C10}\\x{7C11}\\x{7C12}\\x{7C13}\\x{7C15}' .\n          '\\x{7C16}\\x{7C17}\\x{7C18}\\x{7C19}\\x{7C1A}\\x{7C1C}\\x{7C1D}\\x{7C1E}\\x{7C1F}' .\n          '\\x{7C20}\\x{7C21}\\x{7C22}\\x{7C23}\\x{7C24}\\x{7C25}\\x{7C26}\\x{7C27}\\x{7C28}' .\n          '\\x{7C29}\\x{7C2A}\\x{7C2B}\\x{7C2C}\\x{7C2D}\\x{7C30}\\x{7C31}\\x{7C32}\\x{7C33}' .\n          '\\x{7C34}\\x{7C35}\\x{7C36}\\x{7C37}\\x{7C38}\\x{7C39}\\x{7C3A}\\x{7C3B}\\x{7C3C}' .\n          '\\x{7C3D}\\x{7C3E}\\x{7C3F}\\x{7C40}\\x{7C41}\\x{7C42}\\x{7C43}\\x{7C44}\\x{7C45}' .\n          '\\x{7C46}\\x{7C47}\\x{7C48}\\x{7C49}\\x{7C4A}\\x{7C4B}\\x{7C4C}\\x{7C4D}\\x{7C4E}' .\n          '\\x{7C50}\\x{7C51}\\x{7C53}\\x{7C54}\\x{7C56}\\x{7C57}\\x{7C58}\\x{7C59}\\x{7C5A}' .\n          '\\x{7C5B}\\x{7C5C}\\x{7C5E}\\x{7C5F}\\x{7C60}\\x{7C61}\\x{7C62}\\x{7C63}\\x{7C64}' .\n          '\\x{7C65}\\x{7C66}\\x{7C67}\\x{7C68}\\x{7C69}\\x{7C6A}\\x{7C6B}\\x{7C6C}\\x{7C6D}' .\n          '\\x{7C6E}\\x{7C6F}\\x{7C70}\\x{7C71}\\x{7C72}\\x{7C73}\\x{7C74}\\x{7C75}\\x{7C77}' .\n          '\\x{7C78}\\x{7C79}\\x{7C7A}\\x{7C7B}\\x{7C7C}\\x{7C7D}\\x{7C7E}\\x{7C7F}\\x{7C80}' .\n          '\\x{7C81}\\x{7C82}\\x{7C84}\\x{7C85}\\x{7C86}\\x{7C88}\\x{7C89}\\x{7C8A}\\x{7C8B}' .\n          '\\x{7C8C}\\x{7C8D}\\x{7C8E}\\x{7C8F}\\x{7C90}\\x{7C91}\\x{7C92}\\x{7C94}\\x{7C95}' .\n          '\\x{7C96}\\x{7C97}\\x{7C98}\\x{7C99}\\x{7C9B}\\x{7C9C}\\x{7C9D}\\x{7C9E}\\x{7C9F}' .\n          '\\x{7CA0}\\x{7CA1}\\x{7CA2}\\x{7CA3}\\x{7CA4}\\x{7CA5}\\x{7CA6}\\x{7CA7}\\x{7CA8}' .\n          '\\x{7CA9}\\x{7CAA}\\x{7CAD}\\x{7CAE}\\x{7CAF}\\x{7CB0}\\x{7CB1}\\x{7CB2}\\x{7CB3}' .\n          '\\x{7CB4}\\x{7CB5}\\x{7CB6}\\x{7CB7}\\x{7CB8}\\x{7CB9}\\x{7CBA}\\x{7CBB}\\x{7CBC}' .\n          '\\x{7CBD}\\x{7CBE}\\x{7CBF}\\x{7CC0}\\x{7CC1}\\x{7CC2}\\x{7CC3}\\x{7CC4}\\x{7CC5}' .\n          '\\x{7CC6}\\x{7CC7}\\x{7CC8}\\x{7CC9}\\x{7CCA}\\x{7CCB}\\x{7CCC}\\x{7CCD}\\x{7CCE}' .\n          '\\x{7CCF}\\x{7CD0}\\x{7CD1}\\x{7CD2}\\x{7CD4}\\x{7CD5}\\x{7CD6}\\x{7CD7}\\x{7CD8}' .\n          '\\x{7CD9}\\x{7CDC}\\x{7CDD}\\x{7CDE}\\x{7CDF}\\x{7CE0}\\x{7CE2}\\x{7CE4}\\x{7CE7}' .\n          '\\x{7CE8}\\x{7CE9}\\x{7CEA}\\x{7CEB}\\x{7CEC}\\x{7CED}\\x{7CEE}\\x{7CEF}\\x{7CF0}' .\n          '\\x{7CF1}\\x{7CF2}\\x{7CF3}\\x{7CF4}\\x{7CF5}\\x{7CF6}\\x{7CF7}\\x{7CF8}\\x{7CF9}' .\n          '\\x{7CFA}\\x{7CFB}\\x{7CFD}\\x{7CFE}\\x{7D00}\\x{7D01}\\x{7D02}\\x{7D03}\\x{7D04}' .\n          '\\x{7D05}\\x{7D06}\\x{7D07}\\x{7D08}\\x{7D09}\\x{7D0A}\\x{7D0B}\\x{7D0C}\\x{7D0D}' .\n          '\\x{7D0E}\\x{7D0F}\\x{7D10}\\x{7D11}\\x{7D12}\\x{7D13}\\x{7D14}\\x{7D15}\\x{7D16}' .\n          '\\x{7D17}\\x{7D18}\\x{7D19}\\x{7D1A}\\x{7D1B}\\x{7D1C}\\x{7D1D}\\x{7D1E}\\x{7D1F}' .\n          '\\x{7D20}\\x{7D21}\\x{7D22}\\x{7D24}\\x{7D25}\\x{7D26}\\x{7D27}\\x{7D28}\\x{7D29}' .\n          '\\x{7D2B}\\x{7D2C}\\x{7D2E}\\x{7D2F}\\x{7D30}\\x{7D31}\\x{7D32}\\x{7D33}\\x{7D34}' .\n          '\\x{7D35}\\x{7D36}\\x{7D37}\\x{7D38}\\x{7D39}\\x{7D3A}\\x{7D3B}\\x{7D3C}\\x{7D3D}' .\n          '\\x{7D3E}\\x{7D3F}\\x{7D40}\\x{7D41}\\x{7D42}\\x{7D43}\\x{7D44}\\x{7D45}\\x{7D46}' .\n          '\\x{7D47}\\x{7D49}\\x{7D4A}\\x{7D4B}\\x{7D4C}\\x{7D4E}\\x{7D4F}\\x{7D50}\\x{7D51}' .\n          '\\x{7D52}\\x{7D53}\\x{7D54}\\x{7D55}\\x{7D56}\\x{7D57}\\x{7D58}\\x{7D59}\\x{7D5B}' .\n          '\\x{7D5C}\\x{7D5D}\\x{7D5E}\\x{7D5F}\\x{7D60}\\x{7D61}\\x{7D62}\\x{7D63}\\x{7D65}' .\n          '\\x{7D66}\\x{7D67}\\x{7D68}\\x{7D69}\\x{7D6A}\\x{7D6B}\\x{7D6C}\\x{7D6D}\\x{7D6E}' .\n          '\\x{7D6F}\\x{7D70}\\x{7D71}\\x{7D72}\\x{7D73}\\x{7D74}\\x{7D75}\\x{7D76}\\x{7D77}' .\n          '\\x{7D79}\\x{7D7A}\\x{7D7B}\\x{7D7C}\\x{7D7D}\\x{7D7E}\\x{7D7F}\\x{7D80}\\x{7D81}' .\n          '\\x{7D83}\\x{7D84}\\x{7D85}\\x{7D86}\\x{7D87}\\x{7D88}\\x{7D89}\\x{7D8A}\\x{7D8B}' .\n          '\\x{7D8C}\\x{7D8D}\\x{7D8E}\\x{7D8F}\\x{7D90}\\x{7D91}\\x{7D92}\\x{7D93}\\x{7D94}' .\n          '\\x{7D96}\\x{7D97}\\x{7D99}\\x{7D9B}\\x{7D9C}\\x{7D9D}\\x{7D9E}\\x{7D9F}\\x{7DA0}' .\n          '\\x{7DA1}\\x{7DA2}\\x{7DA3}\\x{7DA5}\\x{7DA6}\\x{7DA7}\\x{7DA9}\\x{7DAA}\\x{7DAB}' .\n          '\\x{7DAC}\\x{7DAD}\\x{7DAE}\\x{7DAF}\\x{7DB0}\\x{7DB1}\\x{7DB2}\\x{7DB3}\\x{7DB4}' .\n          '\\x{7DB5}\\x{7DB6}\\x{7DB7}\\x{7DB8}\\x{7DB9}\\x{7DBA}\\x{7DBB}\\x{7DBC}\\x{7DBD}' .\n          '\\x{7DBE}\\x{7DBF}\\x{7DC0}\\x{7DC1}\\x{7DC2}\\x{7DC3}\\x{7DC4}\\x{7DC5}\\x{7DC6}' .\n          '\\x{7DC7}\\x{7DC8}\\x{7DC9}\\x{7DCA}\\x{7DCB}\\x{7DCC}\\x{7DCE}\\x{7DCF}\\x{7DD0}' .\n          '\\x{7DD1}\\x{7DD2}\\x{7DD4}\\x{7DD5}\\x{7DD6}\\x{7DD7}\\x{7DD8}\\x{7DD9}\\x{7DDA}' .\n          '\\x{7DDB}\\x{7DDD}\\x{7DDE}\\x{7DDF}\\x{7DE0}\\x{7DE1}\\x{7DE2}\\x{7DE3}\\x{7DE6}' .\n          '\\x{7DE7}\\x{7DE8}\\x{7DE9}\\x{7DEA}\\x{7DEC}\\x{7DED}\\x{7DEE}\\x{7DEF}\\x{7DF0}' .\n          '\\x{7DF1}\\x{7DF2}\\x{7DF3}\\x{7DF4}\\x{7DF5}\\x{7DF6}\\x{7DF7}\\x{7DF8}\\x{7DF9}' .\n          '\\x{7DFA}\\x{7DFB}\\x{7DFC}\\x{7E00}\\x{7E01}\\x{7E02}\\x{7E03}\\x{7E04}\\x{7E05}' .\n          '\\x{7E06}\\x{7E07}\\x{7E08}\\x{7E09}\\x{7E0A}\\x{7E0B}\\x{7E0C}\\x{7E0D}\\x{7E0E}' .\n          '\\x{7E0F}\\x{7E10}\\x{7E11}\\x{7E12}\\x{7E13}\\x{7E14}\\x{7E15}\\x{7E16}\\x{7E17}' .\n          '\\x{7E19}\\x{7E1A}\\x{7E1B}\\x{7E1C}\\x{7E1D}\\x{7E1E}\\x{7E1F}\\x{7E20}\\x{7E21}' .\n          '\\x{7E22}\\x{7E23}\\x{7E24}\\x{7E25}\\x{7E26}\\x{7E27}\\x{7E28}\\x{7E29}\\x{7E2A}' .\n          '\\x{7E2B}\\x{7E2C}\\x{7E2D}\\x{7E2E}\\x{7E2F}\\x{7E30}\\x{7E31}\\x{7E32}\\x{7E33}' .\n          '\\x{7E34}\\x{7E35}\\x{7E36}\\x{7E37}\\x{7E38}\\x{7E39}\\x{7E3A}\\x{7E3B}\\x{7E3C}' .\n          '\\x{7E3D}\\x{7E3E}\\x{7E3F}\\x{7E40}\\x{7E41}\\x{7E42}\\x{7E43}\\x{7E44}\\x{7E45}' .\n          '\\x{7E46}\\x{7E47}\\x{7E48}\\x{7E49}\\x{7E4C}\\x{7E4D}\\x{7E4E}\\x{7E4F}\\x{7E50}' .\n          '\\x{7E51}\\x{7E52}\\x{7E53}\\x{7E54}\\x{7E55}\\x{7E56}\\x{7E57}\\x{7E58}\\x{7E59}' .\n          '\\x{7E5A}\\x{7E5C}\\x{7E5D}\\x{7E5E}\\x{7E5F}\\x{7E60}\\x{7E61}\\x{7E62}\\x{7E63}' .\n          '\\x{7E65}\\x{7E66}\\x{7E67}\\x{7E68}\\x{7E69}\\x{7E6A}\\x{7E6B}\\x{7E6C}\\x{7E6D}' .\n          '\\x{7E6E}\\x{7E6F}\\x{7E70}\\x{7E71}\\x{7E72}\\x{7E73}\\x{7E74}\\x{7E75}\\x{7E76}' .\n          '\\x{7E77}\\x{7E78}\\x{7E79}\\x{7E7A}\\x{7E7B}\\x{7E7C}\\x{7E7D}\\x{7E7E}\\x{7E7F}' .\n          '\\x{7E80}\\x{7E81}\\x{7E82}\\x{7E83}\\x{7E84}\\x{7E85}\\x{7E86}\\x{7E87}\\x{7E88}' .\n          '\\x{7E89}\\x{7E8A}\\x{7E8B}\\x{7E8C}\\x{7E8D}\\x{7E8E}\\x{7E8F}\\x{7E90}\\x{7E91}' .\n          '\\x{7E92}\\x{7E93}\\x{7E94}\\x{7E95}\\x{7E96}\\x{7E97}\\x{7E98}\\x{7E99}\\x{7E9A}' .\n          '\\x{7E9B}\\x{7E9C}\\x{7E9E}\\x{7E9F}\\x{7EA0}\\x{7EA1}\\x{7EA2}\\x{7EA3}\\x{7EA4}' .\n          '\\x{7EA5}\\x{7EA6}\\x{7EA7}\\x{7EA8}\\x{7EA9}\\x{7EAA}\\x{7EAB}\\x{7EAC}\\x{7EAD}' .\n          '\\x{7EAE}\\x{7EAF}\\x{7EB0}\\x{7EB1}\\x{7EB2}\\x{7EB3}\\x{7EB4}\\x{7EB5}\\x{7EB6}' .\n          '\\x{7EB7}\\x{7EB8}\\x{7EB9}\\x{7EBA}\\x{7EBB}\\x{7EBC}\\x{7EBD}\\x{7EBE}\\x{7EBF}' .\n          '\\x{7EC0}\\x{7EC1}\\x{7EC2}\\x{7EC3}\\x{7EC4}\\x{7EC5}\\x{7EC6}\\x{7EC7}\\x{7EC8}' .\n          '\\x{7EC9}\\x{7ECA}\\x{7ECB}\\x{7ECC}\\x{7ECD}\\x{7ECE}\\x{7ECF}\\x{7ED0}\\x{7ED1}' .\n          '\\x{7ED2}\\x{7ED3}\\x{7ED4}\\x{7ED5}\\x{7ED6}\\x{7ED7}\\x{7ED8}\\x{7ED9}\\x{7EDA}' .\n          '\\x{7EDB}\\x{7EDC}\\x{7EDD}\\x{7EDE}\\x{7EDF}\\x{7EE0}\\x{7EE1}\\x{7EE2}\\x{7EE3}' .\n          '\\x{7EE4}\\x{7EE5}\\x{7EE6}\\x{7EE7}\\x{7EE8}\\x{7EE9}\\x{7EEA}\\x{7EEB}\\x{7EEC}' .\n          '\\x{7EED}\\x{7EEE}\\x{7EEF}\\x{7EF0}\\x{7EF1}\\x{7EF2}\\x{7EF3}\\x{7EF4}\\x{7EF5}' .\n          '\\x{7EF6}\\x{7EF7}\\x{7EF8}\\x{7EF9}\\x{7EFA}\\x{7EFB}\\x{7EFC}\\x{7EFD}\\x{7EFE}' .\n          '\\x{7EFF}\\x{7F00}\\x{7F01}\\x{7F02}\\x{7F03}\\x{7F04}\\x{7F05}\\x{7F06}\\x{7F07}' .\n          '\\x{7F08}\\x{7F09}\\x{7F0A}\\x{7F0B}\\x{7F0C}\\x{7F0D}\\x{7F0E}\\x{7F0F}\\x{7F10}' .\n          '\\x{7F11}\\x{7F12}\\x{7F13}\\x{7F14}\\x{7F15}\\x{7F16}\\x{7F17}\\x{7F18}\\x{7F19}' .\n          '\\x{7F1A}\\x{7F1B}\\x{7F1C}\\x{7F1D}\\x{7F1E}\\x{7F1F}\\x{7F20}\\x{7F21}\\x{7F22}' .\n          '\\x{7F23}\\x{7F24}\\x{7F25}\\x{7F26}\\x{7F27}\\x{7F28}\\x{7F29}\\x{7F2A}\\x{7F2B}' .\n          '\\x{7F2C}\\x{7F2D}\\x{7F2E}\\x{7F2F}\\x{7F30}\\x{7F31}\\x{7F32}\\x{7F33}\\x{7F34}' .\n          '\\x{7F35}\\x{7F36}\\x{7F37}\\x{7F38}\\x{7F39}\\x{7F3A}\\x{7F3D}\\x{7F3E}\\x{7F3F}' .\n          '\\x{7F40}\\x{7F42}\\x{7F43}\\x{7F44}\\x{7F45}\\x{7F47}\\x{7F48}\\x{7F49}\\x{7F4A}' .\n          '\\x{7F4B}\\x{7F4C}\\x{7F4D}\\x{7F4E}\\x{7F4F}\\x{7F50}\\x{7F51}\\x{7F52}\\x{7F53}' .\n          '\\x{7F54}\\x{7F55}\\x{7F56}\\x{7F57}\\x{7F58}\\x{7F5A}\\x{7F5B}\\x{7F5C}\\x{7F5D}' .\n          '\\x{7F5E}\\x{7F5F}\\x{7F60}\\x{7F61}\\x{7F62}\\x{7F63}\\x{7F64}\\x{7F65}\\x{7F66}' .\n          '\\x{7F67}\\x{7F68}\\x{7F69}\\x{7F6A}\\x{7F6B}\\x{7F6C}\\x{7F6D}\\x{7F6E}\\x{7F6F}' .\n          '\\x{7F70}\\x{7F71}\\x{7F72}\\x{7F73}\\x{7F74}\\x{7F75}\\x{7F76}\\x{7F77}\\x{7F78}' .\n          '\\x{7F79}\\x{7F7A}\\x{7F7B}\\x{7F7C}\\x{7F7D}\\x{7F7E}\\x{7F7F}\\x{7F80}\\x{7F81}' .\n          '\\x{7F82}\\x{7F83}\\x{7F85}\\x{7F86}\\x{7F87}\\x{7F88}\\x{7F89}\\x{7F8A}\\x{7F8B}' .\n          '\\x{7F8C}\\x{7F8D}\\x{7F8E}\\x{7F8F}\\x{7F91}\\x{7F92}\\x{7F93}\\x{7F94}\\x{7F95}' .\n          '\\x{7F96}\\x{7F98}\\x{7F9A}\\x{7F9B}\\x{7F9C}\\x{7F9D}\\x{7F9E}\\x{7F9F}\\x{7FA0}' .\n          '\\x{7FA1}\\x{7FA2}\\x{7FA3}\\x{7FA4}\\x{7FA5}\\x{7FA6}\\x{7FA7}\\x{7FA8}\\x{7FA9}' .\n          '\\x{7FAA}\\x{7FAB}\\x{7FAC}\\x{7FAD}\\x{7FAE}\\x{7FAF}\\x{7FB0}\\x{7FB1}\\x{7FB2}' .\n          '\\x{7FB3}\\x{7FB5}\\x{7FB6}\\x{7FB7}\\x{7FB8}\\x{7FB9}\\x{7FBA}\\x{7FBB}\\x{7FBC}' .\n          '\\x{7FBD}\\x{7FBE}\\x{7FBF}\\x{7FC0}\\x{7FC1}\\x{7FC2}\\x{7FC3}\\x{7FC4}\\x{7FC5}' .\n          '\\x{7FC6}\\x{7FC7}\\x{7FC8}\\x{7FC9}\\x{7FCA}\\x{7FCB}\\x{7FCC}\\x{7FCD}\\x{7FCE}' .\n          '\\x{7FCF}\\x{7FD0}\\x{7FD1}\\x{7FD2}\\x{7FD3}\\x{7FD4}\\x{7FD5}\\x{7FD7}\\x{7FD8}' .\n          '\\x{7FD9}\\x{7FDA}\\x{7FDB}\\x{7FDC}\\x{7FDE}\\x{7FDF}\\x{7FE0}\\x{7FE1}\\x{7FE2}' .\n          '\\x{7FE3}\\x{7FE5}\\x{7FE6}\\x{7FE7}\\x{7FE8}\\x{7FE9}\\x{7FEA}\\x{7FEB}\\x{7FEC}' .\n          '\\x{7FED}\\x{7FEE}\\x{7FEF}\\x{7FF0}\\x{7FF1}\\x{7FF2}\\x{7FF3}\\x{7FF4}\\x{7FF5}' .\n          '\\x{7FF6}\\x{7FF7}\\x{7FF8}\\x{7FF9}\\x{7FFA}\\x{7FFB}\\x{7FFC}\\x{7FFD}\\x{7FFE}' .\n          '\\x{7FFF}\\x{8000}\\x{8001}\\x{8002}\\x{8003}\\x{8004}\\x{8005}\\x{8006}\\x{8007}' .\n          '\\x{8008}\\x{8009}\\x{800B}\\x{800C}\\x{800D}\\x{800E}\\x{800F}\\x{8010}\\x{8011}' .\n          '\\x{8012}\\x{8013}\\x{8014}\\x{8015}\\x{8016}\\x{8017}\\x{8018}\\x{8019}\\x{801A}' .\n          '\\x{801B}\\x{801C}\\x{801D}\\x{801E}\\x{801F}\\x{8020}\\x{8021}\\x{8022}\\x{8023}' .\n          '\\x{8024}\\x{8025}\\x{8026}\\x{8027}\\x{8028}\\x{8029}\\x{802A}\\x{802B}\\x{802C}' .\n          '\\x{802D}\\x{802E}\\x{8030}\\x{8031}\\x{8032}\\x{8033}\\x{8034}\\x{8035}\\x{8036}' .\n          '\\x{8037}\\x{8038}\\x{8039}\\x{803A}\\x{803B}\\x{803D}\\x{803E}\\x{803F}\\x{8041}' .\n          '\\x{8042}\\x{8043}\\x{8044}\\x{8045}\\x{8046}\\x{8047}\\x{8048}\\x{8049}\\x{804A}' .\n          '\\x{804B}\\x{804C}\\x{804D}\\x{804E}\\x{804F}\\x{8050}\\x{8051}\\x{8052}\\x{8053}' .\n          '\\x{8054}\\x{8055}\\x{8056}\\x{8057}\\x{8058}\\x{8059}\\x{805A}\\x{805B}\\x{805C}' .\n          '\\x{805D}\\x{805E}\\x{805F}\\x{8060}\\x{8061}\\x{8062}\\x{8063}\\x{8064}\\x{8065}' .\n          '\\x{8067}\\x{8068}\\x{8069}\\x{806A}\\x{806B}\\x{806C}\\x{806D}\\x{806E}\\x{806F}' .\n          '\\x{8070}\\x{8071}\\x{8072}\\x{8073}\\x{8074}\\x{8075}\\x{8076}\\x{8077}\\x{8078}' .\n          '\\x{8079}\\x{807A}\\x{807B}\\x{807C}\\x{807D}\\x{807E}\\x{807F}\\x{8080}\\x{8081}' .\n          '\\x{8082}\\x{8083}\\x{8084}\\x{8085}\\x{8086}\\x{8087}\\x{8089}\\x{808A}\\x{808B}' .\n          '\\x{808C}\\x{808D}\\x{808F}\\x{8090}\\x{8091}\\x{8092}\\x{8093}\\x{8095}\\x{8096}' .\n          '\\x{8097}\\x{8098}\\x{8099}\\x{809A}\\x{809B}\\x{809C}\\x{809D}\\x{809E}\\x{809F}' .\n          '\\x{80A0}\\x{80A1}\\x{80A2}\\x{80A3}\\x{80A4}\\x{80A5}\\x{80A9}\\x{80AA}\\x{80AB}' .\n          '\\x{80AD}\\x{80AE}\\x{80AF}\\x{80B0}\\x{80B1}\\x{80B2}\\x{80B4}\\x{80B5}\\x{80B6}' .\n          '\\x{80B7}\\x{80B8}\\x{80BA}\\x{80BB}\\x{80BC}\\x{80BD}\\x{80BE}\\x{80BF}\\x{80C0}' .\n          '\\x{80C1}\\x{80C2}\\x{80C3}\\x{80C4}\\x{80C5}\\x{80C6}\\x{80C7}\\x{80C8}\\x{80C9}' .\n          '\\x{80CA}\\x{80CB}\\x{80CC}\\x{80CD}\\x{80CE}\\x{80CF}\\x{80D0}\\x{80D1}\\x{80D2}' .\n          '\\x{80D3}\\x{80D4}\\x{80D5}\\x{80D6}\\x{80D7}\\x{80D8}\\x{80D9}\\x{80DA}\\x{80DB}' .\n          '\\x{80DC}\\x{80DD}\\x{80DE}\\x{80E0}\\x{80E1}\\x{80E2}\\x{80E3}\\x{80E4}\\x{80E5}' .\n          '\\x{80E6}\\x{80E7}\\x{80E8}\\x{80E9}\\x{80EA}\\x{80EB}\\x{80EC}\\x{80ED}\\x{80EE}' .\n          '\\x{80EF}\\x{80F0}\\x{80F1}\\x{80F2}\\x{80F3}\\x{80F4}\\x{80F5}\\x{80F6}\\x{80F7}' .\n          '\\x{80F8}\\x{80F9}\\x{80FA}\\x{80FB}\\x{80FC}\\x{80FD}\\x{80FE}\\x{80FF}\\x{8100}' .\n          '\\x{8101}\\x{8102}\\x{8105}\\x{8106}\\x{8107}\\x{8108}\\x{8109}\\x{810A}\\x{810B}' .\n          '\\x{810C}\\x{810D}\\x{810E}\\x{810F}\\x{8110}\\x{8111}\\x{8112}\\x{8113}\\x{8114}' .\n          '\\x{8115}\\x{8116}\\x{8118}\\x{8119}\\x{811A}\\x{811B}\\x{811C}\\x{811D}\\x{811E}' .\n          '\\x{811F}\\x{8120}\\x{8121}\\x{8122}\\x{8123}\\x{8124}\\x{8125}\\x{8126}\\x{8127}' .\n          '\\x{8128}\\x{8129}\\x{812A}\\x{812B}\\x{812C}\\x{812D}\\x{812E}\\x{812F}\\x{8130}' .\n          '\\x{8131}\\x{8132}\\x{8136}\\x{8137}\\x{8138}\\x{8139}\\x{813A}\\x{813B}\\x{813C}' .\n          '\\x{813D}\\x{813E}\\x{813F}\\x{8140}\\x{8141}\\x{8142}\\x{8143}\\x{8144}\\x{8145}' .\n          '\\x{8146}\\x{8147}\\x{8148}\\x{8149}\\x{814A}\\x{814B}\\x{814C}\\x{814D}\\x{814E}' .\n          '\\x{814F}\\x{8150}\\x{8151}\\x{8152}\\x{8153}\\x{8154}\\x{8155}\\x{8156}\\x{8157}' .\n          '\\x{8158}\\x{8159}\\x{815A}\\x{815B}\\x{815C}\\x{815D}\\x{815E}\\x{8160}\\x{8161}' .\n          '\\x{8162}\\x{8163}\\x{8164}\\x{8165}\\x{8166}\\x{8167}\\x{8168}\\x{8169}\\x{816A}' .\n          '\\x{816B}\\x{816C}\\x{816D}\\x{816E}\\x{816F}\\x{8170}\\x{8171}\\x{8172}\\x{8173}' .\n          '\\x{8174}\\x{8175}\\x{8176}\\x{8177}\\x{8178}\\x{8179}\\x{817A}\\x{817B}\\x{817C}' .\n          '\\x{817D}\\x{817E}\\x{817F}\\x{8180}\\x{8181}\\x{8182}\\x{8183}\\x{8185}\\x{8186}' .\n          '\\x{8187}\\x{8188}\\x{8189}\\x{818A}\\x{818B}\\x{818C}\\x{818D}\\x{818E}\\x{818F}' .\n          '\\x{8191}\\x{8192}\\x{8193}\\x{8194}\\x{8195}\\x{8197}\\x{8198}\\x{8199}\\x{819A}' .\n          '\\x{819B}\\x{819C}\\x{819D}\\x{819E}\\x{819F}\\x{81A0}\\x{81A1}\\x{81A2}\\x{81A3}' .\n          '\\x{81A4}\\x{81A5}\\x{81A6}\\x{81A7}\\x{81A8}\\x{81A9}\\x{81AA}\\x{81AB}\\x{81AC}' .\n          '\\x{81AD}\\x{81AE}\\x{81AF}\\x{81B0}\\x{81B1}\\x{81B2}\\x{81B3}\\x{81B4}\\x{81B5}' .\n          '\\x{81B6}\\x{81B7}\\x{81B8}\\x{81B9}\\x{81BA}\\x{81BB}\\x{81BC}\\x{81BD}\\x{81BE}' .\n          '\\x{81BF}\\x{81C0}\\x{81C1}\\x{81C2}\\x{81C3}\\x{81C4}\\x{81C5}\\x{81C6}\\x{81C7}' .\n          '\\x{81C8}\\x{81C9}\\x{81CA}\\x{81CC}\\x{81CD}\\x{81CE}\\x{81CF}\\x{81D0}\\x{81D1}' .\n          '\\x{81D2}\\x{81D4}\\x{81D5}\\x{81D6}\\x{81D7}\\x{81D8}\\x{81D9}\\x{81DA}\\x{81DB}' .\n          '\\x{81DC}\\x{81DD}\\x{81DE}\\x{81DF}\\x{81E0}\\x{81E1}\\x{81E2}\\x{81E3}\\x{81E5}' .\n          '\\x{81E6}\\x{81E7}\\x{81E8}\\x{81E9}\\x{81EA}\\x{81EB}\\x{81EC}\\x{81ED}\\x{81EE}' .\n          '\\x{81F1}\\x{81F2}\\x{81F3}\\x{81F4}\\x{81F5}\\x{81F6}\\x{81F7}\\x{81F8}\\x{81F9}' .\n          '\\x{81FA}\\x{81FB}\\x{81FC}\\x{81FD}\\x{81FE}\\x{81FF}\\x{8200}\\x{8201}\\x{8202}' .\n          '\\x{8203}\\x{8204}\\x{8205}\\x{8206}\\x{8207}\\x{8208}\\x{8209}\\x{820A}\\x{820B}' .\n          '\\x{820C}\\x{820D}\\x{820E}\\x{820F}\\x{8210}\\x{8211}\\x{8212}\\x{8214}\\x{8215}' .\n          '\\x{8216}\\x{8218}\\x{8219}\\x{821A}\\x{821B}\\x{821C}\\x{821D}\\x{821E}\\x{821F}' .\n          '\\x{8220}\\x{8221}\\x{8222}\\x{8223}\\x{8225}\\x{8226}\\x{8227}\\x{8228}\\x{8229}' .\n          '\\x{822A}\\x{822B}\\x{822C}\\x{822D}\\x{822F}\\x{8230}\\x{8231}\\x{8232}\\x{8233}' .\n          '\\x{8234}\\x{8235}\\x{8236}\\x{8237}\\x{8238}\\x{8239}\\x{823A}\\x{823B}\\x{823C}' .\n          '\\x{823D}\\x{823E}\\x{823F}\\x{8240}\\x{8242}\\x{8243}\\x{8244}\\x{8245}\\x{8246}' .\n          '\\x{8247}\\x{8248}\\x{8249}\\x{824A}\\x{824B}\\x{824C}\\x{824D}\\x{824E}\\x{824F}' .\n          '\\x{8250}\\x{8251}\\x{8252}\\x{8253}\\x{8254}\\x{8255}\\x{8256}\\x{8257}\\x{8258}' .\n          '\\x{8259}\\x{825A}\\x{825B}\\x{825C}\\x{825D}\\x{825E}\\x{825F}\\x{8260}\\x{8261}' .\n          '\\x{8263}\\x{8264}\\x{8266}\\x{8267}\\x{8268}\\x{8269}\\x{826A}\\x{826B}\\x{826C}' .\n          '\\x{826D}\\x{826E}\\x{826F}\\x{8270}\\x{8271}\\x{8272}\\x{8273}\\x{8274}\\x{8275}' .\n          '\\x{8276}\\x{8277}\\x{8278}\\x{8279}\\x{827A}\\x{827B}\\x{827C}\\x{827D}\\x{827E}' .\n          '\\x{827F}\\x{8280}\\x{8281}\\x{8282}\\x{8283}\\x{8284}\\x{8285}\\x{8286}\\x{8287}' .\n          '\\x{8288}\\x{8289}\\x{828A}\\x{828B}\\x{828D}\\x{828E}\\x{828F}\\x{8290}\\x{8291}' .\n          '\\x{8292}\\x{8293}\\x{8294}\\x{8295}\\x{8296}\\x{8297}\\x{8298}\\x{8299}\\x{829A}' .\n          '\\x{829B}\\x{829C}\\x{829D}\\x{829E}\\x{829F}\\x{82A0}\\x{82A1}\\x{82A2}\\x{82A3}' .\n          '\\x{82A4}\\x{82A5}\\x{82A6}\\x{82A7}\\x{82A8}\\x{82A9}\\x{82AA}\\x{82AB}\\x{82AC}' .\n          '\\x{82AD}\\x{82AE}\\x{82AF}\\x{82B0}\\x{82B1}\\x{82B3}\\x{82B4}\\x{82B5}\\x{82B6}' .\n          '\\x{82B7}\\x{82B8}\\x{82B9}\\x{82BA}\\x{82BB}\\x{82BC}\\x{82BD}\\x{82BE}\\x{82BF}' .\n          '\\x{82C0}\\x{82C1}\\x{82C2}\\x{82C3}\\x{82C4}\\x{82C5}\\x{82C6}\\x{82C7}\\x{82C8}' .\n          '\\x{82C9}\\x{82CA}\\x{82CB}\\x{82CC}\\x{82CD}\\x{82CE}\\x{82CF}\\x{82D0}\\x{82D1}' .\n          '\\x{82D2}\\x{82D3}\\x{82D4}\\x{82D5}\\x{82D6}\\x{82D7}\\x{82D8}\\x{82D9}\\x{82DA}' .\n          '\\x{82DB}\\x{82DC}\\x{82DD}\\x{82DE}\\x{82DF}\\x{82E0}\\x{82E1}\\x{82E3}\\x{82E4}' .\n          '\\x{82E5}\\x{82E6}\\x{82E7}\\x{82E8}\\x{82E9}\\x{82EA}\\x{82EB}\\x{82EC}\\x{82ED}' .\n          '\\x{82EE}\\x{82EF}\\x{82F0}\\x{82F1}\\x{82F2}\\x{82F3}\\x{82F4}\\x{82F5}\\x{82F6}' .\n          '\\x{82F7}\\x{82F8}\\x{82F9}\\x{82FA}\\x{82FB}\\x{82FD}\\x{82FE}\\x{82FF}\\x{8300}' .\n          '\\x{8301}\\x{8302}\\x{8303}\\x{8304}\\x{8305}\\x{8306}\\x{8307}\\x{8308}\\x{8309}' .\n          '\\x{830B}\\x{830C}\\x{830D}\\x{830E}\\x{830F}\\x{8311}\\x{8312}\\x{8313}\\x{8314}' .\n          '\\x{8315}\\x{8316}\\x{8317}\\x{8318}\\x{8319}\\x{831A}\\x{831B}\\x{831C}\\x{831D}' .\n          '\\x{831E}\\x{831F}\\x{8320}\\x{8321}\\x{8322}\\x{8323}\\x{8324}\\x{8325}\\x{8326}' .\n          '\\x{8327}\\x{8328}\\x{8329}\\x{832A}\\x{832B}\\x{832C}\\x{832D}\\x{832E}\\x{832F}' .\n          '\\x{8331}\\x{8332}\\x{8333}\\x{8334}\\x{8335}\\x{8336}\\x{8337}\\x{8338}\\x{8339}' .\n          '\\x{833A}\\x{833B}\\x{833C}\\x{833D}\\x{833E}\\x{833F}\\x{8340}\\x{8341}\\x{8342}' .\n          '\\x{8343}\\x{8344}\\x{8345}\\x{8346}\\x{8347}\\x{8348}\\x{8349}\\x{834A}\\x{834B}' .\n          '\\x{834C}\\x{834D}\\x{834E}\\x{834F}\\x{8350}\\x{8351}\\x{8352}\\x{8353}\\x{8354}' .\n          '\\x{8356}\\x{8357}\\x{8358}\\x{8359}\\x{835A}\\x{835B}\\x{835C}\\x{835D}\\x{835E}' .\n          '\\x{835F}\\x{8360}\\x{8361}\\x{8362}\\x{8363}\\x{8364}\\x{8365}\\x{8366}\\x{8367}' .\n          '\\x{8368}\\x{8369}\\x{836A}\\x{836B}\\x{836C}\\x{836D}\\x{836E}\\x{836F}\\x{8370}' .\n          '\\x{8371}\\x{8372}\\x{8373}\\x{8374}\\x{8375}\\x{8376}\\x{8377}\\x{8378}\\x{8379}' .\n          '\\x{837A}\\x{837B}\\x{837C}\\x{837D}\\x{837E}\\x{837F}\\x{8380}\\x{8381}\\x{8382}' .\n          '\\x{8383}\\x{8384}\\x{8385}\\x{8386}\\x{8387}\\x{8388}\\x{8389}\\x{838A}\\x{838B}' .\n          '\\x{838C}\\x{838D}\\x{838E}\\x{838F}\\x{8390}\\x{8391}\\x{8392}\\x{8393}\\x{8394}' .\n          '\\x{8395}\\x{8396}\\x{8397}\\x{8398}\\x{8399}\\x{839A}\\x{839B}\\x{839C}\\x{839D}' .\n          '\\x{839E}\\x{83A0}\\x{83A1}\\x{83A2}\\x{83A3}\\x{83A4}\\x{83A5}\\x{83A6}\\x{83A7}' .\n          '\\x{83A8}\\x{83A9}\\x{83AA}\\x{83AB}\\x{83AC}\\x{83AD}\\x{83AE}\\x{83AF}\\x{83B0}' .\n          '\\x{83B1}\\x{83B2}\\x{83B3}\\x{83B4}\\x{83B6}\\x{83B7}\\x{83B8}\\x{83B9}\\x{83BA}' .\n          '\\x{83BB}\\x{83BC}\\x{83BD}\\x{83BF}\\x{83C0}\\x{83C1}\\x{83C2}\\x{83C3}\\x{83C4}' .\n          '\\x{83C5}\\x{83C6}\\x{83C7}\\x{83C8}\\x{83C9}\\x{83CA}\\x{83CB}\\x{83CC}\\x{83CD}' .\n          '\\x{83CE}\\x{83CF}\\x{83D0}\\x{83D1}\\x{83D2}\\x{83D3}\\x{83D4}\\x{83D5}\\x{83D6}' .\n          '\\x{83D7}\\x{83D8}\\x{83D9}\\x{83DA}\\x{83DB}\\x{83DC}\\x{83DD}\\x{83DE}\\x{83DF}' .\n          '\\x{83E0}\\x{83E1}\\x{83E2}\\x{83E3}\\x{83E4}\\x{83E5}\\x{83E7}\\x{83E8}\\x{83E9}' .\n          '\\x{83EA}\\x{83EB}\\x{83EC}\\x{83EE}\\x{83EF}\\x{83F0}\\x{83F1}\\x{83F2}\\x{83F3}' .\n          '\\x{83F4}\\x{83F5}\\x{83F6}\\x{83F7}\\x{83F8}\\x{83F9}\\x{83FA}\\x{83FB}\\x{83FC}' .\n          '\\x{83FD}\\x{83FE}\\x{83FF}\\x{8400}\\x{8401}\\x{8402}\\x{8403}\\x{8404}\\x{8405}' .\n          '\\x{8406}\\x{8407}\\x{8408}\\x{8409}\\x{840A}\\x{840B}\\x{840C}\\x{840D}\\x{840E}' .\n          '\\x{840F}\\x{8410}\\x{8411}\\x{8412}\\x{8413}\\x{8415}\\x{8418}\\x{8419}\\x{841A}' .\n          '\\x{841B}\\x{841C}\\x{841D}\\x{841E}\\x{8421}\\x{8422}\\x{8423}\\x{8424}\\x{8425}' .\n          '\\x{8426}\\x{8427}\\x{8428}\\x{8429}\\x{842A}\\x{842B}\\x{842C}\\x{842D}\\x{842E}' .\n          '\\x{842F}\\x{8430}\\x{8431}\\x{8432}\\x{8433}\\x{8434}\\x{8435}\\x{8436}\\x{8437}' .\n          '\\x{8438}\\x{8439}\\x{843A}\\x{843B}\\x{843C}\\x{843D}\\x{843E}\\x{843F}\\x{8440}' .\n          '\\x{8441}\\x{8442}\\x{8443}\\x{8444}\\x{8445}\\x{8446}\\x{8447}\\x{8448}\\x{8449}' .\n          '\\x{844A}\\x{844B}\\x{844C}\\x{844D}\\x{844E}\\x{844F}\\x{8450}\\x{8451}\\x{8452}' .\n          '\\x{8453}\\x{8454}\\x{8455}\\x{8456}\\x{8457}\\x{8459}\\x{845A}\\x{845B}\\x{845C}' .\n          '\\x{845D}\\x{845E}\\x{845F}\\x{8460}\\x{8461}\\x{8462}\\x{8463}\\x{8464}\\x{8465}' .\n          '\\x{8466}\\x{8467}\\x{8468}\\x{8469}\\x{846A}\\x{846B}\\x{846C}\\x{846D}\\x{846E}' .\n          '\\x{846F}\\x{8470}\\x{8471}\\x{8472}\\x{8473}\\x{8474}\\x{8475}\\x{8476}\\x{8477}' .\n          '\\x{8478}\\x{8479}\\x{847A}\\x{847B}\\x{847C}\\x{847D}\\x{847E}\\x{847F}\\x{8480}' .\n          '\\x{8481}\\x{8482}\\x{8484}\\x{8485}\\x{8486}\\x{8487}\\x{8488}\\x{8489}\\x{848A}' .\n          '\\x{848B}\\x{848C}\\x{848D}\\x{848E}\\x{848F}\\x{8490}\\x{8491}\\x{8492}\\x{8493}' .\n          '\\x{8494}\\x{8496}\\x{8497}\\x{8498}\\x{8499}\\x{849A}\\x{849B}\\x{849C}\\x{849D}' .\n          '\\x{849E}\\x{849F}\\x{84A0}\\x{84A1}\\x{84A2}\\x{84A3}\\x{84A4}\\x{84A5}\\x{84A6}' .\n          '\\x{84A7}\\x{84A8}\\x{84A9}\\x{84AA}\\x{84AB}\\x{84AC}\\x{84AE}\\x{84AF}\\x{84B0}' .\n          '\\x{84B1}\\x{84B2}\\x{84B3}\\x{84B4}\\x{84B5}\\x{84B6}\\x{84B8}\\x{84B9}\\x{84BA}' .\n          '\\x{84BB}\\x{84BC}\\x{84BD}\\x{84BE}\\x{84BF}\\x{84C0}\\x{84C1}\\x{84C2}\\x{84C4}' .\n          '\\x{84C5}\\x{84C6}\\x{84C7}\\x{84C8}\\x{84C9}\\x{84CA}\\x{84CB}\\x{84CC}\\x{84CD}' .\n          '\\x{84CE}\\x{84CF}\\x{84D0}\\x{84D1}\\x{84D2}\\x{84D3}\\x{84D4}\\x{84D5}\\x{84D6}' .\n          '\\x{84D7}\\x{84D8}\\x{84D9}\\x{84DB}\\x{84DC}\\x{84DD}\\x{84DE}\\x{84DF}\\x{84E0}' .\n          '\\x{84E1}\\x{84E2}\\x{84E3}\\x{84E4}\\x{84E5}\\x{84E6}\\x{84E7}\\x{84E8}\\x{84E9}' .\n          '\\x{84EA}\\x{84EB}\\x{84EC}\\x{84EE}\\x{84EF}\\x{84F0}\\x{84F1}\\x{84F2}\\x{84F3}' .\n          '\\x{84F4}\\x{84F5}\\x{84F6}\\x{84F7}\\x{84F8}\\x{84F9}\\x{84FA}\\x{84FB}\\x{84FC}' .\n          '\\x{84FD}\\x{84FE}\\x{84FF}\\x{8500}\\x{8501}\\x{8502}\\x{8503}\\x{8504}\\x{8506}' .\n          '\\x{8507}\\x{8508}\\x{8509}\\x{850A}\\x{850B}\\x{850C}\\x{850D}\\x{850E}\\x{850F}' .\n          '\\x{8511}\\x{8512}\\x{8513}\\x{8514}\\x{8515}\\x{8516}\\x{8517}\\x{8518}\\x{8519}' .\n          '\\x{851A}\\x{851B}\\x{851C}\\x{851D}\\x{851E}\\x{851F}\\x{8520}\\x{8521}\\x{8522}' .\n          '\\x{8523}\\x{8524}\\x{8525}\\x{8526}\\x{8527}\\x{8528}\\x{8529}\\x{852A}\\x{852B}' .\n          '\\x{852C}\\x{852D}\\x{852E}\\x{852F}\\x{8530}\\x{8531}\\x{8534}\\x{8535}\\x{8536}' .\n          '\\x{8537}\\x{8538}\\x{8539}\\x{853A}\\x{853B}\\x{853C}\\x{853D}\\x{853E}\\x{853F}' .\n          '\\x{8540}\\x{8541}\\x{8542}\\x{8543}\\x{8544}\\x{8545}\\x{8546}\\x{8547}\\x{8548}' .\n          '\\x{8549}\\x{854A}\\x{854B}\\x{854D}\\x{854E}\\x{854F}\\x{8551}\\x{8552}\\x{8553}' .\n          '\\x{8554}\\x{8555}\\x{8556}\\x{8557}\\x{8558}\\x{8559}\\x{855A}\\x{855B}\\x{855C}' .\n          '\\x{855D}\\x{855E}\\x{855F}\\x{8560}\\x{8561}\\x{8562}\\x{8563}\\x{8564}\\x{8565}' .\n          '\\x{8566}\\x{8567}\\x{8568}\\x{8569}\\x{856A}\\x{856B}\\x{856C}\\x{856D}\\x{856E}' .\n          '\\x{856F}\\x{8570}\\x{8571}\\x{8572}\\x{8573}\\x{8574}\\x{8575}\\x{8576}\\x{8577}' .\n          '\\x{8578}\\x{8579}\\x{857A}\\x{857B}\\x{857C}\\x{857D}\\x{857E}\\x{8580}\\x{8581}' .\n          '\\x{8582}\\x{8583}\\x{8584}\\x{8585}\\x{8586}\\x{8587}\\x{8588}\\x{8589}\\x{858A}' .\n          '\\x{858B}\\x{858C}\\x{858D}\\x{858E}\\x{858F}\\x{8590}\\x{8591}\\x{8592}\\x{8594}' .\n          '\\x{8595}\\x{8596}\\x{8598}\\x{8599}\\x{859A}\\x{859B}\\x{859C}\\x{859D}\\x{859E}' .\n          '\\x{859F}\\x{85A0}\\x{85A1}\\x{85A2}\\x{85A3}\\x{85A4}\\x{85A5}\\x{85A6}\\x{85A7}' .\n          '\\x{85A8}\\x{85A9}\\x{85AA}\\x{85AB}\\x{85AC}\\x{85AD}\\x{85AE}\\x{85AF}\\x{85B0}' .\n          '\\x{85B1}\\x{85B3}\\x{85B4}\\x{85B5}\\x{85B6}\\x{85B7}\\x{85B8}\\x{85B9}\\x{85BA}' .\n          '\\x{85BC}\\x{85BD}\\x{85BE}\\x{85BF}\\x{85C0}\\x{85C1}\\x{85C2}\\x{85C3}\\x{85C4}' .\n          '\\x{85C5}\\x{85C6}\\x{85C7}\\x{85C8}\\x{85C9}\\x{85CA}\\x{85CB}\\x{85CD}\\x{85CE}' .\n          '\\x{85CF}\\x{85D0}\\x{85D1}\\x{85D2}\\x{85D3}\\x{85D4}\\x{85D5}\\x{85D6}\\x{85D7}' .\n          '\\x{85D8}\\x{85D9}\\x{85DA}\\x{85DB}\\x{85DC}\\x{85DD}\\x{85DE}\\x{85DF}\\x{85E0}' .\n          '\\x{85E1}\\x{85E2}\\x{85E3}\\x{85E4}\\x{85E5}\\x{85E6}\\x{85E7}\\x{85E8}\\x{85E9}' .\n          '\\x{85EA}\\x{85EB}\\x{85EC}\\x{85ED}\\x{85EF}\\x{85F0}\\x{85F1}\\x{85F2}\\x{85F4}' .\n          '\\x{85F5}\\x{85F6}\\x{85F7}\\x{85F8}\\x{85F9}\\x{85FA}\\x{85FB}\\x{85FD}\\x{85FE}' .\n          '\\x{85FF}\\x{8600}\\x{8601}\\x{8602}\\x{8604}\\x{8605}\\x{8606}\\x{8607}\\x{8608}' .\n          '\\x{8609}\\x{860A}\\x{860B}\\x{860C}\\x{860F}\\x{8611}\\x{8612}\\x{8613}\\x{8614}' .\n          '\\x{8616}\\x{8617}\\x{8618}\\x{8619}\\x{861A}\\x{861B}\\x{861C}\\x{861E}\\x{861F}' .\n          '\\x{8620}\\x{8621}\\x{8622}\\x{8623}\\x{8624}\\x{8625}\\x{8626}\\x{8627}\\x{8628}' .\n          '\\x{8629}\\x{862A}\\x{862B}\\x{862C}\\x{862D}\\x{862E}\\x{862F}\\x{8630}\\x{8631}' .\n          '\\x{8632}\\x{8633}\\x{8634}\\x{8635}\\x{8636}\\x{8638}\\x{8639}\\x{863A}\\x{863B}' .\n          '\\x{863C}\\x{863D}\\x{863E}\\x{863F}\\x{8640}\\x{8641}\\x{8642}\\x{8643}\\x{8644}' .\n          '\\x{8645}\\x{8646}\\x{8647}\\x{8648}\\x{8649}\\x{864A}\\x{864B}\\x{864C}\\x{864D}' .\n          '\\x{864E}\\x{864F}\\x{8650}\\x{8651}\\x{8652}\\x{8653}\\x{8654}\\x{8655}\\x{8656}' .\n          '\\x{8658}\\x{8659}\\x{865A}\\x{865B}\\x{865C}\\x{865D}\\x{865E}\\x{865F}\\x{8660}' .\n          '\\x{8661}\\x{8662}\\x{8663}\\x{8664}\\x{8665}\\x{8666}\\x{8667}\\x{8668}\\x{8669}' .\n          '\\x{866A}\\x{866B}\\x{866C}\\x{866D}\\x{866E}\\x{866F}\\x{8670}\\x{8671}\\x{8672}' .\n          '\\x{8673}\\x{8674}\\x{8676}\\x{8677}\\x{8678}\\x{8679}\\x{867A}\\x{867B}\\x{867C}' .\n          '\\x{867D}\\x{867E}\\x{867F}\\x{8680}\\x{8681}\\x{8682}\\x{8683}\\x{8684}\\x{8685}' .\n          '\\x{8686}\\x{8687}\\x{8688}\\x{868A}\\x{868B}\\x{868C}\\x{868D}\\x{868E}\\x{868F}' .\n          '\\x{8690}\\x{8691}\\x{8693}\\x{8694}\\x{8695}\\x{8696}\\x{8697}\\x{8698}\\x{8699}' .\n          '\\x{869A}\\x{869B}\\x{869C}\\x{869D}\\x{869E}\\x{869F}\\x{86A1}\\x{86A2}\\x{86A3}' .\n          '\\x{86A4}\\x{86A5}\\x{86A7}\\x{86A8}\\x{86A9}\\x{86AA}\\x{86AB}\\x{86AC}\\x{86AD}' .\n          '\\x{86AE}\\x{86AF}\\x{86B0}\\x{86B1}\\x{86B2}\\x{86B3}\\x{86B4}\\x{86B5}\\x{86B6}' .\n          '\\x{86B7}\\x{86B8}\\x{86B9}\\x{86BA}\\x{86BB}\\x{86BC}\\x{86BD}\\x{86BE}\\x{86BF}' .\n          '\\x{86C0}\\x{86C1}\\x{86C2}\\x{86C3}\\x{86C4}\\x{86C5}\\x{86C6}\\x{86C7}\\x{86C8}' .\n          '\\x{86C9}\\x{86CA}\\x{86CB}\\x{86CC}\\x{86CE}\\x{86CF}\\x{86D0}\\x{86D1}\\x{86D2}' .\n          '\\x{86D3}\\x{86D4}\\x{86D6}\\x{86D7}\\x{86D8}\\x{86D9}\\x{86DA}\\x{86DB}\\x{86DC}' .\n          '\\x{86DD}\\x{86DE}\\x{86DF}\\x{86E1}\\x{86E2}\\x{86E3}\\x{86E4}\\x{86E5}\\x{86E6}' .\n          '\\x{86E8}\\x{86E9}\\x{86EA}\\x{86EB}\\x{86EC}\\x{86ED}\\x{86EE}\\x{86EF}\\x{86F0}' .\n          '\\x{86F1}\\x{86F2}\\x{86F3}\\x{86F4}\\x{86F5}\\x{86F6}\\x{86F7}\\x{86F8}\\x{86F9}' .\n          '\\x{86FA}\\x{86FB}\\x{86FC}\\x{86FE}\\x{86FF}\\x{8700}\\x{8701}\\x{8702}\\x{8703}' .\n          '\\x{8704}\\x{8705}\\x{8706}\\x{8707}\\x{8708}\\x{8709}\\x{870A}\\x{870B}\\x{870C}' .\n          '\\x{870D}\\x{870E}\\x{870F}\\x{8710}\\x{8711}\\x{8712}\\x{8713}\\x{8714}\\x{8715}' .\n          '\\x{8716}\\x{8717}\\x{8718}\\x{8719}\\x{871A}\\x{871B}\\x{871C}\\x{871E}\\x{871F}' .\n          '\\x{8720}\\x{8721}\\x{8722}\\x{8723}\\x{8724}\\x{8725}\\x{8726}\\x{8727}\\x{8728}' .\n          '\\x{8729}\\x{872A}\\x{872B}\\x{872C}\\x{872D}\\x{872E}\\x{8730}\\x{8731}\\x{8732}' .\n          '\\x{8733}\\x{8734}\\x{8735}\\x{8736}\\x{8737}\\x{8738}\\x{8739}\\x{873A}\\x{873B}' .\n          '\\x{873C}\\x{873E}\\x{873F}\\x{8740}\\x{8741}\\x{8742}\\x{8743}\\x{8744}\\x{8746}' .\n          '\\x{8747}\\x{8748}\\x{8749}\\x{874A}\\x{874C}\\x{874D}\\x{874E}\\x{874F}\\x{8750}' .\n          '\\x{8751}\\x{8752}\\x{8753}\\x{8754}\\x{8755}\\x{8756}\\x{8757}\\x{8758}\\x{8759}' .\n          '\\x{875A}\\x{875B}\\x{875C}\\x{875D}\\x{875E}\\x{875F}\\x{8760}\\x{8761}\\x{8762}' .\n          '\\x{8763}\\x{8764}\\x{8765}\\x{8766}\\x{8767}\\x{8768}\\x{8769}\\x{876A}\\x{876B}' .\n          '\\x{876C}\\x{876D}\\x{876E}\\x{876F}\\x{8770}\\x{8772}\\x{8773}\\x{8774}\\x{8775}' .\n          '\\x{8776}\\x{8777}\\x{8778}\\x{8779}\\x{877A}\\x{877B}\\x{877C}\\x{877D}\\x{877E}' .\n          '\\x{8780}\\x{8781}\\x{8782}\\x{8783}\\x{8784}\\x{8785}\\x{8786}\\x{8787}\\x{8788}' .\n          '\\x{8789}\\x{878A}\\x{878B}\\x{878C}\\x{878D}\\x{878F}\\x{8790}\\x{8791}\\x{8792}' .\n          '\\x{8793}\\x{8794}\\x{8795}\\x{8796}\\x{8797}\\x{8798}\\x{879A}\\x{879B}\\x{879C}' .\n          '\\x{879D}\\x{879E}\\x{879F}\\x{87A0}\\x{87A1}\\x{87A2}\\x{87A3}\\x{87A4}\\x{87A5}' .\n          '\\x{87A6}\\x{87A7}\\x{87A8}\\x{87A9}\\x{87AA}\\x{87AB}\\x{87AC}\\x{87AD}\\x{87AE}' .\n          '\\x{87AF}\\x{87B0}\\x{87B1}\\x{87B2}\\x{87B3}\\x{87B4}\\x{87B5}\\x{87B6}\\x{87B7}' .\n          '\\x{87B8}\\x{87B9}\\x{87BA}\\x{87BB}\\x{87BC}\\x{87BD}\\x{87BE}\\x{87BF}\\x{87C0}' .\n          '\\x{87C1}\\x{87C2}\\x{87C3}\\x{87C4}\\x{87C5}\\x{87C6}\\x{87C7}\\x{87C8}\\x{87C9}' .\n          '\\x{87CA}\\x{87CB}\\x{87CC}\\x{87CD}\\x{87CE}\\x{87CF}\\x{87D0}\\x{87D1}\\x{87D2}' .\n          '\\x{87D3}\\x{87D4}\\x{87D5}\\x{87D6}\\x{87D7}\\x{87D8}\\x{87D9}\\x{87DB}\\x{87DC}' .\n          '\\x{87DD}\\x{87DE}\\x{87DF}\\x{87E0}\\x{87E1}\\x{87E2}\\x{87E3}\\x{87E4}\\x{87E5}' .\n          '\\x{87E6}\\x{87E7}\\x{87E8}\\x{87E9}\\x{87EA}\\x{87EB}\\x{87EC}\\x{87ED}\\x{87EE}' .\n          '\\x{87EF}\\x{87F1}\\x{87F2}\\x{87F3}\\x{87F4}\\x{87F5}\\x{87F6}\\x{87F7}\\x{87F8}' .\n          '\\x{87F9}\\x{87FA}\\x{87FB}\\x{87FC}\\x{87FD}\\x{87FE}\\x{87FF}\\x{8800}\\x{8801}' .\n          '\\x{8802}\\x{8803}\\x{8804}\\x{8805}\\x{8806}\\x{8808}\\x{8809}\\x{880A}\\x{880B}' .\n          '\\x{880C}\\x{880D}\\x{880E}\\x{880F}\\x{8810}\\x{8811}\\x{8813}\\x{8814}\\x{8815}' .\n          '\\x{8816}\\x{8817}\\x{8818}\\x{8819}\\x{881A}\\x{881B}\\x{881C}\\x{881D}\\x{881E}' .\n          '\\x{881F}\\x{8820}\\x{8821}\\x{8822}\\x{8823}\\x{8824}\\x{8825}\\x{8826}\\x{8827}' .\n          '\\x{8828}\\x{8829}\\x{882A}\\x{882B}\\x{882C}\\x{882E}\\x{882F}\\x{8830}\\x{8831}' .\n          '\\x{8832}\\x{8833}\\x{8834}\\x{8835}\\x{8836}\\x{8837}\\x{8838}\\x{8839}\\x{883B}' .\n          '\\x{883C}\\x{883D}\\x{883E}\\x{883F}\\x{8840}\\x{8841}\\x{8842}\\x{8843}\\x{8844}' .\n          '\\x{8845}\\x{8846}\\x{8848}\\x{8849}\\x{884A}\\x{884B}\\x{884C}\\x{884D}\\x{884E}' .\n          '\\x{884F}\\x{8850}\\x{8851}\\x{8852}\\x{8853}\\x{8854}\\x{8855}\\x{8856}\\x{8857}' .\n          '\\x{8859}\\x{885A}\\x{885B}\\x{885D}\\x{885E}\\x{8860}\\x{8861}\\x{8862}\\x{8863}' .\n          '\\x{8864}\\x{8865}\\x{8866}\\x{8867}\\x{8868}\\x{8869}\\x{886A}\\x{886B}\\x{886C}' .\n          '\\x{886D}\\x{886E}\\x{886F}\\x{8870}\\x{8871}\\x{8872}\\x{8873}\\x{8874}\\x{8875}' .\n          '\\x{8876}\\x{8877}\\x{8878}\\x{8879}\\x{887B}\\x{887C}\\x{887D}\\x{887E}\\x{887F}' .\n          '\\x{8880}\\x{8881}\\x{8882}\\x{8883}\\x{8884}\\x{8885}\\x{8886}\\x{8887}\\x{8888}' .\n          '\\x{8889}\\x{888A}\\x{888B}\\x{888C}\\x{888D}\\x{888E}\\x{888F}\\x{8890}\\x{8891}' .\n          '\\x{8892}\\x{8893}\\x{8894}\\x{8895}\\x{8896}\\x{8897}\\x{8898}\\x{8899}\\x{889A}' .\n          '\\x{889B}\\x{889C}\\x{889D}\\x{889E}\\x{889F}\\x{88A0}\\x{88A1}\\x{88A2}\\x{88A3}' .\n          '\\x{88A4}\\x{88A5}\\x{88A6}\\x{88A7}\\x{88A8}\\x{88A9}\\x{88AA}\\x{88AB}\\x{88AC}' .\n          '\\x{88AD}\\x{88AE}\\x{88AF}\\x{88B0}\\x{88B1}\\x{88B2}\\x{88B3}\\x{88B4}\\x{88B6}' .\n          '\\x{88B7}\\x{88B8}\\x{88B9}\\x{88BA}\\x{88BB}\\x{88BC}\\x{88BD}\\x{88BE}\\x{88BF}' .\n          '\\x{88C0}\\x{88C1}\\x{88C2}\\x{88C3}\\x{88C4}\\x{88C5}\\x{88C6}\\x{88C7}\\x{88C8}' .\n          '\\x{88C9}\\x{88CA}\\x{88CB}\\x{88CC}\\x{88CD}\\x{88CE}\\x{88CF}\\x{88D0}\\x{88D1}' .\n          '\\x{88D2}\\x{88D3}\\x{88D4}\\x{88D5}\\x{88D6}\\x{88D7}\\x{88D8}\\x{88D9}\\x{88DA}' .\n          '\\x{88DB}\\x{88DC}\\x{88DD}\\x{88DE}\\x{88DF}\\x{88E0}\\x{88E1}\\x{88E2}\\x{88E3}' .\n          '\\x{88E4}\\x{88E5}\\x{88E7}\\x{88E8}\\x{88EA}\\x{88EB}\\x{88EC}\\x{88EE}\\x{88EF}' .\n          '\\x{88F0}\\x{88F1}\\x{88F2}\\x{88F3}\\x{88F4}\\x{88F5}\\x{88F6}\\x{88F7}\\x{88F8}' .\n          '\\x{88F9}\\x{88FA}\\x{88FB}\\x{88FC}\\x{88FD}\\x{88FE}\\x{88FF}\\x{8900}\\x{8901}' .\n          '\\x{8902}\\x{8904}\\x{8905}\\x{8906}\\x{8907}\\x{8908}\\x{8909}\\x{890A}\\x{890B}' .\n          '\\x{890C}\\x{890D}\\x{890E}\\x{8910}\\x{8911}\\x{8912}\\x{8913}\\x{8914}\\x{8915}' .\n          '\\x{8916}\\x{8917}\\x{8918}\\x{8919}\\x{891A}\\x{891B}\\x{891C}\\x{891D}\\x{891E}' .\n          '\\x{891F}\\x{8920}\\x{8921}\\x{8922}\\x{8923}\\x{8925}\\x{8926}\\x{8927}\\x{8928}' .\n          '\\x{8929}\\x{892A}\\x{892B}\\x{892C}\\x{892D}\\x{892E}\\x{892F}\\x{8930}\\x{8931}' .\n          '\\x{8932}\\x{8933}\\x{8934}\\x{8935}\\x{8936}\\x{8937}\\x{8938}\\x{8939}\\x{893A}' .\n          '\\x{893B}\\x{893C}\\x{893D}\\x{893E}\\x{893F}\\x{8940}\\x{8941}\\x{8942}\\x{8943}' .\n          '\\x{8944}\\x{8945}\\x{8946}\\x{8947}\\x{8948}\\x{8949}\\x{894A}\\x{894B}\\x{894C}' .\n          '\\x{894E}\\x{894F}\\x{8950}\\x{8951}\\x{8952}\\x{8953}\\x{8954}\\x{8955}\\x{8956}' .\n          '\\x{8957}\\x{8958}\\x{8959}\\x{895A}\\x{895B}\\x{895C}\\x{895D}\\x{895E}\\x{895F}' .\n          '\\x{8960}\\x{8961}\\x{8962}\\x{8963}\\x{8964}\\x{8966}\\x{8967}\\x{8968}\\x{8969}' .\n          '\\x{896A}\\x{896B}\\x{896C}\\x{896D}\\x{896E}\\x{896F}\\x{8970}\\x{8971}\\x{8972}' .\n          '\\x{8973}\\x{8974}\\x{8976}\\x{8977}\\x{8978}\\x{8979}\\x{897A}\\x{897B}\\x{897C}' .\n          '\\x{897E}\\x{897F}\\x{8980}\\x{8981}\\x{8982}\\x{8983}\\x{8984}\\x{8985}\\x{8986}' .\n          '\\x{8987}\\x{8988}\\x{8989}\\x{898A}\\x{898B}\\x{898C}\\x{898E}\\x{898F}\\x{8991}' .\n          '\\x{8992}\\x{8993}\\x{8995}\\x{8996}\\x{8997}\\x{8998}\\x{899A}\\x{899B}\\x{899C}' .\n          '\\x{899D}\\x{899E}\\x{899F}\\x{89A0}\\x{89A1}\\x{89A2}\\x{89A3}\\x{89A4}\\x{89A5}' .\n          '\\x{89A6}\\x{89A7}\\x{89A8}\\x{89AA}\\x{89AB}\\x{89AC}\\x{89AD}\\x{89AE}\\x{89AF}' .\n          '\\x{89B1}\\x{89B2}\\x{89B3}\\x{89B5}\\x{89B6}\\x{89B7}\\x{89B8}\\x{89B9}\\x{89BA}' .\n          '\\x{89BD}\\x{89BE}\\x{89BF}\\x{89C0}\\x{89C1}\\x{89C2}\\x{89C3}\\x{89C4}\\x{89C5}' .\n          '\\x{89C6}\\x{89C7}\\x{89C8}\\x{89C9}\\x{89CA}\\x{89CB}\\x{89CC}\\x{89CD}\\x{89CE}' .\n          '\\x{89CF}\\x{89D0}\\x{89D1}\\x{89D2}\\x{89D3}\\x{89D4}\\x{89D5}\\x{89D6}\\x{89D7}' .\n          '\\x{89D8}\\x{89D9}\\x{89DA}\\x{89DB}\\x{89DC}\\x{89DD}\\x{89DE}\\x{89DF}\\x{89E0}' .\n          '\\x{89E1}\\x{89E2}\\x{89E3}\\x{89E4}\\x{89E5}\\x{89E6}\\x{89E7}\\x{89E8}\\x{89E9}' .\n          '\\x{89EA}\\x{89EB}\\x{89EC}\\x{89ED}\\x{89EF}\\x{89F0}\\x{89F1}\\x{89F2}\\x{89F3}' .\n          '\\x{89F4}\\x{89F6}\\x{89F7}\\x{89F8}\\x{89FA}\\x{89FB}\\x{89FC}\\x{89FE}\\x{89FF}' .\n          '\\x{8A00}\\x{8A01}\\x{8A02}\\x{8A03}\\x{8A04}\\x{8A07}\\x{8A08}\\x{8A09}\\x{8A0A}' .\n          '\\x{8A0B}\\x{8A0C}\\x{8A0D}\\x{8A0E}\\x{8A0F}\\x{8A10}\\x{8A11}\\x{8A12}\\x{8A13}' .\n          '\\x{8A15}\\x{8A16}\\x{8A17}\\x{8A18}\\x{8A1A}\\x{8A1B}\\x{8A1C}\\x{8A1D}\\x{8A1E}' .\n          '\\x{8A1F}\\x{8A22}\\x{8A23}\\x{8A24}\\x{8A25}\\x{8A26}\\x{8A27}\\x{8A28}\\x{8A29}' .\n          '\\x{8A2A}\\x{8A2C}\\x{8A2D}\\x{8A2E}\\x{8A2F}\\x{8A30}\\x{8A31}\\x{8A32}\\x{8A34}' .\n          '\\x{8A35}\\x{8A36}\\x{8A37}\\x{8A38}\\x{8A39}\\x{8A3A}\\x{8A3B}\\x{8A3C}\\x{8A3E}' .\n          '\\x{8A3F}\\x{8A40}\\x{8A41}\\x{8A42}\\x{8A43}\\x{8A44}\\x{8A45}\\x{8A46}\\x{8A47}' .\n          '\\x{8A48}\\x{8A49}\\x{8A4A}\\x{8A4C}\\x{8A4D}\\x{8A4E}\\x{8A4F}\\x{8A50}\\x{8A51}' .\n          '\\x{8A52}\\x{8A53}\\x{8A54}\\x{8A55}\\x{8A56}\\x{8A57}\\x{8A58}\\x{8A59}\\x{8A5A}' .\n          '\\x{8A5B}\\x{8A5C}\\x{8A5D}\\x{8A5E}\\x{8A5F}\\x{8A60}\\x{8A61}\\x{8A62}\\x{8A63}' .\n          '\\x{8A65}\\x{8A66}\\x{8A67}\\x{8A68}\\x{8A69}\\x{8A6A}\\x{8A6B}\\x{8A6C}\\x{8A6D}' .\n          '\\x{8A6E}\\x{8A6F}\\x{8A70}\\x{8A71}\\x{8A72}\\x{8A73}\\x{8A74}\\x{8A75}\\x{8A76}' .\n          '\\x{8A77}\\x{8A79}\\x{8A7A}\\x{8A7B}\\x{8A7C}\\x{8A7E}\\x{8A7F}\\x{8A80}\\x{8A81}' .\n          '\\x{8A82}\\x{8A83}\\x{8A84}\\x{8A85}\\x{8A86}\\x{8A87}\\x{8A89}\\x{8A8A}\\x{8A8B}' .\n          '\\x{8A8C}\\x{8A8D}\\x{8A8E}\\x{8A8F}\\x{8A90}\\x{8A91}\\x{8A92}\\x{8A93}\\x{8A94}' .\n          '\\x{8A95}\\x{8A96}\\x{8A97}\\x{8A98}\\x{8A99}\\x{8A9A}\\x{8A9B}\\x{8A9C}\\x{8A9D}' .\n          '\\x{8A9E}\\x{8AA0}\\x{8AA1}\\x{8AA2}\\x{8AA3}\\x{8AA4}\\x{8AA5}\\x{8AA6}\\x{8AA7}' .\n          '\\x{8AA8}\\x{8AA9}\\x{8AAA}\\x{8AAB}\\x{8AAC}\\x{8AAE}\\x{8AB0}\\x{8AB1}\\x{8AB2}' .\n          '\\x{8AB3}\\x{8AB4}\\x{8AB5}\\x{8AB6}\\x{8AB8}\\x{8AB9}\\x{8ABA}\\x{8ABB}\\x{8ABC}' .\n          '\\x{8ABD}\\x{8ABE}\\x{8ABF}\\x{8AC0}\\x{8AC1}\\x{8AC2}\\x{8AC3}\\x{8AC4}\\x{8AC5}' .\n          '\\x{8AC6}\\x{8AC7}\\x{8AC8}\\x{8AC9}\\x{8ACA}\\x{8ACB}\\x{8ACC}\\x{8ACD}\\x{8ACE}' .\n          '\\x{8ACF}\\x{8AD1}\\x{8AD2}\\x{8AD3}\\x{8AD4}\\x{8AD5}\\x{8AD6}\\x{8AD7}\\x{8AD8}' .\n          '\\x{8AD9}\\x{8ADA}\\x{8ADB}\\x{8ADC}\\x{8ADD}\\x{8ADE}\\x{8ADF}\\x{8AE0}\\x{8AE1}' .\n          '\\x{8AE2}\\x{8AE3}\\x{8AE4}\\x{8AE5}\\x{8AE6}\\x{8AE7}\\x{8AE8}\\x{8AE9}\\x{8AEA}' .\n          '\\x{8AEB}\\x{8AED}\\x{8AEE}\\x{8AEF}\\x{8AF0}\\x{8AF1}\\x{8AF2}\\x{8AF3}\\x{8AF4}' .\n          '\\x{8AF5}\\x{8AF6}\\x{8AF7}\\x{8AF8}\\x{8AF9}\\x{8AFA}\\x{8AFB}\\x{8AFC}\\x{8AFD}' .\n          '\\x{8AFE}\\x{8AFF}\\x{8B00}\\x{8B01}\\x{8B02}\\x{8B03}\\x{8B04}\\x{8B05}\\x{8B06}' .\n          '\\x{8B07}\\x{8B08}\\x{8B09}\\x{8B0A}\\x{8B0B}\\x{8B0D}\\x{8B0E}\\x{8B0F}\\x{8B10}' .\n          '\\x{8B11}\\x{8B12}\\x{8B13}\\x{8B14}\\x{8B15}\\x{8B16}\\x{8B17}\\x{8B18}\\x{8B19}' .\n          '\\x{8B1A}\\x{8B1B}\\x{8B1C}\\x{8B1D}\\x{8B1E}\\x{8B1F}\\x{8B20}\\x{8B21}\\x{8B22}' .\n          '\\x{8B23}\\x{8B24}\\x{8B25}\\x{8B26}\\x{8B27}\\x{8B28}\\x{8B2A}\\x{8B2B}\\x{8B2C}' .\n          '\\x{8B2D}\\x{8B2E}\\x{8B2F}\\x{8B30}\\x{8B31}\\x{8B33}\\x{8B34}\\x{8B35}\\x{8B36}' .\n          '\\x{8B37}\\x{8B39}\\x{8B3A}\\x{8B3B}\\x{8B3C}\\x{8B3D}\\x{8B3E}\\x{8B40}\\x{8B41}' .\n          '\\x{8B42}\\x{8B43}\\x{8B44}\\x{8B45}\\x{8B46}\\x{8B47}\\x{8B48}\\x{8B49}\\x{8B4A}' .\n          '\\x{8B4B}\\x{8B4C}\\x{8B4D}\\x{8B4E}\\x{8B4F}\\x{8B50}\\x{8B51}\\x{8B52}\\x{8B53}' .\n          '\\x{8B54}\\x{8B55}\\x{8B56}\\x{8B57}\\x{8B58}\\x{8B59}\\x{8B5A}\\x{8B5B}\\x{8B5C}' .\n          '\\x{8B5D}\\x{8B5E}\\x{8B5F}\\x{8B60}\\x{8B63}\\x{8B64}\\x{8B65}\\x{8B66}\\x{8B67}' .\n          '\\x{8B68}\\x{8B6A}\\x{8B6B}\\x{8B6C}\\x{8B6D}\\x{8B6E}\\x{8B6F}\\x{8B70}\\x{8B71}' .\n          '\\x{8B73}\\x{8B74}\\x{8B76}\\x{8B77}\\x{8B78}\\x{8B79}\\x{8B7A}\\x{8B7B}\\x{8B7D}' .\n          '\\x{8B7E}\\x{8B7F}\\x{8B80}\\x{8B82}\\x{8B83}\\x{8B84}\\x{8B85}\\x{8B86}\\x{8B88}' .\n          '\\x{8B89}\\x{8B8A}\\x{8B8B}\\x{8B8C}\\x{8B8E}\\x{8B90}\\x{8B91}\\x{8B92}\\x{8B93}' .\n          '\\x{8B94}\\x{8B95}\\x{8B96}\\x{8B97}\\x{8B98}\\x{8B99}\\x{8B9A}\\x{8B9C}\\x{8B9D}' .\n          '\\x{8B9E}\\x{8B9F}\\x{8BA0}\\x{8BA1}\\x{8BA2}\\x{8BA3}\\x{8BA4}\\x{8BA5}\\x{8BA6}' .\n          '\\x{8BA7}\\x{8BA8}\\x{8BA9}\\x{8BAA}\\x{8BAB}\\x{8BAC}\\x{8BAD}\\x{8BAE}\\x{8BAF}' .\n          '\\x{8BB0}\\x{8BB1}\\x{8BB2}\\x{8BB3}\\x{8BB4}\\x{8BB5}\\x{8BB6}\\x{8BB7}\\x{8BB8}' .\n          '\\x{8BB9}\\x{8BBA}\\x{8BBB}\\x{8BBC}\\x{8BBD}\\x{8BBE}\\x{8BBF}\\x{8BC0}\\x{8BC1}' .\n          '\\x{8BC2}\\x{8BC3}\\x{8BC4}\\x{8BC5}\\x{8BC6}\\x{8BC7}\\x{8BC8}\\x{8BC9}\\x{8BCA}' .\n          '\\x{8BCB}\\x{8BCC}\\x{8BCD}\\x{8BCE}\\x{8BCF}\\x{8BD0}\\x{8BD1}\\x{8BD2}\\x{8BD3}' .\n          '\\x{8BD4}\\x{8BD5}\\x{8BD6}\\x{8BD7}\\x{8BD8}\\x{8BD9}\\x{8BDA}\\x{8BDB}\\x{8BDC}' .\n          '\\x{8BDD}\\x{8BDE}\\x{8BDF}\\x{8BE0}\\x{8BE1}\\x{8BE2}\\x{8BE3}\\x{8BE4}\\x{8BE5}' .\n          '\\x{8BE6}\\x{8BE7}\\x{8BE8}\\x{8BE9}\\x{8BEA}\\x{8BEB}\\x{8BEC}\\x{8BED}\\x{8BEE}' .\n          '\\x{8BEF}\\x{8BF0}\\x{8BF1}\\x{8BF2}\\x{8BF3}\\x{8BF4}\\x{8BF5}\\x{8BF6}\\x{8BF7}' .\n          '\\x{8BF8}\\x{8BF9}\\x{8BFA}\\x{8BFB}\\x{8BFC}\\x{8BFD}\\x{8BFE}\\x{8BFF}\\x{8C00}' .\n          '\\x{8C01}\\x{8C02}\\x{8C03}\\x{8C04}\\x{8C05}\\x{8C06}\\x{8C07}\\x{8C08}\\x{8C09}' .\n          '\\x{8C0A}\\x{8C0B}\\x{8C0C}\\x{8C0D}\\x{8C0E}\\x{8C0F}\\x{8C10}\\x{8C11}\\x{8C12}' .\n          '\\x{8C13}\\x{8C14}\\x{8C15}\\x{8C16}\\x{8C17}\\x{8C18}\\x{8C19}\\x{8C1A}\\x{8C1B}' .\n          '\\x{8C1C}\\x{8C1D}\\x{8C1E}\\x{8C1F}\\x{8C20}\\x{8C21}\\x{8C22}\\x{8C23}\\x{8C24}' .\n          '\\x{8C25}\\x{8C26}\\x{8C27}\\x{8C28}\\x{8C29}\\x{8C2A}\\x{8C2B}\\x{8C2C}\\x{8C2D}' .\n          '\\x{8C2E}\\x{8C2F}\\x{8C30}\\x{8C31}\\x{8C32}\\x{8C33}\\x{8C34}\\x{8C35}\\x{8C36}' .\n          '\\x{8C37}\\x{8C39}\\x{8C3A}\\x{8C3B}\\x{8C3C}\\x{8C3D}\\x{8C3E}\\x{8C3F}\\x{8C41}' .\n          '\\x{8C42}\\x{8C43}\\x{8C45}\\x{8C46}\\x{8C47}\\x{8C48}\\x{8C49}\\x{8C4A}\\x{8C4B}' .\n          '\\x{8C4C}\\x{8C4D}\\x{8C4E}\\x{8C4F}\\x{8C50}\\x{8C54}\\x{8C55}\\x{8C56}\\x{8C57}' .\n          '\\x{8C59}\\x{8C5A}\\x{8C5B}\\x{8C5C}\\x{8C5D}\\x{8C5E}\\x{8C5F}\\x{8C60}\\x{8C61}' .\n          '\\x{8C62}\\x{8C63}\\x{8C64}\\x{8C65}\\x{8C66}\\x{8C67}\\x{8C68}\\x{8C69}\\x{8C6A}' .\n          '\\x{8C6B}\\x{8C6C}\\x{8C6D}\\x{8C6E}\\x{8C6F}\\x{8C70}\\x{8C71}\\x{8C72}\\x{8C73}' .\n          '\\x{8C75}\\x{8C76}\\x{8C77}\\x{8C78}\\x{8C79}\\x{8C7A}\\x{8C7B}\\x{8C7D}\\x{8C7E}' .\n          '\\x{8C80}\\x{8C81}\\x{8C82}\\x{8C84}\\x{8C85}\\x{8C86}\\x{8C88}\\x{8C89}\\x{8C8A}' .\n          '\\x{8C8C}\\x{8C8D}\\x{8C8F}\\x{8C90}\\x{8C91}\\x{8C92}\\x{8C93}\\x{8C94}\\x{8C95}' .\n          '\\x{8C96}\\x{8C97}\\x{8C98}\\x{8C99}\\x{8C9A}\\x{8C9C}\\x{8C9D}\\x{8C9E}\\x{8C9F}' .\n          '\\x{8CA0}\\x{8CA1}\\x{8CA2}\\x{8CA3}\\x{8CA4}\\x{8CA5}\\x{8CA7}\\x{8CA8}\\x{8CA9}' .\n          '\\x{8CAA}\\x{8CAB}\\x{8CAC}\\x{8CAD}\\x{8CAE}\\x{8CAF}\\x{8CB0}\\x{8CB1}\\x{8CB2}' .\n          '\\x{8CB3}\\x{8CB4}\\x{8CB5}\\x{8CB6}\\x{8CB7}\\x{8CB8}\\x{8CB9}\\x{8CBA}\\x{8CBB}' .\n          '\\x{8CBC}\\x{8CBD}\\x{8CBE}\\x{8CBF}\\x{8CC0}\\x{8CC1}\\x{8CC2}\\x{8CC3}\\x{8CC4}' .\n          '\\x{8CC5}\\x{8CC6}\\x{8CC7}\\x{8CC8}\\x{8CC9}\\x{8CCA}\\x{8CCC}\\x{8CCE}\\x{8CCF}' .\n          '\\x{8CD0}\\x{8CD1}\\x{8CD2}\\x{8CD3}\\x{8CD4}\\x{8CD5}\\x{8CD7}\\x{8CD9}\\x{8CDA}' .\n          '\\x{8CDB}\\x{8CDC}\\x{8CDD}\\x{8CDE}\\x{8CDF}\\x{8CE0}\\x{8CE1}\\x{8CE2}\\x{8CE3}' .\n          '\\x{8CE4}\\x{8CE5}\\x{8CE6}\\x{8CE7}\\x{8CE8}\\x{8CEA}\\x{8CEB}\\x{8CEC}\\x{8CED}' .\n          '\\x{8CEE}\\x{8CEF}\\x{8CF0}\\x{8CF1}\\x{8CF2}\\x{8CF3}\\x{8CF4}\\x{8CF5}\\x{8CF6}' .\n          '\\x{8CF8}\\x{8CF9}\\x{8CFA}\\x{8CFB}\\x{8CFC}\\x{8CFD}\\x{8CFE}\\x{8CFF}\\x{8D00}' .\n          '\\x{8D02}\\x{8D03}\\x{8D04}\\x{8D05}\\x{8D06}\\x{8D07}\\x{8D08}\\x{8D09}\\x{8D0A}' .\n          '\\x{8D0B}\\x{8D0C}\\x{8D0D}\\x{8D0E}\\x{8D0F}\\x{8D10}\\x{8D13}\\x{8D14}\\x{8D15}' .\n          '\\x{8D16}\\x{8D17}\\x{8D18}\\x{8D19}\\x{8D1A}\\x{8D1B}\\x{8D1C}\\x{8D1D}\\x{8D1E}' .\n          '\\x{8D1F}\\x{8D20}\\x{8D21}\\x{8D22}\\x{8D23}\\x{8D24}\\x{8D25}\\x{8D26}\\x{8D27}' .\n          '\\x{8D28}\\x{8D29}\\x{8D2A}\\x{8D2B}\\x{8D2C}\\x{8D2D}\\x{8D2E}\\x{8D2F}\\x{8D30}' .\n          '\\x{8D31}\\x{8D32}\\x{8D33}\\x{8D34}\\x{8D35}\\x{8D36}\\x{8D37}\\x{8D38}\\x{8D39}' .\n          '\\x{8D3A}\\x{8D3B}\\x{8D3C}\\x{8D3D}\\x{8D3E}\\x{8D3F}\\x{8D40}\\x{8D41}\\x{8D42}' .\n          '\\x{8D43}\\x{8D44}\\x{8D45}\\x{8D46}\\x{8D47}\\x{8D48}\\x{8D49}\\x{8D4A}\\x{8D4B}' .\n          '\\x{8D4C}\\x{8D4D}\\x{8D4E}\\x{8D4F}\\x{8D50}\\x{8D51}\\x{8D52}\\x{8D53}\\x{8D54}' .\n          '\\x{8D55}\\x{8D56}\\x{8D57}\\x{8D58}\\x{8D59}\\x{8D5A}\\x{8D5B}\\x{8D5C}\\x{8D5D}' .\n          '\\x{8D5E}\\x{8D5F}\\x{8D60}\\x{8D61}\\x{8D62}\\x{8D63}\\x{8D64}\\x{8D65}\\x{8D66}' .\n          '\\x{8D67}\\x{8D68}\\x{8D69}\\x{8D6A}\\x{8D6B}\\x{8D6C}\\x{8D6D}\\x{8D6E}\\x{8D6F}' .\n          '\\x{8D70}\\x{8D71}\\x{8D72}\\x{8D73}\\x{8D74}\\x{8D75}\\x{8D76}\\x{8D77}\\x{8D78}' .\n          '\\x{8D79}\\x{8D7A}\\x{8D7B}\\x{8D7D}\\x{8D7E}\\x{8D7F}\\x{8D80}\\x{8D81}\\x{8D82}' .\n          '\\x{8D83}\\x{8D84}\\x{8D85}\\x{8D86}\\x{8D87}\\x{8D88}\\x{8D89}\\x{8D8A}\\x{8D8B}' .\n          '\\x{8D8C}\\x{8D8D}\\x{8D8E}\\x{8D8F}\\x{8D90}\\x{8D91}\\x{8D92}\\x{8D93}\\x{8D94}' .\n          '\\x{8D95}\\x{8D96}\\x{8D97}\\x{8D98}\\x{8D99}\\x{8D9A}\\x{8D9B}\\x{8D9C}\\x{8D9D}' .\n          '\\x{8D9E}\\x{8D9F}\\x{8DA0}\\x{8DA1}\\x{8DA2}\\x{8DA3}\\x{8DA4}\\x{8DA5}\\x{8DA7}' .\n          '\\x{8DA8}\\x{8DA9}\\x{8DAA}\\x{8DAB}\\x{8DAC}\\x{8DAD}\\x{8DAE}\\x{8DAF}\\x{8DB0}' .\n          '\\x{8DB1}\\x{8DB2}\\x{8DB3}\\x{8DB4}\\x{8DB5}\\x{8DB6}\\x{8DB7}\\x{8DB8}\\x{8DB9}' .\n          '\\x{8DBA}\\x{8DBB}\\x{8DBC}\\x{8DBD}\\x{8DBE}\\x{8DBF}\\x{8DC1}\\x{8DC2}\\x{8DC3}' .\n          '\\x{8DC4}\\x{8DC5}\\x{8DC6}\\x{8DC7}\\x{8DC8}\\x{8DC9}\\x{8DCA}\\x{8DCB}\\x{8DCC}' .\n          '\\x{8DCD}\\x{8DCE}\\x{8DCF}\\x{8DD0}\\x{8DD1}\\x{8DD2}\\x{8DD3}\\x{8DD4}\\x{8DD5}' .\n          '\\x{8DD6}\\x{8DD7}\\x{8DD8}\\x{8DD9}\\x{8DDA}\\x{8DDB}\\x{8DDC}\\x{8DDD}\\x{8DDE}' .\n          '\\x{8DDF}\\x{8DE0}\\x{8DE1}\\x{8DE2}\\x{8DE3}\\x{8DE4}\\x{8DE6}\\x{8DE7}\\x{8DE8}' .\n          '\\x{8DE9}\\x{8DEA}\\x{8DEB}\\x{8DEC}\\x{8DED}\\x{8DEE}\\x{8DEF}\\x{8DF0}\\x{8DF1}' .\n          '\\x{8DF2}\\x{8DF3}\\x{8DF4}\\x{8DF5}\\x{8DF6}\\x{8DF7}\\x{8DF8}\\x{8DF9}\\x{8DFA}' .\n          '\\x{8DFB}\\x{8DFC}\\x{8DFD}\\x{8DFE}\\x{8DFF}\\x{8E00}\\x{8E02}\\x{8E03}\\x{8E04}' .\n          '\\x{8E05}\\x{8E06}\\x{8E07}\\x{8E08}\\x{8E09}\\x{8E0A}\\x{8E0C}\\x{8E0D}\\x{8E0E}' .\n          '\\x{8E0F}\\x{8E10}\\x{8E11}\\x{8E12}\\x{8E13}\\x{8E14}\\x{8E15}\\x{8E16}\\x{8E17}' .\n          '\\x{8E18}\\x{8E19}\\x{8E1A}\\x{8E1B}\\x{8E1C}\\x{8E1D}\\x{8E1E}\\x{8E1F}\\x{8E20}' .\n          '\\x{8E21}\\x{8E22}\\x{8E23}\\x{8E24}\\x{8E25}\\x{8E26}\\x{8E27}\\x{8E28}\\x{8E29}' .\n          '\\x{8E2A}\\x{8E2B}\\x{8E2C}\\x{8E2D}\\x{8E2E}\\x{8E2F}\\x{8E30}\\x{8E31}\\x{8E33}' .\n          '\\x{8E34}\\x{8E35}\\x{8E36}\\x{8E37}\\x{8E38}\\x{8E39}\\x{8E3A}\\x{8E3B}\\x{8E3C}' .\n          '\\x{8E3D}\\x{8E3E}\\x{8E3F}\\x{8E40}\\x{8E41}\\x{8E42}\\x{8E43}\\x{8E44}\\x{8E45}' .\n          '\\x{8E47}\\x{8E48}\\x{8E49}\\x{8E4A}\\x{8E4B}\\x{8E4C}\\x{8E4D}\\x{8E4E}\\x{8E50}' .\n          '\\x{8E51}\\x{8E52}\\x{8E53}\\x{8E54}\\x{8E55}\\x{8E56}\\x{8E57}\\x{8E58}\\x{8E59}' .\n          '\\x{8E5A}\\x{8E5B}\\x{8E5C}\\x{8E5D}\\x{8E5E}\\x{8E5F}\\x{8E60}\\x{8E61}\\x{8E62}' .\n          '\\x{8E63}\\x{8E64}\\x{8E65}\\x{8E66}\\x{8E67}\\x{8E68}\\x{8E69}\\x{8E6A}\\x{8E6B}' .\n          '\\x{8E6C}\\x{8E6D}\\x{8E6F}\\x{8E70}\\x{8E71}\\x{8E72}\\x{8E73}\\x{8E74}\\x{8E76}' .\n          '\\x{8E78}\\x{8E7A}\\x{8E7B}\\x{8E7C}\\x{8E7D}\\x{8E7E}\\x{8E7F}\\x{8E80}\\x{8E81}' .\n          '\\x{8E82}\\x{8E83}\\x{8E84}\\x{8E85}\\x{8E86}\\x{8E87}\\x{8E88}\\x{8E89}\\x{8E8A}' .\n          '\\x{8E8B}\\x{8E8C}\\x{8E8D}\\x{8E8E}\\x{8E8F}\\x{8E90}\\x{8E91}\\x{8E92}\\x{8E93}' .\n          '\\x{8E94}\\x{8E95}\\x{8E96}\\x{8E97}\\x{8E98}\\x{8E9A}\\x{8E9C}\\x{8E9D}\\x{8E9E}' .\n          '\\x{8E9F}\\x{8EA0}\\x{8EA1}\\x{8EA3}\\x{8EA4}\\x{8EA5}\\x{8EA6}\\x{8EA7}\\x{8EA8}' .\n          '\\x{8EA9}\\x{8EAA}\\x{8EAB}\\x{8EAC}\\x{8EAD}\\x{8EAE}\\x{8EAF}\\x{8EB0}\\x{8EB1}' .\n          '\\x{8EB2}\\x{8EB4}\\x{8EB5}\\x{8EB8}\\x{8EB9}\\x{8EBA}\\x{8EBB}\\x{8EBC}\\x{8EBD}' .\n          '\\x{8EBE}\\x{8EBF}\\x{8EC0}\\x{8EC2}\\x{8EC3}\\x{8EC5}\\x{8EC6}\\x{8EC7}\\x{8EC8}' .\n          '\\x{8EC9}\\x{8ECA}\\x{8ECB}\\x{8ECC}\\x{8ECD}\\x{8ECE}\\x{8ECF}\\x{8ED0}\\x{8ED1}' .\n          '\\x{8ED2}\\x{8ED3}\\x{8ED4}\\x{8ED5}\\x{8ED6}\\x{8ED7}\\x{8ED8}\\x{8EDA}\\x{8EDB}' .\n          '\\x{8EDC}\\x{8EDD}\\x{8EDE}\\x{8EDF}\\x{8EE0}\\x{8EE1}\\x{8EE4}\\x{8EE5}\\x{8EE6}' .\n          '\\x{8EE7}\\x{8EE8}\\x{8EE9}\\x{8EEA}\\x{8EEB}\\x{8EEC}\\x{8EED}\\x{8EEE}\\x{8EEF}' .\n          '\\x{8EF1}\\x{8EF2}\\x{8EF3}\\x{8EF4}\\x{8EF5}\\x{8EF6}\\x{8EF7}\\x{8EF8}\\x{8EF9}' .\n          '\\x{8EFA}\\x{8EFB}\\x{8EFC}\\x{8EFD}\\x{8EFE}\\x{8EFF}\\x{8F00}\\x{8F01}\\x{8F02}' .\n          '\\x{8F03}\\x{8F04}\\x{8F05}\\x{8F06}\\x{8F07}\\x{8F08}\\x{8F09}\\x{8F0A}\\x{8F0B}' .\n          '\\x{8F0D}\\x{8F0E}\\x{8F10}\\x{8F11}\\x{8F12}\\x{8F13}\\x{8F14}\\x{8F15}\\x{8F16}' .\n          '\\x{8F17}\\x{8F18}\\x{8F1A}\\x{8F1B}\\x{8F1C}\\x{8F1D}\\x{8F1E}\\x{8F1F}\\x{8F20}' .\n          '\\x{8F21}\\x{8F22}\\x{8F23}\\x{8F24}\\x{8F25}\\x{8F26}\\x{8F27}\\x{8F28}\\x{8F29}' .\n          '\\x{8F2A}\\x{8F2B}\\x{8F2C}\\x{8F2E}\\x{8F2F}\\x{8F30}\\x{8F31}\\x{8F32}\\x{8F33}' .\n          '\\x{8F34}\\x{8F35}\\x{8F36}\\x{8F37}\\x{8F38}\\x{8F39}\\x{8F3B}\\x{8F3C}\\x{8F3D}' .\n          '\\x{8F3E}\\x{8F3F}\\x{8F40}\\x{8F42}\\x{8F43}\\x{8F44}\\x{8F45}\\x{8F46}\\x{8F47}' .\n          '\\x{8F48}\\x{8F49}\\x{8F4A}\\x{8F4B}\\x{8F4C}\\x{8F4D}\\x{8F4E}\\x{8F4F}\\x{8F50}' .\n          '\\x{8F51}\\x{8F52}\\x{8F53}\\x{8F54}\\x{8F55}\\x{8F56}\\x{8F57}\\x{8F58}\\x{8F59}' .\n          '\\x{8F5A}\\x{8F5B}\\x{8F5D}\\x{8F5E}\\x{8F5F}\\x{8F60}\\x{8F61}\\x{8F62}\\x{8F63}' .\n          '\\x{8F64}\\x{8F65}\\x{8F66}\\x{8F67}\\x{8F68}\\x{8F69}\\x{8F6A}\\x{8F6B}\\x{8F6C}' .\n          '\\x{8F6D}\\x{8F6E}\\x{8F6F}\\x{8F70}\\x{8F71}\\x{8F72}\\x{8F73}\\x{8F74}\\x{8F75}' .\n          '\\x{8F76}\\x{8F77}\\x{8F78}\\x{8F79}\\x{8F7A}\\x{8F7B}\\x{8F7C}\\x{8F7D}\\x{8F7E}' .\n          '\\x{8F7F}\\x{8F80}\\x{8F81}\\x{8F82}\\x{8F83}\\x{8F84}\\x{8F85}\\x{8F86}\\x{8F87}' .\n          '\\x{8F88}\\x{8F89}\\x{8F8A}\\x{8F8B}\\x{8F8C}\\x{8F8D}\\x{8F8E}\\x{8F8F}\\x{8F90}' .\n          '\\x{8F91}\\x{8F92}\\x{8F93}\\x{8F94}\\x{8F95}\\x{8F96}\\x{8F97}\\x{8F98}\\x{8F99}' .\n          '\\x{8F9A}\\x{8F9B}\\x{8F9C}\\x{8F9E}\\x{8F9F}\\x{8FA0}\\x{8FA1}\\x{8FA2}\\x{8FA3}' .\n          '\\x{8FA5}\\x{8FA6}\\x{8FA7}\\x{8FA8}\\x{8FA9}\\x{8FAA}\\x{8FAB}\\x{8FAC}\\x{8FAD}' .\n          '\\x{8FAE}\\x{8FAF}\\x{8FB0}\\x{8FB1}\\x{8FB2}\\x{8FB4}\\x{8FB5}\\x{8FB6}\\x{8FB7}' .\n          '\\x{8FB8}\\x{8FB9}\\x{8FBB}\\x{8FBC}\\x{8FBD}\\x{8FBE}\\x{8FBF}\\x{8FC0}\\x{8FC1}' .\n          '\\x{8FC2}\\x{8FC4}\\x{8FC5}\\x{8FC6}\\x{8FC7}\\x{8FC8}\\x{8FC9}\\x{8FCB}\\x{8FCC}' .\n          '\\x{8FCD}\\x{8FCE}\\x{8FCF}\\x{8FD0}\\x{8FD1}\\x{8FD2}\\x{8FD3}\\x{8FD4}\\x{8FD5}' .\n          '\\x{8FD6}\\x{8FD7}\\x{8FD8}\\x{8FD9}\\x{8FDA}\\x{8FDB}\\x{8FDC}\\x{8FDD}\\x{8FDE}' .\n          '\\x{8FDF}\\x{8FE0}\\x{8FE1}\\x{8FE2}\\x{8FE3}\\x{8FE4}\\x{8FE5}\\x{8FE6}\\x{8FE8}' .\n          '\\x{8FE9}\\x{8FEA}\\x{8FEB}\\x{8FEC}\\x{8FED}\\x{8FEE}\\x{8FEF}\\x{8FF0}\\x{8FF1}' .\n          '\\x{8FF2}\\x{8FF3}\\x{8FF4}\\x{8FF5}\\x{8FF6}\\x{8FF7}\\x{8FF8}\\x{8FF9}\\x{8FFA}' .\n          '\\x{8FFB}\\x{8FFC}\\x{8FFD}\\x{8FFE}\\x{8FFF}\\x{9000}\\x{9001}\\x{9002}\\x{9003}' .\n          '\\x{9004}\\x{9005}\\x{9006}\\x{9007}\\x{9008}\\x{9009}\\x{900A}\\x{900B}\\x{900C}' .\n          '\\x{900D}\\x{900F}\\x{9010}\\x{9011}\\x{9012}\\x{9013}\\x{9014}\\x{9015}\\x{9016}' .\n          '\\x{9017}\\x{9018}\\x{9019}\\x{901A}\\x{901B}\\x{901C}\\x{901D}\\x{901E}\\x{901F}' .\n          '\\x{9020}\\x{9021}\\x{9022}\\x{9023}\\x{9024}\\x{9025}\\x{9026}\\x{9027}\\x{9028}' .\n          '\\x{9029}\\x{902B}\\x{902D}\\x{902E}\\x{902F}\\x{9030}\\x{9031}\\x{9032}\\x{9033}' .\n          '\\x{9034}\\x{9035}\\x{9036}\\x{9038}\\x{903A}\\x{903B}\\x{903C}\\x{903D}\\x{903E}' .\n          '\\x{903F}\\x{9041}\\x{9042}\\x{9043}\\x{9044}\\x{9045}\\x{9047}\\x{9048}\\x{9049}' .\n          '\\x{904A}\\x{904B}\\x{904C}\\x{904D}\\x{904E}\\x{904F}\\x{9050}\\x{9051}\\x{9052}' .\n          '\\x{9053}\\x{9054}\\x{9055}\\x{9056}\\x{9057}\\x{9058}\\x{9059}\\x{905A}\\x{905B}' .\n          '\\x{905C}\\x{905D}\\x{905E}\\x{905F}\\x{9060}\\x{9061}\\x{9062}\\x{9063}\\x{9064}' .\n          '\\x{9065}\\x{9066}\\x{9067}\\x{9068}\\x{9069}\\x{906A}\\x{906B}\\x{906C}\\x{906D}' .\n          '\\x{906E}\\x{906F}\\x{9070}\\x{9071}\\x{9072}\\x{9073}\\x{9074}\\x{9075}\\x{9076}' .\n          '\\x{9077}\\x{9078}\\x{9079}\\x{907A}\\x{907B}\\x{907C}\\x{907D}\\x{907E}\\x{907F}' .\n          '\\x{9080}\\x{9081}\\x{9082}\\x{9083}\\x{9084}\\x{9085}\\x{9086}\\x{9087}\\x{9088}' .\n          '\\x{9089}\\x{908A}\\x{908B}\\x{908C}\\x{908D}\\x{908E}\\x{908F}\\x{9090}\\x{9091}' .\n          '\\x{9092}\\x{9093}\\x{9094}\\x{9095}\\x{9096}\\x{9097}\\x{9098}\\x{9099}\\x{909A}' .\n          '\\x{909B}\\x{909C}\\x{909D}\\x{909E}\\x{909F}\\x{90A0}\\x{90A1}\\x{90A2}\\x{90A3}' .\n          '\\x{90A4}\\x{90A5}\\x{90A6}\\x{90A7}\\x{90A8}\\x{90A9}\\x{90AA}\\x{90AC}\\x{90AD}' .\n          '\\x{90AE}\\x{90AF}\\x{90B0}\\x{90B1}\\x{90B2}\\x{90B3}\\x{90B4}\\x{90B5}\\x{90B6}' .\n          '\\x{90B7}\\x{90B8}\\x{90B9}\\x{90BA}\\x{90BB}\\x{90BC}\\x{90BD}\\x{90BE}\\x{90BF}' .\n          '\\x{90C0}\\x{90C1}\\x{90C2}\\x{90C3}\\x{90C4}\\x{90C5}\\x{90C6}\\x{90C7}\\x{90C8}' .\n          '\\x{90C9}\\x{90CA}\\x{90CB}\\x{90CE}\\x{90CF}\\x{90D0}\\x{90D1}\\x{90D3}\\x{90D4}' .\n          '\\x{90D5}\\x{90D6}\\x{90D7}\\x{90D8}\\x{90D9}\\x{90DA}\\x{90DB}\\x{90DC}\\x{90DD}' .\n          '\\x{90DE}\\x{90DF}\\x{90E0}\\x{90E1}\\x{90E2}\\x{90E3}\\x{90E4}\\x{90E5}\\x{90E6}' .\n          '\\x{90E7}\\x{90E8}\\x{90E9}\\x{90EA}\\x{90EB}\\x{90EC}\\x{90ED}\\x{90EE}\\x{90EF}' .\n          '\\x{90F0}\\x{90F1}\\x{90F2}\\x{90F3}\\x{90F4}\\x{90F5}\\x{90F7}\\x{90F8}\\x{90F9}' .\n          '\\x{90FA}\\x{90FB}\\x{90FC}\\x{90FD}\\x{90FE}\\x{90FF}\\x{9100}\\x{9101}\\x{9102}' .\n          '\\x{9103}\\x{9104}\\x{9105}\\x{9106}\\x{9107}\\x{9108}\\x{9109}\\x{910B}\\x{910C}' .\n          '\\x{910D}\\x{910E}\\x{910F}\\x{9110}\\x{9111}\\x{9112}\\x{9113}\\x{9114}\\x{9115}' .\n          '\\x{9116}\\x{9117}\\x{9118}\\x{9119}\\x{911A}\\x{911B}\\x{911C}\\x{911D}\\x{911E}' .\n          '\\x{911F}\\x{9120}\\x{9121}\\x{9122}\\x{9123}\\x{9124}\\x{9125}\\x{9126}\\x{9127}' .\n          '\\x{9128}\\x{9129}\\x{912A}\\x{912B}\\x{912C}\\x{912D}\\x{912E}\\x{912F}\\x{9130}' .\n          '\\x{9131}\\x{9132}\\x{9133}\\x{9134}\\x{9135}\\x{9136}\\x{9137}\\x{9138}\\x{9139}' .\n          '\\x{913A}\\x{913B}\\x{913E}\\x{913F}\\x{9140}\\x{9141}\\x{9142}\\x{9143}\\x{9144}' .\n          '\\x{9145}\\x{9146}\\x{9147}\\x{9148}\\x{9149}\\x{914A}\\x{914B}\\x{914C}\\x{914D}' .\n          '\\x{914E}\\x{914F}\\x{9150}\\x{9151}\\x{9152}\\x{9153}\\x{9154}\\x{9155}\\x{9156}' .\n          '\\x{9157}\\x{9158}\\x{915A}\\x{915B}\\x{915C}\\x{915D}\\x{915E}\\x{915F}\\x{9160}' .\n          '\\x{9161}\\x{9162}\\x{9163}\\x{9164}\\x{9165}\\x{9166}\\x{9167}\\x{9168}\\x{9169}' .\n          '\\x{916A}\\x{916B}\\x{916C}\\x{916D}\\x{916E}\\x{916F}\\x{9170}\\x{9171}\\x{9172}' .\n          '\\x{9173}\\x{9174}\\x{9175}\\x{9176}\\x{9177}\\x{9178}\\x{9179}\\x{917A}\\x{917C}' .\n          '\\x{917D}\\x{917E}\\x{917F}\\x{9180}\\x{9181}\\x{9182}\\x{9183}\\x{9184}\\x{9185}' .\n          '\\x{9186}\\x{9187}\\x{9188}\\x{9189}\\x{918A}\\x{918B}\\x{918C}\\x{918D}\\x{918E}' .\n          '\\x{918F}\\x{9190}\\x{9191}\\x{9192}\\x{9193}\\x{9194}\\x{9196}\\x{9199}\\x{919A}' .\n          '\\x{919B}\\x{919C}\\x{919D}\\x{919E}\\x{919F}\\x{91A0}\\x{91A1}\\x{91A2}\\x{91A3}' .\n          '\\x{91A5}\\x{91A6}\\x{91A7}\\x{91A8}\\x{91AA}\\x{91AB}\\x{91AC}\\x{91AD}\\x{91AE}' .\n          '\\x{91AF}\\x{91B0}\\x{91B1}\\x{91B2}\\x{91B3}\\x{91B4}\\x{91B5}\\x{91B6}\\x{91B7}' .\n          '\\x{91B9}\\x{91BA}\\x{91BB}\\x{91BC}\\x{91BD}\\x{91BE}\\x{91C0}\\x{91C1}\\x{91C2}' .\n          '\\x{91C3}\\x{91C5}\\x{91C6}\\x{91C7}\\x{91C9}\\x{91CA}\\x{91CB}\\x{91CC}\\x{91CD}' .\n          '\\x{91CE}\\x{91CF}\\x{91D0}\\x{91D1}\\x{91D2}\\x{91D3}\\x{91D4}\\x{91D5}\\x{91D7}' .\n          '\\x{91D8}\\x{91D9}\\x{91DA}\\x{91DB}\\x{91DC}\\x{91DD}\\x{91DE}\\x{91DF}\\x{91E2}' .\n          '\\x{91E3}\\x{91E4}\\x{91E5}\\x{91E6}\\x{91E7}\\x{91E8}\\x{91E9}\\x{91EA}\\x{91EB}' .\n          '\\x{91EC}\\x{91ED}\\x{91EE}\\x{91F0}\\x{91F1}\\x{91F2}\\x{91F3}\\x{91F4}\\x{91F5}' .\n          '\\x{91F7}\\x{91F8}\\x{91F9}\\x{91FA}\\x{91FB}\\x{91FD}\\x{91FE}\\x{91FF}\\x{9200}' .\n          '\\x{9201}\\x{9202}\\x{9203}\\x{9204}\\x{9205}\\x{9206}\\x{9207}\\x{9208}\\x{9209}' .\n          '\\x{920A}\\x{920B}\\x{920C}\\x{920D}\\x{920E}\\x{920F}\\x{9210}\\x{9211}\\x{9212}' .\n          '\\x{9214}\\x{9215}\\x{9216}\\x{9217}\\x{9218}\\x{9219}\\x{921A}\\x{921B}\\x{921C}' .\n          '\\x{921D}\\x{921E}\\x{9220}\\x{9221}\\x{9223}\\x{9224}\\x{9225}\\x{9226}\\x{9227}' .\n          '\\x{9228}\\x{9229}\\x{922A}\\x{922B}\\x{922D}\\x{922E}\\x{922F}\\x{9230}\\x{9231}' .\n          '\\x{9232}\\x{9233}\\x{9234}\\x{9235}\\x{9236}\\x{9237}\\x{9238}\\x{9239}\\x{923A}' .\n          '\\x{923B}\\x{923C}\\x{923D}\\x{923E}\\x{923F}\\x{9240}\\x{9241}\\x{9242}\\x{9245}' .\n          '\\x{9246}\\x{9247}\\x{9248}\\x{9249}\\x{924A}\\x{924B}\\x{924C}\\x{924D}\\x{924E}' .\n          '\\x{924F}\\x{9250}\\x{9251}\\x{9252}\\x{9253}\\x{9254}\\x{9255}\\x{9256}\\x{9257}' .\n          '\\x{9258}\\x{9259}\\x{925A}\\x{925B}\\x{925C}\\x{925D}\\x{925E}\\x{925F}\\x{9260}' .\n          '\\x{9261}\\x{9262}\\x{9263}\\x{9264}\\x{9265}\\x{9266}\\x{9267}\\x{9268}\\x{926B}' .\n          '\\x{926C}\\x{926D}\\x{926E}\\x{926F}\\x{9270}\\x{9272}\\x{9273}\\x{9274}\\x{9275}' .\n          '\\x{9276}\\x{9277}\\x{9278}\\x{9279}\\x{927A}\\x{927B}\\x{927C}\\x{927D}\\x{927E}' .\n          '\\x{927F}\\x{9280}\\x{9282}\\x{9283}\\x{9285}\\x{9286}\\x{9287}\\x{9288}\\x{9289}' .\n          '\\x{928A}\\x{928B}\\x{928C}\\x{928D}\\x{928E}\\x{928F}\\x{9290}\\x{9291}\\x{9292}' .\n          '\\x{9293}\\x{9294}\\x{9295}\\x{9296}\\x{9297}\\x{9298}\\x{9299}\\x{929A}\\x{929B}' .\n          '\\x{929C}\\x{929D}\\x{929F}\\x{92A0}\\x{92A1}\\x{92A2}\\x{92A3}\\x{92A4}\\x{92A5}' .\n          '\\x{92A6}\\x{92A7}\\x{92A8}\\x{92A9}\\x{92AA}\\x{92AB}\\x{92AC}\\x{92AD}\\x{92AE}' .\n          '\\x{92AF}\\x{92B0}\\x{92B1}\\x{92B2}\\x{92B3}\\x{92B4}\\x{92B5}\\x{92B6}\\x{92B7}' .\n          '\\x{92B8}\\x{92B9}\\x{92BA}\\x{92BB}\\x{92BC}\\x{92BE}\\x{92BF}\\x{92C0}\\x{92C1}' .\n          '\\x{92C2}\\x{92C3}\\x{92C4}\\x{92C5}\\x{92C6}\\x{92C7}\\x{92C8}\\x{92C9}\\x{92CA}' .\n          '\\x{92CB}\\x{92CC}\\x{92CD}\\x{92CE}\\x{92CF}\\x{92D0}\\x{92D1}\\x{92D2}\\x{92D3}' .\n          '\\x{92D5}\\x{92D6}\\x{92D7}\\x{92D8}\\x{92D9}\\x{92DA}\\x{92DC}\\x{92DD}\\x{92DE}' .\n          '\\x{92DF}\\x{92E0}\\x{92E1}\\x{92E3}\\x{92E4}\\x{92E5}\\x{92E6}\\x{92E7}\\x{92E8}' .\n          '\\x{92E9}\\x{92EA}\\x{92EB}\\x{92EC}\\x{92ED}\\x{92EE}\\x{92EF}\\x{92F0}\\x{92F1}' .\n          '\\x{92F2}\\x{92F3}\\x{92F4}\\x{92F5}\\x{92F6}\\x{92F7}\\x{92F8}\\x{92F9}\\x{92FA}' .\n          '\\x{92FB}\\x{92FC}\\x{92FD}\\x{92FE}\\x{92FF}\\x{9300}\\x{9301}\\x{9302}\\x{9303}' .\n          '\\x{9304}\\x{9305}\\x{9306}\\x{9307}\\x{9308}\\x{9309}\\x{930A}\\x{930B}\\x{930C}' .\n          '\\x{930D}\\x{930E}\\x{930F}\\x{9310}\\x{9311}\\x{9312}\\x{9313}\\x{9314}\\x{9315}' .\n          '\\x{9316}\\x{9317}\\x{9318}\\x{9319}\\x{931A}\\x{931B}\\x{931D}\\x{931E}\\x{931F}' .\n          '\\x{9320}\\x{9321}\\x{9322}\\x{9323}\\x{9324}\\x{9325}\\x{9326}\\x{9327}\\x{9328}' .\n          '\\x{9329}\\x{932A}\\x{932B}\\x{932D}\\x{932E}\\x{932F}\\x{9332}\\x{9333}\\x{9334}' .\n          '\\x{9335}\\x{9336}\\x{9337}\\x{9338}\\x{9339}\\x{933A}\\x{933B}\\x{933C}\\x{933D}' .\n          '\\x{933E}\\x{933F}\\x{9340}\\x{9341}\\x{9342}\\x{9343}\\x{9344}\\x{9345}\\x{9346}' .\n          '\\x{9347}\\x{9348}\\x{9349}\\x{934A}\\x{934B}\\x{934C}\\x{934D}\\x{934E}\\x{934F}' .\n          '\\x{9350}\\x{9351}\\x{9352}\\x{9353}\\x{9354}\\x{9355}\\x{9356}\\x{9357}\\x{9358}' .\n          '\\x{9359}\\x{935A}\\x{935B}\\x{935C}\\x{935D}\\x{935E}\\x{935F}\\x{9360}\\x{9361}' .\n          '\\x{9363}\\x{9364}\\x{9365}\\x{9366}\\x{9367}\\x{9369}\\x{936A}\\x{936C}\\x{936D}' .\n          '\\x{936E}\\x{9370}\\x{9371}\\x{9372}\\x{9374}\\x{9375}\\x{9376}\\x{9377}\\x{9379}' .\n          '\\x{937A}\\x{937B}\\x{937C}\\x{937D}\\x{937E}\\x{9380}\\x{9382}\\x{9383}\\x{9384}' .\n          '\\x{9385}\\x{9386}\\x{9387}\\x{9388}\\x{9389}\\x{938A}\\x{938C}\\x{938D}\\x{938E}' .\n          '\\x{938F}\\x{9390}\\x{9391}\\x{9392}\\x{9393}\\x{9394}\\x{9395}\\x{9396}\\x{9397}' .\n          '\\x{9398}\\x{9399}\\x{939A}\\x{939B}\\x{939D}\\x{939E}\\x{939F}\\x{93A1}\\x{93A2}' .\n          '\\x{93A3}\\x{93A4}\\x{93A5}\\x{93A6}\\x{93A7}\\x{93A8}\\x{93A9}\\x{93AA}\\x{93AC}' .\n          '\\x{93AD}\\x{93AE}\\x{93AF}\\x{93B0}\\x{93B1}\\x{93B2}\\x{93B3}\\x{93B4}\\x{93B5}' .\n          '\\x{93B6}\\x{93B7}\\x{93B8}\\x{93B9}\\x{93BA}\\x{93BC}\\x{93BD}\\x{93BE}\\x{93BF}' .\n          '\\x{93C0}\\x{93C1}\\x{93C2}\\x{93C3}\\x{93C4}\\x{93C5}\\x{93C6}\\x{93C7}\\x{93C8}' .\n          '\\x{93C9}\\x{93CA}\\x{93CB}\\x{93CC}\\x{93CD}\\x{93CE}\\x{93CF}\\x{93D0}\\x{93D1}' .\n          '\\x{93D2}\\x{93D3}\\x{93D4}\\x{93D5}\\x{93D6}\\x{93D7}\\x{93D8}\\x{93D9}\\x{93DA}' .\n          '\\x{93DB}\\x{93DC}\\x{93DD}\\x{93DE}\\x{93DF}\\x{93E1}\\x{93E2}\\x{93E3}\\x{93E4}' .\n          '\\x{93E6}\\x{93E7}\\x{93E8}\\x{93E9}\\x{93EA}\\x{93EB}\\x{93EC}\\x{93ED}\\x{93EE}' .\n          '\\x{93EF}\\x{93F0}\\x{93F1}\\x{93F2}\\x{93F4}\\x{93F5}\\x{93F6}\\x{93F7}\\x{93F8}' .\n          '\\x{93F9}\\x{93FA}\\x{93FB}\\x{93FC}\\x{93FD}\\x{93FE}\\x{93FF}\\x{9400}\\x{9401}' .\n          '\\x{9403}\\x{9404}\\x{9405}\\x{9406}\\x{9407}\\x{9408}\\x{9409}\\x{940A}\\x{940B}' .\n          '\\x{940C}\\x{940D}\\x{940E}\\x{940F}\\x{9410}\\x{9411}\\x{9412}\\x{9413}\\x{9414}' .\n          '\\x{9415}\\x{9416}\\x{9418}\\x{9419}\\x{941B}\\x{941D}\\x{9420}\\x{9422}\\x{9423}' .\n          '\\x{9425}\\x{9426}\\x{9427}\\x{9428}\\x{9429}\\x{942A}\\x{942B}\\x{942C}\\x{942D}' .\n          '\\x{942E}\\x{942F}\\x{9430}\\x{9431}\\x{9432}\\x{9433}\\x{9434}\\x{9435}\\x{9436}' .\n          '\\x{9437}\\x{9438}\\x{9439}\\x{943A}\\x{943B}\\x{943C}\\x{943D}\\x{943E}\\x{943F}' .\n          '\\x{9440}\\x{9441}\\x{9442}\\x{9444}\\x{9445}\\x{9446}\\x{9447}\\x{9448}\\x{9449}' .\n          '\\x{944A}\\x{944B}\\x{944C}\\x{944D}\\x{944F}\\x{9450}\\x{9451}\\x{9452}\\x{9453}' .\n          '\\x{9454}\\x{9455}\\x{9456}\\x{9457}\\x{9458}\\x{9459}\\x{945B}\\x{945C}\\x{945D}' .\n          '\\x{945E}\\x{945F}\\x{9460}\\x{9461}\\x{9462}\\x{9463}\\x{9464}\\x{9465}\\x{9466}' .\n          '\\x{9467}\\x{9468}\\x{9469}\\x{946A}\\x{946B}\\x{946D}\\x{946E}\\x{946F}\\x{9470}' .\n          '\\x{9471}\\x{9472}\\x{9473}\\x{9474}\\x{9475}\\x{9476}\\x{9477}\\x{9478}\\x{9479}' .\n          '\\x{947A}\\x{947C}\\x{947D}\\x{947E}\\x{947F}\\x{9480}\\x{9481}\\x{9482}\\x{9483}' .\n          '\\x{9484}\\x{9485}\\x{9486}\\x{9487}\\x{9488}\\x{9489}\\x{948A}\\x{948B}\\x{948C}' .\n          '\\x{948D}\\x{948E}\\x{948F}\\x{9490}\\x{9491}\\x{9492}\\x{9493}\\x{9494}\\x{9495}' .\n          '\\x{9496}\\x{9497}\\x{9498}\\x{9499}\\x{949A}\\x{949B}\\x{949C}\\x{949D}\\x{949E}' .\n          '\\x{949F}\\x{94A0}\\x{94A1}\\x{94A2}\\x{94A3}\\x{94A4}\\x{94A5}\\x{94A6}\\x{94A7}' .\n          '\\x{94A8}\\x{94A9}\\x{94AA}\\x{94AB}\\x{94AC}\\x{94AD}\\x{94AE}\\x{94AF}\\x{94B0}' .\n          '\\x{94B1}\\x{94B2}\\x{94B3}\\x{94B4}\\x{94B5}\\x{94B6}\\x{94B7}\\x{94B8}\\x{94B9}' .\n          '\\x{94BA}\\x{94BB}\\x{94BC}\\x{94BD}\\x{94BE}\\x{94BF}\\x{94C0}\\x{94C1}\\x{94C2}' .\n          '\\x{94C3}\\x{94C4}\\x{94C5}\\x{94C6}\\x{94C7}\\x{94C8}\\x{94C9}\\x{94CA}\\x{94CB}' .\n          '\\x{94CC}\\x{94CD}\\x{94CE}\\x{94CF}\\x{94D0}\\x{94D1}\\x{94D2}\\x{94D3}\\x{94D4}' .\n          '\\x{94D5}\\x{94D6}\\x{94D7}\\x{94D8}\\x{94D9}\\x{94DA}\\x{94DB}\\x{94DC}\\x{94DD}' .\n          '\\x{94DE}\\x{94DF}\\x{94E0}\\x{94E1}\\x{94E2}\\x{94E3}\\x{94E4}\\x{94E5}\\x{94E6}' .\n          '\\x{94E7}\\x{94E8}\\x{94E9}\\x{94EA}\\x{94EB}\\x{94EC}\\x{94ED}\\x{94EE}\\x{94EF}' .\n          '\\x{94F0}\\x{94F1}\\x{94F2}\\x{94F3}\\x{94F4}\\x{94F5}\\x{94F6}\\x{94F7}\\x{94F8}' .\n          '\\x{94F9}\\x{94FA}\\x{94FB}\\x{94FC}\\x{94FD}\\x{94FE}\\x{94FF}\\x{9500}\\x{9501}' .\n          '\\x{9502}\\x{9503}\\x{9504}\\x{9505}\\x{9506}\\x{9507}\\x{9508}\\x{9509}\\x{950A}' .\n          '\\x{950B}\\x{950C}\\x{950D}\\x{950E}\\x{950F}\\x{9510}\\x{9511}\\x{9512}\\x{9513}' .\n          '\\x{9514}\\x{9515}\\x{9516}\\x{9517}\\x{9518}\\x{9519}\\x{951A}\\x{951B}\\x{951C}' .\n          '\\x{951D}\\x{951E}\\x{951F}\\x{9520}\\x{9521}\\x{9522}\\x{9523}\\x{9524}\\x{9525}' .\n          '\\x{9526}\\x{9527}\\x{9528}\\x{9529}\\x{952A}\\x{952B}\\x{952C}\\x{952D}\\x{952E}' .\n          '\\x{952F}\\x{9530}\\x{9531}\\x{9532}\\x{9533}\\x{9534}\\x{9535}\\x{9536}\\x{9537}' .\n          '\\x{9538}\\x{9539}\\x{953A}\\x{953B}\\x{953C}\\x{953D}\\x{953E}\\x{953F}\\x{9540}' .\n          '\\x{9541}\\x{9542}\\x{9543}\\x{9544}\\x{9545}\\x{9546}\\x{9547}\\x{9548}\\x{9549}' .\n          '\\x{954A}\\x{954B}\\x{954C}\\x{954D}\\x{954E}\\x{954F}\\x{9550}\\x{9551}\\x{9552}' .\n          '\\x{9553}\\x{9554}\\x{9555}\\x{9556}\\x{9557}\\x{9558}\\x{9559}\\x{955A}\\x{955B}' .\n          '\\x{955C}\\x{955D}\\x{955E}\\x{955F}\\x{9560}\\x{9561}\\x{9562}\\x{9563}\\x{9564}' .\n          '\\x{9565}\\x{9566}\\x{9567}\\x{9568}\\x{9569}\\x{956A}\\x{956B}\\x{956C}\\x{956D}' .\n          '\\x{956E}\\x{956F}\\x{9570}\\x{9571}\\x{9572}\\x{9573}\\x{9574}\\x{9575}\\x{9576}' .\n          '\\x{9577}\\x{957A}\\x{957B}\\x{957C}\\x{957D}\\x{957F}\\x{9580}\\x{9581}\\x{9582}' .\n          '\\x{9583}\\x{9584}\\x{9586}\\x{9587}\\x{9588}\\x{9589}\\x{958A}\\x{958B}\\x{958C}' .\n          '\\x{958D}\\x{958E}\\x{958F}\\x{9590}\\x{9591}\\x{9592}\\x{9593}\\x{9594}\\x{9595}' .\n          '\\x{9596}\\x{9598}\\x{9599}\\x{959A}\\x{959B}\\x{959C}\\x{959D}\\x{959E}\\x{959F}' .\n          '\\x{95A1}\\x{95A2}\\x{95A3}\\x{95A4}\\x{95A5}\\x{95A6}\\x{95A7}\\x{95A8}\\x{95A9}' .\n          '\\x{95AA}\\x{95AB}\\x{95AC}\\x{95AD}\\x{95AE}\\x{95AF}\\x{95B0}\\x{95B1}\\x{95B2}' .\n          '\\x{95B5}\\x{95B6}\\x{95B7}\\x{95B9}\\x{95BA}\\x{95BB}\\x{95BC}\\x{95BD}\\x{95BE}' .\n          '\\x{95BF}\\x{95C0}\\x{95C2}\\x{95C3}\\x{95C4}\\x{95C5}\\x{95C6}\\x{95C7}\\x{95C8}' .\n          '\\x{95C9}\\x{95CA}\\x{95CB}\\x{95CC}\\x{95CD}\\x{95CE}\\x{95CF}\\x{95D0}\\x{95D1}' .\n          '\\x{95D2}\\x{95D3}\\x{95D4}\\x{95D5}\\x{95D6}\\x{95D7}\\x{95D8}\\x{95DA}\\x{95DB}' .\n          '\\x{95DC}\\x{95DE}\\x{95DF}\\x{95E0}\\x{95E1}\\x{95E2}\\x{95E3}\\x{95E4}\\x{95E5}' .\n          '\\x{95E6}\\x{95E7}\\x{95E8}\\x{95E9}\\x{95EA}\\x{95EB}\\x{95EC}\\x{95ED}\\x{95EE}' .\n          '\\x{95EF}\\x{95F0}\\x{95F1}\\x{95F2}\\x{95F3}\\x{95F4}\\x{95F5}\\x{95F6}\\x{95F7}' .\n          '\\x{95F8}\\x{95F9}\\x{95FA}\\x{95FB}\\x{95FC}\\x{95FD}\\x{95FE}\\x{95FF}\\x{9600}' .\n          '\\x{9601}\\x{9602}\\x{9603}\\x{9604}\\x{9605}\\x{9606}\\x{9607}\\x{9608}\\x{9609}' .\n          '\\x{960A}\\x{960B}\\x{960C}\\x{960D}\\x{960E}\\x{960F}\\x{9610}\\x{9611}\\x{9612}' .\n          '\\x{9613}\\x{9614}\\x{9615}\\x{9616}\\x{9617}\\x{9618}\\x{9619}\\x{961A}\\x{961B}' .\n          '\\x{961C}\\x{961D}\\x{961E}\\x{961F}\\x{9620}\\x{9621}\\x{9622}\\x{9623}\\x{9624}' .\n          '\\x{9627}\\x{9628}\\x{962A}\\x{962B}\\x{962C}\\x{962D}\\x{962E}\\x{962F}\\x{9630}' .\n          '\\x{9631}\\x{9632}\\x{9633}\\x{9634}\\x{9635}\\x{9636}\\x{9637}\\x{9638}\\x{9639}' .\n          '\\x{963A}\\x{963B}\\x{963C}\\x{963D}\\x{963F}\\x{9640}\\x{9641}\\x{9642}\\x{9643}' .\n          '\\x{9644}\\x{9645}\\x{9646}\\x{9647}\\x{9648}\\x{9649}\\x{964A}\\x{964B}\\x{964C}' .\n          '\\x{964D}\\x{964E}\\x{964F}\\x{9650}\\x{9651}\\x{9652}\\x{9653}\\x{9654}\\x{9655}' .\n          '\\x{9658}\\x{9659}\\x{965A}\\x{965B}\\x{965C}\\x{965D}\\x{965E}\\x{965F}\\x{9660}' .\n          '\\x{9661}\\x{9662}\\x{9663}\\x{9664}\\x{9666}\\x{9667}\\x{9668}\\x{9669}\\x{966A}' .\n          '\\x{966B}\\x{966C}\\x{966D}\\x{966E}\\x{966F}\\x{9670}\\x{9671}\\x{9672}\\x{9673}' .\n          '\\x{9674}\\x{9675}\\x{9676}\\x{9677}\\x{9678}\\x{967C}\\x{967D}\\x{967E}\\x{9680}' .\n          '\\x{9683}\\x{9684}\\x{9685}\\x{9686}\\x{9687}\\x{9688}\\x{9689}\\x{968A}\\x{968B}' .\n          '\\x{968D}\\x{968E}\\x{968F}\\x{9690}\\x{9691}\\x{9692}\\x{9693}\\x{9694}\\x{9695}' .\n          '\\x{9697}\\x{9698}\\x{9699}\\x{969B}\\x{969C}\\x{969E}\\x{96A0}\\x{96A1}\\x{96A2}' .\n          '\\x{96A3}\\x{96A4}\\x{96A5}\\x{96A6}\\x{96A7}\\x{96A8}\\x{96A9}\\x{96AA}\\x{96AC}' .\n          '\\x{96AD}\\x{96AE}\\x{96B0}\\x{96B1}\\x{96B3}\\x{96B4}\\x{96B6}\\x{96B7}\\x{96B8}' .\n          '\\x{96B9}\\x{96BA}\\x{96BB}\\x{96BC}\\x{96BD}\\x{96BE}\\x{96BF}\\x{96C0}\\x{96C1}' .\n          '\\x{96C2}\\x{96C3}\\x{96C4}\\x{96C5}\\x{96C6}\\x{96C7}\\x{96C8}\\x{96C9}\\x{96CA}' .\n          '\\x{96CB}\\x{96CC}\\x{96CD}\\x{96CE}\\x{96CF}\\x{96D0}\\x{96D1}\\x{96D2}\\x{96D3}' .\n          '\\x{96D4}\\x{96D5}\\x{96D6}\\x{96D7}\\x{96D8}\\x{96D9}\\x{96DA}\\x{96DB}\\x{96DC}' .\n          '\\x{96DD}\\x{96DE}\\x{96DF}\\x{96E0}\\x{96E1}\\x{96E2}\\x{96E3}\\x{96E5}\\x{96E8}' .\n          '\\x{96E9}\\x{96EA}\\x{96EB}\\x{96EC}\\x{96ED}\\x{96EE}\\x{96EF}\\x{96F0}\\x{96F1}' .\n          '\\x{96F2}\\x{96F3}\\x{96F4}\\x{96F5}\\x{96F6}\\x{96F7}\\x{96F8}\\x{96F9}\\x{96FA}' .\n          '\\x{96FB}\\x{96FD}\\x{96FE}\\x{96FF}\\x{9700}\\x{9701}\\x{9702}\\x{9703}\\x{9704}' .\n          '\\x{9705}\\x{9706}\\x{9707}\\x{9708}\\x{9709}\\x{970A}\\x{970B}\\x{970C}\\x{970D}' .\n          '\\x{970E}\\x{970F}\\x{9710}\\x{9711}\\x{9712}\\x{9713}\\x{9715}\\x{9716}\\x{9718}' .\n          '\\x{9719}\\x{971C}\\x{971D}\\x{971E}\\x{971F}\\x{9720}\\x{9721}\\x{9722}\\x{9723}' .\n          '\\x{9724}\\x{9725}\\x{9726}\\x{9727}\\x{9728}\\x{9729}\\x{972A}\\x{972B}\\x{972C}' .\n          '\\x{972D}\\x{972E}\\x{972F}\\x{9730}\\x{9731}\\x{9732}\\x{9735}\\x{9736}\\x{9738}' .\n          '\\x{9739}\\x{973A}\\x{973B}\\x{973C}\\x{973D}\\x{973E}\\x{973F}\\x{9742}\\x{9743}' .\n          '\\x{9744}\\x{9745}\\x{9746}\\x{9747}\\x{9748}\\x{9749}\\x{974A}\\x{974B}\\x{974C}' .\n          '\\x{974E}\\x{974F}\\x{9750}\\x{9751}\\x{9752}\\x{9753}\\x{9754}\\x{9755}\\x{9756}' .\n          '\\x{9758}\\x{9759}\\x{975A}\\x{975B}\\x{975C}\\x{975D}\\x{975E}\\x{975F}\\x{9760}' .\n          '\\x{9761}\\x{9762}\\x{9765}\\x{9766}\\x{9767}\\x{9768}\\x{9769}\\x{976A}\\x{976B}' .\n          '\\x{976C}\\x{976D}\\x{976E}\\x{976F}\\x{9770}\\x{9772}\\x{9773}\\x{9774}\\x{9776}' .\n          '\\x{9777}\\x{9778}\\x{9779}\\x{977A}\\x{977B}\\x{977C}\\x{977D}\\x{977E}\\x{977F}' .\n          '\\x{9780}\\x{9781}\\x{9782}\\x{9783}\\x{9784}\\x{9785}\\x{9786}\\x{9788}\\x{978A}' .\n          '\\x{978B}\\x{978C}\\x{978D}\\x{978E}\\x{978F}\\x{9790}\\x{9791}\\x{9792}\\x{9793}' .\n          '\\x{9794}\\x{9795}\\x{9796}\\x{9797}\\x{9798}\\x{9799}\\x{979A}\\x{979C}\\x{979D}' .\n          '\\x{979E}\\x{979F}\\x{97A0}\\x{97A1}\\x{97A2}\\x{97A3}\\x{97A4}\\x{97A5}\\x{97A6}' .\n          '\\x{97A7}\\x{97A8}\\x{97AA}\\x{97AB}\\x{97AC}\\x{97AD}\\x{97AE}\\x{97AF}\\x{97B2}' .\n          '\\x{97B3}\\x{97B4}\\x{97B6}\\x{97B7}\\x{97B8}\\x{97B9}\\x{97BA}\\x{97BB}\\x{97BC}' .\n          '\\x{97BD}\\x{97BF}\\x{97C1}\\x{97C2}\\x{97C3}\\x{97C4}\\x{97C5}\\x{97C6}\\x{97C7}' .\n          '\\x{97C8}\\x{97C9}\\x{97CA}\\x{97CB}\\x{97CC}\\x{97CD}\\x{97CE}\\x{97CF}\\x{97D0}' .\n          '\\x{97D1}\\x{97D3}\\x{97D4}\\x{97D5}\\x{97D6}\\x{97D7}\\x{97D8}\\x{97D9}\\x{97DA}' .\n          '\\x{97DB}\\x{97DC}\\x{97DD}\\x{97DE}\\x{97DF}\\x{97E0}\\x{97E1}\\x{97E2}\\x{97E3}' .\n          '\\x{97E4}\\x{97E5}\\x{97E6}\\x{97E7}\\x{97E8}\\x{97E9}\\x{97EA}\\x{97EB}\\x{97EC}' .\n          '\\x{97ED}\\x{97EE}\\x{97EF}\\x{97F0}\\x{97F1}\\x{97F2}\\x{97F3}\\x{97F4}\\x{97F5}' .\n          '\\x{97F6}\\x{97F7}\\x{97F8}\\x{97F9}\\x{97FA}\\x{97FB}\\x{97FD}\\x{97FE}\\x{97FF}' .\n          '\\x{9800}\\x{9801}\\x{9802}\\x{9803}\\x{9804}\\x{9805}\\x{9806}\\x{9807}\\x{9808}' .\n          '\\x{9809}\\x{980A}\\x{980B}\\x{980C}\\x{980D}\\x{980E}\\x{980F}\\x{9810}\\x{9811}' .\n          '\\x{9812}\\x{9813}\\x{9814}\\x{9815}\\x{9816}\\x{9817}\\x{9818}\\x{9819}\\x{981A}' .\n          '\\x{981B}\\x{981C}\\x{981D}\\x{981E}\\x{9820}\\x{9821}\\x{9822}\\x{9823}\\x{9824}' .\n          '\\x{9826}\\x{9827}\\x{9828}\\x{9829}\\x{982B}\\x{982D}\\x{982E}\\x{982F}\\x{9830}' .\n          '\\x{9831}\\x{9832}\\x{9834}\\x{9835}\\x{9836}\\x{9837}\\x{9838}\\x{9839}\\x{983B}' .\n          '\\x{983C}\\x{983D}\\x{983F}\\x{9840}\\x{9841}\\x{9843}\\x{9844}\\x{9845}\\x{9846}' .\n          '\\x{9848}\\x{9849}\\x{984A}\\x{984C}\\x{984D}\\x{984E}\\x{984F}\\x{9850}\\x{9851}' .\n          '\\x{9852}\\x{9853}\\x{9854}\\x{9855}\\x{9857}\\x{9858}\\x{9859}\\x{985A}\\x{985B}' .\n          '\\x{985C}\\x{985D}\\x{985E}\\x{985F}\\x{9860}\\x{9861}\\x{9862}\\x{9863}\\x{9864}' .\n          '\\x{9865}\\x{9867}\\x{9869}\\x{986A}\\x{986B}\\x{986C}\\x{986D}\\x{986E}\\x{986F}' .\n          '\\x{9870}\\x{9871}\\x{9872}\\x{9873}\\x{9874}\\x{9875}\\x{9876}\\x{9877}\\x{9878}' .\n          '\\x{9879}\\x{987A}\\x{987B}\\x{987C}\\x{987D}\\x{987E}\\x{987F}\\x{9880}\\x{9881}' .\n          '\\x{9882}\\x{9883}\\x{9884}\\x{9885}\\x{9886}\\x{9887}\\x{9888}\\x{9889}\\x{988A}' .\n          '\\x{988B}\\x{988C}\\x{988D}\\x{988E}\\x{988F}\\x{9890}\\x{9891}\\x{9892}\\x{9893}' .\n          '\\x{9894}\\x{9895}\\x{9896}\\x{9897}\\x{9898}\\x{9899}\\x{989A}\\x{989B}\\x{989C}' .\n          '\\x{989D}\\x{989E}\\x{989F}\\x{98A0}\\x{98A1}\\x{98A2}\\x{98A3}\\x{98A4}\\x{98A5}' .\n          '\\x{98A6}\\x{98A7}\\x{98A8}\\x{98A9}\\x{98AA}\\x{98AB}\\x{98AC}\\x{98AD}\\x{98AE}' .\n          '\\x{98AF}\\x{98B0}\\x{98B1}\\x{98B2}\\x{98B3}\\x{98B4}\\x{98B5}\\x{98B6}\\x{98B8}' .\n          '\\x{98B9}\\x{98BA}\\x{98BB}\\x{98BC}\\x{98BD}\\x{98BE}\\x{98BF}\\x{98C0}\\x{98C1}' .\n          '\\x{98C2}\\x{98C3}\\x{98C4}\\x{98C5}\\x{98C6}\\x{98C8}\\x{98C9}\\x{98CB}\\x{98CC}' .\n          '\\x{98CD}\\x{98CE}\\x{98CF}\\x{98D0}\\x{98D1}\\x{98D2}\\x{98D3}\\x{98D4}\\x{98D5}' .\n          '\\x{98D6}\\x{98D7}\\x{98D8}\\x{98D9}\\x{98DA}\\x{98DB}\\x{98DC}\\x{98DD}\\x{98DE}' .\n          '\\x{98DF}\\x{98E0}\\x{98E2}\\x{98E3}\\x{98E5}\\x{98E6}\\x{98E7}\\x{98E8}\\x{98E9}' .\n          '\\x{98EA}\\x{98EB}\\x{98ED}\\x{98EF}\\x{98F0}\\x{98F2}\\x{98F3}\\x{98F4}\\x{98F5}' .\n          '\\x{98F6}\\x{98F7}\\x{98F9}\\x{98FA}\\x{98FC}\\x{98FD}\\x{98FE}\\x{98FF}\\x{9900}' .\n          '\\x{9901}\\x{9902}\\x{9903}\\x{9904}\\x{9905}\\x{9906}\\x{9907}\\x{9908}\\x{9909}' .\n          '\\x{990A}\\x{990B}\\x{990C}\\x{990D}\\x{990E}\\x{990F}\\x{9910}\\x{9911}\\x{9912}' .\n          '\\x{9913}\\x{9914}\\x{9915}\\x{9916}\\x{9917}\\x{9918}\\x{991A}\\x{991B}\\x{991C}' .\n          '\\x{991D}\\x{991E}\\x{991F}\\x{9920}\\x{9921}\\x{9922}\\x{9923}\\x{9924}\\x{9925}' .\n          '\\x{9926}\\x{9927}\\x{9928}\\x{9929}\\x{992A}\\x{992B}\\x{992C}\\x{992D}\\x{992E}' .\n          '\\x{992F}\\x{9930}\\x{9931}\\x{9932}\\x{9933}\\x{9934}\\x{9935}\\x{9936}\\x{9937}' .\n          '\\x{9938}\\x{9939}\\x{993A}\\x{993C}\\x{993D}\\x{993E}\\x{993F}\\x{9940}\\x{9941}' .\n          '\\x{9942}\\x{9943}\\x{9945}\\x{9946}\\x{9947}\\x{9948}\\x{9949}\\x{994A}\\x{994B}' .\n          '\\x{994C}\\x{994E}\\x{994F}\\x{9950}\\x{9951}\\x{9952}\\x{9953}\\x{9954}\\x{9955}' .\n          '\\x{9956}\\x{9957}\\x{9958}\\x{9959}\\x{995B}\\x{995C}\\x{995E}\\x{995F}\\x{9960}' .\n          '\\x{9961}\\x{9962}\\x{9963}\\x{9964}\\x{9965}\\x{9966}\\x{9967}\\x{9968}\\x{9969}' .\n          '\\x{996A}\\x{996B}\\x{996C}\\x{996D}\\x{996E}\\x{996F}\\x{9970}\\x{9971}\\x{9972}' .\n          '\\x{9973}\\x{9974}\\x{9975}\\x{9976}\\x{9977}\\x{9978}\\x{9979}\\x{997A}\\x{997B}' .\n          '\\x{997C}\\x{997D}\\x{997E}\\x{997F}\\x{9980}\\x{9981}\\x{9982}\\x{9983}\\x{9984}' .\n          '\\x{9985}\\x{9986}\\x{9987}\\x{9988}\\x{9989}\\x{998A}\\x{998B}\\x{998C}\\x{998D}' .\n          '\\x{998E}\\x{998F}\\x{9990}\\x{9991}\\x{9992}\\x{9993}\\x{9994}\\x{9995}\\x{9996}' .\n          '\\x{9997}\\x{9998}\\x{9999}\\x{999A}\\x{999B}\\x{999C}\\x{999D}\\x{999E}\\x{999F}' .\n          '\\x{99A0}\\x{99A1}\\x{99A2}\\x{99A3}\\x{99A4}\\x{99A5}\\x{99A6}\\x{99A7}\\x{99A8}' .\n          '\\x{99A9}\\x{99AA}\\x{99AB}\\x{99AC}\\x{99AD}\\x{99AE}\\x{99AF}\\x{99B0}\\x{99B1}' .\n          '\\x{99B2}\\x{99B3}\\x{99B4}\\x{99B5}\\x{99B6}\\x{99B7}\\x{99B8}\\x{99B9}\\x{99BA}' .\n          '\\x{99BB}\\x{99BC}\\x{99BD}\\x{99BE}\\x{99C0}\\x{99C1}\\x{99C2}\\x{99C3}\\x{99C4}' .\n          '\\x{99C6}\\x{99C7}\\x{99C8}\\x{99C9}\\x{99CA}\\x{99CB}\\x{99CC}\\x{99CD}\\x{99CE}' .\n          '\\x{99CF}\\x{99D0}\\x{99D1}\\x{99D2}\\x{99D3}\\x{99D4}\\x{99D5}\\x{99D6}\\x{99D7}' .\n          '\\x{99D8}\\x{99D9}\\x{99DA}\\x{99DB}\\x{99DC}\\x{99DD}\\x{99DE}\\x{99DF}\\x{99E1}' .\n          '\\x{99E2}\\x{99E3}\\x{99E4}\\x{99E5}\\x{99E7}\\x{99E8}\\x{99E9}\\x{99EA}\\x{99EC}' .\n          '\\x{99ED}\\x{99EE}\\x{99EF}\\x{99F0}\\x{99F1}\\x{99F2}\\x{99F3}\\x{99F4}\\x{99F6}' .\n          '\\x{99F7}\\x{99F8}\\x{99F9}\\x{99FA}\\x{99FB}\\x{99FC}\\x{99FD}\\x{99FE}\\x{99FF}' .\n          '\\x{9A00}\\x{9A01}\\x{9A02}\\x{9A03}\\x{9A04}\\x{9A05}\\x{9A06}\\x{9A07}\\x{9A08}' .\n          '\\x{9A09}\\x{9A0A}\\x{9A0B}\\x{9A0C}\\x{9A0D}\\x{9A0E}\\x{9A0F}\\x{9A11}\\x{9A14}' .\n          '\\x{9A15}\\x{9A16}\\x{9A19}\\x{9A1A}\\x{9A1B}\\x{9A1C}\\x{9A1D}\\x{9A1E}\\x{9A1F}' .\n          '\\x{9A20}\\x{9A21}\\x{9A22}\\x{9A23}\\x{9A24}\\x{9A25}\\x{9A26}\\x{9A27}\\x{9A29}' .\n          '\\x{9A2A}\\x{9A2B}\\x{9A2C}\\x{9A2D}\\x{9A2E}\\x{9A2F}\\x{9A30}\\x{9A31}\\x{9A32}' .\n          '\\x{9A33}\\x{9A34}\\x{9A35}\\x{9A36}\\x{9A37}\\x{9A38}\\x{9A39}\\x{9A3A}\\x{9A3C}' .\n          '\\x{9A3D}\\x{9A3E}\\x{9A3F}\\x{9A40}\\x{9A41}\\x{9A42}\\x{9A43}\\x{9A44}\\x{9A45}' .\n          '\\x{9A46}\\x{9A47}\\x{9A48}\\x{9A49}\\x{9A4A}\\x{9A4B}\\x{9A4C}\\x{9A4D}\\x{9A4E}' .\n          '\\x{9A4F}\\x{9A50}\\x{9A52}\\x{9A53}\\x{9A54}\\x{9A55}\\x{9A56}\\x{9A57}\\x{9A59}' .\n          '\\x{9A5A}\\x{9A5B}\\x{9A5C}\\x{9A5E}\\x{9A5F}\\x{9A60}\\x{9A61}\\x{9A62}\\x{9A64}' .\n          '\\x{9A65}\\x{9A66}\\x{9A67}\\x{9A68}\\x{9A69}\\x{9A6A}\\x{9A6B}\\x{9A6C}\\x{9A6D}' .\n          '\\x{9A6E}\\x{9A6F}\\x{9A70}\\x{9A71}\\x{9A72}\\x{9A73}\\x{9A74}\\x{9A75}\\x{9A76}' .\n          '\\x{9A77}\\x{9A78}\\x{9A79}\\x{9A7A}\\x{9A7B}\\x{9A7C}\\x{9A7D}\\x{9A7E}\\x{9A7F}' .\n          '\\x{9A80}\\x{9A81}\\x{9A82}\\x{9A83}\\x{9A84}\\x{9A85}\\x{9A86}\\x{9A87}\\x{9A88}' .\n          '\\x{9A89}\\x{9A8A}\\x{9A8B}\\x{9A8C}\\x{9A8D}\\x{9A8E}\\x{9A8F}\\x{9A90}\\x{9A91}' .\n          '\\x{9A92}\\x{9A93}\\x{9A94}\\x{9A95}\\x{9A96}\\x{9A97}\\x{9A98}\\x{9A99}\\x{9A9A}' .\n          '\\x{9A9B}\\x{9A9C}\\x{9A9D}\\x{9A9E}\\x{9A9F}\\x{9AA0}\\x{9AA1}\\x{9AA2}\\x{9AA3}' .\n          '\\x{9AA4}\\x{9AA5}\\x{9AA6}\\x{9AA7}\\x{9AA8}\\x{9AAA}\\x{9AAB}\\x{9AAC}\\x{9AAD}' .\n          '\\x{9AAE}\\x{9AAF}\\x{9AB0}\\x{9AB1}\\x{9AB2}\\x{9AB3}\\x{9AB4}\\x{9AB5}\\x{9AB6}' .\n          '\\x{9AB7}\\x{9AB8}\\x{9AB9}\\x{9ABA}\\x{9ABB}\\x{9ABC}\\x{9ABE}\\x{9ABF}\\x{9AC0}' .\n          '\\x{9AC1}\\x{9AC2}\\x{9AC3}\\x{9AC4}\\x{9AC5}\\x{9AC6}\\x{9AC7}\\x{9AC9}\\x{9ACA}' .\n          '\\x{9ACB}\\x{9ACC}\\x{9ACD}\\x{9ACE}\\x{9ACF}\\x{9AD0}\\x{9AD1}\\x{9AD2}\\x{9AD3}' .\n          '\\x{9AD4}\\x{9AD5}\\x{9AD6}\\x{9AD8}\\x{9AD9}\\x{9ADA}\\x{9ADB}\\x{9ADC}\\x{9ADD}' .\n          '\\x{9ADE}\\x{9ADF}\\x{9AE1}\\x{9AE2}\\x{9AE3}\\x{9AE5}\\x{9AE6}\\x{9AE7}\\x{9AEA}' .\n          '\\x{9AEB}\\x{9AEC}\\x{9AED}\\x{9AEE}\\x{9AEF}\\x{9AF1}\\x{9AF2}\\x{9AF3}\\x{9AF4}' .\n          '\\x{9AF5}\\x{9AF6}\\x{9AF7}\\x{9AF8}\\x{9AF9}\\x{9AFA}\\x{9AFB}\\x{9AFC}\\x{9AFD}' .\n          '\\x{9AFE}\\x{9AFF}\\x{9B01}\\x{9B03}\\x{9B04}\\x{9B05}\\x{9B06}\\x{9B07}\\x{9B08}' .\n          '\\x{9B0A}\\x{9B0B}\\x{9B0C}\\x{9B0D}\\x{9B0E}\\x{9B0F}\\x{9B10}\\x{9B11}\\x{9B12}' .\n          '\\x{9B13}\\x{9B15}\\x{9B16}\\x{9B17}\\x{9B18}\\x{9B19}\\x{9B1A}\\x{9B1C}\\x{9B1D}' .\n          '\\x{9B1E}\\x{9B1F}\\x{9B20}\\x{9B21}\\x{9B22}\\x{9B23}\\x{9B24}\\x{9B25}\\x{9B26}' .\n          '\\x{9B27}\\x{9B28}\\x{9B29}\\x{9B2A}\\x{9B2B}\\x{9B2C}\\x{9B2D}\\x{9B2E}\\x{9B2F}' .\n          '\\x{9B30}\\x{9B31}\\x{9B32}\\x{9B33}\\x{9B35}\\x{9B36}\\x{9B37}\\x{9B38}\\x{9B39}' .\n          '\\x{9B3A}\\x{9B3B}\\x{9B3C}\\x{9B3E}\\x{9B3F}\\x{9B41}\\x{9B42}\\x{9B43}\\x{9B44}' .\n          '\\x{9B45}\\x{9B46}\\x{9B47}\\x{9B48}\\x{9B49}\\x{9B4A}\\x{9B4B}\\x{9B4C}\\x{9B4D}' .\n          '\\x{9B4E}\\x{9B4F}\\x{9B51}\\x{9B52}\\x{9B53}\\x{9B54}\\x{9B55}\\x{9B56}\\x{9B58}' .\n          '\\x{9B59}\\x{9B5A}\\x{9B5B}\\x{9B5C}\\x{9B5D}\\x{9B5E}\\x{9B5F}\\x{9B60}\\x{9B61}' .\n          '\\x{9B63}\\x{9B64}\\x{9B65}\\x{9B66}\\x{9B67}\\x{9B68}\\x{9B69}\\x{9B6A}\\x{9B6B}' .\n          '\\x{9B6C}\\x{9B6D}\\x{9B6E}\\x{9B6F}\\x{9B70}\\x{9B71}\\x{9B73}\\x{9B74}\\x{9B75}' .\n          '\\x{9B76}\\x{9B77}\\x{9B78}\\x{9B79}\\x{9B7A}\\x{9B7B}\\x{9B7C}\\x{9B7D}\\x{9B7E}' .\n          '\\x{9B7F}\\x{9B80}\\x{9B81}\\x{9B82}\\x{9B83}\\x{9B84}\\x{9B85}\\x{9B86}\\x{9B87}' .\n          '\\x{9B88}\\x{9B8A}\\x{9B8B}\\x{9B8D}\\x{9B8E}\\x{9B8F}\\x{9B90}\\x{9B91}\\x{9B92}' .\n          '\\x{9B93}\\x{9B94}\\x{9B95}\\x{9B96}\\x{9B97}\\x{9B98}\\x{9B9A}\\x{9B9B}\\x{9B9C}' .\n          '\\x{9B9D}\\x{9B9E}\\x{9B9F}\\x{9BA0}\\x{9BA1}\\x{9BA2}\\x{9BA3}\\x{9BA4}\\x{9BA5}' .\n          '\\x{9BA6}\\x{9BA7}\\x{9BA8}\\x{9BA9}\\x{9BAA}\\x{9BAB}\\x{9BAC}\\x{9BAD}\\x{9BAE}' .\n          '\\x{9BAF}\\x{9BB0}\\x{9BB1}\\x{9BB2}\\x{9BB3}\\x{9BB4}\\x{9BB5}\\x{9BB6}\\x{9BB7}' .\n          '\\x{9BB8}\\x{9BB9}\\x{9BBA}\\x{9BBB}\\x{9BBC}\\x{9BBD}\\x{9BBE}\\x{9BBF}\\x{9BC0}' .\n          '\\x{9BC1}\\x{9BC3}\\x{9BC4}\\x{9BC5}\\x{9BC6}\\x{9BC7}\\x{9BC8}\\x{9BC9}\\x{9BCA}' .\n          '\\x{9BCB}\\x{9BCC}\\x{9BCD}\\x{9BCE}\\x{9BCF}\\x{9BD0}\\x{9BD1}\\x{9BD2}\\x{9BD3}' .\n          '\\x{9BD4}\\x{9BD5}\\x{9BD6}\\x{9BD7}\\x{9BD8}\\x{9BD9}\\x{9BDA}\\x{9BDB}\\x{9BDC}' .\n          '\\x{9BDD}\\x{9BDE}\\x{9BDF}\\x{9BE0}\\x{9BE1}\\x{9BE2}\\x{9BE3}\\x{9BE4}\\x{9BE5}' .\n          '\\x{9BE6}\\x{9BE7}\\x{9BE8}\\x{9BE9}\\x{9BEA}\\x{9BEB}\\x{9BEC}\\x{9BED}\\x{9BEE}' .\n          '\\x{9BEF}\\x{9BF0}\\x{9BF1}\\x{9BF2}\\x{9BF3}\\x{9BF4}\\x{9BF5}\\x{9BF7}\\x{9BF8}' .\n          '\\x{9BF9}\\x{9BFA}\\x{9BFB}\\x{9BFC}\\x{9BFD}\\x{9BFE}\\x{9BFF}\\x{9C02}\\x{9C05}' .\n          '\\x{9C06}\\x{9C07}\\x{9C08}\\x{9C09}\\x{9C0A}\\x{9C0B}\\x{9C0C}\\x{9C0D}\\x{9C0E}' .\n          '\\x{9C0F}\\x{9C10}\\x{9C11}\\x{9C12}\\x{9C13}\\x{9C14}\\x{9C15}\\x{9C16}\\x{9C17}' .\n          '\\x{9C18}\\x{9C19}\\x{9C1A}\\x{9C1B}\\x{9C1C}\\x{9C1D}\\x{9C1E}\\x{9C1F}\\x{9C20}' .\n          '\\x{9C21}\\x{9C22}\\x{9C23}\\x{9C24}\\x{9C25}\\x{9C26}\\x{9C27}\\x{9C28}\\x{9C29}' .\n          '\\x{9C2A}\\x{9C2B}\\x{9C2C}\\x{9C2D}\\x{9C2F}\\x{9C30}\\x{9C31}\\x{9C32}\\x{9C33}' .\n          '\\x{9C34}\\x{9C35}\\x{9C36}\\x{9C37}\\x{9C38}\\x{9C39}\\x{9C3A}\\x{9C3B}\\x{9C3C}' .\n          '\\x{9C3D}\\x{9C3E}\\x{9C3F}\\x{9C40}\\x{9C41}\\x{9C43}\\x{9C44}\\x{9C45}\\x{9C46}' .\n          '\\x{9C47}\\x{9C48}\\x{9C49}\\x{9C4A}\\x{9C4B}\\x{9C4C}\\x{9C4D}\\x{9C4E}\\x{9C50}' .\n          '\\x{9C52}\\x{9C53}\\x{9C54}\\x{9C55}\\x{9C56}\\x{9C57}\\x{9C58}\\x{9C59}\\x{9C5A}' .\n          '\\x{9C5B}\\x{9C5C}\\x{9C5D}\\x{9C5E}\\x{9C5F}\\x{9C60}\\x{9C62}\\x{9C63}\\x{9C65}' .\n          '\\x{9C66}\\x{9C67}\\x{9C68}\\x{9C69}\\x{9C6A}\\x{9C6B}\\x{9C6C}\\x{9C6D}\\x{9C6E}' .\n          '\\x{9C6F}\\x{9C70}\\x{9C71}\\x{9C72}\\x{9C73}\\x{9C74}\\x{9C75}\\x{9C77}\\x{9C78}' .\n          '\\x{9C79}\\x{9C7A}\\x{9C7C}\\x{9C7D}\\x{9C7E}\\x{9C7F}\\x{9C80}\\x{9C81}\\x{9C82}' .\n          '\\x{9C83}\\x{9C84}\\x{9C85}\\x{9C86}\\x{9C87}\\x{9C88}\\x{9C89}\\x{9C8A}\\x{9C8B}' .\n          '\\x{9C8C}\\x{9C8D}\\x{9C8E}\\x{9C8F}\\x{9C90}\\x{9C91}\\x{9C92}\\x{9C93}\\x{9C94}' .\n          '\\x{9C95}\\x{9C96}\\x{9C97}\\x{9C98}\\x{9C99}\\x{9C9A}\\x{9C9B}\\x{9C9C}\\x{9C9D}' .\n          '\\x{9C9E}\\x{9C9F}\\x{9CA0}\\x{9CA1}\\x{9CA2}\\x{9CA3}\\x{9CA4}\\x{9CA5}\\x{9CA6}' .\n          '\\x{9CA7}\\x{9CA8}\\x{9CA9}\\x{9CAA}\\x{9CAB}\\x{9CAC}\\x{9CAD}\\x{9CAE}\\x{9CAF}' .\n          '\\x{9CB0}\\x{9CB1}\\x{9CB2}\\x{9CB3}\\x{9CB4}\\x{9CB5}\\x{9CB6}\\x{9CB7}\\x{9CB8}' .\n          '\\x{9CB9}\\x{9CBA}\\x{9CBB}\\x{9CBC}\\x{9CBD}\\x{9CBE}\\x{9CBF}\\x{9CC0}\\x{9CC1}' .\n          '\\x{9CC2}\\x{9CC3}\\x{9CC4}\\x{9CC5}\\x{9CC6}\\x{9CC7}\\x{9CC8}\\x{9CC9}\\x{9CCA}' .\n          '\\x{9CCB}\\x{9CCC}\\x{9CCD}\\x{9CCE}\\x{9CCF}\\x{9CD0}\\x{9CD1}\\x{9CD2}\\x{9CD3}' .\n          '\\x{9CD4}\\x{9CD5}\\x{9CD6}\\x{9CD7}\\x{9CD8}\\x{9CD9}\\x{9CDA}\\x{9CDB}\\x{9CDC}' .\n          '\\x{9CDD}\\x{9CDE}\\x{9CDF}\\x{9CE0}\\x{9CE1}\\x{9CE2}\\x{9CE3}\\x{9CE4}\\x{9CE5}' .\n          '\\x{9CE6}\\x{9CE7}\\x{9CE8}\\x{9CE9}\\x{9CEA}\\x{9CEB}\\x{9CEC}\\x{9CED}\\x{9CEE}' .\n          '\\x{9CEF}\\x{9CF0}\\x{9CF1}\\x{9CF2}\\x{9CF3}\\x{9CF4}\\x{9CF5}\\x{9CF6}\\x{9CF7}' .\n          '\\x{9CF8}\\x{9CF9}\\x{9CFA}\\x{9CFB}\\x{9CFC}\\x{9CFD}\\x{9CFE}\\x{9CFF}\\x{9D00}' .\n          '\\x{9D01}\\x{9D02}\\x{9D03}\\x{9D04}\\x{9D05}\\x{9D06}\\x{9D07}\\x{9D08}\\x{9D09}' .\n          '\\x{9D0A}\\x{9D0B}\\x{9D0F}\\x{9D10}\\x{9D12}\\x{9D13}\\x{9D14}\\x{9D15}\\x{9D16}' .\n          '\\x{9D17}\\x{9D18}\\x{9D19}\\x{9D1A}\\x{9D1B}\\x{9D1C}\\x{9D1D}\\x{9D1E}\\x{9D1F}' .\n          '\\x{9D20}\\x{9D21}\\x{9D22}\\x{9D23}\\x{9D24}\\x{9D25}\\x{9D26}\\x{9D28}\\x{9D29}' .\n          '\\x{9D2B}\\x{9D2D}\\x{9D2E}\\x{9D2F}\\x{9D30}\\x{9D31}\\x{9D32}\\x{9D33}\\x{9D34}' .\n          '\\x{9D36}\\x{9D37}\\x{9D38}\\x{9D39}\\x{9D3A}\\x{9D3B}\\x{9D3D}\\x{9D3E}\\x{9D3F}' .\n          '\\x{9D40}\\x{9D41}\\x{9D42}\\x{9D43}\\x{9D45}\\x{9D46}\\x{9D47}\\x{9D48}\\x{9D49}' .\n          '\\x{9D4A}\\x{9D4B}\\x{9D4C}\\x{9D4D}\\x{9D4E}\\x{9D4F}\\x{9D50}\\x{9D51}\\x{9D52}' .\n          '\\x{9D53}\\x{9D54}\\x{9D55}\\x{9D56}\\x{9D57}\\x{9D58}\\x{9D59}\\x{9D5A}\\x{9D5B}' .\n          '\\x{9D5C}\\x{9D5D}\\x{9D5E}\\x{9D5F}\\x{9D60}\\x{9D61}\\x{9D62}\\x{9D63}\\x{9D64}' .\n          '\\x{9D65}\\x{9D66}\\x{9D67}\\x{9D68}\\x{9D69}\\x{9D6A}\\x{9D6B}\\x{9D6C}\\x{9D6E}' .\n          '\\x{9D6F}\\x{9D70}\\x{9D71}\\x{9D72}\\x{9D73}\\x{9D74}\\x{9D75}\\x{9D76}\\x{9D77}' .\n          '\\x{9D78}\\x{9D79}\\x{9D7A}\\x{9D7B}\\x{9D7C}\\x{9D7D}\\x{9D7E}\\x{9D7F}\\x{9D80}' .\n          '\\x{9D81}\\x{9D82}\\x{9D83}\\x{9D84}\\x{9D85}\\x{9D86}\\x{9D87}\\x{9D88}\\x{9D89}' .\n          '\\x{9D8A}\\x{9D8B}\\x{9D8C}\\x{9D8D}\\x{9D8E}\\x{9D90}\\x{9D91}\\x{9D92}\\x{9D93}' .\n          '\\x{9D94}\\x{9D96}\\x{9D97}\\x{9D98}\\x{9D99}\\x{9D9A}\\x{9D9B}\\x{9D9C}\\x{9D9D}' .\n          '\\x{9D9E}\\x{9D9F}\\x{9DA0}\\x{9DA1}\\x{9DA2}\\x{9DA3}\\x{9DA4}\\x{9DA5}\\x{9DA6}' .\n          '\\x{9DA7}\\x{9DA8}\\x{9DA9}\\x{9DAA}\\x{9DAB}\\x{9DAC}\\x{9DAD}\\x{9DAF}\\x{9DB0}' .\n          '\\x{9DB1}\\x{9DB2}\\x{9DB3}\\x{9DB4}\\x{9DB5}\\x{9DB6}\\x{9DB7}\\x{9DB8}\\x{9DB9}' .\n          '\\x{9DBA}\\x{9DBB}\\x{9DBC}\\x{9DBE}\\x{9DBF}\\x{9DC1}\\x{9DC2}\\x{9DC3}\\x{9DC4}' .\n          '\\x{9DC5}\\x{9DC7}\\x{9DC8}\\x{9DC9}\\x{9DCA}\\x{9DCB}\\x{9DCC}\\x{9DCD}\\x{9DCE}' .\n          '\\x{9DCF}\\x{9DD0}\\x{9DD1}\\x{9DD2}\\x{9DD3}\\x{9DD4}\\x{9DD5}\\x{9DD6}\\x{9DD7}' .\n          '\\x{9DD8}\\x{9DD9}\\x{9DDA}\\x{9DDB}\\x{9DDC}\\x{9DDD}\\x{9DDE}\\x{9DDF}\\x{9DE0}' .\n          '\\x{9DE1}\\x{9DE2}\\x{9DE3}\\x{9DE4}\\x{9DE5}\\x{9DE6}\\x{9DE7}\\x{9DE8}\\x{9DE9}' .\n          '\\x{9DEB}\\x{9DEC}\\x{9DED}\\x{9DEE}\\x{9DEF}\\x{9DF0}\\x{9DF1}\\x{9DF2}\\x{9DF3}' .\n          '\\x{9DF4}\\x{9DF5}\\x{9DF6}\\x{9DF7}\\x{9DF8}\\x{9DF9}\\x{9DFA}\\x{9DFB}\\x{9DFD}' .\n          '\\x{9DFE}\\x{9DFF}\\x{9E00}\\x{9E01}\\x{9E02}\\x{9E03}\\x{9E04}\\x{9E05}\\x{9E06}' .\n          '\\x{9E07}\\x{9E08}\\x{9E09}\\x{9E0A}\\x{9E0B}\\x{9E0C}\\x{9E0D}\\x{9E0F}\\x{9E10}' .\n          '\\x{9E11}\\x{9E12}\\x{9E13}\\x{9E14}\\x{9E15}\\x{9E17}\\x{9E18}\\x{9E19}\\x{9E1A}' .\n          '\\x{9E1B}\\x{9E1D}\\x{9E1E}\\x{9E1F}\\x{9E20}\\x{9E21}\\x{9E22}\\x{9E23}\\x{9E24}' .\n          '\\x{9E25}\\x{9E26}\\x{9E27}\\x{9E28}\\x{9E29}\\x{9E2A}\\x{9E2B}\\x{9E2C}\\x{9E2D}' .\n          '\\x{9E2E}\\x{9E2F}\\x{9E30}\\x{9E31}\\x{9E32}\\x{9E33}\\x{9E34}\\x{9E35}\\x{9E36}' .\n          '\\x{9E37}\\x{9E38}\\x{9E39}\\x{9E3A}\\x{9E3B}\\x{9E3C}\\x{9E3D}\\x{9E3E}\\x{9E3F}' .\n          '\\x{9E40}\\x{9E41}\\x{9E42}\\x{9E43}\\x{9E44}\\x{9E45}\\x{9E46}\\x{9E47}\\x{9E48}' .\n          '\\x{9E49}\\x{9E4A}\\x{9E4B}\\x{9E4C}\\x{9E4D}\\x{9E4E}\\x{9E4F}\\x{9E50}\\x{9E51}' .\n          '\\x{9E52}\\x{9E53}\\x{9E54}\\x{9E55}\\x{9E56}\\x{9E57}\\x{9E58}\\x{9E59}\\x{9E5A}' .\n          '\\x{9E5B}\\x{9E5C}\\x{9E5D}\\x{9E5E}\\x{9E5F}\\x{9E60}\\x{9E61}\\x{9E62}\\x{9E63}' .\n          '\\x{9E64}\\x{9E65}\\x{9E66}\\x{9E67}\\x{9E68}\\x{9E69}\\x{9E6A}\\x{9E6B}\\x{9E6C}' .\n          '\\x{9E6D}\\x{9E6E}\\x{9E6F}\\x{9E70}\\x{9E71}\\x{9E72}\\x{9E73}\\x{9E74}\\x{9E75}' .\n          '\\x{9E76}\\x{9E77}\\x{9E79}\\x{9E7A}\\x{9E7C}\\x{9E7D}\\x{9E7E}\\x{9E7F}\\x{9E80}' .\n          '\\x{9E81}\\x{9E82}\\x{9E83}\\x{9E84}\\x{9E85}\\x{9E86}\\x{9E87}\\x{9E88}\\x{9E89}' .\n          '\\x{9E8A}\\x{9E8B}\\x{9E8C}\\x{9E8D}\\x{9E8E}\\x{9E91}\\x{9E92}\\x{9E93}\\x{9E94}' .\n          '\\x{9E96}\\x{9E97}\\x{9E99}\\x{9E9A}\\x{9E9B}\\x{9E9C}\\x{9E9D}\\x{9E9F}\\x{9EA0}' .\n          '\\x{9EA1}\\x{9EA3}\\x{9EA4}\\x{9EA5}\\x{9EA6}\\x{9EA7}\\x{9EA8}\\x{9EA9}\\x{9EAA}' .\n          '\\x{9EAD}\\x{9EAE}\\x{9EAF}\\x{9EB0}\\x{9EB2}\\x{9EB3}\\x{9EB4}\\x{9EB5}\\x{9EB6}' .\n          '\\x{9EB7}\\x{9EB8}\\x{9EBB}\\x{9EBC}\\x{9EBD}\\x{9EBE}\\x{9EBF}\\x{9EC0}\\x{9EC1}' .\n          '\\x{9EC2}\\x{9EC3}\\x{9EC4}\\x{9EC5}\\x{9EC6}\\x{9EC7}\\x{9EC8}\\x{9EC9}\\x{9ECA}' .\n          '\\x{9ECB}\\x{9ECC}\\x{9ECD}\\x{9ECE}\\x{9ECF}\\x{9ED0}\\x{9ED1}\\x{9ED2}\\x{9ED3}' .\n          '\\x{9ED4}\\x{9ED5}\\x{9ED6}\\x{9ED7}\\x{9ED8}\\x{9ED9}\\x{9EDA}\\x{9EDB}\\x{9EDC}' .\n          '\\x{9EDD}\\x{9EDE}\\x{9EDF}\\x{9EE0}\\x{9EE1}\\x{9EE2}\\x{9EE3}\\x{9EE4}\\x{9EE5}' .\n          '\\x{9EE6}\\x{9EE7}\\x{9EE8}\\x{9EE9}\\x{9EEA}\\x{9EEB}\\x{9EED}\\x{9EEE}\\x{9EEF}' .\n          '\\x{9EF0}\\x{9EF2}\\x{9EF3}\\x{9EF4}\\x{9EF5}\\x{9EF6}\\x{9EF7}\\x{9EF8}\\x{9EF9}' .\n          '\\x{9EFA}\\x{9EFB}\\x{9EFC}\\x{9EFD}\\x{9EFE}\\x{9EFF}\\x{9F00}\\x{9F01}\\x{9F02}' .\n          '\\x{9F04}\\x{9F05}\\x{9F06}\\x{9F07}\\x{9F08}\\x{9F09}\\x{9F0A}\\x{9F0B}\\x{9F0C}' .\n          '\\x{9F0D}\\x{9F0E}\\x{9F0F}\\x{9F10}\\x{9F12}\\x{9F13}\\x{9F15}\\x{9F16}\\x{9F17}' .\n          '\\x{9F18}\\x{9F19}\\x{9F1A}\\x{9F1B}\\x{9F1C}\\x{9F1D}\\x{9F1E}\\x{9F1F}\\x{9F20}' .\n          '\\x{9F22}\\x{9F23}\\x{9F24}\\x{9F25}\\x{9F27}\\x{9F28}\\x{9F29}\\x{9F2A}\\x{9F2B}' .\n          '\\x{9F2C}\\x{9F2D}\\x{9F2E}\\x{9F2F}\\x{9F30}\\x{9F31}\\x{9F32}\\x{9F33}\\x{9F34}' .\n          '\\x{9F35}\\x{9F36}\\x{9F37}\\x{9F38}\\x{9F39}\\x{9F3A}\\x{9F3B}\\x{9F3C}\\x{9F3D}' .\n          '\\x{9F3E}\\x{9F3F}\\x{9F40}\\x{9F41}\\x{9F42}\\x{9F43}\\x{9F44}\\x{9F46}\\x{9F47}' .\n          '\\x{9F48}\\x{9F49}\\x{9F4A}\\x{9F4B}\\x{9F4C}\\x{9F4D}\\x{9F4E}\\x{9F4F}\\x{9F50}' .\n          '\\x{9F51}\\x{9F52}\\x{9F54}\\x{9F55}\\x{9F56}\\x{9F57}\\x{9F58}\\x{9F59}\\x{9F5A}' .\n          '\\x{9F5B}\\x{9F5C}\\x{9F5D}\\x{9F5E}\\x{9F5F}\\x{9F60}\\x{9F61}\\x{9F63}\\x{9F64}' .\n          '\\x{9F65}\\x{9F66}\\x{9F67}\\x{9F68}\\x{9F69}\\x{9F6A}\\x{9F6B}\\x{9F6C}\\x{9F6E}' .\n          '\\x{9F6F}\\x{9F70}\\x{9F71}\\x{9F72}\\x{9F73}\\x{9F74}\\x{9F75}\\x{9F76}\\x{9F77}' .\n          '\\x{9F78}\\x{9F79}\\x{9F7A}\\x{9F7B}\\x{9F7C}\\x{9F7D}\\x{9F7E}\\x{9F7F}\\x{9F80}' .\n          '\\x{9F81}\\x{9F82}\\x{9F83}\\x{9F84}\\x{9F85}\\x{9F86}\\x{9F87}\\x{9F88}\\x{9F89}' .\n          '\\x{9F8A}\\x{9F8B}\\x{9F8C}\\x{9F8D}\\x{9F8E}\\x{9F8F}\\x{9F90}\\x{9F91}\\x{9F92}' .\n          '\\x{9F93}\\x{9F94}\\x{9F95}\\x{9F96}\\x{9F97}\\x{9F98}\\x{9F99}\\x{9F9A}\\x{9F9B}' .\n          '\\x{9F9C}\\x{9F9D}\\x{9F9E}\\x{9F9F}\\x{9FA0}\\x{9FA2}\\x{9FA4}\\x{9FA5}]{1,20}$/iu',\n];\n"
  },
  {
    "path": "src/Hostname/Cn.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Hostname;\n\n/**\n * Resource file for chinese idn validation\n */\nreturn [\n    1  => '/^[\\x{002d}0-9a-z\\x{3447}\\x{3473}\\x{359E}\\x{360E}\\x{361A}\\x{3918}\\x{396E}\\x{39CF}\\x{39D0}' .\n          '\\x{39DF}\\x{3A73}\\x{3B4E}\\x{3C6E}\\x{3CE0}\\x{4056}\\x{415F}\\x{4337}\\x{43AC}' .\n          '\\x{43B1}\\x{43DD}\\x{44D6}\\x{464C}\\x{4661}\\x{4723}\\x{4729}\\x{477C}\\x{478D}' .\n          '\\x{4947}\\x{497A}\\x{497D}\\x{4982}\\x{4983}\\x{4985}\\x{4986}\\x{499B}\\x{499F}' .\n          '\\x{49B6}\\x{49B7}\\x{4C77}\\x{4C9F}\\x{4CA0}\\x{4CA1}\\x{4CA2}\\x{4CA3}\\x{4D13}' .\n          '\\x{4D14}\\x{4D15}\\x{4D16}\\x{4D17}\\x{4D18}\\x{4D19}\\x{4DAE}\\x{4E00}\\x{4E01}' .\n          '\\x{4E02}\\x{4E03}\\x{4E04}\\x{4E05}\\x{4E06}\\x{4E07}\\x{4E08}\\x{4E09}\\x{4E0A}' .\n          '\\x{4E0B}\\x{4E0C}\\x{4E0D}\\x{4E0E}\\x{4E0F}\\x{4E10}\\x{4E11}\\x{4E13}\\x{4E14}' .\n          '\\x{4E15}\\x{4E16}\\x{4E17}\\x{4E18}\\x{4E19}\\x{4E1A}\\x{4E1B}\\x{4E1C}\\x{4E1D}' .\n          '\\x{4E1E}\\x{4E1F}\\x{4E20}\\x{4E21}\\x{4E22}\\x{4E23}\\x{4E24}\\x{4E25}\\x{4E26}' .\n          '\\x{4E27}\\x{4E28}\\x{4E2A}\\x{4E2B}\\x{4E2C}\\x{4E2D}\\x{4E2E}\\x{4E2F}\\x{4E30}' .\n          '\\x{4E31}\\x{4E32}\\x{4E33}\\x{4E34}\\x{4E35}\\x{4E36}\\x{4E37}\\x{4E38}\\x{4E39}' .\n          '\\x{4E3A}\\x{4E3B}\\x{4E3C}\\x{4E3D}\\x{4E3E}\\x{4E3F}\\x{4E40}\\x{4E41}\\x{4E42}' .\n          '\\x{4E43}\\x{4E44}\\x{4E45}\\x{4E46}\\x{4E47}\\x{4E48}\\x{4E49}\\x{4E4A}\\x{4E4B}' .\n          '\\x{4E4C}\\x{4E4D}\\x{4E4E}\\x{4E4F}\\x{4E50}\\x{4E51}\\x{4E52}\\x{4E53}\\x{4E54}' .\n          '\\x{4E56}\\x{4E57}\\x{4E58}\\x{4E59}\\x{4E5A}\\x{4E5B}\\x{4E5C}\\x{4E5D}\\x{4E5E}' .\n          '\\x{4E5F}\\x{4E60}\\x{4E61}\\x{4E62}\\x{4E63}\\x{4E64}\\x{4E65}\\x{4E66}\\x{4E67}' .\n          '\\x{4E69}\\x{4E6A}\\x{4E6B}\\x{4E6C}\\x{4E6D}\\x{4E6E}\\x{4E6F}\\x{4E70}\\x{4E71}' .\n          '\\x{4E72}\\x{4E73}\\x{4E74}\\x{4E75}\\x{4E76}\\x{4E77}\\x{4E78}\\x{4E7A}\\x{4E7B}' .\n          '\\x{4E7C}\\x{4E7D}\\x{4E7E}\\x{4E7F}\\x{4E80}\\x{4E81}\\x{4E82}\\x{4E83}\\x{4E84}' .\n          '\\x{4E85}\\x{4E86}\\x{4E87}\\x{4E88}\\x{4E89}\\x{4E8B}\\x{4E8C}\\x{4E8D}\\x{4E8E}' .\n          '\\x{4E8F}\\x{4E90}\\x{4E91}\\x{4E92}\\x{4E93}\\x{4E94}\\x{4E95}\\x{4E97}\\x{4E98}' .\n          '\\x{4E99}\\x{4E9A}\\x{4E9B}\\x{4E9C}\\x{4E9D}\\x{4E9E}\\x{4E9F}\\x{4EA0}\\x{4EA1}' .\n          '\\x{4EA2}\\x{4EA4}\\x{4EA5}\\x{4EA6}\\x{4EA7}\\x{4EA8}\\x{4EA9}\\x{4EAA}\\x{4EAB}' .\n          '\\x{4EAC}\\x{4EAD}\\x{4EAE}\\x{4EAF}\\x{4EB0}\\x{4EB1}\\x{4EB2}\\x{4EB3}\\x{4EB4}' .\n          '\\x{4EB5}\\x{4EB6}\\x{4EB7}\\x{4EB8}\\x{4EB9}\\x{4EBA}\\x{4EBB}\\x{4EBD}\\x{4EBE}' .\n          '\\x{4EBF}\\x{4EC0}\\x{4EC1}\\x{4EC2}\\x{4EC3}\\x{4EC4}\\x{4EC5}\\x{4EC6}\\x{4EC7}' .\n          '\\x{4EC8}\\x{4EC9}\\x{4ECA}\\x{4ECB}\\x{4ECD}\\x{4ECE}\\x{4ECF}\\x{4ED0}\\x{4ED1}' .\n          '\\x{4ED2}\\x{4ED3}\\x{4ED4}\\x{4ED5}\\x{4ED6}\\x{4ED7}\\x{4ED8}\\x{4ED9}\\x{4EDA}' .\n          '\\x{4EDB}\\x{4EDC}\\x{4EDD}\\x{4EDE}\\x{4EDF}\\x{4EE0}\\x{4EE1}\\x{4EE2}\\x{4EE3}' .\n          '\\x{4EE4}\\x{4EE5}\\x{4EE6}\\x{4EE8}\\x{4EE9}\\x{4EEA}\\x{4EEB}\\x{4EEC}\\x{4EEF}' .\n          '\\x{4EF0}\\x{4EF1}\\x{4EF2}\\x{4EF3}\\x{4EF4}\\x{4EF5}\\x{4EF6}\\x{4EF7}\\x{4EFB}' .\n          '\\x{4EFD}\\x{4EFF}\\x{4F00}\\x{4F01}\\x{4F02}\\x{4F03}\\x{4F04}\\x{4F05}\\x{4F06}' .\n          '\\x{4F08}\\x{4F09}\\x{4F0A}\\x{4F0B}\\x{4F0C}\\x{4F0D}\\x{4F0E}\\x{4F0F}\\x{4F10}' .\n          '\\x{4F11}\\x{4F12}\\x{4F13}\\x{4F14}\\x{4F15}\\x{4F17}\\x{4F18}\\x{4F19}\\x{4F1A}' .\n          '\\x{4F1B}\\x{4F1C}\\x{4F1D}\\x{4F1E}\\x{4F1F}\\x{4F20}\\x{4F21}\\x{4F22}\\x{4F23}' .\n          '\\x{4F24}\\x{4F25}\\x{4F26}\\x{4F27}\\x{4F29}\\x{4F2A}\\x{4F2B}\\x{4F2C}\\x{4F2D}' .\n          '\\x{4F2E}\\x{4F2F}\\x{4F30}\\x{4F32}\\x{4F33}\\x{4F34}\\x{4F36}\\x{4F38}\\x{4F39}' .\n          '\\x{4F3A}\\x{4F3B}\\x{4F3C}\\x{4F3D}\\x{4F3E}\\x{4F3F}\\x{4F41}\\x{4F42}\\x{4F43}' .\n          '\\x{4F45}\\x{4F46}\\x{4F47}\\x{4F48}\\x{4F49}\\x{4F4A}\\x{4F4B}\\x{4F4C}\\x{4F4D}' .\n          '\\x{4F4E}\\x{4F4F}\\x{4F50}\\x{4F51}\\x{4F52}\\x{4F53}\\x{4F54}\\x{4F55}\\x{4F56}' .\n          '\\x{4F57}\\x{4F58}\\x{4F59}\\x{4F5A}\\x{4F5B}\\x{4F5C}\\x{4F5D}\\x{4F5E}\\x{4F5F}' .\n          '\\x{4F60}\\x{4F61}\\x{4F62}\\x{4F63}\\x{4F64}\\x{4F65}\\x{4F66}\\x{4F67}\\x{4F68}' .\n          '\\x{4F69}\\x{4F6A}\\x{4F6B}\\x{4F6C}\\x{4F6D}\\x{4F6E}\\x{4F6F}\\x{4F70}\\x{4F72}' .\n          '\\x{4F73}\\x{4F74}\\x{4F75}\\x{4F76}\\x{4F77}\\x{4F78}\\x{4F79}\\x{4F7A}\\x{4F7B}' .\n          '\\x{4F7C}\\x{4F7D}\\x{4F7E}\\x{4F7F}\\x{4F80}\\x{4F81}\\x{4F82}\\x{4F83}\\x{4F84}' .\n          '\\x{4F85}\\x{4F86}\\x{4F87}\\x{4F88}\\x{4F89}\\x{4F8A}\\x{4F8B}\\x{4F8D}\\x{4F8F}' .\n          '\\x{4F90}\\x{4F91}\\x{4F92}\\x{4F93}\\x{4F94}\\x{4F95}\\x{4F96}\\x{4F97}\\x{4F98}' .\n          '\\x{4F99}\\x{4F9A}\\x{4F9B}\\x{4F9C}\\x{4F9D}\\x{4F9E}\\x{4F9F}\\x{4FA0}\\x{4FA1}' .\n          '\\x{4FA3}\\x{4FA4}\\x{4FA5}\\x{4FA6}\\x{4FA7}\\x{4FA8}\\x{4FA9}\\x{4FAA}\\x{4FAB}' .\n          '\\x{4FAC}\\x{4FAE}\\x{4FAF}\\x{4FB0}\\x{4FB1}\\x{4FB2}\\x{4FB3}\\x{4FB4}\\x{4FB5}' .\n          '\\x{4FB6}\\x{4FB7}\\x{4FB8}\\x{4FB9}\\x{4FBA}\\x{4FBB}\\x{4FBC}\\x{4FBE}\\x{4FBF}' .\n          '\\x{4FC0}\\x{4FC1}\\x{4FC2}\\x{4FC3}\\x{4FC4}\\x{4FC5}\\x{4FC7}\\x{4FC9}\\x{4FCA}' .\n          '\\x{4FCB}\\x{4FCD}\\x{4FCE}\\x{4FCF}\\x{4FD0}\\x{4FD1}\\x{4FD2}\\x{4FD3}\\x{4FD4}' .\n          '\\x{4FD5}\\x{4FD6}\\x{4FD7}\\x{4FD8}\\x{4FD9}\\x{4FDA}\\x{4FDB}\\x{4FDC}\\x{4FDD}' .\n          '\\x{4FDE}\\x{4FDF}\\x{4FE0}\\x{4FE1}\\x{4FE3}\\x{4FE4}\\x{4FE5}\\x{4FE6}\\x{4FE7}' .\n          '\\x{4FE8}\\x{4FE9}\\x{4FEA}\\x{4FEB}\\x{4FEC}\\x{4FED}\\x{4FEE}\\x{4FEF}\\x{4FF0}' .\n          '\\x{4FF1}\\x{4FF2}\\x{4FF3}\\x{4FF4}\\x{4FF5}\\x{4FF6}\\x{4FF7}\\x{4FF8}\\x{4FF9}' .\n          '\\x{4FFA}\\x{4FFB}\\x{4FFE}\\x{4FFF}\\x{5000}\\x{5001}\\x{5002}\\x{5003}\\x{5004}' .\n          '\\x{5005}\\x{5006}\\x{5007}\\x{5008}\\x{5009}\\x{500A}\\x{500B}\\x{500C}\\x{500D}' .\n          '\\x{500E}\\x{500F}\\x{5011}\\x{5012}\\x{5013}\\x{5014}\\x{5015}\\x{5016}\\x{5017}' .\n          '\\x{5018}\\x{5019}\\x{501A}\\x{501B}\\x{501C}\\x{501D}\\x{501E}\\x{501F}\\x{5020}' .\n          '\\x{5021}\\x{5022}\\x{5023}\\x{5024}\\x{5025}\\x{5026}\\x{5027}\\x{5028}\\x{5029}' .\n          '\\x{502A}\\x{502B}\\x{502C}\\x{502D}\\x{502E}\\x{502F}\\x{5030}\\x{5031}\\x{5032}' .\n          '\\x{5033}\\x{5035}\\x{5036}\\x{5037}\\x{5039}\\x{503A}\\x{503B}\\x{503C}\\x{503E}' .\n          '\\x{503F}\\x{5040}\\x{5041}\\x{5043}\\x{5044}\\x{5045}\\x{5046}\\x{5047}\\x{5048}' .\n          '\\x{5049}\\x{504A}\\x{504B}\\x{504C}\\x{504D}\\x{504E}\\x{504F}\\x{5051}\\x{5053}' .\n          '\\x{5054}\\x{5055}\\x{5056}\\x{5057}\\x{5059}\\x{505A}\\x{505B}\\x{505C}\\x{505D}' .\n          '\\x{505E}\\x{505F}\\x{5060}\\x{5061}\\x{5062}\\x{5063}\\x{5064}\\x{5065}\\x{5066}' .\n          '\\x{5067}\\x{5068}\\x{5069}\\x{506A}\\x{506B}\\x{506C}\\x{506D}\\x{506E}\\x{506F}' .\n          '\\x{5070}\\x{5071}\\x{5072}\\x{5073}\\x{5074}\\x{5075}\\x{5076}\\x{5077}\\x{5078}' .\n          '\\x{5079}\\x{507A}\\x{507B}\\x{507D}\\x{507E}\\x{507F}\\x{5080}\\x{5082}\\x{5083}' .\n          '\\x{5084}\\x{5085}\\x{5086}\\x{5087}\\x{5088}\\x{5089}\\x{508A}\\x{508B}\\x{508C}' .\n          '\\x{508D}\\x{508E}\\x{508F}\\x{5090}\\x{5091}\\x{5092}\\x{5094}\\x{5095}\\x{5096}' .\n          '\\x{5098}\\x{5099}\\x{509A}\\x{509B}\\x{509C}\\x{509D}\\x{509E}\\x{50A2}\\x{50A3}' .\n          '\\x{50A4}\\x{50A5}\\x{50A6}\\x{50A7}\\x{50A8}\\x{50A9}\\x{50AA}\\x{50AB}\\x{50AC}' .\n          '\\x{50AD}\\x{50AE}\\x{50AF}\\x{50B0}\\x{50B1}\\x{50B2}\\x{50B3}\\x{50B4}\\x{50B5}' .\n          '\\x{50B6}\\x{50B7}\\x{50B8}\\x{50BA}\\x{50BB}\\x{50BC}\\x{50BD}\\x{50BE}\\x{50BF}' .\n          '\\x{50C0}\\x{50C1}\\x{50C2}\\x{50C4}\\x{50C5}\\x{50C6}\\x{50C7}\\x{50C8}\\x{50C9}' .\n          '\\x{50CA}\\x{50CB}\\x{50CC}\\x{50CD}\\x{50CE}\\x{50CF}\\x{50D0}\\x{50D1}\\x{50D2}' .\n          '\\x{50D3}\\x{50D4}\\x{50D5}\\x{50D6}\\x{50D7}\\x{50D9}\\x{50DA}\\x{50DB}\\x{50DC}' .\n          '\\x{50DD}\\x{50DE}\\x{50E0}\\x{50E3}\\x{50E4}\\x{50E5}\\x{50E6}\\x{50E7}\\x{50E8}' .\n          '\\x{50E9}\\x{50EA}\\x{50EC}\\x{50ED}\\x{50EE}\\x{50EF}\\x{50F0}\\x{50F1}\\x{50F2}' .\n          '\\x{50F3}\\x{50F5}\\x{50F6}\\x{50F8}\\x{50F9}\\x{50FA}\\x{50FB}\\x{50FC}\\x{50FD}' .\n          '\\x{50FE}\\x{50FF}\\x{5100}\\x{5101}\\x{5102}\\x{5103}\\x{5104}\\x{5105}\\x{5106}' .\n          '\\x{5107}\\x{5108}\\x{5109}\\x{510A}\\x{510B}\\x{510C}\\x{510D}\\x{510E}\\x{510F}' .\n          '\\x{5110}\\x{5111}\\x{5112}\\x{5113}\\x{5114}\\x{5115}\\x{5116}\\x{5117}\\x{5118}' .\n          '\\x{5119}\\x{511A}\\x{511C}\\x{511D}\\x{511E}\\x{511F}\\x{5120}\\x{5121}\\x{5122}' .\n          '\\x{5123}\\x{5124}\\x{5125}\\x{5126}\\x{5127}\\x{5129}\\x{512A}\\x{512C}\\x{512D}' .\n          '\\x{512E}\\x{512F}\\x{5130}\\x{5131}\\x{5132}\\x{5133}\\x{5134}\\x{5135}\\x{5136}' .\n          '\\x{5137}\\x{5138}\\x{5139}\\x{513A}\\x{513B}\\x{513C}\\x{513D}\\x{513E}\\x{513F}' .\n          '\\x{5140}\\x{5141}\\x{5143}\\x{5144}\\x{5145}\\x{5146}\\x{5147}\\x{5148}\\x{5149}' .\n          '\\x{514B}\\x{514C}\\x{514D}\\x{514E}\\x{5150}\\x{5151}\\x{5152}\\x{5154}\\x{5155}' .\n          '\\x{5156}\\x{5157}\\x{5159}\\x{515A}\\x{515B}\\x{515C}\\x{515D}\\x{515E}\\x{515F}' .\n          '\\x{5161}\\x{5162}\\x{5163}\\x{5165}\\x{5166}\\x{5167}\\x{5168}\\x{5169}\\x{516A}' .\n          '\\x{516B}\\x{516C}\\x{516D}\\x{516E}\\x{516F}\\x{5170}\\x{5171}\\x{5173}\\x{5174}' .\n          '\\x{5175}\\x{5176}\\x{5177}\\x{5178}\\x{5179}\\x{517A}\\x{517B}\\x{517C}\\x{517D}' .\n          '\\x{517F}\\x{5180}\\x{5181}\\x{5182}\\x{5185}\\x{5186}\\x{5187}\\x{5188}\\x{5189}' .\n          '\\x{518A}\\x{518B}\\x{518C}\\x{518D}\\x{518F}\\x{5190}\\x{5191}\\x{5192}\\x{5193}' .\n          '\\x{5194}\\x{5195}\\x{5196}\\x{5197}\\x{5198}\\x{5199}\\x{519A}\\x{519B}\\x{519C}' .\n          '\\x{519D}\\x{519E}\\x{519F}\\x{51A0}\\x{51A2}\\x{51A4}\\x{51A5}\\x{51A6}\\x{51A7}' .\n          '\\x{51A8}\\x{51AA}\\x{51AB}\\x{51AC}\\x{51AE}\\x{51AF}\\x{51B0}\\x{51B1}\\x{51B2}' .\n          '\\x{51B3}\\x{51B5}\\x{51B6}\\x{51B7}\\x{51B9}\\x{51BB}\\x{51BC}\\x{51BD}\\x{51BE}' .\n          '\\x{51BF}\\x{51C0}\\x{51C1}\\x{51C3}\\x{51C4}\\x{51C5}\\x{51C6}\\x{51C7}\\x{51C8}' .\n          '\\x{51C9}\\x{51CA}\\x{51CB}\\x{51CC}\\x{51CD}\\x{51CE}\\x{51CF}\\x{51D0}\\x{51D1}' .\n          '\\x{51D4}\\x{51D5}\\x{51D6}\\x{51D7}\\x{51D8}\\x{51D9}\\x{51DA}\\x{51DB}\\x{51DC}' .\n          '\\x{51DD}\\x{51DE}\\x{51E0}\\x{51E1}\\x{51E2}\\x{51E3}\\x{51E4}\\x{51E5}\\x{51E7}' .\n          '\\x{51E8}\\x{51E9}\\x{51EA}\\x{51EB}\\x{51ED}\\x{51EF}\\x{51F0}\\x{51F1}\\x{51F3}' .\n          '\\x{51F4}\\x{51F5}\\x{51F6}\\x{51F7}\\x{51F8}\\x{51F9}\\x{51FA}\\x{51FB}\\x{51FC}' .\n          '\\x{51FD}\\x{51FE}\\x{51FF}\\x{5200}\\x{5201}\\x{5202}\\x{5203}\\x{5204}\\x{5205}' .\n          '\\x{5206}\\x{5207}\\x{5208}\\x{5209}\\x{520A}\\x{520B}\\x{520C}\\x{520D}\\x{520E}' .\n          '\\x{520F}\\x{5210}\\x{5211}\\x{5212}\\x{5213}\\x{5214}\\x{5215}\\x{5216}\\x{5217}' .\n          '\\x{5218}\\x{5219}\\x{521A}\\x{521B}\\x{521C}\\x{521D}\\x{521E}\\x{521F}\\x{5220}' .\n          '\\x{5221}\\x{5222}\\x{5223}\\x{5224}\\x{5225}\\x{5226}\\x{5228}\\x{5229}\\x{522A}' .\n          '\\x{522B}\\x{522C}\\x{522D}\\x{522E}\\x{522F}\\x{5230}\\x{5231}\\x{5232}\\x{5233}' .\n          '\\x{5234}\\x{5235}\\x{5236}\\x{5237}\\x{5238}\\x{5239}\\x{523A}\\x{523B}\\x{523C}' .\n          '\\x{523D}\\x{523E}\\x{523F}\\x{5240}\\x{5241}\\x{5242}\\x{5243}\\x{5244}\\x{5245}' .\n          '\\x{5246}\\x{5247}\\x{5248}\\x{5249}\\x{524A}\\x{524B}\\x{524C}\\x{524D}\\x{524E}' .\n          '\\x{5250}\\x{5251}\\x{5252}\\x{5254}\\x{5255}\\x{5256}\\x{5257}\\x{5258}\\x{5259}' .\n          '\\x{525A}\\x{525B}\\x{525C}\\x{525D}\\x{525E}\\x{525F}\\x{5260}\\x{5261}\\x{5262}' .\n          '\\x{5263}\\x{5264}\\x{5265}\\x{5267}\\x{5268}\\x{5269}\\x{526A}\\x{526B}\\x{526C}' .\n          '\\x{526D}\\x{526E}\\x{526F}\\x{5270}\\x{5272}\\x{5273}\\x{5274}\\x{5275}\\x{5276}' .\n          '\\x{5277}\\x{5278}\\x{527A}\\x{527B}\\x{527C}\\x{527D}\\x{527E}\\x{527F}\\x{5280}' .\n          '\\x{5281}\\x{5282}\\x{5283}\\x{5284}\\x{5286}\\x{5287}\\x{5288}\\x{5289}\\x{528A}' .\n          '\\x{528B}\\x{528C}\\x{528D}\\x{528F}\\x{5290}\\x{5291}\\x{5292}\\x{5293}\\x{5294}' .\n          '\\x{5295}\\x{5296}\\x{5297}\\x{5298}\\x{5299}\\x{529A}\\x{529B}\\x{529C}\\x{529D}' .\n          '\\x{529E}\\x{529F}\\x{52A0}\\x{52A1}\\x{52A2}\\x{52A3}\\x{52A5}\\x{52A6}\\x{52A7}' .\n          '\\x{52A8}\\x{52A9}\\x{52AA}\\x{52AB}\\x{52AC}\\x{52AD}\\x{52AE}\\x{52AF}\\x{52B0}' .\n          '\\x{52B1}\\x{52B2}\\x{52B3}\\x{52B4}\\x{52B5}\\x{52B6}\\x{52B7}\\x{52B8}\\x{52B9}' .\n          '\\x{52BA}\\x{52BB}\\x{52BC}\\x{52BD}\\x{52BE}\\x{52BF}\\x{52C0}\\x{52C1}\\x{52C2}' .\n          '\\x{52C3}\\x{52C6}\\x{52C7}\\x{52C9}\\x{52CA}\\x{52CB}\\x{52CD}\\x{52CF}\\x{52D0}' .\n          '\\x{52D2}\\x{52D3}\\x{52D5}\\x{52D6}\\x{52D7}\\x{52D8}\\x{52D9}\\x{52DA}\\x{52DB}' .\n          '\\x{52DC}\\x{52DD}\\x{52DE}\\x{52DF}\\x{52E0}\\x{52E2}\\x{52E3}\\x{52E4}\\x{52E6}' .\n          '\\x{52E7}\\x{52E8}\\x{52E9}\\x{52EA}\\x{52EB}\\x{52EC}\\x{52ED}\\x{52EF}\\x{52F0}' .\n          '\\x{52F1}\\x{52F2}\\x{52F3}\\x{52F4}\\x{52F5}\\x{52F6}\\x{52F7}\\x{52F8}\\x{52F9}' .\n          '\\x{52FA}\\x{52FB}\\x{52FC}\\x{52FD}\\x{52FE}\\x{52FF}\\x{5300}\\x{5301}\\x{5302}' .\n          '\\x{5305}\\x{5306}\\x{5307}\\x{5308}\\x{5309}\\x{530A}\\x{530B}\\x{530C}\\x{530D}' .\n          '\\x{530E}\\x{530F}\\x{5310}\\x{5311}\\x{5312}\\x{5313}\\x{5314}\\x{5315}\\x{5316}' .\n          '\\x{5317}\\x{5319}\\x{531A}\\x{531C}\\x{531D}\\x{531F}\\x{5320}\\x{5321}\\x{5322}' .\n          '\\x{5323}\\x{5324}\\x{5325}\\x{5326}\\x{5328}\\x{532A}\\x{532B}\\x{532C}\\x{532D}' .\n          '\\x{532E}\\x{532F}\\x{5330}\\x{5331}\\x{5333}\\x{5334}\\x{5337}\\x{5339}\\x{533A}' .\n          '\\x{533B}\\x{533C}\\x{533D}\\x{533E}\\x{533F}\\x{5340}\\x{5341}\\x{5343}\\x{5344}' .\n          '\\x{5345}\\x{5346}\\x{5347}\\x{5348}\\x{5349}\\x{534A}\\x{534B}\\x{534C}\\x{534D}' .\n          '\\x{534E}\\x{534F}\\x{5350}\\x{5351}\\x{5352}\\x{5353}\\x{5354}\\x{5355}\\x{5356}' .\n          '\\x{5357}\\x{5358}\\x{5359}\\x{535A}\\x{535C}\\x{535E}\\x{535F}\\x{5360}\\x{5361}' .\n          '\\x{5362}\\x{5363}\\x{5364}\\x{5365}\\x{5366}\\x{5367}\\x{5369}\\x{536B}\\x{536C}' .\n          '\\x{536E}\\x{536F}\\x{5370}\\x{5371}\\x{5372}\\x{5373}\\x{5374}\\x{5375}\\x{5376}' .\n          '\\x{5377}\\x{5378}\\x{5379}\\x{537A}\\x{537B}\\x{537C}\\x{537D}\\x{537E}\\x{537F}' .\n          '\\x{5381}\\x{5382}\\x{5383}\\x{5384}\\x{5385}\\x{5386}\\x{5387}\\x{5388}\\x{5389}' .\n          '\\x{538A}\\x{538B}\\x{538C}\\x{538D}\\x{538E}\\x{538F}\\x{5390}\\x{5391}\\x{5392}' .\n          '\\x{5393}\\x{5394}\\x{5395}\\x{5396}\\x{5397}\\x{5398}\\x{5399}\\x{539A}\\x{539B}' .\n          '\\x{539C}\\x{539D}\\x{539E}\\x{539F}\\x{53A0}\\x{53A2}\\x{53A3}\\x{53A4}\\x{53A5}' .\n          '\\x{53A6}\\x{53A7}\\x{53A8}\\x{53A9}\\x{53AC}\\x{53AD}\\x{53AE}\\x{53B0}\\x{53B1}' .\n          '\\x{53B2}\\x{53B3}\\x{53B4}\\x{53B5}\\x{53B6}\\x{53B7}\\x{53B8}\\x{53B9}\\x{53BB}' .\n          '\\x{53BC}\\x{53BD}\\x{53BE}\\x{53BF}\\x{53C0}\\x{53C1}\\x{53C2}\\x{53C3}\\x{53C4}' .\n          '\\x{53C6}\\x{53C7}\\x{53C8}\\x{53C9}\\x{53CA}\\x{53CB}\\x{53CC}\\x{53CD}\\x{53CE}' .\n          '\\x{53D0}\\x{53D1}\\x{53D2}\\x{53D3}\\x{53D4}\\x{53D5}\\x{53D6}\\x{53D7}\\x{53D8}' .\n          '\\x{53D9}\\x{53DB}\\x{53DC}\\x{53DF}\\x{53E0}\\x{53E1}\\x{53E2}\\x{53E3}\\x{53E4}' .\n          '\\x{53E5}\\x{53E6}\\x{53E8}\\x{53E9}\\x{53EA}\\x{53EB}\\x{53EC}\\x{53ED}\\x{53EE}' .\n          '\\x{53EF}\\x{53F0}\\x{53F1}\\x{53F2}\\x{53F3}\\x{53F4}\\x{53F5}\\x{53F6}\\x{53F7}' .\n          '\\x{53F8}\\x{53F9}\\x{53FA}\\x{53FB}\\x{53FC}\\x{53FD}\\x{53FE}\\x{5401}\\x{5402}' .\n          '\\x{5403}\\x{5404}\\x{5405}\\x{5406}\\x{5407}\\x{5408}\\x{5409}\\x{540A}\\x{540B}' .\n          '\\x{540C}\\x{540D}\\x{540E}\\x{540F}\\x{5410}\\x{5411}\\x{5412}\\x{5413}\\x{5414}' .\n          '\\x{5415}\\x{5416}\\x{5417}\\x{5418}\\x{5419}\\x{541B}\\x{541C}\\x{541D}\\x{541E}' .\n          '\\x{541F}\\x{5420}\\x{5421}\\x{5423}\\x{5424}\\x{5425}\\x{5426}\\x{5427}\\x{5428}' .\n          '\\x{5429}\\x{542A}\\x{542B}\\x{542C}\\x{542D}\\x{542E}\\x{542F}\\x{5430}\\x{5431}' .\n          '\\x{5432}\\x{5433}\\x{5434}\\x{5435}\\x{5436}\\x{5437}\\x{5438}\\x{5439}\\x{543A}' .\n          '\\x{543B}\\x{543C}\\x{543D}\\x{543E}\\x{543F}\\x{5440}\\x{5441}\\x{5442}\\x{5443}' .\n          '\\x{5444}\\x{5445}\\x{5446}\\x{5447}\\x{5448}\\x{5449}\\x{544A}\\x{544B}\\x{544D}' .\n          '\\x{544E}\\x{544F}\\x{5450}\\x{5451}\\x{5452}\\x{5453}\\x{5454}\\x{5455}\\x{5456}' .\n          '\\x{5457}\\x{5458}\\x{5459}\\x{545A}\\x{545B}\\x{545C}\\x{545E}\\x{545F}\\x{5460}' .\n          '\\x{5461}\\x{5462}\\x{5463}\\x{5464}\\x{5465}\\x{5466}\\x{5467}\\x{5468}\\x{546A}' .\n          '\\x{546B}\\x{546C}\\x{546D}\\x{546E}\\x{546F}\\x{5470}\\x{5471}\\x{5472}\\x{5473}' .\n          '\\x{5474}\\x{5475}\\x{5476}\\x{5477}\\x{5478}\\x{5479}\\x{547A}\\x{547B}\\x{547C}' .\n          '\\x{547D}\\x{547E}\\x{547F}\\x{5480}\\x{5481}\\x{5482}\\x{5483}\\x{5484}\\x{5485}' .\n          '\\x{5486}\\x{5487}\\x{5488}\\x{5489}\\x{548B}\\x{548C}\\x{548D}\\x{548E}\\x{548F}' .\n          '\\x{5490}\\x{5491}\\x{5492}\\x{5493}\\x{5494}\\x{5495}\\x{5496}\\x{5497}\\x{5498}' .\n          '\\x{5499}\\x{549A}\\x{549B}\\x{549C}\\x{549D}\\x{549E}\\x{549F}\\x{54A0}\\x{54A1}' .\n          '\\x{54A2}\\x{54A3}\\x{54A4}\\x{54A5}\\x{54A6}\\x{54A7}\\x{54A8}\\x{54A9}\\x{54AA}' .\n          '\\x{54AB}\\x{54AC}\\x{54AD}\\x{54AE}\\x{54AF}\\x{54B0}\\x{54B1}\\x{54B2}\\x{54B3}' .\n          '\\x{54B4}\\x{54B6}\\x{54B7}\\x{54B8}\\x{54B9}\\x{54BA}\\x{54BB}\\x{54BC}\\x{54BD}' .\n          '\\x{54BE}\\x{54BF}\\x{54C0}\\x{54C1}\\x{54C2}\\x{54C3}\\x{54C4}\\x{54C5}\\x{54C6}' .\n          '\\x{54C7}\\x{54C8}\\x{54C9}\\x{54CA}\\x{54CB}\\x{54CC}\\x{54CD}\\x{54CE}\\x{54CF}' .\n          '\\x{54D0}\\x{54D1}\\x{54D2}\\x{54D3}\\x{54D4}\\x{54D5}\\x{54D6}\\x{54D7}\\x{54D8}' .\n          '\\x{54D9}\\x{54DA}\\x{54DB}\\x{54DC}\\x{54DD}\\x{54DE}\\x{54DF}\\x{54E0}\\x{54E1}' .\n          '\\x{54E2}\\x{54E3}\\x{54E4}\\x{54E5}\\x{54E6}\\x{54E7}\\x{54E8}\\x{54E9}\\x{54EA}' .\n          '\\x{54EB}\\x{54EC}\\x{54ED}\\x{54EE}\\x{54EF}\\x{54F0}\\x{54F1}\\x{54F2}\\x{54F3}' .\n          '\\x{54F4}\\x{54F5}\\x{54F7}\\x{54F8}\\x{54F9}\\x{54FA}\\x{54FB}\\x{54FC}\\x{54FD}' .\n          '\\x{54FE}\\x{54FF}\\x{5500}\\x{5501}\\x{5502}\\x{5503}\\x{5504}\\x{5505}\\x{5506}' .\n          '\\x{5507}\\x{5508}\\x{5509}\\x{550A}\\x{550B}\\x{550C}\\x{550D}\\x{550E}\\x{550F}' .\n          '\\x{5510}\\x{5511}\\x{5512}\\x{5513}\\x{5514}\\x{5516}\\x{5517}\\x{551A}\\x{551B}' .\n          '\\x{551C}\\x{551D}\\x{551E}\\x{551F}\\x{5520}\\x{5521}\\x{5522}\\x{5523}\\x{5524}' .\n          '\\x{5525}\\x{5526}\\x{5527}\\x{5528}\\x{5529}\\x{552A}\\x{552B}\\x{552C}\\x{552D}' .\n          '\\x{552E}\\x{552F}\\x{5530}\\x{5531}\\x{5532}\\x{5533}\\x{5534}\\x{5535}\\x{5536}' .\n          '\\x{5537}\\x{5538}\\x{5539}\\x{553A}\\x{553B}\\x{553C}\\x{553D}\\x{553E}\\x{553F}' .\n          '\\x{5540}\\x{5541}\\x{5542}\\x{5543}\\x{5544}\\x{5545}\\x{5546}\\x{5548}\\x{5549}' .\n          '\\x{554A}\\x{554B}\\x{554C}\\x{554D}\\x{554E}\\x{554F}\\x{5550}\\x{5551}\\x{5552}' .\n          '\\x{5553}\\x{5554}\\x{5555}\\x{5556}\\x{5557}\\x{5558}\\x{5559}\\x{555A}\\x{555B}' .\n          '\\x{555C}\\x{555D}\\x{555E}\\x{555F}\\x{5561}\\x{5562}\\x{5563}\\x{5564}\\x{5565}' .\n          '\\x{5566}\\x{5567}\\x{5568}\\x{5569}\\x{556A}\\x{556B}\\x{556C}\\x{556D}\\x{556E}' .\n          '\\x{556F}\\x{5570}\\x{5571}\\x{5572}\\x{5573}\\x{5574}\\x{5575}\\x{5576}\\x{5577}' .\n          '\\x{5578}\\x{5579}\\x{557B}\\x{557C}\\x{557D}\\x{557E}\\x{557F}\\x{5580}\\x{5581}' .\n          '\\x{5582}\\x{5583}\\x{5584}\\x{5585}\\x{5586}\\x{5587}\\x{5588}\\x{5589}\\x{558A}' .\n          '\\x{558B}\\x{558C}\\x{558D}\\x{558E}\\x{558F}\\x{5590}\\x{5591}\\x{5592}\\x{5593}' .\n          '\\x{5594}\\x{5595}\\x{5596}\\x{5597}\\x{5598}\\x{5599}\\x{559A}\\x{559B}\\x{559C}' .\n          '\\x{559D}\\x{559E}\\x{559F}\\x{55A0}\\x{55A1}\\x{55A2}\\x{55A3}\\x{55A4}\\x{55A5}' .\n          '\\x{55A6}\\x{55A7}\\x{55A8}\\x{55A9}\\x{55AA}\\x{55AB}\\x{55AC}\\x{55AD}\\x{55AE}' .\n          '\\x{55AF}\\x{55B0}\\x{55B1}\\x{55B2}\\x{55B3}\\x{55B4}\\x{55B5}\\x{55B6}\\x{55B7}' .\n          '\\x{55B8}\\x{55B9}\\x{55BA}\\x{55BB}\\x{55BC}\\x{55BD}\\x{55BE}\\x{55BF}\\x{55C0}' .\n          '\\x{55C1}\\x{55C2}\\x{55C3}\\x{55C4}\\x{55C5}\\x{55C6}\\x{55C7}\\x{55C8}\\x{55C9}' .\n          '\\x{55CA}\\x{55CB}\\x{55CC}\\x{55CD}\\x{55CE}\\x{55CF}\\x{55D0}\\x{55D1}\\x{55D2}' .\n          '\\x{55D3}\\x{55D4}\\x{55D5}\\x{55D6}\\x{55D7}\\x{55D8}\\x{55D9}\\x{55DA}\\x{55DB}' .\n          '\\x{55DC}\\x{55DD}\\x{55DE}\\x{55DF}\\x{55E1}\\x{55E2}\\x{55E3}\\x{55E4}\\x{55E5}' .\n          '\\x{55E6}\\x{55E7}\\x{55E8}\\x{55E9}\\x{55EA}\\x{55EB}\\x{55EC}\\x{55ED}\\x{55EE}' .\n          '\\x{55EF}\\x{55F0}\\x{55F1}\\x{55F2}\\x{55F3}\\x{55F4}\\x{55F5}\\x{55F6}\\x{55F7}' .\n          '\\x{55F9}\\x{55FA}\\x{55FB}\\x{55FC}\\x{55FD}\\x{55FE}\\x{55FF}\\x{5600}\\x{5601}' .\n          '\\x{5602}\\x{5603}\\x{5604}\\x{5606}\\x{5607}\\x{5608}\\x{5609}\\x{560C}\\x{560D}' .\n          '\\x{560E}\\x{560F}\\x{5610}\\x{5611}\\x{5612}\\x{5613}\\x{5614}\\x{5615}\\x{5616}' .\n          '\\x{5617}\\x{5618}\\x{5619}\\x{561A}\\x{561B}\\x{561C}\\x{561D}\\x{561E}\\x{561F}' .\n          '\\x{5621}\\x{5622}\\x{5623}\\x{5624}\\x{5625}\\x{5626}\\x{5627}\\x{5628}\\x{5629}' .\n          '\\x{562A}\\x{562C}\\x{562D}\\x{562E}\\x{562F}\\x{5630}\\x{5631}\\x{5632}\\x{5633}' .\n          '\\x{5634}\\x{5635}\\x{5636}\\x{5638}\\x{5639}\\x{563A}\\x{563B}\\x{563D}\\x{563E}' .\n          '\\x{563F}\\x{5640}\\x{5641}\\x{5642}\\x{5643}\\x{5645}\\x{5646}\\x{5647}\\x{5648}' .\n          '\\x{5649}\\x{564A}\\x{564C}\\x{564D}\\x{564E}\\x{564F}\\x{5650}\\x{5652}\\x{5653}' .\n          '\\x{5654}\\x{5655}\\x{5657}\\x{5658}\\x{5659}\\x{565A}\\x{565B}\\x{565C}\\x{565D}' .\n          '\\x{565E}\\x{5660}\\x{5662}\\x{5663}\\x{5664}\\x{5665}\\x{5666}\\x{5667}\\x{5668}' .\n          '\\x{5669}\\x{566A}\\x{566B}\\x{566C}\\x{566D}\\x{566E}\\x{566F}\\x{5670}\\x{5671}' .\n          '\\x{5672}\\x{5673}\\x{5674}\\x{5676}\\x{5677}\\x{5678}\\x{5679}\\x{567A}\\x{567B}' .\n          '\\x{567C}\\x{567E}\\x{567F}\\x{5680}\\x{5681}\\x{5682}\\x{5683}\\x{5684}\\x{5685}' .\n          '\\x{5686}\\x{5687}\\x{568A}\\x{568C}\\x{568D}\\x{568E}\\x{568F}\\x{5690}\\x{5691}' .\n          '\\x{5692}\\x{5693}\\x{5694}\\x{5695}\\x{5697}\\x{5698}\\x{5699}\\x{569A}\\x{569B}' .\n          '\\x{569C}\\x{569D}\\x{569F}\\x{56A0}\\x{56A1}\\x{56A3}\\x{56A4}\\x{56A5}\\x{56A6}' .\n          '\\x{56A7}\\x{56A8}\\x{56A9}\\x{56AA}\\x{56AB}\\x{56AC}\\x{56AD}\\x{56AE}\\x{56AF}' .\n          '\\x{56B0}\\x{56B1}\\x{56B2}\\x{56B3}\\x{56B4}\\x{56B5}\\x{56B6}\\x{56B7}\\x{56B8}' .\n          '\\x{56B9}\\x{56BB}\\x{56BC}\\x{56BD}\\x{56BE}\\x{56BF}\\x{56C0}\\x{56C1}\\x{56C2}' .\n          '\\x{56C3}\\x{56C4}\\x{56C5}\\x{56C6}\\x{56C7}\\x{56C8}\\x{56C9}\\x{56CA}\\x{56CB}' .\n          '\\x{56CC}\\x{56CD}\\x{56CE}\\x{56D0}\\x{56D1}\\x{56D2}\\x{56D3}\\x{56D4}\\x{56D5}' .\n          '\\x{56D6}\\x{56D7}\\x{56D8}\\x{56DA}\\x{56DB}\\x{56DC}\\x{56DD}\\x{56DE}\\x{56DF}' .\n          '\\x{56E0}\\x{56E1}\\x{56E2}\\x{56E3}\\x{56E4}\\x{56E5}\\x{56E7}\\x{56E8}\\x{56E9}' .\n          '\\x{56EA}\\x{56EB}\\x{56EC}\\x{56ED}\\x{56EE}\\x{56EF}\\x{56F0}\\x{56F1}\\x{56F2}' .\n          '\\x{56F3}\\x{56F4}\\x{56F5}\\x{56F7}\\x{56F9}\\x{56FA}\\x{56FD}\\x{56FE}\\x{56FF}' .\n          '\\x{5700}\\x{5701}\\x{5702}\\x{5703}\\x{5704}\\x{5706}\\x{5707}\\x{5708}\\x{5709}' .\n          '\\x{570A}\\x{570B}\\x{570C}\\x{570D}\\x{570E}\\x{570F}\\x{5710}\\x{5712}\\x{5713}' .\n          '\\x{5714}\\x{5715}\\x{5716}\\x{5718}\\x{5719}\\x{571A}\\x{571B}\\x{571C}\\x{571D}' .\n          '\\x{571E}\\x{571F}\\x{5720}\\x{5722}\\x{5723}\\x{5725}\\x{5726}\\x{5727}\\x{5728}' .\n          '\\x{5729}\\x{572A}\\x{572B}\\x{572C}\\x{572D}\\x{572E}\\x{572F}\\x{5730}\\x{5731}' .\n          '\\x{5732}\\x{5733}\\x{5734}\\x{5735}\\x{5736}\\x{5737}\\x{5738}\\x{5739}\\x{573A}' .\n          '\\x{573B}\\x{573C}\\x{573E}\\x{573F}\\x{5740}\\x{5741}\\x{5742}\\x{5744}\\x{5745}' .\n          '\\x{5746}\\x{5747}\\x{5749}\\x{574A}\\x{574B}\\x{574C}\\x{574D}\\x{574E}\\x{574F}' .\n          '\\x{5750}\\x{5751}\\x{5752}\\x{5753}\\x{5754}\\x{5757}\\x{5759}\\x{575A}\\x{575B}' .\n          '\\x{575C}\\x{575D}\\x{575E}\\x{575F}\\x{5760}\\x{5761}\\x{5762}\\x{5764}\\x{5765}' .\n          '\\x{5766}\\x{5767}\\x{5768}\\x{5769}\\x{576A}\\x{576B}\\x{576C}\\x{576D}\\x{576F}' .\n          '\\x{5770}\\x{5771}\\x{5772}\\x{5773}\\x{5774}\\x{5775}\\x{5776}\\x{5777}\\x{5779}' .\n          '\\x{577A}\\x{577B}\\x{577C}\\x{577D}\\x{577E}\\x{577F}\\x{5780}\\x{5782}\\x{5783}' .\n          '\\x{5784}\\x{5785}\\x{5786}\\x{5788}\\x{5789}\\x{578A}\\x{578B}\\x{578C}\\x{578D}' .\n          '\\x{578E}\\x{578F}\\x{5790}\\x{5791}\\x{5792}\\x{5793}\\x{5794}\\x{5795}\\x{5797}' .\n          '\\x{5798}\\x{5799}\\x{579A}\\x{579B}\\x{579C}\\x{579D}\\x{579E}\\x{579F}\\x{57A0}' .\n          '\\x{57A1}\\x{57A2}\\x{57A3}\\x{57A4}\\x{57A5}\\x{57A6}\\x{57A7}\\x{57A9}\\x{57AA}' .\n          '\\x{57AB}\\x{57AC}\\x{57AD}\\x{57AE}\\x{57AF}\\x{57B0}\\x{57B1}\\x{57B2}\\x{57B3}' .\n          '\\x{57B4}\\x{57B5}\\x{57B6}\\x{57B7}\\x{57B8}\\x{57B9}\\x{57BA}\\x{57BB}\\x{57BC}' .\n          '\\x{57BD}\\x{57BE}\\x{57BF}\\x{57C0}\\x{57C1}\\x{57C2}\\x{57C3}\\x{57C4}\\x{57C5}' .\n          '\\x{57C6}\\x{57C7}\\x{57C8}\\x{57C9}\\x{57CB}\\x{57CC}\\x{57CD}\\x{57CE}\\x{57CF}' .\n          '\\x{57D0}\\x{57D2}\\x{57D3}\\x{57D4}\\x{57D5}\\x{57D6}\\x{57D8}\\x{57D9}\\x{57DA}' .\n          '\\x{57DC}\\x{57DD}\\x{57DF}\\x{57E0}\\x{57E1}\\x{57E2}\\x{57E3}\\x{57E4}\\x{57E5}' .\n          '\\x{57E6}\\x{57E7}\\x{57E8}\\x{57E9}\\x{57EA}\\x{57EB}\\x{57EC}\\x{57ED}\\x{57EE}' .\n          '\\x{57EF}\\x{57F0}\\x{57F1}\\x{57F2}\\x{57F3}\\x{57F4}\\x{57F5}\\x{57F6}\\x{57F7}' .\n          '\\x{57F8}\\x{57F9}\\x{57FA}\\x{57FB}\\x{57FC}\\x{57FD}\\x{57FE}\\x{57FF}\\x{5800}' .\n          '\\x{5801}\\x{5802}\\x{5803}\\x{5804}\\x{5805}\\x{5806}\\x{5807}\\x{5808}\\x{5809}' .\n          '\\x{580A}\\x{580B}\\x{580C}\\x{580D}\\x{580E}\\x{580F}\\x{5810}\\x{5811}\\x{5812}' .\n          '\\x{5813}\\x{5814}\\x{5815}\\x{5816}\\x{5819}\\x{581A}\\x{581B}\\x{581C}\\x{581D}' .\n          '\\x{581E}\\x{581F}\\x{5820}\\x{5821}\\x{5822}\\x{5823}\\x{5824}\\x{5825}\\x{5826}' .\n          '\\x{5827}\\x{5828}\\x{5829}\\x{582A}\\x{582B}\\x{582C}\\x{582D}\\x{582E}\\x{582F}' .\n          '\\x{5830}\\x{5831}\\x{5832}\\x{5833}\\x{5834}\\x{5835}\\x{5836}\\x{5837}\\x{5838}' .\n          '\\x{5839}\\x{583A}\\x{583B}\\x{583C}\\x{583D}\\x{583E}\\x{583F}\\x{5840}\\x{5842}' .\n          '\\x{5843}\\x{5844}\\x{5845}\\x{5846}\\x{5847}\\x{5848}\\x{5849}\\x{584A}\\x{584B}' .\n          '\\x{584C}\\x{584D}\\x{584E}\\x{584F}\\x{5851}\\x{5852}\\x{5853}\\x{5854}\\x{5855}' .\n          '\\x{5857}\\x{5858}\\x{5859}\\x{585A}\\x{585B}\\x{585C}\\x{585D}\\x{585E}\\x{585F}' .\n          '\\x{5861}\\x{5862}\\x{5863}\\x{5864}\\x{5865}\\x{5868}\\x{5869}\\x{586A}\\x{586B}' .\n          '\\x{586C}\\x{586D}\\x{586E}\\x{586F}\\x{5870}\\x{5871}\\x{5872}\\x{5873}\\x{5874}' .\n          '\\x{5875}\\x{5876}\\x{5878}\\x{5879}\\x{587A}\\x{587B}\\x{587C}\\x{587D}\\x{587E}' .\n          '\\x{587F}\\x{5880}\\x{5881}\\x{5882}\\x{5883}\\x{5884}\\x{5885}\\x{5886}\\x{5887}' .\n          '\\x{5888}\\x{5889}\\x{588A}\\x{588B}\\x{588C}\\x{588D}\\x{588E}\\x{588F}\\x{5890}' .\n          '\\x{5891}\\x{5892}\\x{5893}\\x{5894}\\x{5896}\\x{5897}\\x{5898}\\x{5899}\\x{589A}' .\n          '\\x{589B}\\x{589C}\\x{589D}\\x{589E}\\x{589F}\\x{58A0}\\x{58A1}\\x{58A2}\\x{58A3}' .\n          '\\x{58A4}\\x{58A5}\\x{58A6}\\x{58A7}\\x{58A8}\\x{58A9}\\x{58AB}\\x{58AC}\\x{58AD}' .\n          '\\x{58AE}\\x{58AF}\\x{58B0}\\x{58B1}\\x{58B2}\\x{58B3}\\x{58B4}\\x{58B7}\\x{58B8}' .\n          '\\x{58B9}\\x{58BA}\\x{58BB}\\x{58BC}\\x{58BD}\\x{58BE}\\x{58BF}\\x{58C1}\\x{58C2}' .\n          '\\x{58C5}\\x{58C6}\\x{58C7}\\x{58C8}\\x{58C9}\\x{58CA}\\x{58CB}\\x{58CE}\\x{58CF}' .\n          '\\x{58D1}\\x{58D2}\\x{58D3}\\x{58D4}\\x{58D5}\\x{58D6}\\x{58D7}\\x{58D8}\\x{58D9}' .\n          '\\x{58DA}\\x{58DB}\\x{58DD}\\x{58DE}\\x{58DF}\\x{58E0}\\x{58E2}\\x{58E3}\\x{58E4}' .\n          '\\x{58E5}\\x{58E7}\\x{58E8}\\x{58E9}\\x{58EA}\\x{58EB}\\x{58EC}\\x{58ED}\\x{58EE}' .\n          '\\x{58EF}\\x{58F0}\\x{58F1}\\x{58F2}\\x{58F3}\\x{58F4}\\x{58F6}\\x{58F7}\\x{58F8}' .\n          '\\x{58F9}\\x{58FA}\\x{58FB}\\x{58FC}\\x{58FD}\\x{58FE}\\x{58FF}\\x{5900}\\x{5902}' .\n          '\\x{5903}\\x{5904}\\x{5906}\\x{5907}\\x{5909}\\x{590A}\\x{590B}\\x{590C}\\x{590D}' .\n          '\\x{590E}\\x{590F}\\x{5910}\\x{5912}\\x{5914}\\x{5915}\\x{5916}\\x{5917}\\x{5918}' .\n          '\\x{5919}\\x{591A}\\x{591B}\\x{591C}\\x{591D}\\x{591E}\\x{591F}\\x{5920}\\x{5921}' .\n          '\\x{5922}\\x{5924}\\x{5925}\\x{5926}\\x{5927}\\x{5928}\\x{5929}\\x{592A}\\x{592B}' .\n          '\\x{592C}\\x{592D}\\x{592E}\\x{592F}\\x{5930}\\x{5931}\\x{5932}\\x{5934}\\x{5935}' .\n          '\\x{5937}\\x{5938}\\x{5939}\\x{593A}\\x{593B}\\x{593C}\\x{593D}\\x{593E}\\x{593F}' .\n          '\\x{5940}\\x{5941}\\x{5942}\\x{5943}\\x{5944}\\x{5945}\\x{5946}\\x{5947}\\x{5948}' .\n          '\\x{5949}\\x{594A}\\x{594B}\\x{594C}\\x{594D}\\x{594E}\\x{594F}\\x{5950}\\x{5951}' .\n          '\\x{5952}\\x{5953}\\x{5954}\\x{5955}\\x{5956}\\x{5957}\\x{5958}\\x{595A}\\x{595C}' .\n          '\\x{595D}\\x{595E}\\x{595F}\\x{5960}\\x{5961}\\x{5962}\\x{5963}\\x{5964}\\x{5965}' .\n          '\\x{5966}\\x{5967}\\x{5968}\\x{5969}\\x{596A}\\x{596B}\\x{596C}\\x{596D}\\x{596E}' .\n          '\\x{596F}\\x{5970}\\x{5971}\\x{5972}\\x{5973}\\x{5974}\\x{5975}\\x{5976}\\x{5977}' .\n          '\\x{5978}\\x{5979}\\x{597A}\\x{597B}\\x{597C}\\x{597D}\\x{597E}\\x{597F}\\x{5980}' .\n          '\\x{5981}\\x{5982}\\x{5983}\\x{5984}\\x{5985}\\x{5986}\\x{5987}\\x{5988}\\x{5989}' .\n          '\\x{598A}\\x{598B}\\x{598C}\\x{598D}\\x{598E}\\x{598F}\\x{5990}\\x{5991}\\x{5992}' .\n          '\\x{5993}\\x{5994}\\x{5995}\\x{5996}\\x{5997}\\x{5998}\\x{5999}\\x{599A}\\x{599C}' .\n          '\\x{599D}\\x{599E}\\x{599F}\\x{59A0}\\x{59A1}\\x{59A2}\\x{59A3}\\x{59A4}\\x{59A5}' .\n          '\\x{59A6}\\x{59A7}\\x{59A8}\\x{59A9}\\x{59AA}\\x{59AB}\\x{59AC}\\x{59AD}\\x{59AE}' .\n          '\\x{59AF}\\x{59B0}\\x{59B1}\\x{59B2}\\x{59B3}\\x{59B4}\\x{59B5}\\x{59B6}\\x{59B8}' .\n          '\\x{59B9}\\x{59BA}\\x{59BB}\\x{59BC}\\x{59BD}\\x{59BE}\\x{59BF}\\x{59C0}\\x{59C1}' .\n          '\\x{59C2}\\x{59C3}\\x{59C4}\\x{59C5}\\x{59C6}\\x{59C7}\\x{59C8}\\x{59C9}\\x{59CA}' .\n          '\\x{59CB}\\x{59CC}\\x{59CD}\\x{59CE}\\x{59CF}\\x{59D0}\\x{59D1}\\x{59D2}\\x{59D3}' .\n          '\\x{59D4}\\x{59D5}\\x{59D6}\\x{59D7}\\x{59D8}\\x{59D9}\\x{59DA}\\x{59DB}\\x{59DC}' .\n          '\\x{59DD}\\x{59DE}\\x{59DF}\\x{59E0}\\x{59E1}\\x{59E2}\\x{59E3}\\x{59E4}\\x{59E5}' .\n          '\\x{59E6}\\x{59E8}\\x{59E9}\\x{59EA}\\x{59EB}\\x{59EC}\\x{59ED}\\x{59EE}\\x{59EF}' .\n          '\\x{59F0}\\x{59F1}\\x{59F2}\\x{59F3}\\x{59F4}\\x{59F5}\\x{59F6}\\x{59F7}\\x{59F8}' .\n          '\\x{59F9}\\x{59FA}\\x{59FB}\\x{59FC}\\x{59FD}\\x{59FE}\\x{59FF}\\x{5A00}\\x{5A01}' .\n          '\\x{5A02}\\x{5A03}\\x{5A04}\\x{5A05}\\x{5A06}\\x{5A07}\\x{5A08}\\x{5A09}\\x{5A0A}' .\n          '\\x{5A0B}\\x{5A0C}\\x{5A0D}\\x{5A0E}\\x{5A0F}\\x{5A10}\\x{5A11}\\x{5A12}\\x{5A13}' .\n          '\\x{5A14}\\x{5A15}\\x{5A16}\\x{5A17}\\x{5A18}\\x{5A19}\\x{5A1A}\\x{5A1B}\\x{5A1C}' .\n          '\\x{5A1D}\\x{5A1E}\\x{5A1F}\\x{5A20}\\x{5A21}\\x{5A22}\\x{5A23}\\x{5A25}\\x{5A27}' .\n          '\\x{5A28}\\x{5A29}\\x{5A2A}\\x{5A2B}\\x{5A2D}\\x{5A2E}\\x{5A2F}\\x{5A31}\\x{5A32}' .\n          '\\x{5A33}\\x{5A34}\\x{5A35}\\x{5A36}\\x{5A37}\\x{5A38}\\x{5A39}\\x{5A3A}\\x{5A3B}' .\n          '\\x{5A3C}\\x{5A3D}\\x{5A3E}\\x{5A3F}\\x{5A40}\\x{5A41}\\x{5A42}\\x{5A43}\\x{5A44}' .\n          '\\x{5A45}\\x{5A46}\\x{5A47}\\x{5A48}\\x{5A49}\\x{5A4A}\\x{5A4B}\\x{5A4C}\\x{5A4D}' .\n          '\\x{5A4E}\\x{5A4F}\\x{5A50}\\x{5A51}\\x{5A52}\\x{5A53}\\x{5A55}\\x{5A56}\\x{5A57}' .\n          '\\x{5A58}\\x{5A5A}\\x{5A5B}\\x{5A5C}\\x{5A5D}\\x{5A5E}\\x{5A5F}\\x{5A60}\\x{5A61}' .\n          '\\x{5A62}\\x{5A63}\\x{5A64}\\x{5A65}\\x{5A66}\\x{5A67}\\x{5A68}\\x{5A69}\\x{5A6A}' .\n          '\\x{5A6B}\\x{5A6C}\\x{5A6D}\\x{5A6E}\\x{5A70}\\x{5A72}\\x{5A73}\\x{5A74}\\x{5A75}' .\n          '\\x{5A76}\\x{5A77}\\x{5A78}\\x{5A79}\\x{5A7A}\\x{5A7B}\\x{5A7C}\\x{5A7D}\\x{5A7E}' .\n          '\\x{5A7F}\\x{5A80}\\x{5A81}\\x{5A82}\\x{5A83}\\x{5A84}\\x{5A85}\\x{5A86}\\x{5A88}' .\n          '\\x{5A89}\\x{5A8A}\\x{5A8B}\\x{5A8C}\\x{5A8E}\\x{5A8F}\\x{5A90}\\x{5A91}\\x{5A92}' .\n          '\\x{5A93}\\x{5A94}\\x{5A95}\\x{5A96}\\x{5A97}\\x{5A98}\\x{5A99}\\x{5A9A}\\x{5A9B}' .\n          '\\x{5A9C}\\x{5A9D}\\x{5A9E}\\x{5A9F}\\x{5AA0}\\x{5AA1}\\x{5AA2}\\x{5AA3}\\x{5AA4}' .\n          '\\x{5AA5}\\x{5AA6}\\x{5AA7}\\x{5AA8}\\x{5AA9}\\x{5AAA}\\x{5AAC}\\x{5AAD}\\x{5AAE}' .\n          '\\x{5AAF}\\x{5AB0}\\x{5AB1}\\x{5AB2}\\x{5AB3}\\x{5AB4}\\x{5AB5}\\x{5AB6}\\x{5AB7}' .\n          '\\x{5AB8}\\x{5AB9}\\x{5ABA}\\x{5ABB}\\x{5ABC}\\x{5ABD}\\x{5ABE}\\x{5ABF}\\x{5AC0}' .\n          '\\x{5AC1}\\x{5AC2}\\x{5AC3}\\x{5AC4}\\x{5AC5}\\x{5AC6}\\x{5AC7}\\x{5AC8}\\x{5AC9}' .\n          '\\x{5ACA}\\x{5ACB}\\x{5ACC}\\x{5ACD}\\x{5ACE}\\x{5ACF}\\x{5AD1}\\x{5AD2}\\x{5AD4}' .\n          '\\x{5AD5}\\x{5AD6}\\x{5AD7}\\x{5AD8}\\x{5AD9}\\x{5ADA}\\x{5ADB}\\x{5ADC}\\x{5ADD}' .\n          '\\x{5ADE}\\x{5ADF}\\x{5AE0}\\x{5AE1}\\x{5AE2}\\x{5AE3}\\x{5AE4}\\x{5AE5}\\x{5AE6}' .\n          '\\x{5AE7}\\x{5AE8}\\x{5AE9}\\x{5AEA}\\x{5AEB}\\x{5AEC}\\x{5AED}\\x{5AEE}\\x{5AF1}' .\n          '\\x{5AF2}\\x{5AF3}\\x{5AF4}\\x{5AF5}\\x{5AF6}\\x{5AF7}\\x{5AF8}\\x{5AF9}\\x{5AFA}' .\n          '\\x{5AFB}\\x{5AFC}\\x{5AFD}\\x{5AFE}\\x{5AFF}\\x{5B00}\\x{5B01}\\x{5B02}\\x{5B03}' .\n          '\\x{5B04}\\x{5B05}\\x{5B06}\\x{5B07}\\x{5B08}\\x{5B09}\\x{5B0B}\\x{5B0C}\\x{5B0E}' .\n          '\\x{5B0F}\\x{5B10}\\x{5B11}\\x{5B12}\\x{5B13}\\x{5B14}\\x{5B15}\\x{5B16}\\x{5B17}' .\n          '\\x{5B18}\\x{5B19}\\x{5B1A}\\x{5B1B}\\x{5B1C}\\x{5B1D}\\x{5B1E}\\x{5B1F}\\x{5B20}' .\n          '\\x{5B21}\\x{5B22}\\x{5B23}\\x{5B24}\\x{5B25}\\x{5B26}\\x{5B27}\\x{5B28}\\x{5B29}' .\n          '\\x{5B2A}\\x{5B2B}\\x{5B2C}\\x{5B2D}\\x{5B2E}\\x{5B2F}\\x{5B30}\\x{5B31}\\x{5B32}' .\n          '\\x{5B33}\\x{5B34}\\x{5B35}\\x{5B36}\\x{5B37}\\x{5B38}\\x{5B3A}\\x{5B3B}\\x{5B3C}' .\n          '\\x{5B3D}\\x{5B3E}\\x{5B3F}\\x{5B40}\\x{5B41}\\x{5B42}\\x{5B43}\\x{5B44}\\x{5B45}' .\n          '\\x{5B47}\\x{5B48}\\x{5B49}\\x{5B4A}\\x{5B4B}\\x{5B4C}\\x{5B4D}\\x{5B4E}\\x{5B50}' .\n          '\\x{5B51}\\x{5B53}\\x{5B54}\\x{5B55}\\x{5B56}\\x{5B57}\\x{5B58}\\x{5B59}\\x{5B5A}' .\n          '\\x{5B5B}\\x{5B5C}\\x{5B5D}\\x{5B5E}\\x{5B5F}\\x{5B62}\\x{5B63}\\x{5B64}\\x{5B65}' .\n          '\\x{5B66}\\x{5B67}\\x{5B68}\\x{5B69}\\x{5B6A}\\x{5B6B}\\x{5B6C}\\x{5B6D}\\x{5B6E}' .\n          '\\x{5B70}\\x{5B71}\\x{5B72}\\x{5B73}\\x{5B74}\\x{5B75}\\x{5B76}\\x{5B77}\\x{5B78}' .\n          '\\x{5B7A}\\x{5B7B}\\x{5B7C}\\x{5B7D}\\x{5B7F}\\x{5B80}\\x{5B81}\\x{5B82}\\x{5B83}' .\n          '\\x{5B84}\\x{5B85}\\x{5B87}\\x{5B88}\\x{5B89}\\x{5B8A}\\x{5B8B}\\x{5B8C}\\x{5B8D}' .\n          '\\x{5B8E}\\x{5B8F}\\x{5B91}\\x{5B92}\\x{5B93}\\x{5B94}\\x{5B95}\\x{5B96}\\x{5B97}' .\n          '\\x{5B98}\\x{5B99}\\x{5B9A}\\x{5B9B}\\x{5B9C}\\x{5B9D}\\x{5B9E}\\x{5B9F}\\x{5BA0}' .\n          '\\x{5BA1}\\x{5BA2}\\x{5BA3}\\x{5BA4}\\x{5BA5}\\x{5BA6}\\x{5BA7}\\x{5BA8}\\x{5BAA}' .\n          '\\x{5BAB}\\x{5BAC}\\x{5BAD}\\x{5BAE}\\x{5BAF}\\x{5BB0}\\x{5BB1}\\x{5BB3}\\x{5BB4}' .\n          '\\x{5BB5}\\x{5BB6}\\x{5BB8}\\x{5BB9}\\x{5BBA}\\x{5BBB}\\x{5BBD}\\x{5BBE}\\x{5BBF}' .\n          '\\x{5BC0}\\x{5BC1}\\x{5BC2}\\x{5BC3}\\x{5BC4}\\x{5BC5}\\x{5BC6}\\x{5BC7}\\x{5BCA}' .\n          '\\x{5BCB}\\x{5BCC}\\x{5BCD}\\x{5BCE}\\x{5BCF}\\x{5BD0}\\x{5BD1}\\x{5BD2}\\x{5BD3}' .\n          '\\x{5BD4}\\x{5BD5}\\x{5BD6}\\x{5BD8}\\x{5BD9}\\x{5BDB}\\x{5BDC}\\x{5BDD}\\x{5BDE}' .\n          '\\x{5BDF}\\x{5BE0}\\x{5BE1}\\x{5BE2}\\x{5BE3}\\x{5BE4}\\x{5BE5}\\x{5BE6}\\x{5BE7}' .\n          '\\x{5BE8}\\x{5BE9}\\x{5BEA}\\x{5BEB}\\x{5BEC}\\x{5BED}\\x{5BEE}\\x{5BEF}\\x{5BF0}' .\n          '\\x{5BF1}\\x{5BF2}\\x{5BF3}\\x{5BF4}\\x{5BF5}\\x{5BF6}\\x{5BF7}\\x{5BF8}\\x{5BF9}' .\n          '\\x{5BFA}\\x{5BFB}\\x{5BFC}\\x{5BFD}\\x{5BFF}\\x{5C01}\\x{5C03}\\x{5C04}\\x{5C05}' .\n          '\\x{5C06}\\x{5C07}\\x{5C08}\\x{5C09}\\x{5C0A}\\x{5C0B}\\x{5C0C}\\x{5C0D}\\x{5C0E}' .\n          '\\x{5C0F}\\x{5C10}\\x{5C11}\\x{5C12}\\x{5C13}\\x{5C14}\\x{5C15}\\x{5C16}\\x{5C17}' .\n          '\\x{5C18}\\x{5C19}\\x{5C1A}\\x{5C1C}\\x{5C1D}\\x{5C1E}\\x{5C1F}\\x{5C20}\\x{5C21}' .\n          '\\x{5C22}\\x{5C24}\\x{5C25}\\x{5C27}\\x{5C28}\\x{5C2A}\\x{5C2B}\\x{5C2C}\\x{5C2D}' .\n          '\\x{5C2E}\\x{5C2F}\\x{5C30}\\x{5C31}\\x{5C32}\\x{5C33}\\x{5C34}\\x{5C35}\\x{5C37}' .\n          '\\x{5C38}\\x{5C39}\\x{5C3A}\\x{5C3B}\\x{5C3C}\\x{5C3D}\\x{5C3E}\\x{5C3F}\\x{5C40}' .\n          '\\x{5C41}\\x{5C42}\\x{5C43}\\x{5C44}\\x{5C45}\\x{5C46}\\x{5C47}\\x{5C48}\\x{5C49}' .\n          '\\x{5C4A}\\x{5C4B}\\x{5C4C}\\x{5C4D}\\x{5C4E}\\x{5C4F}\\x{5C50}\\x{5C51}\\x{5C52}' .\n          '\\x{5C53}\\x{5C54}\\x{5C55}\\x{5C56}\\x{5C57}\\x{5C58}\\x{5C59}\\x{5C5B}\\x{5C5C}' .\n          '\\x{5C5D}\\x{5C5E}\\x{5C5F}\\x{5C60}\\x{5C61}\\x{5C62}\\x{5C63}\\x{5C64}\\x{5C65}' .\n          '\\x{5C66}\\x{5C67}\\x{5C68}\\x{5C69}\\x{5C6A}\\x{5C6B}\\x{5C6C}\\x{5C6D}\\x{5C6E}' .\n          '\\x{5C6F}\\x{5C70}\\x{5C71}\\x{5C72}\\x{5C73}\\x{5C74}\\x{5C75}\\x{5C76}\\x{5C77}' .\n          '\\x{5C78}\\x{5C79}\\x{5C7A}\\x{5C7B}\\x{5C7C}\\x{5C7D}\\x{5C7E}\\x{5C7F}\\x{5C80}' .\n          '\\x{5C81}\\x{5C82}\\x{5C83}\\x{5C84}\\x{5C86}\\x{5C87}\\x{5C88}\\x{5C89}\\x{5C8A}' .\n          '\\x{5C8B}\\x{5C8C}\\x{5C8D}\\x{5C8E}\\x{5C8F}\\x{5C90}\\x{5C91}\\x{5C92}\\x{5C93}' .\n          '\\x{5C94}\\x{5C95}\\x{5C96}\\x{5C97}\\x{5C98}\\x{5C99}\\x{5C9A}\\x{5C9B}\\x{5C9C}' .\n          '\\x{5C9D}\\x{5C9E}\\x{5C9F}\\x{5CA0}\\x{5CA1}\\x{5CA2}\\x{5CA3}\\x{5CA4}\\x{5CA5}' .\n          '\\x{5CA6}\\x{5CA7}\\x{5CA8}\\x{5CA9}\\x{5CAA}\\x{5CAB}\\x{5CAC}\\x{5CAD}\\x{5CAE}' .\n          '\\x{5CAF}\\x{5CB0}\\x{5CB1}\\x{5CB2}\\x{5CB3}\\x{5CB5}\\x{5CB6}\\x{5CB7}\\x{5CB8}' .\n          '\\x{5CBA}\\x{5CBB}\\x{5CBC}\\x{5CBD}\\x{5CBE}\\x{5CBF}\\x{5CC1}\\x{5CC2}\\x{5CC3}' .\n          '\\x{5CC4}\\x{5CC5}\\x{5CC6}\\x{5CC7}\\x{5CC8}\\x{5CC9}\\x{5CCA}\\x{5CCB}\\x{5CCC}' .\n          '\\x{5CCD}\\x{5CCE}\\x{5CCF}\\x{5CD0}\\x{5CD1}\\x{5CD2}\\x{5CD3}\\x{5CD4}\\x{5CD6}' .\n          '\\x{5CD7}\\x{5CD8}\\x{5CD9}\\x{5CDA}\\x{5CDB}\\x{5CDC}\\x{5CDE}\\x{5CDF}\\x{5CE0}' .\n          '\\x{5CE1}\\x{5CE2}\\x{5CE3}\\x{5CE4}\\x{5CE5}\\x{5CE6}\\x{5CE7}\\x{5CE8}\\x{5CE9}' .\n          '\\x{5CEA}\\x{5CEB}\\x{5CEC}\\x{5CED}\\x{5CEE}\\x{5CEF}\\x{5CF0}\\x{5CF1}\\x{5CF2}' .\n          '\\x{5CF3}\\x{5CF4}\\x{5CF6}\\x{5CF7}\\x{5CF8}\\x{5CF9}\\x{5CFA}\\x{5CFB}\\x{5CFC}' .\n          '\\x{5CFD}\\x{5CFE}\\x{5CFF}\\x{5D00}\\x{5D01}\\x{5D02}\\x{5D03}\\x{5D04}\\x{5D05}' .\n          '\\x{5D06}\\x{5D07}\\x{5D08}\\x{5D09}\\x{5D0A}\\x{5D0B}\\x{5D0C}\\x{5D0D}\\x{5D0E}' .\n          '\\x{5D0F}\\x{5D10}\\x{5D11}\\x{5D12}\\x{5D13}\\x{5D14}\\x{5D15}\\x{5D16}\\x{5D17}' .\n          '\\x{5D18}\\x{5D19}\\x{5D1A}\\x{5D1B}\\x{5D1C}\\x{5D1D}\\x{5D1E}\\x{5D1F}\\x{5D20}' .\n          '\\x{5D21}\\x{5D22}\\x{5D23}\\x{5D24}\\x{5D25}\\x{5D26}\\x{5D27}\\x{5D28}\\x{5D29}' .\n          '\\x{5D2A}\\x{5D2C}\\x{5D2D}\\x{5D2E}\\x{5D30}\\x{5D31}\\x{5D32}\\x{5D33}\\x{5D34}' .\n          '\\x{5D35}\\x{5D36}\\x{5D37}\\x{5D38}\\x{5D39}\\x{5D3A}\\x{5D3C}\\x{5D3D}\\x{5D3E}' .\n          '\\x{5D3F}\\x{5D40}\\x{5D41}\\x{5D42}\\x{5D43}\\x{5D44}\\x{5D45}\\x{5D46}\\x{5D47}' .\n          '\\x{5D48}\\x{5D49}\\x{5D4A}\\x{5D4B}\\x{5D4C}\\x{5D4D}\\x{5D4E}\\x{5D4F}\\x{5D50}' .\n          '\\x{5D51}\\x{5D52}\\x{5D54}\\x{5D55}\\x{5D56}\\x{5D58}\\x{5D59}\\x{5D5A}\\x{5D5B}' .\n          '\\x{5D5D}\\x{5D5E}\\x{5D5F}\\x{5D61}\\x{5D62}\\x{5D63}\\x{5D64}\\x{5D65}\\x{5D66}' .\n          '\\x{5D67}\\x{5D68}\\x{5D69}\\x{5D6A}\\x{5D6B}\\x{5D6C}\\x{5D6D}\\x{5D6E}\\x{5D6F}' .\n          '\\x{5D70}\\x{5D71}\\x{5D72}\\x{5D73}\\x{5D74}\\x{5D75}\\x{5D76}\\x{5D77}\\x{5D78}' .\n          '\\x{5D79}\\x{5D7A}\\x{5D7B}\\x{5D7C}\\x{5D7D}\\x{5D7E}\\x{5D7F}\\x{5D80}\\x{5D81}' .\n          '\\x{5D82}\\x{5D84}\\x{5D85}\\x{5D86}\\x{5D87}\\x{5D88}\\x{5D89}\\x{5D8A}\\x{5D8B}' .\n          '\\x{5D8C}\\x{5D8D}\\x{5D8E}\\x{5D8F}\\x{5D90}\\x{5D91}\\x{5D92}\\x{5D93}\\x{5D94}' .\n          '\\x{5D95}\\x{5D97}\\x{5D98}\\x{5D99}\\x{5D9A}\\x{5D9B}\\x{5D9C}\\x{5D9D}\\x{5D9E}' .\n          '\\x{5D9F}\\x{5DA0}\\x{5DA1}\\x{5DA2}\\x{5DA5}\\x{5DA6}\\x{5DA7}\\x{5DA8}\\x{5DA9}' .\n          '\\x{5DAA}\\x{5DAC}\\x{5DAD}\\x{5DAE}\\x{5DAF}\\x{5DB0}\\x{5DB1}\\x{5DB2}\\x{5DB4}' .\n          '\\x{5DB5}\\x{5DB6}\\x{5DB7}\\x{5DB8}\\x{5DBA}\\x{5DBB}\\x{5DBC}\\x{5DBD}\\x{5DBE}' .\n          '\\x{5DBF}\\x{5DC0}\\x{5DC1}\\x{5DC2}\\x{5DC3}\\x{5DC5}\\x{5DC6}\\x{5DC7}\\x{5DC8}' .\n          '\\x{5DC9}\\x{5DCA}\\x{5DCB}\\x{5DCC}\\x{5DCD}\\x{5DCE}\\x{5DCF}\\x{5DD0}\\x{5DD1}' .\n          '\\x{5DD2}\\x{5DD3}\\x{5DD4}\\x{5DD5}\\x{5DD6}\\x{5DD8}\\x{5DD9}\\x{5DDB}\\x{5DDD}' .\n          '\\x{5DDE}\\x{5DDF}\\x{5DE0}\\x{5DE1}\\x{5DE2}\\x{5DE3}\\x{5DE4}\\x{5DE5}\\x{5DE6}' .\n          '\\x{5DE7}\\x{5DE8}\\x{5DE9}\\x{5DEA}\\x{5DEB}\\x{5DEC}\\x{5DED}\\x{5DEE}\\x{5DEF}' .\n          '\\x{5DF0}\\x{5DF1}\\x{5DF2}\\x{5DF3}\\x{5DF4}\\x{5DF5}\\x{5DF7}\\x{5DF8}\\x{5DF9}' .\n          '\\x{5DFA}\\x{5DFB}\\x{5DFC}\\x{5DFD}\\x{5DFE}\\x{5DFF}\\x{5E00}\\x{5E01}\\x{5E02}' .\n          '\\x{5E03}\\x{5E04}\\x{5E05}\\x{5E06}\\x{5E07}\\x{5E08}\\x{5E09}\\x{5E0A}\\x{5E0B}' .\n          '\\x{5E0C}\\x{5E0D}\\x{5E0E}\\x{5E0F}\\x{5E10}\\x{5E11}\\x{5E13}\\x{5E14}\\x{5E15}' .\n          '\\x{5E16}\\x{5E17}\\x{5E18}\\x{5E19}\\x{5E1A}\\x{5E1B}\\x{5E1C}\\x{5E1D}\\x{5E1E}' .\n          '\\x{5E1F}\\x{5E20}\\x{5E21}\\x{5E22}\\x{5E23}\\x{5E24}\\x{5E25}\\x{5E26}\\x{5E27}' .\n          '\\x{5E28}\\x{5E29}\\x{5E2A}\\x{5E2B}\\x{5E2C}\\x{5E2D}\\x{5E2E}\\x{5E2F}\\x{5E30}' .\n          '\\x{5E31}\\x{5E32}\\x{5E33}\\x{5E34}\\x{5E35}\\x{5E36}\\x{5E37}\\x{5E38}\\x{5E39}' .\n          '\\x{5E3A}\\x{5E3B}\\x{5E3C}\\x{5E3D}\\x{5E3E}\\x{5E40}\\x{5E41}\\x{5E42}\\x{5E43}' .\n          '\\x{5E44}\\x{5E45}\\x{5E46}\\x{5E47}\\x{5E49}\\x{5E4A}\\x{5E4B}\\x{5E4C}\\x{5E4D}' .\n          '\\x{5E4E}\\x{5E4F}\\x{5E50}\\x{5E52}\\x{5E53}\\x{5E54}\\x{5E55}\\x{5E56}\\x{5E57}' .\n          '\\x{5E58}\\x{5E59}\\x{5E5A}\\x{5E5B}\\x{5E5C}\\x{5E5D}\\x{5E5E}\\x{5E5F}\\x{5E60}' .\n          '\\x{5E61}\\x{5E62}\\x{5E63}\\x{5E64}\\x{5E65}\\x{5E66}\\x{5E67}\\x{5E68}\\x{5E69}' .\n          '\\x{5E6A}\\x{5E6B}\\x{5E6C}\\x{5E6D}\\x{5E6E}\\x{5E6F}\\x{5E70}\\x{5E71}\\x{5E72}' .\n          '\\x{5E73}\\x{5E74}\\x{5E75}\\x{5E76}\\x{5E77}\\x{5E78}\\x{5E79}\\x{5E7A}\\x{5E7B}' .\n          '\\x{5E7C}\\x{5E7D}\\x{5E7E}\\x{5E7F}\\x{5E80}\\x{5E81}\\x{5E82}\\x{5E83}\\x{5E84}' .\n          '\\x{5E85}\\x{5E86}\\x{5E87}\\x{5E88}\\x{5E89}\\x{5E8A}\\x{5E8B}\\x{5E8C}\\x{5E8D}' .\n          '\\x{5E8E}\\x{5E8F}\\x{5E90}\\x{5E91}\\x{5E93}\\x{5E94}\\x{5E95}\\x{5E96}\\x{5E97}' .\n          '\\x{5E98}\\x{5E99}\\x{5E9A}\\x{5E9B}\\x{5E9C}\\x{5E9D}\\x{5E9E}\\x{5E9F}\\x{5EA0}' .\n          '\\x{5EA1}\\x{5EA2}\\x{5EA3}\\x{5EA4}\\x{5EA5}\\x{5EA6}\\x{5EA7}\\x{5EA8}\\x{5EA9}' .\n          '\\x{5EAA}\\x{5EAB}\\x{5EAC}\\x{5EAD}\\x{5EAE}\\x{5EAF}\\x{5EB0}\\x{5EB1}\\x{5EB2}' .\n          '\\x{5EB3}\\x{5EB4}\\x{5EB5}\\x{5EB6}\\x{5EB7}\\x{5EB8}\\x{5EB9}\\x{5EBB}\\x{5EBC}' .\n          '\\x{5EBD}\\x{5EBE}\\x{5EBF}\\x{5EC1}\\x{5EC2}\\x{5EC3}\\x{5EC4}\\x{5EC5}\\x{5EC6}' .\n          '\\x{5EC7}\\x{5EC8}\\x{5EC9}\\x{5ECA}\\x{5ECB}\\x{5ECC}\\x{5ECD}\\x{5ECE}\\x{5ECF}' .\n          '\\x{5ED0}\\x{5ED1}\\x{5ED2}\\x{5ED3}\\x{5ED4}\\x{5ED5}\\x{5ED6}\\x{5ED7}\\x{5ED8}' .\n          '\\x{5ED9}\\x{5EDA}\\x{5EDB}\\x{5EDC}\\x{5EDD}\\x{5EDE}\\x{5EDF}\\x{5EE0}\\x{5EE1}' .\n          '\\x{5EE2}\\x{5EE3}\\x{5EE4}\\x{5EE5}\\x{5EE6}\\x{5EE7}\\x{5EE8}\\x{5EE9}\\x{5EEA}' .\n          '\\x{5EEC}\\x{5EED}\\x{5EEE}\\x{5EEF}\\x{5EF0}\\x{5EF1}\\x{5EF2}\\x{5EF3}\\x{5EF4}' .\n          '\\x{5EF5}\\x{5EF6}\\x{5EF7}\\x{5EF8}\\x{5EFA}\\x{5EFB}\\x{5EFC}\\x{5EFD}\\x{5EFE}' .\n          '\\x{5EFF}\\x{5F00}\\x{5F01}\\x{5F02}\\x{5F03}\\x{5F04}\\x{5F05}\\x{5F06}\\x{5F07}' .\n          '\\x{5F08}\\x{5F0A}\\x{5F0B}\\x{5F0C}\\x{5F0D}\\x{5F0F}\\x{5F11}\\x{5F12}\\x{5F13}' .\n          '\\x{5F14}\\x{5F15}\\x{5F16}\\x{5F17}\\x{5F18}\\x{5F19}\\x{5F1A}\\x{5F1B}\\x{5F1C}' .\n          '\\x{5F1D}\\x{5F1E}\\x{5F1F}\\x{5F20}\\x{5F21}\\x{5F22}\\x{5F23}\\x{5F24}\\x{5F25}' .\n          '\\x{5F26}\\x{5F27}\\x{5F28}\\x{5F29}\\x{5F2A}\\x{5F2B}\\x{5F2C}\\x{5F2D}\\x{5F2E}' .\n          '\\x{5F2F}\\x{5F30}\\x{5F31}\\x{5F32}\\x{5F33}\\x{5F34}\\x{5F35}\\x{5F36}\\x{5F37}' .\n          '\\x{5F38}\\x{5F39}\\x{5F3A}\\x{5F3C}\\x{5F3E}\\x{5F3F}\\x{5F40}\\x{5F41}\\x{5F42}' .\n          '\\x{5F43}\\x{5F44}\\x{5F45}\\x{5F46}\\x{5F47}\\x{5F48}\\x{5F49}\\x{5F4A}\\x{5F4B}' .\n          '\\x{5F4C}\\x{5F4D}\\x{5F4E}\\x{5F4F}\\x{5F50}\\x{5F51}\\x{5F52}\\x{5F53}\\x{5F54}' .\n          '\\x{5F55}\\x{5F56}\\x{5F57}\\x{5F58}\\x{5F59}\\x{5F5A}\\x{5F5B}\\x{5F5C}\\x{5F5D}' .\n          '\\x{5F5E}\\x{5F5F}\\x{5F60}\\x{5F61}\\x{5F62}\\x{5F63}\\x{5F64}\\x{5F65}\\x{5F66}' .\n          '\\x{5F67}\\x{5F68}\\x{5F69}\\x{5F6A}\\x{5F6B}\\x{5F6C}\\x{5F6D}\\x{5F6E}\\x{5F6F}' .\n          '\\x{5F70}\\x{5F71}\\x{5F72}\\x{5F73}\\x{5F74}\\x{5F75}\\x{5F76}\\x{5F77}\\x{5F78}' .\n          '\\x{5F79}\\x{5F7A}\\x{5F7B}\\x{5F7C}\\x{5F7D}\\x{5F7E}\\x{5F7F}\\x{5F80}\\x{5F81}' .\n          '\\x{5F82}\\x{5F83}\\x{5F84}\\x{5F85}\\x{5F86}\\x{5F87}\\x{5F88}\\x{5F89}\\x{5F8A}' .\n          '\\x{5F8B}\\x{5F8C}\\x{5F8D}\\x{5F8E}\\x{5F90}\\x{5F91}\\x{5F92}\\x{5F93}\\x{5F94}' .\n          '\\x{5F95}\\x{5F96}\\x{5F97}\\x{5F98}\\x{5F99}\\x{5F9B}\\x{5F9C}\\x{5F9D}\\x{5F9E}' .\n          '\\x{5F9F}\\x{5FA0}\\x{5FA1}\\x{5FA2}\\x{5FA5}\\x{5FA6}\\x{5FA7}\\x{5FA8}\\x{5FA9}' .\n          '\\x{5FAA}\\x{5FAB}\\x{5FAC}\\x{5FAD}\\x{5FAE}\\x{5FAF}\\x{5FB1}\\x{5FB2}\\x{5FB3}' .\n          '\\x{5FB4}\\x{5FB5}\\x{5FB6}\\x{5FB7}\\x{5FB8}\\x{5FB9}\\x{5FBA}\\x{5FBB}\\x{5FBC}' .\n          '\\x{5FBD}\\x{5FBE}\\x{5FBF}\\x{5FC0}\\x{5FC1}\\x{5FC3}\\x{5FC4}\\x{5FC5}\\x{5FC6}' .\n          '\\x{5FC7}\\x{5FC8}\\x{5FC9}\\x{5FCA}\\x{5FCB}\\x{5FCC}\\x{5FCD}\\x{5FCF}\\x{5FD0}' .\n          '\\x{5FD1}\\x{5FD2}\\x{5FD3}\\x{5FD4}\\x{5FD5}\\x{5FD6}\\x{5FD7}\\x{5FD8}\\x{5FD9}' .\n          '\\x{5FDA}\\x{5FDC}\\x{5FDD}\\x{5FDE}\\x{5FE0}\\x{5FE1}\\x{5FE3}\\x{5FE4}\\x{5FE5}' .\n          '\\x{5FE6}\\x{5FE7}\\x{5FE8}\\x{5FE9}\\x{5FEA}\\x{5FEB}\\x{5FED}\\x{5FEE}\\x{5FEF}' .\n          '\\x{5FF0}\\x{5FF1}\\x{5FF2}\\x{5FF3}\\x{5FF4}\\x{5FF5}\\x{5FF6}\\x{5FF7}\\x{5FF8}' .\n          '\\x{5FF9}\\x{5FFA}\\x{5FFB}\\x{5FFD}\\x{5FFE}\\x{5FFF}\\x{6000}\\x{6001}\\x{6002}' .\n          '\\x{6003}\\x{6004}\\x{6005}\\x{6006}\\x{6007}\\x{6008}\\x{6009}\\x{600A}\\x{600B}' .\n          '\\x{600C}\\x{600D}\\x{600E}\\x{600F}\\x{6010}\\x{6011}\\x{6012}\\x{6013}\\x{6014}' .\n          '\\x{6015}\\x{6016}\\x{6017}\\x{6018}\\x{6019}\\x{601A}\\x{601B}\\x{601C}\\x{601D}' .\n          '\\x{601E}\\x{601F}\\x{6020}\\x{6021}\\x{6022}\\x{6024}\\x{6025}\\x{6026}\\x{6027}' .\n          '\\x{6028}\\x{6029}\\x{602A}\\x{602B}\\x{602C}\\x{602D}\\x{602E}\\x{602F}\\x{6030}' .\n          '\\x{6031}\\x{6032}\\x{6033}\\x{6034}\\x{6035}\\x{6036}\\x{6037}\\x{6038}\\x{6039}' .\n          '\\x{603A}\\x{603B}\\x{603C}\\x{603D}\\x{603E}\\x{603F}\\x{6040}\\x{6041}\\x{6042}' .\n          '\\x{6043}\\x{6044}\\x{6045}\\x{6046}\\x{6047}\\x{6048}\\x{6049}\\x{604A}\\x{604B}' .\n          '\\x{604C}\\x{604D}\\x{604E}\\x{604F}\\x{6050}\\x{6051}\\x{6052}\\x{6053}\\x{6054}' .\n          '\\x{6055}\\x{6057}\\x{6058}\\x{6059}\\x{605A}\\x{605B}\\x{605C}\\x{605D}\\x{605E}' .\n          '\\x{605F}\\x{6062}\\x{6063}\\x{6064}\\x{6065}\\x{6066}\\x{6067}\\x{6068}\\x{6069}' .\n          '\\x{606A}\\x{606B}\\x{606C}\\x{606D}\\x{606E}\\x{606F}\\x{6070}\\x{6072}\\x{6073}' .\n          '\\x{6075}\\x{6076}\\x{6077}\\x{6078}\\x{6079}\\x{607A}\\x{607B}\\x{607C}\\x{607D}' .\n          '\\x{607E}\\x{607F}\\x{6080}\\x{6081}\\x{6082}\\x{6083}\\x{6084}\\x{6085}\\x{6086}' .\n          '\\x{6087}\\x{6088}\\x{6089}\\x{608A}\\x{608B}\\x{608C}\\x{608D}\\x{608E}\\x{608F}' .\n          '\\x{6090}\\x{6092}\\x{6094}\\x{6095}\\x{6096}\\x{6097}\\x{6098}\\x{6099}\\x{609A}' .\n          '\\x{609B}\\x{609C}\\x{609D}\\x{609E}\\x{609F}\\x{60A0}\\x{60A1}\\x{60A2}\\x{60A3}' .\n          '\\x{60A4}\\x{60A6}\\x{60A7}\\x{60A8}\\x{60AA}\\x{60AB}\\x{60AC}\\x{60AD}\\x{60AE}' .\n          '\\x{60AF}\\x{60B0}\\x{60B1}\\x{60B2}\\x{60B3}\\x{60B4}\\x{60B5}\\x{60B6}\\x{60B7}' .\n          '\\x{60B8}\\x{60B9}\\x{60BA}\\x{60BB}\\x{60BC}\\x{60BD}\\x{60BE}\\x{60BF}\\x{60C0}' .\n          '\\x{60C1}\\x{60C2}\\x{60C3}\\x{60C4}\\x{60C5}\\x{60C6}\\x{60C7}\\x{60C8}\\x{60C9}' .\n          '\\x{60CA}\\x{60CB}\\x{60CC}\\x{60CD}\\x{60CE}\\x{60CF}\\x{60D0}\\x{60D1}\\x{60D3}' .\n          '\\x{60D4}\\x{60D5}\\x{60D7}\\x{60D8}\\x{60D9}\\x{60DA}\\x{60DB}\\x{60DC}\\x{60DD}' .\n          '\\x{60DF}\\x{60E0}\\x{60E1}\\x{60E2}\\x{60E4}\\x{60E6}\\x{60E7}\\x{60E8}\\x{60E9}' .\n          '\\x{60EA}\\x{60EB}\\x{60EC}\\x{60ED}\\x{60EE}\\x{60EF}\\x{60F0}\\x{60F1}\\x{60F2}' .\n          '\\x{60F3}\\x{60F4}\\x{60F5}\\x{60F6}\\x{60F7}\\x{60F8}\\x{60F9}\\x{60FA}\\x{60FB}' .\n          '\\x{60FC}\\x{60FE}\\x{60FF}\\x{6100}\\x{6101}\\x{6103}\\x{6104}\\x{6105}\\x{6106}' .\n          '\\x{6108}\\x{6109}\\x{610A}\\x{610B}\\x{610C}\\x{610D}\\x{610E}\\x{610F}\\x{6110}' .\n          '\\x{6112}\\x{6113}\\x{6114}\\x{6115}\\x{6116}\\x{6117}\\x{6118}\\x{6119}\\x{611A}' .\n          '\\x{611B}\\x{611C}\\x{611D}\\x{611F}\\x{6120}\\x{6122}\\x{6123}\\x{6124}\\x{6125}' .\n          '\\x{6126}\\x{6127}\\x{6128}\\x{6129}\\x{612A}\\x{612B}\\x{612C}\\x{612D}\\x{612E}' .\n          '\\x{612F}\\x{6130}\\x{6132}\\x{6134}\\x{6136}\\x{6137}\\x{613A}\\x{613B}\\x{613C}' .\n          '\\x{613D}\\x{613E}\\x{613F}\\x{6140}\\x{6141}\\x{6142}\\x{6143}\\x{6144}\\x{6145}' .\n          '\\x{6146}\\x{6147}\\x{6148}\\x{6149}\\x{614A}\\x{614B}\\x{614C}\\x{614D}\\x{614E}' .\n          '\\x{614F}\\x{6150}\\x{6151}\\x{6152}\\x{6153}\\x{6154}\\x{6155}\\x{6156}\\x{6157}' .\n          '\\x{6158}\\x{6159}\\x{615A}\\x{615B}\\x{615C}\\x{615D}\\x{615E}\\x{615F}\\x{6161}' .\n          '\\x{6162}\\x{6163}\\x{6164}\\x{6165}\\x{6166}\\x{6167}\\x{6168}\\x{6169}\\x{616A}' .\n          '\\x{616B}\\x{616C}\\x{616D}\\x{616E}\\x{6170}\\x{6171}\\x{6172}\\x{6173}\\x{6174}' .\n          '\\x{6175}\\x{6176}\\x{6177}\\x{6178}\\x{6179}\\x{617A}\\x{617C}\\x{617E}\\x{6180}' .\n          '\\x{6181}\\x{6182}\\x{6183}\\x{6184}\\x{6185}\\x{6187}\\x{6188}\\x{6189}\\x{618A}' .\n          '\\x{618B}\\x{618C}\\x{618D}\\x{618E}\\x{618F}\\x{6190}\\x{6191}\\x{6192}\\x{6193}' .\n          '\\x{6194}\\x{6195}\\x{6196}\\x{6198}\\x{6199}\\x{619A}\\x{619B}\\x{619D}\\x{619E}' .\n          '\\x{619F}\\x{61A0}\\x{61A1}\\x{61A2}\\x{61A3}\\x{61A4}\\x{61A5}\\x{61A6}\\x{61A7}' .\n          '\\x{61A8}\\x{61A9}\\x{61AA}\\x{61AB}\\x{61AC}\\x{61AD}\\x{61AE}\\x{61AF}\\x{61B0}' .\n          '\\x{61B1}\\x{61B2}\\x{61B3}\\x{61B4}\\x{61B5}\\x{61B6}\\x{61B7}\\x{61B8}\\x{61BA}' .\n          '\\x{61BC}\\x{61BD}\\x{61BE}\\x{61BF}\\x{61C0}\\x{61C1}\\x{61C2}\\x{61C3}\\x{61C4}' .\n          '\\x{61C5}\\x{61C6}\\x{61C7}\\x{61C8}\\x{61C9}\\x{61CA}\\x{61CB}\\x{61CC}\\x{61CD}' .\n          '\\x{61CE}\\x{61CF}\\x{61D0}\\x{61D1}\\x{61D2}\\x{61D4}\\x{61D6}\\x{61D7}\\x{61D8}' .\n          '\\x{61D9}\\x{61DA}\\x{61DB}\\x{61DC}\\x{61DD}\\x{61DE}\\x{61DF}\\x{61E0}\\x{61E1}' .\n          '\\x{61E2}\\x{61E3}\\x{61E4}\\x{61E5}\\x{61E6}\\x{61E7}\\x{61E8}\\x{61E9}\\x{61EA}' .\n          '\\x{61EB}\\x{61ED}\\x{61EE}\\x{61F0}\\x{61F1}\\x{61F2}\\x{61F3}\\x{61F5}\\x{61F6}' .\n          '\\x{61F7}\\x{61F8}\\x{61F9}\\x{61FA}\\x{61FB}\\x{61FC}\\x{61FD}\\x{61FE}\\x{61FF}' .\n          '\\x{6200}\\x{6201}\\x{6202}\\x{6203}\\x{6204}\\x{6206}\\x{6207}\\x{6208}\\x{6209}' .\n          '\\x{620A}\\x{620B}\\x{620C}\\x{620D}\\x{620E}\\x{620F}\\x{6210}\\x{6211}\\x{6212}' .\n          '\\x{6213}\\x{6214}\\x{6215}\\x{6216}\\x{6217}\\x{6218}\\x{6219}\\x{621A}\\x{621B}' .\n          '\\x{621C}\\x{621D}\\x{621E}\\x{621F}\\x{6220}\\x{6221}\\x{6222}\\x{6223}\\x{6224}' .\n          '\\x{6225}\\x{6226}\\x{6227}\\x{6228}\\x{6229}\\x{622A}\\x{622B}\\x{622C}\\x{622D}' .\n          '\\x{622E}\\x{622F}\\x{6230}\\x{6231}\\x{6232}\\x{6233}\\x{6234}\\x{6236}\\x{6237}' .\n          '\\x{6238}\\x{623A}\\x{623B}\\x{623C}\\x{623D}\\x{623E}\\x{623F}\\x{6240}\\x{6241}' .\n          '\\x{6242}\\x{6243}\\x{6244}\\x{6245}\\x{6246}\\x{6247}\\x{6248}\\x{6249}\\x{624A}' .\n          '\\x{624B}\\x{624C}\\x{624D}\\x{624E}\\x{624F}\\x{6250}\\x{6251}\\x{6252}\\x{6253}' .\n          '\\x{6254}\\x{6255}\\x{6256}\\x{6258}\\x{6259}\\x{625A}\\x{625B}\\x{625C}\\x{625D}' .\n          '\\x{625E}\\x{625F}\\x{6260}\\x{6261}\\x{6262}\\x{6263}\\x{6264}\\x{6265}\\x{6266}' .\n          '\\x{6267}\\x{6268}\\x{6269}\\x{626A}\\x{626B}\\x{626C}\\x{626D}\\x{626E}\\x{626F}' .\n          '\\x{6270}\\x{6271}\\x{6272}\\x{6273}\\x{6274}\\x{6275}\\x{6276}\\x{6277}\\x{6278}' .\n          '\\x{6279}\\x{627A}\\x{627B}\\x{627C}\\x{627D}\\x{627E}\\x{627F}\\x{6280}\\x{6281}' .\n          '\\x{6283}\\x{6284}\\x{6285}\\x{6286}\\x{6287}\\x{6288}\\x{6289}\\x{628A}\\x{628B}' .\n          '\\x{628C}\\x{628E}\\x{628F}\\x{6290}\\x{6291}\\x{6292}\\x{6293}\\x{6294}\\x{6295}' .\n          '\\x{6296}\\x{6297}\\x{6298}\\x{6299}\\x{629A}\\x{629B}\\x{629C}\\x{629E}\\x{629F}' .\n          '\\x{62A0}\\x{62A1}\\x{62A2}\\x{62A3}\\x{62A4}\\x{62A5}\\x{62A7}\\x{62A8}\\x{62A9}' .\n          '\\x{62AA}\\x{62AB}\\x{62AC}\\x{62AD}\\x{62AE}\\x{62AF}\\x{62B0}\\x{62B1}\\x{62B2}' .\n          '\\x{62B3}\\x{62B4}\\x{62B5}\\x{62B6}\\x{62B7}\\x{62B8}\\x{62B9}\\x{62BA}\\x{62BB}' .\n          '\\x{62BC}\\x{62BD}\\x{62BE}\\x{62BF}\\x{62C0}\\x{62C1}\\x{62C2}\\x{62C3}\\x{62C4}' .\n          '\\x{62C5}\\x{62C6}\\x{62C7}\\x{62C8}\\x{62C9}\\x{62CA}\\x{62CB}\\x{62CC}\\x{62CD}' .\n          '\\x{62CE}\\x{62CF}\\x{62D0}\\x{62D1}\\x{62D2}\\x{62D3}\\x{62D4}\\x{62D5}\\x{62D6}' .\n          '\\x{62D7}\\x{62D8}\\x{62D9}\\x{62DA}\\x{62DB}\\x{62DC}\\x{62DD}\\x{62DF}\\x{62E0}' .\n          '\\x{62E1}\\x{62E2}\\x{62E3}\\x{62E4}\\x{62E5}\\x{62E6}\\x{62E7}\\x{62E8}\\x{62E9}' .\n          '\\x{62EB}\\x{62EC}\\x{62ED}\\x{62EE}\\x{62EF}\\x{62F0}\\x{62F1}\\x{62F2}\\x{62F3}' .\n          '\\x{62F4}\\x{62F5}\\x{62F6}\\x{62F7}\\x{62F8}\\x{62F9}\\x{62FA}\\x{62FB}\\x{62FC}' .\n          '\\x{62FD}\\x{62FE}\\x{62FF}\\x{6300}\\x{6301}\\x{6302}\\x{6303}\\x{6304}\\x{6305}' .\n          '\\x{6306}\\x{6307}\\x{6308}\\x{6309}\\x{630B}\\x{630C}\\x{630D}\\x{630E}\\x{630F}' .\n          '\\x{6310}\\x{6311}\\x{6312}\\x{6313}\\x{6314}\\x{6315}\\x{6316}\\x{6318}\\x{6319}' .\n          '\\x{631A}\\x{631B}\\x{631C}\\x{631D}\\x{631E}\\x{631F}\\x{6320}\\x{6321}\\x{6322}' .\n          '\\x{6323}\\x{6324}\\x{6325}\\x{6326}\\x{6327}\\x{6328}\\x{6329}\\x{632A}\\x{632B}' .\n          '\\x{632C}\\x{632D}\\x{632E}\\x{632F}\\x{6330}\\x{6332}\\x{6333}\\x{6334}\\x{6336}' .\n          '\\x{6338}\\x{6339}\\x{633A}\\x{633B}\\x{633C}\\x{633D}\\x{633E}\\x{6340}\\x{6341}' .\n          '\\x{6342}\\x{6343}\\x{6344}\\x{6345}\\x{6346}\\x{6347}\\x{6348}\\x{6349}\\x{634A}' .\n          '\\x{634B}\\x{634C}\\x{634D}\\x{634E}\\x{634F}\\x{6350}\\x{6351}\\x{6352}\\x{6353}' .\n          '\\x{6354}\\x{6355}\\x{6356}\\x{6357}\\x{6358}\\x{6359}\\x{635A}\\x{635C}\\x{635D}' .\n          '\\x{635E}\\x{635F}\\x{6360}\\x{6361}\\x{6362}\\x{6363}\\x{6364}\\x{6365}\\x{6366}' .\n          '\\x{6367}\\x{6368}\\x{6369}\\x{636A}\\x{636B}\\x{636C}\\x{636D}\\x{636E}\\x{636F}' .\n          '\\x{6370}\\x{6371}\\x{6372}\\x{6373}\\x{6374}\\x{6375}\\x{6376}\\x{6377}\\x{6378}' .\n          '\\x{6379}\\x{637A}\\x{637B}\\x{637C}\\x{637D}\\x{637E}\\x{6380}\\x{6381}\\x{6382}' .\n          '\\x{6383}\\x{6384}\\x{6385}\\x{6386}\\x{6387}\\x{6388}\\x{6389}\\x{638A}\\x{638C}' .\n          '\\x{638D}\\x{638E}\\x{638F}\\x{6390}\\x{6391}\\x{6392}\\x{6394}\\x{6395}\\x{6396}' .\n          '\\x{6397}\\x{6398}\\x{6399}\\x{639A}\\x{639B}\\x{639C}\\x{639D}\\x{639E}\\x{639F}' .\n          '\\x{63A0}\\x{63A1}\\x{63A2}\\x{63A3}\\x{63A4}\\x{63A5}\\x{63A6}\\x{63A7}\\x{63A8}' .\n          '\\x{63A9}\\x{63AA}\\x{63AB}\\x{63AC}\\x{63AD}\\x{63AE}\\x{63AF}\\x{63B0}\\x{63B1}' .\n          '\\x{63B2}\\x{63B3}\\x{63B4}\\x{63B5}\\x{63B6}\\x{63B7}\\x{63B8}\\x{63B9}\\x{63BA}' .\n          '\\x{63BC}\\x{63BD}\\x{63BE}\\x{63BF}\\x{63C0}\\x{63C1}\\x{63C2}\\x{63C3}\\x{63C4}' .\n          '\\x{63C5}\\x{63C6}\\x{63C7}\\x{63C8}\\x{63C9}\\x{63CA}\\x{63CB}\\x{63CC}\\x{63CD}' .\n          '\\x{63CE}\\x{63CF}\\x{63D0}\\x{63D2}\\x{63D3}\\x{63D4}\\x{63D5}\\x{63D6}\\x{63D7}' .\n          '\\x{63D8}\\x{63D9}\\x{63DA}\\x{63DB}\\x{63DC}\\x{63DD}\\x{63DE}\\x{63DF}\\x{63E0}' .\n          '\\x{63E1}\\x{63E2}\\x{63E3}\\x{63E4}\\x{63E5}\\x{63E6}\\x{63E7}\\x{63E8}\\x{63E9}' .\n          '\\x{63EA}\\x{63EB}\\x{63EC}\\x{63ED}\\x{63EE}\\x{63EF}\\x{63F0}\\x{63F1}\\x{63F2}' .\n          '\\x{63F3}\\x{63F4}\\x{63F5}\\x{63F6}\\x{63F7}\\x{63F8}\\x{63F9}\\x{63FA}\\x{63FB}' .\n          '\\x{63FC}\\x{63FD}\\x{63FE}\\x{63FF}\\x{6400}\\x{6401}\\x{6402}\\x{6403}\\x{6404}' .\n          '\\x{6405}\\x{6406}\\x{6408}\\x{6409}\\x{640A}\\x{640B}\\x{640C}\\x{640D}\\x{640E}' .\n          '\\x{640F}\\x{6410}\\x{6411}\\x{6412}\\x{6413}\\x{6414}\\x{6415}\\x{6416}\\x{6417}' .\n          '\\x{6418}\\x{6419}\\x{641A}\\x{641B}\\x{641C}\\x{641D}\\x{641E}\\x{641F}\\x{6420}' .\n          '\\x{6421}\\x{6422}\\x{6423}\\x{6424}\\x{6425}\\x{6426}\\x{6427}\\x{6428}\\x{6429}' .\n          '\\x{642A}\\x{642B}\\x{642C}\\x{642D}\\x{642E}\\x{642F}\\x{6430}\\x{6431}\\x{6432}' .\n          '\\x{6433}\\x{6434}\\x{6435}\\x{6436}\\x{6437}\\x{6438}\\x{6439}\\x{643A}\\x{643D}' .\n          '\\x{643E}\\x{643F}\\x{6440}\\x{6441}\\x{6443}\\x{6444}\\x{6445}\\x{6446}\\x{6447}' .\n          '\\x{6448}\\x{644A}\\x{644B}\\x{644C}\\x{644D}\\x{644E}\\x{644F}\\x{6450}\\x{6451}' .\n          '\\x{6452}\\x{6453}\\x{6454}\\x{6455}\\x{6456}\\x{6457}\\x{6458}\\x{6459}\\x{645B}' .\n          '\\x{645C}\\x{645D}\\x{645E}\\x{645F}\\x{6460}\\x{6461}\\x{6462}\\x{6463}\\x{6464}' .\n          '\\x{6465}\\x{6466}\\x{6467}\\x{6468}\\x{6469}\\x{646A}\\x{646B}\\x{646C}\\x{646D}' .\n          '\\x{646E}\\x{646F}\\x{6470}\\x{6471}\\x{6472}\\x{6473}\\x{6474}\\x{6475}\\x{6476}' .\n          '\\x{6477}\\x{6478}\\x{6479}\\x{647A}\\x{647B}\\x{647C}\\x{647D}\\x{647F}\\x{6480}' .\n          '\\x{6481}\\x{6482}\\x{6483}\\x{6484}\\x{6485}\\x{6487}\\x{6488}\\x{6489}\\x{648A}' .\n          '\\x{648B}\\x{648C}\\x{648D}\\x{648E}\\x{648F}\\x{6490}\\x{6491}\\x{6492}\\x{6493}' .\n          '\\x{6494}\\x{6495}\\x{6496}\\x{6497}\\x{6498}\\x{6499}\\x{649A}\\x{649B}\\x{649C}' .\n          '\\x{649D}\\x{649E}\\x{649F}\\x{64A0}\\x{64A2}\\x{64A3}\\x{64A4}\\x{64A5}\\x{64A6}' .\n          '\\x{64A7}\\x{64A8}\\x{64A9}\\x{64AA}\\x{64AB}\\x{64AC}\\x{64AD}\\x{64AE}\\x{64B0}' .\n          '\\x{64B1}\\x{64B2}\\x{64B3}\\x{64B4}\\x{64B5}\\x{64B7}\\x{64B8}\\x{64B9}\\x{64BA}' .\n          '\\x{64BB}\\x{64BC}\\x{64BD}\\x{64BE}\\x{64BF}\\x{64C0}\\x{64C1}\\x{64C2}\\x{64C3}' .\n          '\\x{64C4}\\x{64C5}\\x{64C6}\\x{64C7}\\x{64C9}\\x{64CA}\\x{64CB}\\x{64CC}\\x{64CD}' .\n          '\\x{64CE}\\x{64CF}\\x{64D0}\\x{64D1}\\x{64D2}\\x{64D3}\\x{64D4}\\x{64D6}\\x{64D7}' .\n          '\\x{64D8}\\x{64D9}\\x{64DA}\\x{64DB}\\x{64DC}\\x{64DD}\\x{64DE}\\x{64DF}\\x{64E0}' .\n          '\\x{64E2}\\x{64E3}\\x{64E4}\\x{64E6}\\x{64E7}\\x{64E8}\\x{64E9}\\x{64EA}\\x{64EB}' .\n          '\\x{64EC}\\x{64ED}\\x{64EF}\\x{64F0}\\x{64F1}\\x{64F2}\\x{64F3}\\x{64F4}\\x{64F6}' .\n          '\\x{64F7}\\x{64F8}\\x{64FA}\\x{64FB}\\x{64FC}\\x{64FD}\\x{64FE}\\x{64FF}\\x{6500}' .\n          '\\x{6501}\\x{6503}\\x{6504}\\x{6505}\\x{6506}\\x{6507}\\x{6508}\\x{6509}\\x{650B}' .\n          '\\x{650C}\\x{650D}\\x{650E}\\x{650F}\\x{6510}\\x{6511}\\x{6512}\\x{6513}\\x{6514}' .\n          '\\x{6515}\\x{6516}\\x{6517}\\x{6518}\\x{6519}\\x{651A}\\x{651B}\\x{651C}\\x{651D}' .\n          '\\x{651E}\\x{6520}\\x{6521}\\x{6522}\\x{6523}\\x{6524}\\x{6525}\\x{6526}\\x{6527}' .\n          '\\x{6529}\\x{652A}\\x{652B}\\x{652C}\\x{652D}\\x{652E}\\x{652F}\\x{6530}\\x{6531}' .\n          '\\x{6532}\\x{6533}\\x{6534}\\x{6535}\\x{6536}\\x{6537}\\x{6538}\\x{6539}\\x{653A}' .\n          '\\x{653B}\\x{653C}\\x{653D}\\x{653E}\\x{653F}\\x{6541}\\x{6543}\\x{6544}\\x{6545}' .\n          '\\x{6546}\\x{6547}\\x{6548}\\x{6549}\\x{654A}\\x{654B}\\x{654C}\\x{654D}\\x{654E}' .\n          '\\x{654F}\\x{6550}\\x{6551}\\x{6552}\\x{6553}\\x{6554}\\x{6555}\\x{6556}\\x{6557}' .\n          '\\x{6558}\\x{6559}\\x{655B}\\x{655C}\\x{655D}\\x{655E}\\x{6560}\\x{6561}\\x{6562}' .\n          '\\x{6563}\\x{6564}\\x{6565}\\x{6566}\\x{6567}\\x{6568}\\x{6569}\\x{656A}\\x{656B}' .\n          '\\x{656C}\\x{656E}\\x{656F}\\x{6570}\\x{6571}\\x{6572}\\x{6573}\\x{6574}\\x{6575}' .\n          '\\x{6576}\\x{6577}\\x{6578}\\x{6579}\\x{657A}\\x{657B}\\x{657C}\\x{657E}\\x{657F}' .\n          '\\x{6580}\\x{6581}\\x{6582}\\x{6583}\\x{6584}\\x{6585}\\x{6586}\\x{6587}\\x{6588}' .\n          '\\x{6589}\\x{658B}\\x{658C}\\x{658D}\\x{658E}\\x{658F}\\x{6590}\\x{6591}\\x{6592}' .\n          '\\x{6593}\\x{6594}\\x{6595}\\x{6596}\\x{6597}\\x{6598}\\x{6599}\\x{659B}\\x{659C}' .\n          '\\x{659D}\\x{659E}\\x{659F}\\x{65A0}\\x{65A1}\\x{65A2}\\x{65A3}\\x{65A4}\\x{65A5}' .\n          '\\x{65A6}\\x{65A7}\\x{65A8}\\x{65A9}\\x{65AA}\\x{65AB}\\x{65AC}\\x{65AD}\\x{65AE}' .\n          '\\x{65AF}\\x{65B0}\\x{65B1}\\x{65B2}\\x{65B3}\\x{65B4}\\x{65B6}\\x{65B7}\\x{65B8}' .\n          '\\x{65B9}\\x{65BA}\\x{65BB}\\x{65BC}\\x{65BD}\\x{65BF}\\x{65C0}\\x{65C1}\\x{65C2}' .\n          '\\x{65C3}\\x{65C4}\\x{65C5}\\x{65C6}\\x{65C7}\\x{65CA}\\x{65CB}\\x{65CC}\\x{65CD}' .\n          '\\x{65CE}\\x{65CF}\\x{65D0}\\x{65D2}\\x{65D3}\\x{65D4}\\x{65D5}\\x{65D6}\\x{65D7}' .\n          '\\x{65DA}\\x{65DB}\\x{65DD}\\x{65DE}\\x{65DF}\\x{65E0}\\x{65E1}\\x{65E2}\\x{65E3}' .\n          '\\x{65E5}\\x{65E6}\\x{65E7}\\x{65E8}\\x{65E9}\\x{65EB}\\x{65EC}\\x{65ED}\\x{65EE}' .\n          '\\x{65EF}\\x{65F0}\\x{65F1}\\x{65F2}\\x{65F3}\\x{65F4}\\x{65F5}\\x{65F6}\\x{65F7}' .\n          '\\x{65F8}\\x{65FA}\\x{65FB}\\x{65FC}\\x{65FD}\\x{6600}\\x{6601}\\x{6602}\\x{6603}' .\n          '\\x{6604}\\x{6605}\\x{6606}\\x{6607}\\x{6608}\\x{6609}\\x{660A}\\x{660B}\\x{660C}' .\n          '\\x{660D}\\x{660E}\\x{660F}\\x{6610}\\x{6611}\\x{6612}\\x{6613}\\x{6614}\\x{6615}' .\n          '\\x{6616}\\x{6618}\\x{6619}\\x{661A}\\x{661B}\\x{661C}\\x{661D}\\x{661F}\\x{6620}' .\n          '\\x{6621}\\x{6622}\\x{6623}\\x{6624}\\x{6625}\\x{6626}\\x{6627}\\x{6628}\\x{6629}' .\n          '\\x{662A}\\x{662B}\\x{662D}\\x{662E}\\x{662F}\\x{6630}\\x{6631}\\x{6632}\\x{6633}' .\n          '\\x{6634}\\x{6635}\\x{6636}\\x{6639}\\x{663A}\\x{663C}\\x{663D}\\x{663E}\\x{6640}' .\n          '\\x{6641}\\x{6642}\\x{6643}\\x{6644}\\x{6645}\\x{6646}\\x{6647}\\x{6649}\\x{664A}' .\n          '\\x{664B}\\x{664C}\\x{664E}\\x{664F}\\x{6650}\\x{6651}\\x{6652}\\x{6653}\\x{6654}' .\n          '\\x{6655}\\x{6656}\\x{6657}\\x{6658}\\x{6659}\\x{665A}\\x{665B}\\x{665C}\\x{665D}' .\n          '\\x{665E}\\x{665F}\\x{6661}\\x{6662}\\x{6664}\\x{6665}\\x{6666}\\x{6668}\\x{6669}' .\n          '\\x{666A}\\x{666B}\\x{666C}\\x{666D}\\x{666E}\\x{666F}\\x{6670}\\x{6671}\\x{6672}' .\n          '\\x{6673}\\x{6674}\\x{6675}\\x{6676}\\x{6677}\\x{6678}\\x{6679}\\x{667A}\\x{667B}' .\n          '\\x{667C}\\x{667D}\\x{667E}\\x{667F}\\x{6680}\\x{6681}\\x{6682}\\x{6683}\\x{6684}' .\n          '\\x{6685}\\x{6686}\\x{6687}\\x{6688}\\x{6689}\\x{668A}\\x{668B}\\x{668C}\\x{668D}' .\n          '\\x{668E}\\x{668F}\\x{6690}\\x{6691}\\x{6693}\\x{6694}\\x{6695}\\x{6696}\\x{6697}' .\n          '\\x{6698}\\x{6699}\\x{669A}\\x{669B}\\x{669D}\\x{669F}\\x{66A0}\\x{66A1}\\x{66A2}' .\n          '\\x{66A3}\\x{66A4}\\x{66A5}\\x{66A6}\\x{66A7}\\x{66A8}\\x{66A9}\\x{66AA}\\x{66AB}' .\n          '\\x{66AE}\\x{66AF}\\x{66B0}\\x{66B1}\\x{66B2}\\x{66B3}\\x{66B4}\\x{66B5}\\x{66B6}' .\n          '\\x{66B7}\\x{66B8}\\x{66B9}\\x{66BA}\\x{66BB}\\x{66BC}\\x{66BD}\\x{66BE}\\x{66BF}' .\n          '\\x{66C0}\\x{66C1}\\x{66C2}\\x{66C3}\\x{66C4}\\x{66C5}\\x{66C6}\\x{66C7}\\x{66C8}' .\n          '\\x{66C9}\\x{66CA}\\x{66CB}\\x{66CC}\\x{66CD}\\x{66CE}\\x{66CF}\\x{66D1}\\x{66D2}' .\n          '\\x{66D4}\\x{66D5}\\x{66D6}\\x{66D8}\\x{66D9}\\x{66DA}\\x{66DB}\\x{66DC}\\x{66DD}' .\n          '\\x{66DE}\\x{66E0}\\x{66E1}\\x{66E2}\\x{66E3}\\x{66E4}\\x{66E5}\\x{66E6}\\x{66E7}' .\n          '\\x{66E8}\\x{66E9}\\x{66EA}\\x{66EB}\\x{66EC}\\x{66ED}\\x{66EE}\\x{66F0}\\x{66F1}' .\n          '\\x{66F2}\\x{66F3}\\x{66F4}\\x{66F5}\\x{66F6}\\x{66F7}\\x{66F8}\\x{66F9}\\x{66FA}' .\n          '\\x{66FB}\\x{66FC}\\x{66FE}\\x{66FF}\\x{6700}\\x{6701}\\x{6703}\\x{6704}\\x{6705}' .\n          '\\x{6706}\\x{6708}\\x{6709}\\x{670A}\\x{670B}\\x{670C}\\x{670D}\\x{670E}\\x{670F}' .\n          '\\x{6710}\\x{6711}\\x{6712}\\x{6713}\\x{6714}\\x{6715}\\x{6716}\\x{6717}\\x{6718}' .\n          '\\x{671A}\\x{671B}\\x{671C}\\x{671D}\\x{671E}\\x{671F}\\x{6720}\\x{6721}\\x{6722}' .\n          '\\x{6723}\\x{6725}\\x{6726}\\x{6727}\\x{6728}\\x{672A}\\x{672B}\\x{672C}\\x{672D}' .\n          '\\x{672E}\\x{672F}\\x{6730}\\x{6731}\\x{6732}\\x{6733}\\x{6734}\\x{6735}\\x{6736}' .\n          '\\x{6737}\\x{6738}\\x{6739}\\x{673A}\\x{673B}\\x{673C}\\x{673D}\\x{673E}\\x{673F}' .\n          '\\x{6740}\\x{6741}\\x{6742}\\x{6743}\\x{6744}\\x{6745}\\x{6746}\\x{6747}\\x{6748}' .\n          '\\x{6749}\\x{674A}\\x{674B}\\x{674C}\\x{674D}\\x{674E}\\x{674F}\\x{6750}\\x{6751}' .\n          '\\x{6752}\\x{6753}\\x{6754}\\x{6755}\\x{6756}\\x{6757}\\x{6758}\\x{6759}\\x{675A}' .\n          '\\x{675B}\\x{675C}\\x{675D}\\x{675E}\\x{675F}\\x{6760}\\x{6761}\\x{6762}\\x{6763}' .\n          '\\x{6764}\\x{6765}\\x{6766}\\x{6768}\\x{6769}\\x{676A}\\x{676B}\\x{676C}\\x{676D}' .\n          '\\x{676E}\\x{676F}\\x{6770}\\x{6771}\\x{6772}\\x{6773}\\x{6774}\\x{6775}\\x{6776}' .\n          '\\x{6777}\\x{6778}\\x{6779}\\x{677A}\\x{677B}\\x{677C}\\x{677D}\\x{677E}\\x{677F}' .\n          '\\x{6780}\\x{6781}\\x{6782}\\x{6783}\\x{6784}\\x{6785}\\x{6786}\\x{6787}\\x{6789}' .\n          '\\x{678A}\\x{678B}\\x{678C}\\x{678D}\\x{678E}\\x{678F}\\x{6790}\\x{6791}\\x{6792}' .\n          '\\x{6793}\\x{6794}\\x{6795}\\x{6797}\\x{6798}\\x{6799}\\x{679A}\\x{679B}\\x{679C}' .\n          '\\x{679D}\\x{679E}\\x{679F}\\x{67A0}\\x{67A1}\\x{67A2}\\x{67A3}\\x{67A4}\\x{67A5}' .\n          '\\x{67A6}\\x{67A7}\\x{67A8}\\x{67AA}\\x{67AB}\\x{67AC}\\x{67AD}\\x{67AE}\\x{67AF}' .\n          '\\x{67B0}\\x{67B1}\\x{67B2}\\x{67B3}\\x{67B4}\\x{67B5}\\x{67B6}\\x{67B7}\\x{67B8}' .\n          '\\x{67B9}\\x{67BA}\\x{67BB}\\x{67BC}\\x{67BE}\\x{67C0}\\x{67C1}\\x{67C2}\\x{67C3}' .\n          '\\x{67C4}\\x{67C5}\\x{67C6}\\x{67C7}\\x{67C8}\\x{67C9}\\x{67CA}\\x{67CB}\\x{67CC}' .\n          '\\x{67CD}\\x{67CE}\\x{67CF}\\x{67D0}\\x{67D1}\\x{67D2}\\x{67D3}\\x{67D4}\\x{67D6}' .\n          '\\x{67D8}\\x{67D9}\\x{67DA}\\x{67DB}\\x{67DC}\\x{67DD}\\x{67DE}\\x{67DF}\\x{67E0}' .\n          '\\x{67E1}\\x{67E2}\\x{67E3}\\x{67E4}\\x{67E5}\\x{67E6}\\x{67E7}\\x{67E8}\\x{67E9}' .\n          '\\x{67EA}\\x{67EB}\\x{67EC}\\x{67ED}\\x{67EE}\\x{67EF}\\x{67F0}\\x{67F1}\\x{67F2}' .\n          '\\x{67F3}\\x{67F4}\\x{67F5}\\x{67F6}\\x{67F7}\\x{67F8}\\x{67FA}\\x{67FB}\\x{67FC}' .\n          '\\x{67FD}\\x{67FE}\\x{67FF}\\x{6800}\\x{6802}\\x{6803}\\x{6804}\\x{6805}\\x{6806}' .\n          '\\x{6807}\\x{6808}\\x{6809}\\x{680A}\\x{680B}\\x{680C}\\x{680D}\\x{680E}\\x{680F}' .\n          '\\x{6810}\\x{6811}\\x{6812}\\x{6813}\\x{6814}\\x{6816}\\x{6817}\\x{6818}\\x{6819}' .\n          '\\x{681A}\\x{681B}\\x{681C}\\x{681D}\\x{681F}\\x{6820}\\x{6821}\\x{6822}\\x{6823}' .\n          '\\x{6824}\\x{6825}\\x{6826}\\x{6828}\\x{6829}\\x{682A}\\x{682B}\\x{682C}\\x{682D}' .\n          '\\x{682E}\\x{682F}\\x{6831}\\x{6832}\\x{6833}\\x{6834}\\x{6835}\\x{6836}\\x{6837}' .\n          '\\x{6838}\\x{6839}\\x{683A}\\x{683B}\\x{683C}\\x{683D}\\x{683E}\\x{683F}\\x{6840}' .\n          '\\x{6841}\\x{6842}\\x{6843}\\x{6844}\\x{6845}\\x{6846}\\x{6847}\\x{6848}\\x{6849}' .\n          '\\x{684A}\\x{684B}\\x{684C}\\x{684D}\\x{684E}\\x{684F}\\x{6850}\\x{6851}\\x{6852}' .\n          '\\x{6853}\\x{6854}\\x{6855}\\x{6856}\\x{6857}\\x{685B}\\x{685D}\\x{6860}\\x{6861}' .\n          '\\x{6862}\\x{6863}\\x{6864}\\x{6865}\\x{6866}\\x{6867}\\x{6868}\\x{6869}\\x{686A}' .\n          '\\x{686B}\\x{686C}\\x{686D}\\x{686E}\\x{686F}\\x{6870}\\x{6871}\\x{6872}\\x{6873}' .\n          '\\x{6874}\\x{6875}\\x{6876}\\x{6877}\\x{6878}\\x{6879}\\x{687B}\\x{687C}\\x{687D}' .\n          '\\x{687E}\\x{687F}\\x{6880}\\x{6881}\\x{6882}\\x{6883}\\x{6884}\\x{6885}\\x{6886}' .\n          '\\x{6887}\\x{6888}\\x{6889}\\x{688A}\\x{688B}\\x{688C}\\x{688D}\\x{688E}\\x{688F}' .\n          '\\x{6890}\\x{6891}\\x{6892}\\x{6893}\\x{6894}\\x{6896}\\x{6897}\\x{6898}\\x{689A}' .\n          '\\x{689B}\\x{689C}\\x{689D}\\x{689E}\\x{689F}\\x{68A0}\\x{68A1}\\x{68A2}\\x{68A3}' .\n          '\\x{68A4}\\x{68A6}\\x{68A7}\\x{68A8}\\x{68A9}\\x{68AA}\\x{68AB}\\x{68AC}\\x{68AD}' .\n          '\\x{68AE}\\x{68AF}\\x{68B0}\\x{68B1}\\x{68B2}\\x{68B3}\\x{68B4}\\x{68B5}\\x{68B6}' .\n          '\\x{68B7}\\x{68B9}\\x{68BB}\\x{68BC}\\x{68BD}\\x{68BE}\\x{68BF}\\x{68C0}\\x{68C1}' .\n          '\\x{68C2}\\x{68C4}\\x{68C6}\\x{68C7}\\x{68C8}\\x{68C9}\\x{68CA}\\x{68CB}\\x{68CC}' .\n          '\\x{68CD}\\x{68CE}\\x{68CF}\\x{68D0}\\x{68D1}\\x{68D2}\\x{68D3}\\x{68D4}\\x{68D5}' .\n          '\\x{68D6}\\x{68D7}\\x{68D8}\\x{68DA}\\x{68DB}\\x{68DC}\\x{68DD}\\x{68DE}\\x{68DF}' .\n          '\\x{68E0}\\x{68E1}\\x{68E3}\\x{68E4}\\x{68E6}\\x{68E7}\\x{68E8}\\x{68E9}\\x{68EA}' .\n          '\\x{68EB}\\x{68EC}\\x{68ED}\\x{68EE}\\x{68EF}\\x{68F0}\\x{68F1}\\x{68F2}\\x{68F3}' .\n          '\\x{68F4}\\x{68F5}\\x{68F6}\\x{68F7}\\x{68F8}\\x{68F9}\\x{68FA}\\x{68FB}\\x{68FC}' .\n          '\\x{68FD}\\x{68FE}\\x{68FF}\\x{6901}\\x{6902}\\x{6903}\\x{6904}\\x{6905}\\x{6906}' .\n          '\\x{6907}\\x{6908}\\x{690A}\\x{690B}\\x{690C}\\x{690D}\\x{690E}\\x{690F}\\x{6910}' .\n          '\\x{6911}\\x{6912}\\x{6913}\\x{6914}\\x{6915}\\x{6916}\\x{6917}\\x{6918}\\x{6919}' .\n          '\\x{691A}\\x{691B}\\x{691C}\\x{691D}\\x{691E}\\x{691F}\\x{6920}\\x{6921}\\x{6922}' .\n          '\\x{6923}\\x{6924}\\x{6925}\\x{6926}\\x{6927}\\x{6928}\\x{6929}\\x{692A}\\x{692B}' .\n          '\\x{692C}\\x{692D}\\x{692E}\\x{692F}\\x{6930}\\x{6931}\\x{6932}\\x{6933}\\x{6934}' .\n          '\\x{6935}\\x{6936}\\x{6937}\\x{6938}\\x{6939}\\x{693A}\\x{693B}\\x{693C}\\x{693D}' .\n          '\\x{693F}\\x{6940}\\x{6941}\\x{6942}\\x{6943}\\x{6944}\\x{6945}\\x{6946}\\x{6947}' .\n          '\\x{6948}\\x{6949}\\x{694A}\\x{694B}\\x{694C}\\x{694E}\\x{694F}\\x{6950}\\x{6951}' .\n          '\\x{6952}\\x{6953}\\x{6954}\\x{6955}\\x{6956}\\x{6957}\\x{6958}\\x{6959}\\x{695A}' .\n          '\\x{695B}\\x{695C}\\x{695D}\\x{695E}\\x{695F}\\x{6960}\\x{6961}\\x{6962}\\x{6963}' .\n          '\\x{6964}\\x{6965}\\x{6966}\\x{6967}\\x{6968}\\x{6969}\\x{696A}\\x{696B}\\x{696C}' .\n          '\\x{696D}\\x{696E}\\x{696F}\\x{6970}\\x{6971}\\x{6972}\\x{6973}\\x{6974}\\x{6975}' .\n          '\\x{6976}\\x{6977}\\x{6978}\\x{6979}\\x{697A}\\x{697B}\\x{697C}\\x{697D}\\x{697E}' .\n          '\\x{697F}\\x{6980}\\x{6981}\\x{6982}\\x{6983}\\x{6984}\\x{6985}\\x{6986}\\x{6987}' .\n          '\\x{6988}\\x{6989}\\x{698A}\\x{698B}\\x{698C}\\x{698D}\\x{698E}\\x{698F}\\x{6990}' .\n          '\\x{6991}\\x{6992}\\x{6993}\\x{6994}\\x{6995}\\x{6996}\\x{6997}\\x{6998}\\x{6999}' .\n          '\\x{699A}\\x{699B}\\x{699C}\\x{699D}\\x{699E}\\x{69A0}\\x{69A1}\\x{69A3}\\x{69A4}' .\n          '\\x{69A5}\\x{69A6}\\x{69A7}\\x{69A8}\\x{69A9}\\x{69AA}\\x{69AB}\\x{69AC}\\x{69AD}' .\n          '\\x{69AE}\\x{69AF}\\x{69B0}\\x{69B1}\\x{69B2}\\x{69B3}\\x{69B4}\\x{69B5}\\x{69B6}' .\n          '\\x{69B7}\\x{69B8}\\x{69B9}\\x{69BA}\\x{69BB}\\x{69BC}\\x{69BD}\\x{69BE}\\x{69BF}' .\n          '\\x{69C1}\\x{69C2}\\x{69C3}\\x{69C4}\\x{69C5}\\x{69C6}\\x{69C7}\\x{69C8}\\x{69C9}' .\n          '\\x{69CA}\\x{69CB}\\x{69CC}\\x{69CD}\\x{69CE}\\x{69CF}\\x{69D0}\\x{69D3}\\x{69D4}' .\n          '\\x{69D8}\\x{69D9}\\x{69DA}\\x{69DB}\\x{69DC}\\x{69DD}\\x{69DE}\\x{69DF}\\x{69E0}' .\n          '\\x{69E1}\\x{69E2}\\x{69E3}\\x{69E4}\\x{69E5}\\x{69E6}\\x{69E7}\\x{69E8}\\x{69E9}' .\n          '\\x{69EA}\\x{69EB}\\x{69EC}\\x{69ED}\\x{69EE}\\x{69EF}\\x{69F0}\\x{69F1}\\x{69F2}' .\n          '\\x{69F3}\\x{69F4}\\x{69F5}\\x{69F6}\\x{69F7}\\x{69F8}\\x{69FA}\\x{69FB}\\x{69FC}' .\n          '\\x{69FD}\\x{69FE}\\x{69FF}\\x{6A00}\\x{6A01}\\x{6A02}\\x{6A04}\\x{6A05}\\x{6A06}' .\n          '\\x{6A07}\\x{6A08}\\x{6A09}\\x{6A0A}\\x{6A0B}\\x{6A0D}\\x{6A0E}\\x{6A0F}\\x{6A10}' .\n          '\\x{6A11}\\x{6A12}\\x{6A13}\\x{6A14}\\x{6A15}\\x{6A16}\\x{6A17}\\x{6A18}\\x{6A19}' .\n          '\\x{6A1A}\\x{6A1B}\\x{6A1D}\\x{6A1E}\\x{6A1F}\\x{6A20}\\x{6A21}\\x{6A22}\\x{6A23}' .\n          '\\x{6A25}\\x{6A26}\\x{6A27}\\x{6A28}\\x{6A29}\\x{6A2A}\\x{6A2B}\\x{6A2C}\\x{6A2D}' .\n          '\\x{6A2E}\\x{6A2F}\\x{6A30}\\x{6A31}\\x{6A32}\\x{6A33}\\x{6A34}\\x{6A35}\\x{6A36}' .\n          '\\x{6A38}\\x{6A39}\\x{6A3A}\\x{6A3B}\\x{6A3C}\\x{6A3D}\\x{6A3E}\\x{6A3F}\\x{6A40}' .\n          '\\x{6A41}\\x{6A42}\\x{6A43}\\x{6A44}\\x{6A45}\\x{6A46}\\x{6A47}\\x{6A48}\\x{6A49}' .\n          '\\x{6A4B}\\x{6A4C}\\x{6A4D}\\x{6A4E}\\x{6A4F}\\x{6A50}\\x{6A51}\\x{6A52}\\x{6A54}' .\n          '\\x{6A55}\\x{6A56}\\x{6A57}\\x{6A58}\\x{6A59}\\x{6A5A}\\x{6A5B}\\x{6A5D}\\x{6A5E}' .\n          '\\x{6A5F}\\x{6A60}\\x{6A61}\\x{6A62}\\x{6A63}\\x{6A64}\\x{6A65}\\x{6A66}\\x{6A67}' .\n          '\\x{6A68}\\x{6A69}\\x{6A6A}\\x{6A6B}\\x{6A6C}\\x{6A6D}\\x{6A6F}\\x{6A71}\\x{6A72}' .\n          '\\x{6A73}\\x{6A74}\\x{6A75}\\x{6A76}\\x{6A77}\\x{6A78}\\x{6A79}\\x{6A7A}\\x{6A7B}' .\n          '\\x{6A7C}\\x{6A7D}\\x{6A7E}\\x{6A7F}\\x{6A80}\\x{6A81}\\x{6A82}\\x{6A83}\\x{6A84}' .\n          '\\x{6A85}\\x{6A87}\\x{6A88}\\x{6A89}\\x{6A8B}\\x{6A8C}\\x{6A8D}\\x{6A8E}\\x{6A90}' .\n          '\\x{6A91}\\x{6A92}\\x{6A93}\\x{6A94}\\x{6A95}\\x{6A96}\\x{6A97}\\x{6A98}\\x{6A9A}' .\n          '\\x{6A9B}\\x{6A9C}\\x{6A9E}\\x{6A9F}\\x{6AA0}\\x{6AA1}\\x{6AA2}\\x{6AA3}\\x{6AA4}' .\n          '\\x{6AA5}\\x{6AA6}\\x{6AA7}\\x{6AA8}\\x{6AA9}\\x{6AAB}\\x{6AAC}\\x{6AAD}\\x{6AAE}' .\n          '\\x{6AAF}\\x{6AB0}\\x{6AB2}\\x{6AB3}\\x{6AB4}\\x{6AB5}\\x{6AB6}\\x{6AB7}\\x{6AB8}' .\n          '\\x{6AB9}\\x{6ABA}\\x{6ABB}\\x{6ABC}\\x{6ABD}\\x{6ABF}\\x{6AC1}\\x{6AC2}\\x{6AC3}' .\n          '\\x{6AC5}\\x{6AC6}\\x{6AC7}\\x{6ACA}\\x{6ACB}\\x{6ACC}\\x{6ACD}\\x{6ACE}\\x{6ACF}' .\n          '\\x{6AD0}\\x{6AD1}\\x{6AD2}\\x{6AD3}\\x{6AD4}\\x{6AD5}\\x{6AD6}\\x{6AD7}\\x{6AD9}' .\n          '\\x{6ADA}\\x{6ADB}\\x{6ADC}\\x{6ADD}\\x{6ADE}\\x{6ADF}\\x{6AE0}\\x{6AE1}\\x{6AE2}' .\n          '\\x{6AE3}\\x{6AE4}\\x{6AE5}\\x{6AE6}\\x{6AE7}\\x{6AE8}\\x{6AEA}\\x{6AEB}\\x{6AEC}' .\n          '\\x{6AED}\\x{6AEE}\\x{6AEF}\\x{6AF0}\\x{6AF1}\\x{6AF2}\\x{6AF3}\\x{6AF4}\\x{6AF5}' .\n          '\\x{6AF6}\\x{6AF7}\\x{6AF8}\\x{6AF9}\\x{6AFA}\\x{6AFB}\\x{6AFC}\\x{6AFD}\\x{6AFE}' .\n          '\\x{6AFF}\\x{6B00}\\x{6B01}\\x{6B02}\\x{6B03}\\x{6B04}\\x{6B05}\\x{6B06}\\x{6B07}' .\n          '\\x{6B08}\\x{6B09}\\x{6B0A}\\x{6B0B}\\x{6B0C}\\x{6B0D}\\x{6B0F}\\x{6B10}\\x{6B11}' .\n          '\\x{6B12}\\x{6B13}\\x{6B14}\\x{6B15}\\x{6B16}\\x{6B17}\\x{6B18}\\x{6B19}\\x{6B1A}' .\n          '\\x{6B1C}\\x{6B1D}\\x{6B1E}\\x{6B1F}\\x{6B20}\\x{6B21}\\x{6B22}\\x{6B23}\\x{6B24}' .\n          '\\x{6B25}\\x{6B26}\\x{6B27}\\x{6B28}\\x{6B29}\\x{6B2A}\\x{6B2B}\\x{6B2C}\\x{6B2D}' .\n          '\\x{6B2F}\\x{6B30}\\x{6B31}\\x{6B32}\\x{6B33}\\x{6B34}\\x{6B36}\\x{6B37}\\x{6B38}' .\n          '\\x{6B39}\\x{6B3A}\\x{6B3B}\\x{6B3C}\\x{6B3D}\\x{6B3E}\\x{6B3F}\\x{6B41}\\x{6B42}' .\n          '\\x{6B43}\\x{6B44}\\x{6B45}\\x{6B46}\\x{6B47}\\x{6B48}\\x{6B49}\\x{6B4A}\\x{6B4B}' .\n          '\\x{6B4C}\\x{6B4D}\\x{6B4E}\\x{6B4F}\\x{6B50}\\x{6B51}\\x{6B52}\\x{6B53}\\x{6B54}' .\n          '\\x{6B55}\\x{6B56}\\x{6B59}\\x{6B5A}\\x{6B5B}\\x{6B5C}\\x{6B5E}\\x{6B5F}\\x{6B60}' .\n          '\\x{6B61}\\x{6B62}\\x{6B63}\\x{6B64}\\x{6B65}\\x{6B66}\\x{6B67}\\x{6B69}\\x{6B6A}' .\n          '\\x{6B6B}\\x{6B6D}\\x{6B6F}\\x{6B70}\\x{6B72}\\x{6B73}\\x{6B74}\\x{6B76}\\x{6B77}' .\n          '\\x{6B78}\\x{6B79}\\x{6B7A}\\x{6B7B}\\x{6B7C}\\x{6B7E}\\x{6B7F}\\x{6B80}\\x{6B81}' .\n          '\\x{6B82}\\x{6B83}\\x{6B84}\\x{6B85}\\x{6B86}\\x{6B87}\\x{6B88}\\x{6B89}\\x{6B8A}' .\n          '\\x{6B8B}\\x{6B8C}\\x{6B8D}\\x{6B8E}\\x{6B8F}\\x{6B90}\\x{6B91}\\x{6B92}\\x{6B93}' .\n          '\\x{6B94}\\x{6B95}\\x{6B96}\\x{6B97}\\x{6B98}\\x{6B99}\\x{6B9A}\\x{6B9B}\\x{6B9C}' .\n          '\\x{6B9D}\\x{6B9E}\\x{6B9F}\\x{6BA0}\\x{6BA1}\\x{6BA2}\\x{6BA3}\\x{6BA4}\\x{6BA5}' .\n          '\\x{6BA6}\\x{6BA7}\\x{6BA8}\\x{6BA9}\\x{6BAA}\\x{6BAB}\\x{6BAC}\\x{6BAD}\\x{6BAE}' .\n          '\\x{6BAF}\\x{6BB0}\\x{6BB2}\\x{6BB3}\\x{6BB4}\\x{6BB5}\\x{6BB6}\\x{6BB7}\\x{6BB9}' .\n          '\\x{6BBA}\\x{6BBB}\\x{6BBC}\\x{6BBD}\\x{6BBE}\\x{6BBF}\\x{6BC0}\\x{6BC1}\\x{6BC2}' .\n          '\\x{6BC3}\\x{6BC4}\\x{6BC5}\\x{6BC6}\\x{6BC7}\\x{6BC8}\\x{6BC9}\\x{6BCA}\\x{6BCB}' .\n          '\\x{6BCC}\\x{6BCD}\\x{6BCE}\\x{6BCF}\\x{6BD0}\\x{6BD1}\\x{6BD2}\\x{6BD3}\\x{6BD4}' .\n          '\\x{6BD5}\\x{6BD6}\\x{6BD7}\\x{6BD8}\\x{6BD9}\\x{6BDA}\\x{6BDB}\\x{6BDC}\\x{6BDD}' .\n          '\\x{6BDE}\\x{6BDF}\\x{6BE0}\\x{6BE1}\\x{6BE2}\\x{6BE3}\\x{6BE4}\\x{6BE5}\\x{6BE6}' .\n          '\\x{6BE7}\\x{6BE8}\\x{6BEA}\\x{6BEB}\\x{6BEC}\\x{6BED}\\x{6BEE}\\x{6BEF}\\x{6BF0}' .\n          '\\x{6BF2}\\x{6BF3}\\x{6BF5}\\x{6BF6}\\x{6BF7}\\x{6BF8}\\x{6BF9}\\x{6BFB}\\x{6BFC}' .\n          '\\x{6BFD}\\x{6BFE}\\x{6BFF}\\x{6C00}\\x{6C01}\\x{6C02}\\x{6C03}\\x{6C04}\\x{6C05}' .\n          '\\x{6C06}\\x{6C07}\\x{6C08}\\x{6C09}\\x{6C0B}\\x{6C0C}\\x{6C0D}\\x{6C0E}\\x{6C0F}' .\n          '\\x{6C10}\\x{6C11}\\x{6C12}\\x{6C13}\\x{6C14}\\x{6C15}\\x{6C16}\\x{6C18}\\x{6C19}' .\n          '\\x{6C1A}\\x{6C1B}\\x{6C1D}\\x{6C1E}\\x{6C1F}\\x{6C20}\\x{6C21}\\x{6C22}\\x{6C23}' .\n          '\\x{6C24}\\x{6C25}\\x{6C26}\\x{6C27}\\x{6C28}\\x{6C29}\\x{6C2A}\\x{6C2B}\\x{6C2C}' .\n          '\\x{6C2E}\\x{6C2F}\\x{6C30}\\x{6C31}\\x{6C32}\\x{6C33}\\x{6C34}\\x{6C35}\\x{6C36}' .\n          '\\x{6C37}\\x{6C38}\\x{6C3A}\\x{6C3B}\\x{6C3D}\\x{6C3E}\\x{6C3F}\\x{6C40}\\x{6C41}' .\n          '\\x{6C42}\\x{6C43}\\x{6C44}\\x{6C46}\\x{6C47}\\x{6C48}\\x{6C49}\\x{6C4A}\\x{6C4B}' .\n          '\\x{6C4C}\\x{6C4D}\\x{6C4E}\\x{6C4F}\\x{6C50}\\x{6C51}\\x{6C52}\\x{6C53}\\x{6C54}' .\n          '\\x{6C55}\\x{6C56}\\x{6C57}\\x{6C58}\\x{6C59}\\x{6C5A}\\x{6C5B}\\x{6C5C}\\x{6C5D}' .\n          '\\x{6C5E}\\x{6C5F}\\x{6C60}\\x{6C61}\\x{6C62}\\x{6C63}\\x{6C64}\\x{6C65}\\x{6C66}' .\n          '\\x{6C67}\\x{6C68}\\x{6C69}\\x{6C6A}\\x{6C6B}\\x{6C6D}\\x{6C6F}\\x{6C70}\\x{6C71}' .\n          '\\x{6C72}\\x{6C73}\\x{6C74}\\x{6C75}\\x{6C76}\\x{6C77}\\x{6C78}\\x{6C79}\\x{6C7A}' .\n          '\\x{6C7B}\\x{6C7C}\\x{6C7D}\\x{6C7E}\\x{6C7F}\\x{6C80}\\x{6C81}\\x{6C82}\\x{6C83}' .\n          '\\x{6C84}\\x{6C85}\\x{6C86}\\x{6C87}\\x{6C88}\\x{6C89}\\x{6C8A}\\x{6C8B}\\x{6C8C}' .\n          '\\x{6C8D}\\x{6C8E}\\x{6C8F}\\x{6C90}\\x{6C91}\\x{6C92}\\x{6C93}\\x{6C94}\\x{6C95}' .\n          '\\x{6C96}\\x{6C97}\\x{6C98}\\x{6C99}\\x{6C9A}\\x{6C9B}\\x{6C9C}\\x{6C9D}\\x{6C9E}' .\n          '\\x{6C9F}\\x{6CA1}\\x{6CA2}\\x{6CA3}\\x{6CA4}\\x{6CA5}\\x{6CA6}\\x{6CA7}\\x{6CA8}' .\n          '\\x{6CA9}\\x{6CAA}\\x{6CAB}\\x{6CAC}\\x{6CAD}\\x{6CAE}\\x{6CAF}\\x{6CB0}\\x{6CB1}' .\n          '\\x{6CB2}\\x{6CB3}\\x{6CB4}\\x{6CB5}\\x{6CB6}\\x{6CB7}\\x{6CB8}\\x{6CB9}\\x{6CBA}' .\n          '\\x{6CBB}\\x{6CBC}\\x{6CBD}\\x{6CBE}\\x{6CBF}\\x{6CC0}\\x{6CC1}\\x{6CC2}\\x{6CC3}' .\n          '\\x{6CC4}\\x{6CC5}\\x{6CC6}\\x{6CC7}\\x{6CC8}\\x{6CC9}\\x{6CCA}\\x{6CCB}\\x{6CCC}' .\n          '\\x{6CCD}\\x{6CCE}\\x{6CCF}\\x{6CD0}\\x{6CD1}\\x{6CD2}\\x{6CD3}\\x{6CD4}\\x{6CD5}' .\n          '\\x{6CD6}\\x{6CD7}\\x{6CD9}\\x{6CDA}\\x{6CDB}\\x{6CDC}\\x{6CDD}\\x{6CDE}\\x{6CDF}' .\n          '\\x{6CE0}\\x{6CE1}\\x{6CE2}\\x{6CE3}\\x{6CE4}\\x{6CE5}\\x{6CE6}\\x{6CE7}\\x{6CE8}' .\n          '\\x{6CE9}\\x{6CEA}\\x{6CEB}\\x{6CEC}\\x{6CED}\\x{6CEE}\\x{6CEF}\\x{6CF0}\\x{6CF1}' .\n          '\\x{6CF2}\\x{6CF3}\\x{6CF5}\\x{6CF6}\\x{6CF7}\\x{6CF8}\\x{6CF9}\\x{6CFA}\\x{6CFB}' .\n          '\\x{6CFC}\\x{6CFD}\\x{6CFE}\\x{6CFF}\\x{6D00}\\x{6D01}\\x{6D03}\\x{6D04}\\x{6D05}' .\n          '\\x{6D06}\\x{6D07}\\x{6D08}\\x{6D09}\\x{6D0A}\\x{6D0B}\\x{6D0C}\\x{6D0D}\\x{6D0E}' .\n          '\\x{6D0F}\\x{6D10}\\x{6D11}\\x{6D12}\\x{6D13}\\x{6D14}\\x{6D15}\\x{6D16}\\x{6D17}' .\n          '\\x{6D18}\\x{6D19}\\x{6D1A}\\x{6D1B}\\x{6D1D}\\x{6D1E}\\x{6D1F}\\x{6D20}\\x{6D21}' .\n          '\\x{6D22}\\x{6D23}\\x{6D25}\\x{6D26}\\x{6D27}\\x{6D28}\\x{6D29}\\x{6D2A}\\x{6D2B}' .\n          '\\x{6D2C}\\x{6D2D}\\x{6D2E}\\x{6D2F}\\x{6D30}\\x{6D31}\\x{6D32}\\x{6D33}\\x{6D34}' .\n          '\\x{6D35}\\x{6D36}\\x{6D37}\\x{6D38}\\x{6D39}\\x{6D3A}\\x{6D3B}\\x{6D3C}\\x{6D3D}' .\n          '\\x{6D3E}\\x{6D3F}\\x{6D40}\\x{6D41}\\x{6D42}\\x{6D43}\\x{6D44}\\x{6D45}\\x{6D46}' .\n          '\\x{6D47}\\x{6D48}\\x{6D49}\\x{6D4A}\\x{6D4B}\\x{6D4C}\\x{6D4D}\\x{6D4E}\\x{6D4F}' .\n          '\\x{6D50}\\x{6D51}\\x{6D52}\\x{6D53}\\x{6D54}\\x{6D55}\\x{6D56}\\x{6D57}\\x{6D58}' .\n          '\\x{6D59}\\x{6D5A}\\x{6D5B}\\x{6D5C}\\x{6D5D}\\x{6D5E}\\x{6D5F}\\x{6D60}\\x{6D61}' .\n          '\\x{6D62}\\x{6D63}\\x{6D64}\\x{6D65}\\x{6D66}\\x{6D67}\\x{6D68}\\x{6D69}\\x{6D6A}' .\n          '\\x{6D6B}\\x{6D6C}\\x{6D6D}\\x{6D6E}\\x{6D6F}\\x{6D70}\\x{6D72}\\x{6D73}\\x{6D74}' .\n          '\\x{6D75}\\x{6D76}\\x{6D77}\\x{6D78}\\x{6D79}\\x{6D7A}\\x{6D7B}\\x{6D7C}\\x{6D7D}' .\n          '\\x{6D7E}\\x{6D7F}\\x{6D80}\\x{6D82}\\x{6D83}\\x{6D84}\\x{6D85}\\x{6D86}\\x{6D87}' .\n          '\\x{6D88}\\x{6D89}\\x{6D8A}\\x{6D8B}\\x{6D8C}\\x{6D8D}\\x{6D8E}\\x{6D8F}\\x{6D90}' .\n          '\\x{6D91}\\x{6D92}\\x{6D93}\\x{6D94}\\x{6D95}\\x{6D97}\\x{6D98}\\x{6D99}\\x{6D9A}' .\n          '\\x{6D9B}\\x{6D9D}\\x{6D9E}\\x{6D9F}\\x{6DA0}\\x{6DA1}\\x{6DA2}\\x{6DA3}\\x{6DA4}' .\n          '\\x{6DA5}\\x{6DA6}\\x{6DA7}\\x{6DA8}\\x{6DA9}\\x{6DAA}\\x{6DAB}\\x{6DAC}\\x{6DAD}' .\n          '\\x{6DAE}\\x{6DAF}\\x{6DB2}\\x{6DB3}\\x{6DB4}\\x{6DB5}\\x{6DB7}\\x{6DB8}\\x{6DB9}' .\n          '\\x{6DBA}\\x{6DBB}\\x{6DBC}\\x{6DBD}\\x{6DBE}\\x{6DBF}\\x{6DC0}\\x{6DC1}\\x{6DC2}' .\n          '\\x{6DC3}\\x{6DC4}\\x{6DC5}\\x{6DC6}\\x{6DC7}\\x{6DC8}\\x{6DC9}\\x{6DCA}\\x{6DCB}' .\n          '\\x{6DCC}\\x{6DCD}\\x{6DCE}\\x{6DCF}\\x{6DD0}\\x{6DD1}\\x{6DD2}\\x{6DD3}\\x{6DD4}' .\n          '\\x{6DD5}\\x{6DD6}\\x{6DD7}\\x{6DD8}\\x{6DD9}\\x{6DDA}\\x{6DDB}\\x{6DDC}\\x{6DDD}' .\n          '\\x{6DDE}\\x{6DDF}\\x{6DE0}\\x{6DE1}\\x{6DE2}\\x{6DE3}\\x{6DE4}\\x{6DE5}\\x{6DE6}' .\n          '\\x{6DE7}\\x{6DE8}\\x{6DE9}\\x{6DEA}\\x{6DEB}\\x{6DEC}\\x{6DED}\\x{6DEE}\\x{6DEF}' .\n          '\\x{6DF0}\\x{6DF1}\\x{6DF2}\\x{6DF3}\\x{6DF4}\\x{6DF5}\\x{6DF6}\\x{6DF7}\\x{6DF8}' .\n          '\\x{6DF9}\\x{6DFA}\\x{6DFB}\\x{6DFC}\\x{6DFD}\\x{6E00}\\x{6E03}\\x{6E04}\\x{6E05}' .\n          '\\x{6E07}\\x{6E08}\\x{6E09}\\x{6E0A}\\x{6E0B}\\x{6E0C}\\x{6E0D}\\x{6E0E}\\x{6E0F}' .\n          '\\x{6E10}\\x{6E11}\\x{6E14}\\x{6E15}\\x{6E16}\\x{6E17}\\x{6E19}\\x{6E1A}\\x{6E1B}' .\n          '\\x{6E1C}\\x{6E1D}\\x{6E1E}\\x{6E1F}\\x{6E20}\\x{6E21}\\x{6E22}\\x{6E23}\\x{6E24}' .\n          '\\x{6E25}\\x{6E26}\\x{6E27}\\x{6E28}\\x{6E29}\\x{6E2B}\\x{6E2C}\\x{6E2D}\\x{6E2E}' .\n          '\\x{6E2F}\\x{6E30}\\x{6E31}\\x{6E32}\\x{6E33}\\x{6E34}\\x{6E35}\\x{6E36}\\x{6E37}' .\n          '\\x{6E38}\\x{6E39}\\x{6E3A}\\x{6E3B}\\x{6E3C}\\x{6E3D}\\x{6E3E}\\x{6E3F}\\x{6E40}' .\n          '\\x{6E41}\\x{6E42}\\x{6E43}\\x{6E44}\\x{6E45}\\x{6E46}\\x{6E47}\\x{6E48}\\x{6E49}' .\n          '\\x{6E4A}\\x{6E4B}\\x{6E4D}\\x{6E4E}\\x{6E4F}\\x{6E50}\\x{6E51}\\x{6E52}\\x{6E53}' .\n          '\\x{6E54}\\x{6E55}\\x{6E56}\\x{6E57}\\x{6E58}\\x{6E59}\\x{6E5A}\\x{6E5B}\\x{6E5C}' .\n          '\\x{6E5D}\\x{6E5E}\\x{6E5F}\\x{6E60}\\x{6E61}\\x{6E62}\\x{6E63}\\x{6E64}\\x{6E65}' .\n          '\\x{6E66}\\x{6E67}\\x{6E68}\\x{6E69}\\x{6E6A}\\x{6E6B}\\x{6E6D}\\x{6E6E}\\x{6E6F}' .\n          '\\x{6E70}\\x{6E71}\\x{6E72}\\x{6E73}\\x{6E74}\\x{6E75}\\x{6E77}\\x{6E78}\\x{6E79}' .\n          '\\x{6E7E}\\x{6E7F}\\x{6E80}\\x{6E81}\\x{6E82}\\x{6E83}\\x{6E84}\\x{6E85}\\x{6E86}' .\n          '\\x{6E87}\\x{6E88}\\x{6E89}\\x{6E8A}\\x{6E8D}\\x{6E8E}\\x{6E8F}\\x{6E90}\\x{6E91}' .\n          '\\x{6E92}\\x{6E93}\\x{6E94}\\x{6E96}\\x{6E97}\\x{6E98}\\x{6E99}\\x{6E9A}\\x{6E9B}' .\n          '\\x{6E9C}\\x{6E9D}\\x{6E9E}\\x{6E9F}\\x{6EA0}\\x{6EA1}\\x{6EA2}\\x{6EA3}\\x{6EA4}' .\n          '\\x{6EA5}\\x{6EA6}\\x{6EA7}\\x{6EA8}\\x{6EA9}\\x{6EAA}\\x{6EAB}\\x{6EAC}\\x{6EAD}' .\n          '\\x{6EAE}\\x{6EAF}\\x{6EB0}\\x{6EB1}\\x{6EB2}\\x{6EB3}\\x{6EB4}\\x{6EB5}\\x{6EB6}' .\n          '\\x{6EB7}\\x{6EB8}\\x{6EB9}\\x{6EBA}\\x{6EBB}\\x{6EBC}\\x{6EBD}\\x{6EBE}\\x{6EBF}' .\n          '\\x{6EC0}\\x{6EC1}\\x{6EC2}\\x{6EC3}\\x{6EC4}\\x{6EC5}\\x{6EC6}\\x{6EC7}\\x{6EC8}' .\n          '\\x{6EC9}\\x{6ECA}\\x{6ECB}\\x{6ECC}\\x{6ECD}\\x{6ECE}\\x{6ECF}\\x{6ED0}\\x{6ED1}' .\n          '\\x{6ED2}\\x{6ED3}\\x{6ED4}\\x{6ED5}\\x{6ED6}\\x{6ED7}\\x{6ED8}\\x{6ED9}\\x{6EDA}' .\n          '\\x{6EDC}\\x{6EDE}\\x{6EDF}\\x{6EE0}\\x{6EE1}\\x{6EE2}\\x{6EE4}\\x{6EE5}\\x{6EE6}' .\n          '\\x{6EE7}\\x{6EE8}\\x{6EE9}\\x{6EEA}\\x{6EEB}\\x{6EEC}\\x{6EED}\\x{6EEE}\\x{6EEF}' .\n          '\\x{6EF0}\\x{6EF1}\\x{6EF2}\\x{6EF3}\\x{6EF4}\\x{6EF5}\\x{6EF6}\\x{6EF7}\\x{6EF8}' .\n          '\\x{6EF9}\\x{6EFA}\\x{6EFB}\\x{6EFC}\\x{6EFD}\\x{6EFE}\\x{6EFF}\\x{6F00}\\x{6F01}' .\n          '\\x{6F02}\\x{6F03}\\x{6F05}\\x{6F06}\\x{6F07}\\x{6F08}\\x{6F09}\\x{6F0A}\\x{6F0C}' .\n          '\\x{6F0D}\\x{6F0E}\\x{6F0F}\\x{6F10}\\x{6F11}\\x{6F12}\\x{6F13}\\x{6F14}\\x{6F15}' .\n          '\\x{6F16}\\x{6F17}\\x{6F18}\\x{6F19}\\x{6F1A}\\x{6F1B}\\x{6F1C}\\x{6F1D}\\x{6F1E}' .\n          '\\x{6F1F}\\x{6F20}\\x{6F21}\\x{6F22}\\x{6F23}\\x{6F24}\\x{6F25}\\x{6F26}\\x{6F27}' .\n          '\\x{6F28}\\x{6F29}\\x{6F2A}\\x{6F2B}\\x{6F2C}\\x{6F2D}\\x{6F2E}\\x{6F2F}\\x{6F30}' .\n          '\\x{6F31}\\x{6F32}\\x{6F33}\\x{6F34}\\x{6F35}\\x{6F36}\\x{6F37}\\x{6F38}\\x{6F39}' .\n          '\\x{6F3A}\\x{6F3B}\\x{6F3C}\\x{6F3D}\\x{6F3E}\\x{6F3F}\\x{6F40}\\x{6F41}\\x{6F43}' .\n          '\\x{6F44}\\x{6F45}\\x{6F46}\\x{6F47}\\x{6F49}\\x{6F4B}\\x{6F4C}\\x{6F4D}\\x{6F4E}' .\n          '\\x{6F4F}\\x{6F50}\\x{6F51}\\x{6F52}\\x{6F53}\\x{6F54}\\x{6F55}\\x{6F56}\\x{6F57}' .\n          '\\x{6F58}\\x{6F59}\\x{6F5A}\\x{6F5B}\\x{6F5C}\\x{6F5D}\\x{6F5E}\\x{6F5F}\\x{6F60}' .\n          '\\x{6F61}\\x{6F62}\\x{6F63}\\x{6F64}\\x{6F65}\\x{6F66}\\x{6F67}\\x{6F68}\\x{6F69}' .\n          '\\x{6F6A}\\x{6F6B}\\x{6F6C}\\x{6F6D}\\x{6F6E}\\x{6F6F}\\x{6F70}\\x{6F71}\\x{6F72}' .\n          '\\x{6F73}\\x{6F74}\\x{6F75}\\x{6F76}\\x{6F77}\\x{6F78}\\x{6F7A}\\x{6F7B}\\x{6F7C}' .\n          '\\x{6F7D}\\x{6F7E}\\x{6F7F}\\x{6F80}\\x{6F81}\\x{6F82}\\x{6F83}\\x{6F84}\\x{6F85}' .\n          '\\x{6F86}\\x{6F87}\\x{6F88}\\x{6F89}\\x{6F8A}\\x{6F8B}\\x{6F8C}\\x{6F8D}\\x{6F8E}' .\n          '\\x{6F8F}\\x{6F90}\\x{6F91}\\x{6F92}\\x{6F93}\\x{6F94}\\x{6F95}\\x{6F96}\\x{6F97}' .\n          '\\x{6F99}\\x{6F9B}\\x{6F9C}\\x{6F9D}\\x{6F9E}\\x{6FA0}\\x{6FA1}\\x{6FA2}\\x{6FA3}' .\n          '\\x{6FA4}\\x{6FA5}\\x{6FA6}\\x{6FA7}\\x{6FA8}\\x{6FA9}\\x{6FAA}\\x{6FAB}\\x{6FAC}' .\n          '\\x{6FAD}\\x{6FAE}\\x{6FAF}\\x{6FB0}\\x{6FB1}\\x{6FB2}\\x{6FB3}\\x{6FB4}\\x{6FB5}' .\n          '\\x{6FB6}\\x{6FB8}\\x{6FB9}\\x{6FBA}\\x{6FBB}\\x{6FBC}\\x{6FBD}\\x{6FBE}\\x{6FBF}' .\n          '\\x{6FC0}\\x{6FC1}\\x{6FC2}\\x{6FC3}\\x{6FC4}\\x{6FC6}\\x{6FC7}\\x{6FC8}\\x{6FC9}' .\n          '\\x{6FCA}\\x{6FCB}\\x{6FCC}\\x{6FCD}\\x{6FCE}\\x{6FCF}\\x{6FD1}\\x{6FD2}\\x{6FD4}' .\n          '\\x{6FD5}\\x{6FD6}\\x{6FD7}\\x{6FD8}\\x{6FD9}\\x{6FDA}\\x{6FDB}\\x{6FDC}\\x{6FDD}' .\n          '\\x{6FDE}\\x{6FDF}\\x{6FE0}\\x{6FE1}\\x{6FE2}\\x{6FE3}\\x{6FE4}\\x{6FE5}\\x{6FE6}' .\n          '\\x{6FE7}\\x{6FE8}\\x{6FE9}\\x{6FEA}\\x{6FEB}\\x{6FEC}\\x{6FED}\\x{6FEE}\\x{6FEF}' .\n          '\\x{6FF0}\\x{6FF1}\\x{6FF2}\\x{6FF3}\\x{6FF4}\\x{6FF6}\\x{6FF7}\\x{6FF8}\\x{6FF9}' .\n          '\\x{6FFA}\\x{6FFB}\\x{6FFC}\\x{6FFE}\\x{6FFF}\\x{7000}\\x{7001}\\x{7002}\\x{7003}' .\n          '\\x{7004}\\x{7005}\\x{7006}\\x{7007}\\x{7008}\\x{7009}\\x{700A}\\x{700B}\\x{700C}' .\n          '\\x{700D}\\x{700E}\\x{700F}\\x{7011}\\x{7012}\\x{7014}\\x{7015}\\x{7016}\\x{7017}' .\n          '\\x{7018}\\x{7019}\\x{701A}\\x{701B}\\x{701C}\\x{701D}\\x{701F}\\x{7020}\\x{7021}' .\n          '\\x{7022}\\x{7023}\\x{7024}\\x{7025}\\x{7026}\\x{7027}\\x{7028}\\x{7029}\\x{702A}' .\n          '\\x{702B}\\x{702C}\\x{702D}\\x{702E}\\x{702F}\\x{7030}\\x{7031}\\x{7032}\\x{7033}' .\n          '\\x{7034}\\x{7035}\\x{7036}\\x{7037}\\x{7038}\\x{7039}\\x{703A}\\x{703B}\\x{703C}' .\n          '\\x{703D}\\x{703E}\\x{703F}\\x{7040}\\x{7041}\\x{7042}\\x{7043}\\x{7044}\\x{7045}' .\n          '\\x{7046}\\x{7048}\\x{7049}\\x{704A}\\x{704C}\\x{704D}\\x{704F}\\x{7050}\\x{7051}' .\n          '\\x{7052}\\x{7053}\\x{7054}\\x{7055}\\x{7056}\\x{7057}\\x{7058}\\x{7059}\\x{705A}' .\n          '\\x{705B}\\x{705C}\\x{705D}\\x{705E}\\x{705F}\\x{7060}\\x{7061}\\x{7062}\\x{7063}' .\n          '\\x{7064}\\x{7065}\\x{7066}\\x{7067}\\x{7068}\\x{7069}\\x{706A}\\x{706B}\\x{706C}' .\n          '\\x{706D}\\x{706E}\\x{706F}\\x{7070}\\x{7071}\\x{7074}\\x{7075}\\x{7076}\\x{7077}' .\n          '\\x{7078}\\x{7079}\\x{707A}\\x{707C}\\x{707D}\\x{707E}\\x{707F}\\x{7080}\\x{7082}' .\n          '\\x{7083}\\x{7084}\\x{7085}\\x{7086}\\x{7087}\\x{7088}\\x{7089}\\x{708A}\\x{708B}' .\n          '\\x{708C}\\x{708E}\\x{708F}\\x{7090}\\x{7091}\\x{7092}\\x{7093}\\x{7094}\\x{7095}' .\n          '\\x{7096}\\x{7098}\\x{7099}\\x{709A}\\x{709C}\\x{709D}\\x{709E}\\x{709F}\\x{70A0}' .\n          '\\x{70A1}\\x{70A2}\\x{70A3}\\x{70A4}\\x{70A5}\\x{70A6}\\x{70A7}\\x{70A8}\\x{70A9}' .\n          '\\x{70AB}\\x{70AC}\\x{70AD}\\x{70AE}\\x{70AF}\\x{70B0}\\x{70B1}\\x{70B3}\\x{70B4}' .\n          '\\x{70B5}\\x{70B7}\\x{70B8}\\x{70B9}\\x{70BA}\\x{70BB}\\x{70BC}\\x{70BD}\\x{70BE}' .\n          '\\x{70BF}\\x{70C0}\\x{70C1}\\x{70C2}\\x{70C3}\\x{70C4}\\x{70C5}\\x{70C6}\\x{70C7}' .\n          '\\x{70C8}\\x{70C9}\\x{70CA}\\x{70CB}\\x{70CC}\\x{70CD}\\x{70CE}\\x{70CF}\\x{70D0}' .\n          '\\x{70D1}\\x{70D2}\\x{70D3}\\x{70D4}\\x{70D6}\\x{70D7}\\x{70D8}\\x{70D9}\\x{70DA}' .\n          '\\x{70DB}\\x{70DC}\\x{70DD}\\x{70DE}\\x{70DF}\\x{70E0}\\x{70E1}\\x{70E2}\\x{70E3}' .\n          '\\x{70E4}\\x{70E5}\\x{70E6}\\x{70E7}\\x{70E8}\\x{70E9}\\x{70EA}\\x{70EB}\\x{70EC}' .\n          '\\x{70ED}\\x{70EE}\\x{70EF}\\x{70F0}\\x{70F1}\\x{70F2}\\x{70F3}\\x{70F4}\\x{70F5}' .\n          '\\x{70F6}\\x{70F7}\\x{70F8}\\x{70F9}\\x{70FA}\\x{70FB}\\x{70FC}\\x{70FD}\\x{70FF}' .\n          '\\x{7100}\\x{7101}\\x{7102}\\x{7103}\\x{7104}\\x{7105}\\x{7106}\\x{7107}\\x{7109}' .\n          '\\x{710A}\\x{710B}\\x{710C}\\x{710D}\\x{710E}\\x{710F}\\x{7110}\\x{7111}\\x{7112}' .\n          '\\x{7113}\\x{7115}\\x{7116}\\x{7117}\\x{7118}\\x{7119}\\x{711A}\\x{711B}\\x{711C}' .\n          '\\x{711D}\\x{711E}\\x{711F}\\x{7120}\\x{7121}\\x{7122}\\x{7123}\\x{7125}\\x{7126}' .\n          '\\x{7127}\\x{7128}\\x{7129}\\x{712A}\\x{712B}\\x{712C}\\x{712D}\\x{712E}\\x{712F}' .\n          '\\x{7130}\\x{7131}\\x{7132}\\x{7135}\\x{7136}\\x{7137}\\x{7138}\\x{7139}\\x{713A}' .\n          '\\x{713B}\\x{713D}\\x{713E}\\x{713F}\\x{7140}\\x{7141}\\x{7142}\\x{7143}\\x{7144}' .\n          '\\x{7145}\\x{7146}\\x{7147}\\x{7148}\\x{7149}\\x{714A}\\x{714B}\\x{714C}\\x{714D}' .\n          '\\x{714E}\\x{714F}\\x{7150}\\x{7151}\\x{7152}\\x{7153}\\x{7154}\\x{7156}\\x{7158}' .\n          '\\x{7159}\\x{715A}\\x{715B}\\x{715C}\\x{715D}\\x{715E}\\x{715F}\\x{7160}\\x{7161}' .\n          '\\x{7162}\\x{7163}\\x{7164}\\x{7165}\\x{7166}\\x{7167}\\x{7168}\\x{7169}\\x{716A}' .\n          '\\x{716C}\\x{716E}\\x{716F}\\x{7170}\\x{7171}\\x{7172}\\x{7173}\\x{7174}\\x{7175}' .\n          '\\x{7176}\\x{7177}\\x{7178}\\x{7179}\\x{717A}\\x{717B}\\x{717C}\\x{717D}\\x{717E}' .\n          '\\x{717F}\\x{7180}\\x{7181}\\x{7182}\\x{7183}\\x{7184}\\x{7185}\\x{7186}\\x{7187}' .\n          '\\x{7188}\\x{7189}\\x{718A}\\x{718B}\\x{718C}\\x{718E}\\x{718F}\\x{7190}\\x{7191}' .\n          '\\x{7192}\\x{7193}\\x{7194}\\x{7195}\\x{7197}\\x{7198}\\x{7199}\\x{719A}\\x{719B}' .\n          '\\x{719C}\\x{719D}\\x{719E}\\x{719F}\\x{71A0}\\x{71A1}\\x{71A2}\\x{71A3}\\x{71A4}' .\n          '\\x{71A5}\\x{71A7}\\x{71A8}\\x{71A9}\\x{71AA}\\x{71AC}\\x{71AD}\\x{71AE}\\x{71AF}' .\n          '\\x{71B0}\\x{71B1}\\x{71B2}\\x{71B3}\\x{71B4}\\x{71B5}\\x{71B7}\\x{71B8}\\x{71B9}' .\n          '\\x{71BA}\\x{71BB}\\x{71BC}\\x{71BD}\\x{71BE}\\x{71BF}\\x{71C0}\\x{71C1}\\x{71C2}' .\n          '\\x{71C3}\\x{71C4}\\x{71C5}\\x{71C6}\\x{71C7}\\x{71C8}\\x{71C9}\\x{71CA}\\x{71CB}' .\n          '\\x{71CD}\\x{71CE}\\x{71CF}\\x{71D0}\\x{71D1}\\x{71D2}\\x{71D4}\\x{71D5}\\x{71D6}' .\n          '\\x{71D7}\\x{71D8}\\x{71D9}\\x{71DA}\\x{71DB}\\x{71DC}\\x{71DD}\\x{71DE}\\x{71DF}' .\n          '\\x{71E0}\\x{71E1}\\x{71E2}\\x{71E3}\\x{71E4}\\x{71E5}\\x{71E6}\\x{71E7}\\x{71E8}' .\n          '\\x{71E9}\\x{71EA}\\x{71EB}\\x{71EC}\\x{71ED}\\x{71EE}\\x{71EF}\\x{71F0}\\x{71F1}' .\n          '\\x{71F2}\\x{71F4}\\x{71F5}\\x{71F6}\\x{71F7}\\x{71F8}\\x{71F9}\\x{71FB}\\x{71FC}' .\n          '\\x{71FD}\\x{71FE}\\x{71FF}\\x{7201}\\x{7202}\\x{7203}\\x{7204}\\x{7205}\\x{7206}' .\n          '\\x{7207}\\x{7208}\\x{7209}\\x{720A}\\x{720C}\\x{720D}\\x{720E}\\x{720F}\\x{7210}' .\n          '\\x{7212}\\x{7213}\\x{7214}\\x{7216}\\x{7218}\\x{7219}\\x{721A}\\x{721B}\\x{721C}' .\n          '\\x{721D}\\x{721E}\\x{721F}\\x{7221}\\x{7222}\\x{7223}\\x{7226}\\x{7227}\\x{7228}' .\n          '\\x{7229}\\x{722A}\\x{722B}\\x{722C}\\x{722D}\\x{722E}\\x{7230}\\x{7231}\\x{7232}' .\n          '\\x{7233}\\x{7235}\\x{7236}\\x{7237}\\x{7238}\\x{7239}\\x{723A}\\x{723B}\\x{723C}' .\n          '\\x{723D}\\x{723E}\\x{723F}\\x{7240}\\x{7241}\\x{7242}\\x{7243}\\x{7244}\\x{7246}' .\n          '\\x{7247}\\x{7248}\\x{7249}\\x{724A}\\x{724B}\\x{724C}\\x{724D}\\x{724F}\\x{7251}' .\n          '\\x{7252}\\x{7253}\\x{7254}\\x{7256}\\x{7257}\\x{7258}\\x{7259}\\x{725A}\\x{725B}' .\n          '\\x{725C}\\x{725D}\\x{725E}\\x{725F}\\x{7260}\\x{7261}\\x{7262}\\x{7263}\\x{7264}' .\n          '\\x{7265}\\x{7266}\\x{7267}\\x{7268}\\x{7269}\\x{726A}\\x{726B}\\x{726C}\\x{726D}' .\n          '\\x{726E}\\x{726F}\\x{7270}\\x{7271}\\x{7272}\\x{7273}\\x{7274}\\x{7275}\\x{7276}' .\n          '\\x{7277}\\x{7278}\\x{7279}\\x{727A}\\x{727B}\\x{727C}\\x{727D}\\x{727E}\\x{727F}' .\n          '\\x{7280}\\x{7281}\\x{7282}\\x{7283}\\x{7284}\\x{7285}\\x{7286}\\x{7287}\\x{7288}' .\n          '\\x{7289}\\x{728A}\\x{728B}\\x{728C}\\x{728D}\\x{728E}\\x{728F}\\x{7290}\\x{7291}' .\n          '\\x{7292}\\x{7293}\\x{7294}\\x{7295}\\x{7296}\\x{7297}\\x{7298}\\x{7299}\\x{729A}' .\n          '\\x{729B}\\x{729C}\\x{729D}\\x{729E}\\x{729F}\\x{72A1}\\x{72A2}\\x{72A3}\\x{72A4}' .\n          '\\x{72A5}\\x{72A6}\\x{72A7}\\x{72A8}\\x{72A9}\\x{72AA}\\x{72AC}\\x{72AD}\\x{72AE}' .\n          '\\x{72AF}\\x{72B0}\\x{72B1}\\x{72B2}\\x{72B3}\\x{72B4}\\x{72B5}\\x{72B6}\\x{72B7}' .\n          '\\x{72B8}\\x{72B9}\\x{72BA}\\x{72BB}\\x{72BC}\\x{72BD}\\x{72BF}\\x{72C0}\\x{72C1}' .\n          '\\x{72C2}\\x{72C3}\\x{72C4}\\x{72C5}\\x{72C6}\\x{72C7}\\x{72C8}\\x{72C9}\\x{72CA}' .\n          '\\x{72CB}\\x{72CC}\\x{72CD}\\x{72CE}\\x{72CF}\\x{72D0}\\x{72D1}\\x{72D2}\\x{72D3}' .\n          '\\x{72D4}\\x{72D5}\\x{72D6}\\x{72D7}\\x{72D8}\\x{72D9}\\x{72DA}\\x{72DB}\\x{72DC}' .\n          '\\x{72DD}\\x{72DE}\\x{72DF}\\x{72E0}\\x{72E1}\\x{72E2}\\x{72E3}\\x{72E4}\\x{72E5}' .\n          '\\x{72E6}\\x{72E7}\\x{72E8}\\x{72E9}\\x{72EA}\\x{72EB}\\x{72EC}\\x{72ED}\\x{72EE}' .\n          '\\x{72EF}\\x{72F0}\\x{72F1}\\x{72F2}\\x{72F3}\\x{72F4}\\x{72F5}\\x{72F6}\\x{72F7}' .\n          '\\x{72F8}\\x{72F9}\\x{72FA}\\x{72FB}\\x{72FC}\\x{72FD}\\x{72FE}\\x{72FF}\\x{7300}' .\n          '\\x{7301}\\x{7303}\\x{7304}\\x{7305}\\x{7306}\\x{7307}\\x{7308}\\x{7309}\\x{730A}' .\n          '\\x{730B}\\x{730C}\\x{730D}\\x{730E}\\x{730F}\\x{7311}\\x{7312}\\x{7313}\\x{7314}' .\n          '\\x{7315}\\x{7316}\\x{7317}\\x{7318}\\x{7319}\\x{731A}\\x{731B}\\x{731C}\\x{731D}' .\n          '\\x{731E}\\x{7320}\\x{7321}\\x{7322}\\x{7323}\\x{7324}\\x{7325}\\x{7326}\\x{7327}' .\n          '\\x{7329}\\x{732A}\\x{732B}\\x{732C}\\x{732D}\\x{732E}\\x{7330}\\x{7331}\\x{7332}' .\n          '\\x{7333}\\x{7334}\\x{7335}\\x{7336}\\x{7337}\\x{7338}\\x{7339}\\x{733A}\\x{733B}' .\n          '\\x{733C}\\x{733D}\\x{733E}\\x{733F}\\x{7340}\\x{7341}\\x{7342}\\x{7343}\\x{7344}' .\n          '\\x{7345}\\x{7346}\\x{7347}\\x{7348}\\x{7349}\\x{734A}\\x{734B}\\x{734C}\\x{734D}' .\n          '\\x{734E}\\x{7350}\\x{7351}\\x{7352}\\x{7354}\\x{7355}\\x{7356}\\x{7357}\\x{7358}' .\n          '\\x{7359}\\x{735A}\\x{735B}\\x{735C}\\x{735D}\\x{735E}\\x{735F}\\x{7360}\\x{7361}' .\n          '\\x{7362}\\x{7364}\\x{7365}\\x{7366}\\x{7367}\\x{7368}\\x{7369}\\x{736A}\\x{736B}' .\n          '\\x{736C}\\x{736D}\\x{736E}\\x{736F}\\x{7370}\\x{7371}\\x{7372}\\x{7373}\\x{7374}' .\n          '\\x{7375}\\x{7376}\\x{7377}\\x{7378}\\x{7379}\\x{737A}\\x{737B}\\x{737C}\\x{737D}' .\n          '\\x{737E}\\x{737F}\\x{7380}\\x{7381}\\x{7382}\\x{7383}\\x{7384}\\x{7385}\\x{7386}' .\n          '\\x{7387}\\x{7388}\\x{7389}\\x{738A}\\x{738B}\\x{738C}\\x{738D}\\x{738E}\\x{738F}' .\n          '\\x{7390}\\x{7391}\\x{7392}\\x{7393}\\x{7394}\\x{7395}\\x{7396}\\x{7397}\\x{7398}' .\n          '\\x{7399}\\x{739A}\\x{739B}\\x{739D}\\x{739E}\\x{739F}\\x{73A0}\\x{73A1}\\x{73A2}' .\n          '\\x{73A3}\\x{73A4}\\x{73A5}\\x{73A6}\\x{73A7}\\x{73A8}\\x{73A9}\\x{73AA}\\x{73AB}' .\n          '\\x{73AC}\\x{73AD}\\x{73AE}\\x{73AF}\\x{73B0}\\x{73B1}\\x{73B2}\\x{73B3}\\x{73B4}' .\n          '\\x{73B5}\\x{73B6}\\x{73B7}\\x{73B8}\\x{73B9}\\x{73BA}\\x{73BB}\\x{73BC}\\x{73BD}' .\n          '\\x{73BE}\\x{73BF}\\x{73C0}\\x{73C2}\\x{73C3}\\x{73C4}\\x{73C5}\\x{73C6}\\x{73C7}' .\n          '\\x{73C8}\\x{73C9}\\x{73CA}\\x{73CB}\\x{73CC}\\x{73CD}\\x{73CE}\\x{73CF}\\x{73D0}' .\n          '\\x{73D1}\\x{73D2}\\x{73D3}\\x{73D4}\\x{73D5}\\x{73D6}\\x{73D7}\\x{73D8}\\x{73D9}' .\n          '\\x{73DA}\\x{73DB}\\x{73DC}\\x{73DD}\\x{73DE}\\x{73DF}\\x{73E0}\\x{73E2}\\x{73E3}' .\n          '\\x{73E5}\\x{73E6}\\x{73E7}\\x{73E8}\\x{73E9}\\x{73EA}\\x{73EB}\\x{73EC}\\x{73ED}' .\n          '\\x{73EE}\\x{73EF}\\x{73F0}\\x{73F1}\\x{73F2}\\x{73F4}\\x{73F5}\\x{73F6}\\x{73F7}' .\n          '\\x{73F8}\\x{73F9}\\x{73FA}\\x{73FC}\\x{73FD}\\x{73FE}\\x{73FF}\\x{7400}\\x{7401}' .\n          '\\x{7402}\\x{7403}\\x{7404}\\x{7405}\\x{7406}\\x{7407}\\x{7408}\\x{7409}\\x{740A}' .\n          '\\x{740B}\\x{740C}\\x{740D}\\x{740E}\\x{740F}\\x{7410}\\x{7411}\\x{7412}\\x{7413}' .\n          '\\x{7414}\\x{7415}\\x{7416}\\x{7417}\\x{7419}\\x{741A}\\x{741B}\\x{741C}\\x{741D}' .\n          '\\x{741E}\\x{741F}\\x{7420}\\x{7421}\\x{7422}\\x{7423}\\x{7424}\\x{7425}\\x{7426}' .\n          '\\x{7427}\\x{7428}\\x{7429}\\x{742A}\\x{742B}\\x{742C}\\x{742D}\\x{742E}\\x{742F}' .\n          '\\x{7430}\\x{7431}\\x{7432}\\x{7433}\\x{7434}\\x{7435}\\x{7436}\\x{7437}\\x{7438}' .\n          '\\x{743A}\\x{743B}\\x{743C}\\x{743D}\\x{743F}\\x{7440}\\x{7441}\\x{7442}\\x{7443}' .\n          '\\x{7444}\\x{7445}\\x{7446}\\x{7448}\\x{744A}\\x{744B}\\x{744C}\\x{744D}\\x{744E}' .\n          '\\x{744F}\\x{7450}\\x{7451}\\x{7452}\\x{7453}\\x{7454}\\x{7455}\\x{7456}\\x{7457}' .\n          '\\x{7459}\\x{745A}\\x{745B}\\x{745C}\\x{745D}\\x{745E}\\x{745F}\\x{7461}\\x{7462}' .\n          '\\x{7463}\\x{7464}\\x{7465}\\x{7466}\\x{7467}\\x{7468}\\x{7469}\\x{746A}\\x{746B}' .\n          '\\x{746C}\\x{746D}\\x{746E}\\x{746F}\\x{7470}\\x{7471}\\x{7472}\\x{7473}\\x{7474}' .\n          '\\x{7475}\\x{7476}\\x{7477}\\x{7478}\\x{7479}\\x{747A}\\x{747C}\\x{747D}\\x{747E}' .\n          '\\x{747F}\\x{7480}\\x{7481}\\x{7482}\\x{7483}\\x{7485}\\x{7486}\\x{7487}\\x{7488}' .\n          '\\x{7489}\\x{748A}\\x{748B}\\x{748C}\\x{748D}\\x{748E}\\x{748F}\\x{7490}\\x{7491}' .\n          '\\x{7492}\\x{7493}\\x{7494}\\x{7495}\\x{7497}\\x{7498}\\x{7499}\\x{749A}\\x{749B}' .\n          '\\x{749C}\\x{749E}\\x{749F}\\x{74A0}\\x{74A1}\\x{74A3}\\x{74A4}\\x{74A5}\\x{74A6}' .\n          '\\x{74A7}\\x{74A8}\\x{74A9}\\x{74AA}\\x{74AB}\\x{74AC}\\x{74AD}\\x{74AE}\\x{74AF}' .\n          '\\x{74B0}\\x{74B1}\\x{74B2}\\x{74B3}\\x{74B4}\\x{74B5}\\x{74B6}\\x{74B7}\\x{74B8}' .\n          '\\x{74B9}\\x{74BA}\\x{74BB}\\x{74BC}\\x{74BD}\\x{74BE}\\x{74BF}\\x{74C0}\\x{74C1}' .\n          '\\x{74C2}\\x{74C3}\\x{74C4}\\x{74C5}\\x{74C6}\\x{74CA}\\x{74CB}\\x{74CD}\\x{74CE}' .\n          '\\x{74CF}\\x{74D0}\\x{74D1}\\x{74D2}\\x{74D3}\\x{74D4}\\x{74D5}\\x{74D6}\\x{74D7}' .\n          '\\x{74D8}\\x{74D9}\\x{74DA}\\x{74DB}\\x{74DC}\\x{74DD}\\x{74DE}\\x{74DF}\\x{74E0}' .\n          '\\x{74E1}\\x{74E2}\\x{74E3}\\x{74E4}\\x{74E5}\\x{74E6}\\x{74E7}\\x{74E8}\\x{74E9}' .\n          '\\x{74EA}\\x{74EC}\\x{74ED}\\x{74EE}\\x{74EF}\\x{74F0}\\x{74F1}\\x{74F2}\\x{74F3}' .\n          '\\x{74F4}\\x{74F5}\\x{74F6}\\x{74F7}\\x{74F8}\\x{74F9}\\x{74FA}\\x{74FB}\\x{74FC}' .\n          '\\x{74FD}\\x{74FE}\\x{74FF}\\x{7500}\\x{7501}\\x{7502}\\x{7503}\\x{7504}\\x{7505}' .\n          '\\x{7506}\\x{7507}\\x{7508}\\x{7509}\\x{750A}\\x{750B}\\x{750C}\\x{750D}\\x{750F}' .\n          '\\x{7510}\\x{7511}\\x{7512}\\x{7513}\\x{7514}\\x{7515}\\x{7516}\\x{7517}\\x{7518}' .\n          '\\x{7519}\\x{751A}\\x{751B}\\x{751C}\\x{751D}\\x{751E}\\x{751F}\\x{7521}\\x{7522}' .\n          '\\x{7523}\\x{7524}\\x{7525}\\x{7526}\\x{7527}\\x{7528}\\x{7529}\\x{752A}\\x{752B}' .\n          '\\x{752C}\\x{752D}\\x{752E}\\x{752F}\\x{7530}\\x{7531}\\x{7532}\\x{7533}\\x{7535}' .\n          '\\x{7536}\\x{7537}\\x{7538}\\x{7539}\\x{753A}\\x{753B}\\x{753C}\\x{753D}\\x{753E}' .\n          '\\x{753F}\\x{7540}\\x{7542}\\x{7543}\\x{7544}\\x{7545}\\x{7546}\\x{7547}\\x{7548}' .\n          '\\x{7549}\\x{754B}\\x{754C}\\x{754D}\\x{754E}\\x{754F}\\x{7550}\\x{7551}\\x{7553}' .\n          '\\x{7554}\\x{7556}\\x{7557}\\x{7558}\\x{7559}\\x{755A}\\x{755B}\\x{755C}\\x{755D}' .\n          '\\x{755F}\\x{7560}\\x{7562}\\x{7563}\\x{7564}\\x{7565}\\x{7566}\\x{7567}\\x{7568}' .\n          '\\x{7569}\\x{756A}\\x{756B}\\x{756C}\\x{756D}\\x{756E}\\x{756F}\\x{7570}\\x{7572}' .\n          '\\x{7574}\\x{7575}\\x{7576}\\x{7577}\\x{7578}\\x{7579}\\x{757C}\\x{757D}\\x{757E}' .\n          '\\x{757F}\\x{7580}\\x{7581}\\x{7582}\\x{7583}\\x{7584}\\x{7586}\\x{7587}\\x{7588}' .\n          '\\x{7589}\\x{758A}\\x{758B}\\x{758C}\\x{758D}\\x{758F}\\x{7590}\\x{7591}\\x{7592}' .\n          '\\x{7593}\\x{7594}\\x{7595}\\x{7596}\\x{7597}\\x{7598}\\x{7599}\\x{759A}\\x{759B}' .\n          '\\x{759C}\\x{759D}\\x{759E}\\x{759F}\\x{75A0}\\x{75A1}\\x{75A2}\\x{75A3}\\x{75A4}' .\n          '\\x{75A5}\\x{75A6}\\x{75A7}\\x{75A8}\\x{75AA}\\x{75AB}\\x{75AC}\\x{75AD}\\x{75AE}' .\n          '\\x{75AF}\\x{75B0}\\x{75B1}\\x{75B2}\\x{75B3}\\x{75B4}\\x{75B5}\\x{75B6}\\x{75B8}' .\n          '\\x{75B9}\\x{75BA}\\x{75BB}\\x{75BC}\\x{75BD}\\x{75BE}\\x{75BF}\\x{75C0}\\x{75C1}' .\n          '\\x{75C2}\\x{75C3}\\x{75C4}\\x{75C5}\\x{75C6}\\x{75C7}\\x{75C8}\\x{75C9}\\x{75CA}' .\n          '\\x{75CB}\\x{75CC}\\x{75CD}\\x{75CE}\\x{75CF}\\x{75D0}\\x{75D1}\\x{75D2}\\x{75D3}' .\n          '\\x{75D4}\\x{75D5}\\x{75D6}\\x{75D7}\\x{75D8}\\x{75D9}\\x{75DA}\\x{75DB}\\x{75DD}' .\n          '\\x{75DE}\\x{75DF}\\x{75E0}\\x{75E1}\\x{75E2}\\x{75E3}\\x{75E4}\\x{75E5}\\x{75E6}' .\n          '\\x{75E7}\\x{75E8}\\x{75EA}\\x{75EB}\\x{75EC}\\x{75ED}\\x{75EF}\\x{75F0}\\x{75F1}' .\n          '\\x{75F2}\\x{75F3}\\x{75F4}\\x{75F5}\\x{75F6}\\x{75F7}\\x{75F8}\\x{75F9}\\x{75FA}' .\n          '\\x{75FB}\\x{75FC}\\x{75FD}\\x{75FE}\\x{75FF}\\x{7600}\\x{7601}\\x{7602}\\x{7603}' .\n          '\\x{7604}\\x{7605}\\x{7606}\\x{7607}\\x{7608}\\x{7609}\\x{760A}\\x{760B}\\x{760C}' .\n          '\\x{760D}\\x{760E}\\x{760F}\\x{7610}\\x{7611}\\x{7612}\\x{7613}\\x{7614}\\x{7615}' .\n          '\\x{7616}\\x{7617}\\x{7618}\\x{7619}\\x{761A}\\x{761B}\\x{761C}\\x{761D}\\x{761E}' .\n          '\\x{761F}\\x{7620}\\x{7621}\\x{7622}\\x{7623}\\x{7624}\\x{7625}\\x{7626}\\x{7627}' .\n          '\\x{7628}\\x{7629}\\x{762A}\\x{762B}\\x{762D}\\x{762E}\\x{762F}\\x{7630}\\x{7631}' .\n          '\\x{7632}\\x{7633}\\x{7634}\\x{7635}\\x{7636}\\x{7637}\\x{7638}\\x{7639}\\x{763A}' .\n          '\\x{763B}\\x{763C}\\x{763D}\\x{763E}\\x{763F}\\x{7640}\\x{7641}\\x{7642}\\x{7643}' .\n          '\\x{7646}\\x{7647}\\x{7648}\\x{7649}\\x{764A}\\x{764B}\\x{764C}\\x{764D}\\x{764F}' .\n          '\\x{7650}\\x{7652}\\x{7653}\\x{7654}\\x{7656}\\x{7657}\\x{7658}\\x{7659}\\x{765A}' .\n          '\\x{765B}\\x{765C}\\x{765D}\\x{765E}\\x{765F}\\x{7660}\\x{7661}\\x{7662}\\x{7663}' .\n          '\\x{7664}\\x{7665}\\x{7666}\\x{7667}\\x{7668}\\x{7669}\\x{766A}\\x{766B}\\x{766C}' .\n          '\\x{766D}\\x{766E}\\x{766F}\\x{7670}\\x{7671}\\x{7672}\\x{7674}\\x{7675}\\x{7676}' .\n          '\\x{7677}\\x{7678}\\x{7679}\\x{767B}\\x{767C}\\x{767D}\\x{767E}\\x{767F}\\x{7680}' .\n          '\\x{7681}\\x{7682}\\x{7683}\\x{7684}\\x{7685}\\x{7686}\\x{7687}\\x{7688}\\x{7689}' .\n          '\\x{768A}\\x{768B}\\x{768C}\\x{768E}\\x{768F}\\x{7690}\\x{7691}\\x{7692}\\x{7693}' .\n          '\\x{7694}\\x{7695}\\x{7696}\\x{7697}\\x{7698}\\x{7699}\\x{769A}\\x{769B}\\x{769C}' .\n          '\\x{769D}\\x{769E}\\x{769F}\\x{76A0}\\x{76A3}\\x{76A4}\\x{76A6}\\x{76A7}\\x{76A9}' .\n          '\\x{76AA}\\x{76AB}\\x{76AC}\\x{76AD}\\x{76AE}\\x{76AF}\\x{76B0}\\x{76B1}\\x{76B2}' .\n          '\\x{76B4}\\x{76B5}\\x{76B7}\\x{76B8}\\x{76BA}\\x{76BB}\\x{76BC}\\x{76BD}\\x{76BE}' .\n          '\\x{76BF}\\x{76C0}\\x{76C2}\\x{76C3}\\x{76C4}\\x{76C5}\\x{76C6}\\x{76C7}\\x{76C8}' .\n          '\\x{76C9}\\x{76CA}\\x{76CD}\\x{76CE}\\x{76CF}\\x{76D0}\\x{76D1}\\x{76D2}\\x{76D3}' .\n          '\\x{76D4}\\x{76D5}\\x{76D6}\\x{76D7}\\x{76D8}\\x{76DA}\\x{76DB}\\x{76DC}\\x{76DD}' .\n          '\\x{76DE}\\x{76DF}\\x{76E0}\\x{76E1}\\x{76E2}\\x{76E3}\\x{76E4}\\x{76E5}\\x{76E6}' .\n          '\\x{76E7}\\x{76E8}\\x{76E9}\\x{76EA}\\x{76EC}\\x{76ED}\\x{76EE}\\x{76EF}\\x{76F0}' .\n          '\\x{76F1}\\x{76F2}\\x{76F3}\\x{76F4}\\x{76F5}\\x{76F6}\\x{76F7}\\x{76F8}\\x{76F9}' .\n          '\\x{76FA}\\x{76FB}\\x{76FC}\\x{76FD}\\x{76FE}\\x{76FF}\\x{7701}\\x{7703}\\x{7704}' .\n          '\\x{7705}\\x{7706}\\x{7707}\\x{7708}\\x{7709}\\x{770A}\\x{770B}\\x{770C}\\x{770D}' .\n          '\\x{770F}\\x{7710}\\x{7711}\\x{7712}\\x{7713}\\x{7714}\\x{7715}\\x{7716}\\x{7717}' .\n          '\\x{7718}\\x{7719}\\x{771A}\\x{771B}\\x{771C}\\x{771D}\\x{771E}\\x{771F}\\x{7720}' .\n          '\\x{7722}\\x{7723}\\x{7725}\\x{7726}\\x{7727}\\x{7728}\\x{7729}\\x{772A}\\x{772C}' .\n          '\\x{772D}\\x{772E}\\x{772F}\\x{7730}\\x{7731}\\x{7732}\\x{7733}\\x{7734}\\x{7735}' .\n          '\\x{7736}\\x{7737}\\x{7738}\\x{7739}\\x{773A}\\x{773B}\\x{773C}\\x{773D}\\x{773E}' .\n          '\\x{7740}\\x{7741}\\x{7743}\\x{7744}\\x{7745}\\x{7746}\\x{7747}\\x{7748}\\x{7749}' .\n          '\\x{774A}\\x{774B}\\x{774C}\\x{774D}\\x{774E}\\x{774F}\\x{7750}\\x{7751}\\x{7752}' .\n          '\\x{7753}\\x{7754}\\x{7755}\\x{7756}\\x{7757}\\x{7758}\\x{7759}\\x{775A}\\x{775B}' .\n          '\\x{775C}\\x{775D}\\x{775E}\\x{775F}\\x{7760}\\x{7761}\\x{7762}\\x{7763}\\x{7765}' .\n          '\\x{7766}\\x{7767}\\x{7768}\\x{7769}\\x{776A}\\x{776B}\\x{776C}\\x{776D}\\x{776E}' .\n          '\\x{776F}\\x{7770}\\x{7771}\\x{7772}\\x{7773}\\x{7774}\\x{7775}\\x{7776}\\x{7777}' .\n          '\\x{7778}\\x{7779}\\x{777A}\\x{777B}\\x{777C}\\x{777D}\\x{777E}\\x{777F}\\x{7780}' .\n          '\\x{7781}\\x{7782}\\x{7783}\\x{7784}\\x{7785}\\x{7786}\\x{7787}\\x{7788}\\x{7789}' .\n          '\\x{778A}\\x{778B}\\x{778C}\\x{778D}\\x{778E}\\x{778F}\\x{7790}\\x{7791}\\x{7792}' .\n          '\\x{7793}\\x{7794}\\x{7795}\\x{7797}\\x{7798}\\x{7799}\\x{779A}\\x{779B}\\x{779C}' .\n          '\\x{779D}\\x{779E}\\x{779F}\\x{77A0}\\x{77A1}\\x{77A2}\\x{77A3}\\x{77A5}\\x{77A6}' .\n          '\\x{77A7}\\x{77A8}\\x{77A9}\\x{77AA}\\x{77AB}\\x{77AC}\\x{77AD}\\x{77AE}\\x{77AF}' .\n          '\\x{77B0}\\x{77B1}\\x{77B2}\\x{77B3}\\x{77B4}\\x{77B5}\\x{77B6}\\x{77B7}\\x{77B8}' .\n          '\\x{77B9}\\x{77BA}\\x{77BB}\\x{77BC}\\x{77BD}\\x{77BF}\\x{77C0}\\x{77C2}\\x{77C3}' .\n          '\\x{77C4}\\x{77C5}\\x{77C6}\\x{77C7}\\x{77C8}\\x{77C9}\\x{77CA}\\x{77CB}\\x{77CC}' .\n          '\\x{77CD}\\x{77CE}\\x{77CF}\\x{77D0}\\x{77D1}\\x{77D3}\\x{77D4}\\x{77D5}\\x{77D6}' .\n          '\\x{77D7}\\x{77D8}\\x{77D9}\\x{77DA}\\x{77DB}\\x{77DC}\\x{77DE}\\x{77DF}\\x{77E0}' .\n          '\\x{77E1}\\x{77E2}\\x{77E3}\\x{77E5}\\x{77E7}\\x{77E8}\\x{77E9}\\x{77EA}\\x{77EB}' .\n          '\\x{77EC}\\x{77ED}\\x{77EE}\\x{77EF}\\x{77F0}\\x{77F1}\\x{77F2}\\x{77F3}\\x{77F6}' .\n          '\\x{77F7}\\x{77F8}\\x{77F9}\\x{77FA}\\x{77FB}\\x{77FC}\\x{77FD}\\x{77FE}\\x{77FF}' .\n          '\\x{7800}\\x{7801}\\x{7802}\\x{7803}\\x{7804}\\x{7805}\\x{7806}\\x{7808}\\x{7809}' .\n          '\\x{780A}\\x{780B}\\x{780C}\\x{780D}\\x{780E}\\x{780F}\\x{7810}\\x{7811}\\x{7812}' .\n          '\\x{7813}\\x{7814}\\x{7815}\\x{7816}\\x{7817}\\x{7818}\\x{7819}\\x{781A}\\x{781B}' .\n          '\\x{781C}\\x{781D}\\x{781E}\\x{781F}\\x{7820}\\x{7821}\\x{7822}\\x{7823}\\x{7825}' .\n          '\\x{7826}\\x{7827}\\x{7828}\\x{7829}\\x{782A}\\x{782B}\\x{782C}\\x{782D}\\x{782E}' .\n          '\\x{782F}\\x{7830}\\x{7831}\\x{7832}\\x{7833}\\x{7834}\\x{7835}\\x{7837}\\x{7838}' .\n          '\\x{7839}\\x{783A}\\x{783B}\\x{783C}\\x{783D}\\x{783E}\\x{7840}\\x{7841}\\x{7843}' .\n          '\\x{7844}\\x{7845}\\x{7847}\\x{7848}\\x{7849}\\x{784A}\\x{784C}\\x{784D}\\x{784E}' .\n          '\\x{7850}\\x{7851}\\x{7852}\\x{7853}\\x{7854}\\x{7855}\\x{7856}\\x{7857}\\x{7858}' .\n          '\\x{7859}\\x{785A}\\x{785B}\\x{785C}\\x{785D}\\x{785E}\\x{785F}\\x{7860}\\x{7861}' .\n          '\\x{7862}\\x{7863}\\x{7864}\\x{7865}\\x{7866}\\x{7867}\\x{7868}\\x{7869}\\x{786A}' .\n          '\\x{786B}\\x{786C}\\x{786D}\\x{786E}\\x{786F}\\x{7870}\\x{7871}\\x{7872}\\x{7873}' .\n          '\\x{7874}\\x{7875}\\x{7877}\\x{7878}\\x{7879}\\x{787A}\\x{787B}\\x{787C}\\x{787D}' .\n          '\\x{787E}\\x{787F}\\x{7880}\\x{7881}\\x{7882}\\x{7883}\\x{7884}\\x{7885}\\x{7886}' .\n          '\\x{7887}\\x{7889}\\x{788A}\\x{788B}\\x{788C}\\x{788D}\\x{788E}\\x{788F}\\x{7890}' .\n          '\\x{7891}\\x{7892}\\x{7893}\\x{7894}\\x{7895}\\x{7896}\\x{7897}\\x{7898}\\x{7899}' .\n          '\\x{789A}\\x{789B}\\x{789C}\\x{789D}\\x{789E}\\x{789F}\\x{78A0}\\x{78A1}\\x{78A2}' .\n          '\\x{78A3}\\x{78A4}\\x{78A5}\\x{78A6}\\x{78A7}\\x{78A8}\\x{78A9}\\x{78AA}\\x{78AB}' .\n          '\\x{78AC}\\x{78AD}\\x{78AE}\\x{78AF}\\x{78B0}\\x{78B1}\\x{78B2}\\x{78B3}\\x{78B4}' .\n          '\\x{78B5}\\x{78B6}\\x{78B7}\\x{78B8}\\x{78B9}\\x{78BA}\\x{78BB}\\x{78BC}\\x{78BD}' .\n          '\\x{78BE}\\x{78BF}\\x{78C0}\\x{78C1}\\x{78C3}\\x{78C4}\\x{78C5}\\x{78C6}\\x{78C8}' .\n          '\\x{78C9}\\x{78CA}\\x{78CB}\\x{78CC}\\x{78CD}\\x{78CE}\\x{78CF}\\x{78D0}\\x{78D1}' .\n          '\\x{78D3}\\x{78D4}\\x{78D5}\\x{78D6}\\x{78D7}\\x{78D8}\\x{78D9}\\x{78DA}\\x{78DB}' .\n          '\\x{78DC}\\x{78DD}\\x{78DE}\\x{78DF}\\x{78E0}\\x{78E1}\\x{78E2}\\x{78E3}\\x{78E4}' .\n          '\\x{78E5}\\x{78E6}\\x{78E7}\\x{78E8}\\x{78E9}\\x{78EA}\\x{78EB}\\x{78EC}\\x{78ED}' .\n          '\\x{78EE}\\x{78EF}\\x{78F1}\\x{78F2}\\x{78F3}\\x{78F4}\\x{78F5}\\x{78F6}\\x{78F7}' .\n          '\\x{78F9}\\x{78FA}\\x{78FB}\\x{78FC}\\x{78FD}\\x{78FE}\\x{78FF}\\x{7901}\\x{7902}' .\n          '\\x{7903}\\x{7904}\\x{7905}\\x{7906}\\x{7907}\\x{7909}\\x{790A}\\x{790B}\\x{790C}' .\n          '\\x{790E}\\x{790F}\\x{7910}\\x{7911}\\x{7912}\\x{7913}\\x{7914}\\x{7916}\\x{7917}' .\n          '\\x{7918}\\x{7919}\\x{791A}\\x{791B}\\x{791C}\\x{791D}\\x{791E}\\x{7921}\\x{7922}' .\n          '\\x{7923}\\x{7924}\\x{7925}\\x{7926}\\x{7927}\\x{7928}\\x{7929}\\x{792A}\\x{792B}' .\n          '\\x{792C}\\x{792D}\\x{792E}\\x{792F}\\x{7930}\\x{7931}\\x{7933}\\x{7934}\\x{7935}' .\n          '\\x{7937}\\x{7938}\\x{7939}\\x{793A}\\x{793B}\\x{793C}\\x{793D}\\x{793E}\\x{793F}' .\n          '\\x{7940}\\x{7941}\\x{7942}\\x{7943}\\x{7944}\\x{7945}\\x{7946}\\x{7947}\\x{7948}' .\n          '\\x{7949}\\x{794A}\\x{794B}\\x{794C}\\x{794D}\\x{794E}\\x{794F}\\x{7950}\\x{7951}' .\n          '\\x{7952}\\x{7953}\\x{7954}\\x{7955}\\x{7956}\\x{7957}\\x{7958}\\x{795A}\\x{795B}' .\n          '\\x{795C}\\x{795D}\\x{795E}\\x{795F}\\x{7960}\\x{7961}\\x{7962}\\x{7963}\\x{7964}' .\n          '\\x{7965}\\x{7966}\\x{7967}\\x{7968}\\x{7969}\\x{796A}\\x{796B}\\x{796D}\\x{796F}' .\n          '\\x{7970}\\x{7971}\\x{7972}\\x{7973}\\x{7974}\\x{7977}\\x{7978}\\x{7979}\\x{797A}' .\n          '\\x{797B}\\x{797C}\\x{797D}\\x{797E}\\x{797F}\\x{7980}\\x{7981}\\x{7982}\\x{7983}' .\n          '\\x{7984}\\x{7985}\\x{7988}\\x{7989}\\x{798A}\\x{798B}\\x{798C}\\x{798D}\\x{798E}' .\n          '\\x{798F}\\x{7990}\\x{7991}\\x{7992}\\x{7993}\\x{7994}\\x{7995}\\x{7996}\\x{7997}' .\n          '\\x{7998}\\x{7999}\\x{799A}\\x{799B}\\x{799C}\\x{799F}\\x{79A0}\\x{79A1}\\x{79A2}' .\n          '\\x{79A3}\\x{79A4}\\x{79A5}\\x{79A6}\\x{79A7}\\x{79A8}\\x{79AA}\\x{79AB}\\x{79AC}' .\n          '\\x{79AD}\\x{79AE}\\x{79AF}\\x{79B0}\\x{79B1}\\x{79B2}\\x{79B3}\\x{79B4}\\x{79B5}' .\n          '\\x{79B6}\\x{79B7}\\x{79B8}\\x{79B9}\\x{79BA}\\x{79BB}\\x{79BD}\\x{79BE}\\x{79BF}' .\n          '\\x{79C0}\\x{79C1}\\x{79C2}\\x{79C3}\\x{79C5}\\x{79C6}\\x{79C8}\\x{79C9}\\x{79CA}' .\n          '\\x{79CB}\\x{79CD}\\x{79CE}\\x{79CF}\\x{79D0}\\x{79D1}\\x{79D2}\\x{79D3}\\x{79D5}' .\n          '\\x{79D6}\\x{79D8}\\x{79D9}\\x{79DA}\\x{79DB}\\x{79DC}\\x{79DD}\\x{79DE}\\x{79DF}' .\n          '\\x{79E0}\\x{79E1}\\x{79E2}\\x{79E3}\\x{79E4}\\x{79E5}\\x{79E6}\\x{79E7}\\x{79E8}' .\n          '\\x{79E9}\\x{79EA}\\x{79EB}\\x{79EC}\\x{79ED}\\x{79EE}\\x{79EF}\\x{79F0}\\x{79F1}' .\n          '\\x{79F2}\\x{79F3}\\x{79F4}\\x{79F5}\\x{79F6}\\x{79F7}\\x{79F8}\\x{79F9}\\x{79FA}' .\n          '\\x{79FB}\\x{79FC}\\x{79FD}\\x{79FE}\\x{79FF}\\x{7A00}\\x{7A02}\\x{7A03}\\x{7A04}' .\n          '\\x{7A05}\\x{7A06}\\x{7A08}\\x{7A0A}\\x{7A0B}\\x{7A0C}\\x{7A0D}\\x{7A0E}\\x{7A0F}' .\n          '\\x{7A10}\\x{7A11}\\x{7A12}\\x{7A13}\\x{7A14}\\x{7A15}\\x{7A16}\\x{7A17}\\x{7A18}' .\n          '\\x{7A19}\\x{7A1A}\\x{7A1B}\\x{7A1C}\\x{7A1D}\\x{7A1E}\\x{7A1F}\\x{7A20}\\x{7A21}' .\n          '\\x{7A22}\\x{7A23}\\x{7A24}\\x{7A25}\\x{7A26}\\x{7A27}\\x{7A28}\\x{7A29}\\x{7A2A}' .\n          '\\x{7A2B}\\x{7A2D}\\x{7A2E}\\x{7A2F}\\x{7A30}\\x{7A31}\\x{7A32}\\x{7A33}\\x{7A34}' .\n          '\\x{7A35}\\x{7A37}\\x{7A39}\\x{7A3B}\\x{7A3C}\\x{7A3D}\\x{7A3E}\\x{7A3F}\\x{7A40}' .\n          '\\x{7A41}\\x{7A42}\\x{7A43}\\x{7A44}\\x{7A45}\\x{7A46}\\x{7A47}\\x{7A48}\\x{7A49}' .\n          '\\x{7A4A}\\x{7A4B}\\x{7A4C}\\x{7A4D}\\x{7A4E}\\x{7A50}\\x{7A51}\\x{7A52}\\x{7A53}' .\n          '\\x{7A54}\\x{7A55}\\x{7A56}\\x{7A57}\\x{7A58}\\x{7A59}\\x{7A5A}\\x{7A5B}\\x{7A5C}' .\n          '\\x{7A5D}\\x{7A5E}\\x{7A5F}\\x{7A60}\\x{7A61}\\x{7A62}\\x{7A65}\\x{7A66}\\x{7A67}' .\n          '\\x{7A68}\\x{7A69}\\x{7A6B}\\x{7A6C}\\x{7A6D}\\x{7A6E}\\x{7A70}\\x{7A71}\\x{7A72}' .\n          '\\x{7A73}\\x{7A74}\\x{7A75}\\x{7A76}\\x{7A77}\\x{7A78}\\x{7A79}\\x{7A7A}\\x{7A7B}' .\n          '\\x{7A7C}\\x{7A7D}\\x{7A7E}\\x{7A7F}\\x{7A80}\\x{7A81}\\x{7A83}\\x{7A84}\\x{7A85}' .\n          '\\x{7A86}\\x{7A87}\\x{7A88}\\x{7A89}\\x{7A8A}\\x{7A8B}\\x{7A8C}\\x{7A8D}\\x{7A8E}' .\n          '\\x{7A8F}\\x{7A90}\\x{7A91}\\x{7A92}\\x{7A93}\\x{7A94}\\x{7A95}\\x{7A96}\\x{7A97}' .\n          '\\x{7A98}\\x{7A99}\\x{7A9C}\\x{7A9D}\\x{7A9E}\\x{7A9F}\\x{7AA0}\\x{7AA1}\\x{7AA2}' .\n          '\\x{7AA3}\\x{7AA4}\\x{7AA5}\\x{7AA6}\\x{7AA7}\\x{7AA8}\\x{7AA9}\\x{7AAA}\\x{7AAB}' .\n          '\\x{7AAC}\\x{7AAD}\\x{7AAE}\\x{7AAF}\\x{7AB0}\\x{7AB1}\\x{7AB2}\\x{7AB3}\\x{7AB4}' .\n          '\\x{7AB5}\\x{7AB6}\\x{7AB7}\\x{7AB8}\\x{7ABA}\\x{7ABE}\\x{7ABF}\\x{7AC0}\\x{7AC1}' .\n          '\\x{7AC4}\\x{7AC5}\\x{7AC7}\\x{7AC8}\\x{7AC9}\\x{7ACA}\\x{7ACB}\\x{7ACC}\\x{7ACD}' .\n          '\\x{7ACE}\\x{7ACF}\\x{7AD0}\\x{7AD1}\\x{7AD2}\\x{7AD3}\\x{7AD4}\\x{7AD5}\\x{7AD6}' .\n          '\\x{7AD8}\\x{7AD9}\\x{7ADB}\\x{7ADC}\\x{7ADD}\\x{7ADE}\\x{7ADF}\\x{7AE0}\\x{7AE1}' .\n          '\\x{7AE2}\\x{7AE3}\\x{7AE4}\\x{7AE5}\\x{7AE6}\\x{7AE7}\\x{7AE8}\\x{7AEA}\\x{7AEB}' .\n          '\\x{7AEC}\\x{7AED}\\x{7AEE}\\x{7AEF}\\x{7AF0}\\x{7AF1}\\x{7AF2}\\x{7AF3}\\x{7AF4}' .\n          '\\x{7AF6}\\x{7AF7}\\x{7AF8}\\x{7AF9}\\x{7AFA}\\x{7AFB}\\x{7AFD}\\x{7AFE}\\x{7AFF}' .\n          '\\x{7B00}\\x{7B01}\\x{7B02}\\x{7B03}\\x{7B04}\\x{7B05}\\x{7B06}\\x{7B08}\\x{7B09}' .\n          '\\x{7B0A}\\x{7B0B}\\x{7B0C}\\x{7B0D}\\x{7B0E}\\x{7B0F}\\x{7B10}\\x{7B11}\\x{7B12}' .\n          '\\x{7B13}\\x{7B14}\\x{7B15}\\x{7B16}\\x{7B17}\\x{7B18}\\x{7B19}\\x{7B1A}\\x{7B1B}' .\n          '\\x{7B1C}\\x{7B1D}\\x{7B1E}\\x{7B20}\\x{7B21}\\x{7B22}\\x{7B23}\\x{7B24}\\x{7B25}' .\n          '\\x{7B26}\\x{7B28}\\x{7B2A}\\x{7B2B}\\x{7B2C}\\x{7B2D}\\x{7B2E}\\x{7B2F}\\x{7B30}' .\n          '\\x{7B31}\\x{7B32}\\x{7B33}\\x{7B34}\\x{7B35}\\x{7B36}\\x{7B37}\\x{7B38}\\x{7B39}' .\n          '\\x{7B3A}\\x{7B3B}\\x{7B3C}\\x{7B3D}\\x{7B3E}\\x{7B3F}\\x{7B40}\\x{7B41}\\x{7B43}' .\n          '\\x{7B44}\\x{7B45}\\x{7B46}\\x{7B47}\\x{7B48}\\x{7B49}\\x{7B4A}\\x{7B4B}\\x{7B4C}' .\n          '\\x{7B4D}\\x{7B4E}\\x{7B4F}\\x{7B50}\\x{7B51}\\x{7B52}\\x{7B54}\\x{7B55}\\x{7B56}' .\n          '\\x{7B57}\\x{7B58}\\x{7B59}\\x{7B5A}\\x{7B5B}\\x{7B5C}\\x{7B5D}\\x{7B5E}\\x{7B5F}' .\n          '\\x{7B60}\\x{7B61}\\x{7B62}\\x{7B63}\\x{7B64}\\x{7B65}\\x{7B66}\\x{7B67}\\x{7B68}' .\n          '\\x{7B69}\\x{7B6A}\\x{7B6B}\\x{7B6C}\\x{7B6D}\\x{7B6E}\\x{7B70}\\x{7B71}\\x{7B72}' .\n          '\\x{7B73}\\x{7B74}\\x{7B75}\\x{7B76}\\x{7B77}\\x{7B78}\\x{7B79}\\x{7B7B}\\x{7B7C}' .\n          '\\x{7B7D}\\x{7B7E}\\x{7B7F}\\x{7B80}\\x{7B81}\\x{7B82}\\x{7B83}\\x{7B84}\\x{7B85}' .\n          '\\x{7B87}\\x{7B88}\\x{7B89}\\x{7B8A}\\x{7B8B}\\x{7B8C}\\x{7B8D}\\x{7B8E}\\x{7B8F}' .\n          '\\x{7B90}\\x{7B91}\\x{7B93}\\x{7B94}\\x{7B95}\\x{7B96}\\x{7B97}\\x{7B98}\\x{7B99}' .\n          '\\x{7B9A}\\x{7B9B}\\x{7B9C}\\x{7B9D}\\x{7B9E}\\x{7B9F}\\x{7BA0}\\x{7BA1}\\x{7BA2}' .\n          '\\x{7BA4}\\x{7BA6}\\x{7BA7}\\x{7BA8}\\x{7BA9}\\x{7BAA}\\x{7BAB}\\x{7BAC}\\x{7BAD}' .\n          '\\x{7BAE}\\x{7BAF}\\x{7BB1}\\x{7BB3}\\x{7BB4}\\x{7BB5}\\x{7BB6}\\x{7BB7}\\x{7BB8}' .\n          '\\x{7BB9}\\x{7BBA}\\x{7BBB}\\x{7BBC}\\x{7BBD}\\x{7BBE}\\x{7BBF}\\x{7BC0}\\x{7BC1}' .\n          '\\x{7BC2}\\x{7BC3}\\x{7BC4}\\x{7BC5}\\x{7BC6}\\x{7BC7}\\x{7BC8}\\x{7BC9}\\x{7BCA}' .\n          '\\x{7BCB}\\x{7BCC}\\x{7BCD}\\x{7BCE}\\x{7BD0}\\x{7BD1}\\x{7BD2}\\x{7BD3}\\x{7BD4}' .\n          '\\x{7BD5}\\x{7BD6}\\x{7BD7}\\x{7BD8}\\x{7BD9}\\x{7BDA}\\x{7BDB}\\x{7BDC}\\x{7BDD}' .\n          '\\x{7BDE}\\x{7BDF}\\x{7BE0}\\x{7BE1}\\x{7BE2}\\x{7BE3}\\x{7BE4}\\x{7BE5}\\x{7BE6}' .\n          '\\x{7BE7}\\x{7BE8}\\x{7BE9}\\x{7BEA}\\x{7BEB}\\x{7BEC}\\x{7BED}\\x{7BEE}\\x{7BEF}' .\n          '\\x{7BF0}\\x{7BF1}\\x{7BF2}\\x{7BF3}\\x{7BF4}\\x{7BF5}\\x{7BF6}\\x{7BF7}\\x{7BF8}' .\n          '\\x{7BF9}\\x{7BFB}\\x{7BFC}\\x{7BFD}\\x{7BFE}\\x{7BFF}\\x{7C00}\\x{7C01}\\x{7C02}' .\n          '\\x{7C03}\\x{7C04}\\x{7C05}\\x{7C06}\\x{7C07}\\x{7C08}\\x{7C09}\\x{7C0A}\\x{7C0B}' .\n          '\\x{7C0C}\\x{7C0D}\\x{7C0E}\\x{7C0F}\\x{7C10}\\x{7C11}\\x{7C12}\\x{7C13}\\x{7C15}' .\n          '\\x{7C16}\\x{7C17}\\x{7C18}\\x{7C19}\\x{7C1A}\\x{7C1C}\\x{7C1D}\\x{7C1E}\\x{7C1F}' .\n          '\\x{7C20}\\x{7C21}\\x{7C22}\\x{7C23}\\x{7C24}\\x{7C25}\\x{7C26}\\x{7C27}\\x{7C28}' .\n          '\\x{7C29}\\x{7C2A}\\x{7C2B}\\x{7C2C}\\x{7C2D}\\x{7C30}\\x{7C31}\\x{7C32}\\x{7C33}' .\n          '\\x{7C34}\\x{7C35}\\x{7C36}\\x{7C37}\\x{7C38}\\x{7C39}\\x{7C3A}\\x{7C3B}\\x{7C3C}' .\n          '\\x{7C3D}\\x{7C3E}\\x{7C3F}\\x{7C40}\\x{7C41}\\x{7C42}\\x{7C43}\\x{7C44}\\x{7C45}' .\n          '\\x{7C46}\\x{7C47}\\x{7C48}\\x{7C49}\\x{7C4A}\\x{7C4B}\\x{7C4C}\\x{7C4D}\\x{7C4E}' .\n          '\\x{7C50}\\x{7C51}\\x{7C53}\\x{7C54}\\x{7C56}\\x{7C57}\\x{7C58}\\x{7C59}\\x{7C5A}' .\n          '\\x{7C5B}\\x{7C5C}\\x{7C5E}\\x{7C5F}\\x{7C60}\\x{7C61}\\x{7C62}\\x{7C63}\\x{7C64}' .\n          '\\x{7C65}\\x{7C66}\\x{7C67}\\x{7C68}\\x{7C69}\\x{7C6A}\\x{7C6B}\\x{7C6C}\\x{7C6D}' .\n          '\\x{7C6E}\\x{7C6F}\\x{7C70}\\x{7C71}\\x{7C72}\\x{7C73}\\x{7C74}\\x{7C75}\\x{7C77}' .\n          '\\x{7C78}\\x{7C79}\\x{7C7A}\\x{7C7B}\\x{7C7C}\\x{7C7D}\\x{7C7E}\\x{7C7F}\\x{7C80}' .\n          '\\x{7C81}\\x{7C82}\\x{7C84}\\x{7C85}\\x{7C86}\\x{7C88}\\x{7C89}\\x{7C8A}\\x{7C8B}' .\n          '\\x{7C8C}\\x{7C8D}\\x{7C8E}\\x{7C8F}\\x{7C90}\\x{7C91}\\x{7C92}\\x{7C94}\\x{7C95}' .\n          '\\x{7C96}\\x{7C97}\\x{7C98}\\x{7C99}\\x{7C9B}\\x{7C9C}\\x{7C9D}\\x{7C9E}\\x{7C9F}' .\n          '\\x{7CA0}\\x{7CA1}\\x{7CA2}\\x{7CA3}\\x{7CA4}\\x{7CA5}\\x{7CA6}\\x{7CA7}\\x{7CA8}' .\n          '\\x{7CA9}\\x{7CAA}\\x{7CAD}\\x{7CAE}\\x{7CAF}\\x{7CB0}\\x{7CB1}\\x{7CB2}\\x{7CB3}' .\n          '\\x{7CB4}\\x{7CB5}\\x{7CB6}\\x{7CB7}\\x{7CB8}\\x{7CB9}\\x{7CBA}\\x{7CBB}\\x{7CBC}' .\n          '\\x{7CBD}\\x{7CBE}\\x{7CBF}\\x{7CC0}\\x{7CC1}\\x{7CC2}\\x{7CC3}\\x{7CC4}\\x{7CC5}' .\n          '\\x{7CC6}\\x{7CC7}\\x{7CC8}\\x{7CC9}\\x{7CCA}\\x{7CCB}\\x{7CCC}\\x{7CCD}\\x{7CCE}' .\n          '\\x{7CCF}\\x{7CD0}\\x{7CD1}\\x{7CD2}\\x{7CD4}\\x{7CD5}\\x{7CD6}\\x{7CD7}\\x{7CD8}' .\n          '\\x{7CD9}\\x{7CDC}\\x{7CDD}\\x{7CDE}\\x{7CDF}\\x{7CE0}\\x{7CE2}\\x{7CE4}\\x{7CE7}' .\n          '\\x{7CE8}\\x{7CE9}\\x{7CEA}\\x{7CEB}\\x{7CEC}\\x{7CED}\\x{7CEE}\\x{7CEF}\\x{7CF0}' .\n          '\\x{7CF1}\\x{7CF2}\\x{7CF3}\\x{7CF4}\\x{7CF5}\\x{7CF6}\\x{7CF7}\\x{7CF8}\\x{7CF9}' .\n          '\\x{7CFA}\\x{7CFB}\\x{7CFD}\\x{7CFE}\\x{7D00}\\x{7D01}\\x{7D02}\\x{7D03}\\x{7D04}' .\n          '\\x{7D05}\\x{7D06}\\x{7D07}\\x{7D08}\\x{7D09}\\x{7D0A}\\x{7D0B}\\x{7D0C}\\x{7D0D}' .\n          '\\x{7D0E}\\x{7D0F}\\x{7D10}\\x{7D11}\\x{7D12}\\x{7D13}\\x{7D14}\\x{7D15}\\x{7D16}' .\n          '\\x{7D17}\\x{7D18}\\x{7D19}\\x{7D1A}\\x{7D1B}\\x{7D1C}\\x{7D1D}\\x{7D1E}\\x{7D1F}' .\n          '\\x{7D20}\\x{7D21}\\x{7D22}\\x{7D24}\\x{7D25}\\x{7D26}\\x{7D27}\\x{7D28}\\x{7D29}' .\n          '\\x{7D2B}\\x{7D2C}\\x{7D2E}\\x{7D2F}\\x{7D30}\\x{7D31}\\x{7D32}\\x{7D33}\\x{7D34}' .\n          '\\x{7D35}\\x{7D36}\\x{7D37}\\x{7D38}\\x{7D39}\\x{7D3A}\\x{7D3B}\\x{7D3C}\\x{7D3D}' .\n          '\\x{7D3E}\\x{7D3F}\\x{7D40}\\x{7D41}\\x{7D42}\\x{7D43}\\x{7D44}\\x{7D45}\\x{7D46}' .\n          '\\x{7D47}\\x{7D49}\\x{7D4A}\\x{7D4B}\\x{7D4C}\\x{7D4E}\\x{7D4F}\\x{7D50}\\x{7D51}' .\n          '\\x{7D52}\\x{7D53}\\x{7D54}\\x{7D55}\\x{7D56}\\x{7D57}\\x{7D58}\\x{7D59}\\x{7D5B}' .\n          '\\x{7D5C}\\x{7D5D}\\x{7D5E}\\x{7D5F}\\x{7D60}\\x{7D61}\\x{7D62}\\x{7D63}\\x{7D65}' .\n          '\\x{7D66}\\x{7D67}\\x{7D68}\\x{7D69}\\x{7D6A}\\x{7D6B}\\x{7D6C}\\x{7D6D}\\x{7D6E}' .\n          '\\x{7D6F}\\x{7D70}\\x{7D71}\\x{7D72}\\x{7D73}\\x{7D74}\\x{7D75}\\x{7D76}\\x{7D77}' .\n          '\\x{7D79}\\x{7D7A}\\x{7D7B}\\x{7D7C}\\x{7D7D}\\x{7D7E}\\x{7D7F}\\x{7D80}\\x{7D81}' .\n          '\\x{7D83}\\x{7D84}\\x{7D85}\\x{7D86}\\x{7D87}\\x{7D88}\\x{7D89}\\x{7D8A}\\x{7D8B}' .\n          '\\x{7D8C}\\x{7D8D}\\x{7D8E}\\x{7D8F}\\x{7D90}\\x{7D91}\\x{7D92}\\x{7D93}\\x{7D94}' .\n          '\\x{7D96}\\x{7D97}\\x{7D99}\\x{7D9B}\\x{7D9C}\\x{7D9D}\\x{7D9E}\\x{7D9F}\\x{7DA0}' .\n          '\\x{7DA1}\\x{7DA2}\\x{7DA3}\\x{7DA5}\\x{7DA6}\\x{7DA7}\\x{7DA9}\\x{7DAA}\\x{7DAB}' .\n          '\\x{7DAC}\\x{7DAD}\\x{7DAE}\\x{7DAF}\\x{7DB0}\\x{7DB1}\\x{7DB2}\\x{7DB3}\\x{7DB4}' .\n          '\\x{7DB5}\\x{7DB6}\\x{7DB7}\\x{7DB8}\\x{7DB9}\\x{7DBA}\\x{7DBB}\\x{7DBC}\\x{7DBD}' .\n          '\\x{7DBE}\\x{7DBF}\\x{7DC0}\\x{7DC1}\\x{7DC2}\\x{7DC3}\\x{7DC4}\\x{7DC5}\\x{7DC6}' .\n          '\\x{7DC7}\\x{7DC8}\\x{7DC9}\\x{7DCA}\\x{7DCB}\\x{7DCC}\\x{7DCE}\\x{7DCF}\\x{7DD0}' .\n          '\\x{7DD1}\\x{7DD2}\\x{7DD4}\\x{7DD5}\\x{7DD6}\\x{7DD7}\\x{7DD8}\\x{7DD9}\\x{7DDA}' .\n          '\\x{7DDB}\\x{7DDD}\\x{7DDE}\\x{7DDF}\\x{7DE0}\\x{7DE1}\\x{7DE2}\\x{7DE3}\\x{7DE6}' .\n          '\\x{7DE7}\\x{7DE8}\\x{7DE9}\\x{7DEA}\\x{7DEC}\\x{7DED}\\x{7DEE}\\x{7DEF}\\x{7DF0}' .\n          '\\x{7DF1}\\x{7DF2}\\x{7DF3}\\x{7DF4}\\x{7DF5}\\x{7DF6}\\x{7DF7}\\x{7DF8}\\x{7DF9}' .\n          '\\x{7DFA}\\x{7DFB}\\x{7DFC}\\x{7E00}\\x{7E01}\\x{7E02}\\x{7E03}\\x{7E04}\\x{7E05}' .\n          '\\x{7E06}\\x{7E07}\\x{7E08}\\x{7E09}\\x{7E0A}\\x{7E0B}\\x{7E0C}\\x{7E0D}\\x{7E0E}' .\n          '\\x{7E0F}\\x{7E10}\\x{7E11}\\x{7E12}\\x{7E13}\\x{7E14}\\x{7E15}\\x{7E16}\\x{7E17}' .\n          '\\x{7E19}\\x{7E1A}\\x{7E1B}\\x{7E1C}\\x{7E1D}\\x{7E1E}\\x{7E1F}\\x{7E20}\\x{7E21}' .\n          '\\x{7E22}\\x{7E23}\\x{7E24}\\x{7E25}\\x{7E26}\\x{7E27}\\x{7E28}\\x{7E29}\\x{7E2A}' .\n          '\\x{7E2B}\\x{7E2C}\\x{7E2D}\\x{7E2E}\\x{7E2F}\\x{7E30}\\x{7E31}\\x{7E32}\\x{7E33}' .\n          '\\x{7E34}\\x{7E35}\\x{7E36}\\x{7E37}\\x{7E38}\\x{7E39}\\x{7E3A}\\x{7E3B}\\x{7E3C}' .\n          '\\x{7E3D}\\x{7E3E}\\x{7E3F}\\x{7E40}\\x{7E41}\\x{7E42}\\x{7E43}\\x{7E44}\\x{7E45}' .\n          '\\x{7E46}\\x{7E47}\\x{7E48}\\x{7E49}\\x{7E4C}\\x{7E4D}\\x{7E4E}\\x{7E4F}\\x{7E50}' .\n          '\\x{7E51}\\x{7E52}\\x{7E53}\\x{7E54}\\x{7E55}\\x{7E56}\\x{7E57}\\x{7E58}\\x{7E59}' .\n          '\\x{7E5A}\\x{7E5C}\\x{7E5D}\\x{7E5E}\\x{7E5F}\\x{7E60}\\x{7E61}\\x{7E62}\\x{7E63}' .\n          '\\x{7E65}\\x{7E66}\\x{7E67}\\x{7E68}\\x{7E69}\\x{7E6A}\\x{7E6B}\\x{7E6C}\\x{7E6D}' .\n          '\\x{7E6E}\\x{7E6F}\\x{7E70}\\x{7E71}\\x{7E72}\\x{7E73}\\x{7E74}\\x{7E75}\\x{7E76}' .\n          '\\x{7E77}\\x{7E78}\\x{7E79}\\x{7E7A}\\x{7E7B}\\x{7E7C}\\x{7E7D}\\x{7E7E}\\x{7E7F}' .\n          '\\x{7E80}\\x{7E81}\\x{7E82}\\x{7E83}\\x{7E84}\\x{7E85}\\x{7E86}\\x{7E87}\\x{7E88}' .\n          '\\x{7E89}\\x{7E8A}\\x{7E8B}\\x{7E8C}\\x{7E8D}\\x{7E8E}\\x{7E8F}\\x{7E90}\\x{7E91}' .\n          '\\x{7E92}\\x{7E93}\\x{7E94}\\x{7E95}\\x{7E96}\\x{7E97}\\x{7E98}\\x{7E99}\\x{7E9A}' .\n          '\\x{7E9B}\\x{7E9C}\\x{7E9E}\\x{7E9F}\\x{7EA0}\\x{7EA1}\\x{7EA2}\\x{7EA3}\\x{7EA4}' .\n          '\\x{7EA5}\\x{7EA6}\\x{7EA7}\\x{7EA8}\\x{7EA9}\\x{7EAA}\\x{7EAB}\\x{7EAC}\\x{7EAD}' .\n          '\\x{7EAE}\\x{7EAF}\\x{7EB0}\\x{7EB1}\\x{7EB2}\\x{7EB3}\\x{7EB4}\\x{7EB5}\\x{7EB6}' .\n          '\\x{7EB7}\\x{7EB8}\\x{7EB9}\\x{7EBA}\\x{7EBB}\\x{7EBC}\\x{7EBD}\\x{7EBE}\\x{7EBF}' .\n          '\\x{7EC0}\\x{7EC1}\\x{7EC2}\\x{7EC3}\\x{7EC4}\\x{7EC5}\\x{7EC6}\\x{7EC7}\\x{7EC8}' .\n          '\\x{7EC9}\\x{7ECA}\\x{7ECB}\\x{7ECC}\\x{7ECD}\\x{7ECE}\\x{7ECF}\\x{7ED0}\\x{7ED1}' .\n          '\\x{7ED2}\\x{7ED3}\\x{7ED4}\\x{7ED5}\\x{7ED6}\\x{7ED7}\\x{7ED8}\\x{7ED9}\\x{7EDA}' .\n          '\\x{7EDB}\\x{7EDC}\\x{7EDD}\\x{7EDE}\\x{7EDF}\\x{7EE0}\\x{7EE1}\\x{7EE2}\\x{7EE3}' .\n          '\\x{7EE4}\\x{7EE5}\\x{7EE6}\\x{7EE7}\\x{7EE8}\\x{7EE9}\\x{7EEA}\\x{7EEB}\\x{7EEC}' .\n          '\\x{7EED}\\x{7EEE}\\x{7EEF}\\x{7EF0}\\x{7EF1}\\x{7EF2}\\x{7EF3}\\x{7EF4}\\x{7EF5}' .\n          '\\x{7EF6}\\x{7EF7}\\x{7EF8}\\x{7EF9}\\x{7EFA}\\x{7EFB}\\x{7EFC}\\x{7EFD}\\x{7EFE}' .\n          '\\x{7EFF}\\x{7F00}\\x{7F01}\\x{7F02}\\x{7F03}\\x{7F04}\\x{7F05}\\x{7F06}\\x{7F07}' .\n          '\\x{7F08}\\x{7F09}\\x{7F0A}\\x{7F0B}\\x{7F0C}\\x{7F0D}\\x{7F0E}\\x{7F0F}\\x{7F10}' .\n          '\\x{7F11}\\x{7F12}\\x{7F13}\\x{7F14}\\x{7F15}\\x{7F16}\\x{7F17}\\x{7F18}\\x{7F19}' .\n          '\\x{7F1A}\\x{7F1B}\\x{7F1C}\\x{7F1D}\\x{7F1E}\\x{7F1F}\\x{7F20}\\x{7F21}\\x{7F22}' .\n          '\\x{7F23}\\x{7F24}\\x{7F25}\\x{7F26}\\x{7F27}\\x{7F28}\\x{7F29}\\x{7F2A}\\x{7F2B}' .\n          '\\x{7F2C}\\x{7F2D}\\x{7F2E}\\x{7F2F}\\x{7F30}\\x{7F31}\\x{7F32}\\x{7F33}\\x{7F34}' .\n          '\\x{7F35}\\x{7F36}\\x{7F37}\\x{7F38}\\x{7F39}\\x{7F3A}\\x{7F3D}\\x{7F3E}\\x{7F3F}' .\n          '\\x{7F40}\\x{7F42}\\x{7F43}\\x{7F44}\\x{7F45}\\x{7F47}\\x{7F48}\\x{7F49}\\x{7F4A}' .\n          '\\x{7F4B}\\x{7F4C}\\x{7F4D}\\x{7F4E}\\x{7F4F}\\x{7F50}\\x{7F51}\\x{7F52}\\x{7F53}' .\n          '\\x{7F54}\\x{7F55}\\x{7F56}\\x{7F57}\\x{7F58}\\x{7F5A}\\x{7F5B}\\x{7F5C}\\x{7F5D}' .\n          '\\x{7F5E}\\x{7F5F}\\x{7F60}\\x{7F61}\\x{7F62}\\x{7F63}\\x{7F64}\\x{7F65}\\x{7F66}' .\n          '\\x{7F67}\\x{7F68}\\x{7F69}\\x{7F6A}\\x{7F6B}\\x{7F6C}\\x{7F6D}\\x{7F6E}\\x{7F6F}' .\n          '\\x{7F70}\\x{7F71}\\x{7F72}\\x{7F73}\\x{7F74}\\x{7F75}\\x{7F76}\\x{7F77}\\x{7F78}' .\n          '\\x{7F79}\\x{7F7A}\\x{7F7B}\\x{7F7C}\\x{7F7D}\\x{7F7E}\\x{7F7F}\\x{7F80}\\x{7F81}' .\n          '\\x{7F82}\\x{7F83}\\x{7F85}\\x{7F86}\\x{7F87}\\x{7F88}\\x{7F89}\\x{7F8A}\\x{7F8B}' .\n          '\\x{7F8C}\\x{7F8D}\\x{7F8E}\\x{7F8F}\\x{7F91}\\x{7F92}\\x{7F93}\\x{7F94}\\x{7F95}' .\n          '\\x{7F96}\\x{7F98}\\x{7F9A}\\x{7F9B}\\x{7F9C}\\x{7F9D}\\x{7F9E}\\x{7F9F}\\x{7FA0}' .\n          '\\x{7FA1}\\x{7FA2}\\x{7FA3}\\x{7FA4}\\x{7FA5}\\x{7FA6}\\x{7FA7}\\x{7FA8}\\x{7FA9}' .\n          '\\x{7FAA}\\x{7FAB}\\x{7FAC}\\x{7FAD}\\x{7FAE}\\x{7FAF}\\x{7FB0}\\x{7FB1}\\x{7FB2}' .\n          '\\x{7FB3}\\x{7FB5}\\x{7FB6}\\x{7FB7}\\x{7FB8}\\x{7FB9}\\x{7FBA}\\x{7FBB}\\x{7FBC}' .\n          '\\x{7FBD}\\x{7FBE}\\x{7FBF}\\x{7FC0}\\x{7FC1}\\x{7FC2}\\x{7FC3}\\x{7FC4}\\x{7FC5}' .\n          '\\x{7FC6}\\x{7FC7}\\x{7FC8}\\x{7FC9}\\x{7FCA}\\x{7FCB}\\x{7FCC}\\x{7FCD}\\x{7FCE}' .\n          '\\x{7FCF}\\x{7FD0}\\x{7FD1}\\x{7FD2}\\x{7FD3}\\x{7FD4}\\x{7FD5}\\x{7FD7}\\x{7FD8}' .\n          '\\x{7FD9}\\x{7FDA}\\x{7FDB}\\x{7FDC}\\x{7FDE}\\x{7FDF}\\x{7FE0}\\x{7FE1}\\x{7FE2}' .\n          '\\x{7FE3}\\x{7FE5}\\x{7FE6}\\x{7FE7}\\x{7FE8}\\x{7FE9}\\x{7FEA}\\x{7FEB}\\x{7FEC}' .\n          '\\x{7FED}\\x{7FEE}\\x{7FEF}\\x{7FF0}\\x{7FF1}\\x{7FF2}\\x{7FF3}\\x{7FF4}\\x{7FF5}' .\n          '\\x{7FF6}\\x{7FF7}\\x{7FF8}\\x{7FF9}\\x{7FFA}\\x{7FFB}\\x{7FFC}\\x{7FFD}\\x{7FFE}' .\n          '\\x{7FFF}\\x{8000}\\x{8001}\\x{8002}\\x{8003}\\x{8004}\\x{8005}\\x{8006}\\x{8007}' .\n          '\\x{8008}\\x{8009}\\x{800B}\\x{800C}\\x{800D}\\x{800E}\\x{800F}\\x{8010}\\x{8011}' .\n          '\\x{8012}\\x{8013}\\x{8014}\\x{8015}\\x{8016}\\x{8017}\\x{8018}\\x{8019}\\x{801A}' .\n          '\\x{801B}\\x{801C}\\x{801D}\\x{801E}\\x{801F}\\x{8020}\\x{8021}\\x{8022}\\x{8023}' .\n          '\\x{8024}\\x{8025}\\x{8026}\\x{8027}\\x{8028}\\x{8029}\\x{802A}\\x{802B}\\x{802C}' .\n          '\\x{802D}\\x{802E}\\x{8030}\\x{8031}\\x{8032}\\x{8033}\\x{8034}\\x{8035}\\x{8036}' .\n          '\\x{8037}\\x{8038}\\x{8039}\\x{803A}\\x{803B}\\x{803D}\\x{803E}\\x{803F}\\x{8041}' .\n          '\\x{8042}\\x{8043}\\x{8044}\\x{8045}\\x{8046}\\x{8047}\\x{8048}\\x{8049}\\x{804A}' .\n          '\\x{804B}\\x{804C}\\x{804D}\\x{804E}\\x{804F}\\x{8050}\\x{8051}\\x{8052}\\x{8053}' .\n          '\\x{8054}\\x{8055}\\x{8056}\\x{8057}\\x{8058}\\x{8059}\\x{805A}\\x{805B}\\x{805C}' .\n          '\\x{805D}\\x{805E}\\x{805F}\\x{8060}\\x{8061}\\x{8062}\\x{8063}\\x{8064}\\x{8065}' .\n          '\\x{8067}\\x{8068}\\x{8069}\\x{806A}\\x{806B}\\x{806C}\\x{806D}\\x{806E}\\x{806F}' .\n          '\\x{8070}\\x{8071}\\x{8072}\\x{8073}\\x{8074}\\x{8075}\\x{8076}\\x{8077}\\x{8078}' .\n          '\\x{8079}\\x{807A}\\x{807B}\\x{807C}\\x{807D}\\x{807E}\\x{807F}\\x{8080}\\x{8081}' .\n          '\\x{8082}\\x{8083}\\x{8084}\\x{8085}\\x{8086}\\x{8087}\\x{8089}\\x{808A}\\x{808B}' .\n          '\\x{808C}\\x{808D}\\x{808F}\\x{8090}\\x{8091}\\x{8092}\\x{8093}\\x{8095}\\x{8096}' .\n          '\\x{8097}\\x{8098}\\x{8099}\\x{809A}\\x{809B}\\x{809C}\\x{809D}\\x{809E}\\x{809F}' .\n          '\\x{80A0}\\x{80A1}\\x{80A2}\\x{80A3}\\x{80A4}\\x{80A5}\\x{80A9}\\x{80AA}\\x{80AB}' .\n          '\\x{80AD}\\x{80AE}\\x{80AF}\\x{80B0}\\x{80B1}\\x{80B2}\\x{80B4}\\x{80B5}\\x{80B6}' .\n          '\\x{80B7}\\x{80B8}\\x{80BA}\\x{80BB}\\x{80BC}\\x{80BD}\\x{80BE}\\x{80BF}\\x{80C0}' .\n          '\\x{80C1}\\x{80C2}\\x{80C3}\\x{80C4}\\x{80C5}\\x{80C6}\\x{80C7}\\x{80C8}\\x{80C9}' .\n          '\\x{80CA}\\x{80CB}\\x{80CC}\\x{80CD}\\x{80CE}\\x{80CF}\\x{80D0}\\x{80D1}\\x{80D2}' .\n          '\\x{80D3}\\x{80D4}\\x{80D5}\\x{80D6}\\x{80D7}\\x{80D8}\\x{80D9}\\x{80DA}\\x{80DB}' .\n          '\\x{80DC}\\x{80DD}\\x{80DE}\\x{80E0}\\x{80E1}\\x{80E2}\\x{80E3}\\x{80E4}\\x{80E5}' .\n          '\\x{80E6}\\x{80E7}\\x{80E8}\\x{80E9}\\x{80EA}\\x{80EB}\\x{80EC}\\x{80ED}\\x{80EE}' .\n          '\\x{80EF}\\x{80F0}\\x{80F1}\\x{80F2}\\x{80F3}\\x{80F4}\\x{80F5}\\x{80F6}\\x{80F7}' .\n          '\\x{80F8}\\x{80F9}\\x{80FA}\\x{80FB}\\x{80FC}\\x{80FD}\\x{80FE}\\x{80FF}\\x{8100}' .\n          '\\x{8101}\\x{8102}\\x{8105}\\x{8106}\\x{8107}\\x{8108}\\x{8109}\\x{810A}\\x{810B}' .\n          '\\x{810C}\\x{810D}\\x{810E}\\x{810F}\\x{8110}\\x{8111}\\x{8112}\\x{8113}\\x{8114}' .\n          '\\x{8115}\\x{8116}\\x{8118}\\x{8119}\\x{811A}\\x{811B}\\x{811C}\\x{811D}\\x{811E}' .\n          '\\x{811F}\\x{8120}\\x{8121}\\x{8122}\\x{8123}\\x{8124}\\x{8125}\\x{8126}\\x{8127}' .\n          '\\x{8128}\\x{8129}\\x{812A}\\x{812B}\\x{812C}\\x{812D}\\x{812E}\\x{812F}\\x{8130}' .\n          '\\x{8131}\\x{8132}\\x{8136}\\x{8137}\\x{8138}\\x{8139}\\x{813A}\\x{813B}\\x{813C}' .\n          '\\x{813D}\\x{813E}\\x{813F}\\x{8140}\\x{8141}\\x{8142}\\x{8143}\\x{8144}\\x{8145}' .\n          '\\x{8146}\\x{8147}\\x{8148}\\x{8149}\\x{814A}\\x{814B}\\x{814C}\\x{814D}\\x{814E}' .\n          '\\x{814F}\\x{8150}\\x{8151}\\x{8152}\\x{8153}\\x{8154}\\x{8155}\\x{8156}\\x{8157}' .\n          '\\x{8158}\\x{8159}\\x{815A}\\x{815B}\\x{815C}\\x{815D}\\x{815E}\\x{8160}\\x{8161}' .\n          '\\x{8162}\\x{8163}\\x{8164}\\x{8165}\\x{8166}\\x{8167}\\x{8168}\\x{8169}\\x{816A}' .\n          '\\x{816B}\\x{816C}\\x{816D}\\x{816E}\\x{816F}\\x{8170}\\x{8171}\\x{8172}\\x{8173}' .\n          '\\x{8174}\\x{8175}\\x{8176}\\x{8177}\\x{8178}\\x{8179}\\x{817A}\\x{817B}\\x{817C}' .\n          '\\x{817D}\\x{817E}\\x{817F}\\x{8180}\\x{8181}\\x{8182}\\x{8183}\\x{8185}\\x{8186}' .\n          '\\x{8187}\\x{8188}\\x{8189}\\x{818A}\\x{818B}\\x{818C}\\x{818D}\\x{818E}\\x{818F}' .\n          '\\x{8191}\\x{8192}\\x{8193}\\x{8194}\\x{8195}\\x{8197}\\x{8198}\\x{8199}\\x{819A}' .\n          '\\x{819B}\\x{819C}\\x{819D}\\x{819E}\\x{819F}\\x{81A0}\\x{81A1}\\x{81A2}\\x{81A3}' .\n          '\\x{81A4}\\x{81A5}\\x{81A6}\\x{81A7}\\x{81A8}\\x{81A9}\\x{81AA}\\x{81AB}\\x{81AC}' .\n          '\\x{81AD}\\x{81AE}\\x{81AF}\\x{81B0}\\x{81B1}\\x{81B2}\\x{81B3}\\x{81B4}\\x{81B5}' .\n          '\\x{81B6}\\x{81B7}\\x{81B8}\\x{81B9}\\x{81BA}\\x{81BB}\\x{81BC}\\x{81BD}\\x{81BE}' .\n          '\\x{81BF}\\x{81C0}\\x{81C1}\\x{81C2}\\x{81C3}\\x{81C4}\\x{81C5}\\x{81C6}\\x{81C7}' .\n          '\\x{81C8}\\x{81C9}\\x{81CA}\\x{81CC}\\x{81CD}\\x{81CE}\\x{81CF}\\x{81D0}\\x{81D1}' .\n          '\\x{81D2}\\x{81D4}\\x{81D5}\\x{81D6}\\x{81D7}\\x{81D8}\\x{81D9}\\x{81DA}\\x{81DB}' .\n          '\\x{81DC}\\x{81DD}\\x{81DE}\\x{81DF}\\x{81E0}\\x{81E1}\\x{81E2}\\x{81E3}\\x{81E5}' .\n          '\\x{81E6}\\x{81E7}\\x{81E8}\\x{81E9}\\x{81EA}\\x{81EB}\\x{81EC}\\x{81ED}\\x{81EE}' .\n          '\\x{81F1}\\x{81F2}\\x{81F3}\\x{81F4}\\x{81F5}\\x{81F6}\\x{81F7}\\x{81F8}\\x{81F9}' .\n          '\\x{81FA}\\x{81FB}\\x{81FC}\\x{81FD}\\x{81FE}\\x{81FF}\\x{8200}\\x{8201}\\x{8202}' .\n          '\\x{8203}\\x{8204}\\x{8205}\\x{8206}\\x{8207}\\x{8208}\\x{8209}\\x{820A}\\x{820B}' .\n          '\\x{820C}\\x{820D}\\x{820E}\\x{820F}\\x{8210}\\x{8211}\\x{8212}\\x{8214}\\x{8215}' .\n          '\\x{8216}\\x{8218}\\x{8219}\\x{821A}\\x{821B}\\x{821C}\\x{821D}\\x{821E}\\x{821F}' .\n          '\\x{8220}\\x{8221}\\x{8222}\\x{8223}\\x{8225}\\x{8226}\\x{8227}\\x{8228}\\x{8229}' .\n          '\\x{822A}\\x{822B}\\x{822C}\\x{822D}\\x{822F}\\x{8230}\\x{8231}\\x{8232}\\x{8233}' .\n          '\\x{8234}\\x{8235}\\x{8236}\\x{8237}\\x{8238}\\x{8239}\\x{823A}\\x{823B}\\x{823C}' .\n          '\\x{823D}\\x{823E}\\x{823F}\\x{8240}\\x{8242}\\x{8243}\\x{8244}\\x{8245}\\x{8246}' .\n          '\\x{8247}\\x{8248}\\x{8249}\\x{824A}\\x{824B}\\x{824C}\\x{824D}\\x{824E}\\x{824F}' .\n          '\\x{8250}\\x{8251}\\x{8252}\\x{8253}\\x{8254}\\x{8255}\\x{8256}\\x{8257}\\x{8258}' .\n          '\\x{8259}\\x{825A}\\x{825B}\\x{825C}\\x{825D}\\x{825E}\\x{825F}\\x{8260}\\x{8261}' .\n          '\\x{8263}\\x{8264}\\x{8266}\\x{8267}\\x{8268}\\x{8269}\\x{826A}\\x{826B}\\x{826C}' .\n          '\\x{826D}\\x{826E}\\x{826F}\\x{8270}\\x{8271}\\x{8272}\\x{8273}\\x{8274}\\x{8275}' .\n          '\\x{8276}\\x{8277}\\x{8278}\\x{8279}\\x{827A}\\x{827B}\\x{827C}\\x{827D}\\x{827E}' .\n          '\\x{827F}\\x{8280}\\x{8281}\\x{8282}\\x{8283}\\x{8284}\\x{8285}\\x{8286}\\x{8287}' .\n          '\\x{8288}\\x{8289}\\x{828A}\\x{828B}\\x{828D}\\x{828E}\\x{828F}\\x{8290}\\x{8291}' .\n          '\\x{8292}\\x{8293}\\x{8294}\\x{8295}\\x{8296}\\x{8297}\\x{8298}\\x{8299}\\x{829A}' .\n          '\\x{829B}\\x{829C}\\x{829D}\\x{829E}\\x{829F}\\x{82A0}\\x{82A1}\\x{82A2}\\x{82A3}' .\n          '\\x{82A4}\\x{82A5}\\x{82A6}\\x{82A7}\\x{82A8}\\x{82A9}\\x{82AA}\\x{82AB}\\x{82AC}' .\n          '\\x{82AD}\\x{82AE}\\x{82AF}\\x{82B0}\\x{82B1}\\x{82B3}\\x{82B4}\\x{82B5}\\x{82B6}' .\n          '\\x{82B7}\\x{82B8}\\x{82B9}\\x{82BA}\\x{82BB}\\x{82BC}\\x{82BD}\\x{82BE}\\x{82BF}' .\n          '\\x{82C0}\\x{82C1}\\x{82C2}\\x{82C3}\\x{82C4}\\x{82C5}\\x{82C6}\\x{82C7}\\x{82C8}' .\n          '\\x{82C9}\\x{82CA}\\x{82CB}\\x{82CC}\\x{82CD}\\x{82CE}\\x{82CF}\\x{82D0}\\x{82D1}' .\n          '\\x{82D2}\\x{82D3}\\x{82D4}\\x{82D5}\\x{82D6}\\x{82D7}\\x{82D8}\\x{82D9}\\x{82DA}' .\n          '\\x{82DB}\\x{82DC}\\x{82DD}\\x{82DE}\\x{82DF}\\x{82E0}\\x{82E1}\\x{82E3}\\x{82E4}' .\n          '\\x{82E5}\\x{82E6}\\x{82E7}\\x{82E8}\\x{82E9}\\x{82EA}\\x{82EB}\\x{82EC}\\x{82ED}' .\n          '\\x{82EE}\\x{82EF}\\x{82F0}\\x{82F1}\\x{82F2}\\x{82F3}\\x{82F4}\\x{82F5}\\x{82F6}' .\n          '\\x{82F7}\\x{82F8}\\x{82F9}\\x{82FA}\\x{82FB}\\x{82FD}\\x{82FE}\\x{82FF}\\x{8300}' .\n          '\\x{8301}\\x{8302}\\x{8303}\\x{8304}\\x{8305}\\x{8306}\\x{8307}\\x{8308}\\x{8309}' .\n          '\\x{830B}\\x{830C}\\x{830D}\\x{830E}\\x{830F}\\x{8311}\\x{8312}\\x{8313}\\x{8314}' .\n          '\\x{8315}\\x{8316}\\x{8317}\\x{8318}\\x{8319}\\x{831A}\\x{831B}\\x{831C}\\x{831D}' .\n          '\\x{831E}\\x{831F}\\x{8320}\\x{8321}\\x{8322}\\x{8323}\\x{8324}\\x{8325}\\x{8326}' .\n          '\\x{8327}\\x{8328}\\x{8329}\\x{832A}\\x{832B}\\x{832C}\\x{832D}\\x{832E}\\x{832F}' .\n          '\\x{8331}\\x{8332}\\x{8333}\\x{8334}\\x{8335}\\x{8336}\\x{8337}\\x{8338}\\x{8339}' .\n          '\\x{833A}\\x{833B}\\x{833C}\\x{833D}\\x{833E}\\x{833F}\\x{8340}\\x{8341}\\x{8342}' .\n          '\\x{8343}\\x{8344}\\x{8345}\\x{8346}\\x{8347}\\x{8348}\\x{8349}\\x{834A}\\x{834B}' .\n          '\\x{834C}\\x{834D}\\x{834E}\\x{834F}\\x{8350}\\x{8351}\\x{8352}\\x{8353}\\x{8354}' .\n          '\\x{8356}\\x{8357}\\x{8358}\\x{8359}\\x{835A}\\x{835B}\\x{835C}\\x{835D}\\x{835E}' .\n          '\\x{835F}\\x{8360}\\x{8361}\\x{8362}\\x{8363}\\x{8364}\\x{8365}\\x{8366}\\x{8367}' .\n          '\\x{8368}\\x{8369}\\x{836A}\\x{836B}\\x{836C}\\x{836D}\\x{836E}\\x{836F}\\x{8370}' .\n          '\\x{8371}\\x{8372}\\x{8373}\\x{8374}\\x{8375}\\x{8376}\\x{8377}\\x{8378}\\x{8379}' .\n          '\\x{837A}\\x{837B}\\x{837C}\\x{837D}\\x{837E}\\x{837F}\\x{8380}\\x{8381}\\x{8382}' .\n          '\\x{8383}\\x{8384}\\x{8385}\\x{8386}\\x{8387}\\x{8388}\\x{8389}\\x{838A}\\x{838B}' .\n          '\\x{838C}\\x{838D}\\x{838E}\\x{838F}\\x{8390}\\x{8391}\\x{8392}\\x{8393}\\x{8394}' .\n          '\\x{8395}\\x{8396}\\x{8397}\\x{8398}\\x{8399}\\x{839A}\\x{839B}\\x{839C}\\x{839D}' .\n          '\\x{839E}\\x{83A0}\\x{83A1}\\x{83A2}\\x{83A3}\\x{83A4}\\x{83A5}\\x{83A6}\\x{83A7}' .\n          '\\x{83A8}\\x{83A9}\\x{83AA}\\x{83AB}\\x{83AC}\\x{83AD}\\x{83AE}\\x{83AF}\\x{83B0}' .\n          '\\x{83B1}\\x{83B2}\\x{83B3}\\x{83B4}\\x{83B6}\\x{83B7}\\x{83B8}\\x{83B9}\\x{83BA}' .\n          '\\x{83BB}\\x{83BC}\\x{83BD}\\x{83BF}\\x{83C0}\\x{83C1}\\x{83C2}\\x{83C3}\\x{83C4}' .\n          '\\x{83C5}\\x{83C6}\\x{83C7}\\x{83C8}\\x{83C9}\\x{83CA}\\x{83CB}\\x{83CC}\\x{83CD}' .\n          '\\x{83CE}\\x{83CF}\\x{83D0}\\x{83D1}\\x{83D2}\\x{83D3}\\x{83D4}\\x{83D5}\\x{83D6}' .\n          '\\x{83D7}\\x{83D8}\\x{83D9}\\x{83DA}\\x{83DB}\\x{83DC}\\x{83DD}\\x{83DE}\\x{83DF}' .\n          '\\x{83E0}\\x{83E1}\\x{83E2}\\x{83E3}\\x{83E4}\\x{83E5}\\x{83E7}\\x{83E8}\\x{83E9}' .\n          '\\x{83EA}\\x{83EB}\\x{83EC}\\x{83EE}\\x{83EF}\\x{83F0}\\x{83F1}\\x{83F2}\\x{83F3}' .\n          '\\x{83F4}\\x{83F5}\\x{83F6}\\x{83F7}\\x{83F8}\\x{83F9}\\x{83FA}\\x{83FB}\\x{83FC}' .\n          '\\x{83FD}\\x{83FE}\\x{83FF}\\x{8400}\\x{8401}\\x{8402}\\x{8403}\\x{8404}\\x{8405}' .\n          '\\x{8406}\\x{8407}\\x{8408}\\x{8409}\\x{840A}\\x{840B}\\x{840C}\\x{840D}\\x{840E}' .\n          '\\x{840F}\\x{8410}\\x{8411}\\x{8412}\\x{8413}\\x{8415}\\x{8418}\\x{8419}\\x{841A}' .\n          '\\x{841B}\\x{841C}\\x{841D}\\x{841E}\\x{8421}\\x{8422}\\x{8423}\\x{8424}\\x{8425}' .\n          '\\x{8426}\\x{8427}\\x{8428}\\x{8429}\\x{842A}\\x{842B}\\x{842C}\\x{842D}\\x{842E}' .\n          '\\x{842F}\\x{8430}\\x{8431}\\x{8432}\\x{8433}\\x{8434}\\x{8435}\\x{8436}\\x{8437}' .\n          '\\x{8438}\\x{8439}\\x{843A}\\x{843B}\\x{843C}\\x{843D}\\x{843E}\\x{843F}\\x{8440}' .\n          '\\x{8441}\\x{8442}\\x{8443}\\x{8444}\\x{8445}\\x{8446}\\x{8447}\\x{8448}\\x{8449}' .\n          '\\x{844A}\\x{844B}\\x{844C}\\x{844D}\\x{844E}\\x{844F}\\x{8450}\\x{8451}\\x{8452}' .\n          '\\x{8453}\\x{8454}\\x{8455}\\x{8456}\\x{8457}\\x{8459}\\x{845A}\\x{845B}\\x{845C}' .\n          '\\x{845D}\\x{845E}\\x{845F}\\x{8460}\\x{8461}\\x{8462}\\x{8463}\\x{8464}\\x{8465}' .\n          '\\x{8466}\\x{8467}\\x{8468}\\x{8469}\\x{846A}\\x{846B}\\x{846C}\\x{846D}\\x{846E}' .\n          '\\x{846F}\\x{8470}\\x{8471}\\x{8472}\\x{8473}\\x{8474}\\x{8475}\\x{8476}\\x{8477}' .\n          '\\x{8478}\\x{8479}\\x{847A}\\x{847B}\\x{847C}\\x{847D}\\x{847E}\\x{847F}\\x{8480}' .\n          '\\x{8481}\\x{8482}\\x{8484}\\x{8485}\\x{8486}\\x{8487}\\x{8488}\\x{8489}\\x{848A}' .\n          '\\x{848B}\\x{848C}\\x{848D}\\x{848E}\\x{848F}\\x{8490}\\x{8491}\\x{8492}\\x{8493}' .\n          '\\x{8494}\\x{8496}\\x{8497}\\x{8498}\\x{8499}\\x{849A}\\x{849B}\\x{849C}\\x{849D}' .\n          '\\x{849E}\\x{849F}\\x{84A0}\\x{84A1}\\x{84A2}\\x{84A3}\\x{84A4}\\x{84A5}\\x{84A6}' .\n          '\\x{84A7}\\x{84A8}\\x{84A9}\\x{84AA}\\x{84AB}\\x{84AC}\\x{84AE}\\x{84AF}\\x{84B0}' .\n          '\\x{84B1}\\x{84B2}\\x{84B3}\\x{84B4}\\x{84B5}\\x{84B6}\\x{84B8}\\x{84B9}\\x{84BA}' .\n          '\\x{84BB}\\x{84BC}\\x{84BD}\\x{84BE}\\x{84BF}\\x{84C0}\\x{84C1}\\x{84C2}\\x{84C4}' .\n          '\\x{84C5}\\x{84C6}\\x{84C7}\\x{84C8}\\x{84C9}\\x{84CA}\\x{84CB}\\x{84CC}\\x{84CD}' .\n          '\\x{84CE}\\x{84CF}\\x{84D0}\\x{84D1}\\x{84D2}\\x{84D3}\\x{84D4}\\x{84D5}\\x{84D6}' .\n          '\\x{84D7}\\x{84D8}\\x{84D9}\\x{84DB}\\x{84DC}\\x{84DD}\\x{84DE}\\x{84DF}\\x{84E0}' .\n          '\\x{84E1}\\x{84E2}\\x{84E3}\\x{84E4}\\x{84E5}\\x{84E6}\\x{84E7}\\x{84E8}\\x{84E9}' .\n          '\\x{84EA}\\x{84EB}\\x{84EC}\\x{84EE}\\x{84EF}\\x{84F0}\\x{84F1}\\x{84F2}\\x{84F3}' .\n          '\\x{84F4}\\x{84F5}\\x{84F6}\\x{84F7}\\x{84F8}\\x{84F9}\\x{84FA}\\x{84FB}\\x{84FC}' .\n          '\\x{84FD}\\x{84FE}\\x{84FF}\\x{8500}\\x{8501}\\x{8502}\\x{8503}\\x{8504}\\x{8506}' .\n          '\\x{8507}\\x{8508}\\x{8509}\\x{850A}\\x{850B}\\x{850C}\\x{850D}\\x{850E}\\x{850F}' .\n          '\\x{8511}\\x{8512}\\x{8513}\\x{8514}\\x{8515}\\x{8516}\\x{8517}\\x{8518}\\x{8519}' .\n          '\\x{851A}\\x{851B}\\x{851C}\\x{851D}\\x{851E}\\x{851F}\\x{8520}\\x{8521}\\x{8522}' .\n          '\\x{8523}\\x{8524}\\x{8525}\\x{8526}\\x{8527}\\x{8528}\\x{8529}\\x{852A}\\x{852B}' .\n          '\\x{852C}\\x{852D}\\x{852E}\\x{852F}\\x{8530}\\x{8531}\\x{8534}\\x{8535}\\x{8536}' .\n          '\\x{8537}\\x{8538}\\x{8539}\\x{853A}\\x{853B}\\x{853C}\\x{853D}\\x{853E}\\x{853F}' .\n          '\\x{8540}\\x{8541}\\x{8542}\\x{8543}\\x{8544}\\x{8545}\\x{8546}\\x{8547}\\x{8548}' .\n          '\\x{8549}\\x{854A}\\x{854B}\\x{854D}\\x{854E}\\x{854F}\\x{8551}\\x{8552}\\x{8553}' .\n          '\\x{8554}\\x{8555}\\x{8556}\\x{8557}\\x{8558}\\x{8559}\\x{855A}\\x{855B}\\x{855C}' .\n          '\\x{855D}\\x{855E}\\x{855F}\\x{8560}\\x{8561}\\x{8562}\\x{8563}\\x{8564}\\x{8565}' .\n          '\\x{8566}\\x{8567}\\x{8568}\\x{8569}\\x{856A}\\x{856B}\\x{856C}\\x{856D}\\x{856E}' .\n          '\\x{856F}\\x{8570}\\x{8571}\\x{8572}\\x{8573}\\x{8574}\\x{8575}\\x{8576}\\x{8577}' .\n          '\\x{8578}\\x{8579}\\x{857A}\\x{857B}\\x{857C}\\x{857D}\\x{857E}\\x{8580}\\x{8581}' .\n          '\\x{8582}\\x{8583}\\x{8584}\\x{8585}\\x{8586}\\x{8587}\\x{8588}\\x{8589}\\x{858A}' .\n          '\\x{858B}\\x{858C}\\x{858D}\\x{858E}\\x{858F}\\x{8590}\\x{8591}\\x{8592}\\x{8594}' .\n          '\\x{8595}\\x{8596}\\x{8598}\\x{8599}\\x{859A}\\x{859B}\\x{859C}\\x{859D}\\x{859E}' .\n          '\\x{859F}\\x{85A0}\\x{85A1}\\x{85A2}\\x{85A3}\\x{85A4}\\x{85A5}\\x{85A6}\\x{85A7}' .\n          '\\x{85A8}\\x{85A9}\\x{85AA}\\x{85AB}\\x{85AC}\\x{85AD}\\x{85AE}\\x{85AF}\\x{85B0}' .\n          '\\x{85B1}\\x{85B3}\\x{85B4}\\x{85B5}\\x{85B6}\\x{85B7}\\x{85B8}\\x{85B9}\\x{85BA}' .\n          '\\x{85BC}\\x{85BD}\\x{85BE}\\x{85BF}\\x{85C0}\\x{85C1}\\x{85C2}\\x{85C3}\\x{85C4}' .\n          '\\x{85C5}\\x{85C6}\\x{85C7}\\x{85C8}\\x{85C9}\\x{85CA}\\x{85CB}\\x{85CD}\\x{85CE}' .\n          '\\x{85CF}\\x{85D0}\\x{85D1}\\x{85D2}\\x{85D3}\\x{85D4}\\x{85D5}\\x{85D6}\\x{85D7}' .\n          '\\x{85D8}\\x{85D9}\\x{85DA}\\x{85DB}\\x{85DC}\\x{85DD}\\x{85DE}\\x{85DF}\\x{85E0}' .\n          '\\x{85E1}\\x{85E2}\\x{85E3}\\x{85E4}\\x{85E5}\\x{85E6}\\x{85E7}\\x{85E8}\\x{85E9}' .\n          '\\x{85EA}\\x{85EB}\\x{85EC}\\x{85ED}\\x{85EF}\\x{85F0}\\x{85F1}\\x{85F2}\\x{85F4}' .\n          '\\x{85F5}\\x{85F6}\\x{85F7}\\x{85F8}\\x{85F9}\\x{85FA}\\x{85FB}\\x{85FD}\\x{85FE}' .\n          '\\x{85FF}\\x{8600}\\x{8601}\\x{8602}\\x{8604}\\x{8605}\\x{8606}\\x{8607}\\x{8608}' .\n          '\\x{8609}\\x{860A}\\x{860B}\\x{860C}\\x{860F}\\x{8611}\\x{8612}\\x{8613}\\x{8614}' .\n          '\\x{8616}\\x{8617}\\x{8618}\\x{8619}\\x{861A}\\x{861B}\\x{861C}\\x{861E}\\x{861F}' .\n          '\\x{8620}\\x{8621}\\x{8622}\\x{8623}\\x{8624}\\x{8625}\\x{8626}\\x{8627}\\x{8628}' .\n          '\\x{8629}\\x{862A}\\x{862B}\\x{862C}\\x{862D}\\x{862E}\\x{862F}\\x{8630}\\x{8631}' .\n          '\\x{8632}\\x{8633}\\x{8634}\\x{8635}\\x{8636}\\x{8638}\\x{8639}\\x{863A}\\x{863B}' .\n          '\\x{863C}\\x{863D}\\x{863E}\\x{863F}\\x{8640}\\x{8641}\\x{8642}\\x{8643}\\x{8644}' .\n          '\\x{8645}\\x{8646}\\x{8647}\\x{8648}\\x{8649}\\x{864A}\\x{864B}\\x{864C}\\x{864D}' .\n          '\\x{864E}\\x{864F}\\x{8650}\\x{8651}\\x{8652}\\x{8653}\\x{8654}\\x{8655}\\x{8656}' .\n          '\\x{8658}\\x{8659}\\x{865A}\\x{865B}\\x{865C}\\x{865D}\\x{865E}\\x{865F}\\x{8660}' .\n          '\\x{8661}\\x{8662}\\x{8663}\\x{8664}\\x{8665}\\x{8666}\\x{8667}\\x{8668}\\x{8669}' .\n          '\\x{866A}\\x{866B}\\x{866C}\\x{866D}\\x{866E}\\x{866F}\\x{8670}\\x{8671}\\x{8672}' .\n          '\\x{8673}\\x{8674}\\x{8676}\\x{8677}\\x{8678}\\x{8679}\\x{867A}\\x{867B}\\x{867C}' .\n          '\\x{867D}\\x{867E}\\x{867F}\\x{8680}\\x{8681}\\x{8682}\\x{8683}\\x{8684}\\x{8685}' .\n          '\\x{8686}\\x{8687}\\x{8688}\\x{868A}\\x{868B}\\x{868C}\\x{868D}\\x{868E}\\x{868F}' .\n          '\\x{8690}\\x{8691}\\x{8693}\\x{8694}\\x{8695}\\x{8696}\\x{8697}\\x{8698}\\x{8699}' .\n          '\\x{869A}\\x{869B}\\x{869C}\\x{869D}\\x{869E}\\x{869F}\\x{86A1}\\x{86A2}\\x{86A3}' .\n          '\\x{86A4}\\x{86A5}\\x{86A7}\\x{86A8}\\x{86A9}\\x{86AA}\\x{86AB}\\x{86AC}\\x{86AD}' .\n          '\\x{86AE}\\x{86AF}\\x{86B0}\\x{86B1}\\x{86B2}\\x{86B3}\\x{86B4}\\x{86B5}\\x{86B6}' .\n          '\\x{86B7}\\x{86B8}\\x{86B9}\\x{86BA}\\x{86BB}\\x{86BC}\\x{86BD}\\x{86BE}\\x{86BF}' .\n          '\\x{86C0}\\x{86C1}\\x{86C2}\\x{86C3}\\x{86C4}\\x{86C5}\\x{86C6}\\x{86C7}\\x{86C8}' .\n          '\\x{86C9}\\x{86CA}\\x{86CB}\\x{86CC}\\x{86CE}\\x{86CF}\\x{86D0}\\x{86D1}\\x{86D2}' .\n          '\\x{86D3}\\x{86D4}\\x{86D6}\\x{86D7}\\x{86D8}\\x{86D9}\\x{86DA}\\x{86DB}\\x{86DC}' .\n          '\\x{86DD}\\x{86DE}\\x{86DF}\\x{86E1}\\x{86E2}\\x{86E3}\\x{86E4}\\x{86E5}\\x{86E6}' .\n          '\\x{86E8}\\x{86E9}\\x{86EA}\\x{86EB}\\x{86EC}\\x{86ED}\\x{86EE}\\x{86EF}\\x{86F0}' .\n          '\\x{86F1}\\x{86F2}\\x{86F3}\\x{86F4}\\x{86F5}\\x{86F6}\\x{86F7}\\x{86F8}\\x{86F9}' .\n          '\\x{86FA}\\x{86FB}\\x{86FC}\\x{86FE}\\x{86FF}\\x{8700}\\x{8701}\\x{8702}\\x{8703}' .\n          '\\x{8704}\\x{8705}\\x{8706}\\x{8707}\\x{8708}\\x{8709}\\x{870A}\\x{870B}\\x{870C}' .\n          '\\x{870D}\\x{870E}\\x{870F}\\x{8710}\\x{8711}\\x{8712}\\x{8713}\\x{8714}\\x{8715}' .\n          '\\x{8716}\\x{8717}\\x{8718}\\x{8719}\\x{871A}\\x{871B}\\x{871C}\\x{871E}\\x{871F}' .\n          '\\x{8720}\\x{8721}\\x{8722}\\x{8723}\\x{8724}\\x{8725}\\x{8726}\\x{8727}\\x{8728}' .\n          '\\x{8729}\\x{872A}\\x{872B}\\x{872C}\\x{872D}\\x{872E}\\x{8730}\\x{8731}\\x{8732}' .\n          '\\x{8733}\\x{8734}\\x{8735}\\x{8736}\\x{8737}\\x{8738}\\x{8739}\\x{873A}\\x{873B}' .\n          '\\x{873C}\\x{873E}\\x{873F}\\x{8740}\\x{8741}\\x{8742}\\x{8743}\\x{8744}\\x{8746}' .\n          '\\x{8747}\\x{8748}\\x{8749}\\x{874A}\\x{874C}\\x{874D}\\x{874E}\\x{874F}\\x{8750}' .\n          '\\x{8751}\\x{8752}\\x{8753}\\x{8754}\\x{8755}\\x{8756}\\x{8757}\\x{8758}\\x{8759}' .\n          '\\x{875A}\\x{875B}\\x{875C}\\x{875D}\\x{875E}\\x{875F}\\x{8760}\\x{8761}\\x{8762}' .\n          '\\x{8763}\\x{8764}\\x{8765}\\x{8766}\\x{8767}\\x{8768}\\x{8769}\\x{876A}\\x{876B}' .\n          '\\x{876C}\\x{876D}\\x{876E}\\x{876F}\\x{8770}\\x{8772}\\x{8773}\\x{8774}\\x{8775}' .\n          '\\x{8776}\\x{8777}\\x{8778}\\x{8779}\\x{877A}\\x{877B}\\x{877C}\\x{877D}\\x{877E}' .\n          '\\x{8780}\\x{8781}\\x{8782}\\x{8783}\\x{8784}\\x{8785}\\x{8786}\\x{8787}\\x{8788}' .\n          '\\x{8789}\\x{878A}\\x{878B}\\x{878C}\\x{878D}\\x{878F}\\x{8790}\\x{8791}\\x{8792}' .\n          '\\x{8793}\\x{8794}\\x{8795}\\x{8796}\\x{8797}\\x{8798}\\x{879A}\\x{879B}\\x{879C}' .\n          '\\x{879D}\\x{879E}\\x{879F}\\x{87A0}\\x{87A1}\\x{87A2}\\x{87A3}\\x{87A4}\\x{87A5}' .\n          '\\x{87A6}\\x{87A7}\\x{87A8}\\x{87A9}\\x{87AA}\\x{87AB}\\x{87AC}\\x{87AD}\\x{87AE}' .\n          '\\x{87AF}\\x{87B0}\\x{87B1}\\x{87B2}\\x{87B3}\\x{87B4}\\x{87B5}\\x{87B6}\\x{87B7}' .\n          '\\x{87B8}\\x{87B9}\\x{87BA}\\x{87BB}\\x{87BC}\\x{87BD}\\x{87BE}\\x{87BF}\\x{87C0}' .\n          '\\x{87C1}\\x{87C2}\\x{87C3}\\x{87C4}\\x{87C5}\\x{87C6}\\x{87C7}\\x{87C8}\\x{87C9}' .\n          '\\x{87CA}\\x{87CB}\\x{87CC}\\x{87CD}\\x{87CE}\\x{87CF}\\x{87D0}\\x{87D1}\\x{87D2}' .\n          '\\x{87D3}\\x{87D4}\\x{87D5}\\x{87D6}\\x{87D7}\\x{87D8}\\x{87D9}\\x{87DB}\\x{87DC}' .\n          '\\x{87DD}\\x{87DE}\\x{87DF}\\x{87E0}\\x{87E1}\\x{87E2}\\x{87E3}\\x{87E4}\\x{87E5}' .\n          '\\x{87E6}\\x{87E7}\\x{87E8}\\x{87E9}\\x{87EA}\\x{87EB}\\x{87EC}\\x{87ED}\\x{87EE}' .\n          '\\x{87EF}\\x{87F1}\\x{87F2}\\x{87F3}\\x{87F4}\\x{87F5}\\x{87F6}\\x{87F7}\\x{87F8}' .\n          '\\x{87F9}\\x{87FA}\\x{87FB}\\x{87FC}\\x{87FD}\\x{87FE}\\x{87FF}\\x{8800}\\x{8801}' .\n          '\\x{8802}\\x{8803}\\x{8804}\\x{8805}\\x{8806}\\x{8808}\\x{8809}\\x{880A}\\x{880B}' .\n          '\\x{880C}\\x{880D}\\x{880E}\\x{880F}\\x{8810}\\x{8811}\\x{8813}\\x{8814}\\x{8815}' .\n          '\\x{8816}\\x{8817}\\x{8818}\\x{8819}\\x{881A}\\x{881B}\\x{881C}\\x{881D}\\x{881E}' .\n          '\\x{881F}\\x{8820}\\x{8821}\\x{8822}\\x{8823}\\x{8824}\\x{8825}\\x{8826}\\x{8827}' .\n          '\\x{8828}\\x{8829}\\x{882A}\\x{882B}\\x{882C}\\x{882E}\\x{882F}\\x{8830}\\x{8831}' .\n          '\\x{8832}\\x{8833}\\x{8834}\\x{8835}\\x{8836}\\x{8837}\\x{8838}\\x{8839}\\x{883B}' .\n          '\\x{883C}\\x{883D}\\x{883E}\\x{883F}\\x{8840}\\x{8841}\\x{8842}\\x{8843}\\x{8844}' .\n          '\\x{8845}\\x{8846}\\x{8848}\\x{8849}\\x{884A}\\x{884B}\\x{884C}\\x{884D}\\x{884E}' .\n          '\\x{884F}\\x{8850}\\x{8851}\\x{8852}\\x{8853}\\x{8854}\\x{8855}\\x{8856}\\x{8857}' .\n          '\\x{8859}\\x{885A}\\x{885B}\\x{885D}\\x{885E}\\x{8860}\\x{8861}\\x{8862}\\x{8863}' .\n          '\\x{8864}\\x{8865}\\x{8866}\\x{8867}\\x{8868}\\x{8869}\\x{886A}\\x{886B}\\x{886C}' .\n          '\\x{886D}\\x{886E}\\x{886F}\\x{8870}\\x{8871}\\x{8872}\\x{8873}\\x{8874}\\x{8875}' .\n          '\\x{8876}\\x{8877}\\x{8878}\\x{8879}\\x{887B}\\x{887C}\\x{887D}\\x{887E}\\x{887F}' .\n          '\\x{8880}\\x{8881}\\x{8882}\\x{8883}\\x{8884}\\x{8885}\\x{8886}\\x{8887}\\x{8888}' .\n          '\\x{8889}\\x{888A}\\x{888B}\\x{888C}\\x{888D}\\x{888E}\\x{888F}\\x{8890}\\x{8891}' .\n          '\\x{8892}\\x{8893}\\x{8894}\\x{8895}\\x{8896}\\x{8897}\\x{8898}\\x{8899}\\x{889A}' .\n          '\\x{889B}\\x{889C}\\x{889D}\\x{889E}\\x{889F}\\x{88A0}\\x{88A1}\\x{88A2}\\x{88A3}' .\n          '\\x{88A4}\\x{88A5}\\x{88A6}\\x{88A7}\\x{88A8}\\x{88A9}\\x{88AA}\\x{88AB}\\x{88AC}' .\n          '\\x{88AD}\\x{88AE}\\x{88AF}\\x{88B0}\\x{88B1}\\x{88B2}\\x{88B3}\\x{88B4}\\x{88B6}' .\n          '\\x{88B7}\\x{88B8}\\x{88B9}\\x{88BA}\\x{88BB}\\x{88BC}\\x{88BD}\\x{88BE}\\x{88BF}' .\n          '\\x{88C0}\\x{88C1}\\x{88C2}\\x{88C3}\\x{88C4}\\x{88C5}\\x{88C6}\\x{88C7}\\x{88C8}' .\n          '\\x{88C9}\\x{88CA}\\x{88CB}\\x{88CC}\\x{88CD}\\x{88CE}\\x{88CF}\\x{88D0}\\x{88D1}' .\n          '\\x{88D2}\\x{88D3}\\x{88D4}\\x{88D5}\\x{88D6}\\x{88D7}\\x{88D8}\\x{88D9}\\x{88DA}' .\n          '\\x{88DB}\\x{88DC}\\x{88DD}\\x{88DE}\\x{88DF}\\x{88E0}\\x{88E1}\\x{88E2}\\x{88E3}' .\n          '\\x{88E4}\\x{88E5}\\x{88E7}\\x{88E8}\\x{88EA}\\x{88EB}\\x{88EC}\\x{88EE}\\x{88EF}' .\n          '\\x{88F0}\\x{88F1}\\x{88F2}\\x{88F3}\\x{88F4}\\x{88F5}\\x{88F6}\\x{88F7}\\x{88F8}' .\n          '\\x{88F9}\\x{88FA}\\x{88FB}\\x{88FC}\\x{88FD}\\x{88FE}\\x{88FF}\\x{8900}\\x{8901}' .\n          '\\x{8902}\\x{8904}\\x{8905}\\x{8906}\\x{8907}\\x{8908}\\x{8909}\\x{890A}\\x{890B}' .\n          '\\x{890C}\\x{890D}\\x{890E}\\x{8910}\\x{8911}\\x{8912}\\x{8913}\\x{8914}\\x{8915}' .\n          '\\x{8916}\\x{8917}\\x{8918}\\x{8919}\\x{891A}\\x{891B}\\x{891C}\\x{891D}\\x{891E}' .\n          '\\x{891F}\\x{8920}\\x{8921}\\x{8922}\\x{8923}\\x{8925}\\x{8926}\\x{8927}\\x{8928}' .\n          '\\x{8929}\\x{892A}\\x{892B}\\x{892C}\\x{892D}\\x{892E}\\x{892F}\\x{8930}\\x{8931}' .\n          '\\x{8932}\\x{8933}\\x{8934}\\x{8935}\\x{8936}\\x{8937}\\x{8938}\\x{8939}\\x{893A}' .\n          '\\x{893B}\\x{893C}\\x{893D}\\x{893E}\\x{893F}\\x{8940}\\x{8941}\\x{8942}\\x{8943}' .\n          '\\x{8944}\\x{8945}\\x{8946}\\x{8947}\\x{8948}\\x{8949}\\x{894A}\\x{894B}\\x{894C}' .\n          '\\x{894E}\\x{894F}\\x{8950}\\x{8951}\\x{8952}\\x{8953}\\x{8954}\\x{8955}\\x{8956}' .\n          '\\x{8957}\\x{8958}\\x{8959}\\x{895A}\\x{895B}\\x{895C}\\x{895D}\\x{895E}\\x{895F}' .\n          '\\x{8960}\\x{8961}\\x{8962}\\x{8963}\\x{8964}\\x{8966}\\x{8967}\\x{8968}\\x{8969}' .\n          '\\x{896A}\\x{896B}\\x{896C}\\x{896D}\\x{896E}\\x{896F}\\x{8970}\\x{8971}\\x{8972}' .\n          '\\x{8973}\\x{8974}\\x{8976}\\x{8977}\\x{8978}\\x{8979}\\x{897A}\\x{897B}\\x{897C}' .\n          '\\x{897E}\\x{897F}\\x{8980}\\x{8981}\\x{8982}\\x{8983}\\x{8984}\\x{8985}\\x{8986}' .\n          '\\x{8987}\\x{8988}\\x{8989}\\x{898A}\\x{898B}\\x{898C}\\x{898E}\\x{898F}\\x{8991}' .\n          '\\x{8992}\\x{8993}\\x{8995}\\x{8996}\\x{8997}\\x{8998}\\x{899A}\\x{899B}\\x{899C}' .\n          '\\x{899D}\\x{899E}\\x{899F}\\x{89A0}\\x{89A1}\\x{89A2}\\x{89A3}\\x{89A4}\\x{89A5}' .\n          '\\x{89A6}\\x{89A7}\\x{89A8}\\x{89AA}\\x{89AB}\\x{89AC}\\x{89AD}\\x{89AE}\\x{89AF}' .\n          '\\x{89B1}\\x{89B2}\\x{89B3}\\x{89B5}\\x{89B6}\\x{89B7}\\x{89B8}\\x{89B9}\\x{89BA}' .\n          '\\x{89BD}\\x{89BE}\\x{89BF}\\x{89C0}\\x{89C1}\\x{89C2}\\x{89C3}\\x{89C4}\\x{89C5}' .\n          '\\x{89C6}\\x{89C7}\\x{89C8}\\x{89C9}\\x{89CA}\\x{89CB}\\x{89CC}\\x{89CD}\\x{89CE}' .\n          '\\x{89CF}\\x{89D0}\\x{89D1}\\x{89D2}\\x{89D3}\\x{89D4}\\x{89D5}\\x{89D6}\\x{89D7}' .\n          '\\x{89D8}\\x{89D9}\\x{89DA}\\x{89DB}\\x{89DC}\\x{89DD}\\x{89DE}\\x{89DF}\\x{89E0}' .\n          '\\x{89E1}\\x{89E2}\\x{89E3}\\x{89E4}\\x{89E5}\\x{89E6}\\x{89E7}\\x{89E8}\\x{89E9}' .\n          '\\x{89EA}\\x{89EB}\\x{89EC}\\x{89ED}\\x{89EF}\\x{89F0}\\x{89F1}\\x{89F2}\\x{89F3}' .\n          '\\x{89F4}\\x{89F6}\\x{89F7}\\x{89F8}\\x{89FA}\\x{89FB}\\x{89FC}\\x{89FE}\\x{89FF}' .\n          '\\x{8A00}\\x{8A01}\\x{8A02}\\x{8A03}\\x{8A04}\\x{8A07}\\x{8A08}\\x{8A09}\\x{8A0A}' .\n          '\\x{8A0B}\\x{8A0C}\\x{8A0D}\\x{8A0E}\\x{8A0F}\\x{8A10}\\x{8A11}\\x{8A12}\\x{8A13}' .\n          '\\x{8A15}\\x{8A16}\\x{8A17}\\x{8A18}\\x{8A1A}\\x{8A1B}\\x{8A1C}\\x{8A1D}\\x{8A1E}' .\n          '\\x{8A1F}\\x{8A22}\\x{8A23}\\x{8A24}\\x{8A25}\\x{8A26}\\x{8A27}\\x{8A28}\\x{8A29}' .\n          '\\x{8A2A}\\x{8A2C}\\x{8A2D}\\x{8A2E}\\x{8A2F}\\x{8A30}\\x{8A31}\\x{8A32}\\x{8A34}' .\n          '\\x{8A35}\\x{8A36}\\x{8A37}\\x{8A38}\\x{8A39}\\x{8A3A}\\x{8A3B}\\x{8A3C}\\x{8A3E}' .\n          '\\x{8A3F}\\x{8A40}\\x{8A41}\\x{8A42}\\x{8A43}\\x{8A44}\\x{8A45}\\x{8A46}\\x{8A47}' .\n          '\\x{8A48}\\x{8A49}\\x{8A4A}\\x{8A4C}\\x{8A4D}\\x{8A4E}\\x{8A4F}\\x{8A50}\\x{8A51}' .\n          '\\x{8A52}\\x{8A53}\\x{8A54}\\x{8A55}\\x{8A56}\\x{8A57}\\x{8A58}\\x{8A59}\\x{8A5A}' .\n          '\\x{8A5B}\\x{8A5C}\\x{8A5D}\\x{8A5E}\\x{8A5F}\\x{8A60}\\x{8A61}\\x{8A62}\\x{8A63}' .\n          '\\x{8A65}\\x{8A66}\\x{8A67}\\x{8A68}\\x{8A69}\\x{8A6A}\\x{8A6B}\\x{8A6C}\\x{8A6D}' .\n          '\\x{8A6E}\\x{8A6F}\\x{8A70}\\x{8A71}\\x{8A72}\\x{8A73}\\x{8A74}\\x{8A75}\\x{8A76}' .\n          '\\x{8A77}\\x{8A79}\\x{8A7A}\\x{8A7B}\\x{8A7C}\\x{8A7E}\\x{8A7F}\\x{8A80}\\x{8A81}' .\n          '\\x{8A82}\\x{8A83}\\x{8A84}\\x{8A85}\\x{8A86}\\x{8A87}\\x{8A89}\\x{8A8A}\\x{8A8B}' .\n          '\\x{8A8C}\\x{8A8D}\\x{8A8E}\\x{8A8F}\\x{8A90}\\x{8A91}\\x{8A92}\\x{8A93}\\x{8A94}' .\n          '\\x{8A95}\\x{8A96}\\x{8A97}\\x{8A98}\\x{8A99}\\x{8A9A}\\x{8A9B}\\x{8A9C}\\x{8A9D}' .\n          '\\x{8A9E}\\x{8AA0}\\x{8AA1}\\x{8AA2}\\x{8AA3}\\x{8AA4}\\x{8AA5}\\x{8AA6}\\x{8AA7}' .\n          '\\x{8AA8}\\x{8AA9}\\x{8AAA}\\x{8AAB}\\x{8AAC}\\x{8AAE}\\x{8AB0}\\x{8AB1}\\x{8AB2}' .\n          '\\x{8AB3}\\x{8AB4}\\x{8AB5}\\x{8AB6}\\x{8AB8}\\x{8AB9}\\x{8ABA}\\x{8ABB}\\x{8ABC}' .\n          '\\x{8ABD}\\x{8ABE}\\x{8ABF}\\x{8AC0}\\x{8AC1}\\x{8AC2}\\x{8AC3}\\x{8AC4}\\x{8AC5}' .\n          '\\x{8AC6}\\x{8AC7}\\x{8AC8}\\x{8AC9}\\x{8ACA}\\x{8ACB}\\x{8ACC}\\x{8ACD}\\x{8ACE}' .\n          '\\x{8ACF}\\x{8AD1}\\x{8AD2}\\x{8AD3}\\x{8AD4}\\x{8AD5}\\x{8AD6}\\x{8AD7}\\x{8AD8}' .\n          '\\x{8AD9}\\x{8ADA}\\x{8ADB}\\x{8ADC}\\x{8ADD}\\x{8ADE}\\x{8ADF}\\x{8AE0}\\x{8AE1}' .\n          '\\x{8AE2}\\x{8AE3}\\x{8AE4}\\x{8AE5}\\x{8AE6}\\x{8AE7}\\x{8AE8}\\x{8AE9}\\x{8AEA}' .\n          '\\x{8AEB}\\x{8AED}\\x{8AEE}\\x{8AEF}\\x{8AF0}\\x{8AF1}\\x{8AF2}\\x{8AF3}\\x{8AF4}' .\n          '\\x{8AF5}\\x{8AF6}\\x{8AF7}\\x{8AF8}\\x{8AF9}\\x{8AFA}\\x{8AFB}\\x{8AFC}\\x{8AFD}' .\n          '\\x{8AFE}\\x{8AFF}\\x{8B00}\\x{8B01}\\x{8B02}\\x{8B03}\\x{8B04}\\x{8B05}\\x{8B06}' .\n          '\\x{8B07}\\x{8B08}\\x{8B09}\\x{8B0A}\\x{8B0B}\\x{8B0D}\\x{8B0E}\\x{8B0F}\\x{8B10}' .\n          '\\x{8B11}\\x{8B12}\\x{8B13}\\x{8B14}\\x{8B15}\\x{8B16}\\x{8B17}\\x{8B18}\\x{8B19}' .\n          '\\x{8B1A}\\x{8B1B}\\x{8B1C}\\x{8B1D}\\x{8B1E}\\x{8B1F}\\x{8B20}\\x{8B21}\\x{8B22}' .\n          '\\x{8B23}\\x{8B24}\\x{8B25}\\x{8B26}\\x{8B27}\\x{8B28}\\x{8B2A}\\x{8B2B}\\x{8B2C}' .\n          '\\x{8B2D}\\x{8B2E}\\x{8B2F}\\x{8B30}\\x{8B31}\\x{8B33}\\x{8B34}\\x{8B35}\\x{8B36}' .\n          '\\x{8B37}\\x{8B39}\\x{8B3A}\\x{8B3B}\\x{8B3C}\\x{8B3D}\\x{8B3E}\\x{8B40}\\x{8B41}' .\n          '\\x{8B42}\\x{8B43}\\x{8B44}\\x{8B45}\\x{8B46}\\x{8B47}\\x{8B48}\\x{8B49}\\x{8B4A}' .\n          '\\x{8B4B}\\x{8B4C}\\x{8B4D}\\x{8B4E}\\x{8B4F}\\x{8B50}\\x{8B51}\\x{8B52}\\x{8B53}' .\n          '\\x{8B54}\\x{8B55}\\x{8B56}\\x{8B57}\\x{8B58}\\x{8B59}\\x{8B5A}\\x{8B5B}\\x{8B5C}' .\n          '\\x{8B5D}\\x{8B5E}\\x{8B5F}\\x{8B60}\\x{8B63}\\x{8B64}\\x{8B65}\\x{8B66}\\x{8B67}' .\n          '\\x{8B68}\\x{8B6A}\\x{8B6B}\\x{8B6C}\\x{8B6D}\\x{8B6E}\\x{8B6F}\\x{8B70}\\x{8B71}' .\n          '\\x{8B73}\\x{8B74}\\x{8B76}\\x{8B77}\\x{8B78}\\x{8B79}\\x{8B7A}\\x{8B7B}\\x{8B7D}' .\n          '\\x{8B7E}\\x{8B7F}\\x{8B80}\\x{8B82}\\x{8B83}\\x{8B84}\\x{8B85}\\x{8B86}\\x{8B88}' .\n          '\\x{8B89}\\x{8B8A}\\x{8B8B}\\x{8B8C}\\x{8B8E}\\x{8B90}\\x{8B91}\\x{8B92}\\x{8B93}' .\n          '\\x{8B94}\\x{8B95}\\x{8B96}\\x{8B97}\\x{8B98}\\x{8B99}\\x{8B9A}\\x{8B9C}\\x{8B9D}' .\n          '\\x{8B9E}\\x{8B9F}\\x{8BA0}\\x{8BA1}\\x{8BA2}\\x{8BA3}\\x{8BA4}\\x{8BA5}\\x{8BA6}' .\n          '\\x{8BA7}\\x{8BA8}\\x{8BA9}\\x{8BAA}\\x{8BAB}\\x{8BAC}\\x{8BAD}\\x{8BAE}\\x{8BAF}' .\n          '\\x{8BB0}\\x{8BB1}\\x{8BB2}\\x{8BB3}\\x{8BB4}\\x{8BB5}\\x{8BB6}\\x{8BB7}\\x{8BB8}' .\n          '\\x{8BB9}\\x{8BBA}\\x{8BBB}\\x{8BBC}\\x{8BBD}\\x{8BBE}\\x{8BBF}\\x{8BC0}\\x{8BC1}' .\n          '\\x{8BC2}\\x{8BC3}\\x{8BC4}\\x{8BC5}\\x{8BC6}\\x{8BC7}\\x{8BC8}\\x{8BC9}\\x{8BCA}' .\n          '\\x{8BCB}\\x{8BCC}\\x{8BCD}\\x{8BCE}\\x{8BCF}\\x{8BD0}\\x{8BD1}\\x{8BD2}\\x{8BD3}' .\n          '\\x{8BD4}\\x{8BD5}\\x{8BD6}\\x{8BD7}\\x{8BD8}\\x{8BD9}\\x{8BDA}\\x{8BDB}\\x{8BDC}' .\n          '\\x{8BDD}\\x{8BDE}\\x{8BDF}\\x{8BE0}\\x{8BE1}\\x{8BE2}\\x{8BE3}\\x{8BE4}\\x{8BE5}' .\n          '\\x{8BE6}\\x{8BE7}\\x{8BE8}\\x{8BE9}\\x{8BEA}\\x{8BEB}\\x{8BEC}\\x{8BED}\\x{8BEE}' .\n          '\\x{8BEF}\\x{8BF0}\\x{8BF1}\\x{8BF2}\\x{8BF3}\\x{8BF4}\\x{8BF5}\\x{8BF6}\\x{8BF7}' .\n          '\\x{8BF8}\\x{8BF9}\\x{8BFA}\\x{8BFB}\\x{8BFC}\\x{8BFD}\\x{8BFE}\\x{8BFF}\\x{8C00}' .\n          '\\x{8C01}\\x{8C02}\\x{8C03}\\x{8C04}\\x{8C05}\\x{8C06}\\x{8C07}\\x{8C08}\\x{8C09}' .\n          '\\x{8C0A}\\x{8C0B}\\x{8C0C}\\x{8C0D}\\x{8C0E}\\x{8C0F}\\x{8C10}\\x{8C11}\\x{8C12}' .\n          '\\x{8C13}\\x{8C14}\\x{8C15}\\x{8C16}\\x{8C17}\\x{8C18}\\x{8C19}\\x{8C1A}\\x{8C1B}' .\n          '\\x{8C1C}\\x{8C1D}\\x{8C1E}\\x{8C1F}\\x{8C20}\\x{8C21}\\x{8C22}\\x{8C23}\\x{8C24}' .\n          '\\x{8C25}\\x{8C26}\\x{8C27}\\x{8C28}\\x{8C29}\\x{8C2A}\\x{8C2B}\\x{8C2C}\\x{8C2D}' .\n          '\\x{8C2E}\\x{8C2F}\\x{8C30}\\x{8C31}\\x{8C32}\\x{8C33}\\x{8C34}\\x{8C35}\\x{8C36}' .\n          '\\x{8C37}\\x{8C39}\\x{8C3A}\\x{8C3B}\\x{8C3C}\\x{8C3D}\\x{8C3E}\\x{8C3F}\\x{8C41}' .\n          '\\x{8C42}\\x{8C43}\\x{8C45}\\x{8C46}\\x{8C47}\\x{8C48}\\x{8C49}\\x{8C4A}\\x{8C4B}' .\n          '\\x{8C4C}\\x{8C4D}\\x{8C4E}\\x{8C4F}\\x{8C50}\\x{8C54}\\x{8C55}\\x{8C56}\\x{8C57}' .\n          '\\x{8C59}\\x{8C5A}\\x{8C5B}\\x{8C5C}\\x{8C5D}\\x{8C5E}\\x{8C5F}\\x{8C60}\\x{8C61}' .\n          '\\x{8C62}\\x{8C63}\\x{8C64}\\x{8C65}\\x{8C66}\\x{8C67}\\x{8C68}\\x{8C69}\\x{8C6A}' .\n          '\\x{8C6B}\\x{8C6C}\\x{8C6D}\\x{8C6E}\\x{8C6F}\\x{8C70}\\x{8C71}\\x{8C72}\\x{8C73}' .\n          '\\x{8C75}\\x{8C76}\\x{8C77}\\x{8C78}\\x{8C79}\\x{8C7A}\\x{8C7B}\\x{8C7D}\\x{8C7E}' .\n          '\\x{8C80}\\x{8C81}\\x{8C82}\\x{8C84}\\x{8C85}\\x{8C86}\\x{8C88}\\x{8C89}\\x{8C8A}' .\n          '\\x{8C8C}\\x{8C8D}\\x{8C8F}\\x{8C90}\\x{8C91}\\x{8C92}\\x{8C93}\\x{8C94}\\x{8C95}' .\n          '\\x{8C96}\\x{8C97}\\x{8C98}\\x{8C99}\\x{8C9A}\\x{8C9C}\\x{8C9D}\\x{8C9E}\\x{8C9F}' .\n          '\\x{8CA0}\\x{8CA1}\\x{8CA2}\\x{8CA3}\\x{8CA4}\\x{8CA5}\\x{8CA7}\\x{8CA8}\\x{8CA9}' .\n          '\\x{8CAA}\\x{8CAB}\\x{8CAC}\\x{8CAD}\\x{8CAE}\\x{8CAF}\\x{8CB0}\\x{8CB1}\\x{8CB2}' .\n          '\\x{8CB3}\\x{8CB4}\\x{8CB5}\\x{8CB6}\\x{8CB7}\\x{8CB8}\\x{8CB9}\\x{8CBA}\\x{8CBB}' .\n          '\\x{8CBC}\\x{8CBD}\\x{8CBE}\\x{8CBF}\\x{8CC0}\\x{8CC1}\\x{8CC2}\\x{8CC3}\\x{8CC4}' .\n          '\\x{8CC5}\\x{8CC6}\\x{8CC7}\\x{8CC8}\\x{8CC9}\\x{8CCA}\\x{8CCC}\\x{8CCE}\\x{8CCF}' .\n          '\\x{8CD0}\\x{8CD1}\\x{8CD2}\\x{8CD3}\\x{8CD4}\\x{8CD5}\\x{8CD7}\\x{8CD9}\\x{8CDA}' .\n          '\\x{8CDB}\\x{8CDC}\\x{8CDD}\\x{8CDE}\\x{8CDF}\\x{8CE0}\\x{8CE1}\\x{8CE2}\\x{8CE3}' .\n          '\\x{8CE4}\\x{8CE5}\\x{8CE6}\\x{8CE7}\\x{8CE8}\\x{8CEA}\\x{8CEB}\\x{8CEC}\\x{8CED}' .\n          '\\x{8CEE}\\x{8CEF}\\x{8CF0}\\x{8CF1}\\x{8CF2}\\x{8CF3}\\x{8CF4}\\x{8CF5}\\x{8CF6}' .\n          '\\x{8CF8}\\x{8CF9}\\x{8CFA}\\x{8CFB}\\x{8CFC}\\x{8CFD}\\x{8CFE}\\x{8CFF}\\x{8D00}' .\n          '\\x{8D02}\\x{8D03}\\x{8D04}\\x{8D05}\\x{8D06}\\x{8D07}\\x{8D08}\\x{8D09}\\x{8D0A}' .\n          '\\x{8D0B}\\x{8D0C}\\x{8D0D}\\x{8D0E}\\x{8D0F}\\x{8D10}\\x{8D13}\\x{8D14}\\x{8D15}' .\n          '\\x{8D16}\\x{8D17}\\x{8D18}\\x{8D19}\\x{8D1A}\\x{8D1B}\\x{8D1C}\\x{8D1D}\\x{8D1E}' .\n          '\\x{8D1F}\\x{8D20}\\x{8D21}\\x{8D22}\\x{8D23}\\x{8D24}\\x{8D25}\\x{8D26}\\x{8D27}' .\n          '\\x{8D28}\\x{8D29}\\x{8D2A}\\x{8D2B}\\x{8D2C}\\x{8D2D}\\x{8D2E}\\x{8D2F}\\x{8D30}' .\n          '\\x{8D31}\\x{8D32}\\x{8D33}\\x{8D34}\\x{8D35}\\x{8D36}\\x{8D37}\\x{8D38}\\x{8D39}' .\n          '\\x{8D3A}\\x{8D3B}\\x{8D3C}\\x{8D3D}\\x{8D3E}\\x{8D3F}\\x{8D40}\\x{8D41}\\x{8D42}' .\n          '\\x{8D43}\\x{8D44}\\x{8D45}\\x{8D46}\\x{8D47}\\x{8D48}\\x{8D49}\\x{8D4A}\\x{8D4B}' .\n          '\\x{8D4C}\\x{8D4D}\\x{8D4E}\\x{8D4F}\\x{8D50}\\x{8D51}\\x{8D52}\\x{8D53}\\x{8D54}' .\n          '\\x{8D55}\\x{8D56}\\x{8D57}\\x{8D58}\\x{8D59}\\x{8D5A}\\x{8D5B}\\x{8D5C}\\x{8D5D}' .\n          '\\x{8D5E}\\x{8D5F}\\x{8D60}\\x{8D61}\\x{8D62}\\x{8D63}\\x{8D64}\\x{8D65}\\x{8D66}' .\n          '\\x{8D67}\\x{8D68}\\x{8D69}\\x{8D6A}\\x{8D6B}\\x{8D6C}\\x{8D6D}\\x{8D6E}\\x{8D6F}' .\n          '\\x{8D70}\\x{8D71}\\x{8D72}\\x{8D73}\\x{8D74}\\x{8D75}\\x{8D76}\\x{8D77}\\x{8D78}' .\n          '\\x{8D79}\\x{8D7A}\\x{8D7B}\\x{8D7D}\\x{8D7E}\\x{8D7F}\\x{8D80}\\x{8D81}\\x{8D82}' .\n          '\\x{8D83}\\x{8D84}\\x{8D85}\\x{8D86}\\x{8D87}\\x{8D88}\\x{8D89}\\x{8D8A}\\x{8D8B}' .\n          '\\x{8D8C}\\x{8D8D}\\x{8D8E}\\x{8D8F}\\x{8D90}\\x{8D91}\\x{8D92}\\x{8D93}\\x{8D94}' .\n          '\\x{8D95}\\x{8D96}\\x{8D97}\\x{8D98}\\x{8D99}\\x{8D9A}\\x{8D9B}\\x{8D9C}\\x{8D9D}' .\n          '\\x{8D9E}\\x{8D9F}\\x{8DA0}\\x{8DA1}\\x{8DA2}\\x{8DA3}\\x{8DA4}\\x{8DA5}\\x{8DA7}' .\n          '\\x{8DA8}\\x{8DA9}\\x{8DAA}\\x{8DAB}\\x{8DAC}\\x{8DAD}\\x{8DAE}\\x{8DAF}\\x{8DB0}' .\n          '\\x{8DB1}\\x{8DB2}\\x{8DB3}\\x{8DB4}\\x{8DB5}\\x{8DB6}\\x{8DB7}\\x{8DB8}\\x{8DB9}' .\n          '\\x{8DBA}\\x{8DBB}\\x{8DBC}\\x{8DBD}\\x{8DBE}\\x{8DBF}\\x{8DC1}\\x{8DC2}\\x{8DC3}' .\n          '\\x{8DC4}\\x{8DC5}\\x{8DC6}\\x{8DC7}\\x{8DC8}\\x{8DC9}\\x{8DCA}\\x{8DCB}\\x{8DCC}' .\n          '\\x{8DCD}\\x{8DCE}\\x{8DCF}\\x{8DD0}\\x{8DD1}\\x{8DD2}\\x{8DD3}\\x{8DD4}\\x{8DD5}' .\n          '\\x{8DD6}\\x{8DD7}\\x{8DD8}\\x{8DD9}\\x{8DDA}\\x{8DDB}\\x{8DDC}\\x{8DDD}\\x{8DDE}' .\n          '\\x{8DDF}\\x{8DE0}\\x{8DE1}\\x{8DE2}\\x{8DE3}\\x{8DE4}\\x{8DE6}\\x{8DE7}\\x{8DE8}' .\n          '\\x{8DE9}\\x{8DEA}\\x{8DEB}\\x{8DEC}\\x{8DED}\\x{8DEE}\\x{8DEF}\\x{8DF0}\\x{8DF1}' .\n          '\\x{8DF2}\\x{8DF3}\\x{8DF4}\\x{8DF5}\\x{8DF6}\\x{8DF7}\\x{8DF8}\\x{8DF9}\\x{8DFA}' .\n          '\\x{8DFB}\\x{8DFC}\\x{8DFD}\\x{8DFE}\\x{8DFF}\\x{8E00}\\x{8E02}\\x{8E03}\\x{8E04}' .\n          '\\x{8E05}\\x{8E06}\\x{8E07}\\x{8E08}\\x{8E09}\\x{8E0A}\\x{8E0C}\\x{8E0D}\\x{8E0E}' .\n          '\\x{8E0F}\\x{8E10}\\x{8E11}\\x{8E12}\\x{8E13}\\x{8E14}\\x{8E15}\\x{8E16}\\x{8E17}' .\n          '\\x{8E18}\\x{8E19}\\x{8E1A}\\x{8E1B}\\x{8E1C}\\x{8E1D}\\x{8E1E}\\x{8E1F}\\x{8E20}' .\n          '\\x{8E21}\\x{8E22}\\x{8E23}\\x{8E24}\\x{8E25}\\x{8E26}\\x{8E27}\\x{8E28}\\x{8E29}' .\n          '\\x{8E2A}\\x{8E2B}\\x{8E2C}\\x{8E2D}\\x{8E2E}\\x{8E2F}\\x{8E30}\\x{8E31}\\x{8E33}' .\n          '\\x{8E34}\\x{8E35}\\x{8E36}\\x{8E37}\\x{8E38}\\x{8E39}\\x{8E3A}\\x{8E3B}\\x{8E3C}' .\n          '\\x{8E3D}\\x{8E3E}\\x{8E3F}\\x{8E40}\\x{8E41}\\x{8E42}\\x{8E43}\\x{8E44}\\x{8E45}' .\n          '\\x{8E47}\\x{8E48}\\x{8E49}\\x{8E4A}\\x{8E4B}\\x{8E4C}\\x{8E4D}\\x{8E4E}\\x{8E50}' .\n          '\\x{8E51}\\x{8E52}\\x{8E53}\\x{8E54}\\x{8E55}\\x{8E56}\\x{8E57}\\x{8E58}\\x{8E59}' .\n          '\\x{8E5A}\\x{8E5B}\\x{8E5C}\\x{8E5D}\\x{8E5E}\\x{8E5F}\\x{8E60}\\x{8E61}\\x{8E62}' .\n          '\\x{8E63}\\x{8E64}\\x{8E65}\\x{8E66}\\x{8E67}\\x{8E68}\\x{8E69}\\x{8E6A}\\x{8E6B}' .\n          '\\x{8E6C}\\x{8E6D}\\x{8E6F}\\x{8E70}\\x{8E71}\\x{8E72}\\x{8E73}\\x{8E74}\\x{8E76}' .\n          '\\x{8E78}\\x{8E7A}\\x{8E7B}\\x{8E7C}\\x{8E7D}\\x{8E7E}\\x{8E7F}\\x{8E80}\\x{8E81}' .\n          '\\x{8E82}\\x{8E83}\\x{8E84}\\x{8E85}\\x{8E86}\\x{8E87}\\x{8E88}\\x{8E89}\\x{8E8A}' .\n          '\\x{8E8B}\\x{8E8C}\\x{8E8D}\\x{8E8E}\\x{8E8F}\\x{8E90}\\x{8E91}\\x{8E92}\\x{8E93}' .\n          '\\x{8E94}\\x{8E95}\\x{8E96}\\x{8E97}\\x{8E98}\\x{8E9A}\\x{8E9C}\\x{8E9D}\\x{8E9E}' .\n          '\\x{8E9F}\\x{8EA0}\\x{8EA1}\\x{8EA3}\\x{8EA4}\\x{8EA5}\\x{8EA6}\\x{8EA7}\\x{8EA8}' .\n          '\\x{8EA9}\\x{8EAA}\\x{8EAB}\\x{8EAC}\\x{8EAD}\\x{8EAE}\\x{8EAF}\\x{8EB0}\\x{8EB1}' .\n          '\\x{8EB2}\\x{8EB4}\\x{8EB5}\\x{8EB8}\\x{8EB9}\\x{8EBA}\\x{8EBB}\\x{8EBC}\\x{8EBD}' .\n          '\\x{8EBE}\\x{8EBF}\\x{8EC0}\\x{8EC2}\\x{8EC3}\\x{8EC5}\\x{8EC6}\\x{8EC7}\\x{8EC8}' .\n          '\\x{8EC9}\\x{8ECA}\\x{8ECB}\\x{8ECC}\\x{8ECD}\\x{8ECE}\\x{8ECF}\\x{8ED0}\\x{8ED1}' .\n          '\\x{8ED2}\\x{8ED3}\\x{8ED4}\\x{8ED5}\\x{8ED6}\\x{8ED7}\\x{8ED8}\\x{8EDA}\\x{8EDB}' .\n          '\\x{8EDC}\\x{8EDD}\\x{8EDE}\\x{8EDF}\\x{8EE0}\\x{8EE1}\\x{8EE4}\\x{8EE5}\\x{8EE6}' .\n          '\\x{8EE7}\\x{8EE8}\\x{8EE9}\\x{8EEA}\\x{8EEB}\\x{8EEC}\\x{8EED}\\x{8EEE}\\x{8EEF}' .\n          '\\x{8EF1}\\x{8EF2}\\x{8EF3}\\x{8EF4}\\x{8EF5}\\x{8EF6}\\x{8EF7}\\x{8EF8}\\x{8EF9}' .\n          '\\x{8EFA}\\x{8EFB}\\x{8EFC}\\x{8EFD}\\x{8EFE}\\x{8EFF}\\x{8F00}\\x{8F01}\\x{8F02}' .\n          '\\x{8F03}\\x{8F04}\\x{8F05}\\x{8F06}\\x{8F07}\\x{8F08}\\x{8F09}\\x{8F0A}\\x{8F0B}' .\n          '\\x{8F0D}\\x{8F0E}\\x{8F10}\\x{8F11}\\x{8F12}\\x{8F13}\\x{8F14}\\x{8F15}\\x{8F16}' .\n          '\\x{8F17}\\x{8F18}\\x{8F1A}\\x{8F1B}\\x{8F1C}\\x{8F1D}\\x{8F1E}\\x{8F1F}\\x{8F20}' .\n          '\\x{8F21}\\x{8F22}\\x{8F23}\\x{8F24}\\x{8F25}\\x{8F26}\\x{8F27}\\x{8F28}\\x{8F29}' .\n          '\\x{8F2A}\\x{8F2B}\\x{8F2C}\\x{8F2E}\\x{8F2F}\\x{8F30}\\x{8F31}\\x{8F32}\\x{8F33}' .\n          '\\x{8F34}\\x{8F35}\\x{8F36}\\x{8F37}\\x{8F38}\\x{8F39}\\x{8F3B}\\x{8F3C}\\x{8F3D}' .\n          '\\x{8F3E}\\x{8F3F}\\x{8F40}\\x{8F42}\\x{8F43}\\x{8F44}\\x{8F45}\\x{8F46}\\x{8F47}' .\n          '\\x{8F48}\\x{8F49}\\x{8F4A}\\x{8F4B}\\x{8F4C}\\x{8F4D}\\x{8F4E}\\x{8F4F}\\x{8F50}' .\n          '\\x{8F51}\\x{8F52}\\x{8F53}\\x{8F54}\\x{8F55}\\x{8F56}\\x{8F57}\\x{8F58}\\x{8F59}' .\n          '\\x{8F5A}\\x{8F5B}\\x{8F5D}\\x{8F5E}\\x{8F5F}\\x{8F60}\\x{8F61}\\x{8F62}\\x{8F63}' .\n          '\\x{8F64}\\x{8F65}\\x{8F66}\\x{8F67}\\x{8F68}\\x{8F69}\\x{8F6A}\\x{8F6B}\\x{8F6C}' .\n          '\\x{8F6D}\\x{8F6E}\\x{8F6F}\\x{8F70}\\x{8F71}\\x{8F72}\\x{8F73}\\x{8F74}\\x{8F75}' .\n          '\\x{8F76}\\x{8F77}\\x{8F78}\\x{8F79}\\x{8F7A}\\x{8F7B}\\x{8F7C}\\x{8F7D}\\x{8F7E}' .\n          '\\x{8F7F}\\x{8F80}\\x{8F81}\\x{8F82}\\x{8F83}\\x{8F84}\\x{8F85}\\x{8F86}\\x{8F87}' .\n          '\\x{8F88}\\x{8F89}\\x{8F8A}\\x{8F8B}\\x{8F8C}\\x{8F8D}\\x{8F8E}\\x{8F8F}\\x{8F90}' .\n          '\\x{8F91}\\x{8F92}\\x{8F93}\\x{8F94}\\x{8F95}\\x{8F96}\\x{8F97}\\x{8F98}\\x{8F99}' .\n          '\\x{8F9A}\\x{8F9B}\\x{8F9C}\\x{8F9E}\\x{8F9F}\\x{8FA0}\\x{8FA1}\\x{8FA2}\\x{8FA3}' .\n          '\\x{8FA5}\\x{8FA6}\\x{8FA7}\\x{8FA8}\\x{8FA9}\\x{8FAA}\\x{8FAB}\\x{8FAC}\\x{8FAD}' .\n          '\\x{8FAE}\\x{8FAF}\\x{8FB0}\\x{8FB1}\\x{8FB2}\\x{8FB4}\\x{8FB5}\\x{8FB6}\\x{8FB7}' .\n          '\\x{8FB8}\\x{8FB9}\\x{8FBB}\\x{8FBC}\\x{8FBD}\\x{8FBE}\\x{8FBF}\\x{8FC0}\\x{8FC1}' .\n          '\\x{8FC2}\\x{8FC4}\\x{8FC5}\\x{8FC6}\\x{8FC7}\\x{8FC8}\\x{8FC9}\\x{8FCB}\\x{8FCC}' .\n          '\\x{8FCD}\\x{8FCE}\\x{8FCF}\\x{8FD0}\\x{8FD1}\\x{8FD2}\\x{8FD3}\\x{8FD4}\\x{8FD5}' .\n          '\\x{8FD6}\\x{8FD7}\\x{8FD8}\\x{8FD9}\\x{8FDA}\\x{8FDB}\\x{8FDC}\\x{8FDD}\\x{8FDE}' .\n          '\\x{8FDF}\\x{8FE0}\\x{8FE1}\\x{8FE2}\\x{8FE3}\\x{8FE4}\\x{8FE5}\\x{8FE6}\\x{8FE8}' .\n          '\\x{8FE9}\\x{8FEA}\\x{8FEB}\\x{8FEC}\\x{8FED}\\x{8FEE}\\x{8FEF}\\x{8FF0}\\x{8FF1}' .\n          '\\x{8FF2}\\x{8FF3}\\x{8FF4}\\x{8FF5}\\x{8FF6}\\x{8FF7}\\x{8FF8}\\x{8FF9}\\x{8FFA}' .\n          '\\x{8FFB}\\x{8FFC}\\x{8FFD}\\x{8FFE}\\x{8FFF}\\x{9000}\\x{9001}\\x{9002}\\x{9003}' .\n          '\\x{9004}\\x{9005}\\x{9006}\\x{9007}\\x{9008}\\x{9009}\\x{900A}\\x{900B}\\x{900C}' .\n          '\\x{900D}\\x{900F}\\x{9010}\\x{9011}\\x{9012}\\x{9013}\\x{9014}\\x{9015}\\x{9016}' .\n          '\\x{9017}\\x{9018}\\x{9019}\\x{901A}\\x{901B}\\x{901C}\\x{901D}\\x{901E}\\x{901F}' .\n          '\\x{9020}\\x{9021}\\x{9022}\\x{9023}\\x{9024}\\x{9025}\\x{9026}\\x{9027}\\x{9028}' .\n          '\\x{9029}\\x{902B}\\x{902D}\\x{902E}\\x{902F}\\x{9030}\\x{9031}\\x{9032}\\x{9033}' .\n          '\\x{9034}\\x{9035}\\x{9036}\\x{9038}\\x{903A}\\x{903B}\\x{903C}\\x{903D}\\x{903E}' .\n          '\\x{903F}\\x{9041}\\x{9042}\\x{9043}\\x{9044}\\x{9045}\\x{9047}\\x{9048}\\x{9049}' .\n          '\\x{904A}\\x{904B}\\x{904C}\\x{904D}\\x{904E}\\x{904F}\\x{9050}\\x{9051}\\x{9052}' .\n          '\\x{9053}\\x{9054}\\x{9055}\\x{9056}\\x{9057}\\x{9058}\\x{9059}\\x{905A}\\x{905B}' .\n          '\\x{905C}\\x{905D}\\x{905E}\\x{905F}\\x{9060}\\x{9061}\\x{9062}\\x{9063}\\x{9064}' .\n          '\\x{9065}\\x{9066}\\x{9067}\\x{9068}\\x{9069}\\x{906A}\\x{906B}\\x{906C}\\x{906D}' .\n          '\\x{906E}\\x{906F}\\x{9070}\\x{9071}\\x{9072}\\x{9073}\\x{9074}\\x{9075}\\x{9076}' .\n          '\\x{9077}\\x{9078}\\x{9079}\\x{907A}\\x{907B}\\x{907C}\\x{907D}\\x{907E}\\x{907F}' .\n          '\\x{9080}\\x{9081}\\x{9082}\\x{9083}\\x{9084}\\x{9085}\\x{9086}\\x{9087}\\x{9088}' .\n          '\\x{9089}\\x{908A}\\x{908B}\\x{908C}\\x{908D}\\x{908E}\\x{908F}\\x{9090}\\x{9091}' .\n          '\\x{9092}\\x{9093}\\x{9094}\\x{9095}\\x{9096}\\x{9097}\\x{9098}\\x{9099}\\x{909A}' .\n          '\\x{909B}\\x{909C}\\x{909D}\\x{909E}\\x{909F}\\x{90A0}\\x{90A1}\\x{90A2}\\x{90A3}' .\n          '\\x{90A4}\\x{90A5}\\x{90A6}\\x{90A7}\\x{90A8}\\x{90A9}\\x{90AA}\\x{90AC}\\x{90AD}' .\n          '\\x{90AE}\\x{90AF}\\x{90B0}\\x{90B1}\\x{90B2}\\x{90B3}\\x{90B4}\\x{90B5}\\x{90B6}' .\n          '\\x{90B7}\\x{90B8}\\x{90B9}\\x{90BA}\\x{90BB}\\x{90BC}\\x{90BD}\\x{90BE}\\x{90BF}' .\n          '\\x{90C0}\\x{90C1}\\x{90C2}\\x{90C3}\\x{90C4}\\x{90C5}\\x{90C6}\\x{90C7}\\x{90C8}' .\n          '\\x{90C9}\\x{90CA}\\x{90CB}\\x{90CE}\\x{90CF}\\x{90D0}\\x{90D1}\\x{90D3}\\x{90D4}' .\n          '\\x{90D5}\\x{90D6}\\x{90D7}\\x{90D8}\\x{90D9}\\x{90DA}\\x{90DB}\\x{90DC}\\x{90DD}' .\n          '\\x{90DE}\\x{90DF}\\x{90E0}\\x{90E1}\\x{90E2}\\x{90E3}\\x{90E4}\\x{90E5}\\x{90E6}' .\n          '\\x{90E7}\\x{90E8}\\x{90E9}\\x{90EA}\\x{90EB}\\x{90EC}\\x{90ED}\\x{90EE}\\x{90EF}' .\n          '\\x{90F0}\\x{90F1}\\x{90F2}\\x{90F3}\\x{90F4}\\x{90F5}\\x{90F7}\\x{90F8}\\x{90F9}' .\n          '\\x{90FA}\\x{90FB}\\x{90FC}\\x{90FD}\\x{90FE}\\x{90FF}\\x{9100}\\x{9101}\\x{9102}' .\n          '\\x{9103}\\x{9104}\\x{9105}\\x{9106}\\x{9107}\\x{9108}\\x{9109}\\x{910B}\\x{910C}' .\n          '\\x{910D}\\x{910E}\\x{910F}\\x{9110}\\x{9111}\\x{9112}\\x{9113}\\x{9114}\\x{9115}' .\n          '\\x{9116}\\x{9117}\\x{9118}\\x{9119}\\x{911A}\\x{911B}\\x{911C}\\x{911D}\\x{911E}' .\n          '\\x{911F}\\x{9120}\\x{9121}\\x{9122}\\x{9123}\\x{9124}\\x{9125}\\x{9126}\\x{9127}' .\n          '\\x{9128}\\x{9129}\\x{912A}\\x{912B}\\x{912C}\\x{912D}\\x{912E}\\x{912F}\\x{9130}' .\n          '\\x{9131}\\x{9132}\\x{9133}\\x{9134}\\x{9135}\\x{9136}\\x{9137}\\x{9138}\\x{9139}' .\n          '\\x{913A}\\x{913B}\\x{913E}\\x{913F}\\x{9140}\\x{9141}\\x{9142}\\x{9143}\\x{9144}' .\n          '\\x{9145}\\x{9146}\\x{9147}\\x{9148}\\x{9149}\\x{914A}\\x{914B}\\x{914C}\\x{914D}' .\n          '\\x{914E}\\x{914F}\\x{9150}\\x{9151}\\x{9152}\\x{9153}\\x{9154}\\x{9155}\\x{9156}' .\n          '\\x{9157}\\x{9158}\\x{915A}\\x{915B}\\x{915C}\\x{915D}\\x{915E}\\x{915F}\\x{9160}' .\n          '\\x{9161}\\x{9162}\\x{9163}\\x{9164}\\x{9165}\\x{9166}\\x{9167}\\x{9168}\\x{9169}' .\n          '\\x{916A}\\x{916B}\\x{916C}\\x{916D}\\x{916E}\\x{916F}\\x{9170}\\x{9171}\\x{9172}' .\n          '\\x{9173}\\x{9174}\\x{9175}\\x{9176}\\x{9177}\\x{9178}\\x{9179}\\x{917A}\\x{917C}' .\n          '\\x{917D}\\x{917E}\\x{917F}\\x{9180}\\x{9181}\\x{9182}\\x{9183}\\x{9184}\\x{9185}' .\n          '\\x{9186}\\x{9187}\\x{9188}\\x{9189}\\x{918A}\\x{918B}\\x{918C}\\x{918D}\\x{918E}' .\n          '\\x{918F}\\x{9190}\\x{9191}\\x{9192}\\x{9193}\\x{9194}\\x{9196}\\x{9199}\\x{919A}' .\n          '\\x{919B}\\x{919C}\\x{919D}\\x{919E}\\x{919F}\\x{91A0}\\x{91A1}\\x{91A2}\\x{91A3}' .\n          '\\x{91A5}\\x{91A6}\\x{91A7}\\x{91A8}\\x{91AA}\\x{91AB}\\x{91AC}\\x{91AD}\\x{91AE}' .\n          '\\x{91AF}\\x{91B0}\\x{91B1}\\x{91B2}\\x{91B3}\\x{91B4}\\x{91B5}\\x{91B6}\\x{91B7}' .\n          '\\x{91B9}\\x{91BA}\\x{91BB}\\x{91BC}\\x{91BD}\\x{91BE}\\x{91C0}\\x{91C1}\\x{91C2}' .\n          '\\x{91C3}\\x{91C5}\\x{91C6}\\x{91C7}\\x{91C9}\\x{91CA}\\x{91CB}\\x{91CC}\\x{91CD}' .\n          '\\x{91CE}\\x{91CF}\\x{91D0}\\x{91D1}\\x{91D2}\\x{91D3}\\x{91D4}\\x{91D5}\\x{91D7}' .\n          '\\x{91D8}\\x{91D9}\\x{91DA}\\x{91DB}\\x{91DC}\\x{91DD}\\x{91DE}\\x{91DF}\\x{91E2}' .\n          '\\x{91E3}\\x{91E4}\\x{91E5}\\x{91E6}\\x{91E7}\\x{91E8}\\x{91E9}\\x{91EA}\\x{91EB}' .\n          '\\x{91EC}\\x{91ED}\\x{91EE}\\x{91F0}\\x{91F1}\\x{91F2}\\x{91F3}\\x{91F4}\\x{91F5}' .\n          '\\x{91F7}\\x{91F8}\\x{91F9}\\x{91FA}\\x{91FB}\\x{91FD}\\x{91FE}\\x{91FF}\\x{9200}' .\n          '\\x{9201}\\x{9202}\\x{9203}\\x{9204}\\x{9205}\\x{9206}\\x{9207}\\x{9208}\\x{9209}' .\n          '\\x{920A}\\x{920B}\\x{920C}\\x{920D}\\x{920E}\\x{920F}\\x{9210}\\x{9211}\\x{9212}' .\n          '\\x{9214}\\x{9215}\\x{9216}\\x{9217}\\x{9218}\\x{9219}\\x{921A}\\x{921B}\\x{921C}' .\n          '\\x{921D}\\x{921E}\\x{9220}\\x{9221}\\x{9223}\\x{9224}\\x{9225}\\x{9226}\\x{9227}' .\n          '\\x{9228}\\x{9229}\\x{922A}\\x{922B}\\x{922D}\\x{922E}\\x{922F}\\x{9230}\\x{9231}' .\n          '\\x{9232}\\x{9233}\\x{9234}\\x{9235}\\x{9236}\\x{9237}\\x{9238}\\x{9239}\\x{923A}' .\n          '\\x{923B}\\x{923C}\\x{923D}\\x{923E}\\x{923F}\\x{9240}\\x{9241}\\x{9242}\\x{9245}' .\n          '\\x{9246}\\x{9247}\\x{9248}\\x{9249}\\x{924A}\\x{924B}\\x{924C}\\x{924D}\\x{924E}' .\n          '\\x{924F}\\x{9250}\\x{9251}\\x{9252}\\x{9253}\\x{9254}\\x{9255}\\x{9256}\\x{9257}' .\n          '\\x{9258}\\x{9259}\\x{925A}\\x{925B}\\x{925C}\\x{925D}\\x{925E}\\x{925F}\\x{9260}' .\n          '\\x{9261}\\x{9262}\\x{9263}\\x{9264}\\x{9265}\\x{9266}\\x{9267}\\x{9268}\\x{926B}' .\n          '\\x{926C}\\x{926D}\\x{926E}\\x{926F}\\x{9270}\\x{9272}\\x{9273}\\x{9274}\\x{9275}' .\n          '\\x{9276}\\x{9277}\\x{9278}\\x{9279}\\x{927A}\\x{927B}\\x{927C}\\x{927D}\\x{927E}' .\n          '\\x{927F}\\x{9280}\\x{9282}\\x{9283}\\x{9285}\\x{9286}\\x{9287}\\x{9288}\\x{9289}' .\n          '\\x{928A}\\x{928B}\\x{928C}\\x{928D}\\x{928E}\\x{928F}\\x{9290}\\x{9291}\\x{9292}' .\n          '\\x{9293}\\x{9294}\\x{9295}\\x{9296}\\x{9297}\\x{9298}\\x{9299}\\x{929A}\\x{929B}' .\n          '\\x{929C}\\x{929D}\\x{929F}\\x{92A0}\\x{92A1}\\x{92A2}\\x{92A3}\\x{92A4}\\x{92A5}' .\n          '\\x{92A6}\\x{92A7}\\x{92A8}\\x{92A9}\\x{92AA}\\x{92AB}\\x{92AC}\\x{92AD}\\x{92AE}' .\n          '\\x{92AF}\\x{92B0}\\x{92B1}\\x{92B2}\\x{92B3}\\x{92B4}\\x{92B5}\\x{92B6}\\x{92B7}' .\n          '\\x{92B8}\\x{92B9}\\x{92BA}\\x{92BB}\\x{92BC}\\x{92BE}\\x{92BF}\\x{92C0}\\x{92C1}' .\n          '\\x{92C2}\\x{92C3}\\x{92C4}\\x{92C5}\\x{92C6}\\x{92C7}\\x{92C8}\\x{92C9}\\x{92CA}' .\n          '\\x{92CB}\\x{92CC}\\x{92CD}\\x{92CE}\\x{92CF}\\x{92D0}\\x{92D1}\\x{92D2}\\x{92D3}' .\n          '\\x{92D5}\\x{92D6}\\x{92D7}\\x{92D8}\\x{92D9}\\x{92DA}\\x{92DC}\\x{92DD}\\x{92DE}' .\n          '\\x{92DF}\\x{92E0}\\x{92E1}\\x{92E3}\\x{92E4}\\x{92E5}\\x{92E6}\\x{92E7}\\x{92E8}' .\n          '\\x{92E9}\\x{92EA}\\x{92EB}\\x{92EC}\\x{92ED}\\x{92EE}\\x{92EF}\\x{92F0}\\x{92F1}' .\n          '\\x{92F2}\\x{92F3}\\x{92F4}\\x{92F5}\\x{92F6}\\x{92F7}\\x{92F8}\\x{92F9}\\x{92FA}' .\n          '\\x{92FB}\\x{92FC}\\x{92FD}\\x{92FE}\\x{92FF}\\x{9300}\\x{9301}\\x{9302}\\x{9303}' .\n          '\\x{9304}\\x{9305}\\x{9306}\\x{9307}\\x{9308}\\x{9309}\\x{930A}\\x{930B}\\x{930C}' .\n          '\\x{930D}\\x{930E}\\x{930F}\\x{9310}\\x{9311}\\x{9312}\\x{9313}\\x{9314}\\x{9315}' .\n          '\\x{9316}\\x{9317}\\x{9318}\\x{9319}\\x{931A}\\x{931B}\\x{931D}\\x{931E}\\x{931F}' .\n          '\\x{9320}\\x{9321}\\x{9322}\\x{9323}\\x{9324}\\x{9325}\\x{9326}\\x{9327}\\x{9328}' .\n          '\\x{9329}\\x{932A}\\x{932B}\\x{932D}\\x{932E}\\x{932F}\\x{9332}\\x{9333}\\x{9334}' .\n          '\\x{9335}\\x{9336}\\x{9337}\\x{9338}\\x{9339}\\x{933A}\\x{933B}\\x{933C}\\x{933D}' .\n          '\\x{933E}\\x{933F}\\x{9340}\\x{9341}\\x{9342}\\x{9343}\\x{9344}\\x{9345}\\x{9346}' .\n          '\\x{9347}\\x{9348}\\x{9349}\\x{934A}\\x{934B}\\x{934C}\\x{934D}\\x{934E}\\x{934F}' .\n          '\\x{9350}\\x{9351}\\x{9352}\\x{9353}\\x{9354}\\x{9355}\\x{9356}\\x{9357}\\x{9358}' .\n          '\\x{9359}\\x{935A}\\x{935B}\\x{935C}\\x{935D}\\x{935E}\\x{935F}\\x{9360}\\x{9361}' .\n          '\\x{9363}\\x{9364}\\x{9365}\\x{9366}\\x{9367}\\x{9369}\\x{936A}\\x{936C}\\x{936D}' .\n          '\\x{936E}\\x{9370}\\x{9371}\\x{9372}\\x{9374}\\x{9375}\\x{9376}\\x{9377}\\x{9379}' .\n          '\\x{937A}\\x{937B}\\x{937C}\\x{937D}\\x{937E}\\x{9380}\\x{9382}\\x{9383}\\x{9384}' .\n          '\\x{9385}\\x{9386}\\x{9387}\\x{9388}\\x{9389}\\x{938A}\\x{938C}\\x{938D}\\x{938E}' .\n          '\\x{938F}\\x{9390}\\x{9391}\\x{9392}\\x{9393}\\x{9394}\\x{9395}\\x{9396}\\x{9397}' .\n          '\\x{9398}\\x{9399}\\x{939A}\\x{939B}\\x{939D}\\x{939E}\\x{939F}\\x{93A1}\\x{93A2}' .\n          '\\x{93A3}\\x{93A4}\\x{93A5}\\x{93A6}\\x{93A7}\\x{93A8}\\x{93A9}\\x{93AA}\\x{93AC}' .\n          '\\x{93AD}\\x{93AE}\\x{93AF}\\x{93B0}\\x{93B1}\\x{93B2}\\x{93B3}\\x{93B4}\\x{93B5}' .\n          '\\x{93B6}\\x{93B7}\\x{93B8}\\x{93B9}\\x{93BA}\\x{93BC}\\x{93BD}\\x{93BE}\\x{93BF}' .\n          '\\x{93C0}\\x{93C1}\\x{93C2}\\x{93C3}\\x{93C4}\\x{93C5}\\x{93C6}\\x{93C7}\\x{93C8}' .\n          '\\x{93C9}\\x{93CA}\\x{93CB}\\x{93CC}\\x{93CD}\\x{93CE}\\x{93CF}\\x{93D0}\\x{93D1}' .\n          '\\x{93D2}\\x{93D3}\\x{93D4}\\x{93D5}\\x{93D6}\\x{93D7}\\x{93D8}\\x{93D9}\\x{93DA}' .\n          '\\x{93DB}\\x{93DC}\\x{93DD}\\x{93DE}\\x{93DF}\\x{93E1}\\x{93E2}\\x{93E3}\\x{93E4}' .\n          '\\x{93E6}\\x{93E7}\\x{93E8}\\x{93E9}\\x{93EA}\\x{93EB}\\x{93EC}\\x{93ED}\\x{93EE}' .\n          '\\x{93EF}\\x{93F0}\\x{93F1}\\x{93F2}\\x{93F4}\\x{93F5}\\x{93F6}\\x{93F7}\\x{93F8}' .\n          '\\x{93F9}\\x{93FA}\\x{93FB}\\x{93FC}\\x{93FD}\\x{93FE}\\x{93FF}\\x{9400}\\x{9401}' .\n          '\\x{9403}\\x{9404}\\x{9405}\\x{9406}\\x{9407}\\x{9408}\\x{9409}\\x{940A}\\x{940B}' .\n          '\\x{940C}\\x{940D}\\x{940E}\\x{940F}\\x{9410}\\x{9411}\\x{9412}\\x{9413}\\x{9414}' .\n          '\\x{9415}\\x{9416}\\x{9418}\\x{9419}\\x{941B}\\x{941D}\\x{9420}\\x{9422}\\x{9423}' .\n          '\\x{9425}\\x{9426}\\x{9427}\\x{9428}\\x{9429}\\x{942A}\\x{942B}\\x{942C}\\x{942D}' .\n          '\\x{942E}\\x{942F}\\x{9430}\\x{9431}\\x{9432}\\x{9433}\\x{9434}\\x{9435}\\x{9436}' .\n          '\\x{9437}\\x{9438}\\x{9439}\\x{943A}\\x{943B}\\x{943C}\\x{943D}\\x{943E}\\x{943F}' .\n          '\\x{9440}\\x{9441}\\x{9442}\\x{9444}\\x{9445}\\x{9446}\\x{9447}\\x{9448}\\x{9449}' .\n          '\\x{944A}\\x{944B}\\x{944C}\\x{944D}\\x{944F}\\x{9450}\\x{9451}\\x{9452}\\x{9453}' .\n          '\\x{9454}\\x{9455}\\x{9456}\\x{9457}\\x{9458}\\x{9459}\\x{945B}\\x{945C}\\x{945D}' .\n          '\\x{945E}\\x{945F}\\x{9460}\\x{9461}\\x{9462}\\x{9463}\\x{9464}\\x{9465}\\x{9466}' .\n          '\\x{9467}\\x{9468}\\x{9469}\\x{946A}\\x{946B}\\x{946D}\\x{946E}\\x{946F}\\x{9470}' .\n          '\\x{9471}\\x{9472}\\x{9473}\\x{9474}\\x{9475}\\x{9476}\\x{9477}\\x{9478}\\x{9479}' .\n          '\\x{947A}\\x{947C}\\x{947D}\\x{947E}\\x{947F}\\x{9480}\\x{9481}\\x{9482}\\x{9483}' .\n          '\\x{9484}\\x{9485}\\x{9486}\\x{9487}\\x{9488}\\x{9489}\\x{948A}\\x{948B}\\x{948C}' .\n          '\\x{948D}\\x{948E}\\x{948F}\\x{9490}\\x{9491}\\x{9492}\\x{9493}\\x{9494}\\x{9495}' .\n          '\\x{9496}\\x{9497}\\x{9498}\\x{9499}\\x{949A}\\x{949B}\\x{949C}\\x{949D}\\x{949E}' .\n          '\\x{949F}\\x{94A0}\\x{94A1}\\x{94A2}\\x{94A3}\\x{94A4}\\x{94A5}\\x{94A6}\\x{94A7}' .\n          '\\x{94A8}\\x{94A9}\\x{94AA}\\x{94AB}\\x{94AC}\\x{94AD}\\x{94AE}\\x{94AF}\\x{94B0}' .\n          '\\x{94B1}\\x{94B2}\\x{94B3}\\x{94B4}\\x{94B5}\\x{94B6}\\x{94B7}\\x{94B8}\\x{94B9}' .\n          '\\x{94BA}\\x{94BB}\\x{94BC}\\x{94BD}\\x{94BE}\\x{94BF}\\x{94C0}\\x{94C1}\\x{94C2}' .\n          '\\x{94C3}\\x{94C4}\\x{94C5}\\x{94C6}\\x{94C7}\\x{94C8}\\x{94C9}\\x{94CA}\\x{94CB}' .\n          '\\x{94CC}\\x{94CD}\\x{94CE}\\x{94CF}\\x{94D0}\\x{94D1}\\x{94D2}\\x{94D3}\\x{94D4}' .\n          '\\x{94D5}\\x{94D6}\\x{94D7}\\x{94D8}\\x{94D9}\\x{94DA}\\x{94DB}\\x{94DC}\\x{94DD}' .\n          '\\x{94DE}\\x{94DF}\\x{94E0}\\x{94E1}\\x{94E2}\\x{94E3}\\x{94E4}\\x{94E5}\\x{94E6}' .\n          '\\x{94E7}\\x{94E8}\\x{94E9}\\x{94EA}\\x{94EB}\\x{94EC}\\x{94ED}\\x{94EE}\\x{94EF}' .\n          '\\x{94F0}\\x{94F1}\\x{94F2}\\x{94F3}\\x{94F4}\\x{94F5}\\x{94F6}\\x{94F7}\\x{94F8}' .\n          '\\x{94F9}\\x{94FA}\\x{94FB}\\x{94FC}\\x{94FD}\\x{94FE}\\x{94FF}\\x{9500}\\x{9501}' .\n          '\\x{9502}\\x{9503}\\x{9504}\\x{9505}\\x{9506}\\x{9507}\\x{9508}\\x{9509}\\x{950A}' .\n          '\\x{950B}\\x{950C}\\x{950D}\\x{950E}\\x{950F}\\x{9510}\\x{9511}\\x{9512}\\x{9513}' .\n          '\\x{9514}\\x{9515}\\x{9516}\\x{9517}\\x{9518}\\x{9519}\\x{951A}\\x{951B}\\x{951C}' .\n          '\\x{951D}\\x{951E}\\x{951F}\\x{9520}\\x{9521}\\x{9522}\\x{9523}\\x{9524}\\x{9525}' .\n          '\\x{9526}\\x{9527}\\x{9528}\\x{9529}\\x{952A}\\x{952B}\\x{952C}\\x{952D}\\x{952E}' .\n          '\\x{952F}\\x{9530}\\x{9531}\\x{9532}\\x{9533}\\x{9534}\\x{9535}\\x{9536}\\x{9537}' .\n          '\\x{9538}\\x{9539}\\x{953A}\\x{953B}\\x{953C}\\x{953D}\\x{953E}\\x{953F}\\x{9540}' .\n          '\\x{9541}\\x{9542}\\x{9543}\\x{9544}\\x{9545}\\x{9546}\\x{9547}\\x{9548}\\x{9549}' .\n          '\\x{954A}\\x{954B}\\x{954C}\\x{954D}\\x{954E}\\x{954F}\\x{9550}\\x{9551}\\x{9552}' .\n          '\\x{9553}\\x{9554}\\x{9555}\\x{9556}\\x{9557}\\x{9558}\\x{9559}\\x{955A}\\x{955B}' .\n          '\\x{955C}\\x{955D}\\x{955E}\\x{955F}\\x{9560}\\x{9561}\\x{9562}\\x{9563}\\x{9564}' .\n          '\\x{9565}\\x{9566}\\x{9567}\\x{9568}\\x{9569}\\x{956A}\\x{956B}\\x{956C}\\x{956D}' .\n          '\\x{956E}\\x{956F}\\x{9570}\\x{9571}\\x{9572}\\x{9573}\\x{9574}\\x{9575}\\x{9576}' .\n          '\\x{9577}\\x{957A}\\x{957B}\\x{957C}\\x{957D}\\x{957F}\\x{9580}\\x{9581}\\x{9582}' .\n          '\\x{9583}\\x{9584}\\x{9586}\\x{9587}\\x{9588}\\x{9589}\\x{958A}\\x{958B}\\x{958C}' .\n          '\\x{958D}\\x{958E}\\x{958F}\\x{9590}\\x{9591}\\x{9592}\\x{9593}\\x{9594}\\x{9595}' .\n          '\\x{9596}\\x{9598}\\x{9599}\\x{959A}\\x{959B}\\x{959C}\\x{959D}\\x{959E}\\x{959F}' .\n          '\\x{95A1}\\x{95A2}\\x{95A3}\\x{95A4}\\x{95A5}\\x{95A6}\\x{95A7}\\x{95A8}\\x{95A9}' .\n          '\\x{95AA}\\x{95AB}\\x{95AC}\\x{95AD}\\x{95AE}\\x{95AF}\\x{95B0}\\x{95B1}\\x{95B2}' .\n          '\\x{95B5}\\x{95B6}\\x{95B7}\\x{95B9}\\x{95BA}\\x{95BB}\\x{95BC}\\x{95BD}\\x{95BE}' .\n          '\\x{95BF}\\x{95C0}\\x{95C2}\\x{95C3}\\x{95C4}\\x{95C5}\\x{95C6}\\x{95C7}\\x{95C8}' .\n          '\\x{95C9}\\x{95CA}\\x{95CB}\\x{95CC}\\x{95CD}\\x{95CE}\\x{95CF}\\x{95D0}\\x{95D1}' .\n          '\\x{95D2}\\x{95D3}\\x{95D4}\\x{95D5}\\x{95D6}\\x{95D7}\\x{95D8}\\x{95DA}\\x{95DB}' .\n          '\\x{95DC}\\x{95DE}\\x{95DF}\\x{95E0}\\x{95E1}\\x{95E2}\\x{95E3}\\x{95E4}\\x{95E5}' .\n          '\\x{95E6}\\x{95E7}\\x{95E8}\\x{95E9}\\x{95EA}\\x{95EB}\\x{95EC}\\x{95ED}\\x{95EE}' .\n          '\\x{95EF}\\x{95F0}\\x{95F1}\\x{95F2}\\x{95F3}\\x{95F4}\\x{95F5}\\x{95F6}\\x{95F7}' .\n          '\\x{95F8}\\x{95F9}\\x{95FA}\\x{95FB}\\x{95FC}\\x{95FD}\\x{95FE}\\x{95FF}\\x{9600}' .\n          '\\x{9601}\\x{9602}\\x{9603}\\x{9604}\\x{9605}\\x{9606}\\x{9607}\\x{9608}\\x{9609}' .\n          '\\x{960A}\\x{960B}\\x{960C}\\x{960D}\\x{960E}\\x{960F}\\x{9610}\\x{9611}\\x{9612}' .\n          '\\x{9613}\\x{9614}\\x{9615}\\x{9616}\\x{9617}\\x{9618}\\x{9619}\\x{961A}\\x{961B}' .\n          '\\x{961C}\\x{961D}\\x{961E}\\x{961F}\\x{9620}\\x{9621}\\x{9622}\\x{9623}\\x{9624}' .\n          '\\x{9627}\\x{9628}\\x{962A}\\x{962B}\\x{962C}\\x{962D}\\x{962E}\\x{962F}\\x{9630}' .\n          '\\x{9631}\\x{9632}\\x{9633}\\x{9634}\\x{9635}\\x{9636}\\x{9637}\\x{9638}\\x{9639}' .\n          '\\x{963A}\\x{963B}\\x{963C}\\x{963D}\\x{963F}\\x{9640}\\x{9641}\\x{9642}\\x{9643}' .\n          '\\x{9644}\\x{9645}\\x{9646}\\x{9647}\\x{9648}\\x{9649}\\x{964A}\\x{964B}\\x{964C}' .\n          '\\x{964D}\\x{964E}\\x{964F}\\x{9650}\\x{9651}\\x{9652}\\x{9653}\\x{9654}\\x{9655}' .\n          '\\x{9658}\\x{9659}\\x{965A}\\x{965B}\\x{965C}\\x{965D}\\x{965E}\\x{965F}\\x{9660}' .\n          '\\x{9661}\\x{9662}\\x{9663}\\x{9664}\\x{9666}\\x{9667}\\x{9668}\\x{9669}\\x{966A}' .\n          '\\x{966B}\\x{966C}\\x{966D}\\x{966E}\\x{966F}\\x{9670}\\x{9671}\\x{9672}\\x{9673}' .\n          '\\x{9674}\\x{9675}\\x{9676}\\x{9677}\\x{9678}\\x{967C}\\x{967D}\\x{967E}\\x{9680}' .\n          '\\x{9683}\\x{9684}\\x{9685}\\x{9686}\\x{9687}\\x{9688}\\x{9689}\\x{968A}\\x{968B}' .\n          '\\x{968D}\\x{968E}\\x{968F}\\x{9690}\\x{9691}\\x{9692}\\x{9693}\\x{9694}\\x{9695}' .\n          '\\x{9697}\\x{9698}\\x{9699}\\x{969B}\\x{969C}\\x{969E}\\x{96A0}\\x{96A1}\\x{96A2}' .\n          '\\x{96A3}\\x{96A4}\\x{96A5}\\x{96A6}\\x{96A7}\\x{96A8}\\x{96A9}\\x{96AA}\\x{96AC}' .\n          '\\x{96AD}\\x{96AE}\\x{96B0}\\x{96B1}\\x{96B3}\\x{96B4}\\x{96B6}\\x{96B7}\\x{96B8}' .\n          '\\x{96B9}\\x{96BA}\\x{96BB}\\x{96BC}\\x{96BD}\\x{96BE}\\x{96BF}\\x{96C0}\\x{96C1}' .\n          '\\x{96C2}\\x{96C3}\\x{96C4}\\x{96C5}\\x{96C6}\\x{96C7}\\x{96C8}\\x{96C9}\\x{96CA}' .\n          '\\x{96CB}\\x{96CC}\\x{96CD}\\x{96CE}\\x{96CF}\\x{96D0}\\x{96D1}\\x{96D2}\\x{96D3}' .\n          '\\x{96D4}\\x{96D5}\\x{96D6}\\x{96D7}\\x{96D8}\\x{96D9}\\x{96DA}\\x{96DB}\\x{96DC}' .\n          '\\x{96DD}\\x{96DE}\\x{96DF}\\x{96E0}\\x{96E1}\\x{96E2}\\x{96E3}\\x{96E5}\\x{96E8}' .\n          '\\x{96E9}\\x{96EA}\\x{96EB}\\x{96EC}\\x{96ED}\\x{96EE}\\x{96EF}\\x{96F0}\\x{96F1}' .\n          '\\x{96F2}\\x{96F3}\\x{96F4}\\x{96F5}\\x{96F6}\\x{96F7}\\x{96F8}\\x{96F9}\\x{96FA}' .\n          '\\x{96FB}\\x{96FD}\\x{96FE}\\x{96FF}\\x{9700}\\x{9701}\\x{9702}\\x{9703}\\x{9704}' .\n          '\\x{9705}\\x{9706}\\x{9707}\\x{9708}\\x{9709}\\x{970A}\\x{970B}\\x{970C}\\x{970D}' .\n          '\\x{970E}\\x{970F}\\x{9710}\\x{9711}\\x{9712}\\x{9713}\\x{9715}\\x{9716}\\x{9718}' .\n          '\\x{9719}\\x{971C}\\x{971D}\\x{971E}\\x{971F}\\x{9720}\\x{9721}\\x{9722}\\x{9723}' .\n          '\\x{9724}\\x{9725}\\x{9726}\\x{9727}\\x{9728}\\x{9729}\\x{972A}\\x{972B}\\x{972C}' .\n          '\\x{972D}\\x{972E}\\x{972F}\\x{9730}\\x{9731}\\x{9732}\\x{9735}\\x{9736}\\x{9738}' .\n          '\\x{9739}\\x{973A}\\x{973B}\\x{973C}\\x{973D}\\x{973E}\\x{973F}\\x{9742}\\x{9743}' .\n          '\\x{9744}\\x{9745}\\x{9746}\\x{9747}\\x{9748}\\x{9749}\\x{974A}\\x{974B}\\x{974C}' .\n          '\\x{974E}\\x{974F}\\x{9750}\\x{9751}\\x{9752}\\x{9753}\\x{9754}\\x{9755}\\x{9756}' .\n          '\\x{9758}\\x{9759}\\x{975A}\\x{975B}\\x{975C}\\x{975D}\\x{975E}\\x{975F}\\x{9760}' .\n          '\\x{9761}\\x{9762}\\x{9765}\\x{9766}\\x{9767}\\x{9768}\\x{9769}\\x{976A}\\x{976B}' .\n          '\\x{976C}\\x{976D}\\x{976E}\\x{976F}\\x{9770}\\x{9772}\\x{9773}\\x{9774}\\x{9776}' .\n          '\\x{9777}\\x{9778}\\x{9779}\\x{977A}\\x{977B}\\x{977C}\\x{977D}\\x{977E}\\x{977F}' .\n          '\\x{9780}\\x{9781}\\x{9782}\\x{9783}\\x{9784}\\x{9785}\\x{9786}\\x{9788}\\x{978A}' .\n          '\\x{978B}\\x{978C}\\x{978D}\\x{978E}\\x{978F}\\x{9790}\\x{9791}\\x{9792}\\x{9793}' .\n          '\\x{9794}\\x{9795}\\x{9796}\\x{9797}\\x{9798}\\x{9799}\\x{979A}\\x{979C}\\x{979D}' .\n          '\\x{979E}\\x{979F}\\x{97A0}\\x{97A1}\\x{97A2}\\x{97A3}\\x{97A4}\\x{97A5}\\x{97A6}' .\n          '\\x{97A7}\\x{97A8}\\x{97AA}\\x{97AB}\\x{97AC}\\x{97AD}\\x{97AE}\\x{97AF}\\x{97B2}' .\n          '\\x{97B3}\\x{97B4}\\x{97B6}\\x{97B7}\\x{97B8}\\x{97B9}\\x{97BA}\\x{97BB}\\x{97BC}' .\n          '\\x{97BD}\\x{97BF}\\x{97C1}\\x{97C2}\\x{97C3}\\x{97C4}\\x{97C5}\\x{97C6}\\x{97C7}' .\n          '\\x{97C8}\\x{97C9}\\x{97CA}\\x{97CB}\\x{97CC}\\x{97CD}\\x{97CE}\\x{97CF}\\x{97D0}' .\n          '\\x{97D1}\\x{97D3}\\x{97D4}\\x{97D5}\\x{97D6}\\x{97D7}\\x{97D8}\\x{97D9}\\x{97DA}' .\n          '\\x{97DB}\\x{97DC}\\x{97DD}\\x{97DE}\\x{97DF}\\x{97E0}\\x{97E1}\\x{97E2}\\x{97E3}' .\n          '\\x{97E4}\\x{97E5}\\x{97E6}\\x{97E7}\\x{97E8}\\x{97E9}\\x{97EA}\\x{97EB}\\x{97EC}' .\n          '\\x{97ED}\\x{97EE}\\x{97EF}\\x{97F0}\\x{97F1}\\x{97F2}\\x{97F3}\\x{97F4}\\x{97F5}' .\n          '\\x{97F6}\\x{97F7}\\x{97F8}\\x{97F9}\\x{97FA}\\x{97FB}\\x{97FD}\\x{97FE}\\x{97FF}' .\n          '\\x{9800}\\x{9801}\\x{9802}\\x{9803}\\x{9804}\\x{9805}\\x{9806}\\x{9807}\\x{9808}' .\n          '\\x{9809}\\x{980A}\\x{980B}\\x{980C}\\x{980D}\\x{980E}\\x{980F}\\x{9810}\\x{9811}' .\n          '\\x{9812}\\x{9813}\\x{9814}\\x{9815}\\x{9816}\\x{9817}\\x{9818}\\x{9819}\\x{981A}' .\n          '\\x{981B}\\x{981C}\\x{981D}\\x{981E}\\x{9820}\\x{9821}\\x{9822}\\x{9823}\\x{9824}' .\n          '\\x{9826}\\x{9827}\\x{9828}\\x{9829}\\x{982B}\\x{982D}\\x{982E}\\x{982F}\\x{9830}' .\n          '\\x{9831}\\x{9832}\\x{9834}\\x{9835}\\x{9836}\\x{9837}\\x{9838}\\x{9839}\\x{983B}' .\n          '\\x{983C}\\x{983D}\\x{983F}\\x{9840}\\x{9841}\\x{9843}\\x{9844}\\x{9845}\\x{9846}' .\n          '\\x{9848}\\x{9849}\\x{984A}\\x{984C}\\x{984D}\\x{984E}\\x{984F}\\x{9850}\\x{9851}' .\n          '\\x{9852}\\x{9853}\\x{9854}\\x{9855}\\x{9857}\\x{9858}\\x{9859}\\x{985A}\\x{985B}' .\n          '\\x{985C}\\x{985D}\\x{985E}\\x{985F}\\x{9860}\\x{9861}\\x{9862}\\x{9863}\\x{9864}' .\n          '\\x{9865}\\x{9867}\\x{9869}\\x{986A}\\x{986B}\\x{986C}\\x{986D}\\x{986E}\\x{986F}' .\n          '\\x{9870}\\x{9871}\\x{9872}\\x{9873}\\x{9874}\\x{9875}\\x{9876}\\x{9877}\\x{9878}' .\n          '\\x{9879}\\x{987A}\\x{987B}\\x{987C}\\x{987D}\\x{987E}\\x{987F}\\x{9880}\\x{9881}' .\n          '\\x{9882}\\x{9883}\\x{9884}\\x{9885}\\x{9886}\\x{9887}\\x{9888}\\x{9889}\\x{988A}' .\n          '\\x{988B}\\x{988C}\\x{988D}\\x{988E}\\x{988F}\\x{9890}\\x{9891}\\x{9892}\\x{9893}' .\n          '\\x{9894}\\x{9895}\\x{9896}\\x{9897}\\x{9898}\\x{9899}\\x{989A}\\x{989B}\\x{989C}' .\n          '\\x{989D}\\x{989E}\\x{989F}\\x{98A0}\\x{98A1}\\x{98A2}\\x{98A3}\\x{98A4}\\x{98A5}' .\n          '\\x{98A6}\\x{98A7}\\x{98A8}\\x{98A9}\\x{98AA}\\x{98AB}\\x{98AC}\\x{98AD}\\x{98AE}' .\n          '\\x{98AF}\\x{98B0}\\x{98B1}\\x{98B2}\\x{98B3}\\x{98B4}\\x{98B5}\\x{98B6}\\x{98B8}' .\n          '\\x{98B9}\\x{98BA}\\x{98BB}\\x{98BC}\\x{98BD}\\x{98BE}\\x{98BF}\\x{98C0}\\x{98C1}' .\n          '\\x{98C2}\\x{98C3}\\x{98C4}\\x{98C5}\\x{98C6}\\x{98C8}\\x{98C9}\\x{98CB}\\x{98CC}' .\n          '\\x{98CD}\\x{98CE}\\x{98CF}\\x{98D0}\\x{98D1}\\x{98D2}\\x{98D3}\\x{98D4}\\x{98D5}' .\n          '\\x{98D6}\\x{98D7}\\x{98D8}\\x{98D9}\\x{98DA}\\x{98DB}\\x{98DC}\\x{98DD}\\x{98DE}' .\n          '\\x{98DF}\\x{98E0}\\x{98E2}\\x{98E3}\\x{98E5}\\x{98E6}\\x{98E7}\\x{98E8}\\x{98E9}' .\n          '\\x{98EA}\\x{98EB}\\x{98ED}\\x{98EF}\\x{98F0}\\x{98F2}\\x{98F3}\\x{98F4}\\x{98F5}' .\n          '\\x{98F6}\\x{98F7}\\x{98F9}\\x{98FA}\\x{98FC}\\x{98FD}\\x{98FE}\\x{98FF}\\x{9900}' .\n          '\\x{9901}\\x{9902}\\x{9903}\\x{9904}\\x{9905}\\x{9906}\\x{9907}\\x{9908}\\x{9909}' .\n          '\\x{990A}\\x{990B}\\x{990C}\\x{990D}\\x{990E}\\x{990F}\\x{9910}\\x{9911}\\x{9912}' .\n          '\\x{9913}\\x{9914}\\x{9915}\\x{9916}\\x{9917}\\x{9918}\\x{991A}\\x{991B}\\x{991C}' .\n          '\\x{991D}\\x{991E}\\x{991F}\\x{9920}\\x{9921}\\x{9922}\\x{9923}\\x{9924}\\x{9925}' .\n          '\\x{9926}\\x{9927}\\x{9928}\\x{9929}\\x{992A}\\x{992B}\\x{992C}\\x{992D}\\x{992E}' .\n          '\\x{992F}\\x{9930}\\x{9931}\\x{9932}\\x{9933}\\x{9934}\\x{9935}\\x{9936}\\x{9937}' .\n          '\\x{9938}\\x{9939}\\x{993A}\\x{993C}\\x{993D}\\x{993E}\\x{993F}\\x{9940}\\x{9941}' .\n          '\\x{9942}\\x{9943}\\x{9945}\\x{9946}\\x{9947}\\x{9948}\\x{9949}\\x{994A}\\x{994B}' .\n          '\\x{994C}\\x{994E}\\x{994F}\\x{9950}\\x{9951}\\x{9952}\\x{9953}\\x{9954}\\x{9955}' .\n          '\\x{9956}\\x{9957}\\x{9958}\\x{9959}\\x{995B}\\x{995C}\\x{995E}\\x{995F}\\x{9960}' .\n          '\\x{9961}\\x{9962}\\x{9963}\\x{9964}\\x{9965}\\x{9966}\\x{9967}\\x{9968}\\x{9969}' .\n          '\\x{996A}\\x{996B}\\x{996C}\\x{996D}\\x{996E}\\x{996F}\\x{9970}\\x{9971}\\x{9972}' .\n          '\\x{9973}\\x{9974}\\x{9975}\\x{9976}\\x{9977}\\x{9978}\\x{9979}\\x{997A}\\x{997B}' .\n          '\\x{997C}\\x{997D}\\x{997E}\\x{997F}\\x{9980}\\x{9981}\\x{9982}\\x{9983}\\x{9984}' .\n          '\\x{9985}\\x{9986}\\x{9987}\\x{9988}\\x{9989}\\x{998A}\\x{998B}\\x{998C}\\x{998D}' .\n          '\\x{998E}\\x{998F}\\x{9990}\\x{9991}\\x{9992}\\x{9993}\\x{9994}\\x{9995}\\x{9996}' .\n          '\\x{9997}\\x{9998}\\x{9999}\\x{999A}\\x{999B}\\x{999C}\\x{999D}\\x{999E}\\x{999F}' .\n          '\\x{99A0}\\x{99A1}\\x{99A2}\\x{99A3}\\x{99A4}\\x{99A5}\\x{99A6}\\x{99A7}\\x{99A8}' .\n          '\\x{99A9}\\x{99AA}\\x{99AB}\\x{99AC}\\x{99AD}\\x{99AE}\\x{99AF}\\x{99B0}\\x{99B1}' .\n          '\\x{99B2}\\x{99B3}\\x{99B4}\\x{99B5}\\x{99B6}\\x{99B7}\\x{99B8}\\x{99B9}\\x{99BA}' .\n          '\\x{99BB}\\x{99BC}\\x{99BD}\\x{99BE}\\x{99C0}\\x{99C1}\\x{99C2}\\x{99C3}\\x{99C4}' .\n          '\\x{99C6}\\x{99C7}\\x{99C8}\\x{99C9}\\x{99CA}\\x{99CB}\\x{99CC}\\x{99CD}\\x{99CE}' .\n          '\\x{99CF}\\x{99D0}\\x{99D1}\\x{99D2}\\x{99D3}\\x{99D4}\\x{99D5}\\x{99D6}\\x{99D7}' .\n          '\\x{99D8}\\x{99D9}\\x{99DA}\\x{99DB}\\x{99DC}\\x{99DD}\\x{99DE}\\x{99DF}\\x{99E1}' .\n          '\\x{99E2}\\x{99E3}\\x{99E4}\\x{99E5}\\x{99E7}\\x{99E8}\\x{99E9}\\x{99EA}\\x{99EC}' .\n          '\\x{99ED}\\x{99EE}\\x{99EF}\\x{99F0}\\x{99F1}\\x{99F2}\\x{99F3}\\x{99F4}\\x{99F6}' .\n          '\\x{99F7}\\x{99F8}\\x{99F9}\\x{99FA}\\x{99FB}\\x{99FC}\\x{99FD}\\x{99FE}\\x{99FF}' .\n          '\\x{9A00}\\x{9A01}\\x{9A02}\\x{9A03}\\x{9A04}\\x{9A05}\\x{9A06}\\x{9A07}\\x{9A08}' .\n          '\\x{9A09}\\x{9A0A}\\x{9A0B}\\x{9A0C}\\x{9A0D}\\x{9A0E}\\x{9A0F}\\x{9A11}\\x{9A14}' .\n          '\\x{9A15}\\x{9A16}\\x{9A19}\\x{9A1A}\\x{9A1B}\\x{9A1C}\\x{9A1D}\\x{9A1E}\\x{9A1F}' .\n          '\\x{9A20}\\x{9A21}\\x{9A22}\\x{9A23}\\x{9A24}\\x{9A25}\\x{9A26}\\x{9A27}\\x{9A29}' .\n          '\\x{9A2A}\\x{9A2B}\\x{9A2C}\\x{9A2D}\\x{9A2E}\\x{9A2F}\\x{9A30}\\x{9A31}\\x{9A32}' .\n          '\\x{9A33}\\x{9A34}\\x{9A35}\\x{9A36}\\x{9A37}\\x{9A38}\\x{9A39}\\x{9A3A}\\x{9A3C}' .\n          '\\x{9A3D}\\x{9A3E}\\x{9A3F}\\x{9A40}\\x{9A41}\\x{9A42}\\x{9A43}\\x{9A44}\\x{9A45}' .\n          '\\x{9A46}\\x{9A47}\\x{9A48}\\x{9A49}\\x{9A4A}\\x{9A4B}\\x{9A4C}\\x{9A4D}\\x{9A4E}' .\n          '\\x{9A4F}\\x{9A50}\\x{9A52}\\x{9A53}\\x{9A54}\\x{9A55}\\x{9A56}\\x{9A57}\\x{9A59}' .\n          '\\x{9A5A}\\x{9A5B}\\x{9A5C}\\x{9A5E}\\x{9A5F}\\x{9A60}\\x{9A61}\\x{9A62}\\x{9A64}' .\n          '\\x{9A65}\\x{9A66}\\x{9A67}\\x{9A68}\\x{9A69}\\x{9A6A}\\x{9A6B}\\x{9A6C}\\x{9A6D}' .\n          '\\x{9A6E}\\x{9A6F}\\x{9A70}\\x{9A71}\\x{9A72}\\x{9A73}\\x{9A74}\\x{9A75}\\x{9A76}' .\n          '\\x{9A77}\\x{9A78}\\x{9A79}\\x{9A7A}\\x{9A7B}\\x{9A7C}\\x{9A7D}\\x{9A7E}\\x{9A7F}' .\n          '\\x{9A80}\\x{9A81}\\x{9A82}\\x{9A83}\\x{9A84}\\x{9A85}\\x{9A86}\\x{9A87}\\x{9A88}' .\n          '\\x{9A89}\\x{9A8A}\\x{9A8B}\\x{9A8C}\\x{9A8D}\\x{9A8E}\\x{9A8F}\\x{9A90}\\x{9A91}' .\n          '\\x{9A92}\\x{9A93}\\x{9A94}\\x{9A95}\\x{9A96}\\x{9A97}\\x{9A98}\\x{9A99}\\x{9A9A}' .\n          '\\x{9A9B}\\x{9A9C}\\x{9A9D}\\x{9A9E}\\x{9A9F}\\x{9AA0}\\x{9AA1}\\x{9AA2}\\x{9AA3}' .\n          '\\x{9AA4}\\x{9AA5}\\x{9AA6}\\x{9AA7}\\x{9AA8}\\x{9AAA}\\x{9AAB}\\x{9AAC}\\x{9AAD}' .\n          '\\x{9AAE}\\x{9AAF}\\x{9AB0}\\x{9AB1}\\x{9AB2}\\x{9AB3}\\x{9AB4}\\x{9AB5}\\x{9AB6}' .\n          '\\x{9AB7}\\x{9AB8}\\x{9AB9}\\x{9ABA}\\x{9ABB}\\x{9ABC}\\x{9ABE}\\x{9ABF}\\x{9AC0}' .\n          '\\x{9AC1}\\x{9AC2}\\x{9AC3}\\x{9AC4}\\x{9AC5}\\x{9AC6}\\x{9AC7}\\x{9AC9}\\x{9ACA}' .\n          '\\x{9ACB}\\x{9ACC}\\x{9ACD}\\x{9ACE}\\x{9ACF}\\x{9AD0}\\x{9AD1}\\x{9AD2}\\x{9AD3}' .\n          '\\x{9AD4}\\x{9AD5}\\x{9AD6}\\x{9AD8}\\x{9AD9}\\x{9ADA}\\x{9ADB}\\x{9ADC}\\x{9ADD}' .\n          '\\x{9ADE}\\x{9ADF}\\x{9AE1}\\x{9AE2}\\x{9AE3}\\x{9AE5}\\x{9AE6}\\x{9AE7}\\x{9AEA}' .\n          '\\x{9AEB}\\x{9AEC}\\x{9AED}\\x{9AEE}\\x{9AEF}\\x{9AF1}\\x{9AF2}\\x{9AF3}\\x{9AF4}' .\n          '\\x{9AF5}\\x{9AF6}\\x{9AF7}\\x{9AF8}\\x{9AF9}\\x{9AFA}\\x{9AFB}\\x{9AFC}\\x{9AFD}' .\n          '\\x{9AFE}\\x{9AFF}\\x{9B01}\\x{9B03}\\x{9B04}\\x{9B05}\\x{9B06}\\x{9B07}\\x{9B08}' .\n          '\\x{9B0A}\\x{9B0B}\\x{9B0C}\\x{9B0D}\\x{9B0E}\\x{9B0F}\\x{9B10}\\x{9B11}\\x{9B12}' .\n          '\\x{9B13}\\x{9B15}\\x{9B16}\\x{9B17}\\x{9B18}\\x{9B19}\\x{9B1A}\\x{9B1C}\\x{9B1D}' .\n          '\\x{9B1E}\\x{9B1F}\\x{9B20}\\x{9B21}\\x{9B22}\\x{9B23}\\x{9B24}\\x{9B25}\\x{9B26}' .\n          '\\x{9B27}\\x{9B28}\\x{9B29}\\x{9B2A}\\x{9B2B}\\x{9B2C}\\x{9B2D}\\x{9B2E}\\x{9B2F}' .\n          '\\x{9B30}\\x{9B31}\\x{9B32}\\x{9B33}\\x{9B35}\\x{9B36}\\x{9B37}\\x{9B38}\\x{9B39}' .\n          '\\x{9B3A}\\x{9B3B}\\x{9B3C}\\x{9B3E}\\x{9B3F}\\x{9B41}\\x{9B42}\\x{9B43}\\x{9B44}' .\n          '\\x{9B45}\\x{9B46}\\x{9B47}\\x{9B48}\\x{9B49}\\x{9B4A}\\x{9B4B}\\x{9B4C}\\x{9B4D}' .\n          '\\x{9B4E}\\x{9B4F}\\x{9B51}\\x{9B52}\\x{9B53}\\x{9B54}\\x{9B55}\\x{9B56}\\x{9B58}' .\n          '\\x{9B59}\\x{9B5A}\\x{9B5B}\\x{9B5C}\\x{9B5D}\\x{9B5E}\\x{9B5F}\\x{9B60}\\x{9B61}' .\n          '\\x{9B63}\\x{9B64}\\x{9B65}\\x{9B66}\\x{9B67}\\x{9B68}\\x{9B69}\\x{9B6A}\\x{9B6B}' .\n          '\\x{9B6C}\\x{9B6D}\\x{9B6E}\\x{9B6F}\\x{9B70}\\x{9B71}\\x{9B73}\\x{9B74}\\x{9B75}' .\n          '\\x{9B76}\\x{9B77}\\x{9B78}\\x{9B79}\\x{9B7A}\\x{9B7B}\\x{9B7C}\\x{9B7D}\\x{9B7E}' .\n          '\\x{9B7F}\\x{9B80}\\x{9B81}\\x{9B82}\\x{9B83}\\x{9B84}\\x{9B85}\\x{9B86}\\x{9B87}' .\n          '\\x{9B88}\\x{9B8A}\\x{9B8B}\\x{9B8D}\\x{9B8E}\\x{9B8F}\\x{9B90}\\x{9B91}\\x{9B92}' .\n          '\\x{9B93}\\x{9B94}\\x{9B95}\\x{9B96}\\x{9B97}\\x{9B98}\\x{9B9A}\\x{9B9B}\\x{9B9C}' .\n          '\\x{9B9D}\\x{9B9E}\\x{9B9F}\\x{9BA0}\\x{9BA1}\\x{9BA2}\\x{9BA3}\\x{9BA4}\\x{9BA5}' .\n          '\\x{9BA6}\\x{9BA7}\\x{9BA8}\\x{9BA9}\\x{9BAA}\\x{9BAB}\\x{9BAC}\\x{9BAD}\\x{9BAE}' .\n          '\\x{9BAF}\\x{9BB0}\\x{9BB1}\\x{9BB2}\\x{9BB3}\\x{9BB4}\\x{9BB5}\\x{9BB6}\\x{9BB7}' .\n          '\\x{9BB8}\\x{9BB9}\\x{9BBA}\\x{9BBB}\\x{9BBC}\\x{9BBD}\\x{9BBE}\\x{9BBF}\\x{9BC0}' .\n          '\\x{9BC1}\\x{9BC3}\\x{9BC4}\\x{9BC5}\\x{9BC6}\\x{9BC7}\\x{9BC8}\\x{9BC9}\\x{9BCA}' .\n          '\\x{9BCB}\\x{9BCC}\\x{9BCD}\\x{9BCE}\\x{9BCF}\\x{9BD0}\\x{9BD1}\\x{9BD2}\\x{9BD3}' .\n          '\\x{9BD4}\\x{9BD5}\\x{9BD6}\\x{9BD7}\\x{9BD8}\\x{9BD9}\\x{9BDA}\\x{9BDB}\\x{9BDC}' .\n          '\\x{9BDD}\\x{9BDE}\\x{9BDF}\\x{9BE0}\\x{9BE1}\\x{9BE2}\\x{9BE3}\\x{9BE4}\\x{9BE5}' .\n          '\\x{9BE6}\\x{9BE7}\\x{9BE8}\\x{9BE9}\\x{9BEA}\\x{9BEB}\\x{9BEC}\\x{9BED}\\x{9BEE}' .\n          '\\x{9BEF}\\x{9BF0}\\x{9BF1}\\x{9BF2}\\x{9BF3}\\x{9BF4}\\x{9BF5}\\x{9BF7}\\x{9BF8}' .\n          '\\x{9BF9}\\x{9BFA}\\x{9BFB}\\x{9BFC}\\x{9BFD}\\x{9BFE}\\x{9BFF}\\x{9C02}\\x{9C05}' .\n          '\\x{9C06}\\x{9C07}\\x{9C08}\\x{9C09}\\x{9C0A}\\x{9C0B}\\x{9C0C}\\x{9C0D}\\x{9C0E}' .\n          '\\x{9C0F}\\x{9C10}\\x{9C11}\\x{9C12}\\x{9C13}\\x{9C14}\\x{9C15}\\x{9C16}\\x{9C17}' .\n          '\\x{9C18}\\x{9C19}\\x{9C1A}\\x{9C1B}\\x{9C1C}\\x{9C1D}\\x{9C1E}\\x{9C1F}\\x{9C20}' .\n          '\\x{9C21}\\x{9C22}\\x{9C23}\\x{9C24}\\x{9C25}\\x{9C26}\\x{9C27}\\x{9C28}\\x{9C29}' .\n          '\\x{9C2A}\\x{9C2B}\\x{9C2C}\\x{9C2D}\\x{9C2F}\\x{9C30}\\x{9C31}\\x{9C32}\\x{9C33}' .\n          '\\x{9C34}\\x{9C35}\\x{9C36}\\x{9C37}\\x{9C38}\\x{9C39}\\x{9C3A}\\x{9C3B}\\x{9C3C}' .\n          '\\x{9C3D}\\x{9C3E}\\x{9C3F}\\x{9C40}\\x{9C41}\\x{9C43}\\x{9C44}\\x{9C45}\\x{9C46}' .\n          '\\x{9C47}\\x{9C48}\\x{9C49}\\x{9C4A}\\x{9C4B}\\x{9C4C}\\x{9C4D}\\x{9C4E}\\x{9C50}' .\n          '\\x{9C52}\\x{9C53}\\x{9C54}\\x{9C55}\\x{9C56}\\x{9C57}\\x{9C58}\\x{9C59}\\x{9C5A}' .\n          '\\x{9C5B}\\x{9C5C}\\x{9C5D}\\x{9C5E}\\x{9C5F}\\x{9C60}\\x{9C62}\\x{9C63}\\x{9C65}' .\n          '\\x{9C66}\\x{9C67}\\x{9C68}\\x{9C69}\\x{9C6A}\\x{9C6B}\\x{9C6C}\\x{9C6D}\\x{9C6E}' .\n          '\\x{9C6F}\\x{9C70}\\x{9C71}\\x{9C72}\\x{9C73}\\x{9C74}\\x{9C75}\\x{9C77}\\x{9C78}' .\n          '\\x{9C79}\\x{9C7A}\\x{9C7C}\\x{9C7D}\\x{9C7E}\\x{9C7F}\\x{9C80}\\x{9C81}\\x{9C82}' .\n          '\\x{9C83}\\x{9C84}\\x{9C85}\\x{9C86}\\x{9C87}\\x{9C88}\\x{9C89}\\x{9C8A}\\x{9C8B}' .\n          '\\x{9C8C}\\x{9C8D}\\x{9C8E}\\x{9C8F}\\x{9C90}\\x{9C91}\\x{9C92}\\x{9C93}\\x{9C94}' .\n          '\\x{9C95}\\x{9C96}\\x{9C97}\\x{9C98}\\x{9C99}\\x{9C9A}\\x{9C9B}\\x{9C9C}\\x{9C9D}' .\n          '\\x{9C9E}\\x{9C9F}\\x{9CA0}\\x{9CA1}\\x{9CA2}\\x{9CA3}\\x{9CA4}\\x{9CA5}\\x{9CA6}' .\n          '\\x{9CA7}\\x{9CA8}\\x{9CA9}\\x{9CAA}\\x{9CAB}\\x{9CAC}\\x{9CAD}\\x{9CAE}\\x{9CAF}' .\n          '\\x{9CB0}\\x{9CB1}\\x{9CB2}\\x{9CB3}\\x{9CB4}\\x{9CB5}\\x{9CB6}\\x{9CB7}\\x{9CB8}' .\n          '\\x{9CB9}\\x{9CBA}\\x{9CBB}\\x{9CBC}\\x{9CBD}\\x{9CBE}\\x{9CBF}\\x{9CC0}\\x{9CC1}' .\n          '\\x{9CC2}\\x{9CC3}\\x{9CC4}\\x{9CC5}\\x{9CC6}\\x{9CC7}\\x{9CC8}\\x{9CC9}\\x{9CCA}' .\n          '\\x{9CCB}\\x{9CCC}\\x{9CCD}\\x{9CCE}\\x{9CCF}\\x{9CD0}\\x{9CD1}\\x{9CD2}\\x{9CD3}' .\n          '\\x{9CD4}\\x{9CD5}\\x{9CD6}\\x{9CD7}\\x{9CD8}\\x{9CD9}\\x{9CDA}\\x{9CDB}\\x{9CDC}' .\n          '\\x{9CDD}\\x{9CDE}\\x{9CDF}\\x{9CE0}\\x{9CE1}\\x{9CE2}\\x{9CE3}\\x{9CE4}\\x{9CE5}' .\n          '\\x{9CE6}\\x{9CE7}\\x{9CE8}\\x{9CE9}\\x{9CEA}\\x{9CEB}\\x{9CEC}\\x{9CED}\\x{9CEE}' .\n          '\\x{9CEF}\\x{9CF0}\\x{9CF1}\\x{9CF2}\\x{9CF3}\\x{9CF4}\\x{9CF5}\\x{9CF6}\\x{9CF7}' .\n          '\\x{9CF8}\\x{9CF9}\\x{9CFA}\\x{9CFB}\\x{9CFC}\\x{9CFD}\\x{9CFE}\\x{9CFF}\\x{9D00}' .\n          '\\x{9D01}\\x{9D02}\\x{9D03}\\x{9D04}\\x{9D05}\\x{9D06}\\x{9D07}\\x{9D08}\\x{9D09}' .\n          '\\x{9D0A}\\x{9D0B}\\x{9D0F}\\x{9D10}\\x{9D12}\\x{9D13}\\x{9D14}\\x{9D15}\\x{9D16}' .\n          '\\x{9D17}\\x{9D18}\\x{9D19}\\x{9D1A}\\x{9D1B}\\x{9D1C}\\x{9D1D}\\x{9D1E}\\x{9D1F}' .\n          '\\x{9D20}\\x{9D21}\\x{9D22}\\x{9D23}\\x{9D24}\\x{9D25}\\x{9D26}\\x{9D28}\\x{9D29}' .\n          '\\x{9D2B}\\x{9D2D}\\x{9D2E}\\x{9D2F}\\x{9D30}\\x{9D31}\\x{9D32}\\x{9D33}\\x{9D34}' .\n          '\\x{9D36}\\x{9D37}\\x{9D38}\\x{9D39}\\x{9D3A}\\x{9D3B}\\x{9D3D}\\x{9D3E}\\x{9D3F}' .\n          '\\x{9D40}\\x{9D41}\\x{9D42}\\x{9D43}\\x{9D45}\\x{9D46}\\x{9D47}\\x{9D48}\\x{9D49}' .\n          '\\x{9D4A}\\x{9D4B}\\x{9D4C}\\x{9D4D}\\x{9D4E}\\x{9D4F}\\x{9D50}\\x{9D51}\\x{9D52}' .\n          '\\x{9D53}\\x{9D54}\\x{9D55}\\x{9D56}\\x{9D57}\\x{9D58}\\x{9D59}\\x{9D5A}\\x{9D5B}' .\n          '\\x{9D5C}\\x{9D5D}\\x{9D5E}\\x{9D5F}\\x{9D60}\\x{9D61}\\x{9D62}\\x{9D63}\\x{9D64}' .\n          '\\x{9D65}\\x{9D66}\\x{9D67}\\x{9D68}\\x{9D69}\\x{9D6A}\\x{9D6B}\\x{9D6C}\\x{9D6E}' .\n          '\\x{9D6F}\\x{9D70}\\x{9D71}\\x{9D72}\\x{9D73}\\x{9D74}\\x{9D75}\\x{9D76}\\x{9D77}' .\n          '\\x{9D78}\\x{9D79}\\x{9D7A}\\x{9D7B}\\x{9D7C}\\x{9D7D}\\x{9D7E}\\x{9D7F}\\x{9D80}' .\n          '\\x{9D81}\\x{9D82}\\x{9D83}\\x{9D84}\\x{9D85}\\x{9D86}\\x{9D87}\\x{9D88}\\x{9D89}' .\n          '\\x{9D8A}\\x{9D8B}\\x{9D8C}\\x{9D8D}\\x{9D8E}\\x{9D90}\\x{9D91}\\x{9D92}\\x{9D93}' .\n          '\\x{9D94}\\x{9D96}\\x{9D97}\\x{9D98}\\x{9D99}\\x{9D9A}\\x{9D9B}\\x{9D9C}\\x{9D9D}' .\n          '\\x{9D9E}\\x{9D9F}\\x{9DA0}\\x{9DA1}\\x{9DA2}\\x{9DA3}\\x{9DA4}\\x{9DA5}\\x{9DA6}' .\n          '\\x{9DA7}\\x{9DA8}\\x{9DA9}\\x{9DAA}\\x{9DAB}\\x{9DAC}\\x{9DAD}\\x{9DAF}\\x{9DB0}' .\n          '\\x{9DB1}\\x{9DB2}\\x{9DB3}\\x{9DB4}\\x{9DB5}\\x{9DB6}\\x{9DB7}\\x{9DB8}\\x{9DB9}' .\n          '\\x{9DBA}\\x{9DBB}\\x{9DBC}\\x{9DBE}\\x{9DBF}\\x{9DC1}\\x{9DC2}\\x{9DC3}\\x{9DC4}' .\n          '\\x{9DC5}\\x{9DC7}\\x{9DC8}\\x{9DC9}\\x{9DCA}\\x{9DCB}\\x{9DCC}\\x{9DCD}\\x{9DCE}' .\n          '\\x{9DCF}\\x{9DD0}\\x{9DD1}\\x{9DD2}\\x{9DD3}\\x{9DD4}\\x{9DD5}\\x{9DD6}\\x{9DD7}' .\n          '\\x{9DD8}\\x{9DD9}\\x{9DDA}\\x{9DDB}\\x{9DDC}\\x{9DDD}\\x{9DDE}\\x{9DDF}\\x{9DE0}' .\n          '\\x{9DE1}\\x{9DE2}\\x{9DE3}\\x{9DE4}\\x{9DE5}\\x{9DE6}\\x{9DE7}\\x{9DE8}\\x{9DE9}' .\n          '\\x{9DEB}\\x{9DEC}\\x{9DED}\\x{9DEE}\\x{9DEF}\\x{9DF0}\\x{9DF1}\\x{9DF2}\\x{9DF3}' .\n          '\\x{9DF4}\\x{9DF5}\\x{9DF6}\\x{9DF7}\\x{9DF8}\\x{9DF9}\\x{9DFA}\\x{9DFB}\\x{9DFD}' .\n          '\\x{9DFE}\\x{9DFF}\\x{9E00}\\x{9E01}\\x{9E02}\\x{9E03}\\x{9E04}\\x{9E05}\\x{9E06}' .\n          '\\x{9E07}\\x{9E08}\\x{9E09}\\x{9E0A}\\x{9E0B}\\x{9E0C}\\x{9E0D}\\x{9E0F}\\x{9E10}' .\n          '\\x{9E11}\\x{9E12}\\x{9E13}\\x{9E14}\\x{9E15}\\x{9E17}\\x{9E18}\\x{9E19}\\x{9E1A}' .\n          '\\x{9E1B}\\x{9E1D}\\x{9E1E}\\x{9E1F}\\x{9E20}\\x{9E21}\\x{9E22}\\x{9E23}\\x{9E24}' .\n          '\\x{9E25}\\x{9E26}\\x{9E27}\\x{9E28}\\x{9E29}\\x{9E2A}\\x{9E2B}\\x{9E2C}\\x{9E2D}' .\n          '\\x{9E2E}\\x{9E2F}\\x{9E30}\\x{9E31}\\x{9E32}\\x{9E33}\\x{9E34}\\x{9E35}\\x{9E36}' .\n          '\\x{9E37}\\x{9E38}\\x{9E39}\\x{9E3A}\\x{9E3B}\\x{9E3C}\\x{9E3D}\\x{9E3E}\\x{9E3F}' .\n          '\\x{9E40}\\x{9E41}\\x{9E42}\\x{9E43}\\x{9E44}\\x{9E45}\\x{9E46}\\x{9E47}\\x{9E48}' .\n          '\\x{9E49}\\x{9E4A}\\x{9E4B}\\x{9E4C}\\x{9E4D}\\x{9E4E}\\x{9E4F}\\x{9E50}\\x{9E51}' .\n          '\\x{9E52}\\x{9E53}\\x{9E54}\\x{9E55}\\x{9E56}\\x{9E57}\\x{9E58}\\x{9E59}\\x{9E5A}' .\n          '\\x{9E5B}\\x{9E5C}\\x{9E5D}\\x{9E5E}\\x{9E5F}\\x{9E60}\\x{9E61}\\x{9E62}\\x{9E63}' .\n          '\\x{9E64}\\x{9E65}\\x{9E66}\\x{9E67}\\x{9E68}\\x{9E69}\\x{9E6A}\\x{9E6B}\\x{9E6C}' .\n          '\\x{9E6D}\\x{9E6E}\\x{9E6F}\\x{9E70}\\x{9E71}\\x{9E72}\\x{9E73}\\x{9E74}\\x{9E75}' .\n          '\\x{9E76}\\x{9E77}\\x{9E79}\\x{9E7A}\\x{9E7C}\\x{9E7D}\\x{9E7E}\\x{9E7F}\\x{9E80}' .\n          '\\x{9E81}\\x{9E82}\\x{9E83}\\x{9E84}\\x{9E85}\\x{9E86}\\x{9E87}\\x{9E88}\\x{9E89}' .\n          '\\x{9E8A}\\x{9E8B}\\x{9E8C}\\x{9E8D}\\x{9E8E}\\x{9E91}\\x{9E92}\\x{9E93}\\x{9E94}' .\n          '\\x{9E96}\\x{9E97}\\x{9E99}\\x{9E9A}\\x{9E9B}\\x{9E9C}\\x{9E9D}\\x{9E9F}\\x{9EA0}' .\n          '\\x{9EA1}\\x{9EA3}\\x{9EA4}\\x{9EA5}\\x{9EA6}\\x{9EA7}\\x{9EA8}\\x{9EA9}\\x{9EAA}' .\n          '\\x{9EAD}\\x{9EAE}\\x{9EAF}\\x{9EB0}\\x{9EB2}\\x{9EB3}\\x{9EB4}\\x{9EB5}\\x{9EB6}' .\n          '\\x{9EB7}\\x{9EB8}\\x{9EBB}\\x{9EBC}\\x{9EBD}\\x{9EBE}\\x{9EBF}\\x{9EC0}\\x{9EC1}' .\n          '\\x{9EC2}\\x{9EC3}\\x{9EC4}\\x{9EC5}\\x{9EC6}\\x{9EC7}\\x{9EC8}\\x{9EC9}\\x{9ECA}' .\n          '\\x{9ECB}\\x{9ECC}\\x{9ECD}\\x{9ECE}\\x{9ECF}\\x{9ED0}\\x{9ED1}\\x{9ED2}\\x{9ED3}' .\n          '\\x{9ED4}\\x{9ED5}\\x{9ED6}\\x{9ED7}\\x{9ED8}\\x{9ED9}\\x{9EDA}\\x{9EDB}\\x{9EDC}' .\n          '\\x{9EDD}\\x{9EDE}\\x{9EDF}\\x{9EE0}\\x{9EE1}\\x{9EE2}\\x{9EE3}\\x{9EE4}\\x{9EE5}' .\n          '\\x{9EE6}\\x{9EE7}\\x{9EE8}\\x{9EE9}\\x{9EEA}\\x{9EEB}\\x{9EED}\\x{9EEE}\\x{9EEF}' .\n          '\\x{9EF0}\\x{9EF2}\\x{9EF3}\\x{9EF4}\\x{9EF5}\\x{9EF6}\\x{9EF7}\\x{9EF8}\\x{9EF9}' .\n          '\\x{9EFA}\\x{9EFB}\\x{9EFC}\\x{9EFD}\\x{9EFE}\\x{9EFF}\\x{9F00}\\x{9F01}\\x{9F02}' .\n          '\\x{9F04}\\x{9F05}\\x{9F06}\\x{9F07}\\x{9F08}\\x{9F09}\\x{9F0A}\\x{9F0B}\\x{9F0C}' .\n          '\\x{9F0D}\\x{9F0E}\\x{9F0F}\\x{9F10}\\x{9F12}\\x{9F13}\\x{9F15}\\x{9F16}\\x{9F17}' .\n          '\\x{9F18}\\x{9F19}\\x{9F1A}\\x{9F1B}\\x{9F1C}\\x{9F1D}\\x{9F1E}\\x{9F1F}\\x{9F20}' .\n          '\\x{9F22}\\x{9F23}\\x{9F24}\\x{9F25}\\x{9F27}\\x{9F28}\\x{9F29}\\x{9F2A}\\x{9F2B}' .\n          '\\x{9F2C}\\x{9F2D}\\x{9F2E}\\x{9F2F}\\x{9F30}\\x{9F31}\\x{9F32}\\x{9F33}\\x{9F34}' .\n          '\\x{9F35}\\x{9F36}\\x{9F37}\\x{9F38}\\x{9F39}\\x{9F3A}\\x{9F3B}\\x{9F3C}\\x{9F3D}' .\n          '\\x{9F3E}\\x{9F3F}\\x{9F40}\\x{9F41}\\x{9F42}\\x{9F43}\\x{9F44}\\x{9F46}\\x{9F47}' .\n          '\\x{9F48}\\x{9F49}\\x{9F4A}\\x{9F4B}\\x{9F4C}\\x{9F4D}\\x{9F4E}\\x{9F4F}\\x{9F50}' .\n          '\\x{9F51}\\x{9F52}\\x{9F54}\\x{9F55}\\x{9F56}\\x{9F57}\\x{9F58}\\x{9F59}\\x{9F5A}' .\n          '\\x{9F5B}\\x{9F5C}\\x{9F5D}\\x{9F5E}\\x{9F5F}\\x{9F60}\\x{9F61}\\x{9F63}\\x{9F64}' .\n          '\\x{9F65}\\x{9F66}\\x{9F67}\\x{9F68}\\x{9F69}\\x{9F6A}\\x{9F6B}\\x{9F6C}\\x{9F6E}' .\n          '\\x{9F6F}\\x{9F70}\\x{9F71}\\x{9F72}\\x{9F73}\\x{9F74}\\x{9F75}\\x{9F76}\\x{9F77}' .\n          '\\x{9F78}\\x{9F79}\\x{9F7A}\\x{9F7B}\\x{9F7C}\\x{9F7D}\\x{9F7E}\\x{9F7F}\\x{9F80}' .\n          '\\x{9F81}\\x{9F82}\\x{9F83}\\x{9F84}\\x{9F85}\\x{9F86}\\x{9F87}\\x{9F88}\\x{9F89}' .\n          '\\x{9F8A}\\x{9F8B}\\x{9F8C}\\x{9F8D}\\x{9F8E}\\x{9F8F}\\x{9F90}\\x{9F91}\\x{9F92}' .\n          '\\x{9F93}\\x{9F94}\\x{9F95}\\x{9F96}\\x{9F97}\\x{9F98}\\x{9F99}\\x{9F9A}\\x{9F9B}' .\n          '\\x{9F9C}\\x{9F9D}\\x{9F9E}\\x{9F9F}\\x{9FA0}\\x{9FA2}\\x{9FA4}\\x{9FA5}]{1,20}$/iu',\n];\n"
  },
  {
    "path": "src/Hostname/Com.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Hostname;\n\n/**\n * Resource file for com and net idn validation\n */\nreturn [\n    1  => '/^[\\x{002d}0-9\\x{0400}-\\x{052f}]{1,63}$/iu',\n    2  => '/^[\\x{002d}0-9\\x{0370}-\\x{03ff}]{1,63}$/iu',\n    3  => '/^[\\x{002d}0-9a-z\\x{ac00}-\\x{d7a3}]{1,17}$/iu',\n    // @codingStandardsIgnoreStart\n    4  => '/^[\\x{002d}0-9a-z·à-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž]{1,63}$/iu',\n    // @codingStandardsIgnoreEnd\n    5  => '/^[\\x{002d}0-9A-Za-z\\x{3400}-\\x{3401}\\x{3404}-\\x{3406}\\x{340C}\\x{3416}\\x{341C}' .\n'\\x{3421}\\x{3424}\\x{3428}-\\x{3429}\\x{342B}-\\x{342E}\\x{3430}-\\x{3434}\\x{3436}' .\n'\\x{3438}-\\x{343C}\\x{343E}\\x{3441}-\\x{3445}\\x{3447}\\x{3449}-\\x{3451}\\x{3453}' .\n'\\x{3457}-\\x{345F}\\x{3463}-\\x{3467}\\x{346E}-\\x{3471}\\x{3473}-\\x{3477}\\x{3479}-\\x{348E}\\x{3491}-\\x{3497}' .\n'\\x{3499}-\\x{34A1}\\x{34A4}-\\x{34AD}\\x{34AF}-\\x{34B0}\\x{34B2}-\\x{34BF}\\x{34C2}-\\x{34C5}\\x{34C7}-\\x{34CC}' .\n'\\x{34CE}-\\x{34D1}\\x{34D3}-\\x{34D8}\\x{34DA}-\\x{34E4}\\x{34E7}-\\x{34E9}\\x{34EC}-\\x{34EF}\\x{34F1}-\\x{34FE}' .\n'\\x{3500}-\\x{3507}\\x{350A}-\\x{3513}\\x{3515}\\x{3517}-\\x{351A}\\x{351C}-\\x{351E}\\x{3520}-\\x{352A}' .\n'\\x{352C}-\\x{3552}\\x{3554}-\\x{355C}\\x{355E}-\\x{3567}\\x{3569}-\\x{3573}\\x{3575}-\\x{357C}\\x{3580}-\\x{3588}' .\n'\\x{358F}-\\x{3598}\\x{359E}-\\x{35AB}\\x{35B4}-\\x{35CD}\\x{35D0}\\x{35D3}-\\x{35DC}\\x{35E2}-\\x{35ED}' .\n'\\x{35F0}-\\x{35F6}\\x{35FB}-\\x{3602}\\x{3605}-\\x{360E}\\x{3610}-\\x{3611}\\x{3613}-\\x{3616}\\x{3619}-\\x{362D}' .\n'\\x{362F}-\\x{3634}\\x{3636}-\\x{363B}\\x{363F}-\\x{3645}\\x{3647}-\\x{364B}\\x{364D}-\\x{3653}\\x{3655}' .\n'\\x{3659}-\\x{365E}\\x{3660}-\\x{3665}\\x{3667}-\\x{367C}\\x{367E}\\x{3680}-\\x{3685}\\x{3687}' .\n'\\x{3689}-\\x{3690}\\x{3692}-\\x{3698}\\x{369A}\\x{369C}-\\x{36AE}\\x{36B0}-\\x{36BF}\\x{36C1}-\\x{36C5}' .\n'\\x{36C9}-\\x{36CA}\\x{36CD}-\\x{36DE}\\x{36E1}-\\x{36E2}\\x{36E5}-\\x{36FE}\\x{3701}-\\x{3713}\\x{3715}-\\x{371E}' .\n'\\x{3720}-\\x{372C}\\x{372E}-\\x{3745}\\x{3747}-\\x{3748}\\x{374A}\\x{374C}-\\x{3759}\\x{375B}-\\x{3760}' .\n'\\x{3762}-\\x{3767}\\x{3769}-\\x{3772}\\x{3774}-\\x{378C}\\x{378F}-\\x{379C}\\x{379F}\\x{37A1}-\\x{37AD}' .\n'\\x{37AF}-\\x{37B7}\\x{37B9}-\\x{37C1}\\x{37C3}-\\x{37C5}\\x{37C7}-\\x{37D4}\\x{37D6}-\\x{37E0}\\x{37E2}' .\n'\\x{37E5}-\\x{37ED}\\x{37EF}-\\x{37F6}\\x{37F8}-\\x{3802}\\x{3804}-\\x{381D}\\x{3820}-\\x{3822}\\x{3825}-\\x{382A}' .\n'\\x{382D}-\\x{382F}\\x{3831}-\\x{3832}\\x{3834}-\\x{384C}\\x{384E}-\\x{3860}\\x{3862}-\\x{3863}\\x{3865}-\\x{386B}' .\n'\\x{386D}-\\x{3886}\\x{3888}-\\x{38A1}\\x{38A3}\\x{38A5}-\\x{38AA}\\x{38AC}\\x{38AE}-\\x{38B0}' .\n'\\x{38B2}-\\x{38B6}\\x{38B8}\\x{38BA}-\\x{38BE}\\x{38C0}-\\x{38C9}\\x{38CB}-\\x{38D4}\\x{38D8}-\\x{38E0}' .\n'\\x{38E2}-\\x{38E6}\\x{38EB}-\\x{38ED}\\x{38EF}-\\x{38F2}\\x{38F5}-\\x{38F7}\\x{38FA}-\\x{38FF}\\x{3901}-\\x{392A}' .\n'\\x{392C}\\x{392E}-\\x{393B}\\x{393E}-\\x{3956}\\x{395A}-\\x{3969}\\x{396B}-\\x{397A}\\x{397C}-\\x{3987}' .\n'\\x{3989}-\\x{3998}\\x{399A}-\\x{39B0}\\x{39B2}\\x{39B4}-\\x{39D0}\\x{39D2}-\\x{39DA}\\x{39DE}-\\x{39DF}' .\n'\\x{39E1}-\\x{39EF}\\x{39F1}-\\x{3A17}\\x{3A19}-\\x{3A2A}\\x{3A2D}-\\x{3A40}\\x{3A43}-\\x{3A4E}\\x{3A50}' .\n'\\x{3A52}-\\x{3A5E}\\x{3A60}-\\x{3A6D}\\x{3A6F}-\\x{3A77}\\x{3A79}-\\x{3A82}\\x{3A84}-\\x{3A85}\\x{3A87}-\\x{3A89}' .\n'\\x{3A8B}-\\x{3A8F}\\x{3A91}-\\x{3A93}\\x{3A95}-\\x{3A96}\\x{3A9A}\\x{3A9C}-\\x{3AA6}\\x{3AA8}-\\x{3AA9}' .\n'\\x{3AAB}-\\x{3AB1}\\x{3AB4}-\\x{3ABC}\\x{3ABE}-\\x{3AC5}\\x{3ACA}-\\x{3ACB}\\x{3ACD}-\\x{3AD5}\\x{3AD7}-\\x{3AE1}' .\n'\\x{3AE4}-\\x{3AE7}\\x{3AE9}-\\x{3AEC}\\x{3AEE}-\\x{3AFD}\\x{3B01}-\\x{3B10}\\x{3B12}-\\x{3B15}\\x{3B17}-\\x{3B1E}' .\n'\\x{3B20}-\\x{3B23}\\x{3B25}-\\x{3B27}\\x{3B29}-\\x{3B36}\\x{3B38}-\\x{3B39}\\x{3B3B}-\\x{3B3C}\\x{3B3F}' .\n'\\x{3B41}-\\x{3B44}\\x{3B47}-\\x{3B4C}\\x{3B4E}\\x{3B51}-\\x{3B55}\\x{3B58}-\\x{3B62}\\x{3B68}-\\x{3B72}' .\n'\\x{3B78}-\\x{3B88}\\x{3B8B}-\\x{3B9F}\\x{3BA1}\\x{3BA3}-\\x{3BBA}\\x{3BBC}\\x{3BBF}-\\x{3BD0}' .\n'\\x{3BD3}-\\x{3BE6}\\x{3BEA}-\\x{3BFB}\\x{3BFE}-\\x{3C12}\\x{3C14}-\\x{3C1B}\\x{3C1D}-\\x{3C37}\\x{3C39}-\\x{3C4F}' .\n'\\x{3C52}\\x{3C54}-\\x{3C5C}\\x{3C5E}-\\x{3C68}\\x{3C6A}-\\x{3C76}\\x{3C78}-\\x{3C8F}\\x{3C91}-\\x{3CA8}' .\n'\\x{3CAA}-\\x{3CAD}\\x{3CAF}-\\x{3CBE}\\x{3CC0}-\\x{3CC8}\\x{3CCA}-\\x{3CD3}\\x{3CD6}-\\x{3CE0}\\x{3CE4}-\\x{3CEE}' .\n'\\x{3CF3}-\\x{3D0A}\\x{3D0E}-\\x{3D1E}\\x{3D20}-\\x{3D21}\\x{3D25}-\\x{3D38}\\x{3D3B}-\\x{3D46}\\x{3D4A}-\\x{3D59}' .\n'\\x{3D5D}-\\x{3D7B}\\x{3D7D}-\\x{3D81}\\x{3D84}-\\x{3D88}\\x{3D8C}-\\x{3D8F}\\x{3D91}-\\x{3D98}\\x{3D9A}-\\x{3D9C}' .\n'\\x{3D9E}-\\x{3DA1}\\x{3DA3}-\\x{3DB0}\\x{3DB2}-\\x{3DB5}\\x{3DB9}-\\x{3DBC}\\x{3DBE}-\\x{3DCB}\\x{3DCD}-\\x{3DDB}' .\n'\\x{3DDF}-\\x{3DE8}\\x{3DEB}-\\x{3DF0}\\x{3DF3}-\\x{3DF9}\\x{3DFB}-\\x{3DFC}\\x{3DFE}-\\x{3E05}\\x{3E08}-\\x{3E33}' .\n'\\x{3E35}-\\x{3E3E}\\x{3E40}-\\x{3E47}\\x{3E49}-\\x{3E67}\\x{3E6B}-\\x{3E6F}\\x{3E71}-\\x{3E85}\\x{3E87}-\\x{3E8C}' .\n'\\x{3E8E}-\\x{3E98}\\x{3E9A}-\\x{3EA1}\\x{3EA3}-\\x{3EAE}\\x{3EB0}-\\x{3EB5}\\x{3EB7}-\\x{3EBA}\\x{3EBD}' .\n'\\x{3EBF}-\\x{3EC4}\\x{3EC7}-\\x{3ECE}\\x{3ED1}-\\x{3ED7}\\x{3ED9}-\\x{3EDA}\\x{3EDD}-\\x{3EE3}\\x{3EE7}-\\x{3EE8}' .\n'\\x{3EEB}-\\x{3EF2}\\x{3EF5}-\\x{3EFF}\\x{3F01}-\\x{3F02}\\x{3F04}-\\x{3F07}\\x{3F09}-\\x{3F44}\\x{3F46}-\\x{3F4E}' .\n'\\x{3F50}-\\x{3F53}\\x{3F55}-\\x{3F72}\\x{3F74}-\\x{3F75}\\x{3F77}-\\x{3F7B}\\x{3F7D}-\\x{3FB0}\\x{3FB6}-\\x{3FBF}' .\n'\\x{3FC1}-\\x{3FCF}\\x{3FD1}-\\x{3FD3}\\x{3FD5}-\\x{3FDF}\\x{3FE1}-\\x{400B}\\x{400D}-\\x{401C}\\x{401E}-\\x{4024}' .\n'\\x{4027}-\\x{403F}\\x{4041}-\\x{4060}\\x{4062}-\\x{4069}\\x{406B}-\\x{408A}\\x{408C}-\\x{40A7}\\x{40A9}-\\x{40B4}' .\n'\\x{40B6}-\\x{40C2}\\x{40C7}-\\x{40CF}\\x{40D1}-\\x{40DE}\\x{40E0}-\\x{40E7}\\x{40E9}-\\x{40EE}\\x{40F0}-\\x{40FB}' .\n'\\x{40FD}-\\x{4109}\\x{410B}-\\x{4115}\\x{4118}-\\x{411D}\\x{411F}-\\x{4122}\\x{4124}-\\x{4133}\\x{4136}-\\x{4138}' .\n'\\x{413A}-\\x{4148}\\x{414A}-\\x{4169}\\x{416C}-\\x{4185}\\x{4188}-\\x{418B}\\x{418D}-\\x{41AD}\\x{41AF}-\\x{41B3}' .\n'\\x{41B5}-\\x{41C3}\\x{41C5}-\\x{41C9}\\x{41CB}-\\x{41F2}\\x{41F5}-\\x{41FE}\\x{4200}-\\x{4227}\\x{422A}-\\x{4246}' .\n'\\x{4248}-\\x{4263}\\x{4265}-\\x{428B}\\x{428D}-\\x{42A1}\\x{42A3}-\\x{42C4}\\x{42C8}-\\x{42DC}\\x{42DE}-\\x{430A}' .\n'\\x{430C}-\\x{4335}\\x{4337}\\x{4342}-\\x{435F}\\x{4361}-\\x{439A}\\x{439C}-\\x{439D}\\x{439F}-\\x{43A4}' .\n'\\x{43A6}-\\x{43EC}\\x{43EF}-\\x{4405}\\x{4407}-\\x{4429}\\x{442B}-\\x{4455}\\x{4457}-\\x{4468}\\x{446A}-\\x{446D}' .\n'\\x{446F}-\\x{4476}\\x{4479}-\\x{447D}\\x{447F}-\\x{4486}\\x{4488}-\\x{4490}\\x{4492}-\\x{4498}\\x{449A}-\\x{44AD}' .\n'\\x{44B0}-\\x{44BD}\\x{44C1}-\\x{44D3}\\x{44D6}-\\x{44E7}\\x{44EA}\\x{44EC}-\\x{44FA}\\x{44FC}-\\x{4541}' .\n'\\x{4543}-\\x{454F}\\x{4551}-\\x{4562}\\x{4564}-\\x{4575}\\x{4577}-\\x{45AB}\\x{45AD}-\\x{45BD}\\x{45BF}-\\x{45D5}' .\n'\\x{45D7}-\\x{45EC}\\x{45EE}-\\x{45F2}\\x{45F4}-\\x{45FA}\\x{45FC}-\\x{461A}\\x{461C}-\\x{461D}\\x{461F}-\\x{4631}' .\n'\\x{4633}-\\x{4649}\\x{464C}\\x{464E}-\\x{4652}\\x{4654}-\\x{466A}\\x{466C}-\\x{4675}\\x{4677}-\\x{467A}' .\n'\\x{467C}-\\x{4694}\\x{4696}-\\x{46A3}\\x{46A5}-\\x{46AB}\\x{46AD}-\\x{46D2}\\x{46D4}-\\x{4723}\\x{4729}-\\x{4732}' .\n'\\x{4734}-\\x{4758}\\x{475A}\\x{475C}-\\x{478B}\\x{478D}\\x{4791}-\\x{47B1}\\x{47B3}-\\x{47F1}' .\n'\\x{47F3}-\\x{480B}\\x{480D}-\\x{4815}\\x{4817}-\\x{4839}\\x{483B}-\\x{4870}\\x{4872}-\\x{487A}\\x{487C}-\\x{487F}' .\n'\\x{4883}-\\x{488E}\\x{4890}-\\x{4896}\\x{4899}-\\x{48A2}\\x{48A4}-\\x{48B9}\\x{48BB}-\\x{48C8}\\x{48CA}-\\x{48D1}' .\n'\\x{48D3}-\\x{48E5}\\x{48E7}-\\x{48F2}\\x{48F4}-\\x{48FF}\\x{4901}-\\x{4922}\\x{4924}-\\x{4928}\\x{492A}-\\x{4931}' .\n'\\x{4933}-\\x{495B}\\x{495D}-\\x{4978}\\x{497A}\\x{497D}\\x{4982}-\\x{4983}\\x{4985}-\\x{49A8}' .\n'\\x{49AA}-\\x{49AF}\\x{49B1}-\\x{49B7}\\x{49B9}-\\x{49BD}\\x{49C1}-\\x{49C7}\\x{49C9}-\\x{49CE}\\x{49D0}-\\x{49E8}' .\n'\\x{49EA}\\x{49EC}\\x{49EE}-\\x{4A19}\\x{4A1B}-\\x{4A43}\\x{4A45}-\\x{4A4D}\\x{4A4F}-\\x{4A9E}' .\n'\\x{4AA0}-\\x{4AA9}\\x{4AAB}-\\x{4B4E}\\x{4B50}-\\x{4B5B}\\x{4B5D}-\\x{4B69}\\x{4B6B}-\\x{4BC2}\\x{4BC6}-\\x{4BE8}' .\n'\\x{4BEA}-\\x{4BFA}\\x{4BFC}-\\x{4C06}\\x{4C08}-\\x{4C2D}\\x{4C2F}-\\x{4C32}\\x{4C34}-\\x{4C35}\\x{4C37}-\\x{4C69}' .\n'\\x{4C6B}-\\x{4C73}\\x{4C75}-\\x{4C86}\\x{4C88}-\\x{4C97}\\x{4C99}-\\x{4C9C}\\x{4C9F}-\\x{4CA3}\\x{4CA5}-\\x{4CB5}' .\n'\\x{4CB7}-\\x{4CF8}\\x{4CFA}-\\x{4D27}\\x{4D29}-\\x{4DAC}\\x{4DAE}-\\x{4DB1}\\x{4DB3}-\\x{4DB5}\\x{4E00}-\\x{4E54}' .\n'\\x{4E56}-\\x{4E89}\\x{4E8B}-\\x{4EEC}\\x{4EEE}-\\x{4FAC}\\x{4FAE}-\\x{503C}\\x{503E}-\\x{51E5}\\x{51E7}-\\x{5270}' .\n'\\x{5272}-\\x{56A1}\\x{56A3}-\\x{5840}\\x{5842}-\\x{58B5}\\x{58B7}-\\x{58CB}\\x{58CD}-\\x{5BC8}\\x{5BCA}-\\x{5C01}' .\n'\\x{5C03}-\\x{5C25}\\x{5C27}-\\x{5D5B}\\x{5D5D}-\\x{5F08}\\x{5F0A}-\\x{61F3}\\x{61F5}-\\x{63BA}\\x{63BC}-\\x{6441}' .\n'\\x{6443}-\\x{657C}\\x{657E}-\\x{663E}\\x{6640}-\\x{66FC}\\x{66FE}-\\x{6728}\\x{672A}-\\x{6766}\\x{6768}-\\x{67A8}' .\n'\\x{67AA}-\\x{685B}\\x{685D}-\\x{685E}\\x{6860}-\\x{68B9}\\x{68BB}-\\x{6AC8}\\x{6ACA}-\\x{6BB0}\\x{6BB2}-\\x{6C16}' .\n'\\x{6C18}-\\x{6D9B}\\x{6D9D}-\\x{6E12}\\x{6E14}-\\x{6E8B}\\x{6E8D}-\\x{704D}\\x{704F}-\\x{7113}\\x{7115}-\\x{713B}' .\n'\\x{713D}-\\x{7154}\\x{7156}-\\x{729F}\\x{72A1}-\\x{731E}\\x{7320}-\\x{7362}\\x{7364}-\\x{7533}\\x{7535}-\\x{7551}' .\n'\\x{7553}-\\x{7572}\\x{7574}-\\x{75E8}\\x{75EA}-\\x{7679}\\x{767B}-\\x{783E}\\x{7840}-\\x{7A62}\\x{7A64}-\\x{7AC2}' .\n'\\x{7AC4}-\\x{7B06}\\x{7B08}-\\x{7B79}\\x{7B7B}-\\x{7BCE}\\x{7BD0}-\\x{7D99}\\x{7D9B}-\\x{7E49}\\x{7E4C}-\\x{8132}' .\n'\\x{8134}\\x{8136}-\\x{81D2}\\x{81D4}-\\x{8216}\\x{8218}-\\x{822D}\\x{822F}-\\x{83B4}\\x{83B6}-\\x{841F}' .\n'\\x{8421}-\\x{86CC}\\x{86CE}-\\x{874A}\\x{874C}-\\x{877E}\\x{8780}-\\x{8A32}\\x{8A34}-\\x{8B71}\\x{8B73}-\\x{8B8E}' .\n'\\x{8B90}-\\x{8DE4}\\x{8DE6}-\\x{8E9A}\\x{8E9C}-\\x{8EE1}\\x{8EE4}-\\x{8F0B}\\x{8F0D}-\\x{8FB9}\\x{8FBB}-\\x{9038}' .\n'\\x{903A}-\\x{9196}\\x{9198}-\\x{91A3}\\x{91A5}-\\x{91B7}\\x{91B9}-\\x{91C7}\\x{91C9}-\\x{91E0}\\x{91E2}-\\x{91FB}' .\n'\\x{91FD}-\\x{922B}\\x{922D}-\\x{9270}\\x{9272}-\\x{9420}\\x{9422}-\\x{9664}\\x{9666}-\\x{9679}\\x{967B}-\\x{9770}' .\n'\\x{9772}-\\x{982B}\\x{982D}-\\x{98ED}\\x{98EF}-\\x{99C4}\\x{99C6}-\\x{9A11}\\x{9A14}-\\x{9A27}\\x{9A29}-\\x{9D0D}' .\n'\\x{9D0F}-\\x{9D2B}\\x{9D2D}-\\x{9D8E}\\x{9D90}-\\x{9DC5}\\x{9DC7}-\\x{9E77}\\x{9E79}-\\x{9EB8}\\x{9EBB}-\\x{9F20}' .\n'\\x{9F22}-\\x{9F61}\\x{9F63}-\\x{9FA5}\\x{FA28}]{1,20}$/iu',\n    6 => '/^[\\x{002d}0-9A-Za-z]{1,63}$/iu',\n    7 => '/^[\\x{00A1}-\\x{00FF}]{1,63}$/iu',\n    8 => '/^[\\x{0100}-\\x{017f}]{1,63}$/iu',\n    9 => '/^[\\x{0180}-\\x{024f}]{1,63}$/iu',\n    10 => '/^[\\x{0250}-\\x{02af}]{1,63}$/iu',\n    11 => '/^[\\x{02b0}-\\x{02ff}]{1,63}$/iu',\n    12 => '/^[\\x{0300}-\\x{036f}]{1,63}$/iu',\n    13 => '/^[\\x{0370}-\\x{03ff}]{1,63}$/iu',\n    14 => '/^[\\x{0400}-\\x{04ff}]{1,63}$/iu',\n    15 => '/^[\\x{0500}-\\x{052f}]{1,63}$/iu',\n    16 => '/^[\\x{0530}-\\x{058F}]{1,63}$/iu',\n    17 => '/^[\\x{0590}-\\x{05FF}]{1,63}$/iu',\n    18 => '/^[\\x{0600}-\\x{06FF}]{1,63}$/iu',\n    19 => '/^[\\x{0700}-\\x{074F}]{1,63}$/iu',\n    20 => '/^[\\x{0780}-\\x{07BF}]{1,63}$/iu',\n    21 => '/^[\\x{0900}-\\x{097F}]{1,63}$/iu',\n    22 => '/^[\\x{0980}-\\x{09FF}]{1,63}$/iu',\n    23 => '/^[\\x{0A00}-\\x{0A7F}]{1,63}$/iu',\n    24 => '/^[\\x{0A80}-\\x{0AFF}]{1,63}$/iu',\n    25 => '/^[\\x{0B00}-\\x{0B7F}]{1,63}$/iu',\n    26 => '/^[\\x{0B80}-\\x{0BFF}]{1,63}$/iu',\n    27 => '/^[\\x{0C00}-\\x{0C7F}]{1,63}$/iu',\n    28 => '/^[\\x{0C80}-\\x{0CFF}]{1,63}$/iu',\n    29 => '/^[\\x{0D00}-\\x{0D7F}]{1,63}$/iu',\n    30 => '/^[\\x{0D80}-\\x{0DFF}]{1,63}$/iu',\n    31 => '/^[\\x{0E00}-\\x{0E7F}]{1,63}$/iu',\n    32 => '/^[\\x{0E80}-\\x{0EFF}]{1,63}$/iu',\n    33 => '/^[\\x{0F00}-\\x{0FFF}]{1,63}$/iu',\n    34 => '/^[\\x{1000}-\\x{109F}]{1,63}$/iu',\n    35 => '/^[\\x{10A0}-\\x{10FF}]{1,63}$/iu',\n    36 => '/^[\\x{1100}-\\x{11FF}]{1,63}$/iu',\n    37 => '/^[\\x{1200}-\\x{137F}]{1,63}$/iu',\n    38 => '/^[\\x{13A0}-\\x{13FF}]{1,63}$/iu',\n    39 => '/^[\\x{1400}-\\x{167F}]{1,63}$/iu',\n    40 => '/^[\\x{1680}-\\x{169F}]{1,63}$/iu',\n    41 => '/^[\\x{16A0}-\\x{16FF}]{1,63}$/iu',\n    42 => '/^[\\x{1700}-\\x{171F}]{1,63}$/iu',\n    43 => '/^[\\x{1720}-\\x{173F}]{1,63}$/iu',\n    44 => '/^[\\x{1740}-\\x{175F}]{1,63}$/iu',\n    45 => '/^[\\x{1760}-\\x{177F}]{1,63}$/iu',\n    46 => '/^[\\x{1780}-\\x{17FF}]{1,63}$/iu',\n    47 => '/^[\\x{1800}-\\x{18AF}]{1,63}$/iu',\n    48 => '/^[\\x{1E00}-\\x{1EFF}]{1,63}$/iu',\n    49 => '/^[\\x{1F00}-\\x{1FFF}]{1,63}$/iu',\n    50 => '/^[\\x{2070}-\\x{209F}]{1,63}$/iu',\n    51 => '/^[\\x{2100}-\\x{214F}]{1,63}$/iu',\n    52 => '/^[\\x{2150}-\\x{218F}]{1,63}$/iu',\n    53 => '/^[\\x{2460}-\\x{24FF}]{1,63}$/iu',\n    54 => '/^[\\x{2E80}-\\x{2EFF}]{1,63}$/iu',\n    55 => '/^[\\x{2F00}-\\x{2FDF}]{1,63}$/iu',\n    56 => '/^[\\x{2FF0}-\\x{2FFF}]{1,63}$/iu',\n    57 => '/^[\\x{3040}-\\x{309F}]{1,63}$/iu',\n    58 => '/^[\\x{30A0}-\\x{30FF}]{1,63}$/iu',\n    59 => '/^[\\x{3100}-\\x{312F}]{1,63}$/iu',\n    60 => '/^[\\x{3130}-\\x{318F}]{1,63}$/iu',\n    61 => '/^[\\x{3190}-\\x{319F}]{1,63}$/iu',\n    62 => '/^[\\x{31A0}-\\x{31BF}]{1,63}$/iu',\n    63 => '/^[\\x{31F0}-\\x{31FF}]{1,63}$/iu',\n    64 => '/^[\\x{3200}-\\x{32FF}]{1,63}$/iu',\n    65 => '/^[\\x{3300}-\\x{33FF}]{1,63}$/iu',\n    66 => '/^[\\x{3400}-\\x{4DBF}]{1,63}$/iu',\n    67 => '/^[\\x{4E00}-\\x{9FFF}]{1,63}$/iu',\n    68 => '/^[\\x{A000}-\\x{A48F}]{1,63}$/iu',\n    69 => '/^[\\x{A490}-\\x{A4CF}]{1,63}$/iu',\n    70 => '/^[\\x{AC00}-\\x{D7AF}]{1,63}$/iu',\n    73 => '/^[\\x{F900}-\\x{FAFF}]{1,63}$/iu',\n    74 => '/^[\\x{FB00}-\\x{FB4F}]{1,63}$/iu',\n    75 => '/^[\\x{FB50}-\\x{FDFF}]{1,63}$/iu',\n    76 => '/^[\\x{FE20}-\\x{FE2F}]{1,63}$/iu',\n    77 => '/^[\\x{FE70}-\\x{FEFF}]{1,63}$/iu',\n    78 => '/^[\\x{FF00}-\\x{FFEF}]{1,63}$/iu',\n    79 => '/^[\\x{20000}-\\x{2A6DF}]{1,63}$/iu',\n    80 => '/^[\\x{2F800}-\\x{2FA1F}]{1,63}$/iu',\n];\n"
  },
  {
    "path": "src/Hostname/Jp.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Hostname;\n\n/**\n * Resource file for japanese idn validation\n */\nreturn [\n    1  => '/^[\\x{002d}0-9a-z\\x{3005}-\\x{3007}\\x{3041}-\\x{3093}\\x{309D}\\x{309E}' .\n          '\\x{30A1}-\\x{30F6}\\x{30FC}' .\n          '\\x{30FD}\\x{30FE}\\x{4E00}\\x{4E01}\\x{4E03}\\x{4E07}\\x{4E08}\\x{4E09}\\x{4E0A}' .\n          '\\x{4E0B}\\x{4E0D}\\x{4E0E}\\x{4E10}\\x{4E11}\\x{4E14}\\x{4E15}\\x{4E16}\\x{4E17}' .\n          '\\x{4E18}\\x{4E19}\\x{4E1E}\\x{4E21}\\x{4E26}\\x{4E2A}\\x{4E2D}\\x{4E31}\\x{4E32}' .\n          '\\x{4E36}\\x{4E38}\\x{4E39}\\x{4E3B}\\x{4E3C}\\x{4E3F}\\x{4E42}\\x{4E43}\\x{4E45}' .\n          '\\x{4E4B}\\x{4E4D}\\x{4E4E}\\x{4E4F}\\x{4E55}\\x{4E56}\\x{4E57}\\x{4E58}\\x{4E59}' .\n          '\\x{4E5D}\\x{4E5E}\\x{4E5F}\\x{4E62}\\x{4E71}\\x{4E73}\\x{4E7E}\\x{4E80}\\x{4E82}' .\n          '\\x{4E85}\\x{4E86}\\x{4E88}\\x{4E89}\\x{4E8A}\\x{4E8B}\\x{4E8C}\\x{4E8E}\\x{4E91}' .\n          '\\x{4E92}\\x{4E94}\\x{4E95}\\x{4E98}\\x{4E99}\\x{4E9B}\\x{4E9C}\\x{4E9E}\\x{4E9F}' .\n          '\\x{4EA0}\\x{4EA1}\\x{4EA2}\\x{4EA4}\\x{4EA5}\\x{4EA6}\\x{4EA8}\\x{4EAB}\\x{4EAC}' .\n          '\\x{4EAD}\\x{4EAE}\\x{4EB0}\\x{4EB3}\\x{4EB6}\\x{4EBA}\\x{4EC0}\\x{4EC1}\\x{4EC2}' .\n          '\\x{4EC4}\\x{4EC6}\\x{4EC7}\\x{4ECA}\\x{4ECB}\\x{4ECD}\\x{4ECE}\\x{4ECF}\\x{4ED4}' .\n          '\\x{4ED5}\\x{4ED6}\\x{4ED7}\\x{4ED8}\\x{4ED9}\\x{4EDD}\\x{4EDE}\\x{4EDF}\\x{4EE3}' .\n          '\\x{4EE4}\\x{4EE5}\\x{4EED}\\x{4EEE}\\x{4EF0}\\x{4EF2}\\x{4EF6}\\x{4EF7}\\x{4EFB}' .\n          '\\x{4F01}\\x{4F09}\\x{4F0A}\\x{4F0D}\\x{4F0E}\\x{4F0F}\\x{4F10}\\x{4F11}\\x{4F1A}' .\n          '\\x{4F1C}\\x{4F1D}\\x{4F2F}\\x{4F30}\\x{4F34}\\x{4F36}\\x{4F38}\\x{4F3A}\\x{4F3C}' .\n          '\\x{4F3D}\\x{4F43}\\x{4F46}\\x{4F47}\\x{4F4D}\\x{4F4E}\\x{4F4F}\\x{4F50}\\x{4F51}' .\n          '\\x{4F53}\\x{4F55}\\x{4F57}\\x{4F59}\\x{4F5A}\\x{4F5B}\\x{4F5C}\\x{4F5D}\\x{4F5E}' .\n          '\\x{4F69}\\x{4F6F}\\x{4F70}\\x{4F73}\\x{4F75}\\x{4F76}\\x{4F7B}\\x{4F7C}\\x{4F7F}' .\n          '\\x{4F83}\\x{4F86}\\x{4F88}\\x{4F8B}\\x{4F8D}\\x{4F8F}\\x{4F91}\\x{4F96}\\x{4F98}' .\n          '\\x{4F9B}\\x{4F9D}\\x{4FA0}\\x{4FA1}\\x{4FAB}\\x{4FAD}\\x{4FAE}\\x{4FAF}\\x{4FB5}' .\n          '\\x{4FB6}\\x{4FBF}\\x{4FC2}\\x{4FC3}\\x{4FC4}\\x{4FCA}\\x{4FCE}\\x{4FD0}\\x{4FD1}' .\n          '\\x{4FD4}\\x{4FD7}\\x{4FD8}\\x{4FDA}\\x{4FDB}\\x{4FDD}\\x{4FDF}\\x{4FE1}\\x{4FE3}' .\n          '\\x{4FE4}\\x{4FE5}\\x{4FEE}\\x{4FEF}\\x{4FF3}\\x{4FF5}\\x{4FF6}\\x{4FF8}\\x{4FFA}' .\n          '\\x{4FFE}\\x{5005}\\x{5006}\\x{5009}\\x{500B}\\x{500D}\\x{500F}\\x{5011}\\x{5012}' .\n          '\\x{5014}\\x{5016}\\x{5019}\\x{501A}\\x{501F}\\x{5021}\\x{5023}\\x{5024}\\x{5025}' .\n          '\\x{5026}\\x{5028}\\x{5029}\\x{502A}\\x{502B}\\x{502C}\\x{502D}\\x{5036}\\x{5039}' .\n          '\\x{5043}\\x{5047}\\x{5048}\\x{5049}\\x{504F}\\x{5050}\\x{5055}\\x{5056}\\x{505A}' .\n          '\\x{505C}\\x{5065}\\x{506C}\\x{5072}\\x{5074}\\x{5075}\\x{5076}\\x{5078}\\x{507D}' .\n          '\\x{5080}\\x{5085}\\x{508D}\\x{5091}\\x{5098}\\x{5099}\\x{509A}\\x{50AC}\\x{50AD}' .\n          '\\x{50B2}\\x{50B3}\\x{50B4}\\x{50B5}\\x{50B7}\\x{50BE}\\x{50C2}\\x{50C5}\\x{50C9}' .\n          '\\x{50CA}\\x{50CD}\\x{50CF}\\x{50D1}\\x{50D5}\\x{50D6}\\x{50DA}\\x{50DE}\\x{50E3}' .\n          '\\x{50E5}\\x{50E7}\\x{50ED}\\x{50EE}\\x{50F5}\\x{50F9}\\x{50FB}\\x{5100}\\x{5101}' .\n          '\\x{5102}\\x{5104}\\x{5109}\\x{5112}\\x{5114}\\x{5115}\\x{5116}\\x{5118}\\x{511A}' .\n          '\\x{511F}\\x{5121}\\x{512A}\\x{5132}\\x{5137}\\x{513A}\\x{513B}\\x{513C}\\x{513F}' .\n          '\\x{5140}\\x{5141}\\x{5143}\\x{5144}\\x{5145}\\x{5146}\\x{5147}\\x{5148}\\x{5149}' .\n          '\\x{514B}\\x{514C}\\x{514D}\\x{514E}\\x{5150}\\x{5152}\\x{5154}\\x{515A}\\x{515C}' .\n          '\\x{5162}\\x{5165}\\x{5168}\\x{5169}\\x{516A}\\x{516B}\\x{516C}\\x{516D}\\x{516E}' .\n          '\\x{5171}\\x{5175}\\x{5176}\\x{5177}\\x{5178}\\x{517C}\\x{5180}\\x{5182}\\x{5185}' .\n          '\\x{5186}\\x{5189}\\x{518A}\\x{518C}\\x{518D}\\x{518F}\\x{5190}\\x{5191}\\x{5192}' .\n          '\\x{5193}\\x{5195}\\x{5196}\\x{5197}\\x{5199}\\x{51A0}\\x{51A2}\\x{51A4}\\x{51A5}' .\n          '\\x{51A6}\\x{51A8}\\x{51A9}\\x{51AA}\\x{51AB}\\x{51AC}\\x{51B0}\\x{51B1}\\x{51B2}' .\n          '\\x{51B3}\\x{51B4}\\x{51B5}\\x{51B6}\\x{51B7}\\x{51BD}\\x{51C4}\\x{51C5}\\x{51C6}' .\n          '\\x{51C9}\\x{51CB}\\x{51CC}\\x{51CD}\\x{51D6}\\x{51DB}\\x{51DC}\\x{51DD}\\x{51E0}' .\n          '\\x{51E1}\\x{51E6}\\x{51E7}\\x{51E9}\\x{51EA}\\x{51ED}\\x{51F0}\\x{51F1}\\x{51F5}' .\n          '\\x{51F6}\\x{51F8}\\x{51F9}\\x{51FA}\\x{51FD}\\x{51FE}\\x{5200}\\x{5203}\\x{5204}' .\n          '\\x{5206}\\x{5207}\\x{5208}\\x{520A}\\x{520B}\\x{520E}\\x{5211}\\x{5214}\\x{5217}' .\n          '\\x{521D}\\x{5224}\\x{5225}\\x{5227}\\x{5229}\\x{522A}\\x{522E}\\x{5230}\\x{5233}' .\n          '\\x{5236}\\x{5237}\\x{5238}\\x{5239}\\x{523A}\\x{523B}\\x{5243}\\x{5244}\\x{5247}' .\n          '\\x{524A}\\x{524B}\\x{524C}\\x{524D}\\x{524F}\\x{5254}\\x{5256}\\x{525B}\\x{525E}' .\n          '\\x{5263}\\x{5264}\\x{5265}\\x{5269}\\x{526A}\\x{526F}\\x{5270}\\x{5271}\\x{5272}' .\n          '\\x{5273}\\x{5274}\\x{5275}\\x{527D}\\x{527F}\\x{5283}\\x{5287}\\x{5288}\\x{5289}' .\n          '\\x{528D}\\x{5291}\\x{5292}\\x{5294}\\x{529B}\\x{529F}\\x{52A0}\\x{52A3}\\x{52A9}' .\n          '\\x{52AA}\\x{52AB}\\x{52AC}\\x{52AD}\\x{52B1}\\x{52B4}\\x{52B5}\\x{52B9}\\x{52BC}' .\n          '\\x{52BE}\\x{52C1}\\x{52C3}\\x{52C5}\\x{52C7}\\x{52C9}\\x{52CD}\\x{52D2}\\x{52D5}' .\n          '\\x{52D7}\\x{52D8}\\x{52D9}\\x{52DD}\\x{52DE}\\x{52DF}\\x{52E0}\\x{52E2}\\x{52E3}' .\n          '\\x{52E4}\\x{52E6}\\x{52E7}\\x{52F2}\\x{52F3}\\x{52F5}\\x{52F8}\\x{52F9}\\x{52FA}' .\n          '\\x{52FE}\\x{52FF}\\x{5301}\\x{5302}\\x{5305}\\x{5306}\\x{5308}\\x{530D}\\x{530F}' .\n          '\\x{5310}\\x{5315}\\x{5316}\\x{5317}\\x{5319}\\x{531A}\\x{531D}\\x{5320}\\x{5321}' .\n          '\\x{5323}\\x{532A}\\x{532F}\\x{5331}\\x{5333}\\x{5338}\\x{5339}\\x{533A}\\x{533B}' .\n          '\\x{533F}\\x{5340}\\x{5341}\\x{5343}\\x{5345}\\x{5346}\\x{5347}\\x{5348}\\x{5349}' .\n          '\\x{534A}\\x{534D}\\x{5351}\\x{5352}\\x{5353}\\x{5354}\\x{5357}\\x{5358}\\x{535A}' .\n          '\\x{535C}\\x{535E}\\x{5360}\\x{5366}\\x{5369}\\x{536E}\\x{536F}\\x{5370}\\x{5371}' .\n          '\\x{5373}\\x{5374}\\x{5375}\\x{5377}\\x{5378}\\x{537B}\\x{537F}\\x{5382}\\x{5384}' .\n          '\\x{5396}\\x{5398}\\x{539A}\\x{539F}\\x{53A0}\\x{53A5}\\x{53A6}\\x{53A8}\\x{53A9}' .\n          '\\x{53AD}\\x{53AE}\\x{53B0}\\x{53B3}\\x{53B6}\\x{53BB}\\x{53C2}\\x{53C3}\\x{53C8}' .\n          '\\x{53C9}\\x{53CA}\\x{53CB}\\x{53CC}\\x{53CD}\\x{53CE}\\x{53D4}\\x{53D6}\\x{53D7}' .\n          '\\x{53D9}\\x{53DB}\\x{53DF}\\x{53E1}\\x{53E2}\\x{53E3}\\x{53E4}\\x{53E5}\\x{53E8}' .\n          '\\x{53E9}\\x{53EA}\\x{53EB}\\x{53EC}\\x{53ED}\\x{53EE}\\x{53EF}\\x{53F0}\\x{53F1}' .\n          '\\x{53F2}\\x{53F3}\\x{53F6}\\x{53F7}\\x{53F8}\\x{53FA}\\x{5401}\\x{5403}\\x{5404}' .\n          '\\x{5408}\\x{5409}\\x{540A}\\x{540B}\\x{540C}\\x{540D}\\x{540E}\\x{540F}\\x{5410}' .\n          '\\x{5411}\\x{541B}\\x{541D}\\x{541F}\\x{5420}\\x{5426}\\x{5429}\\x{542B}\\x{542C}' .\n          '\\x{542D}\\x{542E}\\x{5436}\\x{5438}\\x{5439}\\x{543B}\\x{543C}\\x{543D}\\x{543E}' .\n          '\\x{5440}\\x{5442}\\x{5446}\\x{5448}\\x{5449}\\x{544A}\\x{544E}\\x{5451}\\x{545F}' .\n          '\\x{5468}\\x{546A}\\x{5470}\\x{5471}\\x{5473}\\x{5475}\\x{5476}\\x{5477}\\x{547B}' .\n          '\\x{547C}\\x{547D}\\x{5480}\\x{5484}\\x{5486}\\x{548B}\\x{548C}\\x{548E}\\x{548F}' .\n          '\\x{5490}\\x{5492}\\x{54A2}\\x{54A4}\\x{54A5}\\x{54A8}\\x{54AB}\\x{54AC}\\x{54AF}' .\n          '\\x{54B2}\\x{54B3}\\x{54B8}\\x{54BC}\\x{54BD}\\x{54BE}\\x{54C0}\\x{54C1}\\x{54C2}' .\n          '\\x{54C4}\\x{54C7}\\x{54C8}\\x{54C9}\\x{54D8}\\x{54E1}\\x{54E2}\\x{54E5}\\x{54E6}' .\n          '\\x{54E8}\\x{54E9}\\x{54ED}\\x{54EE}\\x{54F2}\\x{54FA}\\x{54FD}\\x{5504}\\x{5506}' .\n          '\\x{5507}\\x{550F}\\x{5510}\\x{5514}\\x{5516}\\x{552E}\\x{552F}\\x{5531}\\x{5533}' .\n          '\\x{5538}\\x{5539}\\x{553E}\\x{5540}\\x{5544}\\x{5545}\\x{5546}\\x{554C}\\x{554F}' .\n          '\\x{5553}\\x{5556}\\x{5557}\\x{555C}\\x{555D}\\x{5563}\\x{557B}\\x{557C}\\x{557E}' .\n          '\\x{5580}\\x{5583}\\x{5584}\\x{5587}\\x{5589}\\x{558A}\\x{558B}\\x{5598}\\x{5599}' .\n          '\\x{559A}\\x{559C}\\x{559D}\\x{559E}\\x{559F}\\x{55A7}\\x{55A8}\\x{55A9}\\x{55AA}' .\n          '\\x{55AB}\\x{55AC}\\x{55AE}\\x{55B0}\\x{55B6}\\x{55C4}\\x{55C5}\\x{55C7}\\x{55D4}' .\n          '\\x{55DA}\\x{55DC}\\x{55DF}\\x{55E3}\\x{55E4}\\x{55F7}\\x{55F9}\\x{55FD}\\x{55FE}' .\n          '\\x{5606}\\x{5609}\\x{5614}\\x{5616}\\x{5617}\\x{5618}\\x{561B}\\x{5629}\\x{562F}' .\n          '\\x{5631}\\x{5632}\\x{5634}\\x{5636}\\x{5638}\\x{5642}\\x{564C}\\x{564E}\\x{5650}' .\n          '\\x{565B}\\x{5664}\\x{5668}\\x{566A}\\x{566B}\\x{566C}\\x{5674}\\x{5678}\\x{567A}' .\n          '\\x{5680}\\x{5686}\\x{5687}\\x{568A}\\x{568F}\\x{5694}\\x{56A0}\\x{56A2}\\x{56A5}' .\n          '\\x{56AE}\\x{56B4}\\x{56B6}\\x{56BC}\\x{56C0}\\x{56C1}\\x{56C2}\\x{56C3}\\x{56C8}' .\n          '\\x{56CE}\\x{56D1}\\x{56D3}\\x{56D7}\\x{56D8}\\x{56DA}\\x{56DB}\\x{56DE}\\x{56E0}' .\n          '\\x{56E3}\\x{56EE}\\x{56F0}\\x{56F2}\\x{56F3}\\x{56F9}\\x{56FA}\\x{56FD}\\x{56FF}' .\n          '\\x{5700}\\x{5703}\\x{5704}\\x{5708}\\x{5709}\\x{570B}\\x{570D}\\x{570F}\\x{5712}' .\n          '\\x{5713}\\x{5716}\\x{5718}\\x{571C}\\x{571F}\\x{5726}\\x{5727}\\x{5728}\\x{572D}' .\n          '\\x{5730}\\x{5737}\\x{5738}\\x{573B}\\x{5740}\\x{5742}\\x{5747}\\x{574A}\\x{574E}' .\n          '\\x{574F}\\x{5750}\\x{5751}\\x{5761}\\x{5764}\\x{5766}\\x{5769}\\x{576A}\\x{577F}' .\n          '\\x{5782}\\x{5788}\\x{5789}\\x{578B}\\x{5793}\\x{57A0}\\x{57A2}\\x{57A3}\\x{57A4}' .\n          '\\x{57AA}\\x{57B0}\\x{57B3}\\x{57C0}\\x{57C3}\\x{57C6}\\x{57CB}\\x{57CE}\\x{57D2}' .\n          '\\x{57D3}\\x{57D4}\\x{57D6}\\x{57DC}\\x{57DF}\\x{57E0}\\x{57E3}\\x{57F4}\\x{57F7}' .\n          '\\x{57F9}\\x{57FA}\\x{57FC}\\x{5800}\\x{5802}\\x{5805}\\x{5806}\\x{580A}\\x{580B}' .\n          '\\x{5815}\\x{5819}\\x{581D}\\x{5821}\\x{5824}\\x{582A}\\x{582F}\\x{5830}\\x{5831}' .\n          '\\x{5834}\\x{5835}\\x{583A}\\x{583D}\\x{5840}\\x{5841}\\x{584A}\\x{584B}\\x{5851}' .\n          '\\x{5852}\\x{5854}\\x{5857}\\x{5858}\\x{5859}\\x{585A}\\x{585E}\\x{5862}\\x{5869}' .\n          '\\x{586B}\\x{5870}\\x{5872}\\x{5875}\\x{5879}\\x{587E}\\x{5883}\\x{5885}\\x{5893}' .\n          '\\x{5897}\\x{589C}\\x{589F}\\x{58A8}\\x{58AB}\\x{58AE}\\x{58B3}\\x{58B8}\\x{58B9}' .\n          '\\x{58BA}\\x{58BB}\\x{58BE}\\x{58C1}\\x{58C5}\\x{58C7}\\x{58CA}\\x{58CC}\\x{58D1}' .\n          '\\x{58D3}\\x{58D5}\\x{58D7}\\x{58D8}\\x{58D9}\\x{58DC}\\x{58DE}\\x{58DF}\\x{58E4}' .\n          '\\x{58E5}\\x{58EB}\\x{58EC}\\x{58EE}\\x{58EF}\\x{58F0}\\x{58F1}\\x{58F2}\\x{58F7}' .\n          '\\x{58F9}\\x{58FA}\\x{58FB}\\x{58FC}\\x{58FD}\\x{5902}\\x{5909}\\x{590A}\\x{590F}' .\n          '\\x{5910}\\x{5915}\\x{5916}\\x{5918}\\x{5919}\\x{591A}\\x{591B}\\x{591C}\\x{5922}' .\n          '\\x{5925}\\x{5927}\\x{5929}\\x{592A}\\x{592B}\\x{592C}\\x{592D}\\x{592E}\\x{5931}' .\n          '\\x{5932}\\x{5937}\\x{5938}\\x{593E}\\x{5944}\\x{5947}\\x{5948}\\x{5949}\\x{594E}' .\n          '\\x{594F}\\x{5950}\\x{5951}\\x{5954}\\x{5955}\\x{5957}\\x{5958}\\x{595A}\\x{5960}' .\n          '\\x{5962}\\x{5965}\\x{5967}\\x{5968}\\x{5969}\\x{596A}\\x{596C}\\x{596E}\\x{5973}' .\n          '\\x{5974}\\x{5978}\\x{597D}\\x{5981}\\x{5982}\\x{5983}\\x{5984}\\x{598A}\\x{598D}' .\n          '\\x{5993}\\x{5996}\\x{5999}\\x{599B}\\x{599D}\\x{59A3}\\x{59A5}\\x{59A8}\\x{59AC}' .\n          '\\x{59B2}\\x{59B9}\\x{59BB}\\x{59BE}\\x{59C6}\\x{59C9}\\x{59CB}\\x{59D0}\\x{59D1}' .\n          '\\x{59D3}\\x{59D4}\\x{59D9}\\x{59DA}\\x{59DC}\\x{59E5}\\x{59E6}\\x{59E8}\\x{59EA}' .\n          '\\x{59EB}\\x{59F6}\\x{59FB}\\x{59FF}\\x{5A01}\\x{5A03}\\x{5A09}\\x{5A11}\\x{5A18}' .\n          '\\x{5A1A}\\x{5A1C}\\x{5A1F}\\x{5A20}\\x{5A25}\\x{5A29}\\x{5A2F}\\x{5A35}\\x{5A36}' .\n          '\\x{5A3C}\\x{5A40}\\x{5A41}\\x{5A46}\\x{5A49}\\x{5A5A}\\x{5A62}\\x{5A66}\\x{5A6A}' .\n          '\\x{5A6C}\\x{5A7F}\\x{5A92}\\x{5A9A}\\x{5A9B}\\x{5ABC}\\x{5ABD}\\x{5ABE}\\x{5AC1}' .\n          '\\x{5AC2}\\x{5AC9}\\x{5ACB}\\x{5ACC}\\x{5AD0}\\x{5AD6}\\x{5AD7}\\x{5AE1}\\x{5AE3}' .\n          '\\x{5AE6}\\x{5AE9}\\x{5AFA}\\x{5AFB}\\x{5B09}\\x{5B0B}\\x{5B0C}\\x{5B16}\\x{5B22}' .\n          '\\x{5B2A}\\x{5B2C}\\x{5B30}\\x{5B32}\\x{5B36}\\x{5B3E}\\x{5B40}\\x{5B43}\\x{5B45}' .\n          '\\x{5B50}\\x{5B51}\\x{5B54}\\x{5B55}\\x{5B57}\\x{5B58}\\x{5B5A}\\x{5B5B}\\x{5B5C}' .\n          '\\x{5B5D}\\x{5B5F}\\x{5B63}\\x{5B64}\\x{5B65}\\x{5B66}\\x{5B69}\\x{5B6B}\\x{5B70}' .\n          '\\x{5B71}\\x{5B73}\\x{5B75}\\x{5B78}\\x{5B7A}\\x{5B80}\\x{5B83}\\x{5B85}\\x{5B87}' .\n          '\\x{5B88}\\x{5B89}\\x{5B8B}\\x{5B8C}\\x{5B8D}\\x{5B8F}\\x{5B95}\\x{5B97}\\x{5B98}' .\n          '\\x{5B99}\\x{5B9A}\\x{5B9B}\\x{5B9C}\\x{5B9D}\\x{5B9F}\\x{5BA2}\\x{5BA3}\\x{5BA4}' .\n          '\\x{5BA5}\\x{5BA6}\\x{5BAE}\\x{5BB0}\\x{5BB3}\\x{5BB4}\\x{5BB5}\\x{5BB6}\\x{5BB8}' .\n          '\\x{5BB9}\\x{5BBF}\\x{5BC2}\\x{5BC3}\\x{5BC4}\\x{5BC5}\\x{5BC6}\\x{5BC7}\\x{5BC9}' .\n          '\\x{5BCC}\\x{5BD0}\\x{5BD2}\\x{5BD3}\\x{5BD4}\\x{5BDB}\\x{5BDD}\\x{5BDE}\\x{5BDF}' .\n          '\\x{5BE1}\\x{5BE2}\\x{5BE4}\\x{5BE5}\\x{5BE6}\\x{5BE7}\\x{5BE8}\\x{5BE9}\\x{5BEB}' .\n          '\\x{5BEE}\\x{5BF0}\\x{5BF3}\\x{5BF5}\\x{5BF6}\\x{5BF8}\\x{5BFA}\\x{5BFE}\\x{5BFF}' .\n          '\\x{5C01}\\x{5C02}\\x{5C04}\\x{5C05}\\x{5C06}\\x{5C07}\\x{5C08}\\x{5C09}\\x{5C0A}' .\n          '\\x{5C0B}\\x{5C0D}\\x{5C0E}\\x{5C0F}\\x{5C11}\\x{5C13}\\x{5C16}\\x{5C1A}\\x{5C20}' .\n          '\\x{5C22}\\x{5C24}\\x{5C28}\\x{5C2D}\\x{5C31}\\x{5C38}\\x{5C39}\\x{5C3A}\\x{5C3B}' .\n          '\\x{5C3C}\\x{5C3D}\\x{5C3E}\\x{5C3F}\\x{5C40}\\x{5C41}\\x{5C45}\\x{5C46}\\x{5C48}' .\n          '\\x{5C4A}\\x{5C4B}\\x{5C4D}\\x{5C4E}\\x{5C4F}\\x{5C50}\\x{5C51}\\x{5C53}\\x{5C55}' .\n          '\\x{5C5E}\\x{5C60}\\x{5C61}\\x{5C64}\\x{5C65}\\x{5C6C}\\x{5C6E}\\x{5C6F}\\x{5C71}' .\n          '\\x{5C76}\\x{5C79}\\x{5C8C}\\x{5C90}\\x{5C91}\\x{5C94}\\x{5CA1}\\x{5CA8}\\x{5CA9}' .\n          '\\x{5CAB}\\x{5CAC}\\x{5CB1}\\x{5CB3}\\x{5CB6}\\x{5CB7}\\x{5CB8}\\x{5CBB}\\x{5CBC}' .\n          '\\x{5CBE}\\x{5CC5}\\x{5CC7}\\x{5CD9}\\x{5CE0}\\x{5CE1}\\x{5CE8}\\x{5CE9}\\x{5CEA}' .\n          '\\x{5CED}\\x{5CEF}\\x{5CF0}\\x{5CF6}\\x{5CFA}\\x{5CFB}\\x{5CFD}\\x{5D07}\\x{5D0B}' .\n          '\\x{5D0E}\\x{5D11}\\x{5D14}\\x{5D15}\\x{5D16}\\x{5D17}\\x{5D18}\\x{5D19}\\x{5D1A}' .\n          '\\x{5D1B}\\x{5D1F}\\x{5D22}\\x{5D29}\\x{5D4B}\\x{5D4C}\\x{5D4E}\\x{5D50}\\x{5D52}' .\n          '\\x{5D5C}\\x{5D69}\\x{5D6C}\\x{5D6F}\\x{5D73}\\x{5D76}\\x{5D82}\\x{5D84}\\x{5D87}' .\n          '\\x{5D8B}\\x{5D8C}\\x{5D90}\\x{5D9D}\\x{5DA2}\\x{5DAC}\\x{5DAE}\\x{5DB7}\\x{5DBA}' .\n          '\\x{5DBC}\\x{5DBD}\\x{5DC9}\\x{5DCC}\\x{5DCD}\\x{5DD2}\\x{5DD3}\\x{5DD6}\\x{5DDB}' .\n          '\\x{5DDD}\\x{5DDE}\\x{5DE1}\\x{5DE3}\\x{5DE5}\\x{5DE6}\\x{5DE7}\\x{5DE8}\\x{5DEB}' .\n          '\\x{5DEE}\\x{5DF1}\\x{5DF2}\\x{5DF3}\\x{5DF4}\\x{5DF5}\\x{5DF7}\\x{5DFB}\\x{5DFD}' .\n          '\\x{5DFE}\\x{5E02}\\x{5E03}\\x{5E06}\\x{5E0B}\\x{5E0C}\\x{5E11}\\x{5E16}\\x{5E19}' .\n          '\\x{5E1A}\\x{5E1B}\\x{5E1D}\\x{5E25}\\x{5E2B}\\x{5E2D}\\x{5E2F}\\x{5E30}\\x{5E33}' .\n          '\\x{5E36}\\x{5E37}\\x{5E38}\\x{5E3D}\\x{5E40}\\x{5E43}\\x{5E44}\\x{5E45}\\x{5E47}' .\n          '\\x{5E4C}\\x{5E4E}\\x{5E54}\\x{5E55}\\x{5E57}\\x{5E5F}\\x{5E61}\\x{5E62}\\x{5E63}' .\n          '\\x{5E64}\\x{5E72}\\x{5E73}\\x{5E74}\\x{5E75}\\x{5E76}\\x{5E78}\\x{5E79}\\x{5E7A}' .\n          '\\x{5E7B}\\x{5E7C}\\x{5E7D}\\x{5E7E}\\x{5E7F}\\x{5E81}\\x{5E83}\\x{5E84}\\x{5E87}' .\n          '\\x{5E8A}\\x{5E8F}\\x{5E95}\\x{5E96}\\x{5E97}\\x{5E9A}\\x{5E9C}\\x{5EA0}\\x{5EA6}' .\n          '\\x{5EA7}\\x{5EAB}\\x{5EAD}\\x{5EB5}\\x{5EB6}\\x{5EB7}\\x{5EB8}\\x{5EC1}\\x{5EC2}' .\n          '\\x{5EC3}\\x{5EC8}\\x{5EC9}\\x{5ECA}\\x{5ECF}\\x{5ED0}\\x{5ED3}\\x{5ED6}\\x{5EDA}' .\n          '\\x{5EDB}\\x{5EDD}\\x{5EDF}\\x{5EE0}\\x{5EE1}\\x{5EE2}\\x{5EE3}\\x{5EE8}\\x{5EE9}' .\n          '\\x{5EEC}\\x{5EF0}\\x{5EF1}\\x{5EF3}\\x{5EF4}\\x{5EF6}\\x{5EF7}\\x{5EF8}\\x{5EFA}' .\n          '\\x{5EFB}\\x{5EFC}\\x{5EFE}\\x{5EFF}\\x{5F01}\\x{5F03}\\x{5F04}\\x{5F09}\\x{5F0A}' .\n          '\\x{5F0B}\\x{5F0C}\\x{5F0D}\\x{5F0F}\\x{5F10}\\x{5F11}\\x{5F13}\\x{5F14}\\x{5F15}' .\n          '\\x{5F16}\\x{5F17}\\x{5F18}\\x{5F1B}\\x{5F1F}\\x{5F25}\\x{5F26}\\x{5F27}\\x{5F29}' .\n          '\\x{5F2D}\\x{5F2F}\\x{5F31}\\x{5F35}\\x{5F37}\\x{5F38}\\x{5F3C}\\x{5F3E}\\x{5F41}' .\n          '\\x{5F48}\\x{5F4A}\\x{5F4C}\\x{5F4E}\\x{5F51}\\x{5F53}\\x{5F56}\\x{5F57}\\x{5F59}' .\n          '\\x{5F5C}\\x{5F5D}\\x{5F61}\\x{5F62}\\x{5F66}\\x{5F69}\\x{5F6A}\\x{5F6B}\\x{5F6C}' .\n          '\\x{5F6D}\\x{5F70}\\x{5F71}\\x{5F73}\\x{5F77}\\x{5F79}\\x{5F7C}\\x{5F7F}\\x{5F80}' .\n          '\\x{5F81}\\x{5F82}\\x{5F83}\\x{5F84}\\x{5F85}\\x{5F87}\\x{5F88}\\x{5F8A}\\x{5F8B}' .\n          '\\x{5F8C}\\x{5F90}\\x{5F91}\\x{5F92}\\x{5F93}\\x{5F97}\\x{5F98}\\x{5F99}\\x{5F9E}' .\n          '\\x{5FA0}\\x{5FA1}\\x{5FA8}\\x{5FA9}\\x{5FAA}\\x{5FAD}\\x{5FAE}\\x{5FB3}\\x{5FB4}' .\n          '\\x{5FB9}\\x{5FBC}\\x{5FBD}\\x{5FC3}\\x{5FC5}\\x{5FCC}\\x{5FCD}\\x{5FD6}\\x{5FD7}' .\n          '\\x{5FD8}\\x{5FD9}\\x{5FDC}\\x{5FDD}\\x{5FE0}\\x{5FE4}\\x{5FEB}\\x{5FF0}\\x{5FF1}' .\n          '\\x{5FF5}\\x{5FF8}\\x{5FFB}\\x{5FFD}\\x{5FFF}\\x{600E}\\x{600F}\\x{6010}\\x{6012}' .\n          '\\x{6015}\\x{6016}\\x{6019}\\x{601B}\\x{601C}\\x{601D}\\x{6020}\\x{6021}\\x{6025}' .\n          '\\x{6026}\\x{6027}\\x{6028}\\x{6029}\\x{602A}\\x{602B}\\x{602F}\\x{6031}\\x{603A}' .\n          '\\x{6041}\\x{6042}\\x{6043}\\x{6046}\\x{604A}\\x{604B}\\x{604D}\\x{6050}\\x{6052}' .\n          '\\x{6055}\\x{6059}\\x{605A}\\x{605F}\\x{6060}\\x{6062}\\x{6063}\\x{6064}\\x{6065}' .\n          '\\x{6068}\\x{6069}\\x{606A}\\x{606B}\\x{606C}\\x{606D}\\x{606F}\\x{6070}\\x{6075}' .\n          '\\x{6077}\\x{6081}\\x{6083}\\x{6084}\\x{6089}\\x{608B}\\x{608C}\\x{608D}\\x{6092}' .\n          '\\x{6094}\\x{6096}\\x{6097}\\x{609A}\\x{609B}\\x{609F}\\x{60A0}\\x{60A3}\\x{60A6}' .\n          '\\x{60A7}\\x{60A9}\\x{60AA}\\x{60B2}\\x{60B3}\\x{60B4}\\x{60B5}\\x{60B6}\\x{60B8}' .\n          '\\x{60BC}\\x{60BD}\\x{60C5}\\x{60C6}\\x{60C7}\\x{60D1}\\x{60D3}\\x{60D8}\\x{60DA}' .\n          '\\x{60DC}\\x{60DF}\\x{60E0}\\x{60E1}\\x{60E3}\\x{60E7}\\x{60E8}\\x{60F0}\\x{60F1}' .\n          '\\x{60F3}\\x{60F4}\\x{60F6}\\x{60F7}\\x{60F9}\\x{60FA}\\x{60FB}\\x{6100}\\x{6101}' .\n          '\\x{6103}\\x{6106}\\x{6108}\\x{6109}\\x{610D}\\x{610E}\\x{610F}\\x{6115}\\x{611A}' .\n          '\\x{611B}\\x{611F}\\x{6121}\\x{6127}\\x{6128}\\x{612C}\\x{6134}\\x{613C}\\x{613D}' .\n          '\\x{613E}\\x{613F}\\x{6142}\\x{6144}\\x{6147}\\x{6148}\\x{614A}\\x{614B}\\x{614C}' .\n          '\\x{614D}\\x{614E}\\x{6153}\\x{6155}\\x{6158}\\x{6159}\\x{615A}\\x{615D}\\x{615F}' .\n          '\\x{6162}\\x{6163}\\x{6165}\\x{6167}\\x{6168}\\x{616B}\\x{616E}\\x{616F}\\x{6170}' .\n          '\\x{6171}\\x{6173}\\x{6174}\\x{6175}\\x{6176}\\x{6177}\\x{617E}\\x{6182}\\x{6187}' .\n          '\\x{618A}\\x{618E}\\x{6190}\\x{6191}\\x{6194}\\x{6196}\\x{6199}\\x{619A}\\x{61A4}' .\n          '\\x{61A7}\\x{61A9}\\x{61AB}\\x{61AC}\\x{61AE}\\x{61B2}\\x{61B6}\\x{61BA}\\x{61BE}' .\n          '\\x{61C3}\\x{61C6}\\x{61C7}\\x{61C8}\\x{61C9}\\x{61CA}\\x{61CB}\\x{61CC}\\x{61CD}' .\n          '\\x{61D0}\\x{61E3}\\x{61E6}\\x{61F2}\\x{61F4}\\x{61F6}\\x{61F7}\\x{61F8}\\x{61FA}' .\n          '\\x{61FC}\\x{61FD}\\x{61FE}\\x{61FF}\\x{6200}\\x{6208}\\x{6209}\\x{620A}\\x{620C}' .\n          '\\x{620D}\\x{620E}\\x{6210}\\x{6211}\\x{6212}\\x{6214}\\x{6216}\\x{621A}\\x{621B}' .\n          '\\x{621D}\\x{621E}\\x{621F}\\x{6221}\\x{6226}\\x{622A}\\x{622E}\\x{622F}\\x{6230}' .\n          '\\x{6232}\\x{6233}\\x{6234}\\x{6238}\\x{623B}\\x{623F}\\x{6240}\\x{6241}\\x{6247}' .\n          '\\x{6248}\\x{6249}\\x{624B}\\x{624D}\\x{624E}\\x{6253}\\x{6255}\\x{6258}\\x{625B}' .\n          '\\x{625E}\\x{6260}\\x{6263}\\x{6268}\\x{626E}\\x{6271}\\x{6276}\\x{6279}\\x{627C}' .\n          '\\x{627E}\\x{627F}\\x{6280}\\x{6282}\\x{6283}\\x{6284}\\x{6289}\\x{628A}\\x{6291}' .\n          '\\x{6292}\\x{6293}\\x{6294}\\x{6295}\\x{6296}\\x{6297}\\x{6298}\\x{629B}\\x{629C}' .\n          '\\x{629E}\\x{62AB}\\x{62AC}\\x{62B1}\\x{62B5}\\x{62B9}\\x{62BB}\\x{62BC}\\x{62BD}' .\n          '\\x{62C2}\\x{62C5}\\x{62C6}\\x{62C7}\\x{62C8}\\x{62C9}\\x{62CA}\\x{62CC}\\x{62CD}' .\n          '\\x{62CF}\\x{62D0}\\x{62D1}\\x{62D2}\\x{62D3}\\x{62D4}\\x{62D7}\\x{62D8}\\x{62D9}' .\n          '\\x{62DB}\\x{62DC}\\x{62DD}\\x{62E0}\\x{62E1}\\x{62EC}\\x{62ED}\\x{62EE}\\x{62EF}' .\n          '\\x{62F1}\\x{62F3}\\x{62F5}\\x{62F6}\\x{62F7}\\x{62FE}\\x{62FF}\\x{6301}\\x{6302}' .\n          '\\x{6307}\\x{6308}\\x{6309}\\x{630C}\\x{6311}\\x{6319}\\x{631F}\\x{6327}\\x{6328}' .\n          '\\x{632B}\\x{632F}\\x{633A}\\x{633D}\\x{633E}\\x{633F}\\x{6349}\\x{634C}\\x{634D}' .\n          '\\x{634F}\\x{6350}\\x{6355}\\x{6357}\\x{635C}\\x{6367}\\x{6368}\\x{6369}\\x{636B}' .\n          '\\x{636E}\\x{6372}\\x{6376}\\x{6377}\\x{637A}\\x{637B}\\x{6380}\\x{6383}\\x{6388}' .\n          '\\x{6389}\\x{638C}\\x{638E}\\x{638F}\\x{6392}\\x{6396}\\x{6398}\\x{639B}\\x{639F}' .\n          '\\x{63A0}\\x{63A1}\\x{63A2}\\x{63A3}\\x{63A5}\\x{63A7}\\x{63A8}\\x{63A9}\\x{63AA}' .\n          '\\x{63AB}\\x{63AC}\\x{63B2}\\x{63B4}\\x{63B5}\\x{63BB}\\x{63BE}\\x{63C0}\\x{63C3}' .\n          '\\x{63C4}\\x{63C6}\\x{63C9}\\x{63CF}\\x{63D0}\\x{63D2}\\x{63D6}\\x{63DA}\\x{63DB}' .\n          '\\x{63E1}\\x{63E3}\\x{63E9}\\x{63EE}\\x{63F4}\\x{63F6}\\x{63FA}\\x{6406}\\x{640D}' .\n          '\\x{640F}\\x{6413}\\x{6416}\\x{6417}\\x{641C}\\x{6426}\\x{6428}\\x{642C}\\x{642D}' .\n          '\\x{6434}\\x{6436}\\x{643A}\\x{643E}\\x{6442}\\x{644E}\\x{6458}\\x{6467}\\x{6469}' .\n          '\\x{646F}\\x{6476}\\x{6478}\\x{647A}\\x{6483}\\x{6488}\\x{6492}\\x{6493}\\x{6495}' .\n          '\\x{649A}\\x{649E}\\x{64A4}\\x{64A5}\\x{64A9}\\x{64AB}\\x{64AD}\\x{64AE}\\x{64B0}' .\n          '\\x{64B2}\\x{64B9}\\x{64BB}\\x{64BC}\\x{64C1}\\x{64C2}\\x{64C5}\\x{64C7}\\x{64CD}' .\n          '\\x{64D2}\\x{64D4}\\x{64D8}\\x{64DA}\\x{64E0}\\x{64E1}\\x{64E2}\\x{64E3}\\x{64E6}' .\n          '\\x{64E7}\\x{64EC}\\x{64EF}\\x{64F1}\\x{64F2}\\x{64F4}\\x{64F6}\\x{64FA}\\x{64FD}' .\n          '\\x{64FE}\\x{6500}\\x{6505}\\x{6518}\\x{651C}\\x{651D}\\x{6523}\\x{6524}\\x{652A}' .\n          '\\x{652B}\\x{652C}\\x{652F}\\x{6534}\\x{6535}\\x{6536}\\x{6537}\\x{6538}\\x{6539}' .\n          '\\x{653B}\\x{653E}\\x{653F}\\x{6545}\\x{6548}\\x{654D}\\x{654F}\\x{6551}\\x{6555}' .\n          '\\x{6556}\\x{6557}\\x{6558}\\x{6559}\\x{655D}\\x{655E}\\x{6562}\\x{6563}\\x{6566}' .\n          '\\x{656C}\\x{6570}\\x{6572}\\x{6574}\\x{6575}\\x{6577}\\x{6578}\\x{6582}\\x{6583}' .\n          '\\x{6587}\\x{6588}\\x{6589}\\x{658C}\\x{658E}\\x{6590}\\x{6591}\\x{6597}\\x{6599}' .\n          '\\x{659B}\\x{659C}\\x{659F}\\x{65A1}\\x{65A4}\\x{65A5}\\x{65A7}\\x{65AB}\\x{65AC}' .\n          '\\x{65AD}\\x{65AF}\\x{65B0}\\x{65B7}\\x{65B9}\\x{65BC}\\x{65BD}\\x{65C1}\\x{65C3}' .\n          '\\x{65C4}\\x{65C5}\\x{65C6}\\x{65CB}\\x{65CC}\\x{65CF}\\x{65D2}\\x{65D7}\\x{65D9}' .\n          '\\x{65DB}\\x{65E0}\\x{65E1}\\x{65E2}\\x{65E5}\\x{65E6}\\x{65E7}\\x{65E8}\\x{65E9}' .\n          '\\x{65EC}\\x{65ED}\\x{65F1}\\x{65FA}\\x{65FB}\\x{6602}\\x{6603}\\x{6606}\\x{6607}' .\n          '\\x{660A}\\x{660C}\\x{660E}\\x{660F}\\x{6613}\\x{6614}\\x{661C}\\x{661F}\\x{6620}' .\n          '\\x{6625}\\x{6627}\\x{6628}\\x{662D}\\x{662F}\\x{6634}\\x{6635}\\x{6636}\\x{663C}' .\n          '\\x{663F}\\x{6641}\\x{6642}\\x{6643}\\x{6644}\\x{6649}\\x{664B}\\x{664F}\\x{6652}' .\n          '\\x{665D}\\x{665E}\\x{665F}\\x{6662}\\x{6664}\\x{6666}\\x{6667}\\x{6668}\\x{6669}' .\n          '\\x{666E}\\x{666F}\\x{6670}\\x{6674}\\x{6676}\\x{667A}\\x{6681}\\x{6683}\\x{6684}' .\n          '\\x{6687}\\x{6688}\\x{6689}\\x{668E}\\x{6691}\\x{6696}\\x{6697}\\x{6698}\\x{669D}' .\n          '\\x{66A2}\\x{66A6}\\x{66AB}\\x{66AE}\\x{66B4}\\x{66B8}\\x{66B9}\\x{66BC}\\x{66BE}' .\n          '\\x{66C1}\\x{66C4}\\x{66C7}\\x{66C9}\\x{66D6}\\x{66D9}\\x{66DA}\\x{66DC}\\x{66DD}' .\n          '\\x{66E0}\\x{66E6}\\x{66E9}\\x{66F0}\\x{66F2}\\x{66F3}\\x{66F4}\\x{66F5}\\x{66F7}' .\n          '\\x{66F8}\\x{66F9}\\x{66FC}\\x{66FD}\\x{66FE}\\x{66FF}\\x{6700}\\x{6703}\\x{6708}' .\n          '\\x{6709}\\x{670B}\\x{670D}\\x{670F}\\x{6714}\\x{6715}\\x{6716}\\x{6717}\\x{671B}' .\n          '\\x{671D}\\x{671E}\\x{671F}\\x{6726}\\x{6727}\\x{6728}\\x{672A}\\x{672B}\\x{672C}' .\n          '\\x{672D}\\x{672E}\\x{6731}\\x{6734}\\x{6736}\\x{6737}\\x{6738}\\x{673A}\\x{673D}' .\n          '\\x{673F}\\x{6741}\\x{6746}\\x{6749}\\x{674E}\\x{674F}\\x{6750}\\x{6751}\\x{6753}' .\n          '\\x{6756}\\x{6759}\\x{675C}\\x{675E}\\x{675F}\\x{6760}\\x{6761}\\x{6762}\\x{6763}' .\n          '\\x{6764}\\x{6765}\\x{676A}\\x{676D}\\x{676F}\\x{6770}\\x{6771}\\x{6772}\\x{6773}' .\n          '\\x{6775}\\x{6777}\\x{677C}\\x{677E}\\x{677F}\\x{6785}\\x{6787}\\x{6789}\\x{678B}' .\n          '\\x{678C}\\x{6790}\\x{6795}\\x{6797}\\x{679A}\\x{679C}\\x{679D}\\x{67A0}\\x{67A1}' .\n          '\\x{67A2}\\x{67A6}\\x{67A9}\\x{67AF}\\x{67B3}\\x{67B4}\\x{67B6}\\x{67B7}\\x{67B8}' .\n          '\\x{67B9}\\x{67C1}\\x{67C4}\\x{67C6}\\x{67CA}\\x{67CE}\\x{67CF}\\x{67D0}\\x{67D1}' .\n          '\\x{67D3}\\x{67D4}\\x{67D8}\\x{67DA}\\x{67DD}\\x{67DE}\\x{67E2}\\x{67E4}\\x{67E7}' .\n          '\\x{67E9}\\x{67EC}\\x{67EE}\\x{67EF}\\x{67F1}\\x{67F3}\\x{67F4}\\x{67F5}\\x{67FB}' .\n          '\\x{67FE}\\x{67FF}\\x{6802}\\x{6803}\\x{6804}\\x{6813}\\x{6816}\\x{6817}\\x{681E}' .\n          '\\x{6821}\\x{6822}\\x{6829}\\x{682A}\\x{682B}\\x{6832}\\x{6834}\\x{6838}\\x{6839}' .\n          '\\x{683C}\\x{683D}\\x{6840}\\x{6841}\\x{6842}\\x{6843}\\x{6846}\\x{6848}\\x{684D}' .\n          '\\x{684E}\\x{6850}\\x{6851}\\x{6853}\\x{6854}\\x{6859}\\x{685C}\\x{685D}\\x{685F}' .\n          '\\x{6863}\\x{6867}\\x{6874}\\x{6876}\\x{6877}\\x{687E}\\x{687F}\\x{6881}\\x{6883}' .\n          '\\x{6885}\\x{688D}\\x{688F}\\x{6893}\\x{6894}\\x{6897}\\x{689B}\\x{689D}\\x{689F}' .\n          '\\x{68A0}\\x{68A2}\\x{68A6}\\x{68A7}\\x{68A8}\\x{68AD}\\x{68AF}\\x{68B0}\\x{68B1}' .\n          '\\x{68B3}\\x{68B5}\\x{68B6}\\x{68B9}\\x{68BA}\\x{68BC}\\x{68C4}\\x{68C6}\\x{68C9}' .\n          '\\x{68CA}\\x{68CB}\\x{68CD}\\x{68D2}\\x{68D4}\\x{68D5}\\x{68D7}\\x{68D8}\\x{68DA}' .\n          '\\x{68DF}\\x{68E0}\\x{68E1}\\x{68E3}\\x{68E7}\\x{68EE}\\x{68EF}\\x{68F2}\\x{68F9}' .\n          '\\x{68FA}\\x{6900}\\x{6901}\\x{6904}\\x{6905}\\x{6908}\\x{690B}\\x{690C}\\x{690D}' .\n          '\\x{690E}\\x{690F}\\x{6912}\\x{6919}\\x{691A}\\x{691B}\\x{691C}\\x{6921}\\x{6922}' .\n          '\\x{6923}\\x{6925}\\x{6926}\\x{6928}\\x{692A}\\x{6930}\\x{6934}\\x{6936}\\x{6939}' .\n          '\\x{693D}\\x{693F}\\x{694A}\\x{6953}\\x{6954}\\x{6955}\\x{6959}\\x{695A}\\x{695C}' .\n          '\\x{695D}\\x{695E}\\x{6960}\\x{6961}\\x{6962}\\x{696A}\\x{696B}\\x{696D}\\x{696E}' .\n          '\\x{696F}\\x{6973}\\x{6974}\\x{6975}\\x{6977}\\x{6978}\\x{6979}\\x{697C}\\x{697D}' .\n          '\\x{697E}\\x{6981}\\x{6982}\\x{698A}\\x{698E}\\x{6991}\\x{6994}\\x{6995}\\x{699B}' .\n          '\\x{699C}\\x{69A0}\\x{69A7}\\x{69AE}\\x{69B1}\\x{69B2}\\x{69B4}\\x{69BB}\\x{69BE}' .\n          '\\x{69BF}\\x{69C1}\\x{69C3}\\x{69C7}\\x{69CA}\\x{69CB}\\x{69CC}\\x{69CD}\\x{69CE}' .\n          '\\x{69D0}\\x{69D3}\\x{69D8}\\x{69D9}\\x{69DD}\\x{69DE}\\x{69E7}\\x{69E8}\\x{69EB}' .\n          '\\x{69ED}\\x{69F2}\\x{69F9}\\x{69FB}\\x{69FD}\\x{69FF}\\x{6A02}\\x{6A05}\\x{6A0A}' .\n          '\\x{6A0B}\\x{6A0C}\\x{6A12}\\x{6A13}\\x{6A14}\\x{6A17}\\x{6A19}\\x{6A1B}\\x{6A1E}' .\n          '\\x{6A1F}\\x{6A21}\\x{6A22}\\x{6A23}\\x{6A29}\\x{6A2A}\\x{6A2B}\\x{6A2E}\\x{6A35}' .\n          '\\x{6A36}\\x{6A38}\\x{6A39}\\x{6A3A}\\x{6A3D}\\x{6A44}\\x{6A47}\\x{6A48}\\x{6A4B}' .\n          '\\x{6A58}\\x{6A59}\\x{6A5F}\\x{6A61}\\x{6A62}\\x{6A66}\\x{6A72}\\x{6A78}\\x{6A7F}' .\n          '\\x{6A80}\\x{6A84}\\x{6A8D}\\x{6A8E}\\x{6A90}\\x{6A97}\\x{6A9C}\\x{6AA0}\\x{6AA2}' .\n          '\\x{6AA3}\\x{6AAA}\\x{6AAC}\\x{6AAE}\\x{6AB3}\\x{6AB8}\\x{6ABB}\\x{6AC1}\\x{6AC2}' .\n          '\\x{6AC3}\\x{6AD1}\\x{6AD3}\\x{6ADA}\\x{6ADB}\\x{6ADE}\\x{6ADF}\\x{6AE8}\\x{6AEA}' .\n          '\\x{6AFA}\\x{6AFB}\\x{6B04}\\x{6B05}\\x{6B0A}\\x{6B12}\\x{6B16}\\x{6B1D}\\x{6B1F}' .\n          '\\x{6B20}\\x{6B21}\\x{6B23}\\x{6B27}\\x{6B32}\\x{6B37}\\x{6B38}\\x{6B39}\\x{6B3A}' .\n          '\\x{6B3D}\\x{6B3E}\\x{6B43}\\x{6B47}\\x{6B49}\\x{6B4C}\\x{6B4E}\\x{6B50}\\x{6B53}' .\n          '\\x{6B54}\\x{6B59}\\x{6B5B}\\x{6B5F}\\x{6B61}\\x{6B62}\\x{6B63}\\x{6B64}\\x{6B66}' .\n          '\\x{6B69}\\x{6B6A}\\x{6B6F}\\x{6B73}\\x{6B74}\\x{6B78}\\x{6B79}\\x{6B7B}\\x{6B7F}' .\n          '\\x{6B80}\\x{6B83}\\x{6B84}\\x{6B86}\\x{6B89}\\x{6B8A}\\x{6B8B}\\x{6B8D}\\x{6B95}' .\n          '\\x{6B96}\\x{6B98}\\x{6B9E}\\x{6BA4}\\x{6BAA}\\x{6BAB}\\x{6BAF}\\x{6BB1}\\x{6BB2}' .\n          '\\x{6BB3}\\x{6BB4}\\x{6BB5}\\x{6BB7}\\x{6BBA}\\x{6BBB}\\x{6BBC}\\x{6BBF}\\x{6BC0}' .\n          '\\x{6BC5}\\x{6BC6}\\x{6BCB}\\x{6BCD}\\x{6BCE}\\x{6BD2}\\x{6BD3}\\x{6BD4}\\x{6BD8}' .\n          '\\x{6BDB}\\x{6BDF}\\x{6BEB}\\x{6BEC}\\x{6BEF}\\x{6BF3}\\x{6C08}\\x{6C0F}\\x{6C11}' .\n          '\\x{6C13}\\x{6C14}\\x{6C17}\\x{6C1B}\\x{6C23}\\x{6C24}\\x{6C34}\\x{6C37}\\x{6C38}' .\n          '\\x{6C3E}\\x{6C40}\\x{6C41}\\x{6C42}\\x{6C4E}\\x{6C50}\\x{6C55}\\x{6C57}\\x{6C5A}' .\n          '\\x{6C5D}\\x{6C5E}\\x{6C5F}\\x{6C60}\\x{6C62}\\x{6C68}\\x{6C6A}\\x{6C70}\\x{6C72}' .\n          '\\x{6C73}\\x{6C7A}\\x{6C7D}\\x{6C7E}\\x{6C81}\\x{6C82}\\x{6C83}\\x{6C88}\\x{6C8C}' .\n          '\\x{6C8D}\\x{6C90}\\x{6C92}\\x{6C93}\\x{6C96}\\x{6C99}\\x{6C9A}\\x{6C9B}\\x{6CA1}' .\n          '\\x{6CA2}\\x{6CAB}\\x{6CAE}\\x{6CB1}\\x{6CB3}\\x{6CB8}\\x{6CB9}\\x{6CBA}\\x{6CBB}' .\n          '\\x{6CBC}\\x{6CBD}\\x{6CBE}\\x{6CBF}\\x{6CC1}\\x{6CC4}\\x{6CC5}\\x{6CC9}\\x{6CCA}' .\n          '\\x{6CCC}\\x{6CD3}\\x{6CD5}\\x{6CD7}\\x{6CD9}\\x{6CDB}\\x{6CDD}\\x{6CE1}\\x{6CE2}' .\n          '\\x{6CE3}\\x{6CE5}\\x{6CE8}\\x{6CEA}\\x{6CEF}\\x{6CF0}\\x{6CF1}\\x{6CF3}\\x{6D0B}' .\n          '\\x{6D0C}\\x{6D12}\\x{6D17}\\x{6D19}\\x{6D1B}\\x{6D1E}\\x{6D1F}\\x{6D25}\\x{6D29}' .\n          '\\x{6D2A}\\x{6D2B}\\x{6D32}\\x{6D33}\\x{6D35}\\x{6D36}\\x{6D38}\\x{6D3B}\\x{6D3D}' .\n          '\\x{6D3E}\\x{6D41}\\x{6D44}\\x{6D45}\\x{6D59}\\x{6D5A}\\x{6D5C}\\x{6D63}\\x{6D64}' .\n          '\\x{6D66}\\x{6D69}\\x{6D6A}\\x{6D6C}\\x{6D6E}\\x{6D74}\\x{6D77}\\x{6D78}\\x{6D79}' .\n          '\\x{6D85}\\x{6D88}\\x{6D8C}\\x{6D8E}\\x{6D93}\\x{6D95}\\x{6D99}\\x{6D9B}\\x{6D9C}' .\n          '\\x{6DAF}\\x{6DB2}\\x{6DB5}\\x{6DB8}\\x{6DBC}\\x{6DC0}\\x{6DC5}\\x{6DC6}\\x{6DC7}' .\n          '\\x{6DCB}\\x{6DCC}\\x{6DD1}\\x{6DD2}\\x{6DD5}\\x{6DD8}\\x{6DD9}\\x{6DDE}\\x{6DE1}' .\n          '\\x{6DE4}\\x{6DE6}\\x{6DE8}\\x{6DEA}\\x{6DEB}\\x{6DEC}\\x{6DEE}\\x{6DF1}\\x{6DF3}' .\n          '\\x{6DF5}\\x{6DF7}\\x{6DF9}\\x{6DFA}\\x{6DFB}\\x{6E05}\\x{6E07}\\x{6E08}\\x{6E09}' .\n          '\\x{6E0A}\\x{6E0B}\\x{6E13}\\x{6E15}\\x{6E19}\\x{6E1A}\\x{6E1B}\\x{6E1D}\\x{6E1F}' .\n          '\\x{6E20}\\x{6E21}\\x{6E23}\\x{6E24}\\x{6E25}\\x{6E26}\\x{6E29}\\x{6E2B}\\x{6E2C}' .\n          '\\x{6E2D}\\x{6E2E}\\x{6E2F}\\x{6E38}\\x{6E3A}\\x{6E3E}\\x{6E43}\\x{6E4A}\\x{6E4D}' .\n          '\\x{6E4E}\\x{6E56}\\x{6E58}\\x{6E5B}\\x{6E5F}\\x{6E67}\\x{6E6B}\\x{6E6E}\\x{6E6F}' .\n          '\\x{6E72}\\x{6E76}\\x{6E7E}\\x{6E7F}\\x{6E80}\\x{6E82}\\x{6E8C}\\x{6E8F}\\x{6E90}' .\n          '\\x{6E96}\\x{6E98}\\x{6E9C}\\x{6E9D}\\x{6E9F}\\x{6EA2}\\x{6EA5}\\x{6EAA}\\x{6EAF}' .\n          '\\x{6EB2}\\x{6EB6}\\x{6EB7}\\x{6EBA}\\x{6EBD}\\x{6EC2}\\x{6EC4}\\x{6EC5}\\x{6EC9}' .\n          '\\x{6ECB}\\x{6ECC}\\x{6ED1}\\x{6ED3}\\x{6ED4}\\x{6ED5}\\x{6EDD}\\x{6EDE}\\x{6EEC}' .\n          '\\x{6EEF}\\x{6EF2}\\x{6EF4}\\x{6EF7}\\x{6EF8}\\x{6EFE}\\x{6EFF}\\x{6F01}\\x{6F02}' .\n          '\\x{6F06}\\x{6F09}\\x{6F0F}\\x{6F11}\\x{6F13}\\x{6F14}\\x{6F15}\\x{6F20}\\x{6F22}' .\n          '\\x{6F23}\\x{6F2B}\\x{6F2C}\\x{6F31}\\x{6F32}\\x{6F38}\\x{6F3E}\\x{6F3F}\\x{6F41}' .\n          '\\x{6F45}\\x{6F54}\\x{6F58}\\x{6F5B}\\x{6F5C}\\x{6F5F}\\x{6F64}\\x{6F66}\\x{6F6D}' .\n          '\\x{6F6E}\\x{6F6F}\\x{6F70}\\x{6F74}\\x{6F78}\\x{6F7A}\\x{6F7C}\\x{6F80}\\x{6F81}' .\n          '\\x{6F82}\\x{6F84}\\x{6F86}\\x{6F8E}\\x{6F91}\\x{6F97}\\x{6FA1}\\x{6FA3}\\x{6FA4}' .\n          '\\x{6FAA}\\x{6FB1}\\x{6FB3}\\x{6FB9}\\x{6FC0}\\x{6FC1}\\x{6FC2}\\x{6FC3}\\x{6FC6}' .\n          '\\x{6FD4}\\x{6FD5}\\x{6FD8}\\x{6FDB}\\x{6FDF}\\x{6FE0}\\x{6FE1}\\x{6FE4}\\x{6FEB}' .\n          '\\x{6FEC}\\x{6FEE}\\x{6FEF}\\x{6FF1}\\x{6FF3}\\x{6FF6}\\x{6FFA}\\x{6FFE}\\x{7001}' .\n          '\\x{7009}\\x{700B}\\x{700F}\\x{7011}\\x{7015}\\x{7018}\\x{701A}\\x{701B}\\x{701D}' .\n          '\\x{701E}\\x{701F}\\x{7026}\\x{7027}\\x{702C}\\x{7030}\\x{7032}\\x{703E}\\x{704C}' .\n          '\\x{7051}\\x{7058}\\x{7063}\\x{706B}\\x{706F}\\x{7070}\\x{7078}\\x{707C}\\x{707D}' .\n          '\\x{7089}\\x{708A}\\x{708E}\\x{7092}\\x{7099}\\x{70AC}\\x{70AD}\\x{70AE}\\x{70AF}' .\n          '\\x{70B3}\\x{70B8}\\x{70B9}\\x{70BA}\\x{70C8}\\x{70CB}\\x{70CF}\\x{70D9}\\x{70DD}' .\n          '\\x{70DF}\\x{70F1}\\x{70F9}\\x{70FD}\\x{7109}\\x{7114}\\x{7119}\\x{711A}\\x{711C}' .\n          '\\x{7121}\\x{7126}\\x{7136}\\x{713C}\\x{7149}\\x{714C}\\x{714E}\\x{7155}\\x{7156}' .\n          '\\x{7159}\\x{7162}\\x{7164}\\x{7165}\\x{7166}\\x{7167}\\x{7169}\\x{716C}\\x{716E}' .\n          '\\x{717D}\\x{7184}\\x{7188}\\x{718A}\\x{718F}\\x{7194}\\x{7195}\\x{7199}\\x{719F}' .\n          '\\x{71A8}\\x{71AC}\\x{71B1}\\x{71B9}\\x{71BE}\\x{71C3}\\x{71C8}\\x{71C9}\\x{71CE}' .\n          '\\x{71D0}\\x{71D2}\\x{71D4}\\x{71D5}\\x{71D7}\\x{71DF}\\x{71E0}\\x{71E5}\\x{71E6}' .\n          '\\x{71E7}\\x{71EC}\\x{71ED}\\x{71EE}\\x{71F5}\\x{71F9}\\x{71FB}\\x{71FC}\\x{71FF}' .\n          '\\x{7206}\\x{720D}\\x{7210}\\x{721B}\\x{7228}\\x{722A}\\x{722C}\\x{722D}\\x{7230}' .\n          '\\x{7232}\\x{7235}\\x{7236}\\x{723A}\\x{723B}\\x{723C}\\x{723D}\\x{723E}\\x{723F}' .\n          '\\x{7240}\\x{7246}\\x{7247}\\x{7248}\\x{724B}\\x{724C}\\x{7252}\\x{7258}\\x{7259}' .\n          '\\x{725B}\\x{725D}\\x{725F}\\x{7261}\\x{7262}\\x{7267}\\x{7269}\\x{7272}\\x{7274}' .\n          '\\x{7279}\\x{727D}\\x{727E}\\x{7280}\\x{7281}\\x{7282}\\x{7287}\\x{7292}\\x{7296}' .\n          '\\x{72A0}\\x{72A2}\\x{72A7}\\x{72AC}\\x{72AF}\\x{72B2}\\x{72B6}\\x{72B9}\\x{72C2}' .\n          '\\x{72C3}\\x{72C4}\\x{72C6}\\x{72CE}\\x{72D0}\\x{72D2}\\x{72D7}\\x{72D9}\\x{72DB}' .\n          '\\x{72E0}\\x{72E1}\\x{72E2}\\x{72E9}\\x{72EC}\\x{72ED}\\x{72F7}\\x{72F8}\\x{72F9}' .\n          '\\x{72FC}\\x{72FD}\\x{730A}\\x{7316}\\x{7317}\\x{731B}\\x{731C}\\x{731D}\\x{731F}' .\n          '\\x{7325}\\x{7329}\\x{732A}\\x{732B}\\x{732E}\\x{732F}\\x{7334}\\x{7336}\\x{7337}' .\n          '\\x{733E}\\x{733F}\\x{7344}\\x{7345}\\x{734E}\\x{734F}\\x{7357}\\x{7363}\\x{7368}' .\n          '\\x{736A}\\x{7370}\\x{7372}\\x{7375}\\x{7378}\\x{737A}\\x{737B}\\x{7384}\\x{7387}' .\n          '\\x{7389}\\x{738B}\\x{7396}\\x{73A9}\\x{73B2}\\x{73B3}\\x{73BB}\\x{73C0}\\x{73C2}' .\n          '\\x{73C8}\\x{73CA}\\x{73CD}\\x{73CE}\\x{73DE}\\x{73E0}\\x{73E5}\\x{73EA}\\x{73ED}' .\n          '\\x{73EE}\\x{73F1}\\x{73F8}\\x{73FE}\\x{7403}\\x{7405}\\x{7406}\\x{7409}\\x{7422}' .\n          '\\x{7425}\\x{7432}\\x{7433}\\x{7434}\\x{7435}\\x{7436}\\x{743A}\\x{743F}\\x{7441}' .\n          '\\x{7455}\\x{7459}\\x{745A}\\x{745B}\\x{745C}\\x{745E}\\x{745F}\\x{7460}\\x{7463}' .\n          '\\x{7464}\\x{7469}\\x{746A}\\x{746F}\\x{7470}\\x{7473}\\x{7476}\\x{747E}\\x{7483}' .\n          '\\x{748B}\\x{749E}\\x{74A2}\\x{74A7}\\x{74B0}\\x{74BD}\\x{74CA}\\x{74CF}\\x{74D4}' .\n          '\\x{74DC}\\x{74E0}\\x{74E2}\\x{74E3}\\x{74E6}\\x{74E7}\\x{74E9}\\x{74EE}\\x{74F0}' .\n          '\\x{74F1}\\x{74F2}\\x{74F6}\\x{74F7}\\x{74F8}\\x{7503}\\x{7504}\\x{7505}\\x{750C}' .\n          '\\x{750D}\\x{750E}\\x{7511}\\x{7513}\\x{7515}\\x{7518}\\x{751A}\\x{751C}\\x{751E}' .\n          '\\x{751F}\\x{7523}\\x{7525}\\x{7526}\\x{7528}\\x{752B}\\x{752C}\\x{7530}\\x{7531}' .\n          '\\x{7532}\\x{7533}\\x{7537}\\x{7538}\\x{753A}\\x{753B}\\x{753C}\\x{7544}\\x{7546}' .\n          '\\x{7549}\\x{754A}\\x{754B}\\x{754C}\\x{754D}\\x{754F}\\x{7551}\\x{7554}\\x{7559}' .\n          '\\x{755A}\\x{755B}\\x{755C}\\x{755D}\\x{7560}\\x{7562}\\x{7564}\\x{7565}\\x{7566}' .\n          '\\x{7567}\\x{7569}\\x{756A}\\x{756B}\\x{756D}\\x{7570}\\x{7573}\\x{7574}\\x{7576}' .\n          '\\x{7577}\\x{7578}\\x{757F}\\x{7582}\\x{7586}\\x{7587}\\x{7589}\\x{758A}\\x{758B}' .\n          '\\x{758E}\\x{758F}\\x{7591}\\x{7594}\\x{759A}\\x{759D}\\x{75A3}\\x{75A5}\\x{75AB}' .\n          '\\x{75B1}\\x{75B2}\\x{75B3}\\x{75B5}\\x{75B8}\\x{75B9}\\x{75BC}\\x{75BD}\\x{75BE}' .\n          '\\x{75C2}\\x{75C3}\\x{75C5}\\x{75C7}\\x{75CA}\\x{75CD}\\x{75D2}\\x{75D4}\\x{75D5}' .\n          '\\x{75D8}\\x{75D9}\\x{75DB}\\x{75DE}\\x{75E2}\\x{75E3}\\x{75E9}\\x{75F0}\\x{75F2}' .\n          '\\x{75F3}\\x{75F4}\\x{75FA}\\x{75FC}\\x{75FE}\\x{75FF}\\x{7601}\\x{7609}\\x{760B}' .\n          '\\x{760D}\\x{761F}\\x{7620}\\x{7621}\\x{7622}\\x{7624}\\x{7627}\\x{7630}\\x{7634}' .\n          '\\x{763B}\\x{7642}\\x{7646}\\x{7647}\\x{7648}\\x{764C}\\x{7652}\\x{7656}\\x{7658}' .\n          '\\x{765C}\\x{7661}\\x{7662}\\x{7667}\\x{7668}\\x{7669}\\x{766A}\\x{766C}\\x{7670}' .\n          '\\x{7672}\\x{7676}\\x{7678}\\x{767A}\\x{767B}\\x{767C}\\x{767D}\\x{767E}\\x{7680}' .\n          '\\x{7683}\\x{7684}\\x{7686}\\x{7687}\\x{7688}\\x{768B}\\x{768E}\\x{7690}\\x{7693}' .\n          '\\x{7696}\\x{7699}\\x{769A}\\x{76AE}\\x{76B0}\\x{76B4}\\x{76B7}\\x{76B8}\\x{76B9}' .\n          '\\x{76BA}\\x{76BF}\\x{76C2}\\x{76C3}\\x{76C6}\\x{76C8}\\x{76CA}\\x{76CD}\\x{76D2}' .\n          '\\x{76D6}\\x{76D7}\\x{76DB}\\x{76DC}\\x{76DE}\\x{76DF}\\x{76E1}\\x{76E3}\\x{76E4}' .\n          '\\x{76E5}\\x{76E7}\\x{76EA}\\x{76EE}\\x{76F2}\\x{76F4}\\x{76F8}\\x{76FB}\\x{76FE}' .\n          '\\x{7701}\\x{7704}\\x{7707}\\x{7708}\\x{7709}\\x{770B}\\x{770C}\\x{771B}\\x{771E}' .\n          '\\x{771F}\\x{7720}\\x{7724}\\x{7725}\\x{7726}\\x{7729}\\x{7737}\\x{7738}\\x{773A}' .\n          '\\x{773C}\\x{7740}\\x{7747}\\x{775A}\\x{775B}\\x{7761}\\x{7763}\\x{7765}\\x{7766}' .\n          '\\x{7768}\\x{776B}\\x{7779}\\x{777E}\\x{777F}\\x{778B}\\x{778E}\\x{7791}\\x{779E}' .\n          '\\x{77A0}\\x{77A5}\\x{77AC}\\x{77AD}\\x{77B0}\\x{77B3}\\x{77B6}\\x{77B9}\\x{77BB}' .\n          '\\x{77BC}\\x{77BD}\\x{77BF}\\x{77C7}\\x{77CD}\\x{77D7}\\x{77DA}\\x{77DB}\\x{77DC}' .\n          '\\x{77E2}\\x{77E3}\\x{77E5}\\x{77E7}\\x{77E9}\\x{77ED}\\x{77EE}\\x{77EF}\\x{77F3}' .\n          '\\x{77FC}\\x{7802}\\x{780C}\\x{7812}\\x{7814}\\x{7815}\\x{7820}\\x{7825}\\x{7826}' .\n          '\\x{7827}\\x{7832}\\x{7834}\\x{783A}\\x{783F}\\x{7845}\\x{785D}\\x{786B}\\x{786C}' .\n          '\\x{786F}\\x{7872}\\x{7874}\\x{787C}\\x{7881}\\x{7886}\\x{7887}\\x{788C}\\x{788D}' .\n          '\\x{788E}\\x{7891}\\x{7893}\\x{7895}\\x{7897}\\x{789A}\\x{78A3}\\x{78A7}\\x{78A9}' .\n          '\\x{78AA}\\x{78AF}\\x{78B5}\\x{78BA}\\x{78BC}\\x{78BE}\\x{78C1}\\x{78C5}\\x{78C6}' .\n          '\\x{78CA}\\x{78CB}\\x{78D0}\\x{78D1}\\x{78D4}\\x{78DA}\\x{78E7}\\x{78E8}\\x{78EC}' .\n          '\\x{78EF}\\x{78F4}\\x{78FD}\\x{7901}\\x{7907}\\x{790E}\\x{7911}\\x{7912}\\x{7919}' .\n          '\\x{7926}\\x{792A}\\x{792B}\\x{792C}\\x{793A}\\x{793C}\\x{793E}\\x{7940}\\x{7941}' .\n          '\\x{7947}\\x{7948}\\x{7949}\\x{7950}\\x{7953}\\x{7955}\\x{7956}\\x{7957}\\x{795A}' .\n          '\\x{795D}\\x{795E}\\x{795F}\\x{7960}\\x{7962}\\x{7965}\\x{7968}\\x{796D}\\x{7977}' .\n          '\\x{797A}\\x{797F}\\x{7980}\\x{7981}\\x{7984}\\x{7985}\\x{798A}\\x{798D}\\x{798E}' .\n          '\\x{798F}\\x{799D}\\x{79A6}\\x{79A7}\\x{79AA}\\x{79AE}\\x{79B0}\\x{79B3}\\x{79B9}' .\n          '\\x{79BA}\\x{79BD}\\x{79BE}\\x{79BF}\\x{79C0}\\x{79C1}\\x{79C9}\\x{79CB}\\x{79D1}' .\n          '\\x{79D2}\\x{79D5}\\x{79D8}\\x{79DF}\\x{79E1}\\x{79E3}\\x{79E4}\\x{79E6}\\x{79E7}' .\n          '\\x{79E9}\\x{79EC}\\x{79F0}\\x{79FB}\\x{7A00}\\x{7A08}\\x{7A0B}\\x{7A0D}\\x{7A0E}' .\n          '\\x{7A14}\\x{7A17}\\x{7A18}\\x{7A19}\\x{7A1A}\\x{7A1C}\\x{7A1F}\\x{7A20}\\x{7A2E}' .\n          '\\x{7A31}\\x{7A32}\\x{7A37}\\x{7A3B}\\x{7A3C}\\x{7A3D}\\x{7A3E}\\x{7A3F}\\x{7A40}' .\n          '\\x{7A42}\\x{7A43}\\x{7A46}\\x{7A49}\\x{7A4D}\\x{7A4E}\\x{7A4F}\\x{7A50}\\x{7A57}' .\n          '\\x{7A61}\\x{7A62}\\x{7A63}\\x{7A69}\\x{7A6B}\\x{7A70}\\x{7A74}\\x{7A76}\\x{7A79}' .\n          '\\x{7A7A}\\x{7A7D}\\x{7A7F}\\x{7A81}\\x{7A83}\\x{7A84}\\x{7A88}\\x{7A92}\\x{7A93}' .\n          '\\x{7A95}\\x{7A96}\\x{7A97}\\x{7A98}\\x{7A9F}\\x{7AA9}\\x{7AAA}\\x{7AAE}\\x{7AAF}' .\n          '\\x{7AB0}\\x{7AB6}\\x{7ABA}\\x{7ABF}\\x{7AC3}\\x{7AC4}\\x{7AC5}\\x{7AC7}\\x{7AC8}' .\n          '\\x{7ACA}\\x{7ACB}\\x{7ACD}\\x{7ACF}\\x{7AD2}\\x{7AD3}\\x{7AD5}\\x{7AD9}\\x{7ADA}' .\n          '\\x{7ADC}\\x{7ADD}\\x{7ADF}\\x{7AE0}\\x{7AE1}\\x{7AE2}\\x{7AE3}\\x{7AE5}\\x{7AE6}' .\n          '\\x{7AEA}\\x{7AED}\\x{7AEF}\\x{7AF0}\\x{7AF6}\\x{7AF8}\\x{7AF9}\\x{7AFA}\\x{7AFF}' .\n          '\\x{7B02}\\x{7B04}\\x{7B06}\\x{7B08}\\x{7B0A}\\x{7B0B}\\x{7B0F}\\x{7B11}\\x{7B18}' .\n          '\\x{7B19}\\x{7B1B}\\x{7B1E}\\x{7B20}\\x{7B25}\\x{7B26}\\x{7B28}\\x{7B2C}\\x{7B33}' .\n          '\\x{7B35}\\x{7B36}\\x{7B39}\\x{7B45}\\x{7B46}\\x{7B48}\\x{7B49}\\x{7B4B}\\x{7B4C}' .\n          '\\x{7B4D}\\x{7B4F}\\x{7B50}\\x{7B51}\\x{7B52}\\x{7B54}\\x{7B56}\\x{7B5D}\\x{7B65}' .\n          '\\x{7B67}\\x{7B6C}\\x{7B6E}\\x{7B70}\\x{7B71}\\x{7B74}\\x{7B75}\\x{7B7A}\\x{7B86}' .\n          '\\x{7B87}\\x{7B8B}\\x{7B8D}\\x{7B8F}\\x{7B92}\\x{7B94}\\x{7B95}\\x{7B97}\\x{7B98}' .\n          '\\x{7B99}\\x{7B9A}\\x{7B9C}\\x{7B9D}\\x{7B9F}\\x{7BA1}\\x{7BAA}\\x{7BAD}\\x{7BB1}' .\n          '\\x{7BB4}\\x{7BB8}\\x{7BC0}\\x{7BC1}\\x{7BC4}\\x{7BC6}\\x{7BC7}\\x{7BC9}\\x{7BCB}' .\n          '\\x{7BCC}\\x{7BCF}\\x{7BDD}\\x{7BE0}\\x{7BE4}\\x{7BE5}\\x{7BE6}\\x{7BE9}\\x{7BED}' .\n          '\\x{7BF3}\\x{7BF6}\\x{7BF7}\\x{7C00}\\x{7C07}\\x{7C0D}\\x{7C11}\\x{7C12}\\x{7C13}' .\n          '\\x{7C14}\\x{7C17}\\x{7C1F}\\x{7C21}\\x{7C23}\\x{7C27}\\x{7C2A}\\x{7C2B}\\x{7C37}' .\n          '\\x{7C38}\\x{7C3D}\\x{7C3E}\\x{7C3F}\\x{7C40}\\x{7C43}\\x{7C4C}\\x{7C4D}\\x{7C4F}' .\n          '\\x{7C50}\\x{7C54}\\x{7C56}\\x{7C58}\\x{7C5F}\\x{7C60}\\x{7C64}\\x{7C65}\\x{7C6C}' .\n          '\\x{7C73}\\x{7C75}\\x{7C7E}\\x{7C81}\\x{7C82}\\x{7C83}\\x{7C89}\\x{7C8B}\\x{7C8D}' .\n          '\\x{7C90}\\x{7C92}\\x{7C95}\\x{7C97}\\x{7C98}\\x{7C9B}\\x{7C9F}\\x{7CA1}\\x{7CA2}' .\n          '\\x{7CA4}\\x{7CA5}\\x{7CA7}\\x{7CA8}\\x{7CAB}\\x{7CAD}\\x{7CAE}\\x{7CB1}\\x{7CB2}' .\n          '\\x{7CB3}\\x{7CB9}\\x{7CBD}\\x{7CBE}\\x{7CC0}\\x{7CC2}\\x{7CC5}\\x{7CCA}\\x{7CCE}' .\n          '\\x{7CD2}\\x{7CD6}\\x{7CD8}\\x{7CDC}\\x{7CDE}\\x{7CDF}\\x{7CE0}\\x{7CE2}\\x{7CE7}' .\n          '\\x{7CEF}\\x{7CF2}\\x{7CF4}\\x{7CF6}\\x{7CF8}\\x{7CFA}\\x{7CFB}\\x{7CFE}\\x{7D00}' .\n          '\\x{7D02}\\x{7D04}\\x{7D05}\\x{7D06}\\x{7D0A}\\x{7D0B}\\x{7D0D}\\x{7D10}\\x{7D14}' .\n          '\\x{7D15}\\x{7D17}\\x{7D18}\\x{7D19}\\x{7D1A}\\x{7D1B}\\x{7D1C}\\x{7D20}\\x{7D21}' .\n          '\\x{7D22}\\x{7D2B}\\x{7D2C}\\x{7D2E}\\x{7D2F}\\x{7D30}\\x{7D32}\\x{7D33}\\x{7D35}' .\n          '\\x{7D39}\\x{7D3A}\\x{7D3F}\\x{7D42}\\x{7D43}\\x{7D44}\\x{7D45}\\x{7D46}\\x{7D4B}' .\n          '\\x{7D4C}\\x{7D4E}\\x{7D4F}\\x{7D50}\\x{7D56}\\x{7D5B}\\x{7D5E}\\x{7D61}\\x{7D62}' .\n          '\\x{7D63}\\x{7D66}\\x{7D68}\\x{7D6E}\\x{7D71}\\x{7D72}\\x{7D73}\\x{7D75}\\x{7D76}' .\n          '\\x{7D79}\\x{7D7D}\\x{7D89}\\x{7D8F}\\x{7D93}\\x{7D99}\\x{7D9A}\\x{7D9B}\\x{7D9C}' .\n          '\\x{7D9F}\\x{7DA2}\\x{7DA3}\\x{7DAB}\\x{7DAC}\\x{7DAD}\\x{7DAE}\\x{7DAF}\\x{7DB0}' .\n          '\\x{7DB1}\\x{7DB2}\\x{7DB4}\\x{7DB5}\\x{7DB8}\\x{7DBA}\\x{7DBB}\\x{7DBD}\\x{7DBE}' .\n          '\\x{7DBF}\\x{7DC7}\\x{7DCA}\\x{7DCB}\\x{7DCF}\\x{7DD1}\\x{7DD2}\\x{7DD5}\\x{7DD8}' .\n          '\\x{7DDA}\\x{7DDC}\\x{7DDD}\\x{7DDE}\\x{7DE0}\\x{7DE1}\\x{7DE4}\\x{7DE8}\\x{7DE9}' .\n          '\\x{7DEC}\\x{7DEF}\\x{7DF2}\\x{7DF4}\\x{7DFB}\\x{7E01}\\x{7E04}\\x{7E05}\\x{7E09}' .\n          '\\x{7E0A}\\x{7E0B}\\x{7E12}\\x{7E1B}\\x{7E1E}\\x{7E1F}\\x{7E21}\\x{7E22}\\x{7E23}' .\n          '\\x{7E26}\\x{7E2B}\\x{7E2E}\\x{7E31}\\x{7E32}\\x{7E35}\\x{7E37}\\x{7E39}\\x{7E3A}' .\n          '\\x{7E3B}\\x{7E3D}\\x{7E3E}\\x{7E41}\\x{7E43}\\x{7E46}\\x{7E4A}\\x{7E4B}\\x{7E4D}' .\n          '\\x{7E54}\\x{7E55}\\x{7E56}\\x{7E59}\\x{7E5A}\\x{7E5D}\\x{7E5E}\\x{7E66}\\x{7E67}' .\n          '\\x{7E69}\\x{7E6A}\\x{7E6D}\\x{7E70}\\x{7E79}\\x{7E7B}\\x{7E7C}\\x{7E7D}\\x{7E7F}' .\n          '\\x{7E82}\\x{7E83}\\x{7E88}\\x{7E89}\\x{7E8C}\\x{7E8E}\\x{7E8F}\\x{7E90}\\x{7E92}' .\n          '\\x{7E93}\\x{7E94}\\x{7E96}\\x{7E9B}\\x{7E9C}\\x{7F36}\\x{7F38}\\x{7F3A}\\x{7F45}' .\n          '\\x{7F4C}\\x{7F4D}\\x{7F4E}\\x{7F50}\\x{7F51}\\x{7F54}\\x{7F55}\\x{7F58}\\x{7F5F}' .\n          '\\x{7F60}\\x{7F67}\\x{7F68}\\x{7F69}\\x{7F6A}\\x{7F6B}\\x{7F6E}\\x{7F70}\\x{7F72}' .\n          '\\x{7F75}\\x{7F77}\\x{7F78}\\x{7F79}\\x{7F82}\\x{7F83}\\x{7F85}\\x{7F86}\\x{7F87}' .\n          '\\x{7F88}\\x{7F8A}\\x{7F8C}\\x{7F8E}\\x{7F94}\\x{7F9A}\\x{7F9D}\\x{7F9E}\\x{7FA3}' .\n          '\\x{7FA4}\\x{7FA8}\\x{7FA9}\\x{7FAE}\\x{7FAF}\\x{7FB2}\\x{7FB6}\\x{7FB8}\\x{7FB9}' .\n          '\\x{7FBD}\\x{7FC1}\\x{7FC5}\\x{7FC6}\\x{7FCA}\\x{7FCC}\\x{7FD2}\\x{7FD4}\\x{7FD5}' .\n          '\\x{7FE0}\\x{7FE1}\\x{7FE6}\\x{7FE9}\\x{7FEB}\\x{7FF0}\\x{7FF3}\\x{7FF9}\\x{7FFB}' .\n          '\\x{7FFC}\\x{8000}\\x{8001}\\x{8003}\\x{8004}\\x{8005}\\x{8006}\\x{800B}\\x{800C}' .\n          '\\x{8010}\\x{8012}\\x{8015}\\x{8017}\\x{8018}\\x{8019}\\x{801C}\\x{8021}\\x{8028}' .\n          '\\x{8033}\\x{8036}\\x{803B}\\x{803D}\\x{803F}\\x{8046}\\x{804A}\\x{8052}\\x{8056}' .\n          '\\x{8058}\\x{805A}\\x{805E}\\x{805F}\\x{8061}\\x{8062}\\x{8068}\\x{806F}\\x{8070}' .\n          '\\x{8072}\\x{8073}\\x{8074}\\x{8076}\\x{8077}\\x{8079}\\x{807D}\\x{807E}\\x{807F}' .\n          '\\x{8084}\\x{8085}\\x{8086}\\x{8087}\\x{8089}\\x{808B}\\x{808C}\\x{8093}\\x{8096}' .\n          '\\x{8098}\\x{809A}\\x{809B}\\x{809D}\\x{80A1}\\x{80A2}\\x{80A5}\\x{80A9}\\x{80AA}' .\n          '\\x{80AC}\\x{80AD}\\x{80AF}\\x{80B1}\\x{80B2}\\x{80B4}\\x{80BA}\\x{80C3}\\x{80C4}' .\n          '\\x{80C6}\\x{80CC}\\x{80CE}\\x{80D6}\\x{80D9}\\x{80DA}\\x{80DB}\\x{80DD}\\x{80DE}' .\n          '\\x{80E1}\\x{80E4}\\x{80E5}\\x{80EF}\\x{80F1}\\x{80F4}\\x{80F8}\\x{80FC}\\x{80FD}' .\n          '\\x{8102}\\x{8105}\\x{8106}\\x{8107}\\x{8108}\\x{8109}\\x{810A}\\x{811A}\\x{811B}' .\n          '\\x{8123}\\x{8129}\\x{812F}\\x{8131}\\x{8133}\\x{8139}\\x{813E}\\x{8146}\\x{814B}' .\n          '\\x{814E}\\x{8150}\\x{8151}\\x{8153}\\x{8154}\\x{8155}\\x{815F}\\x{8165}\\x{8166}' .\n          '\\x{816B}\\x{816E}\\x{8170}\\x{8171}\\x{8174}\\x{8178}\\x{8179}\\x{817A}\\x{817F}' .\n          '\\x{8180}\\x{8182}\\x{8183}\\x{8188}\\x{818A}\\x{818F}\\x{8193}\\x{8195}\\x{819A}' .\n          '\\x{819C}\\x{819D}\\x{81A0}\\x{81A3}\\x{81A4}\\x{81A8}\\x{81A9}\\x{81B0}\\x{81B3}' .\n          '\\x{81B5}\\x{81B8}\\x{81BA}\\x{81BD}\\x{81BE}\\x{81BF}\\x{81C0}\\x{81C2}\\x{81C6}' .\n          '\\x{81C8}\\x{81C9}\\x{81CD}\\x{81D1}\\x{81D3}\\x{81D8}\\x{81D9}\\x{81DA}\\x{81DF}' .\n          '\\x{81E0}\\x{81E3}\\x{81E5}\\x{81E7}\\x{81E8}\\x{81EA}\\x{81ED}\\x{81F3}\\x{81F4}' .\n          '\\x{81FA}\\x{81FB}\\x{81FC}\\x{81FE}\\x{8201}\\x{8202}\\x{8205}\\x{8207}\\x{8208}' .\n          '\\x{8209}\\x{820A}\\x{820C}\\x{820D}\\x{820E}\\x{8210}\\x{8212}\\x{8216}\\x{8217}' .\n          '\\x{8218}\\x{821B}\\x{821C}\\x{821E}\\x{821F}\\x{8229}\\x{822A}\\x{822B}\\x{822C}' .\n          '\\x{822E}\\x{8233}\\x{8235}\\x{8236}\\x{8237}\\x{8238}\\x{8239}\\x{8240}\\x{8247}' .\n          '\\x{8258}\\x{8259}\\x{825A}\\x{825D}\\x{825F}\\x{8262}\\x{8264}\\x{8266}\\x{8268}' .\n          '\\x{826A}\\x{826B}\\x{826E}\\x{826F}\\x{8271}\\x{8272}\\x{8276}\\x{8277}\\x{8278}' .\n          '\\x{827E}\\x{828B}\\x{828D}\\x{8292}\\x{8299}\\x{829D}\\x{829F}\\x{82A5}\\x{82A6}' .\n          '\\x{82AB}\\x{82AC}\\x{82AD}\\x{82AF}\\x{82B1}\\x{82B3}\\x{82B8}\\x{82B9}\\x{82BB}' .\n          '\\x{82BD}\\x{82C5}\\x{82D1}\\x{82D2}\\x{82D3}\\x{82D4}\\x{82D7}\\x{82D9}\\x{82DB}' .\n          '\\x{82DC}\\x{82DE}\\x{82DF}\\x{82E1}\\x{82E3}\\x{82E5}\\x{82E6}\\x{82E7}\\x{82EB}' .\n          '\\x{82F1}\\x{82F3}\\x{82F4}\\x{82F9}\\x{82FA}\\x{82FB}\\x{8302}\\x{8303}\\x{8304}' .\n          '\\x{8305}\\x{8306}\\x{8309}\\x{830E}\\x{8316}\\x{8317}\\x{8318}\\x{831C}\\x{8323}' .\n          '\\x{8328}\\x{832B}\\x{832F}\\x{8331}\\x{8332}\\x{8334}\\x{8335}\\x{8336}\\x{8338}' .\n          '\\x{8339}\\x{8340}\\x{8345}\\x{8349}\\x{834A}\\x{834F}\\x{8350}\\x{8352}\\x{8358}' .\n          '\\x{8373}\\x{8375}\\x{8377}\\x{837B}\\x{837C}\\x{8385}\\x{8387}\\x{8389}\\x{838A}' .\n          '\\x{838E}\\x{8393}\\x{8396}\\x{839A}\\x{839E}\\x{839F}\\x{83A0}\\x{83A2}\\x{83A8}' .\n          '\\x{83AA}\\x{83AB}\\x{83B1}\\x{83B5}\\x{83BD}\\x{83C1}\\x{83C5}\\x{83CA}\\x{83CC}' .\n          '\\x{83CE}\\x{83D3}\\x{83D6}\\x{83D8}\\x{83DC}\\x{83DF}\\x{83E0}\\x{83E9}\\x{83EB}' .\n          '\\x{83EF}\\x{83F0}\\x{83F1}\\x{83F2}\\x{83F4}\\x{83F7}\\x{83FB}\\x{83FD}\\x{8403}' .\n          '\\x{8404}\\x{8407}\\x{840B}\\x{840C}\\x{840D}\\x{840E}\\x{8413}\\x{8420}\\x{8422}' .\n          '\\x{8429}\\x{842A}\\x{842C}\\x{8431}\\x{8435}\\x{8438}\\x{843C}\\x{843D}\\x{8446}' .\n          '\\x{8449}\\x{844E}\\x{8457}\\x{845B}\\x{8461}\\x{8462}\\x{8463}\\x{8466}\\x{8469}' .\n          '\\x{846B}\\x{846C}\\x{846D}\\x{846E}\\x{846F}\\x{8471}\\x{8475}\\x{8477}\\x{8479}' .\n          '\\x{847A}\\x{8482}\\x{8484}\\x{848B}\\x{8490}\\x{8494}\\x{8499}\\x{849C}\\x{849F}' .\n          '\\x{84A1}\\x{84AD}\\x{84B2}\\x{84B8}\\x{84B9}\\x{84BB}\\x{84BC}\\x{84BF}\\x{84C1}' .\n          '\\x{84C4}\\x{84C6}\\x{84C9}\\x{84CA}\\x{84CB}\\x{84CD}\\x{84D0}\\x{84D1}\\x{84D6}' .\n          '\\x{84D9}\\x{84DA}\\x{84EC}\\x{84EE}\\x{84F4}\\x{84FC}\\x{84FF}\\x{8500}\\x{8506}' .\n          '\\x{8511}\\x{8513}\\x{8514}\\x{8515}\\x{8517}\\x{8518}\\x{851A}\\x{851F}\\x{8521}' .\n          '\\x{8526}\\x{852C}\\x{852D}\\x{8535}\\x{853D}\\x{8540}\\x{8541}\\x{8543}\\x{8548}' .\n          '\\x{8549}\\x{854A}\\x{854B}\\x{854E}\\x{8555}\\x{8557}\\x{8558}\\x{855A}\\x{8563}' .\n          '\\x{8568}\\x{8569}\\x{856A}\\x{856D}\\x{8577}\\x{857E}\\x{8580}\\x{8584}\\x{8587}' .\n          '\\x{8588}\\x{858A}\\x{8590}\\x{8591}\\x{8594}\\x{8597}\\x{8599}\\x{859B}\\x{859C}' .\n          '\\x{85A4}\\x{85A6}\\x{85A8}\\x{85A9}\\x{85AA}\\x{85AB}\\x{85AC}\\x{85AE}\\x{85AF}' .\n          '\\x{85B9}\\x{85BA}\\x{85C1}\\x{85C9}\\x{85CD}\\x{85CF}\\x{85D0}\\x{85D5}\\x{85DC}' .\n          '\\x{85DD}\\x{85E4}\\x{85E5}\\x{85E9}\\x{85EA}\\x{85F7}\\x{85F9}\\x{85FA}\\x{85FB}' .\n          '\\x{85FE}\\x{8602}\\x{8606}\\x{8607}\\x{860A}\\x{860B}\\x{8613}\\x{8616}\\x{8617}' .\n          '\\x{861A}\\x{8622}\\x{862D}\\x{862F}\\x{8630}\\x{863F}\\x{864D}\\x{864E}\\x{8650}' .\n          '\\x{8654}\\x{8655}\\x{865A}\\x{865C}\\x{865E}\\x{865F}\\x{8667}\\x{866B}\\x{8671}' .\n          '\\x{8679}\\x{867B}\\x{868A}\\x{868B}\\x{868C}\\x{8693}\\x{8695}\\x{86A3}\\x{86A4}' .\n          '\\x{86A9}\\x{86AA}\\x{86AB}\\x{86AF}\\x{86B0}\\x{86B6}\\x{86C4}\\x{86C6}\\x{86C7}' .\n          '\\x{86C9}\\x{86CB}\\x{86CD}\\x{86CE}\\x{86D4}\\x{86D9}\\x{86DB}\\x{86DE}\\x{86DF}' .\n          '\\x{86E4}\\x{86E9}\\x{86EC}\\x{86ED}\\x{86EE}\\x{86EF}\\x{86F8}\\x{86F9}\\x{86FB}' .\n          '\\x{86FE}\\x{8700}\\x{8702}\\x{8703}\\x{8706}\\x{8708}\\x{8709}\\x{870A}\\x{870D}' .\n          '\\x{8711}\\x{8712}\\x{8718}\\x{871A}\\x{871C}\\x{8725}\\x{8729}\\x{8734}\\x{8737}' .\n          '\\x{873B}\\x{873F}\\x{8749}\\x{874B}\\x{874C}\\x{874E}\\x{8753}\\x{8755}\\x{8757}' .\n          '\\x{8759}\\x{875F}\\x{8760}\\x{8763}\\x{8766}\\x{8768}\\x{876A}\\x{876E}\\x{8774}' .\n          '\\x{8776}\\x{8778}\\x{877F}\\x{8782}\\x{878D}\\x{879F}\\x{87A2}\\x{87AB}\\x{87AF}' .\n          '\\x{87B3}\\x{87BA}\\x{87BB}\\x{87BD}\\x{87C0}\\x{87C4}\\x{87C6}\\x{87C7}\\x{87CB}' .\n          '\\x{87D0}\\x{87D2}\\x{87E0}\\x{87EF}\\x{87F2}\\x{87F6}\\x{87F7}\\x{87F9}\\x{87FB}' .\n          '\\x{87FE}\\x{8805}\\x{880D}\\x{880E}\\x{880F}\\x{8811}\\x{8815}\\x{8816}\\x{8821}' .\n          '\\x{8822}\\x{8823}\\x{8827}\\x{8831}\\x{8836}\\x{8839}\\x{883B}\\x{8840}\\x{8842}' .\n          '\\x{8844}\\x{8846}\\x{884C}\\x{884D}\\x{8852}\\x{8853}\\x{8857}\\x{8859}\\x{885B}' .\n          '\\x{885D}\\x{885E}\\x{8861}\\x{8862}\\x{8863}\\x{8868}\\x{886B}\\x{8870}\\x{8872}' .\n          '\\x{8875}\\x{8877}\\x{887D}\\x{887E}\\x{887F}\\x{8881}\\x{8882}\\x{8888}\\x{888B}' .\n          '\\x{888D}\\x{8892}\\x{8896}\\x{8897}\\x{8899}\\x{889E}\\x{88A2}\\x{88A4}\\x{88AB}' .\n          '\\x{88AE}\\x{88B0}\\x{88B1}\\x{88B4}\\x{88B5}\\x{88B7}\\x{88BF}\\x{88C1}\\x{88C2}' .\n          '\\x{88C3}\\x{88C4}\\x{88C5}\\x{88CF}\\x{88D4}\\x{88D5}\\x{88D8}\\x{88D9}\\x{88DC}' .\n          '\\x{88DD}\\x{88DF}\\x{88E1}\\x{88E8}\\x{88F2}\\x{88F3}\\x{88F4}\\x{88F8}\\x{88F9}' .\n          '\\x{88FC}\\x{88FD}\\x{88FE}\\x{8902}\\x{8904}\\x{8907}\\x{890A}\\x{890C}\\x{8910}' .\n          '\\x{8912}\\x{8913}\\x{891D}\\x{891E}\\x{8925}\\x{892A}\\x{892B}\\x{8936}\\x{8938}' .\n          '\\x{893B}\\x{8941}\\x{8943}\\x{8944}\\x{894C}\\x{894D}\\x{8956}\\x{895E}\\x{895F}' .\n          '\\x{8960}\\x{8964}\\x{8966}\\x{896A}\\x{896D}\\x{896F}\\x{8972}\\x{8974}\\x{8977}' .\n          '\\x{897E}\\x{897F}\\x{8981}\\x{8983}\\x{8986}\\x{8987}\\x{8988}\\x{898A}\\x{898B}' .\n          '\\x{898F}\\x{8993}\\x{8996}\\x{8997}\\x{8998}\\x{899A}\\x{89A1}\\x{89A6}\\x{89A7}' .\n          '\\x{89A9}\\x{89AA}\\x{89AC}\\x{89AF}\\x{89B2}\\x{89B3}\\x{89BA}\\x{89BD}\\x{89BF}' .\n          '\\x{89C0}\\x{89D2}\\x{89DA}\\x{89DC}\\x{89DD}\\x{89E3}\\x{89E6}\\x{89E7}\\x{89F4}' .\n          '\\x{89F8}\\x{8A00}\\x{8A02}\\x{8A03}\\x{8A08}\\x{8A0A}\\x{8A0C}\\x{8A0E}\\x{8A10}' .\n          '\\x{8A13}\\x{8A16}\\x{8A17}\\x{8A18}\\x{8A1B}\\x{8A1D}\\x{8A1F}\\x{8A23}\\x{8A25}' .\n          '\\x{8A2A}\\x{8A2D}\\x{8A31}\\x{8A33}\\x{8A34}\\x{8A36}\\x{8A3A}\\x{8A3B}\\x{8A3C}' .\n          '\\x{8A41}\\x{8A46}\\x{8A48}\\x{8A50}\\x{8A51}\\x{8A52}\\x{8A54}\\x{8A55}\\x{8A5B}' .\n          '\\x{8A5E}\\x{8A60}\\x{8A62}\\x{8A63}\\x{8A66}\\x{8A69}\\x{8A6B}\\x{8A6C}\\x{8A6D}' .\n          '\\x{8A6E}\\x{8A70}\\x{8A71}\\x{8A72}\\x{8A73}\\x{8A7C}\\x{8A82}\\x{8A84}\\x{8A85}' .\n          '\\x{8A87}\\x{8A89}\\x{8A8C}\\x{8A8D}\\x{8A91}\\x{8A93}\\x{8A95}\\x{8A98}\\x{8A9A}' .\n          '\\x{8A9E}\\x{8AA0}\\x{8AA1}\\x{8AA3}\\x{8AA4}\\x{8AA5}\\x{8AA6}\\x{8AA8}\\x{8AAC}' .\n          '\\x{8AAD}\\x{8AB0}\\x{8AB2}\\x{8AB9}\\x{8ABC}\\x{8ABF}\\x{8AC2}\\x{8AC4}\\x{8AC7}' .\n          '\\x{8ACB}\\x{8ACC}\\x{8ACD}\\x{8ACF}\\x{8AD2}\\x{8AD6}\\x{8ADA}\\x{8ADB}\\x{8ADC}' .\n          '\\x{8ADE}\\x{8AE0}\\x{8AE1}\\x{8AE2}\\x{8AE4}\\x{8AE6}\\x{8AE7}\\x{8AEB}\\x{8AED}' .\n          '\\x{8AEE}\\x{8AF1}\\x{8AF3}\\x{8AF7}\\x{8AF8}\\x{8AFA}\\x{8AFE}\\x{8B00}\\x{8B01}' .\n          '\\x{8B02}\\x{8B04}\\x{8B07}\\x{8B0C}\\x{8B0E}\\x{8B10}\\x{8B14}\\x{8B16}\\x{8B17}' .\n          '\\x{8B19}\\x{8B1A}\\x{8B1B}\\x{8B1D}\\x{8B20}\\x{8B21}\\x{8B26}\\x{8B28}\\x{8B2B}' .\n          '\\x{8B2C}\\x{8B33}\\x{8B39}\\x{8B3E}\\x{8B41}\\x{8B49}\\x{8B4C}\\x{8B4E}\\x{8B4F}' .\n          '\\x{8B56}\\x{8B58}\\x{8B5A}\\x{8B5B}\\x{8B5C}\\x{8B5F}\\x{8B66}\\x{8B6B}\\x{8B6C}' .\n          '\\x{8B6F}\\x{8B70}\\x{8B71}\\x{8B72}\\x{8B74}\\x{8B77}\\x{8B7D}\\x{8B80}\\x{8B83}' .\n          '\\x{8B8A}\\x{8B8C}\\x{8B8E}\\x{8B90}\\x{8B92}\\x{8B93}\\x{8B96}\\x{8B99}\\x{8B9A}' .\n          '\\x{8C37}\\x{8C3A}\\x{8C3F}\\x{8C41}\\x{8C46}\\x{8C48}\\x{8C4A}\\x{8C4C}\\x{8C4E}' .\n          '\\x{8C50}\\x{8C55}\\x{8C5A}\\x{8C61}\\x{8C62}\\x{8C6A}\\x{8C6B}\\x{8C6C}\\x{8C78}' .\n          '\\x{8C79}\\x{8C7A}\\x{8C7C}\\x{8C82}\\x{8C85}\\x{8C89}\\x{8C8A}\\x{8C8C}\\x{8C8D}' .\n          '\\x{8C8E}\\x{8C94}\\x{8C98}\\x{8C9D}\\x{8C9E}\\x{8CA0}\\x{8CA1}\\x{8CA2}\\x{8CA7}' .\n          '\\x{8CA8}\\x{8CA9}\\x{8CAA}\\x{8CAB}\\x{8CAC}\\x{8CAD}\\x{8CAE}\\x{8CAF}\\x{8CB0}' .\n          '\\x{8CB2}\\x{8CB3}\\x{8CB4}\\x{8CB6}\\x{8CB7}\\x{8CB8}\\x{8CBB}\\x{8CBC}\\x{8CBD}' .\n          '\\x{8CBF}\\x{8CC0}\\x{8CC1}\\x{8CC2}\\x{8CC3}\\x{8CC4}\\x{8CC7}\\x{8CC8}\\x{8CCA}' .\n          '\\x{8CCD}\\x{8CCE}\\x{8CD1}\\x{8CD3}\\x{8CDA}\\x{8CDB}\\x{8CDC}\\x{8CDE}\\x{8CE0}' .\n          '\\x{8CE2}\\x{8CE3}\\x{8CE4}\\x{8CE6}\\x{8CEA}\\x{8CED}\\x{8CFA}\\x{8CFB}\\x{8CFC}' .\n          '\\x{8CFD}\\x{8D04}\\x{8D05}\\x{8D07}\\x{8D08}\\x{8D0A}\\x{8D0B}\\x{8D0D}\\x{8D0F}' .\n          '\\x{8D10}\\x{8D13}\\x{8D14}\\x{8D16}\\x{8D64}\\x{8D66}\\x{8D67}\\x{8D6B}\\x{8D6D}' .\n          '\\x{8D70}\\x{8D71}\\x{8D73}\\x{8D74}\\x{8D77}\\x{8D81}\\x{8D85}\\x{8D8A}\\x{8D99}' .\n          '\\x{8DA3}\\x{8DA8}\\x{8DB3}\\x{8DBA}\\x{8DBE}\\x{8DC2}\\x{8DCB}\\x{8DCC}\\x{8DCF}' .\n          '\\x{8DD6}\\x{8DDA}\\x{8DDB}\\x{8DDD}\\x{8DDF}\\x{8DE1}\\x{8DE3}\\x{8DE8}\\x{8DEA}' .\n          '\\x{8DEB}\\x{8DEF}\\x{8DF3}\\x{8DF5}\\x{8DFC}\\x{8DFF}\\x{8E08}\\x{8E09}\\x{8E0A}' .\n          '\\x{8E0F}\\x{8E10}\\x{8E1D}\\x{8E1E}\\x{8E1F}\\x{8E2A}\\x{8E30}\\x{8E34}\\x{8E35}' .\n          '\\x{8E42}\\x{8E44}\\x{8E47}\\x{8E48}\\x{8E49}\\x{8E4A}\\x{8E4C}\\x{8E50}\\x{8E55}' .\n          '\\x{8E59}\\x{8E5F}\\x{8E60}\\x{8E63}\\x{8E64}\\x{8E72}\\x{8E74}\\x{8E76}\\x{8E7C}' .\n          '\\x{8E81}\\x{8E84}\\x{8E85}\\x{8E87}\\x{8E8A}\\x{8E8B}\\x{8E8D}\\x{8E91}\\x{8E93}' .\n          '\\x{8E94}\\x{8E99}\\x{8EA1}\\x{8EAA}\\x{8EAB}\\x{8EAC}\\x{8EAF}\\x{8EB0}\\x{8EB1}' .\n          '\\x{8EBE}\\x{8EC5}\\x{8EC6}\\x{8EC8}\\x{8ECA}\\x{8ECB}\\x{8ECC}\\x{8ECD}\\x{8ED2}' .\n          '\\x{8EDB}\\x{8EDF}\\x{8EE2}\\x{8EE3}\\x{8EEB}\\x{8EF8}\\x{8EFB}\\x{8EFC}\\x{8EFD}' .\n          '\\x{8EFE}\\x{8F03}\\x{8F05}\\x{8F09}\\x{8F0A}\\x{8F0C}\\x{8F12}\\x{8F13}\\x{8F14}' .\n          '\\x{8F15}\\x{8F19}\\x{8F1B}\\x{8F1C}\\x{8F1D}\\x{8F1F}\\x{8F26}\\x{8F29}\\x{8F2A}' .\n          '\\x{8F2F}\\x{8F33}\\x{8F38}\\x{8F39}\\x{8F3B}\\x{8F3E}\\x{8F3F}\\x{8F42}\\x{8F44}' .\n          '\\x{8F45}\\x{8F46}\\x{8F49}\\x{8F4C}\\x{8F4D}\\x{8F4E}\\x{8F57}\\x{8F5C}\\x{8F5F}' .\n          '\\x{8F61}\\x{8F62}\\x{8F63}\\x{8F64}\\x{8F9B}\\x{8F9C}\\x{8F9E}\\x{8F9F}\\x{8FA3}' .\n          '\\x{8FA7}\\x{8FA8}\\x{8FAD}\\x{8FAE}\\x{8FAF}\\x{8FB0}\\x{8FB1}\\x{8FB2}\\x{8FB7}' .\n          '\\x{8FBA}\\x{8FBB}\\x{8FBC}\\x{8FBF}\\x{8FC2}\\x{8FC4}\\x{8FC5}\\x{8FCE}\\x{8FD1}' .\n          '\\x{8FD4}\\x{8FDA}\\x{8FE2}\\x{8FE5}\\x{8FE6}\\x{8FE9}\\x{8FEA}\\x{8FEB}\\x{8FED}' .\n          '\\x{8FEF}\\x{8FF0}\\x{8FF4}\\x{8FF7}\\x{8FF8}\\x{8FF9}\\x{8FFA}\\x{8FFD}\\x{9000}' .\n          '\\x{9001}\\x{9003}\\x{9005}\\x{9006}\\x{900B}\\x{900D}\\x{900E}\\x{900F}\\x{9010}' .\n          '\\x{9011}\\x{9013}\\x{9014}\\x{9015}\\x{9016}\\x{9017}\\x{9019}\\x{901A}\\x{901D}' .\n          '\\x{901E}\\x{901F}\\x{9020}\\x{9021}\\x{9022}\\x{9023}\\x{9027}\\x{902E}\\x{9031}' .\n          '\\x{9032}\\x{9035}\\x{9036}\\x{9038}\\x{9039}\\x{903C}\\x{903E}\\x{9041}\\x{9042}' .\n          '\\x{9045}\\x{9047}\\x{9049}\\x{904A}\\x{904B}\\x{904D}\\x{904E}\\x{904F}\\x{9050}' .\n          '\\x{9051}\\x{9052}\\x{9053}\\x{9054}\\x{9055}\\x{9056}\\x{9058}\\x{9059}\\x{905C}' .\n          '\\x{905E}\\x{9060}\\x{9061}\\x{9063}\\x{9065}\\x{9068}\\x{9069}\\x{906D}\\x{906E}' .\n          '\\x{906F}\\x{9072}\\x{9075}\\x{9076}\\x{9077}\\x{9078}\\x{907A}\\x{907C}\\x{907D}' .\n          '\\x{907F}\\x{9080}\\x{9081}\\x{9082}\\x{9083}\\x{9084}\\x{9087}\\x{9089}\\x{908A}' .\n          '\\x{908F}\\x{9091}\\x{90A3}\\x{90A6}\\x{90A8}\\x{90AA}\\x{90AF}\\x{90B1}\\x{90B5}' .\n          '\\x{90B8}\\x{90C1}\\x{90CA}\\x{90CE}\\x{90DB}\\x{90E1}\\x{90E2}\\x{90E4}\\x{90E8}' .\n          '\\x{90ED}\\x{90F5}\\x{90F7}\\x{90FD}\\x{9102}\\x{9112}\\x{9119}\\x{912D}\\x{9130}' .\n          '\\x{9132}\\x{9149}\\x{914A}\\x{914B}\\x{914C}\\x{914D}\\x{914E}\\x{9152}\\x{9154}' .\n          '\\x{9156}\\x{9158}\\x{9162}\\x{9163}\\x{9165}\\x{9169}\\x{916A}\\x{916C}\\x{9172}' .\n          '\\x{9173}\\x{9175}\\x{9177}\\x{9178}\\x{9182}\\x{9187}\\x{9189}\\x{918B}\\x{918D}' .\n          '\\x{9190}\\x{9192}\\x{9197}\\x{919C}\\x{91A2}\\x{91A4}\\x{91AA}\\x{91AB}\\x{91AF}' .\n          '\\x{91B4}\\x{91B5}\\x{91B8}\\x{91BA}\\x{91C0}\\x{91C1}\\x{91C6}\\x{91C7}\\x{91C8}' .\n          '\\x{91C9}\\x{91CB}\\x{91CC}\\x{91CD}\\x{91CE}\\x{91CF}\\x{91D0}\\x{91D1}\\x{91D6}' .\n          '\\x{91D8}\\x{91DB}\\x{91DC}\\x{91DD}\\x{91DF}\\x{91E1}\\x{91E3}\\x{91E6}\\x{91E7}' .\n          '\\x{91F5}\\x{91F6}\\x{91FC}\\x{91FF}\\x{920D}\\x{920E}\\x{9211}\\x{9214}\\x{9215}' .\n          '\\x{921E}\\x{9229}\\x{922C}\\x{9234}\\x{9237}\\x{923F}\\x{9244}\\x{9245}\\x{9248}' .\n          '\\x{9249}\\x{924B}\\x{9250}\\x{9257}\\x{925A}\\x{925B}\\x{925E}\\x{9262}\\x{9264}' .\n          '\\x{9266}\\x{9271}\\x{927E}\\x{9280}\\x{9283}\\x{9285}\\x{9291}\\x{9293}\\x{9295}' .\n          '\\x{9296}\\x{9298}\\x{929A}\\x{929B}\\x{929C}\\x{92AD}\\x{92B7}\\x{92B9}\\x{92CF}' .\n          '\\x{92D2}\\x{92E4}\\x{92E9}\\x{92EA}\\x{92ED}\\x{92F2}\\x{92F3}\\x{92F8}\\x{92FA}' .\n          '\\x{92FC}\\x{9306}\\x{930F}\\x{9310}\\x{9318}\\x{9319}\\x{931A}\\x{9320}\\x{9322}' .\n          '\\x{9323}\\x{9326}\\x{9328}\\x{932B}\\x{932C}\\x{932E}\\x{932F}\\x{9332}\\x{9335}' .\n          '\\x{933A}\\x{933B}\\x{9344}\\x{934B}\\x{934D}\\x{9354}\\x{9356}\\x{935B}\\x{935C}' .\n          '\\x{9360}\\x{936C}\\x{936E}\\x{9375}\\x{937C}\\x{937E}\\x{938C}\\x{9394}\\x{9396}' .\n          '\\x{9397}\\x{939A}\\x{93A7}\\x{93AC}\\x{93AD}\\x{93AE}\\x{93B0}\\x{93B9}\\x{93C3}' .\n          '\\x{93C8}\\x{93D0}\\x{93D1}\\x{93D6}\\x{93D7}\\x{93D8}\\x{93DD}\\x{93E1}\\x{93E4}' .\n          '\\x{93E5}\\x{93E8}\\x{9403}\\x{9407}\\x{9410}\\x{9413}\\x{9414}\\x{9418}\\x{9419}' .\n          '\\x{941A}\\x{9421}\\x{942B}\\x{9435}\\x{9436}\\x{9438}\\x{943A}\\x{9441}\\x{9444}' .\n          '\\x{9451}\\x{9452}\\x{9453}\\x{945A}\\x{945B}\\x{945E}\\x{9460}\\x{9462}\\x{946A}' .\n          '\\x{9470}\\x{9475}\\x{9477}\\x{947C}\\x{947D}\\x{947E}\\x{947F}\\x{9481}\\x{9577}' .\n          '\\x{9580}\\x{9582}\\x{9583}\\x{9587}\\x{9589}\\x{958A}\\x{958B}\\x{958F}\\x{9591}' .\n          '\\x{9593}\\x{9594}\\x{9596}\\x{9598}\\x{9599}\\x{95A0}\\x{95A2}\\x{95A3}\\x{95A4}' .\n          '\\x{95A5}\\x{95A7}\\x{95A8}\\x{95AD}\\x{95B2}\\x{95B9}\\x{95BB}\\x{95BC}\\x{95BE}' .\n          '\\x{95C3}\\x{95C7}\\x{95CA}\\x{95CC}\\x{95CD}\\x{95D4}\\x{95D5}\\x{95D6}\\x{95D8}' .\n          '\\x{95DC}\\x{95E1}\\x{95E2}\\x{95E5}\\x{961C}\\x{9621}\\x{9628}\\x{962A}\\x{962E}' .\n          '\\x{962F}\\x{9632}\\x{963B}\\x{963F}\\x{9640}\\x{9642}\\x{9644}\\x{964B}\\x{964C}' .\n          '\\x{964D}\\x{964F}\\x{9650}\\x{965B}\\x{965C}\\x{965D}\\x{965E}\\x{965F}\\x{9662}' .\n          '\\x{9663}\\x{9664}\\x{9665}\\x{9666}\\x{966A}\\x{966C}\\x{9670}\\x{9672}\\x{9673}' .\n          '\\x{9675}\\x{9676}\\x{9677}\\x{9678}\\x{967A}\\x{967D}\\x{9685}\\x{9686}\\x{9688}' .\n          '\\x{968A}\\x{968B}\\x{968D}\\x{968E}\\x{968F}\\x{9694}\\x{9695}\\x{9697}\\x{9698}' .\n          '\\x{9699}\\x{969B}\\x{969C}\\x{96A0}\\x{96A3}\\x{96A7}\\x{96A8}\\x{96AA}\\x{96B0}' .\n          '\\x{96B1}\\x{96B2}\\x{96B4}\\x{96B6}\\x{96B7}\\x{96B8}\\x{96B9}\\x{96BB}\\x{96BC}' .\n          '\\x{96C0}\\x{96C1}\\x{96C4}\\x{96C5}\\x{96C6}\\x{96C7}\\x{96C9}\\x{96CB}\\x{96CC}' .\n          '\\x{96CD}\\x{96CE}\\x{96D1}\\x{96D5}\\x{96D6}\\x{96D9}\\x{96DB}\\x{96DC}\\x{96E2}' .\n          '\\x{96E3}\\x{96E8}\\x{96EA}\\x{96EB}\\x{96F0}\\x{96F2}\\x{96F6}\\x{96F7}\\x{96F9}' .\n          '\\x{96FB}\\x{9700}\\x{9704}\\x{9706}\\x{9707}\\x{9708}\\x{970A}\\x{970D}\\x{970E}' .\n          '\\x{970F}\\x{9711}\\x{9713}\\x{9716}\\x{9719}\\x{971C}\\x{971E}\\x{9724}\\x{9727}' .\n          '\\x{972A}\\x{9730}\\x{9732}\\x{9738}\\x{9739}\\x{973D}\\x{973E}\\x{9742}\\x{9744}' .\n          '\\x{9746}\\x{9748}\\x{9749}\\x{9752}\\x{9756}\\x{9759}\\x{975C}\\x{975E}\\x{9760}' .\n          '\\x{9761}\\x{9762}\\x{9764}\\x{9766}\\x{9768}\\x{9769}\\x{976B}\\x{976D}\\x{9771}' .\n          '\\x{9774}\\x{9779}\\x{977A}\\x{977C}\\x{9781}\\x{9784}\\x{9785}\\x{9786}\\x{978B}' .\n          '\\x{978D}\\x{978F}\\x{9790}\\x{9798}\\x{979C}\\x{97A0}\\x{97A3}\\x{97A6}\\x{97A8}' .\n          '\\x{97AB}\\x{97AD}\\x{97B3}\\x{97B4}\\x{97C3}\\x{97C6}\\x{97C8}\\x{97CB}\\x{97D3}' .\n          '\\x{97DC}\\x{97ED}\\x{97EE}\\x{97F2}\\x{97F3}\\x{97F5}\\x{97F6}\\x{97FB}\\x{97FF}' .\n          '\\x{9801}\\x{9802}\\x{9803}\\x{9805}\\x{9806}\\x{9808}\\x{980C}\\x{980F}\\x{9810}' .\n          '\\x{9811}\\x{9812}\\x{9813}\\x{9817}\\x{9818}\\x{981A}\\x{9821}\\x{9824}\\x{982C}' .\n          '\\x{982D}\\x{9834}\\x{9837}\\x{9838}\\x{983B}\\x{983C}\\x{983D}\\x{9846}\\x{984B}' .\n          '\\x{984C}\\x{984D}\\x{984E}\\x{984F}\\x{9854}\\x{9855}\\x{9858}\\x{985B}\\x{985E}' .\n          '\\x{9867}\\x{986B}\\x{986F}\\x{9870}\\x{9871}\\x{9873}\\x{9874}\\x{98A8}\\x{98AA}' .\n          '\\x{98AF}\\x{98B1}\\x{98B6}\\x{98C3}\\x{98C4}\\x{98C6}\\x{98DB}\\x{98DC}\\x{98DF}' .\n          '\\x{98E2}\\x{98E9}\\x{98EB}\\x{98ED}\\x{98EE}\\x{98EF}\\x{98F2}\\x{98F4}\\x{98FC}' .\n          '\\x{98FD}\\x{98FE}\\x{9903}\\x{9905}\\x{9909}\\x{990A}\\x{990C}\\x{9910}\\x{9912}' .\n          '\\x{9913}\\x{9914}\\x{9918}\\x{991D}\\x{991E}\\x{9920}\\x{9921}\\x{9924}\\x{9928}' .\n          '\\x{992C}\\x{992E}\\x{993D}\\x{993E}\\x{9942}\\x{9945}\\x{9949}\\x{994B}\\x{994C}' .\n          '\\x{9950}\\x{9951}\\x{9952}\\x{9955}\\x{9957}\\x{9996}\\x{9997}\\x{9998}\\x{9999}' .\n          '\\x{99A5}\\x{99A8}\\x{99AC}\\x{99AD}\\x{99AE}\\x{99B3}\\x{99B4}\\x{99BC}\\x{99C1}' .\n          '\\x{99C4}\\x{99C5}\\x{99C6}\\x{99C8}\\x{99D0}\\x{99D1}\\x{99D2}\\x{99D5}\\x{99D8}' .\n          '\\x{99DB}\\x{99DD}\\x{99DF}\\x{99E2}\\x{99ED}\\x{99EE}\\x{99F1}\\x{99F2}\\x{99F8}' .\n          '\\x{99FB}\\x{99FF}\\x{9A01}\\x{9A05}\\x{9A0E}\\x{9A0F}\\x{9A12}\\x{9A13}\\x{9A19}' .\n          '\\x{9A28}\\x{9A2B}\\x{9A30}\\x{9A37}\\x{9A3E}\\x{9A40}\\x{9A42}\\x{9A43}\\x{9A45}' .\n          '\\x{9A4D}\\x{9A55}\\x{9A57}\\x{9A5A}\\x{9A5B}\\x{9A5F}\\x{9A62}\\x{9A64}\\x{9A65}' .\n          '\\x{9A69}\\x{9A6A}\\x{9A6B}\\x{9AA8}\\x{9AAD}\\x{9AB0}\\x{9AB8}\\x{9ABC}\\x{9AC0}' .\n          '\\x{9AC4}\\x{9ACF}\\x{9AD1}\\x{9AD3}\\x{9AD4}\\x{9AD8}\\x{9ADE}\\x{9ADF}\\x{9AE2}' .\n          '\\x{9AE3}\\x{9AE6}\\x{9AEA}\\x{9AEB}\\x{9AED}\\x{9AEE}\\x{9AEF}\\x{9AF1}\\x{9AF4}' .\n          '\\x{9AF7}\\x{9AFB}\\x{9B06}\\x{9B18}\\x{9B1A}\\x{9B1F}\\x{9B22}\\x{9B23}\\x{9B25}' .\n          '\\x{9B27}\\x{9B28}\\x{9B29}\\x{9B2A}\\x{9B2E}\\x{9B2F}\\x{9B31}\\x{9B32}\\x{9B3B}' .\n          '\\x{9B3C}\\x{9B41}\\x{9B42}\\x{9B43}\\x{9B44}\\x{9B45}\\x{9B4D}\\x{9B4E}\\x{9B4F}' .\n          '\\x{9B51}\\x{9B54}\\x{9B58}\\x{9B5A}\\x{9B6F}\\x{9B74}\\x{9B83}\\x{9B8E}\\x{9B91}' .\n          '\\x{9B92}\\x{9B93}\\x{9B96}\\x{9B97}\\x{9B9F}\\x{9BA0}\\x{9BA8}\\x{9BAA}\\x{9BAB}' .\n          '\\x{9BAD}\\x{9BAE}\\x{9BB4}\\x{9BB9}\\x{9BC0}\\x{9BC6}\\x{9BC9}\\x{9BCA}\\x{9BCF}' .\n          '\\x{9BD1}\\x{9BD2}\\x{9BD4}\\x{9BD6}\\x{9BDB}\\x{9BE1}\\x{9BE2}\\x{9BE3}\\x{9BE4}' .\n          '\\x{9BE8}\\x{9BF0}\\x{9BF1}\\x{9BF2}\\x{9BF5}\\x{9C04}\\x{9C06}\\x{9C08}\\x{9C09}' .\n          '\\x{9C0A}\\x{9C0C}\\x{9C0D}\\x{9C10}\\x{9C12}\\x{9C13}\\x{9C14}\\x{9C15}\\x{9C1B}' .\n          '\\x{9C21}\\x{9C24}\\x{9C25}\\x{9C2D}\\x{9C2E}\\x{9C2F}\\x{9C30}\\x{9C32}\\x{9C39}' .\n          '\\x{9C3A}\\x{9C3B}\\x{9C3E}\\x{9C46}\\x{9C47}\\x{9C48}\\x{9C52}\\x{9C57}\\x{9C5A}' .\n          '\\x{9C60}\\x{9C67}\\x{9C76}\\x{9C78}\\x{9CE5}\\x{9CE7}\\x{9CE9}\\x{9CEB}\\x{9CEC}' .\n          '\\x{9CF0}\\x{9CF3}\\x{9CF4}\\x{9CF6}\\x{9D03}\\x{9D06}\\x{9D07}\\x{9D08}\\x{9D09}' .\n          '\\x{9D0E}\\x{9D12}\\x{9D15}\\x{9D1B}\\x{9D1F}\\x{9D23}\\x{9D26}\\x{9D28}\\x{9D2A}' .\n          '\\x{9D2B}\\x{9D2C}\\x{9D3B}\\x{9D3E}\\x{9D3F}\\x{9D41}\\x{9D44}\\x{9D46}\\x{9D48}' .\n          '\\x{9D50}\\x{9D51}\\x{9D59}\\x{9D5C}\\x{9D5D}\\x{9D5E}\\x{9D60}\\x{9D61}\\x{9D64}' .\n          '\\x{9D6C}\\x{9D6F}\\x{9D72}\\x{9D7A}\\x{9D87}\\x{9D89}\\x{9D8F}\\x{9D9A}\\x{9DA4}' .\n          '\\x{9DA9}\\x{9DAB}\\x{9DAF}\\x{9DB2}\\x{9DB4}\\x{9DB8}\\x{9DBA}\\x{9DBB}\\x{9DC1}' .\n          '\\x{9DC2}\\x{9DC4}\\x{9DC6}\\x{9DCF}\\x{9DD3}\\x{9DD9}\\x{9DE6}\\x{9DED}\\x{9DEF}' .\n          '\\x{9DF2}\\x{9DF8}\\x{9DF9}\\x{9DFA}\\x{9DFD}\\x{9E1A}\\x{9E1B}\\x{9E1E}\\x{9E75}' .\n          '\\x{9E78}\\x{9E79}\\x{9E7D}\\x{9E7F}\\x{9E81}\\x{9E88}\\x{9E8B}\\x{9E8C}\\x{9E91}' .\n          '\\x{9E92}\\x{9E93}\\x{9E95}\\x{9E97}\\x{9E9D}\\x{9E9F}\\x{9EA5}\\x{9EA6}\\x{9EA9}' .\n          '\\x{9EAA}\\x{9EAD}\\x{9EB8}\\x{9EB9}\\x{9EBA}\\x{9EBB}\\x{9EBC}\\x{9EBE}\\x{9EBF}' .\n          '\\x{9EC4}\\x{9ECC}\\x{9ECD}\\x{9ECE}\\x{9ECF}\\x{9ED0}\\x{9ED2}\\x{9ED4}\\x{9ED8}' .\n          '\\x{9ED9}\\x{9EDB}\\x{9EDC}\\x{9EDD}\\x{9EDE}\\x{9EE0}\\x{9EE5}\\x{9EE8}\\x{9EEF}' .\n          '\\x{9EF4}\\x{9EF6}\\x{9EF7}\\x{9EF9}\\x{9EFB}\\x{9EFC}\\x{9EFD}\\x{9F07}\\x{9F08}' .\n          '\\x{9F0E}\\x{9F13}\\x{9F15}\\x{9F20}\\x{9F21}\\x{9F2C}\\x{9F3B}\\x{9F3E}\\x{9F4A}' .\n          '\\x{9F4B}\\x{9F4E}\\x{9F4F}\\x{9F52}\\x{9F54}\\x{9F5F}\\x{9F60}\\x{9F61}\\x{9F62}' .\n          '\\x{9F63}\\x{9F66}\\x{9F67}\\x{9F6A}\\x{9F6C}\\x{9F72}\\x{9F76}\\x{9F77}\\x{9F8D}' .\n          '\\x{9F95}\\x{9F9C}\\x{9F9D}\\x{9FA0}]{1,15}$/iu',\n];\n"
  },
  {
    "path": "src/Hostname.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Zend\\Stdlib\\StringUtils;\n\n/**\n * Please note there are two standalone test scripts for testing IDN characters due to problems\n * with file encoding.\n *\n * The first is tests/Zend/Validator/HostnameTestStandalone.php which is designed to be run on\n * the command line.\n *\n * The second is tests/Zend/Validator/HostnameTestForm.php which is designed to be run via HTML\n * to allow users to test entering UTF-8 characters in a form.\n */\nclass Hostname extends AbstractValidator\n{\n    const CANNOT_DECODE_PUNYCODE  = 'hostnameCannotDecodePunycode';\n    const INVALID                 = 'hostnameInvalid';\n    const INVALID_DASH            = 'hostnameDashCharacter';\n    const INVALID_HOSTNAME        = 'hostnameInvalidHostname';\n    const INVALID_HOSTNAME_SCHEMA = 'hostnameInvalidHostnameSchema';\n    const INVALID_LOCAL_NAME      = 'hostnameInvalidLocalName';\n    const INVALID_URI             = 'hostnameInvalidUri';\n    const IP_ADDRESS_NOT_ALLOWED  = 'hostnameIpAddressNotAllowed';\n    const LOCAL_NAME_NOT_ALLOWED  = 'hostnameLocalNameNotAllowed';\n    const UNDECIPHERABLE_TLD      = 'hostnameUndecipherableTld';\n    const UNKNOWN_TLD             = 'hostnameUnknownTld';\n\n    // @codingStandardsIgnoreStart\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::CANNOT_DECODE_PUNYCODE  => \"The input appears to be a DNS hostname but the given punycode notation cannot be decoded\",\n        self::INVALID                 => \"Invalid type given. String expected\",\n        self::INVALID_DASH            => \"The input appears to be a DNS hostname but contains a dash in an invalid position\",\n        self::INVALID_HOSTNAME        => \"The input does not match the expected structure for a DNS hostname\",\n        self::INVALID_HOSTNAME_SCHEMA => \"The input appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'\",\n        self::INVALID_LOCAL_NAME      => \"The input does not appear to be a valid local network name\",\n        self::INVALID_URI             => \"The input does not appear to be a valid URI hostname\",\n        self::IP_ADDRESS_NOT_ALLOWED  => \"The input appears to be an IP address, but IP addresses are not allowed\",\n        self::LOCAL_NAME_NOT_ALLOWED  => \"The input appears to be a local network name but local network names are not allowed\",\n        self::UNDECIPHERABLE_TLD      => \"The input appears to be a DNS hostname but cannot extract TLD part\",\n        self::UNKNOWN_TLD             => \"The input appears to be a DNS hostname but cannot match TLD against known list\",\n    ];\n    // @codingStandardsIgnoreEnd\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'tld' => 'tld',\n    ];\n\n    const ALLOW_DNS   = 1;  // Allows Internet domain names (e.g., example.com)\n    const ALLOW_IP    = 2;  // Allows IP addresses\n    const ALLOW_LOCAL = 4;  // Allows local network names (e.g., localhost, www.localdomain)\n    const ALLOW_URI   = 8;  // Allows URI hostnames\n    const ALLOW_ALL   = 15;  // Allows all types of hostnames\n\n    /**\n     * Array of valid top-level-domains\n     * IanaVersion 2019122700\n     *\n     * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt  List of all TLDs by domain\n     * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs\n     * @var array\n     */\n    protected $validTlds = [\n        'aaa',\n        'aarp',\n        'abarth',\n        'abb',\n        'abbott',\n        'abbvie',\n        'abc',\n        'able',\n        'abogado',\n        'abudhabi',\n        'ac',\n        'academy',\n        'accenture',\n        'accountant',\n        'accountants',\n        'aco',\n        'actor',\n        'ad',\n        'adac',\n        'ads',\n        'adult',\n        'ae',\n        'aeg',\n        'aero',\n        'aetna',\n        'af',\n        'afamilycompany',\n        'afl',\n        'africa',\n        'ag',\n        'agakhan',\n        'agency',\n        'ai',\n        'aig',\n        'aigo',\n        'airbus',\n        'airforce',\n        'airtel',\n        'akdn',\n        'al',\n        'alfaromeo',\n        'alibaba',\n        'alipay',\n        'allfinanz',\n        'allstate',\n        'ally',\n        'alsace',\n        'alstom',\n        'am',\n        'americanexpress',\n        'americanfamily',\n        'amex',\n        'amfam',\n        'amica',\n        'amsterdam',\n        'analytics',\n        'android',\n        'anquan',\n        'anz',\n        'ao',\n        'aol',\n        'apartments',\n        'app',\n        'apple',\n        'aq',\n        'aquarelle',\n        'ar',\n        'arab',\n        'aramco',\n        'archi',\n        'army',\n        'arpa',\n        'art',\n        'arte',\n        'as',\n        'asda',\n        'asia',\n        'associates',\n        'at',\n        'athleta',\n        'attorney',\n        'au',\n        'auction',\n        'audi',\n        'audible',\n        'audio',\n        'auspost',\n        'author',\n        'auto',\n        'autos',\n        'avianca',\n        'aw',\n        'aws',\n        'ax',\n        'axa',\n        'az',\n        'azure',\n        'ba',\n        'baby',\n        'baidu',\n        'banamex',\n        'bananarepublic',\n        'band',\n        'bank',\n        'bar',\n        'barcelona',\n        'barclaycard',\n        'barclays',\n        'barefoot',\n        'bargains',\n        'baseball',\n        'basketball',\n        'bauhaus',\n        'bayern',\n        'bb',\n        'bbc',\n        'bbt',\n        'bbva',\n        'bcg',\n        'bcn',\n        'bd',\n        'be',\n        'beats',\n        'beauty',\n        'beer',\n        'bentley',\n        'berlin',\n        'best',\n        'bestbuy',\n        'bet',\n        'bf',\n        'bg',\n        'bh',\n        'bharti',\n        'bi',\n        'bible',\n        'bid',\n        'bike',\n        'bing',\n        'bingo',\n        'bio',\n        'biz',\n        'bj',\n        'black',\n        'blackfriday',\n        'blockbuster',\n        'blog',\n        'bloomberg',\n        'blue',\n        'bm',\n        'bms',\n        'bmw',\n        'bn',\n        'bnpparibas',\n        'bo',\n        'boats',\n        'boehringer',\n        'bofa',\n        'bom',\n        'bond',\n        'boo',\n        'book',\n        'booking',\n        'bosch',\n        'bostik',\n        'boston',\n        'bot',\n        'boutique',\n        'box',\n        'br',\n        'bradesco',\n        'bridgestone',\n        'broadway',\n        'broker',\n        'brother',\n        'brussels',\n        'bs',\n        'bt',\n        'budapest',\n        'bugatti',\n        'build',\n        'builders',\n        'business',\n        'buy',\n        'buzz',\n        'bv',\n        'bw',\n        'by',\n        'bz',\n        'bzh',\n        'ca',\n        'cab',\n        'cafe',\n        'cal',\n        'call',\n        'calvinklein',\n        'cam',\n        'camera',\n        'camp',\n        'cancerresearch',\n        'canon',\n        'capetown',\n        'capital',\n        'capitalone',\n        'car',\n        'caravan',\n        'cards',\n        'care',\n        'career',\n        'careers',\n        'cars',\n        'casa',\n        'case',\n        'caseih',\n        'cash',\n        'casino',\n        'cat',\n        'catering',\n        'catholic',\n        'cba',\n        'cbn',\n        'cbre',\n        'cbs',\n        'cc',\n        'cd',\n        'ceb',\n        'center',\n        'ceo',\n        'cern',\n        'cf',\n        'cfa',\n        'cfd',\n        'cg',\n        'ch',\n        'chanel',\n        'channel',\n        'charity',\n        'chase',\n        'chat',\n        'cheap',\n        'chintai',\n        'christmas',\n        'chrome',\n        'church',\n        'ci',\n        'cipriani',\n        'circle',\n        'cisco',\n        'citadel',\n        'citi',\n        'citic',\n        'city',\n        'cityeats',\n        'ck',\n        'cl',\n        'claims',\n        'cleaning',\n        'click',\n        'clinic',\n        'clinique',\n        'clothing',\n        'cloud',\n        'club',\n        'clubmed',\n        'cm',\n        'cn',\n        'co',\n        'coach',\n        'codes',\n        'coffee',\n        'college',\n        'cologne',\n        'com',\n        'comcast',\n        'commbank',\n        'community',\n        'company',\n        'compare',\n        'computer',\n        'comsec',\n        'condos',\n        'construction',\n        'consulting',\n        'contact',\n        'contractors',\n        'cooking',\n        'cookingchannel',\n        'cool',\n        'coop',\n        'corsica',\n        'country',\n        'coupon',\n        'coupons',\n        'courses',\n        'cpa',\n        'cr',\n        'credit',\n        'creditcard',\n        'creditunion',\n        'cricket',\n        'crown',\n        'crs',\n        'cruise',\n        'cruises',\n        'csc',\n        'cu',\n        'cuisinella',\n        'cv',\n        'cw',\n        'cx',\n        'cy',\n        'cymru',\n        'cyou',\n        'cz',\n        'dabur',\n        'dad',\n        'dance',\n        'data',\n        'date',\n        'dating',\n        'datsun',\n        'day',\n        'dclk',\n        'dds',\n        'de',\n        'deal',\n        'dealer',\n        'deals',\n        'degree',\n        'delivery',\n        'dell',\n        'deloitte',\n        'delta',\n        'democrat',\n        'dental',\n        'dentist',\n        'desi',\n        'design',\n        'dev',\n        'dhl',\n        'diamonds',\n        'diet',\n        'digital',\n        'direct',\n        'directory',\n        'discount',\n        'discover',\n        'dish',\n        'diy',\n        'dj',\n        'dk',\n        'dm',\n        'dnp',\n        'do',\n        'docs',\n        'doctor',\n        'dog',\n        'domains',\n        'dot',\n        'download',\n        'drive',\n        'dtv',\n        'dubai',\n        'duck',\n        'dunlop',\n        'dupont',\n        'durban',\n        'dvag',\n        'dvr',\n        'dz',\n        'earth',\n        'eat',\n        'ec',\n        'eco',\n        'edeka',\n        'edu',\n        'education',\n        'ee',\n        'eg',\n        'email',\n        'emerck',\n        'energy',\n        'engineer',\n        'engineering',\n        'enterprises',\n        'epson',\n        'equipment',\n        'er',\n        'ericsson',\n        'erni',\n        'es',\n        'esq',\n        'estate',\n        'esurance',\n        'et',\n        'etisalat',\n        'eu',\n        'eurovision',\n        'eus',\n        'events',\n        'exchange',\n        'expert',\n        'exposed',\n        'express',\n        'extraspace',\n        'fage',\n        'fail',\n        'fairwinds',\n        'faith',\n        'family',\n        'fan',\n        'fans',\n        'farm',\n        'farmers',\n        'fashion',\n        'fast',\n        'fedex',\n        'feedback',\n        'ferrari',\n        'ferrero',\n        'fi',\n        'fiat',\n        'fidelity',\n        'fido',\n        'film',\n        'final',\n        'finance',\n        'financial',\n        'fire',\n        'firestone',\n        'firmdale',\n        'fish',\n        'fishing',\n        'fit',\n        'fitness',\n        'fj',\n        'fk',\n        'flickr',\n        'flights',\n        'flir',\n        'florist',\n        'flowers',\n        'fly',\n        'fm',\n        'fo',\n        'foo',\n        'food',\n        'foodnetwork',\n        'football',\n        'ford',\n        'forex',\n        'forsale',\n        'forum',\n        'foundation',\n        'fox',\n        'fr',\n        'free',\n        'fresenius',\n        'frl',\n        'frogans',\n        'frontdoor',\n        'frontier',\n        'ftr',\n        'fujitsu',\n        'fujixerox',\n        'fun',\n        'fund',\n        'furniture',\n        'futbol',\n        'fyi',\n        'ga',\n        'gal',\n        'gallery',\n        'gallo',\n        'gallup',\n        'game',\n        'games',\n        'gap',\n        'garden',\n        'gay',\n        'gb',\n        'gbiz',\n        'gd',\n        'gdn',\n        'ge',\n        'gea',\n        'gent',\n        'genting',\n        'george',\n        'gf',\n        'gg',\n        'ggee',\n        'gh',\n        'gi',\n        'gift',\n        'gifts',\n        'gives',\n        'giving',\n        'gl',\n        'glade',\n        'glass',\n        'gle',\n        'global',\n        'globo',\n        'gm',\n        'gmail',\n        'gmbh',\n        'gmo',\n        'gmx',\n        'gn',\n        'godaddy',\n        'gold',\n        'goldpoint',\n        'golf',\n        'goo',\n        'goodyear',\n        'goog',\n        'google',\n        'gop',\n        'got',\n        'gov',\n        'gp',\n        'gq',\n        'gr',\n        'grainger',\n        'graphics',\n        'gratis',\n        'green',\n        'gripe',\n        'grocery',\n        'group',\n        'gs',\n        'gt',\n        'gu',\n        'guardian',\n        'gucci',\n        'guge',\n        'guide',\n        'guitars',\n        'guru',\n        'gw',\n        'gy',\n        'hair',\n        'hamburg',\n        'hangout',\n        'haus',\n        'hbo',\n        'hdfc',\n        'hdfcbank',\n        'health',\n        'healthcare',\n        'help',\n        'helsinki',\n        'here',\n        'hermes',\n        'hgtv',\n        'hiphop',\n        'hisamitsu',\n        'hitachi',\n        'hiv',\n        'hk',\n        'hkt',\n        'hm',\n        'hn',\n        'hockey',\n        'holdings',\n        'holiday',\n        'homedepot',\n        'homegoods',\n        'homes',\n        'homesense',\n        'honda',\n        'horse',\n        'hospital',\n        'host',\n        'hosting',\n        'hot',\n        'hoteles',\n        'hotels',\n        'hotmail',\n        'house',\n        'how',\n        'hr',\n        'hsbc',\n        'ht',\n        'hu',\n        'hughes',\n        'hyatt',\n        'hyundai',\n        'ibm',\n        'icbc',\n        'ice',\n        'icu',\n        'id',\n        'ie',\n        'ieee',\n        'ifm',\n        'ikano',\n        'il',\n        'im',\n        'imamat',\n        'imdb',\n        'immo',\n        'immobilien',\n        'in',\n        'inc',\n        'industries',\n        'infiniti',\n        'info',\n        'ing',\n        'ink',\n        'institute',\n        'insurance',\n        'insure',\n        'int',\n        'intel',\n        'international',\n        'intuit',\n        'investments',\n        'io',\n        'ipiranga',\n        'iq',\n        'ir',\n        'irish',\n        'is',\n        'ismaili',\n        'ist',\n        'istanbul',\n        'it',\n        'itau',\n        'itv',\n        'iveco',\n        'jaguar',\n        'java',\n        'jcb',\n        'jcp',\n        'je',\n        'jeep',\n        'jetzt',\n        'jewelry',\n        'jio',\n        'jll',\n        'jm',\n        'jmp',\n        'jnj',\n        'jo',\n        'jobs',\n        'joburg',\n        'jot',\n        'joy',\n        'jp',\n        'jpmorgan',\n        'jprs',\n        'juegos',\n        'juniper',\n        'kaufen',\n        'kddi',\n        'ke',\n        'kerryhotels',\n        'kerrylogistics',\n        'kerryproperties',\n        'kfh',\n        'kg',\n        'kh',\n        'ki',\n        'kia',\n        'kim',\n        'kinder',\n        'kindle',\n        'kitchen',\n        'kiwi',\n        'km',\n        'kn',\n        'koeln',\n        'komatsu',\n        'kosher',\n        'kp',\n        'kpmg',\n        'kpn',\n        'kr',\n        'krd',\n        'kred',\n        'kuokgroup',\n        'kw',\n        'ky',\n        'kyoto',\n        'kz',\n        'la',\n        'lacaixa',\n        'lamborghini',\n        'lamer',\n        'lancaster',\n        'lancia',\n        'land',\n        'landrover',\n        'lanxess',\n        'lasalle',\n        'lat',\n        'latino',\n        'latrobe',\n        'law',\n        'lawyer',\n        'lb',\n        'lc',\n        'lds',\n        'lease',\n        'leclerc',\n        'lefrak',\n        'legal',\n        'lego',\n        'lexus',\n        'lgbt',\n        'li',\n        'liaison',\n        'lidl',\n        'life',\n        'lifeinsurance',\n        'lifestyle',\n        'lighting',\n        'like',\n        'lilly',\n        'limited',\n        'limo',\n        'lincoln',\n        'linde',\n        'link',\n        'lipsy',\n        'live',\n        'living',\n        'lixil',\n        'lk',\n        'llc',\n        'llp',\n        'loan',\n        'loans',\n        'locker',\n        'locus',\n        'loft',\n        'lol',\n        'london',\n        'lotte',\n        'lotto',\n        'love',\n        'lpl',\n        'lplfinancial',\n        'lr',\n        'ls',\n        'lt',\n        'ltd',\n        'ltda',\n        'lu',\n        'lundbeck',\n        'lupin',\n        'luxe',\n        'luxury',\n        'lv',\n        'ly',\n        'ma',\n        'macys',\n        'madrid',\n        'maif',\n        'maison',\n        'makeup',\n        'man',\n        'management',\n        'mango',\n        'map',\n        'market',\n        'marketing',\n        'markets',\n        'marriott',\n        'marshalls',\n        'maserati',\n        'mattel',\n        'mba',\n        'mc',\n        'mckinsey',\n        'md',\n        'me',\n        'med',\n        'media',\n        'meet',\n        'melbourne',\n        'meme',\n        'memorial',\n        'men',\n        'menu',\n        'merckmsd',\n        'metlife',\n        'mg',\n        'mh',\n        'miami',\n        'microsoft',\n        'mil',\n        'mini',\n        'mint',\n        'mit',\n        'mitsubishi',\n        'mk',\n        'ml',\n        'mlb',\n        'mls',\n        'mm',\n        'mma',\n        'mn',\n        'mo',\n        'mobi',\n        'mobile',\n        'moda',\n        'moe',\n        'moi',\n        'mom',\n        'monash',\n        'money',\n        'monster',\n        'mormon',\n        'mortgage',\n        'moscow',\n        'moto',\n        'motorcycles',\n        'mov',\n        'movie',\n        'mp',\n        'mq',\n        'mr',\n        'ms',\n        'msd',\n        'mt',\n        'mtn',\n        'mtr',\n        'mu',\n        'museum',\n        'mutual',\n        'mv',\n        'mw',\n        'mx',\n        'my',\n        'mz',\n        'na',\n        'nab',\n        'nadex',\n        'nagoya',\n        'name',\n        'nationwide',\n        'natura',\n        'navy',\n        'nba',\n        'nc',\n        'ne',\n        'nec',\n        'net',\n        'netbank',\n        'netflix',\n        'network',\n        'neustar',\n        'new',\n        'newholland',\n        'news',\n        'next',\n        'nextdirect',\n        'nexus',\n        'nf',\n        'nfl',\n        'ng',\n        'ngo',\n        'nhk',\n        'ni',\n        'nico',\n        'nike',\n        'nikon',\n        'ninja',\n        'nissan',\n        'nissay',\n        'nl',\n        'no',\n        'nokia',\n        'northwesternmutual',\n        'norton',\n        'now',\n        'nowruz',\n        'nowtv',\n        'np',\n        'nr',\n        'nra',\n        'nrw',\n        'ntt',\n        'nu',\n        'nyc',\n        'nz',\n        'obi',\n        'observer',\n        'off',\n        'office',\n        'okinawa',\n        'olayan',\n        'olayangroup',\n        'oldnavy',\n        'ollo',\n        'om',\n        'omega',\n        'one',\n        'ong',\n        'onl',\n        'online',\n        'onyourside',\n        'ooo',\n        'open',\n        'oracle',\n        'orange',\n        'org',\n        'organic',\n        'origins',\n        'osaka',\n        'otsuka',\n        'ott',\n        'ovh',\n        'pa',\n        'page',\n        'panasonic',\n        'paris',\n        'pars',\n        'partners',\n        'parts',\n        'party',\n        'passagens',\n        'pay',\n        'pccw',\n        'pe',\n        'pet',\n        'pf',\n        'pfizer',\n        'pg',\n        'ph',\n        'pharmacy',\n        'phd',\n        'philips',\n        'phone',\n        'photo',\n        'photography',\n        'photos',\n        'physio',\n        'pics',\n        'pictet',\n        'pictures',\n        'pid',\n        'pin',\n        'ping',\n        'pink',\n        'pioneer',\n        'pizza',\n        'pk',\n        'pl',\n        'place',\n        'play',\n        'playstation',\n        'plumbing',\n        'plus',\n        'pm',\n        'pn',\n        'pnc',\n        'pohl',\n        'poker',\n        'politie',\n        'porn',\n        'post',\n        'pr',\n        'pramerica',\n        'praxi',\n        'press',\n        'prime',\n        'pro',\n        'prod',\n        'productions',\n        'prof',\n        'progressive',\n        'promo',\n        'properties',\n        'property',\n        'protection',\n        'pru',\n        'prudential',\n        'ps',\n        'pt',\n        'pub',\n        'pw',\n        'pwc',\n        'py',\n        'qa',\n        'qpon',\n        'quebec',\n        'quest',\n        'qvc',\n        'racing',\n        'radio',\n        'raid',\n        're',\n        'read',\n        'realestate',\n        'realtor',\n        'realty',\n        'recipes',\n        'red',\n        'redstone',\n        'redumbrella',\n        'rehab',\n        'reise',\n        'reisen',\n        'reit',\n        'reliance',\n        'ren',\n        'rent',\n        'rentals',\n        'repair',\n        'report',\n        'republican',\n        'rest',\n        'restaurant',\n        'review',\n        'reviews',\n        'rexroth',\n        'rich',\n        'richardli',\n        'ricoh',\n        'rightathome',\n        'ril',\n        'rio',\n        'rip',\n        'rmit',\n        'ro',\n        'rocher',\n        'rocks',\n        'rodeo',\n        'rogers',\n        'room',\n        'rs',\n        'rsvp',\n        'ru',\n        'rugby',\n        'ruhr',\n        'run',\n        'rw',\n        'rwe',\n        'ryukyu',\n        'sa',\n        'saarland',\n        'safe',\n        'safety',\n        'sakura',\n        'sale',\n        'salon',\n        'samsclub',\n        'samsung',\n        'sandvik',\n        'sandvikcoromant',\n        'sanofi',\n        'sap',\n        'sarl',\n        'sas',\n        'save',\n        'saxo',\n        'sb',\n        'sbi',\n        'sbs',\n        'sc',\n        'sca',\n        'scb',\n        'schaeffler',\n        'schmidt',\n        'scholarships',\n        'school',\n        'schule',\n        'schwarz',\n        'science',\n        'scjohnson',\n        'scor',\n        'scot',\n        'sd',\n        'se',\n        'search',\n        'seat',\n        'secure',\n        'security',\n        'seek',\n        'select',\n        'sener',\n        'services',\n        'ses',\n        'seven',\n        'sew',\n        'sex',\n        'sexy',\n        'sfr',\n        'sg',\n        'sh',\n        'shangrila',\n        'sharp',\n        'shaw',\n        'shell',\n        'shia',\n        'shiksha',\n        'shoes',\n        'shop',\n        'shopping',\n        'shouji',\n        'show',\n        'showtime',\n        'shriram',\n        'si',\n        'silk',\n        'sina',\n        'singles',\n        'site',\n        'sj',\n        'sk',\n        'ski',\n        'skin',\n        'sky',\n        'skype',\n        'sl',\n        'sling',\n        'sm',\n        'smart',\n        'smile',\n        'sn',\n        'sncf',\n        'so',\n        'soccer',\n        'social',\n        'softbank',\n        'software',\n        'sohu',\n        'solar',\n        'solutions',\n        'song',\n        'sony',\n        'soy',\n        'space',\n        'sport',\n        'spot',\n        'spreadbetting',\n        'sr',\n        'srl',\n        'ss',\n        'st',\n        'stada',\n        'staples',\n        'star',\n        'statebank',\n        'statefarm',\n        'stc',\n        'stcgroup',\n        'stockholm',\n        'storage',\n        'store',\n        'stream',\n        'studio',\n        'study',\n        'style',\n        'su',\n        'sucks',\n        'supplies',\n        'supply',\n        'support',\n        'surf',\n        'surgery',\n        'suzuki',\n        'sv',\n        'swatch',\n        'swiftcover',\n        'swiss',\n        'sx',\n        'sy',\n        'sydney',\n        'symantec',\n        'systems',\n        'sz',\n        'tab',\n        'taipei',\n        'talk',\n        'taobao',\n        'target',\n        'tatamotors',\n        'tatar',\n        'tattoo',\n        'tax',\n        'taxi',\n        'tc',\n        'tci',\n        'td',\n        'tdk',\n        'team',\n        'tech',\n        'technology',\n        'tel',\n        'temasek',\n        'tennis',\n        'teva',\n        'tf',\n        'tg',\n        'th',\n        'thd',\n        'theater',\n        'theatre',\n        'tiaa',\n        'tickets',\n        'tienda',\n        'tiffany',\n        'tips',\n        'tires',\n        'tirol',\n        'tj',\n        'tjmaxx',\n        'tjx',\n        'tk',\n        'tkmaxx',\n        'tl',\n        'tm',\n        'tmall',\n        'tn',\n        'to',\n        'today',\n        'tokyo',\n        'tools',\n        'top',\n        'toray',\n        'toshiba',\n        'total',\n        'tours',\n        'town',\n        'toyota',\n        'toys',\n        'tr',\n        'trade',\n        'trading',\n        'training',\n        'travel',\n        'travelchannel',\n        'travelers',\n        'travelersinsurance',\n        'trust',\n        'trv',\n        'tt',\n        'tube',\n        'tui',\n        'tunes',\n        'tushu',\n        'tv',\n        'tvs',\n        'tw',\n        'tz',\n        'ua',\n        'ubank',\n        'ubs',\n        'ug',\n        'uk',\n        'unicom',\n        'university',\n        'uno',\n        'uol',\n        'ups',\n        'us',\n        'uy',\n        'uz',\n        'va',\n        'vacations',\n        'vana',\n        'vanguard',\n        'vc',\n        've',\n        'vegas',\n        'ventures',\n        'verisign',\n        'versicherung',\n        'vet',\n        'vg',\n        'vi',\n        'viajes',\n        'video',\n        'vig',\n        'viking',\n        'villas',\n        'vin',\n        'vip',\n        'virgin',\n        'visa',\n        'vision',\n        'vistaprint',\n        'viva',\n        'vivo',\n        'vlaanderen',\n        'vn',\n        'vodka',\n        'volkswagen',\n        'volvo',\n        'vote',\n        'voting',\n        'voto',\n        'voyage',\n        'vu',\n        'vuelos',\n        'wales',\n        'walmart',\n        'walter',\n        'wang',\n        'wanggou',\n        'watch',\n        'watches',\n        'weather',\n        'weatherchannel',\n        'webcam',\n        'weber',\n        'website',\n        'wed',\n        'wedding',\n        'weibo',\n        'weir',\n        'wf',\n        'whoswho',\n        'wien',\n        'wiki',\n        'williamhill',\n        'win',\n        'windows',\n        'wine',\n        'winners',\n        'wme',\n        'wolterskluwer',\n        'woodside',\n        'work',\n        'works',\n        'world',\n        'wow',\n        'ws',\n        'wtc',\n        'wtf',\n        'xbox',\n        'xerox',\n        'xfinity',\n        'xihuan',\n        'xin',\n        'कॉम',\n        'セール',\n        '佛山',\n        'ಭಾರತ',\n        '慈善',\n        '集团',\n        '在线',\n        '한국',\n        'ଭାରତ',\n        '大众汽车',\n        '点看',\n        'คอม',\n        'ভাৰত',\n        'ভারত',\n        '八卦',\n        'موقع',\n        'বাংলা',\n        '公益',\n        '公司',\n        '香格里拉',\n        '网站',\n        '移动',\n        '我爱你',\n        'москва',\n        'қаз',\n        'католик',\n        'онлайн',\n        'сайт',\n        '联通',\n        'срб',\n        'бг',\n        'бел',\n        'קום',\n        '时尚',\n        '微博',\n        '淡马锡',\n        'ファッション',\n        'орг',\n        'नेट',\n        'ストア',\n        '삼성',\n        'சிங்கப்பூர்',\n        '商标',\n        '商店',\n        '商城',\n        'дети',\n        'мкд',\n        'ею',\n        'ポイント',\n        '新闻',\n        '工行',\n        '家電',\n        'كوم',\n        '中文网',\n        '中信',\n        '中国',\n        '中國',\n        '娱乐',\n        '谷歌',\n        'భారత్',\n        'ලංකා',\n        '電訊盈科',\n        '购物',\n        'クラウド',\n        'ભારત',\n        '通販',\n        'भारतम्',\n        'भारत',\n        'भारोत',\n        '网店',\n        'संगठन',\n        '餐厅',\n        '网络',\n        'ком',\n        'укр',\n        '香港',\n        '诺基亚',\n        '食品',\n        '飞利浦',\n        '台湾',\n        '台灣',\n        '手表',\n        '手机',\n        'мон',\n        'الجزائر',\n        'عمان',\n        'ارامكو',\n        'ایران',\n        'العليان',\n        'اتصالات',\n        'امارات',\n        'بازار',\n        'موريتانيا',\n        'پاکستان',\n        'الاردن',\n        'بارت',\n        'بھارت',\n        'المغرب',\n        'ابوظبي',\n        'السعودية',\n        'ڀارت',\n        'كاثوليك',\n        'سودان',\n        'همراه',\n        'عراق',\n        'مليسيا',\n        '澳門',\n        '닷컴',\n        '政府',\n        'شبكة',\n        'بيتك',\n        'عرب',\n        'გე',\n        '机构',\n        '组织机构',\n        '健康',\n        'ไทย',\n        'سورية',\n        '招聘',\n        'рус',\n        'рф',\n        '珠宝',\n        'تونس',\n        '大拿',\n        'みんな',\n        'グーグル',\n        'ευ',\n        'ελ',\n        '世界',\n        '書籍',\n        'ഭാരതം',\n        'ਭਾਰਤ',\n        '网址',\n        '닷넷',\n        'コム',\n        '天主教',\n        '游戏',\n        'vermögensberater',\n        'vermögensberatung',\n        '企业',\n        '信息',\n        '嘉里大酒店',\n        '嘉里',\n        'مصر',\n        'قطر',\n        '广东',\n        'இலங்கை',\n        'இந்தியா',\n        'հայ',\n        '新加坡',\n        'فلسطين',\n        '政务',\n        'xxx',\n        'xyz',\n        'yachts',\n        'yahoo',\n        'yamaxun',\n        'yandex',\n        'ye',\n        'yodobashi',\n        'yoga',\n        'yokohama',\n        'you',\n        'youtube',\n        'yt',\n        'yun',\n        'za',\n        'zappos',\n        'zara',\n        'zero',\n        'zip',\n        'zm',\n        'zone',\n        'zuerich',\n        'zw',\n    ];\n\n    // @codingStandardsIgnoreStart\n    /**\n     * Array for valid Idns\n     * @see http://www.iana.org/domains/idn-tables/ Official list of supported IDN Chars\n     * (.AC) Ascension Island http://www.nic.ac/pdf/AC-IDN-Policy.pdf\n     * (.AR) Argentina http://www.nic.ar/faqidn.html\n     * (.AS) American Samoa http://www.nic.as/idn/chars.cfm\n     * (.AT) Austria http://www.nic.at/en/service/technical_information/idn/charset_converter/\n     * (.BIZ) International http://www.iana.org/domains/idn-tables/\n     * (.BR) Brazil http://registro.br/faq/faq6.html\n     * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html\n     * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html\n     * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1\n     * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html\n     * (.COM) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html\n     * (.DE) Germany https://www.denic.de/en/know-how/idn-domains/idn-character-list/\n     * (.DK) Danmark http://www.dk-hostmaster.dk/index.php?id=151\n     * (.EE) Estonia https://www.iana.org/domains/idn-tables/tables/pl_et-pl_1.0.html\n     * (.ES) Spain https://www.nic.es/media/2008-05/1210147705287.pdf\n     * (.FI) Finland http://www.ficora.fi/en/index/palvelut/fiverkkotunnukset/aakkostenkaytto.html\n     * (.GR) Greece https://grweb.ics.forth.gr/CharacterTable1_en.jsp\n     * (.HR) Croatia https://www.dns.hr/en/portal/files/Odluka-1,2alfanum-dijak.pdf\n     * (.HU) Hungary http://www.domain.hu/domain/English/szabalyzat/szabalyzat.html\n     * (.IL) Israel http://www.isoc.org.il/domains/il-domain-rules.html\n     * (.INFO) International http://www.nic.info/info/idn\n     * (.IO) British Indian Ocean Territory http://www.nic.io/IO-IDN-Policy.pdf\n     * (.IR) Iran http://www.nic.ir/Allowable_Characters_dot-iran\n     * (.IS) Iceland https://www.isnic.is/en/domain/rules#2\n     * (.KR) Korea http://www.iana.org/domains/idn-tables/tables/kr_ko-kr_1.0.html\n     * (.LI) Liechtenstein https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1\n     * (.LT) Lithuania http://www.domreg.lt/static/doc/public/idn_symbols-en.pdf\n     * (.MD) Moldova http://www.register.md/\n     * (.MUSEUM) International http://www.iana.org/domains/idn-tables/tables/museum_latn_1.0.html\n     * (.NET) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html\n     * (.NO) Norway http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html\n     * (.NU) Niue http://www.worldnames.net/\n     * (.ORG) International http://www.pir.org/index.php?db=content/FAQs&tbl=FAQs_Registrant&id=2\n     * (.PE) Peru https://www.nic.pe/nuevas_politicas_faq_2.php\n     * (.PL) Poland http://www.dns.pl/IDN/allowed_character_sets.pdf\n     * (.PR) Puerto Rico http://www.nic.pr/idn_rules.asp\n     * (.PT) Portugal https://online.dns.pt/dns_2008/do?com=DS;8216320233;111;+PAGE(4000058)+K-CAT-CODIGO(C.125)+RCNT(100);\n     * (.RU) Russia http://www.iana.org/domains/idn-tables/tables/ru_ru-ru_1.0.html\n     * (.SA) Saudi Arabia http://www.iana.org/domains/idn-tables/tables/sa_ar_1.0.html\n     * (.SE) Sweden http://www.iis.se/english/IDN_campaignsite.shtml?lang=en\n     * (.SH) Saint Helena http://www.nic.sh/SH-IDN-Policy.pdf\n     * (.SJ) Svalbard and Jan Mayen http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html\n     * (.TH) Thailand http://www.iana.org/domains/idn-tables/tables/th_th-th_1.0.html\n     * (.TM) Turkmenistan http://www.nic.tm/TM-IDN-Policy.pdf\n     * (.TR) Turkey https://www.nic.tr/index.php\n     * (.UA) Ukraine http://www.iana.org/domains/idn-tables/tables/ua_cyrl_1.2.html\n     * (.VE) Venice http://www.iana.org/domains/idn-tables/tables/ve_es_1.0.html\n     * (.VN) Vietnam http://www.vnnic.vn/english/5-6-300-2-2-04-20071115.htm#1.%20Introduction\n     *\n     * @var array\n     */\n    protected $validIdns = [\n        'AC'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'],\n        'AR'  => [1 => '/^[\\x{002d}0-9a-zà-ãç-êìíñ-õü]{1,63}$/iu'],\n        'AS'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźż]{1,63}$/iu'],\n        'AT'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿœšž]{1,63}$/iu'],\n        'BIZ' => 'Hostname/Biz.php',\n        'BR'  => [1 => '/^[\\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'],\n        'BV'  => [1 => '/^[\\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'],\n        'CAT' => [1 => '/^[\\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'],\n        'CH'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'],\n        'CL'  => [1 => '/^[\\x{002d}0-9a-záéíñóúü]{1,63}$/iu'],\n        'CN'  => 'Hostname/Cn.php',\n        'COM' => 'Hostname/Com.php',\n        'DE'  => [1 => '/^[\\x{002d}0-9a-záàăâåäãąāæćĉčċçďđéèĕêěëėęēğĝġģĥħíìĭîïĩįīıĵķĺľļłńňñņŋóòŏôöőõøōœĸŕřŗśŝšşßťţŧúùŭûůüűũųūŵýŷÿźžżðþ]{1,63}$/iu'],\n        'DK'  => [1 => '/^[\\x{002d}0-9a-zäåæéöøü]{1,63}$/iu'],\n        'EE'  => [1 => '/^[\\x{002d}0-9a-zäõöüšž]{1,63}$/iu'],\n        'ES'  => [1 => '/^[\\x{002d}0-9a-zàáçèéíïñòóúü·]{1,63}$/iu'],\n        'EU'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',\n            2 => '/^[\\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňŉŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',\n            3 => '/^[\\x{002d}0-9a-zșț]{1,63}$/iu',\n            4 => '/^[\\x{002d}0-9a-zΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ]{1,63}$/iu',\n            5 => '/^[\\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]{1,63}$/iu',\n            6 => '/^[\\x{002d}0-9a-zἀ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ὼώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷῂῃῄῆῇῐ-ῒΐῖῗῠ-ῧῲῳῴῶῷ]{1,63}$/iu'],\n        'FI'  => [1 => '/^[\\x{002d}0-9a-zäåö]{1,63}$/iu'],\n        'GR'  => [1 => '/^[\\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ώἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu'],\n        'HK'  => 'Hostname/Cn.php',\n        'HR'  => [1 => '/^[\\x{002d}0-9a-zžćčđš]{1,63}$/iu'],\n        'HU'  => [1 => '/^[\\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu'],\n        'IL'  => [1 => '/^[\\x{002d}0-9\\x{05D0}-\\x{05EA}]{1,63}$/iu',\n            2 => '/^[\\x{002d}0-9a-z]{1,63}$/i'],\n        'INFO' => [1 => '/^[\\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',\n            2 => '/^[\\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',\n            3 => '/^[\\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',\n            4 => '/^[\\x{AC00}-\\x{D7A3}]{1,17}$/iu',\n            5 => '/^[\\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',\n            6 => '/^[\\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',\n            7 => '/^[\\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',\n            8 => '/^[\\x{002d}0-9a-záéíñóúü]{1,63}$/iu'],\n        'IO'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'],\n        'IS'  => [1 => '/^[\\x{002d}0-9a-záéýúíóþæöð]{1,63}$/iu'],\n        'IT'  => [1 => '/^[\\x{002d}0-9a-zàâäèéêëìîïòôöùûüæœçÿß-]{1,63}$/iu'],\n        'JP'  => 'Hostname/Jp.php',\n        'KR'  => [1 => '/^[\\x{AC00}-\\x{D7A3}]{1,17}$/iu'],\n        'LI'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'],\n        'LT'  => [1 => '/^[\\x{002d}0-9ąčęėįšųūž]{1,63}$/iu'],\n        'MD'  => [1 => '/^[\\x{002d}0-9ăâîşţ]{1,63}$/iu'],\n        'MUSEUM' => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿāăąćċčďđēėęěğġģħīįıķĺļľłńņňŋōőœŕŗřśşšţťŧūůűųŵŷźżžǎǐǒǔ\\x{01E5}\\x{01E7}\\x{01E9}\\x{01EF}ə\\x{0292}ẁẃẅỳ]{1,63}$/iu'],\n        'NET' => 'Hostname/Com.php',\n        'NO'  => [1 => '/^[\\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'],\n        'NU'  => 'Hostname/Com.php',\n        'ORG' => [1 => '/^[\\x{002d}0-9a-záéíñóúü]{1,63}$/iu',\n            2 => '/^[\\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',\n            3 => '/^[\\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',\n            4 => '/^[\\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',\n            5 => '/^[\\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',\n            6 => '/^[\\x{AC00}-\\x{D7A3}]{1,17}$/iu',\n            7 => '/^[\\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu'],\n        'PE'  => [1 => '/^[\\x{002d}0-9a-zñáéíóúü]{1,63}$/iu'],\n        'PL'  => [1 => '/^[\\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',\n            2 => '/^[\\x{002d}а-ик-ш\\x{0450}ѓѕјљњќџ]{1,63}$/iu',\n            3 => '/^[\\x{002d}0-9a-zâîăşţ]{1,63}$/iu',\n            4 => '/^[\\x{002d}0-9а-яё\\x{04C2}]{1,63}$/iu',\n            5 => '/^[\\x{002d}0-9a-zàáâèéêìíîòóôùúûċġħż]{1,63}$/iu',\n            6 => '/^[\\x{002d}0-9a-zàäåæéêòóôöøü]{1,63}$/iu',\n            7 => '/^[\\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',\n            8 => '/^[\\x{002d}0-9a-zàáâãçéêíòóôõúü]{1,63}$/iu',\n            9 => '/^[\\x{002d}0-9a-zâîăşţ]{1,63}$/iu',\n            10 => '/^[\\x{002d}0-9a-záäéíóôúýčďĺľňŕšťž]{1,63}$/iu',\n            11 => '/^[\\x{002d}0-9a-zçë]{1,63}$/iu',\n            12 => '/^[\\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu',\n            13 => '/^[\\x{002d}0-9a-zćčđšž]{1,63}$/iu',\n            14 => '/^[\\x{002d}0-9a-zâçöûüğış]{1,63}$/iu',\n            15 => '/^[\\x{002d}0-9a-záéíñóúü]{1,63}$/iu',\n            16 => '/^[\\x{002d}0-9a-zäõöüšž]{1,63}$/iu',\n            17 => '/^[\\x{002d}0-9a-zĉĝĥĵŝŭ]{1,63}$/iu',\n            18 => '/^[\\x{002d}0-9a-zâäéëîô]{1,63}$/iu',\n            19 => '/^[\\x{002d}0-9a-zàáâäåæçèéêëìíîïðñòôöøùúûüýćčłńřśš]{1,63}$/iu',\n            20 => '/^[\\x{002d}0-9a-zäåæõöøüšž]{1,63}$/iu',\n            21 => '/^[\\x{002d}0-9a-zàáçèéìíòóùú]{1,63}$/iu',\n            22 => '/^[\\x{002d}0-9a-zàáéíóöúüőű]{1,63}$/iu',\n            23 => '/^[\\x{002d}0-9ΐά-ώ]{1,63}$/iu',\n            24 => '/^[\\x{002d}0-9a-zàáâåæçèéêëðóôöøüþœ]{1,63}$/iu',\n            25 => '/^[\\x{002d}0-9a-záäéíóöúüýčďěňřšťůž]{1,63}$/iu',\n            26 => '/^[\\x{002d}0-9a-z·àçèéíïòóúü]{1,63}$/iu',\n            27 => '/^[\\x{002d}0-9а-ъьюя\\x{0450}\\x{045D}]{1,63}$/iu',\n            28 => '/^[\\x{002d}0-9а-яёіў]{1,63}$/iu',\n            29 => '/^[\\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',\n            30 => '/^[\\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',\n            31 => '/^[\\x{002d}0-9a-zàâæçèéêëîïñôùûüÿœ]{1,63}$/iu',\n            32 => '/^[\\x{002d}0-9а-щъыьэюяёєіїґ]{1,63}$/iu',\n            33 => '/^[\\x{002d}0-9א-ת]{1,63}$/iu'],\n        'PR'  => [1 => '/^[\\x{002d}0-9a-záéíóúñäëïüöâêîôûàèùæçœãõ]{1,63}$/iu'],\n        'PT'  => [1 => '/^[\\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu'],\n        'RS'  => [1 => '/^[\\x{002d}0-9a-zßáâäçéëíîóôöúüýăąćčďđęěĺľłńňőŕřśşšţťůűźżž]{1,63}$/iu'],\n        'RU'  => [1 => '/^[\\x{002d}0-9а-яё]{1,63}$/iu'],\n        'SA'  => [1 => '/^[\\x{002d}.0-9\\x{0621}-\\x{063A}\\x{0641}-\\x{064A}\\x{0660}-\\x{0669}]{1,63}$/iu'],\n        'SE'  => [1 => '/^[\\x{002d}0-9a-zäåéöü]{1,63}$/iu'],\n        'SH'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'],\n        'SI'  => [\n            1 => '/^[\\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',\n            2 => '/^[\\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňŉŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',\n            3 => '/^[\\x{002d}0-9a-zșț]{1,63}$/iu'],\n        'SJ'  => [1 => '/^[\\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'],\n        'TH'  => [1 => '/^[\\x{002d}0-9a-z\\x{0E01}-\\x{0E3A}\\x{0E40}-\\x{0E4D}\\x{0E50}-\\x{0E59}]{1,63}$/iu'],\n        'TM'  => [1 => '/^[\\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'],\n        'TW'  => 'Hostname/Cn.php',\n        'TR'  => [1 => '/^[\\x{002d}0-9a-zğıüşöç]{1,63}$/iu'],\n        'UA'  => [1 => '/^[\\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџґӂʼ]{1,63}$/iu'],\n        'VE'  => [1 => '/^[\\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'],\n        'VN'  => [1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\\x{1EA0}-\\x{1EF9}]{1,63}$/iu'],\n        'мон' => [1 => '/^[\\x{002d}0-9\\x{0430}-\\x{044F}]{1,63}$/iu'],\n        'срб' => [1 => '/^[\\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu'],\n        'сайт' => [1 => '/^[\\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'],\n        'онлайн' => [1 => '/^[\\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'],\n        '中国' => 'Hostname/Cn.php',\n        '中國' => 'Hostname/Cn.php',\n        'ලංකා' => [1 => '/^[\\x{0d80}-\\x{0dff}]{1,63}$/iu'],\n        '香港' => 'Hostname/Cn.php',\n        '台湾' => 'Hostname/Cn.php',\n        '台灣' => 'Hostname/Cn.php',\n        'امارات'   => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'الاردن'    => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'السعودية' => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'ไทย' => [1 => '/^[\\x{002d}0-9a-z\\x{0E01}-\\x{0E3A}\\x{0E40}-\\x{0E4D}\\x{0E50}-\\x{0E59}]{1,63}$/iu'],\n        'рф' => [1 => '/^[\\x{002d}0-9а-яё]{1,63}$/iu'],\n        'تونس' => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'مصر' => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'இலங்கை' => [1 => '/^[\\x{0b80}-\\x{0bff}]{1,63}$/iu'],\n        'فلسطين' => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n        'شبكة'  => [1 => '/^[\\x{0621}-\\x{0624}\\x{0626}-\\x{063A}\\x{0641}\\x{0642}\\x{0644}-\\x{0648}\\x{067E}\\x{0686}\\x{0698}\\x{06A9}\\x{06AF}\\x{06CC}\\x{06F0}-\\x{06F9}]{1,30}$/iu'],\n    ];\n    // @codingStandardsIgnoreEnd\n\n    protected $idnLength = [\n        'BIZ' => [5 => 17, 11 => 15, 12 => 20],\n        'CN'  => [1 => 20],\n        'COM' => [3 => 17, 5 => 20],\n        'HK'  => [1 => 15],\n        'INFO' => [4 => 17],\n        'KR'  => [1 => 17],\n        'NET' => [3 => 17, 5 => 20],\n        'ORG' => [6 => 17],\n        'TW'  => [1 => 20],\n        'امارات' => [1 => 30],\n        'الاردن' => [1 => 30],\n        'السعودية' => [1 => 30],\n        'تونس' => [1 => 30],\n        'مصر' => [1 => 30],\n        'فلسطين' => [1 => 30],\n        'شبكة' => [1 => 30],\n        '中国' => [1 => 20],\n        '中國' => [1 => 20],\n        '香港' => [1 => 20],\n        '台湾' => [1 => 20],\n        '台灣' => [1 => 20],\n    ];\n\n    protected $tld;\n\n    /**\n     * Options for the hostname validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'allow'       => self::ALLOW_DNS, // Allow these hostnames\n        'useIdnCheck' => true,  // Check IDN domains\n        'useTldCheck' => true,  // Check TLD elements\n        'ipValidator' => null,  // IP validator to use\n    ];\n\n    /**\n     * Sets validator options.\n     *\n     * @param int  $allow       OPTIONAL Set what types of hostname to allow (default ALLOW_DNS)\n     * @param bool $useIdnCheck OPTIONAL Set whether IDN domains are validated (default true)\n     * @param bool $useTldCheck Set whether the TLD element of a hostname is validated (default true)\n     * @param Ip   $ipValidator OPTIONAL\n     * @see http://www.iana.org/cctld/specifications-policies-cctlds-01apr02.htm  Technical Specifications for ccTLDs\n     */\n    public function __construct($options = [])\n    {\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp['allow'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['useIdnCheck'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['useTldCheck'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['ipValidator'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('ipValidator', $options)) {\n            $options['ipValidator'] = null;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set ip validator\n     *\n     * @return Ip\n     */\n    public function getIpValidator()\n    {\n        return $this->options['ipValidator'];\n    }\n\n    /**\n     *\n     * @param Ip $ipValidator OPTIONAL\n     * @return Hostname;\n     */\n    public function setIpValidator(Ip $ipValidator = null)\n    {\n        if ($ipValidator === null) {\n            $ipValidator = new Ip();\n        }\n\n        $this->options['ipValidator'] = $ipValidator;\n        return $this;\n    }\n\n    /**\n     * Returns the allow option\n     *\n     * @return int\n     */\n    public function getAllow()\n    {\n        return $this->options['allow'];\n    }\n\n    /**\n     * Sets the allow option\n     *\n     * @param  int $allow\n     * @return Hostname Provides a fluent interface\n     */\n    public function setAllow($allow)\n    {\n        $this->options['allow'] = $allow;\n        return $this;\n    }\n\n    /**\n     * Returns the set idn option\n     *\n     * @return bool\n     */\n    public function getIdnCheck()\n    {\n        return $this->options['useIdnCheck'];\n    }\n\n    /**\n     * Set whether IDN domains are validated\n     *\n     * This only applies when DNS hostnames are validated\n     *\n     * @param  bool $useIdnCheck Set to true to validate IDN domains\n     * @return Hostname\n     */\n    public function useIdnCheck($useIdnCheck)\n    {\n        $this->options['useIdnCheck'] = (bool) $useIdnCheck;\n        return $this;\n    }\n\n    /**\n     * Returns the set tld option\n     *\n     * @return bool\n     */\n    public function getTldCheck()\n    {\n        return $this->options['useTldCheck'];\n    }\n\n    /**\n     * Set whether the TLD element of a hostname is validated\n     *\n     * This only applies when DNS hostnames are validated\n     *\n     * @param  bool $useTldCheck Set to true to validate TLD elements\n     * @return Hostname\n     */\n    public function useTldCheck($useTldCheck)\n    {\n        $this->options['useTldCheck'] = (bool) $useTldCheck;\n        return $this;\n    }\n\n    /**\n     * Defined by Interface\n     *\n     * Returns true if and only if the $value is a valid hostname with respect to the current allow option\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        // Check input against IP address schema\n        if (((preg_match('/^[0-9.]*$/', $value) && strpos($value, '.') !== false)\n                || (preg_match('/^[0-9a-f:.]*$/i', $value) && strpos($value, ':') !== false))\n            && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value)\n        ) {\n            if (! ($this->getAllow() & self::ALLOW_IP)) {\n                $this->error(self::IP_ADDRESS_NOT_ALLOWED);\n                return false;\n            }\n\n            return true;\n        }\n\n        // Local hostnames are allowed to be partial (ending '.')\n        if ($this->getAllow() & self::ALLOW_LOCAL) {\n            if (substr($value, -1) === '.') {\n                $value = substr($value, 0, -1);\n                if (substr($value, -1) === '.') {\n                    // Empty hostnames (ending '..') are not allowed\n                    $this->error(self::INVALID_LOCAL_NAME);\n                    return false;\n                }\n            }\n        }\n\n        $domainParts = explode('.', $value);\n\n        // Prevent partial IP V4 addresses (ending '.')\n        if (count($domainParts) == 4 && preg_match('/^[0-9.a-e:.]*$/i', $value)\n            && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value)\n        ) {\n            $this->error(self::INVALID_LOCAL_NAME);\n        }\n\n        $utf8StrWrapper = StringUtils::getWrapper('UTF-8');\n\n        // Check input against DNS hostname schema\n        if (count($domainParts) > 1\n            && $utf8StrWrapper->strlen($value) >= 4\n            && $utf8StrWrapper->strlen($value) <= 254\n        ) {\n            $status = false;\n\n            do {\n                // First check TLD\n                $matches = [];\n                if (preg_match('/([^.]{2,63})$/u', end($domainParts), $matches)\n                    || (array_key_exists(end($domainParts), $this->validIdns))\n                ) {\n                    reset($domainParts);\n\n                    // Hostname characters are: *(label dot)(label dot label); max 254 chars\n                    // label: id-prefix [*ldh{61} id-prefix]; max 63 chars\n                    // id-prefix: alpha / digit\n                    // ldh: alpha / digit / dash\n\n                    $this->tld = $matches[1];\n                    // Decode Punycode TLD to IDN\n                    if (strpos($this->tld, 'xn--') === 0) {\n                        $this->tld = $this->decodePunycode(substr($this->tld, 4));\n                        if ($this->tld === false) {\n                            return false;\n                        }\n                    } else {\n                        $this->tld = strtoupper($this->tld);\n                    }\n\n                    // Match TLD against known list\n                    $removedTld = false;\n                    if ($this->getTldCheck()) {\n                        if (! in_array(strtolower($this->tld), $this->validTlds)\n                            && ! in_array($this->tld, $this->validTlds)) {\n                            $this->error(self::UNKNOWN_TLD);\n                            $status = false;\n                            break;\n                        }\n                        // We have already validated that the TLD is fine. We don't want it to go through the below\n                        // checks as new UTF-8 TLDs will incorrectly fail if there is no IDN regex for it.\n                        array_pop($domainParts);\n                        $removedTld = true;\n                    }\n\n                    /**\n                     * Match against IDN hostnames\n                     * Note: Keep label regex short to avoid issues with long patterns when matching IDN hostnames\n                     *\n                     * @see Hostname\\Interface\n                     */\n                    $regexChars = [0 => '/^[a-z0-9\\x2d]{1,63}$/i'];\n                    if ($this->getIdnCheck() && isset($this->validIdns[$this->tld])) {\n                        if (is_string($this->validIdns[$this->tld])) {\n                            $regexChars += include __DIR__ . '/' . $this->validIdns[$this->tld];\n                        } else {\n                            $regexChars += $this->validIdns[$this->tld];\n                        }\n                    }\n\n                    // Check each hostname part\n                    $check = 0;\n                    $lastDomainPart = end($domainParts);\n                    if (! $removedTld) {\n                        $lastDomainPart = prev($domainParts);\n                    }\n                    foreach ($domainParts as $domainPart) {\n                        // Decode Punycode domain names to IDN\n                        if (strpos($domainPart, 'xn--') === 0) {\n                            $domainPart = $this->decodePunycode(substr($domainPart, 4));\n                            if ($domainPart === false) {\n                                return false;\n                            }\n                        }\n\n                        // Skip following checks if domain part is empty, as it definitely is not a valid hostname then\n                        if ($domainPart === '') {\n                            $this->error(self::INVALID_HOSTNAME);\n                            $status = false;\n                            break 2;\n                        }\n\n                        // Check dash (-) does not start, end or appear in 3rd and 4th positions\n                        if ($utf8StrWrapper->strpos($domainPart, '-') === 0\n                            || ($utf8StrWrapper->strlen($domainPart) > 2\n                                && $utf8StrWrapper->strpos($domainPart, '-', 2) == 2\n                                && $utf8StrWrapper->strpos($domainPart, '-', 3) == 3\n                            )\n                            || (\n                                $utf8StrWrapper->strpos($domainPart, '-') === (\n                                $utf8StrWrapper->strlen($domainPart) - 1\n                                )\n                            )\n                        ) {\n                            $this->error(self::INVALID_DASH);\n                            $status = false;\n                            break 2;\n                        }\n\n                        // Check each domain part\n                        $checked = false;\n                        $isSubDomain = $domainPart != $lastDomainPart;\n                        $partRegexChars = $isSubDomain ? ['/^[a-z0-9_\\x2d]{1,63}$/i'] + $regexChars : $regexChars;\n                        foreach ($partRegexChars as $regexKey => $regexChar) {\n                            $status = preg_match($regexChar, $domainPart);\n                            if ($status > 0) {\n                                $length = 63;\n                                if (array_key_exists($this->tld, $this->idnLength)\n                                    && array_key_exists($regexKey, $this->idnLength[$this->tld])\n                                ) {\n                                    $length = $this->idnLength[$this->tld];\n                                }\n\n                                if ($utf8StrWrapper->strlen($domainPart) > $length) {\n                                    $this->error(self::INVALID_HOSTNAME);\n                                    $status = false;\n                                } else {\n                                    $checked = true;\n                                    break;\n                                }\n                            }\n                        }\n\n                        if ($checked) {\n                            ++$check;\n                        }\n                    }\n\n                    // If one of the labels doesn't match, the hostname is invalid\n                    if ($check !== count($domainParts)) {\n                        $this->error(self::INVALID_HOSTNAME_SCHEMA);\n                        $status = false;\n                    }\n                } else {\n                    // Hostname not long enough\n                    $this->error(self::UNDECIPHERABLE_TLD);\n                    $status = false;\n                }\n            } while (false);\n\n            // If the input passes as an Internet domain name, and domain names are allowed, then the hostname\n            // passes validation\n            if ($status && ($this->getAllow() & self::ALLOW_DNS)) {\n                return true;\n            }\n        } elseif ($this->getAllow() & self::ALLOW_DNS) {\n            $this->error(self::INVALID_HOSTNAME);\n        }\n\n        // Check for URI Syntax (RFC3986)\n        if ($this->getAllow() & self::ALLOW_URI) {\n            if (preg_match(\"/^([a-zA-Z0-9-._~!$&\\'()*+,;=]|%[[:xdigit:]]{2}){1,254}$/i\", $value)) {\n                return true;\n            }\n\n            $this->error(self::INVALID_URI);\n        }\n\n        // Check input against local network name schema; last chance to pass validation\n        $regexLocal = '/^(([a-zA-Z0-9\\x2d]{1,63}\\x2e)*[a-zA-Z0-9\\x2d]{1,63}[\\x2e]{0,1}){1,254}$/';\n        $status = preg_match($regexLocal, $value);\n\n        // If the input passes as a local network name, and local network names are allowed, then the\n        // hostname passes validation\n        $allowLocal = $this->getAllow() & self::ALLOW_LOCAL;\n        if ($status && $allowLocal) {\n            return true;\n        }\n\n        // If the input does not pass as a local network name, add a message\n        if (! $status) {\n            $this->error(self::INVALID_LOCAL_NAME);\n        }\n\n        // If local network names are not allowed, add a message\n        if ($status && ! $allowLocal) {\n            $this->error(self::LOCAL_NAME_NOT_ALLOWED);\n        }\n\n        return false;\n    }\n\n    /**\n     * Decodes a punycode encoded string to it's original utf8 string\n     * Returns false in case of a decoding failure.\n     *\n     * @param  string $encoded Punycode encoded string to decode\n     * @return string|false\n     */\n    protected function decodePunycode($encoded)\n    {\n        if (! preg_match('/^[a-z0-9-]+$/i', $encoded)) {\n            // no punycode encoded string\n            $this->error(self::CANNOT_DECODE_PUNYCODE);\n            return false;\n        }\n\n        $decoded = [];\n        $separator = strrpos($encoded, '-');\n        if ($separator > 0) {\n            for ($x = 0; $x < $separator; ++$x) {\n                // prepare decoding matrix\n                $decoded[] = ord($encoded[$x]);\n            }\n        }\n\n        $lengthd = count($decoded);\n        $lengthe = strlen($encoded);\n\n        // decoding\n        $init  = true;\n        $base  = 72;\n        $index = 0;\n        $char  = 0x80;\n\n        for ($indexe = ($separator) ? ($separator + 1) : 0; $indexe < $lengthe; ++$lengthd) {\n            for ($oldIndex = $index, $pos = 1, $key = 36; 1; $key += 36) {\n                $hex   = ord($encoded[$indexe++]);\n                $digit = ($hex - 48 < 10) ? $hex - 22\n                       : (($hex - 65 < 26) ? $hex - 65\n                       : (($hex - 97 < 26) ? $hex - 97\n                       : 36));\n\n                $index += $digit * $pos;\n                $tag    = ($key <= $base) ? 1 : (($key >= $base + 26) ? 26 : ($key - $base));\n                if ($digit < $tag) {\n                    break;\n                }\n\n                $pos = (int) ($pos * (36 - $tag));\n            }\n\n            $delta   = intval($init ? (($index - $oldIndex) / 700) : (($index - $oldIndex) / 2));\n            $delta  += intval($delta / ($lengthd + 1));\n            for ($key = 0; $delta > 910 / 2; $key += 36) {\n                $delta = intval($delta / 35);\n            }\n\n            $base   = intval($key + 36 * $delta / ($delta + 38));\n            $init   = false;\n            $char  += (int) ($index / ($lengthd + 1));\n            $index %= ($lengthd + 1);\n            if ($lengthd > 0) {\n                for ($i = $lengthd; $i > $index; $i--) {\n                    $decoded[$i] = $decoded[($i - 1)];\n                }\n            }\n\n            $decoded[$index++] = $char;\n        }\n\n        // convert decoded ucs4 to utf8 string\n        foreach ($decoded as $key => $value) {\n            if ($value < 128) {\n                $decoded[$key] = chr($value);\n            } elseif ($value < (1 << 11)) {\n                $decoded[$key]  = chr(192 + ($value >> 6));\n                $decoded[$key] .= chr(128 + ($value & 63));\n            } elseif ($value < (1 << 16)) {\n                $decoded[$key]  = chr(224 + ($value >> 12));\n                $decoded[$key] .= chr(128 + (($value >> 6) & 63));\n                $decoded[$key] .= chr(128 + ($value & 63));\n            } elseif ($value < (1 << 21)) {\n                $decoded[$key]  = chr(240 + ($value >> 18));\n                $decoded[$key] .= chr(128 + (($value >> 12) & 63));\n                $decoded[$key] .= chr(128 + (($value >> 6) & 63));\n                $decoded[$key] .= chr(128 + ($value & 63));\n            } else {\n                $this->error(self::CANNOT_DECODE_PUNYCODE);\n                return false;\n            }\n        }\n\n        return implode($decoded);\n    }\n}\n"
  },
  {
    "path": "src/Iban.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\n/**\n * Validates IBAN Numbers (International Bank Account Numbers)\n */\nclass Iban extends AbstractValidator\n{\n    const NOTSUPPORTED     = 'ibanNotSupported';\n    const SEPANOTSUPPORTED = 'ibanSepaNotSupported';\n    const FALSEFORMAT      = 'ibanFalseFormat';\n    const CHECKFAILED      = 'ibanCheckFailed';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOTSUPPORTED     => \"Unknown country within the IBAN\",\n        self::SEPANOTSUPPORTED => \"Countries outside the Single Euro Payments Area (SEPA) are not supported\",\n        self::FALSEFORMAT      => \"The input has a false IBAN format\",\n        self::CHECKFAILED      => \"The input has failed the IBAN check\",\n    ];\n\n    /**\n     * Optional country code by ISO 3166-1\n     *\n     * @var string|null\n     */\n    protected $countryCode;\n\n    /**\n     * Optionally allow IBAN codes from non-SEPA countries. Defaults to true\n     *\n     * @var bool\n     */\n    protected $allowNonSepa = true;\n\n    /**\n     * The SEPA country codes\n     *\n     * @var array<ISO 3166-1>\n     */\n    protected static $sepaCountries = [\n        'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'FO', 'GL', 'EE', 'FI', 'FR', 'DE',\n        'GI', 'GR', 'HU', 'IS', 'IE', 'IT', 'LV', 'LI', 'LT', 'LU', 'MT', 'MC',\n        'NL', 'NO', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB', 'SM',\n        'HR',\n    ];\n\n    /**\n     * IBAN regexes by country code\n     *\n     * @var array\n     */\n    protected static $ibanRegex = [\n        'AD' => 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}',\n        'AE' => 'AE[0-9]{2}[0-9]{3}[0-9]{16}',\n        'AL' => 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}',\n        'AT' => 'AT[0-9]{2}[0-9]{5}[0-9]{11}',\n        'AZ' => 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}',\n        'BA' => 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}',\n        'BE' => 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}',\n        'BG' => 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}',\n        'BH' => 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}',\n        'BR' => 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]',\n        'BY' => 'BY[0-9]{2}[A-Z0-9]{4}[0-9]{4}[A-Z0-9]{16}',\n        'CH' => 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}',\n        'CR' => 'CR[0-9]{2}[0-9]{3}[0-9]{14}',\n        'CY' => 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}',\n        'CZ' => 'CZ[0-9]{2}[0-9]{20}',\n        'DE' => 'DE[0-9]{2}[0-9]{8}[0-9]{10}',\n        'DO' => 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}',\n        'DK' => 'DK[0-9]{2}[0-9]{14}',\n        'EE' => 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}',\n        'ES' => 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}',\n        'FI' => 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}',\n        'FO' => 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',\n        'FR' => 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',\n        'GB' => 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',\n        'GE' => 'GE[0-9]{2}[A-Z]{2}[0-9]{16}',\n        'GI' => 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}',\n        'GL' => 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',\n        'GR' => 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}',\n        'GT' => 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}',\n        'HR' => 'HR[0-9]{2}[0-9]{7}[0-9]{10}',\n        'HU' => 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}',\n        'IE' => 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',\n        'IL' => 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}',\n        'IS' => 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}',\n        'IT' => 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',\n        'KW' => 'KW[0-9]{2}[A-Z]{4}[0-9]{22}',\n        'KZ' => 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}',\n        'LB' => 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}',\n        'LI' => 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}',\n        'LT' => 'LT[0-9]{2}[0-9]{5}[0-9]{11}',\n        'LU' => 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}',\n        'LV' => 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}',\n        'MC' => 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',\n        'MD' => 'MD[0-9]{2}[A-Z0-9]{20}',\n        'ME' => 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',\n        'MK' => 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}',\n        'MR' => 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}',\n        'MT' => 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}',\n        'MU' => 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}',\n        'NL' => 'NL[0-9]{2}[A-Z]{4}[0-9]{10}',\n        'NO' => 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}',\n        'PK' => 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',\n        'PL' => 'PL[0-9]{2}[0-9]{8}[0-9]{16}',\n        'PS' => 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',\n        'PT' => 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}',\n        'RO' => 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',\n        'RS' => 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',\n        'SA' => 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}',\n        'SE' => 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}',\n        'SI' => 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}',\n        'SK' => 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}',\n        'SM' => 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',\n        'TN' => 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',\n        'TR' => 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}',\n        'VG' => 'VG[0-9]{2}[A-Z]{4}[0-9]{16}',\n    ];\n\n    /**\n     * Sets validator options\n     *\n     * @param  array|Traversable $options OPTIONAL\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if (array_key_exists('country_code', $options)) {\n            $this->setCountryCode($options['country_code']);\n        }\n\n        if (array_key_exists('allow_non_sepa', $options)) {\n            $this->setAllowNonSepa($options['allow_non_sepa']);\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the optional country code by ISO 3166-1\n     *\n     * @return string|null\n     */\n    public function getCountryCode()\n    {\n        return $this->countryCode;\n    }\n\n    /**\n     * Sets an optional country code by ISO 3166-1\n     *\n     * @param  string|null $countryCode\n     * @return Iban provides a fluent interface\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setCountryCode($countryCode = null)\n    {\n        if ($countryCode !== null) {\n            $countryCode = (string) $countryCode;\n\n            if (! isset(static::$ibanRegex[$countryCode])) {\n                throw new Exception\\InvalidArgumentException(\n                    \"Country code '{$countryCode}' invalid by ISO 3166-1 or not supported\"\n                );\n            }\n        }\n\n        $this->countryCode = $countryCode;\n        return $this;\n    }\n\n    /**\n     * Returns the optional allow non-sepa countries setting\n     *\n     * @return bool\n     */\n    public function allowNonSepa()\n    {\n        return $this->allowNonSepa;\n    }\n\n    /**\n     * Sets the optional allow non-sepa countries setting\n     *\n     * @param  bool $allowNonSepa\n     * @return Iban provides a fluent interface\n     */\n    public function setAllowNonSepa($allowNonSepa)\n    {\n        $this->allowNonSepa = (bool) $allowNonSepa;\n        return $this;\n    }\n\n    /**\n     * Returns true if $value is a valid IBAN\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::FALSEFORMAT);\n            return false;\n        }\n\n        $value = str_replace(' ', '', strtoupper($value));\n        $this->setValue($value);\n\n        $countryCode = $this->getCountryCode();\n        if ($countryCode === null) {\n            $countryCode = substr($value, 0, 2);\n        }\n\n        if (! array_key_exists($countryCode, static::$ibanRegex)) {\n            $this->setValue($countryCode);\n            $this->error(self::NOTSUPPORTED);\n            return false;\n        }\n\n        if (! $this->allowNonSepa && ! in_array($countryCode, static::$sepaCountries)) {\n            $this->setValue($countryCode);\n            $this->error(self::SEPANOTSUPPORTED);\n            return false;\n        }\n\n        if (! preg_match('/^' . static::$ibanRegex[$countryCode] . '$/', $value)) {\n            $this->error(self::FALSEFORMAT);\n            return false;\n        }\n\n        $format = substr($value, 4) . substr($value, 0, 4);\n        $format = str_replace(\n            ['A',  'B',  'C',  'D',  'E',  'F',  'G',  'H',  'I',  'J',  'K',  'L',  'M',\n                  'N',  'O',  'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',  'X',  'Y',  'Z'],\n            ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22',\n                  '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'],\n            $format\n        );\n\n        $temp = intval(substr($format, 0, 1));\n        $len  = strlen($format);\n        for ($x = 1; $x < $len; ++$x) {\n            $temp *= 10;\n            $temp += intval(substr($format, $x, 1));\n            $temp %= 97;\n        }\n\n        if ($temp != 1) {\n            $this->error(self::CHECKFAILED);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Identical.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse ArrayAccess;\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass Identical extends AbstractValidator\n{\n    /**\n     * Error codes\n     * @const string\n     */\n    const NOT_SAME      = 'notSame';\n    const MISSING_TOKEN = 'missingToken';\n\n    /**\n     * Error messages\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_SAME      => \"The two given tokens do not match\",\n        self::MISSING_TOKEN => 'No token was provided to match against',\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'token' => 'tokenString'\n    ];\n\n    /**\n     * Original token against which to validate\n     * @var string\n     */\n    protected $tokenString;\n    protected $token;\n    protected $strict  = true;\n    protected $literal = false;\n\n    /**\n     * Sets validator options\n     *\n     * @param  mixed $token\n     */\n    public function __construct($token = null)\n    {\n        if ($token instanceof Traversable) {\n            $token = ArrayUtils::iteratorToArray($token);\n        }\n\n        if (is_array($token) && array_key_exists('token', $token)) {\n            if (array_key_exists('strict', $token)) {\n                $this->setStrict($token['strict']);\n            }\n\n            if (array_key_exists('literal', $token)) {\n                $this->setLiteral($token['literal']);\n            }\n\n            $this->setToken($token['token']);\n        } elseif (null !== $token) {\n            $this->setToken($token);\n        }\n\n        parent::__construct(is_array($token) ? $token : null);\n    }\n\n    /**\n     * Retrieve token\n     *\n     * @return mixed\n     */\n    public function getToken()\n    {\n        return $this->token;\n    }\n\n    /**\n     * Set token against which to compare\n     *\n     * @param  mixed $token\n     * @return Identical\n     */\n    public function setToken($token)\n    {\n        $this->tokenString = (is_array($token) ? var_export($token, true) : (string) $token);\n        $this->token       = $token;\n        return $this;\n    }\n\n    /**\n     * Returns the strict parameter\n     *\n     * @return bool\n     */\n    public function getStrict()\n    {\n        return $this->strict;\n    }\n\n    /**\n     * Sets the strict parameter\n     *\n     * @param  bool $strict\n     * @return Identical\n     */\n    public function setStrict($strict)\n    {\n        $this->strict = (bool) $strict;\n        return $this;\n    }\n\n    /**\n     * Returns the literal parameter\n     *\n     * @return bool\n     */\n    public function getLiteral()\n    {\n        return $this->literal;\n    }\n\n    /**\n     * Sets the literal parameter\n     *\n     * @param  bool $literal\n     * @return Identical\n     */\n    public function setLiteral($literal)\n    {\n        $this->literal = (bool) $literal;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if a token has been set and the provided value\n     * matches that token.\n     *\n     * @param  mixed $value\n     * @param  array|ArrayAccess $context\n     * @throws Exception\\InvalidArgumentException If context is not array or ArrayObject\n     * @return bool\n     */\n    public function isValid($value, $context = null)\n    {\n        $this->setValue($value);\n\n        $token = $this->getToken();\n\n        if (! $this->getLiteral() && $context !== null) {\n            if (! is_array($context) && ! ($context instanceof ArrayAccess)) {\n                throw new Exception\\InvalidArgumentException(sprintf(\n                    'Context passed to %s must be array, ArrayObject or null; received \"%s\"',\n                    __METHOD__,\n                    is_object($context) ? get_class($context) : gettype($context)\n                ));\n            }\n\n            if (is_array($token)) {\n                while (is_array($token)) {\n                    $key = key($token);\n                    if (! isset($context[$key])) {\n                        break;\n                    }\n                    $context = $context[$key];\n                    $token   = $token[$key];\n                }\n            }\n\n            // if $token is an array it means the above loop didn't went all the way down to the leaf,\n            // so the $token structure doesn't match the $context structure\n            if (is_array($token) || ! isset($context[$token])) {\n                $token = $this->getToken();\n            } else {\n                $token = $context[$token];\n            }\n        }\n\n        if ($token === null) {\n            $this->error(self::MISSING_TOKEN);\n            return false;\n        }\n\n        $strict = $this->getStrict();\n        if (($strict && ($value !== $token)) || (! $strict && ($value != $token))) {\n            $this->error(self::NOT_SAME);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/InArray.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse RecursiveArrayIterator;\nuse RecursiveIteratorIterator;\n\nclass InArray extends AbstractValidator\n{\n    const NOT_IN_ARRAY = 'notInArray';\n\n    // Type of Strict check\n    /**\n     * standard in_array strict checking value and type\n     */\n    const COMPARE_STRICT = 1;\n\n    /**\n     * Non strict check but prevents \"asdf\" == 0 returning TRUE causing false/positive.\n     * This is the most secure option for non-strict checks and replaces strict = false\n     * This will only be effective when the input is a string\n     */\n    const COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY = 0;\n\n    /**\n     * Standard non-strict check where \"asdf\" == 0 returns TRUE\n     * This will be wanted when comparing \"0\" against int 0\n     */\n    const COMPARE_NOT_STRICT = -1;\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_IN_ARRAY => 'The input was not found in the haystack',\n    ];\n\n    /**\n     * Haystack of possible values\n     *\n     * @var array\n     */\n    protected $haystack;\n\n    /**\n     * Type of strict check to be used. Due to \"foo\" == 0 === TRUE with in_array when strict = false,\n     * an option has been added to prevent this. When $strict = 0/false, the most\n     * secure non-strict check is implemented. if $strict = -1, the default in_array non-strict\n     * behaviour is used\n     *\n     * @var int\n     */\n    protected $strict = self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY;\n\n    /**\n     * Whether a recursive search should be done\n     *\n     * @var bool\n     */\n    protected $recursive = false;\n\n    /**\n     * Returns the haystack option\n     *\n     * @return mixed\n     * @throws Exception\\RuntimeException if haystack option is not set\n     */\n    public function getHaystack()\n    {\n        if ($this->haystack === null) {\n            throw new Exception\\RuntimeException('haystack option is mandatory');\n        }\n        return $this->haystack;\n    }\n\n    /**\n     * Sets the haystack option\n     *\n     * @param  mixed $haystack\n     * @return InArray Provides a fluent interface\n     */\n    public function setHaystack(array $haystack)\n    {\n        $this->haystack = $haystack;\n        return $this;\n    }\n\n    /**\n     * Returns the strict option\n     *\n     * @return bool|int\n     */\n    public function getStrict()\n    {\n        // To keep BC with new strict modes\n        if ($this->strict == self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY\n            || $this->strict == self::COMPARE_STRICT\n        ) {\n            return (bool) $this->strict;\n        }\n        return $this->strict;\n    }\n\n    /**\n     * Sets the strict option mode\n     * InArray::COMPARE_STRICT\n     * InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY\n     * InArray::COMPARE_NOT_STRICT\n     *\n     * @param  int $strict\n     * @return InArray Provides a fluent interface\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setStrict($strict)\n    {\n        $checkTypes = [\n            self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY,    // 0\n            self::COMPARE_STRICT,                                             // 1\n            self::COMPARE_NOT_STRICT                                          // -1\n        ];\n\n        // validate strict value\n        if (! in_array($strict, $checkTypes)) {\n            throw new Exception\\InvalidArgumentException('Strict option must be one of the COMPARE_ constants');\n        }\n\n        $this->strict = $strict;\n        return $this;\n    }\n\n    /**\n     * Returns the recursive option\n     *\n     * @return bool\n     */\n    public function getRecursive()\n    {\n        return $this->recursive;\n    }\n\n    /**\n     * Sets the recursive option\n     *\n     * @param  bool $recursive\n     * @return InArray Provides a fluent interface\n     */\n    public function setRecursive($recursive)\n    {\n        $this->recursive = (bool) $recursive;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is contained in the haystack option. If the strict\n     * option is true, then the type of $value is also checked.\n     *\n     * @param mixed $value\n     * See {@link http://php.net/manual/function.in-array.php#104501}\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        // we create a copy of the haystack in case we need to modify it\n        $haystack = $this->getHaystack();\n\n        // if the input is a string or float, and vulnerability protection is on\n        // we type cast the input to a string\n        if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict\n            && (is_int($value) || is_float($value))) {\n            $value = (string) $value;\n        }\n\n        $this->setValue($value);\n\n        if ($this->getRecursive()) {\n            $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack));\n            foreach ($iterator as $element) {\n                if (self::COMPARE_STRICT == $this->strict) {\n                    if ($element === $value) {\n                        return true;\n                    }\n                } else {\n                    // add protection to prevent string to int vuln's\n                    $el = $element;\n                    if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict\n                        && is_string($value) && (is_int($el) || is_float($el))\n                    ) {\n                        $el = (string) $el;\n                    }\n\n                    if ($el == $value) {\n                        return true;\n                    }\n                }\n            }\n        } else {\n            /**\n             * If the check is not strict, then, to prevent \"asdf\" being converted to 0\n             * and returning a false positive if 0 is in haystack, we type cast\n             * the haystack to strings. To prevent \"56asdf\" == 56 === TRUE we also\n             * type cast values like 56 to strings as well.\n             *\n             * This occurs only if the input is a string and a haystack member is an int\n             */\n            if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict\n                && is_string($value)\n            ) {\n                foreach ($haystack as &$h) {\n                    if (is_int($h) || is_float($h)) {\n                        $h = (string) $h;\n                    }\n                }\n            }\n\n            if (in_array($value, $haystack, self::COMPARE_STRICT == $this->strict)) {\n                return true;\n            }\n        }\n\n        $this->error(self::NOT_IN_ARRAY);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Ip.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\n\nclass Ip extends AbstractValidator\n{\n    const INVALID        = 'ipInvalid';\n    const NOT_IP_ADDRESS = 'notIpAddress';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID        => 'Invalid type given. String expected',\n        self::NOT_IP_ADDRESS => \"The input does not appear to be a valid IP address\",\n    ];\n\n    /**\n     * Internal options\n     *\n     * @var array\n     */\n    protected $options = [\n        'allowipv4'      => true, // Enable IPv4 Validation\n        'allowipv6'      => true, // Enable IPv6 Validation\n        'allowipvfuture' => false, // Enable IPvFuture Validation\n        'allowliteral'   => true, // Enable IPs in literal format (only IPv6 and IPvFuture)\n    ];\n\n    /**\n     * Sets the options for this validator\n     *\n     * @param array|Traversable $options\n     * @throws Exception\\InvalidArgumentException If there is any kind of IP allowed or $options is not an array\n     *                                            or Traversable.\n     * @return AbstractValidator\n     */\n    public function setOptions($options = [])\n    {\n        parent::setOptions($options);\n\n        if (! $this->options['allowipv4'] && ! $this->options['allowipv6'] && ! $this->options['allowipvfuture']) {\n            throw new Exception\\InvalidArgumentException('Nothing to validate. Check your options');\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is a valid IP address\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n\n        if ($this->options['allowipv4'] && $this->validateIPv4($value)) {\n            return true;\n        } else {\n            if ((bool) $this->options['allowliteral']) {\n                static $regex = '/^\\[(.*)\\]$/';\n                if ((bool) preg_match($regex, $value, $matches)) {\n                    $value = $matches[1];\n                }\n            }\n\n            if (($this->options['allowipv6'] && $this->validateIPv6($value)) ||\n                ($this->options['allowipvfuture'] && $this->validateIPvFuture($value))\n            ) {\n                return true;\n            }\n        }\n        $this->error(self::NOT_IP_ADDRESS);\n        return false;\n    }\n\n    /**\n     * Validates an IPv4 address\n     *\n     * @param string $value\n     * @return bool\n     */\n    protected function validateIPv4($value)\n    {\n        if (preg_match('/^([01]{8}\\.){3}[01]{8}\\z/i', $value)) {\n            // binary format  00000000.00000000.00000000.00000000\n            $value = bindec(substr($value, 0, 8)) . '.' . bindec(substr($value, 9, 8)) . '.'\n                   . bindec(substr($value, 18, 8)) . '.' . bindec(substr($value, 27, 8));\n        } elseif (preg_match('/^([0-9]{3}\\.){3}[0-9]{3}\\z/i', $value)) {\n            // octet format 777.777.777.777\n            $value = (int) substr($value, 0, 3) . '.' . (int) substr($value, 4, 3) . '.'\n                   . (int) substr($value, 8, 3) . '.' . (int) substr($value, 12, 3);\n        } elseif (preg_match('/^([0-9a-f]{2}\\.){3}[0-9a-f]{2}\\z/i', $value)) {\n            // hex format ff.ff.ff.ff\n            $value = hexdec(substr($value, 0, 2)) . '.' . hexdec(substr($value, 3, 2)) . '.'\n                   . hexdec(substr($value, 6, 2)) . '.' . hexdec(substr($value, 9, 2));\n        }\n\n        $ip2long = ip2long($value);\n        if ($ip2long === false) {\n            return false;\n        }\n\n        return ($value == long2ip($ip2long));\n    }\n\n    /**\n     * Validates an IPv6 address\n     *\n     * @param  string $value Value to check against\n     * @return bool True when $value is a valid ipv6 address\n     *                 False otherwise\n     */\n    protected function validateIPv6($value)\n    {\n        if (strlen($value) < 3) {\n            return $value == '::';\n        }\n\n        if (strpos($value, '.')) {\n            $lastcolon = strrpos($value, ':');\n            if (! ($lastcolon && $this->validateIPv4(substr($value, $lastcolon + 1)))) {\n                return false;\n            }\n\n            $value = substr($value, 0, $lastcolon) . ':0:0';\n        }\n\n        if (strpos($value, '::') === false) {\n            return preg_match('/\\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\\z/i', $value);\n        }\n\n        $colonCount = substr_count($value, ':');\n        if ($colonCount < 8) {\n            return preg_match('/\\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\\z/i', $value);\n        }\n\n        // special case with ending or starting double colon\n        if ($colonCount == 8) {\n            return preg_match('/\\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\\z/i', $value);\n        }\n\n        return false;\n    }\n\n    /**\n     * Validates an IPvFuture address.\n     *\n     * IPvFuture is loosely defined in the Section 3.2.2 of RFC 3986\n     *\n     * @param  string $value Value to check against\n     * @return bool True when $value is a valid IPvFuture address\n     *                 False otherwise\n     */\n    protected function validateIPvFuture($value)\n    {\n        /*\n         * ABNF:\n         * IPvFuture  = \"v\" 1*HEXDIG \".\" 1*( unreserved / sub-delims / \":\" )\n         * unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n         * sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\"\n         *               / \";\" / \"=\"\n         */\n        static $regex = '/^v([[:xdigit:]]+)\\.[[:alnum:]\\-\\._~!\\$&\\'\\(\\)\\*\\+,;=:]+$/';\n\n        $result = (bool) preg_match($regex, $value, $matches);\n\n        /*\n         * \"As such, implementations must not provide the version flag for the\n         *  existing IPv4 and IPv6 literal address forms described below.\"\n         */\n        return ($result && $matches[1] != 4 && $matches[1] != 6);\n    }\n}\n"
  },
  {
    "path": "src/IsCountable.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2017 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Countable;\n\n/**\n * Validate that a value is countable and the count meets expectations.\n *\n * The validator has five specific behaviors:\n *\n * - You can determine if a value is countable only\n * - You can test if the value is an exact count\n * - You can test if the value is greater than a minimum count value\n * - You can test if the value is greater than a maximum count value\n * - You can test if the value is between the minimum and maximum count values\n *\n * When creating the instance or calling `setOptions()`, if you specify a\n * \"count\" option, specifying either \"min\" or \"max\" leads to an inconsistent\n * state and, as such will raise an Exception\\InvalidArgumentException.\n */\nclass IsCountable extends AbstractValidator\n{\n    const NOT_COUNTABLE = 'notCountable';\n    const NOT_EQUALS    = 'notEquals';\n    const GREATER_THAN  = 'greaterThan';\n    const LESS_THAN     = 'lessThan';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_COUNTABLE => \"The input must be an array or an instance of \\\\Countable\",\n        self::NOT_EQUALS    => \"The input count must equal '%count%'\",\n        self::GREATER_THAN  => \"The input count must be less than '%max%', inclusively\",\n        self::LESS_THAN     => \"The input count must be greater than '%min%', inclusively\",\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'count' => ['options' => 'count'],\n        'min'   => ['options' => 'min'],\n        'max'   => ['options' => 'max'],\n    ];\n\n    /**\n     * Options for the between validator\n     *\n     * @var array\n     */\n    protected $options = [\n        'count' => null,\n        'min'   => null,\n        'max'   => null,\n    ];\n\n    public function setOptions($options = [])\n    {\n        foreach (['count', 'min', 'max'] as $option) {\n            if (! is_array($options) || ! isset($options[$option])) {\n                continue;\n            }\n\n            $method = sprintf('set%s', ucfirst($option));\n            $this->$method($options[$option]);\n            unset($options[$option]);\n        }\n\n        return parent::setOptions($options);\n    }\n\n    /**\n     * Returns true if and only if $value is countable (and the count validates against optional values).\n     *\n     * @param  iterable $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! (is_array($value) || $value instanceof Countable)) {\n            $this->error(self::NOT_COUNTABLE);\n            return false;\n        }\n\n        $count = count($value);\n\n        if (is_numeric($this->getCount())) {\n            if ($count != $this->getCount()) {\n                $this->error(self::NOT_EQUALS);\n                return false;\n            }\n\n            return true;\n        }\n\n        if (is_numeric($this->getMax()) && $count > $this->getMax()) {\n            $this->error(self::GREATER_THAN);\n            return false;\n        }\n\n        if (is_numeric($this->getMin()) && $count < $this->getMin()) {\n            $this->error(self::LESS_THAN);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Returns the count option\n     *\n     * @return mixed\n     */\n    public function getCount()\n    {\n        return $this->options['count'];\n    }\n\n    /**\n     * Returns the min option\n     *\n     * @return mixed\n     */\n    public function getMin()\n    {\n        return $this->options['min'];\n    }\n\n    /**\n     * Returns the max option\n     *\n     * @return mixed\n     */\n    public function getMax()\n    {\n        return $this->options['max'];\n    }\n\n    /**\n     * @param mixed $value\n     * @return void\n     * @throws Exception\\InvalidArgumentException if either a min or max option\n     *     was previously set.\n     */\n    private function setCount($value)\n    {\n        if (isset($this->options['min']) || isset($this->options['max'])) {\n            throw new Exception\\InvalidArgumentException(\n                'Cannot set count; conflicts with either a min or max option previously set'\n            );\n        }\n        $this->options['count'] = $value;\n    }\n\n    /**\n     * @param mixed $value\n     * @return void\n     * @throws Exception\\InvalidArgumentException if either a count or max option\n     *     was previously set.\n     */\n    private function setMin($value)\n    {\n        if (isset($this->options['count'])) {\n            throw new Exception\\InvalidArgumentException(\n                'Cannot set count; conflicts with either a count option previously set'\n            );\n        }\n        $this->options['min'] = $value;\n    }\n\n    /**\n     * @param mixed $value\n     * @return void\n     * @throws Exception\\InvalidArgumentException if either a count or min option\n     *     was previously set.\n     */\n    private function setMax($value)\n    {\n        if (isset($this->options['count'])) {\n            throw new Exception\\InvalidArgumentException(\n                'Cannot set count; conflicts with either a count option previously set'\n            );\n        }\n        $this->options['max'] = $value;\n    }\n}\n"
  },
  {
    "path": "src/IsInstanceOf.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\nnamespace Zend\\Validator;\n\nuse Traversable;\n\nclass IsInstanceOf extends AbstractValidator\n{\n    const NOT_INSTANCE_OF = 'notInstanceOf';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_INSTANCE_OF => \"The input is not an instance of '%className%'\",\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'className' => 'className'\n    ];\n\n    /**\n     * Class name\n     *\n     * @var string\n     */\n    protected $className;\n\n    /**\n     * Sets validator options\n     *\n     * @param  array|Traversable $options\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = iterator_to_array($options);\n        }\n\n        // If argument is not an array, consider first argument as class name\n        if (! is_array($options)) {\n            $options = func_get_args();\n\n            $tmpOptions = [];\n            $tmpOptions['className'] = array_shift($options);\n\n            $options = $tmpOptions;\n        }\n\n        if (! array_key_exists('className', $options)) {\n            throw new Exception\\InvalidArgumentException('Missing option \"className\"');\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Get class name\n     *\n     * @return string\n     */\n    public function getClassName()\n    {\n        return $this->className;\n    }\n\n    /**\n     * Set class name\n     *\n     * @param  string $className\n     * @return self\n     */\n    public function setClassName($className)\n    {\n        $this->className = $className;\n        return $this;\n    }\n\n    /**\n     * Returns true if $value is instance of $this->className\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if ($value instanceof $this->className) {\n            return true;\n        }\n        $this->error(self::NOT_INSTANCE_OF);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Isbn/Isbn10.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Isbn;\n\nclass Isbn10\n{\n    /**\n     * @param int|string $value\n     * @return int|string\n     */\n    public function getChecksum($value)\n    {\n        $sum = $this->sum($value);\n        return $this->checksum($sum);\n    }\n\n    /**\n     * Calculate the value sum.\n     *\n     * @param int|string $value\n     * @return int\n     */\n    private function sum($value)\n    {\n        $sum = 0;\n\n        for ($i = 0; $i < 9; $i++) {\n            $sum += (10 - $i) * $value[$i];\n        }\n\n        return $sum;\n    }\n\n    /**\n     * Calculate the checksum for the value's sum.\n     *\n     * @param int $sum\n     * @return int|string\n     */\n    private function checksum($sum)\n    {\n        $checksum = 11 - ($sum % 11);\n\n        if ($checksum == 11) {\n            return '0';\n        }\n\n        if ($checksum == 10) {\n            return 'X';\n        }\n\n        return $checksum;\n    }\n}\n"
  },
  {
    "path": "src/Isbn/Isbn13.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Isbn;\n\nclass Isbn13\n{\n    /**\n     * @param int|string $value\n     * @return int|string\n     */\n    public function getChecksum($value)\n    {\n        $sum = $this->sum($value);\n        return $this->checksum($sum);\n    }\n\n    /**\n     * Calculate the value sum.\n     *\n     * @param int|string $value\n     * @return int\n     */\n    private function sum($value)\n    {\n        $sum = 0;\n\n        for ($i = 0; $i < 12; $i++) {\n            if ($i % 2 == 0) {\n                $sum += $value[$i];\n                continue;\n            }\n\n            $sum += 3 * $value[$i];\n        }\n\n        return $sum;\n    }\n\n    /**\n     * Calculate the checksum for the value's sum.\n     *\n     * @param int $sum\n     * @return int|string\n     */\n    private function checksum($sum)\n    {\n        $checksum = 10 - ($sum % 10);\n\n        if ($checksum == 10) {\n            return '0';\n        }\n\n        return $checksum;\n    }\n}\n"
  },
  {
    "path": "src/Isbn.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nclass Isbn extends AbstractValidator\n{\n    const AUTO    = 'auto';\n    const ISBN10  = '10';\n    const ISBN13  = '13';\n    const INVALID = 'isbnInvalid';\n    const NO_ISBN = 'isbnNoIsbn';\n\n    /**\n     * Validation failure message template definitions.\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID => \"Invalid type given. String or integer expected\",\n        self::NO_ISBN => \"The input is not a valid ISBN number\",\n    ];\n\n    protected $options = [\n        'type'      => self::AUTO, // Allowed type\n        'separator' => '',         // Separator character\n    ];\n\n    /**\n     * Detect input format.\n     *\n     * @return string\n     */\n    protected function detectFormat()\n    {\n        // prepare separator and pattern list\n        $sep      = quotemeta($this->getSeparator());\n        $patterns = [];\n        $lengths  = [];\n        $type     = $this->getType();\n\n        // check for ISBN-10\n        if ($type == self::ISBN10 || $type == self::AUTO) {\n            if (empty($sep)) {\n                $pattern = '/^[0-9]{9}[0-9X]{1}$/';\n                $length  = 10;\n            } else {\n                $pattern = \"/^[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9X]{1}$/\";\n                $length  = 13;\n            }\n\n            $patterns[$pattern] = self::ISBN10;\n            $lengths[$pattern]  = $length;\n        }\n\n        // check for ISBN-13\n        if ($type == self::ISBN13 || $type == self::AUTO) {\n            if (empty($sep)) {\n                $pattern = '/^[0-9]{13}$/';\n                $length  = 13;\n            } else {\n                // @codingStandardsIgnoreStart\n                $pattern = \"/^[0-9]{1,9}[{$sep}]{1}[0-9]{1,5}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1}$/\";\n                // @codingStandardsIgnoreEnd\n                $length  = 17;\n            }\n\n            $patterns[$pattern] = self::ISBN13;\n            $lengths[$pattern]  = $length;\n        }\n\n        // check pattern list\n        foreach ($patterns as $pattern => $type) {\n            if ((strlen($this->getValue()) == $lengths[$pattern]) && preg_match($pattern, $this->getValue())) {\n                return $type;\n            }\n        }\n\n        return;\n    }\n\n    /**\n     * Returns true if and only if $value is a valid ISBN.\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value) && ! is_int($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $value = (string) $value;\n        $this->setValue($value);\n\n        switch ($this->detectFormat()) {\n            case self::ISBN10:\n                $isbn = new Isbn\\Isbn10();\n                break;\n\n            case self::ISBN13:\n                $isbn = new Isbn\\Isbn13();\n                break;\n\n            default:\n                $this->error(self::NO_ISBN);\n                return false;\n        }\n\n        $value = str_replace($this->getSeparator(), '', $value);\n        $checksum = $isbn->getChecksum($value);\n\n        // validate\n        if (substr($this->getValue(), -1) != $checksum) {\n            $this->error(self::NO_ISBN);\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Set separator characters.\n     *\n     * It is allowed only empty string, hyphen and space.\n     *\n     * @param  string $separator\n     * @throws Exception\\InvalidArgumentException When $separator is not valid\n     * @return Isbn Provides a fluent interface\n     */\n    public function setSeparator($separator)\n    {\n        // check separator\n        if (! in_array($separator, ['-', ' ', ''])) {\n            throw new Exception\\InvalidArgumentException('Invalid ISBN separator.');\n        }\n\n        $this->options['separator'] = $separator;\n        return $this;\n    }\n\n    /**\n     * Get separator characters.\n     *\n     * @return string\n     */\n    public function getSeparator()\n    {\n        return $this->options['separator'];\n    }\n\n    /**\n     * Set allowed ISBN type.\n     *\n     * @param  string $type\n     * @throws Exception\\InvalidArgumentException When $type is not valid\n     * @return Isbn Provides a fluent interface\n     */\n    public function setType($type)\n    {\n        // check type\n        if (! in_array($type, [self::AUTO, self::ISBN10, self::ISBN13])) {\n            throw new Exception\\InvalidArgumentException('Invalid ISBN type');\n        }\n\n        $this->options['type'] = $type;\n        return $this;\n    }\n\n    /**\n     * Get allowed ISBN type.\n     *\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->options['type'];\n    }\n}\n"
  },
  {
    "path": "src/LessThan.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass LessThan extends AbstractValidator\n{\n    const NOT_LESS           = 'notLessThan';\n    const NOT_LESS_INCLUSIVE = 'notLessThanInclusive';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_LESS           => \"The input is not less than '%max%'\",\n        self::NOT_LESS_INCLUSIVE => \"The input is not less or equal than '%max%'\"\n    ];\n\n    /**\n     * Additional variables available for validation failure messages\n     *\n     * @var array\n     */\n    protected $messageVariables = [\n        'max' => 'max'\n    ];\n\n    /**\n     * Maximum value\n     *\n     * @var mixed\n     */\n    protected $max;\n\n    /**\n     * Whether to do inclusive comparisons, allowing equivalence to max\n     *\n     * If false, then strict comparisons are done, and the value may equal\n     * the max option\n     *\n     * @var bool\n     */\n    protected $inclusive;\n\n    /**\n     * Sets validator options\n     *\n     * @param  array|Traversable $options\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp['max'] = array_shift($options);\n\n            if (! empty($options)) {\n                $temp['inclusive'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! array_key_exists('max', $options)) {\n            throw new Exception\\InvalidArgumentException(\"Missing option 'max'\");\n        }\n\n        if (! array_key_exists('inclusive', $options)) {\n            $options['inclusive'] = false;\n        }\n\n        $this->setMax($options['max'])\n             ->setInclusive($options['inclusive']);\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the max option\n     *\n     * @return mixed\n     */\n    public function getMax()\n    {\n        return $this->max;\n    }\n\n    /**\n     * Sets the max option\n     *\n     * @param  mixed $max\n     * @return LessThan Provides a fluent interface\n     */\n    public function setMax($max)\n    {\n        $this->max = $max;\n        return $this;\n    }\n\n    /**\n     * Returns the inclusive option\n     *\n     * @return bool\n     */\n    public function getInclusive()\n    {\n        return $this->inclusive;\n    }\n\n    /**\n     * Sets the inclusive option\n     *\n     * @param  bool $inclusive\n     * @return LessThan Provides a fluent interface\n     */\n    public function setInclusive($inclusive)\n    {\n        $this->inclusive = $inclusive;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is less than max option, inclusively\n     * when the inclusive option is true\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        $this->setValue($value);\n\n        if ($this->inclusive) {\n            if ($value > $this->max) {\n                $this->error(self::NOT_LESS_INCLUSIVE);\n                return false;\n            }\n        } else {\n            if ($value >= $this->max) {\n                $this->error(self::NOT_LESS);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Module.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nclass Module\n{\n    /**\n     * Return default zend-validator configuration for zend-mvc applications.\n     */\n    public function getConfig()\n    {\n        $provider = new ConfigProvider();\n\n        return [\n            'service_manager' => $provider->getDependencyConfig(),\n        ];\n    }\n\n    /**\n     * Register a specification for the ValidatorManager with the ServiceListener.\n     *\n     * @param \\Zend\\ModuleManager\\ModuleManager $moduleManager\n     * @return void\n     */\n    public function init($moduleManager)\n    {\n        $event = $moduleManager->getEvent();\n        $container = $event->getParam('ServiceManager');\n        $serviceListener = $container->get('ServiceListener');\n\n        $serviceListener->addServiceManager(\n            'ValidatorManager',\n            'validators',\n            ValidatorProviderInterface::class,\n            'getValidatorConfig'\n        );\n    }\n}\n"
  },
  {
    "path": "src/NotEmpty.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\n\nclass NotEmpty extends AbstractValidator\n{\n    const BOOLEAN       = 0b000000000001;\n    const INTEGER       = 0b000000000010;\n    const FLOAT         = 0b000000000100;\n    const STRING        = 0b000000001000;\n    const ZERO          = 0b000000010000;\n    const EMPTY_ARRAY   = 0b000000100000;\n    const NULL          = 0b000001000000;\n    const PHP           = 0b000001111111;\n    const SPACE         = 0b000010000000;\n    const OBJECT        = 0b000100000000;\n    const OBJECT_STRING = 0b001000000000;\n    const OBJECT_COUNT  = 0b010000000000;\n    const ALL           = 0b011111111111;\n\n    const INVALID  = 'notEmptyInvalid';\n    const IS_EMPTY = 'isEmpty';\n\n    protected $constants = [\n        self::BOOLEAN       => 'boolean',\n        self::INTEGER       => 'integer',\n        self::FLOAT         => 'float',\n        self::STRING        => 'string',\n        self::ZERO          => 'zero',\n        self::EMPTY_ARRAY   => 'array',\n        self::NULL          => 'null',\n        self::PHP           => 'php',\n        self::SPACE         => 'space',\n        self::OBJECT        => 'object',\n        self::OBJECT_STRING => 'objectstring',\n        self::OBJECT_COUNT  => 'objectcount',\n        self::ALL           => 'all',\n    ];\n\n    /**\n     * Default value for types; value = 0b000111101001\n     *\n     * @var array\n     */\n    protected $defaultType = [\n        self::OBJECT,\n        self::SPACE,\n        self::NULL,\n        self::EMPTY_ARRAY,\n        self::STRING,\n        self::BOOLEAN\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::IS_EMPTY => \"Value is required and can't be empty\",\n        self::INVALID  => \"Invalid type given. String, integer, float, boolean or array expected\",\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [];\n\n    /**\n     * Constructor\n     *\n     * @param  array|Traversable|int $options OPTIONAL\n     */\n    public function __construct($options = null)\n    {\n        if ($options instanceof Traversable) {\n            $options = ArrayUtils::iteratorToArray($options);\n        }\n\n        if (! is_array($options)) {\n            $options = func_get_args();\n            $temp    = [];\n            if (! empty($options)) {\n                $temp['type'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (! isset($options['type'])) {\n            if (($type = $this->calculateTypeValue($options)) != 0) {\n                $options['type'] = $type;\n            } else {\n                $options['type'] = $this->defaultType;\n            }\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the set types\n     *\n     * @return array\n     */\n    public function getType()\n    {\n        return $this->options['type'];\n    }\n\n    /**\n     * @return int\n     */\n    public function getDefaultType()\n    {\n        return $this->calculateTypeValue($this->defaultType);\n    }\n\n    /**\n     * @param array|int|string $type\n     * @return int\n     */\n    protected function calculateTypeValue($type)\n    {\n        if (is_array($type)) {\n            $detected = 0;\n            foreach ($type as $value) {\n                if (is_int($value)) {\n                    $detected |= $value;\n                } elseif (in_array($value, $this->constants, true)) {\n                    $detected |= array_search($value, $this->constants, true);\n                }\n            }\n\n            $type = $detected;\n        } elseif (is_string($type) && in_array($type, $this->constants, true)) {\n            $type = array_search($type, $this->constants, true);\n        }\n\n        return $type;\n    }\n\n    /**\n     * Set the types\n     *\n     * @param  int|array $type\n     * @throws Exception\\InvalidArgumentException\n     * @return NotEmpty\n     */\n    public function setType($type = null)\n    {\n        $type = $this->calculateTypeValue($type);\n\n        if (! is_int($type) || ($type < 0) || ($type > self::ALL)) {\n            throw new Exception\\InvalidArgumentException('Unknown type');\n        }\n\n        $this->options['type'] = $type;\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value is not an empty value.\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if ($value !== null && ! is_string($value) && ! is_int($value) && ! is_float($value) &&\n            ! is_bool($value) && ! is_array($value) && ! is_object($value)\n        ) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $type    = $this->getType();\n        $this->setValue($value);\n        $object  = false;\n\n        // OBJECT_COUNT (countable object)\n        if ($type & self::OBJECT_COUNT) {\n            $object = true;\n\n            if (is_object($value) && ($value instanceof \\Countable) && (count($value) == 0)) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // OBJECT_STRING (object's toString)\n        if ($type & self::OBJECT_STRING) {\n            $object = true;\n\n            if ((is_object($value) && (! method_exists($value, '__toString'))) ||\n                (is_object($value) && (method_exists($value, '__toString')) && (((string) $value) == \"\"))) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // OBJECT (object)\n        if ($type & self::OBJECT) {\n            // fall trough, objects are always not empty\n        } elseif ($object === false) {\n            // object not allowed but object given -> return false\n            if (is_object($value)) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // SPACE ('   ')\n        if ($type & self::SPACE) {\n            if (is_string($value) && (preg_match('/^\\s+$/s', $value))) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // NULL (null)\n        if ($type & self::NULL) {\n            if ($value === null) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // EMPTY_ARRAY (array())\n        if ($type & self::EMPTY_ARRAY) {\n            if (is_array($value) && ($value == [])) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // ZERO ('0')\n        if ($type & self::ZERO) {\n            if (is_string($value) && ($value == '0')) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // STRING ('')\n        if ($type & self::STRING) {\n            if (is_string($value) && ($value == '')) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // FLOAT (0.0)\n        if ($type & self::FLOAT) {\n            if (is_float($value) && ($value == 0.0)) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // INTEGER (0)\n        if ($type & self::INTEGER) {\n            if (is_int($value) && ($value == 0)) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        // BOOLEAN (false)\n        if ($type & self::BOOLEAN) {\n            if (is_bool($value) && ($value == false)) {\n                $this->error(self::IS_EMPTY);\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Regex.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Stdlib\\ArrayUtils;\nuse Zend\\Stdlib\\ErrorHandler;\n\nclass Regex extends AbstractValidator\n{\n    const INVALID   = 'regexInvalid';\n    const NOT_MATCH = 'regexNotMatch';\n    const ERROROUS  = 'regexErrorous';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID   => \"Invalid type given. String, integer or float expected\",\n        self::NOT_MATCH => \"The input does not match against pattern '%pattern%'\",\n        self::ERROROUS  => \"There was an internal error while using the pattern '%pattern%'\",\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'pattern' => 'pattern'\n    ];\n\n    /**\n     * Regular expression pattern\n     *\n     * @var string\n     */\n    protected $pattern;\n\n    /**\n     * Sets validator options\n     *\n     * @param  string|array|Traversable $pattern\n     * @throws Exception\\InvalidArgumentException On missing 'pattern' parameter\n     */\n    public function __construct($pattern)\n    {\n        if (is_string($pattern)) {\n            $this->setPattern($pattern);\n            parent::__construct([]);\n            return;\n        }\n\n        if ($pattern instanceof Traversable) {\n            $pattern = ArrayUtils::iteratorToArray($pattern);\n        }\n\n        if (! is_array($pattern)) {\n            throw new Exception\\InvalidArgumentException('Invalid options provided to constructor');\n        }\n\n        if (! array_key_exists('pattern', $pattern)) {\n            throw new Exception\\InvalidArgumentException(\"Missing option 'pattern'\");\n        }\n\n        $this->setPattern($pattern['pattern']);\n        unset($pattern['pattern']);\n        parent::__construct($pattern);\n    }\n\n    /**\n     * Returns the pattern option\n     *\n     * @return string\n     */\n    public function getPattern()\n    {\n        return $this->pattern;\n    }\n\n    /**\n     * Sets the pattern option\n     *\n     * @param  string $pattern\n     * @throws Exception\\InvalidArgumentException if there is a fatal error in pattern matching\n     * @return Regex Provides a fluent interface\n     */\n    public function setPattern($pattern)\n    {\n        ErrorHandler::start();\n        $this->pattern = (string) $pattern;\n        $status        = preg_match($this->pattern, \"Test\");\n        $error         = ErrorHandler::stop();\n\n        if (false === $status) {\n            throw new Exception\\InvalidArgumentException(\n                \"Internal error parsing the pattern '{$this->pattern}'\",\n                0,\n                $error\n            );\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value matches against the pattern option\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value) && ! is_int($value) && ! is_float($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n\n        ErrorHandler::start();\n        $status = preg_match($this->pattern, $value);\n        ErrorHandler::stop();\n        if (false === $status) {\n            $this->error(self::ERROROUS);\n            return false;\n        }\n\n        if (! $status) {\n            $this->error(self::NOT_MATCH);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Sitemap/Changefreq.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Sitemap;\n\nuse Zend\\Validator\\AbstractValidator;\n\n/**\n * Validates whether a given value is valid as a sitemap <changefreq> value\n *\n * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format\n */\nclass Changefreq extends AbstractValidator\n{\n    /**\n     * Validation key for not valid\n     *\n     */\n    const NOT_VALID = 'sitemapChangefreqNotValid';\n    const INVALID   = 'sitemapChangefreqInvalid';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_VALID => \"The input is not a valid sitemap changefreq\",\n        self::INVALID   => \"Invalid type given. String expected\",\n    ];\n\n    /**\n     * Valid change frequencies\n     *\n     * @var array\n     */\n    protected $changeFreqs = [\n        'always',  'hourly', 'daily', 'weekly',\n        'monthly', 'yearly', 'never'\n    ];\n\n    /**\n     * Validates if a string is valid as a sitemap changefreq\n     *\n     * @link http://www.sitemaps.org/protocol.php#changefreqdef <changefreq>\n     *\n     * @param  string  $value  value to validate\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        if (! is_string($value)) {\n            return false;\n        }\n\n        if (! in_array($value, $this->changeFreqs, true)) {\n            $this->error(self::NOT_VALID);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Sitemap/Lastmod.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Sitemap;\n\nuse Zend\\Stdlib\\ErrorHandler;\nuse Zend\\Validator\\AbstractValidator;\n\n/**\n * Validates whether a given value is valid as a sitemap <lastmod> value\n *\n * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format\n */\nclass Lastmod extends AbstractValidator\n{\n    /**\n     * Regular expression to use when validating\n     *\n     */\n    // @codingStandardsIgnoreStart\n    const LASTMOD_REGEX = '/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])(T([0-1][0-9]|2[0-3])(:[0-5][0-9])(:[0-5][0-9])?(\\\\+|-)([0-1][0-9]|2[0-3]):[0-5][0-9])?$/';\n    // @codingStandardsIgnoreEnd\n\n    /**\n     * Validation key for not valid\n     *\n     */\n    const NOT_VALID = 'sitemapLastmodNotValid';\n    const INVALID   = 'sitemapLastmodInvalid';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_VALID => \"The input is not a valid sitemap lastmod\",\n        self::INVALID   => \"Invalid type given. String expected\",\n    ];\n\n    /**\n     * Validates if a string is valid as a sitemap lastmod\n     *\n     * @link http://www.sitemaps.org/protocol.php#lastmoddef <lastmod>\n     *\n     * @param  string  $value  value to validate\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        ErrorHandler::start();\n        $result = preg_match(self::LASTMOD_REGEX, $value);\n        ErrorHandler::stop();\n        if ($result != 1) {\n            $this->error(self::NOT_VALID);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Sitemap/Loc.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Sitemap;\n\nuse Zend\\Uri;\nuse Zend\\Validator\\AbstractValidator;\n\n/**\n * Validates whether a given value is valid as a sitemap <loc> value\n *\n * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format\n *\n * @see        Zend\\Uri\\Uri\n */\nclass Loc extends AbstractValidator\n{\n    /**\n     * Validation key for not valid\n     *\n     */\n    const NOT_VALID = 'sitemapLocNotValid';\n    const INVALID   = 'sitemapLocInvalid';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_VALID => \"The input is not a valid sitemap location\",\n        self::INVALID   => \"Invalid type given. String expected\",\n    ];\n\n    /**\n     * Validates if a string is valid as a sitemap location\n     *\n     * @link http://www.sitemaps.org/protocol.php#locdef <loc>\n     *\n     * @param  string  $value  value to validate\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        $uri = Uri\\UriFactory::factory($value);\n        if (! $uri->isValid()) {\n            $this->error(self::NOT_VALID);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Sitemap/Priority.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Sitemap;\n\nuse Zend\\Validator\\AbstractValidator;\n\n/**\n * Validates whether a given value is valid as a sitemap <priority> value\n *\n * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format\n */\nclass Priority extends AbstractValidator\n{\n    /**\n     * Validation key for not valid\n     *\n     */\n    const NOT_VALID = 'sitemapPriorityNotValid';\n    const INVALID   = 'sitemapPriorityInvalid';\n\n    /**\n     * Validation failure message template definitions\n     *\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_VALID => \"The input is not a valid sitemap priority\",\n        self::INVALID   => \"Invalid type given. Numeric string, integer or float expected\",\n    ];\n\n    /**\n     * Validates if a string is valid as a sitemap priority\n     *\n     * @link http://www.sitemaps.org/protocol.php#prioritydef <priority>\n     *\n     * @param  string  $value  value to validate\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_numeric($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n        $value = (float) $value;\n        if ($value < 0 || $value > 1) {\n            $this->error(self::NOT_VALID);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/StaticValidator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Zend\\ServiceManager\\ServiceManager;\n\nclass StaticValidator\n{\n    /**\n     * @var ValidatorPluginManager\n     */\n    protected static $plugins;\n\n    /**\n     * Set plugin manager to use for locating validators\n     *\n     * @param  ValidatorPluginManager|null $plugins\n     * @return void\n     */\n    public static function setPluginManager(ValidatorPluginManager $plugins = null)\n    {\n        // Don't share by default to allow different arguments on subsequent calls\n        if ($plugins instanceof ValidatorPluginManager) {\n            // Vary how the share by default flag is set based on zend-servicemanager version\n            if (method_exists($plugins, 'configure')) {\n                $plugins->configure(['shared_by_default' => false]);\n            } else {\n                $plugins->setShareByDefault(false);\n            }\n        }\n        static::$plugins = $plugins;\n    }\n\n    /**\n     * Get plugin manager for locating validators\n     *\n     * @return ValidatorPluginManager\n     */\n    public static function getPluginManager()\n    {\n        if (null === static::$plugins) {\n            static::setPluginManager(new ValidatorPluginManager(new ServiceManager));\n        }\n        return static::$plugins;\n    }\n\n    /**\n     * @param  mixed    $value\n     * @param  string   $classBaseName\n     * @param  array    $options OPTIONAL associative array of options to pass as\n     *     the sole argument to the validator constructor.\n     * @return bool\n     * @throws Exception\\InvalidArgumentException for an invalid $options argument.\n     */\n    public static function execute($value, $classBaseName, array $options = [])\n    {\n        if ($options && array_values($options) === $options) {\n            throw new Exception\\InvalidArgumentException(\n                'Invalid options provided via $options argument; must be an associative array'\n            );\n        }\n\n        $plugins = static::getPluginManager();\n\n        $validator = $plugins->get($classBaseName, $options);\n        return $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "src/Step.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\n\nclass Step extends AbstractValidator\n{\n    const INVALID = 'typeInvalid';\n    const NOT_STEP = 'stepInvalid';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID => \"Invalid value given. Scalar expected\",\n        self::NOT_STEP => \"The input is not a valid step\"\n    ];\n\n    /**\n     * @var mixed\n     */\n    protected $baseValue = 0;\n\n    /**\n     * @var mixed\n     */\n    protected $step = 1;\n\n    /**\n     * Set default options for this instance\n     *\n     * @param array $options\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = iterator_to_array($options);\n        } elseif (! is_array($options)) {\n            $options = func_get_args();\n            $temp['baseValue'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['step'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (isset($options['baseValue'])) {\n            $this->setBaseValue($options['baseValue']);\n        }\n        if (isset($options['step'])) {\n            $this->setStep($options['step']);\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Sets the base value from which the step should be computed\n     *\n     * @param mixed $baseValue\n     * @return Step\n     */\n    public function setBaseValue($baseValue)\n    {\n        $this->baseValue = $baseValue;\n        return $this;\n    }\n\n    /**\n     * Returns the base value from which the step should be computed\n     *\n     * @return string\n     */\n    public function getBaseValue()\n    {\n        return $this->baseValue;\n    }\n\n    /**\n     * Sets the step value\n     *\n     * @param mixed $step\n     * @return Step\n     */\n    public function setStep($step)\n    {\n        $this->step = (float) $step;\n        return $this;\n    }\n\n    /**\n     * Returns the step value\n     *\n     * @return string\n     */\n    public function getStep()\n    {\n        return $this->step;\n    }\n\n    /**\n     * Returns true if $value is a scalar and a valid step value\n     *\n     * @param mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_numeric($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n\n        $substract = $this->sub($value, $this->baseValue);\n\n        $fmod = $this->fmod($substract, $this->step);\n\n        if ($fmod !== 0.0 && $fmod !== $this->step) {\n            $this->error(self::NOT_STEP);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * replaces the internal fmod function which give wrong results on many cases\n     *\n     * @param float $x\n     * @param float $y\n     * @return float\n     */\n    protected function fmod($x, $y)\n    {\n        if ($y == 0.0) {\n            return 1.0;\n        }\n\n        //find the maximum precision from both input params to give accurate results\n        $precision = $this->getPrecision($x) + $this->getPrecision($y);\n\n        return round($x - $y * floor($x / $y), $precision);\n    }\n\n    /**\n     * replaces the internal substraction operation which give wrong results on some cases\n     *\n     * @param float $x\n     * @param float $y\n     * @return float\n     */\n    private function sub($x, $y)\n    {\n        $precision = $this->getPrecision($x) + $this->getPrecision($y);\n        return round($x - $y, $precision);\n    }\n\n    /**\n     * @param  float $float\n     * @return int\n     */\n    private function getPrecision($float)\n    {\n        $segment = substr($float, strpos($float, '.') + 1);\n        return $segment ? strlen($segment) : 0;\n    }\n}\n"
  },
  {
    "path": "src/StringLength.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Zend\\Stdlib\\StringUtils;\nuse Zend\\Stdlib\\StringWrapper\\StringWrapperInterface as StringWrapper;\n\nclass StringLength extends AbstractValidator\n{\n    const INVALID   = 'stringLengthInvalid';\n    const TOO_SHORT = 'stringLengthTooShort';\n    const TOO_LONG  = 'stringLengthTooLong';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID   => \"Invalid type given. String expected\",\n        self::TOO_SHORT => \"The input is less than %min% characters long\",\n        self::TOO_LONG  => \"The input is more than %max% characters long\",\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageVariables = [\n        'min'    => ['options' => 'min'],\n        'max'    => ['options' => 'max'],\n        'length' => ['options' => 'length']\n    ];\n\n    protected $options = [\n        'min'      => 0,       // Minimum length\n        'max'      => null,    // Maximum length, null if there is no length limitation\n        'encoding' => 'UTF-8', // Encoding to use\n        'length'   => 0        // Actual length\n    ];\n\n    protected $stringWrapper;\n\n    /**\n     * Sets validator options\n     *\n     * @param  int|array|\\Traversable $options\n     */\n    public function __construct($options = [])\n    {\n        if (! is_array($options)) {\n            $options     = func_get_args();\n            $temp['min'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['max'] = array_shift($options);\n            }\n\n            if (! empty($options)) {\n                $temp['encoding'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * Returns the min option\n     *\n     * @return int\n     */\n    public function getMin()\n    {\n        return $this->options['min'];\n    }\n\n    /**\n     * Sets the min option\n     *\n     * @param  int $min\n     * @throws Exception\\InvalidArgumentException\n     * @return StringLength Provides a fluent interface\n     */\n    public function setMin($min)\n    {\n        if (null !== $this->getMax() && $min > $this->getMax()) {\n            throw new Exception\\InvalidArgumentException(\n                \"The minimum must be less than or equal to the maximum length, but {$min} > {$this->getMax()}\"\n            );\n        }\n\n        $this->options['min'] = max(0, (int) $min);\n        return $this;\n    }\n\n    /**\n     * Returns the max option\n     *\n     * @return int|null\n     */\n    public function getMax()\n    {\n        return $this->options['max'];\n    }\n\n    /**\n     * Sets the max option\n     *\n     * @param  int|null $max\n     * @throws Exception\\InvalidArgumentException\n     * @return StringLength Provides a fluent interface\n     */\n    public function setMax($max)\n    {\n        if (null === $max) {\n            $this->options['max'] = null;\n        } elseif ($max < $this->getMin()) {\n            throw new Exception\\InvalidArgumentException(\n                \"The maximum must be greater than or equal to the minimum length, but {$max} < {$this->getMin()}\"\n            );\n        } else {\n            $this->options['max'] = (int) $max;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Get the string wrapper to detect the string length\n     *\n     * @return StringWrapper\n     */\n    public function getStringWrapper()\n    {\n        if (! $this->stringWrapper) {\n            $this->stringWrapper = StringUtils::getWrapper($this->getEncoding());\n        }\n        return $this->stringWrapper;\n    }\n\n    /**\n     * Set the string wrapper to detect the string length\n     *\n     * @param StringWrapper $stringWrapper\n     * @return StringLength\n     */\n    public function setStringWrapper(StringWrapper $stringWrapper)\n    {\n        $stringWrapper->setEncoding($this->getEncoding());\n        $this->stringWrapper = $stringWrapper;\n    }\n\n    /**\n     * Returns the actual encoding\n     *\n     * @return string\n     */\n    public function getEncoding()\n    {\n        return $this->options['encoding'];\n    }\n\n    /**\n     * Sets a new encoding to use\n     *\n     * @param string $encoding\n     * @return StringLength\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setEncoding($encoding)\n    {\n        $this->stringWrapper = StringUtils::getWrapper($encoding);\n        $this->options['encoding'] = $encoding;\n        return $this;\n    }\n\n    /**\n     * Returns the length option\n     *\n     * @return int\n     */\n    private function getLength()\n    {\n        return $this->options['length'];\n    }\n\n    /**\n     * Sets the length option\n     *\n     * @param  int $length\n     * @return StringLength Provides a fluent interface\n     */\n    private function setLength($length)\n    {\n        $this->options['length'] = (int) $length;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if the string length of $value is at least the min option and\n     * no greater than the max option (when the max option is not null).\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $this->setValue($value);\n\n        $this->setLength($this->getStringWrapper()->strlen($value));\n        if ($this->getLength() < $this->getMin()) {\n            $this->error(self::TOO_SHORT);\n        }\n\n        if (null !== $this->getMax() && $this->getMax() < $this->getLength()) {\n            $this->error(self::TOO_LONG);\n        }\n\n        if ($this->getMessages()) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Timezone.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse DateTimeZone;\n\nclass Timezone extends AbstractValidator\n{\n    const INVALID                       = 'invalidTimezone';\n    const INVALID_TIMEZONE_LOCATION     = 'invalidTimezoneLocation';\n    const INVALID_TIMEZONE_ABBREVIATION = 'invalidTimezoneAbbreviation';\n\n    const LOCATION      = 0b01;\n    const ABBREVIATION  = 0b10;\n    const ALL           = 0b11;\n\n    /**\n     * @var array\n     */\n    protected $constants = [\n        self::LOCATION       => 'location',\n        self::ABBREVIATION   => 'abbreviation',\n    ];\n\n    /**\n     * Default value for types; value = 3\n     *\n     * @var array\n     */\n    protected $defaultType = [\n        self::LOCATION,\n        self::ABBREVIATION,\n    ];\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID                       => 'Invalid timezone given.',\n        self::INVALID_TIMEZONE_LOCATION     => 'Invalid timezone location given.',\n        self::INVALID_TIMEZONE_ABBREVIATION => 'Invalid timezone abbreviation given.',\n    ];\n\n    /**\n     * Options for this validator\n     *\n     * @var array\n     */\n    protected $options = [];\n\n    /**\n     * Constructor\n     *\n     * @param array|int $options OPTIONAL\n     */\n    public function __construct($options = [])\n    {\n        $opts['type'] = $this->defaultType;\n\n        if (is_array($options)) {\n            if (array_key_exists('type', $options)) {\n                $opts['type'] = $options['type'];\n            }\n        } elseif (! empty($options)) {\n            $opts['type'] = $options;\n        }\n\n        // setType called by parent constructor then setOptions method\n        parent::__construct($opts);\n    }\n\n    /**\n     * Set the types\n     *\n     * @param  int|array $type\n     *\n     * @throws Exception\\InvalidArgumentException\n     */\n    public function setType($type = null)\n    {\n        $type = $this->calculateTypeValue($type);\n\n        if (! is_int($type) || ($type < 1) || ($type > self::ALL)) {\n            throw new Exception\\InvalidArgumentException(sprintf(\n                'Unknown type \"%s\" provided',\n                (is_string($type) || is_int($type))\n                    ? $type\n                    : (is_object($type) ? get_class($type) : gettype($type))\n            ));\n        }\n\n        $this->options['type'] = $type;\n    }\n\n    /**\n     * Returns true if timezone location or timezone abbreviations is correct.\n     *\n     * @param mixed $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if ($value !== null && ! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $type = $this->options['type'];\n        $this->setValue($value);\n\n        switch (true) {\n            // Check in locations and abbreviations\n            case (($type & self::LOCATION) && ($type & self::ABBREVIATION)):\n                $abbrs = DateTimeZone::listAbbreviations();\n                $locations = DateTimeZone::listIdentifiers();\n\n                if (! array_key_exists($value, $abbrs) && ! in_array($value, $locations)) {\n                    $this->error(self::INVALID);\n                    return false;\n                }\n                break;\n\n            // Check only in locations\n            case ($type & self::LOCATION):\n                $locations = DateTimeZone::listIdentifiers();\n\n                if (! in_array($value, $locations)) {\n                    $this->error(self::INVALID_TIMEZONE_LOCATION);\n                    return false;\n                }\n                break;\n\n            // Check only in abbreviations\n            case ($type & self::ABBREVIATION):\n                $abbrs = DateTimeZone::listAbbreviations();\n\n                if (! array_key_exists($value, $abbrs)) {\n                    $this->error(self::INVALID_TIMEZONE_ABBREVIATION);\n                    return false;\n                }\n                break;\n        }\n\n        return true;\n    }\n\n    /**\n     * @param array|int|string $type\n     *\n     * @return int\n     */\n    protected function calculateTypeValue($type)\n    {\n        $types    = (array) $type;\n        $detected = 0;\n\n        foreach ($types as $value) {\n            if (is_int($value)) {\n                $detected |= $value;\n            } elseif (false !== ($position = array_search($value, $this->constants))) {\n                $detected |= array_search($value, $this->constants);\n            }\n        }\n\n        return $detected;\n    }\n}\n"
  },
  {
    "path": "src/Translator/TranslatorAwareInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *;\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Translator;\n\ninterface TranslatorAwareInterface\n{\n    /**\n     * Sets translator to use in helper\n     *\n     * @param  TranslatorInterface $translator  [optional] translator.\n     *             Default is null, which sets no translator.\n     * @param  string $textDomain  [optional] text domain\n     *             Default is null, which skips setTranslatorTextDomain\n     * @return self\n     */\n    public function setTranslator(TranslatorInterface $translator = null, $textDomain = null);\n\n    /**\n     * Returns translator used in object\n     *\n     * @return TranslatorInterface|null\n     */\n    public function getTranslator();\n\n    /**\n     * Checks if the object has a translator\n     *\n     * @return bool\n     */\n    public function hasTranslator();\n\n    /**\n     * Sets whether translator is enabled and should be used\n     *\n     * @param  bool $enabled [optional] whether translator should be used.\n     *                  Default is true.\n     * @return self\n     */\n    public function setTranslatorEnabled($enabled = true);\n\n    /**\n     * Returns whether translator is enabled and should be used\n     *\n     * @return bool\n     */\n    public function isTranslatorEnabled();\n\n    /**\n     * Set translation text domain\n     *\n     * @param  string $textDomain\n     * @return TranslatorAwareInterface\n     */\n    public function setTranslatorTextDomain($textDomain = 'default');\n\n    /**\n     * Return the translation text domain\n     *\n     * @return string\n     */\n    public function getTranslatorTextDomain();\n}\n"
  },
  {
    "path": "src/Translator/TranslatorInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Translator;\n\ninterface TranslatorInterface\n{\n    /**\n     * @param  string $message\n     * @param  string $textDomain\n     * @param  string $locale\n     * @return string\n     */\n    public function translate($message, $textDomain = 'default', $locale = null);\n}\n"
  },
  {
    "path": "src/UndisclosedPassword.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2019 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Psr\\Http\\Client\\ClientExceptionInterface;\nuse Psr\\Http\\Client\\ClientInterface;\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse Psr\\Http\\Message\\ResponseFactoryInterface;\n\nfinal class UndisclosedPassword extends AbstractValidator\n{\n    private const HIBP_API_URI = 'https://api.pwnedpasswords.com';\n    private const HIBP_API_REQUEST_TIMEOUT = 300;\n    private const HIBP_CLIENT_USER_AGENT_STRING = 'zend-validator';\n    private const HIBP_CLIENT_ACCEPT_HEADER = 'application/vnd.haveibeenpwned.v2+json';\n    private const HIBP_K_ANONYMITY_HASH_RANGE_LENGTH = 5;\n    private const HIBP_K_ANONYMITY_HASH_RANGE_BASE = 0;\n    private const SHA1_STRING_LENGTH = 40;\n\n    private const PASSWORD_BREACHED = 'passwordBreached';\n    private const NOT_A_STRING = 'wrongInput';\n\n    protected $messageTemplates = [\n        self::PASSWORD_BREACHED =>\n            'The provided password was found in previous breaches, please create another password',\n        self::NOT_A_STRING => 'The provided password is not a string, please provide a correct password',\n    ];\n\n    /**\n     * @var ClientInterface\n     */\n    private $httpClient;\n\n    /**\n     * @var RequestFactoryInterface\n     */\n    private $makeHttpRequest;\n\n    /**\n     * @var ResponseFactoryInterface\n     */\n    private $makeHttpResponse;\n\n    /**\n     * PasswordBreach constructor.\n     */\n    public function __construct(\n        ClientInterface $httpClient,\n        RequestFactoryInterface $makeHttpRequest,\n        ResponseFactoryInterface $makeHttpResponse\n    ) {\n        $this->httpClient = $httpClient;\n        $this->makeHttpRequest = $makeHttpRequest;\n        $this->makeHttpResponse = $makeHttpResponse;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::NOT_A_STRING);\n            return false;\n        }\n\n        if ($this->isPwnedPassword($value)) {\n            $this->error(self::PASSWORD_BREACHED);\n            return false;\n        }\n\n        return true;\n    }\n\n    private function isPwnedPassword(string $password) : bool\n    {\n        $sha1Hash = $this->hashPassword($password);\n        $rangeHash = $this->getRangeHash($sha1Hash);\n        $hashList = $this->retrieveHashList($rangeHash);\n        return $this->hashInResponse($sha1Hash, $hashList);\n    }\n\n    /**\n     * We use a SHA1 hashed password for checking it against\n     * the breached data set of HIBP.\n     *\n     * @param string $password\n     * @return string\n     */\n    private function hashPassword(string $password) : string\n    {\n        $hashedPassword = \\sha1($password);\n        return strtoupper($hashedPassword);\n    }\n\n    /**\n     * Creates a hash range that will be send to HIBP API\n     * applying K-Anonymity\n     *\n     * @param string $passwordHash\n     * @return string\n     * @see https://www.troyhunt.com/enhancing-pwned-passwords-privacy-by-exclusively-supporting-anonymity/\n     */\n    private function getRangeHash(string $passwordHash) : string\n    {\n        return substr($passwordHash, self::HIBP_K_ANONYMITY_HASH_RANGE_BASE, self::HIBP_K_ANONYMITY_HASH_RANGE_LENGTH);\n    }\n\n    /**\n     * Making a connection to the HIBP API to retrieve a\n     * list of hashes that all have the same range as we\n     * provided.\n     *\n     * @param string $passwordRange\n     * @return string\n     * @throws ClientExceptionInterface\n     */\n    private function retrieveHashList(string $passwordRange) : string\n    {\n        $request = $this->makeHttpRequest->createRequest(\n            'GET',\n            self::HIBP_API_URI . '/range/' . $passwordRange\n        );\n\n        $response = $this->httpClient->sendRequest($request);\n        return (string) $response->getBody();\n    }\n\n    /**\n     * Checks if the password is in the response from HIBP\n     *\n     * @param string $sha1Hash\n     * @param string $resultStream\n     * @return bool\n     */\n    private function hashInResponse(string $sha1Hash, string $resultStream) : bool\n    {\n        $data = explode(\"\\r\\n\", $resultStream);\n        $hashes = array_filter($data, function ($value) use ($sha1Hash) {\n            list($hash, $count) = explode(':', $value);\n            if (0 === strcmp($hash, substr($sha1Hash, self::HIBP_K_ANONYMITY_HASH_RANGE_LENGTH))) {\n                return true;\n            }\n            return false;\n        });\n        if ([] === $hashes) {\n            return false;\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Uri.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Traversable;\nuse Zend\\Uri\\Exception\\ExceptionInterface as UriException;\nuse Zend\\Uri\\Uri as UriHandler;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\nclass Uri extends AbstractValidator\n{\n    const INVALID = 'uriInvalid';\n    const NOT_URI = 'notUri';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::INVALID => \"Invalid type given. String expected\",\n        self::NOT_URI => \"The input does not appear to be a valid Uri\",\n    ];\n\n    /**\n     * @var UriHandler\n     */\n    protected $uriHandler;\n\n    /**\n     * @var bool\n     */\n    protected $allowRelative = true;\n\n    /**\n     * @var bool\n     */\n    protected $allowAbsolute = true;\n\n    /**\n     * Sets default option values for this instance\n     *\n     * @param array|Traversable $options\n     */\n    public function __construct($options = [])\n    {\n        if ($options instanceof Traversable) {\n            $options = iterator_to_array($options);\n        } elseif (! is_array($options)) {\n            $options = func_get_args();\n            $temp['uriHandler'] = array_shift($options);\n            if (! empty($options)) {\n                $temp['allowRelative'] = array_shift($options);\n            }\n            if (! empty($options)) {\n                $temp['allowAbsolute'] = array_shift($options);\n            }\n\n            $options = $temp;\n        }\n\n        if (isset($options['uriHandler'])) {\n            $this->setUriHandler($options['uriHandler']);\n        }\n        if (isset($options['allowRelative'])) {\n            $this->setAllowRelative($options['allowRelative']);\n        }\n        if (isset($options['allowAbsolute'])) {\n            $this->setAllowAbsolute($options['allowAbsolute']);\n        }\n\n        parent::__construct($options);\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     * @return UriHandler\n     */\n    public function getUriHandler()\n    {\n        if (null === $this->uriHandler) {\n            // Lazy load the base Uri handler\n            $this->uriHandler = new UriHandler();\n        } elseif (is_string($this->uriHandler) && class_exists($this->uriHandler)) {\n            // Instantiate string Uri handler that references a class\n            $this->uriHandler = new $this->uriHandler;\n        }\n\n        if (! $this->uriHandler instanceof UriHandler) {\n            throw new InvalidArgumentException('URI handler is expected to be a Zend\\Uri\\Uri object');\n        }\n\n        return $this->uriHandler;\n    }\n\n    /**\n     * @param  UriHandler $uriHandler\n     * @throws InvalidArgumentException\n     * @return Uri\n     */\n    public function setUriHandler($uriHandler)\n    {\n        if (! is_subclass_of($uriHandler, 'Zend\\Uri\\Uri')) {\n            throw new InvalidArgumentException('Expecting a subclass name or instance of Zend\\Uri\\Uri as $uriHandler');\n        }\n\n        $this->uriHandler = $uriHandler;\n        return $this;\n    }\n\n    /**\n     * Returns the allowAbsolute option\n     *\n     * @return bool\n     */\n    public function getAllowAbsolute()\n    {\n        return $this->allowAbsolute;\n    }\n\n    /**\n     * Sets the allowAbsolute option\n     *\n     * @param  bool $allowAbsolute\n     * @return Uri\n     */\n    public function setAllowAbsolute($allowAbsolute)\n    {\n        $this->allowAbsolute = (bool) $allowAbsolute;\n        return $this;\n    }\n\n    /**\n     * Returns the allowRelative option\n     *\n     * @return bool\n     */\n    public function getAllowRelative()\n    {\n        return $this->allowRelative;\n    }\n\n    /**\n     * Sets the allowRelative option\n     *\n     * @param  bool $allowRelative\n     * @return Uri\n     */\n    public function setAllowRelative($allowRelative)\n    {\n        $this->allowRelative = (bool) $allowRelative;\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value validates as a Uri\n     *\n     * @param  string $value\n     * @return bool\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        $uriHandler = $this->getUriHandler();\n        try {\n            $uriHandler->parse($value);\n            if ($uriHandler->isValid()) {\n                // It will either be a valid absolute or relative URI\n                if (($this->allowRelative && $this->allowAbsolute)\n                    || ($this->allowAbsolute && $uriHandler->isAbsolute())\n                    || ($this->allowRelative && $uriHandler->isValidRelative())\n                ) {\n                    return true;\n                }\n            }\n        } catch (UriException $ex) {\n            // Error parsing URI, it must be invalid\n        }\n\n        $this->error(self::NOT_URI);\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/Uuid.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\n/**\n * Uuid validator.\n */\nfinal class Uuid extends AbstractValidator\n{\n    /**\n     * Matches Uuid's versions 1 to 5.\n     */\n    const REGEX_UUID = '/^[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    const INVALID = 'valueNotUuid';\n    const NOT_STRING = 'valueNotString';\n\n    /**\n     * @var array\n     */\n    protected $messageTemplates = [\n        self::NOT_STRING => 'Invalid type given; string expected',\n        self::INVALID => 'Invalid UUID format',\n    ];\n\n    /**\n     * Returns true if and only if $value meets the validation requirements.\n     *\n     * If $value fails validation, then this method returns false, and\n     * getMessages() will return an array of messages that explain why the\n     * validation failed.\n     *\n     * @param mixed $value\n     *\n     * @return bool\n     *\n     * @throws Exception\\RuntimeException If validation of $value is impossible\n     */\n    public function isValid($value)\n    {\n        if (! is_string($value)) {\n            $this->error(self::NOT_STRING);\n            return false;\n        }\n\n        $this->setValue($value);\n\n        if (empty($value)\n            || $value !== '00000000-0000-0000-0000-000000000000'\n            && ! preg_match(self::REGEX_UUID, $value)\n        ) {\n            $this->error(self::INVALID);\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/ValidatorChain.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Countable;\nuse Zend\\Stdlib\\PriorityQueue;\nuse Zend\\ServiceManager\\ServiceManager;\n\nclass ValidatorChain implements\n    Countable,\n    ValidatorInterface\n{\n    /**\n     * Default priority at which validators are added\n     */\n    const DEFAULT_PRIORITY = 1;\n\n    /**\n     * @var ValidatorPluginManager\n     */\n    protected $plugins;\n\n    /**\n     * Validator chain\n     *\n     * @var PriorityQueue\n     */\n    protected $validators;\n\n    /**\n     * Array of validation failure messages\n     *\n     * @var array\n     */\n    protected $messages = [];\n\n    /**\n     * Initialize validator chain\n     */\n    public function __construct()\n    {\n        $this->validators = new PriorityQueue();\n    }\n\n    /**\n     * Return the count of attached validators\n     *\n     * @return int\n     */\n    public function count()\n    {\n        return count($this->validators);\n    }\n\n    /**\n     * Get plugin manager instance\n     *\n     * @return ValidatorPluginManager\n     */\n    public function getPluginManager()\n    {\n        if (! $this->plugins) {\n            $this->setPluginManager(new ValidatorPluginManager(new ServiceManager));\n        }\n        return $this->plugins;\n    }\n\n    /**\n     * Set plugin manager instance\n     *\n     * @param  ValidatorPluginManager $plugins Plugin manager\n     * @return ValidatorChain\n     */\n    public function setPluginManager(ValidatorPluginManager $plugins)\n    {\n        $this->plugins = $plugins;\n        return $this;\n    }\n\n    /**\n     * Retrieve a validator by name\n     *\n     * @param  string     $name    Name of validator to return\n     * @param  null|array $options Options to pass to validator constructor (if not already instantiated)\n     * @return ValidatorInterface\n     */\n    public function plugin($name, array $options = null)\n    {\n        $plugins = $this->getPluginManager();\n        return $plugins->get($name, $options);\n    }\n\n    /**\n     * Attach a validator to the end of the chain\n     *\n     * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain,\n     * if one exists, will not be executed.\n     *\n     * @param  ValidatorInterface $validator\n     * @param  bool               $breakChainOnFailure\n     * @param  int                $priority            Priority at which to enqueue validator; defaults to\n     *                                                          1 (higher executes earlier)\n     *\n     * @throws Exception\\InvalidArgumentException\n     *\n     * @return self\n     */\n    public function attach(\n        ValidatorInterface $validator,\n        $breakChainOnFailure = false,\n        $priority = self::DEFAULT_PRIORITY\n    ) {\n        $this->validators->insert(\n            [\n                'instance'            => $validator,\n                'breakChainOnFailure' => (bool) $breakChainOnFailure,\n            ],\n            $priority\n        );\n\n        return $this;\n    }\n\n    /**\n     * Proxy to attach() to keep BC\n     *\n     * @deprecated Please use attach()\n     * @param  ValidatorInterface      $validator\n     * @param  bool                 $breakChainOnFailure\n     * @param  int                  $priority\n     * @return ValidatorChain Provides a fluent interface\n     */\n    public function addValidator(\n        ValidatorInterface $validator,\n        $breakChainOnFailure = false,\n        $priority = self::DEFAULT_PRIORITY\n    ) {\n        return $this->attach($validator, $breakChainOnFailure, $priority);\n    }\n\n    /**\n     * Adds a validator to the beginning of the chain\n     *\n     * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain,\n     * if one exists, will not be executed.\n     *\n     * @param  ValidatorInterface      $validator\n     * @param  bool                 $breakChainOnFailure\n     * @return ValidatorChain Provides a fluent interface\n     */\n    public function prependValidator(ValidatorInterface $validator, $breakChainOnFailure = false)\n    {\n        $priority = self::DEFAULT_PRIORITY;\n\n        if (! $this->validators->isEmpty()) {\n            $extractedNodes = $this->validators->toArray(PriorityQueue::EXTR_PRIORITY);\n            rsort($extractedNodes, SORT_NUMERIC);\n            $priority = $extractedNodes[0] + 1;\n        }\n\n        $this->validators->insert(\n            [\n                'instance'            => $validator,\n                'breakChainOnFailure' => (bool) $breakChainOnFailure,\n            ],\n            $priority\n        );\n        return $this;\n    }\n\n    /**\n     * Use the plugin manager to add a validator by name\n     *\n     * @param  string $name\n     * @param  array $options\n     * @param  bool $breakChainOnFailure\n     * @param  int $priority\n     * @return ValidatorChain\n     */\n    public function attachByName($name, $options = [], $breakChainOnFailure = false, $priority = self::DEFAULT_PRIORITY)\n    {\n        if (isset($options['break_chain_on_failure'])) {\n            $breakChainOnFailure = (bool) $options['break_chain_on_failure'];\n        }\n\n        if (isset($options['breakchainonfailure'])) {\n            $breakChainOnFailure = (bool) $options['breakchainonfailure'];\n        }\n\n        $this->attach($this->plugin($name, $options), $breakChainOnFailure, $priority);\n\n        return $this;\n    }\n\n    /**\n     * Proxy to attachByName() to keep BC\n     *\n     * @deprecated Please use attachByName()\n     * @param  string $name\n     * @param  array  $options\n     * @param  bool   $breakChainOnFailure\n     * @return ValidatorChain\n     */\n    public function addByName($name, $options = [], $breakChainOnFailure = false)\n    {\n        return $this->attachByName($name, $options, $breakChainOnFailure);\n    }\n\n    /**\n     * Use the plugin manager to prepend a validator by name\n     *\n     * @param  string $name\n     * @param  array  $options\n     * @param  bool   $breakChainOnFailure\n     * @return ValidatorChain\n     */\n    public function prependByName($name, $options = [], $breakChainOnFailure = false)\n    {\n        $validator = $this->plugin($name, $options);\n        $this->prependValidator($validator, $breakChainOnFailure);\n        return $this;\n    }\n\n    /**\n     * Returns true if and only if $value passes all validations in the chain\n     *\n     * Validators are run in the order in which they were added to the chain (FIFO).\n     *\n     * @param  mixed $value\n     * @param  mixed $context Extra \"context\" to provide the validator\n     * @return bool\n     */\n    public function isValid($value, $context = null)\n    {\n        $this->messages = [];\n        $result         = true;\n        foreach ($this->validators as $element) {\n            $validator = $element['instance'];\n            if ($validator->isValid($value, $context)) {\n                continue;\n            }\n            $result         = false;\n            $messages       = $validator->getMessages();\n            $this->messages = array_replace_recursive($this->messages, $messages);\n            if ($element['breakChainOnFailure']) {\n                break;\n            }\n        }\n        return $result;\n    }\n\n    /**\n     * Merge the validator chain with the one given in parameter\n     *\n     * @param ValidatorChain $validatorChain\n     * @return ValidatorChain\n     */\n    public function merge(ValidatorChain $validatorChain)\n    {\n        foreach ($validatorChain->validators->toArray(PriorityQueue::EXTR_BOTH) as $item) {\n            $this->attach($item['data']['instance'], $item['data']['breakChainOnFailure'], $item['priority']);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns array of validation failure messages\n     *\n     * @return array\n     */\n    public function getMessages()\n    {\n        return $this->messages;\n    }\n\n    /**\n     * Get all the validators\n     *\n     * @return array\n     */\n    public function getValidators()\n    {\n        return $this->validators->toArray(PriorityQueue::EXTR_DATA);\n    }\n\n    /**\n     * Invoke chain as command\n     *\n     * @param  mixed $value\n     * @return bool\n     */\n    public function __invoke($value)\n    {\n        return $this->isValid($value);\n    }\n\n    /**\n     * Deep clone handling\n     */\n    public function __clone()\n    {\n        $this->validators = clone $this->validators;\n    }\n\n    /**\n     * Prepare validator chain for serialization\n     *\n     * Plugin manager (property 'plugins') cannot\n     * be serialized. On wakeup the property remains unset\n     * and next invocation to getPluginManager() sets\n     * the default plugin manager instance (ValidatorPluginManager).\n     *\n     * @return array\n     */\n    public function __sleep()\n    {\n        return ['validators', 'messages'];\n    }\n}\n"
  },
  {
    "path": "src/ValidatorInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\ninterface ValidatorInterface\n{\n    /**\n     * Returns true if and only if $value meets the validation requirements\n     *\n     * If $value fails validation, then this method returns false, and\n     * getMessages() will return an array of messages that explain why the\n     * validation failed.\n     *\n     * @param  mixed $value\n     * @return bool\n     * @throws Exception\\RuntimeException If validation of $value is impossible\n     */\n    public function isValid($value);\n\n    /**\n     * Returns an array of messages that explain why the most recent isValid()\n     * call returned false. The array keys are validation failure message identifiers,\n     * and the array values are the corresponding human-readable message strings.\n     *\n     * If isValid() was never called or if the most recent isValid() call\n     * returned true, then this method returns an empty array.\n     *\n     * @return array\n     */\n    public function getMessages();\n}\n"
  },
  {
    "path": "src/ValidatorPluginManager.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Interop\\Container\\ContainerInterface;\nuse Zend\\ServiceManager\\AbstractPluginManager;\nuse Zend\\ServiceManager\\Exception\\InvalidServiceException;\nuse Zend\\ServiceManager\\Factory\\InvokableFactory;\nuse Zend\\I18n\\Validator as I18nValidator;\n\nclass ValidatorPluginManager extends AbstractPluginManager\n{\n    /**\n     * Default set of aliases\n     *\n     * @var array\n     */\n    protected $aliases = [\n        'alnum'                    => I18nValidator\\Alnum::class,\n        'Alnum'                    => I18nValidator\\Alnum::class,\n        'alpha'                    => I18nValidator\\Alpha::class,\n        'Alpha'                    => I18nValidator\\Alpha::class,\n        'barcode'                  => Barcode::class,\n        'Barcode'                  => Barcode::class,\n        'between'                  => Between::class,\n        'Between'                  => Between::class,\n        'bitwise'                  => Bitwise::class,\n        'Bitwise'                  => Bitwise::class,\n        'callback'                 => Callback::class,\n        'Callback'                 => Callback::class,\n        'creditcard'               => CreditCard::class,\n        'creditCard'               => CreditCard::class,\n        'CreditCard'               => CreditCard::class,\n        'csrf'                     => Csrf::class,\n        'Csrf'                     => Csrf::class,\n        'date'                     => Date::class,\n        'Date'                     => Date::class,\n        'datestep'                 => DateStep::class,\n        'dateStep'                 => DateStep::class,\n        'DateStep'                 => DateStep::class,\n        'datetime'                 => I18nValidator\\DateTime::class,\n        'dateTime'                 => I18nValidator\\DateTime::class,\n        'DateTime'                 => I18nValidator\\DateTime::class,\n        'dbnorecordexists'         => Db\\NoRecordExists::class,\n        'dbNoRecordExists'         => Db\\NoRecordExists::class,\n        'DbNoRecordExists'         => Db\\NoRecordExists::class,\n        'dbrecordexists'           => Db\\RecordExists::class,\n        'dbRecordExists'           => Db\\RecordExists::class,\n        'DbRecordExists'           => Db\\RecordExists::class,\n        'digits'                   => Digits::class,\n        'Digits'                   => Digits::class,\n        'emailaddress'             => EmailAddress::class,\n        'emailAddress'             => EmailAddress::class,\n        'EmailAddress'             => EmailAddress::class,\n        'explode'                  => Explode::class,\n        'Explode'                  => Explode::class,\n        'filecount'                => File\\Count::class,\n        'fileCount'                => File\\Count::class,\n        'FileCount'                => File\\Count::class,\n        'filecrc32'                => File\\Crc32::class,\n        'fileCrc32'                => File\\Crc32::class,\n        'FileCrc32'                => File\\Crc32::class,\n        'fileexcludeextension'     => File\\ExcludeExtension::class,\n        'fileExcludeExtension'     => File\\ExcludeExtension::class,\n        'FileExcludeExtension'     => File\\ExcludeExtension::class,\n        'fileexcludemimetype'      => File\\ExcludeMimeType::class,\n        'fileExcludeMimeType'      => File\\ExcludeMimeType::class,\n        'FileExcludeMimeType'      => File\\ExcludeMimeType::class,\n        'fileexists'               => File\\Exists::class,\n        'fileExists'               => File\\Exists::class,\n        'FileExists'               => File\\Exists::class,\n        'fileextension'            => File\\Extension::class,\n        'fileExtension'            => File\\Extension::class,\n        'FileExtension'            => File\\Extension::class,\n        'filefilessize'            => File\\FilesSize::class,\n        'fileFilesSize'            => File\\FilesSize::class,\n        'FileFilesSize'            => File\\FilesSize::class,\n        'filehash'                 => File\\Hash::class,\n        'fileHash'                 => File\\Hash::class,\n        'FileHash'                 => File\\Hash::class,\n        'fileimagesize'            => File\\ImageSize::class,\n        'fileImageSize'            => File\\ImageSize::class,\n        'FileImageSize'            => File\\ImageSize::class,\n        'fileiscompressed'         => File\\IsCompressed::class,\n        'fileIsCompressed'         => File\\IsCompressed::class,\n        'FileIsCompressed'         => File\\IsCompressed::class,\n        'fileisimage'              => File\\IsImage::class,\n        'fileIsImage'              => File\\IsImage::class,\n        'FileIsImage'              => File\\IsImage::class,\n        'filemd5'                  => File\\Md5::class,\n        'fileMd5'                  => File\\Md5::class,\n        'FileMd5'                  => File\\Md5::class,\n        'filemimetype'             => File\\MimeType::class,\n        'fileMimeType'             => File\\MimeType::class,\n        'FileMimeType'             => File\\MimeType::class,\n        'filenotexists'            => File\\NotExists::class,\n        'fileNotExists'            => File\\NotExists::class,\n        'FileNotExists'            => File\\NotExists::class,\n        'filesha1'                 => File\\Sha1::class,\n        'fileSha1'                 => File\\Sha1::class,\n        'FileSha1'                 => File\\Sha1::class,\n        'filesize'                 => File\\Size::class,\n        'fileSize'                 => File\\Size::class,\n        'FileSize'                 => File\\Size::class,\n        'fileupload'               => File\\Upload::class,\n        'fileUpload'               => File\\Upload::class,\n        'FileUpload'               => File\\Upload::class,\n        'fileuploadfile'           => File\\UploadFile::class,\n        'fileUploadFile'           => File\\UploadFile::class,\n        'FileUploadFile'           => File\\UploadFile::class,\n        'filewordcount'            => File\\WordCount::class,\n        'fileWordCount'            => File\\WordCount::class,\n        'FileWordCount'            => File\\WordCount::class,\n        'float'                    => I18nValidator\\IsFloat::class,\n        'Float'                    => I18nValidator\\IsFloat::class,\n        'gpspoint'                 => GpsPoint::class,\n        'gpsPoint'                 => GpsPoint::class,\n        'GpsPoint'                 => GpsPoint::class,\n        'greaterthan'              => GreaterThan::class,\n        'greaterThan'              => GreaterThan::class,\n        'GreaterThan'              => GreaterThan::class,\n        'hex'                      => Hex::class,\n        'Hex'                      => Hex::class,\n        'hostname'                 => Hostname::class,\n        'Hostname'                 => Hostname::class,\n        'iban'                     => Iban::class,\n        'Iban'                     => Iban::class,\n        'identical'                => Identical::class,\n        'Identical'                => Identical::class,\n        'inarray'                  => InArray::class,\n        'inArray'                  => InArray::class,\n        'InArray'                  => InArray::class,\n        'int'                      => I18nValidator\\IsInt::class,\n        'Int'                      => I18nValidator\\IsInt::class,\n        'ip'                       => Ip::class,\n        'Ip'                       => Ip::class,\n        'isbn'                     => Isbn::class,\n        'Isbn'                     => Isbn::class,\n        'isfloat'                  => I18nValidator\\IsFloat::class,\n        'isFloat'                  => I18nValidator\\IsFloat::class,\n        'IsFloat'                  => I18nValidator\\IsFloat::class,\n        'isinstanceof'             => IsInstanceOf::class,\n        'isInstanceOf'             => IsInstanceOf::class,\n        'IsInstanceOf'             => IsInstanceOf::class,\n        'isint'                    => I18nValidator\\IsInt::class,\n        'isInt'                    => I18nValidator\\IsInt::class,\n        'IsInt'                    => I18nValidator\\IsInt::class,\n        'lessthan'                 => LessThan::class,\n        'lessThan'                 => LessThan::class,\n        'LessThan'                 => LessThan::class,\n        'notempty'                 => NotEmpty::class,\n        'notEmpty'                 => NotEmpty::class,\n        'NotEmpty'                 => NotEmpty::class,\n        'phonenumber'              => I18nValidator\\PhoneNumber::class,\n        'phoneNumber'              => I18nValidator\\PhoneNumber::class,\n        'PhoneNumber'              => I18nValidator\\PhoneNumber::class,\n        'postcode'                 => I18nValidator\\PostCode::class,\n        'postCode'                 => I18nValidator\\PostCode::class,\n        'PostCode'                 => I18nValidator\\PostCode::class,\n        'regex'                    => Regex::class,\n        'Regex'                    => Regex::class,\n        'sitemapchangefreq'        => Sitemap\\Changefreq::class,\n        'sitemapChangefreq'        => Sitemap\\Changefreq::class,\n        'SitemapChangefreq'        => Sitemap\\Changefreq::class,\n        'sitemaplastmod'           => Sitemap\\Lastmod::class,\n        'sitemapLastmod'           => Sitemap\\Lastmod::class,\n        'SitemapLastmod'           => Sitemap\\Lastmod::class,\n        'sitemaploc'               => Sitemap\\Loc::class,\n        'sitemapLoc'               => Sitemap\\Loc::class,\n        'SitemapLoc'               => Sitemap\\Loc::class,\n        'sitemappriority'          => Sitemap\\Priority::class,\n        'sitemapPriority'          => Sitemap\\Priority::class,\n        'SitemapPriority'          => Sitemap\\Priority::class,\n        'stringlength'             => StringLength::class,\n        'stringLength'             => StringLength::class,\n        'StringLength'             => StringLength::class,\n        'step'                     => Step::class,\n        'Step'                     => Step::class,\n        'timezone'                 => Timezone::class,\n        'Timezone'                 => Timezone::class,\n        'uri'                      => Uri::class,\n        'Uri'                      => Uri::class,\n        'uuid'                     => Uuid::class,\n        'Uuid'                     => Uuid::class,\n    ];\n\n    /**\n     * Default set of factories\n     *\n     * @var array\n     */\n    protected $factories = [\n        I18nValidator\\Alnum::class             => InvokableFactory::class,\n        I18nValidator\\Alpha::class             => InvokableFactory::class,\n        Barcode::class                         => InvokableFactory::class,\n        Between::class                         => InvokableFactory::class,\n        Bitwise::class                         => InvokableFactory::class,\n        Callback::class                        => InvokableFactory::class,\n        CreditCard::class                      => InvokableFactory::class,\n        Csrf::class                            => InvokableFactory::class,\n        DateStep::class                        => InvokableFactory::class,\n        Date::class                            => InvokableFactory::class,\n        I18nValidator\\DateTime::class          => InvokableFactory::class,\n        Db\\NoRecordExists::class               => InvokableFactory::class,\n        Db\\RecordExists::class                 => InvokableFactory::class,\n        Digits::class                          => InvokableFactory::class,\n        EmailAddress::class                    => InvokableFactory::class,\n        Explode::class                         => InvokableFactory::class,\n        File\\Count::class                      => InvokableFactory::class,\n        File\\Crc32::class                      => InvokableFactory::class,\n        File\\ExcludeExtension::class           => InvokableFactory::class,\n        File\\ExcludeMimeType::class            => InvokableFactory::class,\n        File\\Exists::class                     => InvokableFactory::class,\n        File\\Extension::class                  => InvokableFactory::class,\n        File\\FilesSize::class                  => InvokableFactory::class,\n        File\\Hash::class                       => InvokableFactory::class,\n        File\\ImageSize::class                  => InvokableFactory::class,\n        File\\IsCompressed::class               => InvokableFactory::class,\n        File\\IsImage::class                    => InvokableFactory::class,\n        File\\Md5::class                        => InvokableFactory::class,\n        File\\MimeType::class                   => InvokableFactory::class,\n        File\\NotExists::class                  => InvokableFactory::class,\n        File\\Sha1::class                       => InvokableFactory::class,\n        File\\Size::class                       => InvokableFactory::class,\n        File\\Upload::class                     => InvokableFactory::class,\n        File\\UploadFile::class                 => InvokableFactory::class,\n        File\\WordCount::class                  => InvokableFactory::class,\n        I18nValidator\\IsFloat::class           => InvokableFactory::class,\n        GpsPoint::class                        => InvokableFactory::class,\n        GreaterThan::class                     => InvokableFactory::class,\n        Hex::class                             => InvokableFactory::class,\n        Hostname::class                        => InvokableFactory::class,\n        Iban::class                            => InvokableFactory::class,\n        Identical::class                       => InvokableFactory::class,\n        InArray::class                         => InvokableFactory::class,\n        I18nValidator\\IsInt::class             => InvokableFactory::class,\n        Ip::class                              => InvokableFactory::class,\n        Isbn::class                            => InvokableFactory::class,\n        I18nValidator\\IsFloat::class           => InvokableFactory::class,\n        IsInstanceOf::class                    => InvokableFactory::class,\n        I18nValidator\\IsInt::class             => InvokableFactory::class,\n        LessThan::class                        => InvokableFactory::class,\n        NotEmpty::class                        => InvokableFactory::class,\n        I18nValidator\\PhoneNumber::class       => InvokableFactory::class,\n        I18nValidator\\PostCode::class          => InvokableFactory::class,\n        Regex::class                           => InvokableFactory::class,\n        Sitemap\\Changefreq::class              => InvokableFactory::class,\n        Sitemap\\Lastmod::class                 => InvokableFactory::class,\n        Sitemap\\Loc::class                     => InvokableFactory::class,\n        Sitemap\\Priority::class                => InvokableFactory::class,\n        StringLength::class                    => InvokableFactory::class,\n        Step::class                            => InvokableFactory::class,\n        Timezone::class                        => InvokableFactory::class,\n        Uri::class                             => InvokableFactory::class,\n        Uuid::class                            => InvokableFactory::class,\n\n        // v2 canonical FQCNs\n\n        'zendvalidatorbarcodecode25interleaved' => InvokableFactory::class,\n        'zendvalidatorbarcodecode25'            => InvokableFactory::class,\n        'zendvalidatorbarcodecode39ext'         => InvokableFactory::class,\n        'zendvalidatorbarcodecode39'            => InvokableFactory::class,\n        'zendvalidatorbarcodecode93ext'         => InvokableFactory::class,\n        'zendvalidatorbarcodecode93'            => InvokableFactory::class,\n        'zendvalidatorbarcodeean12'             => InvokableFactory::class,\n        'zendvalidatorbarcodeean13'             => InvokableFactory::class,\n        'zendvalidatorbarcodeean14'             => InvokableFactory::class,\n        'zendvalidatorbarcodeean18'             => InvokableFactory::class,\n        'zendvalidatorbarcodeean2'              => InvokableFactory::class,\n        'zendvalidatorbarcodeean5'              => InvokableFactory::class,\n        'zendvalidatorbarcodeean8'              => InvokableFactory::class,\n        'zendvalidatorbarcodegtin12'            => InvokableFactory::class,\n        'zendvalidatorbarcodegtin13'            => InvokableFactory::class,\n        'zendvalidatorbarcodegtin14'            => InvokableFactory::class,\n        'zendvalidatorbarcodeidentcode'         => InvokableFactory::class,\n        'zendvalidatorbarcodeintelligentmail'   => InvokableFactory::class,\n        'zendvalidatorbarcodeissn'              => InvokableFactory::class,\n        'zendvalidatorbarcodeitf14'             => InvokableFactory::class,\n        'zendvalidatorbarcodeleitcode'          => InvokableFactory::class,\n        'zendvalidatorbarcodeplanet'            => InvokableFactory::class,\n        'zendvalidatorbarcodepostnet'           => InvokableFactory::class,\n        'zendvalidatorbarcoderoyalmail'         => InvokableFactory::class,\n        'zendvalidatorbarcodesscc'              => InvokableFactory::class,\n        'zendvalidatorbarcodeupca'              => InvokableFactory::class,\n        'zendvalidatorbarcodeupce'              => InvokableFactory::class,\n        'zendvalidatorbarcode'                  => InvokableFactory::class,\n        'zendvalidatorbetween'                  => InvokableFactory::class,\n        'zendvalidatorbitwise'                  => InvokableFactory::class,\n        'zendvalidatorcallback'                 => InvokableFactory::class,\n        'zendvalidatorcreditcard'               => InvokableFactory::class,\n        'zendvalidatorcsrf'                     => InvokableFactory::class,\n        'zendvalidatordatestep'                 => InvokableFactory::class,\n        'zendvalidatordate'                     => InvokableFactory::class,\n        'zendvalidatordbnorecordexists'         => InvokableFactory::class,\n        'zendvalidatordbrecordexists'           => InvokableFactory::class,\n        'zendvalidatordigits'                   => InvokableFactory::class,\n        'zendvalidatoremailaddress'             => InvokableFactory::class,\n        'zendvalidatorexplode'                  => InvokableFactory::class,\n        'zendvalidatorfilecount'                => InvokableFactory::class,\n        'zendvalidatorfilecrc32'                => InvokableFactory::class,\n        'zendvalidatorfileexcludeextension'     => InvokableFactory::class,\n        'zendvalidatorfileexcludemimetype'      => InvokableFactory::class,\n        'zendvalidatorfileexists'               => InvokableFactory::class,\n        'zendvalidatorfileextension'            => InvokableFactory::class,\n        'zendvalidatorfilefilessize'            => InvokableFactory::class,\n        'zendvalidatorfilehash'                 => InvokableFactory::class,\n        'zendvalidatorfileimagesize'            => InvokableFactory::class,\n        'zendvalidatorfileiscompressed'         => InvokableFactory::class,\n        'zendvalidatorfileisimage'              => InvokableFactory::class,\n        'zendvalidatorfilemd5'                  => InvokableFactory::class,\n        'zendvalidatorfilemimetype'             => InvokableFactory::class,\n        'zendvalidatorfilenotexists'            => InvokableFactory::class,\n        'zendvalidatorfilesha1'                 => InvokableFactory::class,\n        'zendvalidatorfilesize'                 => InvokableFactory::class,\n        'zendvalidatorfileupload'               => InvokableFactory::class,\n        'zendvalidatorfileuploadfile'           => InvokableFactory::class,\n        'zendvalidatorfilewordcount'            => InvokableFactory::class,\n        'zendvalidatorgpspoint'                 => InvokableFactory::class,\n        'zendvalidatorgreaterthan'              => InvokableFactory::class,\n        'zendvalidatorhex'                      => InvokableFactory::class,\n        'zendvalidatorhostname'                 => InvokableFactory::class,\n        'zendi18nvalidatoralnum'                => InvokableFactory::class,\n        'zendi18nvalidatoralpha'                => InvokableFactory::class,\n        'zendi18nvalidatordatetime'             => InvokableFactory::class,\n        'zendi18nvalidatorisfloat'              => InvokableFactory::class,\n        'zendi18nvalidatorisint'                => InvokableFactory::class,\n        'zendi18nvalidatorphonenumber'          => InvokableFactory::class,\n        'zendi18nvalidatorpostcode'             => InvokableFactory::class,\n        'zendvalidatoriban'                     => InvokableFactory::class,\n        'zendvalidatoridentical'                => InvokableFactory::class,\n        'zendvalidatorinarray'                  => InvokableFactory::class,\n        'zendvalidatorip'                       => InvokableFactory::class,\n        'zendvalidatorisbn'                     => InvokableFactory::class,\n        'zendvalidatorisinstanceof'             => InvokableFactory::class,\n        'zendvalidatorlessthan'                 => InvokableFactory::class,\n        'zendvalidatornotempty'                 => InvokableFactory::class,\n        'zendvalidatorregex'                    => InvokableFactory::class,\n        'zendvalidatorsitemapchangefreq'        => InvokableFactory::class,\n        'zendvalidatorsitemaplastmod'           => InvokableFactory::class,\n        'zendvalidatorsitemaploc'               => InvokableFactory::class,\n        'zendvalidatorsitemappriority'          => InvokableFactory::class,\n        'zendvalidatorstringlength'             => InvokableFactory::class,\n        'zendvalidatorstep'                     => InvokableFactory::class,\n        'zendvalidatortimezone'                 => InvokableFactory::class,\n        'zendvalidatoruri'                      => InvokableFactory::class,\n        'zendvalidatoruuid'                     => InvokableFactory::class,\n    ];\n\n    /**\n     * Whether or not to share by default; default to false (v2)\n     *\n     * @var bool\n     */\n    protected $shareByDefault = false;\n\n    /**\n     * Whether or not to share by default; default to false (v3)\n     *\n     * @var bool\n     */\n    protected $sharedByDefault = false;\n\n    /**\n     * Default instance type\n     *\n     * @var string\n     */\n    protected $instanceOf = ValidatorInterface::class;\n\n    /**\n     * Constructor\n     *\n     * After invoking parent constructor, add an initializer to inject the\n     * attached translator, if any, to the currently requested helper.\n     *\n     * {@inheritDoc}\n     */\n    public function __construct($configOrContainerInstance = null, array $v3config = [])\n    {\n        parent::__construct($configOrContainerInstance, $v3config);\n\n        $this->addInitializer([$this, 'injectTranslator']);\n        $this->addInitializer([$this, 'injectValidatorPluginManager']);\n    }\n\n    /**\n     * Validate plugin instance\n     *\n     * {@inheritDoc}\n     */\n    public function validate($plugin)\n    {\n        if (! $plugin instanceof $this->instanceOf) {\n            throw new InvalidServiceException(sprintf(\n                '%s expects only to create instances of %s; %s is invalid',\n                get_class($this),\n                $this->instanceOf,\n                (is_object($plugin) ? get_class($plugin) : gettype($plugin))\n            ));\n        }\n    }\n\n    /**\n     * For v2 compatibility: validate plugin instance.\n     *\n     * Proxies to `validate()`.\n     *\n     * @param mixed $plugin\n     * @throws Exception\\RuntimeException\n     */\n    public function validatePlugin($plugin)\n    {\n        try {\n            $this->validate($plugin);\n        } catch (InvalidServiceException $e) {\n            throw new Exception\\RuntimeException(sprintf(\n                'Plugin of type %s is invalid; must implement %s',\n                (is_object($plugin) ? get_class($plugin) : gettype($plugin)),\n                ValidatorInterface::class\n            ), $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * Inject a validator instance with the registered translator\n     *\n     * @param  ContainerInterface|object $first\n     * @param  ContainerInterface|object $second\n     * @return void\n     */\n    public function injectTranslator($first, $second)\n    {\n        if ($first instanceof ContainerInterface) {\n            $container = $first;\n            $validator = $second;\n        } else {\n            $container = $second;\n            $validator = $first;\n        }\n\n        // V2 means we pull it from the parent container\n        if ($container === $this && method_exists($container, 'getServiceLocator') && $container->getServiceLocator()) {\n            $container = $container->getServiceLocator();\n        }\n\n        if ($validator instanceof Translator\\TranslatorAwareInterface) {\n            if ($container && $container->has('MvcTranslator')) {\n                $validator->setTranslator($container->get('MvcTranslator'));\n            }\n        }\n    }\n\n    /**\n     * Inject a validator plugin manager\n     *\n     * @param  ContainerInterface|object $first\n     * @param  ContainerInterface|object $second\n     * @return void\n     */\n    public function injectValidatorPluginManager($first, $second)\n    {\n        if ($first instanceof ContainerInterface) {\n            $container = $first;\n            $validator = $second;\n        } else {\n            $container = $second;\n            $validator = $first;\n        }\n        if ($validator instanceof ValidatorPluginManagerAwareInterface) {\n            $validator->setValidatorPluginManager($this);\n        }\n    }\n}\n"
  },
  {
    "path": "src/ValidatorPluginManagerAwareInterface.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\ninterface ValidatorPluginManagerAwareInterface\n{\n    /**\n     * Set validator plugin manager\n     *\n     * @param ValidatorPluginManager $pluginManager\n     */\n    public function setValidatorPluginManager(ValidatorPluginManager $pluginManager);\n\n    /**\n     * Get validator plugin manager\n     *\n     * @return ValidatorPluginManager\n     */\n    public function getValidatorPluginManager();\n}\n"
  },
  {
    "path": "src/ValidatorPluginManagerFactory.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\nuse Interop\\Container\\ContainerInterface;\nuse Zend\\ServiceManager\\Config;\nuse Zend\\ServiceManager\\FactoryInterface;\nuse Zend\\ServiceManager\\ServiceLocatorInterface;\n\nclass ValidatorPluginManagerFactory implements FactoryInterface\n{\n    /**\n     * zend-servicemanager v2 support for invocation options.\n     *\n     * @param array\n     */\n    protected $creationOptions;\n\n    /**\n     * {@inheritDoc}\n     *\n     * @return ValidatorPluginManager\n     */\n    public function __invoke(ContainerInterface $container, $name, array $options = null)\n    {\n        $pluginManager = new ValidatorPluginManager($container, $options ?: []);\n\n        // If this is in a zend-mvc application, the ServiceListener will inject\n        // merged configuration during bootstrap.\n        if ($container->has('ServiceListener')) {\n            return $pluginManager;\n        }\n\n        // If we do not have a config service, nothing more to do\n        if (! $container->has('config')) {\n            return $pluginManager;\n        }\n\n        $config = $container->get('config');\n\n        // If we do not have validators configuration, nothing more to do\n        if (! isset($config['validators']) || ! is_array($config['validators'])) {\n            return $pluginManager;\n        }\n\n        // Wire service configuration for validators\n        (new Config($config['validators']))->configureServiceManager($pluginManager);\n\n        return $pluginManager;\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * @return ValidatorPluginManager\n     */\n    public function createService(ServiceLocatorInterface $container, $name = null, $requestedName = null)\n    {\n        return $this($container, $requestedName ?: ValidatorPluginManager::class, $this->creationOptions);\n    }\n\n    /**\n     * zend-servicemanager v2 support for invocation options.\n     *\n     * @param array $options\n     * @return void\n     */\n    public function setCreationOptions(array $options)\n    {\n        $this->creationOptions = $options;\n    }\n}\n"
  },
  {
    "path": "src/ValidatorProviderInterface.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator;\n\n/**\n * Hint to the zend-modulemanager ServiceListener that a module provides validators.\n *\n * Module classes implementing this interface hint to\n * Zend\\ModuleManager\\ServiceListener that they provide validators for the\n * ValidatorPluginManager.\n *\n * For users of zend-mvc/zend-modulemanager v2, this poses no backwards-compatibility\n * break as the method getValidatorConfig is still duck-typed within Zend\\Validator\\Module\n * when providing configuration to the ServiceListener.\n */\ninterface ValidatorProviderInterface\n{\n    /**\n     * Provide plugin manager configuration for validators.\n     *\n     * @return array\n     */\n    public function getValidatorConfig();\n}\n"
  },
  {
    "path": "test/AbstractTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionMethod;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\EmailAddress;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\Hostname;\n\n/**\n * @group      Zend_Validator\n */\nclass AbstractTest extends TestCase\n{\n    /** @var AbstractValidator */\n    public $validator;\n\n    /**\n     * Whether an error occurred\n     *\n     * @var bool\n     */\n    protected $errorOccurred = false;\n\n    public function setUp()\n    {\n        $this->validator = new TestAsset\\ConcreteValidator();\n    }\n\n    public function tearDown()\n    {\n        AbstractValidator::setDefaultTranslator(null, 'default');\n    }\n\n    public function testTranslatorNullByDefault()\n    {\n        $this->assertNull($this->validator->getTranslator());\n    }\n\n    public function testCanSetTranslator()\n    {\n        $this->testTranslatorNullByDefault();\n        set_error_handler([$this, 'errorHandlerIgnore']);\n        $translator = new TestAsset\\Translator();\n        restore_error_handler();\n        $this->validator->setTranslator($translator);\n        $this->assertSame($translator, $this->validator->getTranslator());\n    }\n\n    public function testCanSetTranslatorToNull()\n    {\n        $this->testCanSetTranslator();\n        set_error_handler([$this, 'errorHandlerIgnore']);\n        $this->validator->setTranslator(null);\n        restore_error_handler();\n        $this->assertNull($this->validator->getTranslator());\n    }\n\n    public function testErrorMessagesAreTranslatedWhenTranslatorPresent()\n    {\n        if (! extension_loaded('intl')) {\n            $this->markTestSkipped('ext/intl not enabled');\n        }\n\n        $loader = new TestAsset\\ArrayTranslator();\n        $loader->translations = [\n            '%value% was passed' => 'This is the translated message for %value%',\n        ];\n        $translator = new TestAsset\\Translator();\n        $translator->getPluginManager()->setService('default', $loader);\n        $translator->addTranslationFile('default', null);\n\n        $this->validator->setTranslator($translator);\n        $this->assertFalse($this->validator->isValid('bar'));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('fooMessage', $messages);\n        $this->assertContains('bar', $messages['fooMessage'], var_export($messages, 1));\n        $this->assertContains('This is the translated message for ', $messages['fooMessage']);\n    }\n\n    public function testObscureValueFlagFalseByDefault()\n    {\n        $this->assertFalse($this->validator->isValueObscured());\n    }\n\n    public function testCanSetValueObscuredFlag()\n    {\n        $this->testObscureValueFlagFalseByDefault();\n        $this->validator->setValueObscured(true);\n        $this->assertTrue($this->validator->isValueObscured());\n        $this->validator->setValueObscured(false);\n        $this->assertFalse($this->validator->isValueObscured());\n    }\n\n    public function testValueIsObfuscatedWheObscureValueFlagIsTrue()\n    {\n        $this->validator->setValueObscured(true);\n        $this->assertFalse($this->validator->isValid('foobar'));\n        $messages = $this->validator->getMessages();\n        $this->assertTrue(isset($messages['fooMessage']));\n        $message = $messages['fooMessage'];\n        $this->assertNotContains('foobar', $message);\n        $this->assertContains('******', $message);\n    }\n\n    /**\n     * @group ZF-4463\n     */\n    public function testDoesNotFailOnObjectInput()\n    {\n        $this->assertFalse($this->validator->isValid(new \\stdClass()));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('fooMessage', $messages);\n    }\n\n    public function testTranslatorEnabledPerDefault()\n    {\n        set_error_handler([$this, 'errorHandlerIgnore']);\n        $translator = new TestAsset\\Translator();\n        $this->validator->setTranslator($translator);\n        $this->assertTrue($this->validator->isTranslatorEnabled());\n    }\n\n    public function testCanDisableTranslator()\n    {\n        if (! extension_loaded('intl')) {\n            $this->markTestSkipped('ext/intl not enabled');\n        }\n\n        $loader = new TestAsset\\ArrayTranslator();\n        $loader->translations = [\n            '%value% was passed' => 'This is the translated message for %value%',\n        ];\n        $translator = new TestAsset\\Translator();\n        $translator->getPluginManager()->setService('default', $loader);\n        $translator->addTranslationFile('default', null);\n        $this->validator->setTranslator($translator);\n\n        $this->assertFalse($this->validator->isValid('bar'));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('fooMessage', $messages);\n        $this->assertContains('bar', $messages['fooMessage']);\n        $this->assertContains('This is the translated message for ', $messages['fooMessage']);\n\n        $this->validator->setTranslatorEnabled(false);\n        $this->assertFalse($this->validator->isTranslatorEnabled());\n\n        $this->assertFalse($this->validator->isValid('bar'));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('fooMessage', $messages);\n        $this->assertContains('bar', $messages['fooMessage']);\n        $this->assertContains('bar was passed', $messages['fooMessage']);\n    }\n\n    public function testGetMessageTemplates()\n    {\n        $messages = $this->validator->getMessageTemplates();\n        $this->assertEquals([\n            'fooMessage' => '%value% was passed',\n            'barMessage' => '%value% was wrong'\n        ], $messages);\n\n        $this->assertEquals([\n            TestAsset\\ConcreteValidator::FOO_MESSAGE => '%value% was passed',\n            TestAsset\\ConcreteValidator::BAR_MESSAGE => '%value% was wrong'\n        ], $messages);\n    }\n\n    public function testInvokeProxiesToIsValid()\n    {\n        $validator = new TestAsset\\ConcreteValidator;\n        $this->assertFalse($validator('foo'));\n        $this->assertContains(\"foo was passed\", $validator->getMessages());\n    }\n\n    public function testTranslatorMethods()\n    {\n        $translatorMock = $this->createMock(TestAsset\\Translator::class);\n        $this->validator->setTranslator($translatorMock, 'foo');\n\n        $this->assertEquals($translatorMock, $this->validator->getTranslator());\n        $this->assertEquals('foo', $this->validator->getTranslatorTextDomain());\n        $this->assertTrue($this->validator->hasTranslator());\n        $this->assertTrue($this->validator->isTranslatorEnabled());\n\n        $this->validator->setTranslatorEnabled(false);\n        $this->assertFalse($this->validator->isTranslatorEnabled());\n    }\n\n    public function testDefaultTranslatorMethods()\n    {\n        $this->assertFalse(AbstractValidator::hasDefaultTranslator());\n        $this->assertNull(AbstractValidator::getDefaultTranslator());\n        $this->assertEquals('default', AbstractValidator::getDefaultTranslatorTextDomain());\n\n        $this->assertFalse($this->validator->hasTranslator());\n\n        $translatorMock = $this->createMock(TestAsset\\Translator::class);\n        AbstractValidator::setDefaultTranslator($translatorMock, 'foo');\n\n        $this->assertEquals($translatorMock, AbstractValidator::getDefaultTranslator());\n        $this->assertEquals($translatorMock, $this->validator->getTranslator());\n        $this->assertEquals('foo', AbstractValidator::getDefaultTranslatorTextDomain());\n        $this->assertEquals('foo', $this->validator->getTranslatorTextDomain());\n        $this->assertTrue(AbstractValidator::hasDefaultTranslator());\n    }\n\n    public function testMessageCreationWithNestedArrayValueDoesNotRaiseNotice()\n    {\n        $r = new ReflectionMethod($this->validator, 'createMessage');\n        $r->setAccessible(true);\n\n        $message = $r->invoke($this->validator, 'fooMessage', ['foo' => ['bar' => 'baz']]);\n        $this->assertContains('foo', $message);\n        $this->assertContains('bar', $message);\n        $this->assertContains('baz', $message);\n    }\n\n    public function testNonIdenticalMessagesAllReturned()\n    {\n        $this->assertFalse($this->validator->isValid('invalid'));\n\n        $messages = $this->validator->getMessages();\n\n        $this->assertCount(2, $messages);\n        $this->assertEquals([\n            TestAsset\\ConcreteValidator::FOO_MESSAGE => 'invalid was passed',\n            TestAsset\\ConcreteValidator::BAR_MESSAGE => 'invalid was wrong'\n        ], $messages);\n    }\n\n    public function testIdenticalMessagesNotReturned()\n    {\n        $this->validator->setMessage('Default error message');\n\n        $this->assertFalse($this->validator->isValid('invalid'));\n\n        $messages = $this->validator->getMessages();\n\n        $this->assertCount(1, $messages);\n        $this->assertEquals('Default error message', reset($messages));\n    }\n\n    public function testIdenticalAndNonIdenticalMessagesReturned()\n    {\n        $validator = new EmailAddress();\n\n        $this->assertFalse($validator->isValid('invalid@email.coma'));\n        $this->assertCount(3, $validator->getMessages());\n        $this->assertArrayHasKey(EmailAddress::INVALID_HOSTNAME, $validator->getMessages());\n        $this->assertArrayHasKey(Hostname::UNKNOWN_TLD, $validator->getMessages());\n        $this->assertArrayHasKey(Hostname::LOCAL_NAME_NOT_ALLOWED, $validator->getMessages());\n\n        $validator->setMessages([\n            EmailAddress::INVALID_HOSTNAME => 'This is the same error message',\n            Hostname::UNKNOWN_TLD => 'This is the same error message'\n        ]);\n\n        $this->assertFalse($validator->isValid('invalid@email.coma'));\n        $this->assertCount(2, $validator->getMessages());\n        $this->assertArrayHasKey(EmailAddress::INVALID_HOSTNAME, $validator->getMessages());\n        $this->assertArrayHasKey(Hostname::LOCAL_NAME_NOT_ALLOWED, $validator->getMessages());\n    }\n\n    /**\n     * Ignores a raised PHP error when in effect, but throws a flag to indicate an error occurred\n     *\n     * @param  integer $errno\n     * @param  string  $errstr\n     * @param  string  $errfile\n     * @param  integer $errline\n     * @param  array   $errcontext\n     * @return void\n     */\n    public function errorHandlerIgnore($errno, $errstr, $errfile, $errline, array $errcontext)\n    {\n        $this->errorOccurred = true;\n    }\n\n    public function testRetrievingUnknownOptionRaisesException()\n    {\n        $option = 'foo';\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage(sprintf(\"Invalid option '%s'\", $option));\n\n        $this->validator->getOption($option);\n    }\n\n    public function invalidOptionsArguments()\n    {\n        return [\n            'null' => [null],\n            'true' => [true],\n            'false' => [false],\n            'zero' => [0],\n            'int' => [1],\n            'zero-float' => [0.0],\n            'float' => [1.1],\n            'string' => ['string'],\n            'object' => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidOptionsArguments\n     */\n    public function testSettingOptionsWithNonTraversableRaisesException($options)\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('setOptions expects an array or Traversable');\n        $this->validator->setOptions($options);\n    }\n}\n"
  },
  {
    "path": "test/BarcodeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Barcode;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\Barcode\\AdapterInterface;\nuse Zend\\Validator\\Barcode\\Ean13;\n\n/**\n * \\Zend\\Barcode\n *\n * @group      Zend_Validator\n */\nclass BarcodeTest extends TestCase\n{\n    public function provideBarcodeConstructor()\n    {\n        return [\n            'null' => [null, Barcode\\Ean13::class],\n            'empty-array' => [[], Barcode\\Ean13::class],\n        ];\n    }\n    /**\n     * @dataProvider provideBarcodeConstructor\n     */\n    public function testBarcodeConstructor($options, $expectedInstance)\n    {\n        $barcode = new Barcode($options);\n        $this->assertInstanceOf($expectedInstance, $barcode->getAdapter());\n    }\n\n    public function testNoneExisting()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('not found');\n        $barcode = new Barcode('\\Zend\\Validate\\BarcodeTest\\NonExistentClassName');\n    }\n\n    public function testSetAdapter()\n    {\n        $barcode = new Barcode('upca');\n        $this->assertTrue($barcode->isValid('065100004327'));\n\n        $barcode->setAdapter('ean13');\n        $this->assertTrue($barcode->isValid('0075678164125'));\n    }\n\n    public function testSetCustomAdapter()\n    {\n        $barcode = new Barcode([\n            'adapter' => $this->createMock(AdapterInterface::class)\n        ]);\n\n        $this->assertInstanceOf(AdapterInterface::class, $barcode->getAdapter());\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $barcode = new Barcode('upca');\n        $this->assertFalse($barcode->isValid(106510000.4327));\n        $this->assertFalse($barcode->isValid(['065100004327']));\n\n        $barcode = new Barcode('ean13');\n        $this->assertFalse($barcode->isValid(06510000.4327));\n        $this->assertFalse($barcode->isValid(['065100004327']));\n    }\n\n    public function testInvalidChecksumAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode1.php\";\n        $barcode = new Barcode('MyBarcode1');\n        $this->assertFalse($barcode->isValid('0000000'));\n        $this->assertArrayHasKey('barcodeFailed', $barcode->getMessages());\n        $this->assertFalse($barcode->getAdapter()->hasValidChecksum('0000000'));\n    }\n\n    public function testInvalidCharAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode1.php\";\n        $barcode = new Barcode('MyBarcode1');\n        $this->assertFalse($barcode->getAdapter()->hasValidCharacters(123));\n    }\n\n    public function testAscii128CharacterAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode2.php\";\n        $barcode = new Barcode('MyBarcode2');\n        $this->assertTrue($barcode->getAdapter()->hasValidCharacters('1234QW!\"'));\n    }\n\n    public function testInvalidLengthAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode2.php\";\n        $barcode = new Barcode('MyBarcode2');\n        $this->assertFalse($barcode->getAdapter()->hasValidLength(123));\n    }\n\n    public function testArrayLengthAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode2.php\";\n        $barcode = new Barcode('MyBarcode2');\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('1'));\n        $this->assertFalse($barcode->getAdapter()->hasValidLength('12'));\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('123'));\n        $this->assertFalse($barcode->getAdapter()->hasValidLength('1234'));\n    }\n\n    public function testArrayLengthAdapter2()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode3.php\";\n        $barcode = new Barcode('MyBarcode3');\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('1'));\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('12'));\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('123'));\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('1234'));\n    }\n\n    public function testOddLengthAdapter()\n    {\n        require_once __DIR__ . \"/_files/MyBarcode4.php\";\n        $barcode = new Barcode('MyBarcode4');\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('1'));\n        $this->assertFalse($barcode->getAdapter()->hasValidLength('12'));\n        $this->assertTrue($barcode->getAdapter()->hasValidLength('123'));\n        $this->assertFalse($barcode->getAdapter()->hasValidLength('1234'));\n    }\n\n    public function testInvalidAdapter()\n    {\n        $barcode = new Barcode('Ean13');\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('does not implement');\n        require_once __DIR__ . \"/_files/MyBarcode5.php\";\n        $barcode->setAdapter('MyBarcode5');\n    }\n\n    public function testArrayConstructAdapter()\n    {\n        $barcode = new Barcode(['adapter' => 'Ean13', 'options' => 'unknown', 'useChecksum' => false]);\n        $this->assertInstanceOf(Ean13::class, $barcode->getAdapter());\n        $this->assertFalse($barcode->useChecksum());\n    }\n\n    public function testDefaultArrayConstructWithMissingAdapter()\n    {\n        $barcode = new Barcode(['options' => 'unknown', 'checksum' => false]);\n        $this->assertTrue($barcode->isValid('0075678164125'));\n    }\n\n    public function testConfigConstructAdapter()\n    {\n        $array = ['adapter' => 'Ean13', 'options' => 'unknown', 'useChecksum' => false];\n        $config = new \\Zend\\Config\\Config($array);\n\n        $barcode = new Barcode($config);\n        $this->assertTrue($barcode->isValid('0075678164125'));\n    }\n\n    public function testCODE25()\n    {\n        $barcode = new Barcode('code25');\n        $this->assertTrue($barcode->isValid('0123456789101213'));\n        $this->assertTrue($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123a'));\n\n        $barcode->useChecksum(true);\n        $this->assertTrue($barcode->isValid('0123456789101214'));\n        $this->assertFalse($barcode->isValid('0123456789101213'));\n    }\n\n    public function testCODE25INTERLEAVED()\n    {\n        $barcode = new Barcode('code25interleaved');\n        $this->assertTrue($barcode->isValid('0123456789101213'));\n        $this->assertFalse($barcode->isValid('123'));\n\n        $barcode->useChecksum(true);\n        $this->assertTrue($barcode->isValid('0123456789101214'));\n        $this->assertFalse($barcode->isValid('0123456789101213'));\n    }\n\n    public function testCODE39()\n    {\n        $barcode = new Barcode('code39');\n        $this->assertTrue($barcode->isValid('TEST93TEST93TEST93TEST93Y+'));\n        $this->assertTrue($barcode->isValid('00075678164124'));\n        $this->assertFalse($barcode->isValid('Test93Test93Test'));\n\n        $barcode->useChecksum(true);\n        $this->assertTrue($barcode->isValid('159AZH'));\n        $this->assertFalse($barcode->isValid('159AZG'));\n    }\n\n    public function testCODE39EXT()\n    {\n        $barcode = new Barcode('code39ext');\n        $this->assertTrue($barcode->isValid('TEST93TEST93TEST93TEST93Y+'));\n        $this->assertTrue($barcode->isValid('00075678164124'));\n        $this->assertTrue($barcode->isValid('Test93Test93Test'));\n\n// @TODO: CODE39 EXTENDED CHECKSUM VALIDATION MISSING\n//        $barcode->useChecksum(true);\n//        $this->assertTrue($barcode->isValid('159AZH'));\n//        $this->assertFalse($barcode->isValid('159AZG'));\n    }\n\n    public function testCODE93()\n    {\n        $barcode = new Barcode('code93');\n        $this->assertTrue($barcode->isValid('TEST93+'));\n        $this->assertFalse($barcode->isValid('Test93+'));\n\n        $barcode->useChecksum(true);\n        $this->assertTrue($barcode->isValid('CODE 93E0'));\n        $this->assertFalse($barcode->isValid('CODE 93E1'));\n    }\n\n    public function testCODE93EXT()\n    {\n        $barcode = new Barcode('code93ext');\n        $this->assertTrue($barcode->isValid('TEST93+'));\n        $this->assertTrue($barcode->isValid('Test93+'));\n\n// @TODO: CODE93 EXTENDED CHECKSUM VALIDATION MISSING\n//        $barcode->useChecksum(true);\n//        $this->assertTrue($barcode->isValid('CODE 93E0'));\n//        $this->assertFalse($barcode->isValid('CODE 93E1'));\n    }\n\n    public function testEAN2()\n    {\n        $barcode = new Barcode('ean2');\n        $this->assertTrue($barcode->isValid('12'));\n        $this->assertFalse($barcode->isValid('1'));\n        $this->assertFalse($barcode->isValid('123'));\n    }\n\n    public function testEAN5()\n    {\n        $barcode = new Barcode('ean5');\n        $this->assertTrue($barcode->isValid('12345'));\n        $this->assertFalse($barcode->isValid('1234'));\n        $this->assertFalse($barcode->isValid('123456'));\n    }\n\n    public function testEAN8()\n    {\n        $barcode = new Barcode('ean8');\n        $this->assertTrue($barcode->isValid('12345670'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('12345671'));\n        $this->assertTrue($barcode->isValid('1234567'));\n    }\n\n    public function testEAN12()\n    {\n        $barcode = new Barcode('ean12');\n        $this->assertTrue($barcode->isValid('123456789012'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123456789013'));\n    }\n\n    public function testEAN13()\n    {\n        $barcode = new Barcode('ean13');\n        $this->assertTrue($barcode->isValid('1234567890128'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('1234567890127'));\n    }\n\n    public function testEAN14()\n    {\n        $barcode = new Barcode('ean14');\n        $this->assertTrue($barcode->isValid('12345678901231'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('12345678901232'));\n    }\n\n    public function testEAN18()\n    {\n        $barcode = new Barcode('ean18');\n        $this->assertTrue($barcode->isValid('123456789012345675'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123456789012345676'));\n    }\n\n    public function testGTIN12()\n    {\n        $barcode = new Barcode('gtin12');\n        $this->assertTrue($barcode->isValid('123456789012'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123456789013'));\n    }\n\n    public function testGTIN13()\n    {\n        $barcode = new Barcode('gtin13');\n        $this->assertTrue($barcode->isValid('1234567890128'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('1234567890127'));\n    }\n\n    public function testGTIN14()\n    {\n        $barcode = new Barcode('gtin14');\n        $this->assertTrue($barcode->isValid('12345678901231'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('12345678901232'));\n    }\n\n    public function testIDENTCODE()\n    {\n        $barcode = new Barcode('identcode');\n        $this->assertTrue($barcode->isValid('564000000050'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('0563102430313'));\n        $this->assertFalse($barcode->isValid('564000000051'));\n    }\n\n    public function testINTELLIGENTMAIL()\n    {\n        $barcode = new Barcode('intelligentmail');\n        $this->assertTrue($barcode->isValid('01234567094987654321'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('5555512371'));\n    }\n\n    public function testISSN()\n    {\n        $barcode = new Barcode('issn');\n        $this->assertTrue($barcode->isValid('1144875X'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('1144874X'));\n\n        $this->assertTrue($barcode->isValid('9771144875007'));\n        $this->assertFalse($barcode->isValid('97711448750X7'));\n    }\n\n    public function testITF14()\n    {\n        $barcode = new Barcode('itf14');\n        $this->assertTrue($barcode->isValid('00075678164125'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('00075678164124'));\n    }\n\n    public function testLEITCODE()\n    {\n        $barcode = new Barcode('leitcode');\n        $this->assertTrue($barcode->isValid('21348075016401'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('021348075016401'));\n        $this->assertFalse($barcode->isValid('21348075016402'));\n    }\n\n    public function testPLANET()\n    {\n        $barcode = new Barcode('planet');\n        $this->assertTrue($barcode->isValid('401234567891'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('401234567892'));\n    }\n\n    public function testPOSTNET()\n    {\n        $barcode = new Barcode('postnet');\n        $this->assertTrue($barcode->isValid('5555512372'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('5555512371'));\n    }\n\n    public function testROYALMAIL()\n    {\n        $barcode = new Barcode('royalmail');\n        $this->assertTrue($barcode->isValid('SN34RD1AK'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('SN34RD1AW'));\n\n        $this->assertTrue($barcode->isValid('012345W'));\n        $this->assertTrue($barcode->isValid('06CIOUH'));\n    }\n\n    public function testSSCC()\n    {\n        $barcode = new Barcode('sscc');\n        $this->assertTrue($barcode->isValid('123456789012345675'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123456789012345676'));\n    }\n\n    public function testUPCA()\n    {\n        $barcode = new Barcode('upca');\n        $this->assertTrue($barcode->isValid('123456789012'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertFalse($barcode->isValid('123456789013'));\n    }\n\n    public function testUPCE()\n    {\n        $barcode = new Barcode('upce');\n        $this->assertTrue($barcode->isValid('02345673'));\n        $this->assertFalse($barcode->isValid('02345672'));\n        $this->assertFalse($barcode->isValid('123'));\n        $this->assertTrue($barcode->isValid('123456'));\n        $this->assertTrue($barcode->isValid('0234567'));\n    }\n\n    /**\n     * @group ZF-10116\n     */\n    public function testArrayLengthMessage()\n    {\n        $barcode = new Barcode('ean8');\n        $this->assertFalse($barcode->isValid('123'));\n        $message = $barcode->getMessages();\n        $this->assertArrayHasKey('barcodeInvalidLength', $message);\n        $this->assertContains(\"length of 7/8 characters\", $message['barcodeInvalidLength']);\n    }\n\n    /**\n     * @group ZF-8673\n     */\n    public function testCODABAR()\n    {\n        $barcode = new Barcode('codabar');\n        $this->assertTrue($barcode->isValid('123456789'));\n        $this->assertTrue($barcode->isValid('A123A'));\n        $this->assertTrue($barcode->isValid('A123C'));\n        $this->assertFalse($barcode->isValid('A123E'));\n        $this->assertFalse($barcode->isValid('A1A23C'));\n        $this->assertTrue($barcode->isValid('T123*'));\n        $this->assertFalse($barcode->isValid('*123A'));\n    }\n\n    /**\n     * @group ZF-11532\n     */\n    public function testIssnWithMod0()\n    {\n        $barcode = new Barcode('issn');\n        $this->assertTrue($barcode->isValid('18710360'));\n    }\n\n    /**\n     * @group ZF-8674\n     */\n    public function testCODE128()\n    {\n        if (! extension_loaded('iconv')) {\n            $this->markTestSkipped('Missing ext/iconv');\n        }\n\n        $barcode = new Barcode('code128');\n        $this->assertTrue($barcode->isValid('ˆCODE128:Š'));\n        $this->assertTrue($barcode->isValid('‡01231[Š'));\n\n        $barcode->useChecksum(false);\n        $this->assertTrue($barcode->isValid('012345'));\n        $this->assertTrue($barcode->isValid('ABCDEF'));\n        $this->assertFalse($barcode->isValid('01234Ê'));\n    }\n\n    /**\n     * Test if EAN-13 contains only numeric characters\n     *\n     * @group ZF-3297\n     */\n    public function testEan13ContainsOnlyNumeric()\n    {\n        $barcode = new Barcode('ean13');\n        $this->assertFalse($barcode->isValid('3RH1131-1BB40'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Barcode('code25');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new Barcode('code25');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/BetweenTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Between;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass BetweenTest extends TestCase\n{\n    public function providerBasic()\n    {\n        return [\n            'inclusive-int-valid-floor' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 1,\n            ],\n            'inclusive-int-valid-between' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 10,\n            ],\n            'inclusive-int-valid-ceiling' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 100,\n            ],\n            'inclusive-int-invaild-below' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 0,\n            ],\n            'inclusive-int-invalid-below-fractional' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 0.99,\n            ],\n            'inclusive-int-invalid-above-fractional' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 100.01,\n            ],\n            'inclusive-int-invalid-above' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 101,\n            ],\n            'exclusive-int-invalid-below' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 0,\n            ],\n            'exclusive-int-invalid-floor' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 1,\n            ],\n            'exclusive-int-invalid-ceiling' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 100,\n            ],\n            'exclusive-int-invalid-above' => [\n                'min' => 1,\n                'max' => 100,\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 101,\n            ],\n            'inclusive-string-valid-floor' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 'a',\n            ],\n            'inclusive-string-valid-between' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 'm',\n            ],\n            'inclusive-string-valid-ceiling' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => true,\n                'expected' => true,\n                'value' => 'z',\n            ],\n            'exclusive-string-invalid-out-of-range' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => false,\n                'expected' => false,\n                'value' => '!',\n            ],\n            'exclusive-string-invalid-floor' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 'a',\n            ],\n            'exclusive-string-invalid-ceiling' => [\n                'min' => 'a',\n                'max' => 'z',\n                'inclusive' => false,\n                'expected' => false,\n                'value' => 'z',\n            ],\n            'inclusive-int-invalid-string' => [\n                'min' => 0,\n                'max' => 99999999,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 'asdasd',\n            ],\n            'inclusive-int-invalid-char' => [\n                'min' => 0,\n                'max' => 99999999,\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 'q',\n            ],\n            'inclusive-string-invalid-zero' => [\n                'min' => 'a',\n                'max' => 'zzzzz',\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 0,\n            ],\n            'inclusive-string-invalid-non-zero' => [\n                'min' => 'a',\n                'max' => 'zzzzz',\n                'inclusive' => true,\n                'expected' => false,\n                'value' => 10,\n            ],\n        ];\n    }\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider providerBasic\n     * @param int|float|string $min\n     * @param int|float|string $max\n     * @param bool $inclusive\n     * @param bool $expected\n     * @param mixed $value\n     * @return void\n     */\n    public function testBasic($min, $max, $inclusive, $expected, $value)\n    {\n        $validator = new Between(['min' => $min, 'max' => $max, 'inclusive' => $inclusive]);\n\n        $this->assertSame(\n            $expected,\n            $validator->isValid($value),\n            'Failed value: ' . $value . ':' . implode(\"\\n\", $validator->getMessages())\n        );\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertEquals(1, $validator->getMin());\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertEquals(10, $validator->getMax());\n    }\n\n    /**\n     * Ensures that getInclusive() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetInclusive()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertEquals(true, $validator->getInclusive());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertAttributeEquals($validator->getOption('messageTemplates'), 'messageTemplates', $validator);\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertAttributeEquals($validator->getOption('messageVariables'), 'messageVariables', $validator);\n    }\n\n    /**\n     * @covers Zend\\Validator\\Between::__construct()\n     * @dataProvider constructBetweenValidatorInvalidDataProvider\n     *\n     * @param array $args\n     */\n    public function testMissingMinOrMax(array $args)\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage(\"Missing option: 'min' and 'max' have to be given\");\n\n        new Between($args);\n    }\n\n    public function constructBetweenValidatorInvalidDataProvider()\n    {\n        return [\n            'only-min'      => [['min' => 1]],\n            'only-max'      => [['max' => 5]],\n            'min-inclusive' => [['min' => 0, 'inclusive' => true]],\n            'max-inclusive' => [['max' => 5, 'inclusive' => true]],\n            'min-undefined' => [['min' => 0, 'foo' => 'bar']],\n            'max-undefined' => [['max' => 5, 'foo' => 'bar']],\n            'no-min-or-max' => [['bar' => 'foo', 'foo' => 'bar']],\n        ];\n    }\n\n    public function testConstructorCanAcceptInclusiveParameter()\n    {\n        $validator = new Between(1, 10, false);\n        $this->assertFalse($validator->getInclusive());\n    }\n\n    public function testConstructWithTraversableOptions()\n    {\n        $options = new \\ArrayObject(['min' => 1, 'max' => 10, 'inclusive' => false]);\n        $validator = new Between($options);\n\n        $this->assertTrue($validator->isValid(5));\n        $this->assertFalse($validator->isValid(10));\n    }\n\n    public function testStringValidatedAgainstNumericMinAndMaxIsInvalidAndReturnsAFailureMessage()\n    {\n        $validator = new Between(['min' => 1, 'max' => 10]);\n        $this->assertFalse($validator->isValid('a'));\n        $messages = $validator->getMessages();\n        $this->assertContains(\n            'The min (\\'1\\') and max (\\'10\\') values are numeric, but the input is not',\n            $messages\n        );\n    }\n\n    public function testNumericValidatedAgainstStringMinAndMaxIsInvalidAndReturnsAFailureMessage()\n    {\n        $validator = new Between(['min' => 'a', 'max' => 'z']);\n        $this->assertFalse($validator->isValid(10));\n        $messages = $validator->getMessages();\n        $this->assertContains(\n            'The min (\\'a\\') and max (\\'z\\') values are non-numeric strings, but the input is not a string',\n            $messages\n        );\n    }\n}\n"
  },
  {
    "path": "test/BitwiseTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Bitwise;\n\nclass BitwiseTest extends TestCase\n{\n    /**\n     * @var \\Zend\\Validator\\Bitwise\n     */\n    public $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Bitwise();\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::__construct()\n     * @dataProvider constructDataProvider\n     *\n     * @param array $args\n     * @param array $options\n     */\n    public function testConstruct(array $args, array $options)\n    {\n        $validator = new Bitwise($args);\n\n        $this->assertSame($options['control'], $validator->getControl());\n        $this->assertSame($options['operator'], $validator->getOperator());\n        $this->assertSame($options['strict'], $validator->getStrict());\n    }\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::__construct()\n     * @dataProvider constructDataProvider\n     *\n     * @param array $args\n     * @param array $options\n     */\n    public function testConstructWithTravesableOptions(array $args, array $options)\n    {\n        $validator = new Bitwise(\n            new \\ArrayObject($args)\n        );\n\n        $this->assertSame($options['control'], $validator->getControl());\n        $this->assertSame($options['operator'], $validator->getOperator());\n        $this->assertSame($options['strict'], $validator->getStrict());\n    }\n\n    public function constructDataProvider()\n    {\n        return [\n            [\n                [],\n                ['control' => null, 'operator' => null, 'strict' => false],\n            ],\n            [\n                ['control' => 0x1],\n                ['control' => 0x1, 'operator' => null, 'strict' => false],\n            ],\n            [\n                ['control' => 0x1, 'operator' => Bitwise::OP_AND],\n                ['control' => 0x1, 'operator' => Bitwise::OP_AND, 'strict' => false],\n            ],\n            [\n                ['control' => 0x1, 'operator' => Bitwise::OP_AND, 'strict' => true],\n                ['control' => 0x1, 'operator' => Bitwise::OP_AND, 'strict' => true],\n            ],\n        ];\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::isvalid()\n     */\n    public function testBitwiseAndNotStrict()\n    {\n        $controlSum = 0x7; // (0x1 | 0x2 | 0x4) === 0x7\n\n        $validator = new Bitwise();\n        $validator->setControl($controlSum);\n        $validator->setOperator(Bitwise::OP_AND);\n\n        $this->assertTrue($validator->isValid(0x1));\n        $this->assertTrue($validator->isValid(0x2));\n        $this->assertTrue($validator->isValid(0x4));\n        $this->assertFalse($validator->isValid(0x8));\n\n        $validator->isValid(0x8);\n        $messages = $validator->getMessages();\n        $this->assertArrayHasKey($validator::NOT_AND, $messages);\n        $this->assertSame(\"The input has no common bit set with '$controlSum'\", $messages[$validator::NOT_AND]);\n\n        $this->assertTrue($validator->isValid(0x1 | 0x2));\n        $this->assertTrue($validator->isValid(0x1 | 0x2 | 0x4));\n        $this->assertTrue($validator->isValid(0x1 | 0x8));\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::isvalid()\n     */\n    public function testBitwiseAndStrict()\n    {\n        $controlSum = 0x7; // (0x1 | 0x2 | 0x4) === 0x7\n\n        $validator = new Bitwise();\n        $validator->setControl($controlSum);\n        $validator->setOperator(Bitwise::OP_AND);\n        $validator->setStrict(true);\n\n        $this->assertTrue($validator->isValid(0x1));\n        $this->assertTrue($validator->isValid(0x2));\n        $this->assertTrue($validator->isValid(0x4));\n        $this->assertFalse($validator->isValid(0x8));\n\n        $validator->isValid(0x8);\n        $messages = $validator->getMessages();\n        $this->assertArrayHasKey($validator::NOT_AND_STRICT, $messages);\n        $this->assertSame(\n            \"The input doesn't have the same bits set as '$controlSum'\",\n            $messages[$validator::NOT_AND_STRICT]\n        );\n\n        $this->assertTrue($validator->isValid(0x1 | 0x2));\n        $this->assertTrue($validator->isValid(0x1 | 0x2 | 0x4));\n        $this->assertFalse($validator->isValid(0x1 | 0x8));\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::isvalid()\n     */\n    public function testBitwiseXor()\n    {\n        $controlSum = 0x5; // (0x1 | 0x4) === 0x5\n\n        $validator = new Bitwise();\n        $validator->setControl($controlSum);\n        $validator->setOperator(Bitwise::OP_XOR);\n\n        $this->assertTrue($validator->isValid(0x2));\n        $this->assertTrue($validator->isValid(0x8));\n        $this->assertTrue($validator->isValid(0x10));\n        $this->assertFalse($validator->isValid(0x1));\n        $this->assertFalse($validator->isValid(0x4));\n\n        $validator->isValid(0x4);\n        $messages = $validator->getMessages();\n        $this->assertArrayHasKey($validator::NOT_XOR, $messages);\n        $this->assertSame(\"The input has common bit set with '$controlSum'\", $messages[$validator::NOT_XOR]);\n\n        $this->assertTrue($validator->isValid(0x8 | 0x10));\n        $this->assertFalse($validator->isValid(0x1 | 0x4));\n        $this->assertFalse($validator->isValid(0x1 | 0x8));\n        $this->assertFalse($validator->isValid(0x4 | 0x8));\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::setOperator()\n     */\n    public function testSetOperator()\n    {\n        $validator = new Bitwise();\n\n        $validator->setOperator(Bitwise::OP_AND);\n        $this->assertSame(Bitwise::OP_AND, $validator->getOperator());\n\n        $validator->setOperator(Bitwise::OP_XOR);\n        $this->assertSame(Bitwise::OP_XOR, $validator->getOperator());\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\Bitwise::setStrict()\n     */\n    public function testSetStrict()\n    {\n        $validator = new Bitwise();\n\n        $this->assertFalse($validator->getStrict(), 'Strict false by default');\n\n        $validator->setStrict(false);\n        $this->assertFalse($validator->getStrict());\n\n        $validator->setStrict(true);\n        $this->assertTrue($validator->getStrict());\n\n        $validator = new Bitwise(0x1, Bitwise::OP_AND, false);\n        $this->assertFalse($validator->getStrict());\n\n        $validator = new Bitwise(0x1, Bitwise::OP_AND, true);\n        $this->assertTrue($validator->getStrict());\n    }\n\n    public function testConstructorCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $control  = 0x1;\n        $operator = Bitwise::OP_AND;\n        $strict   = true;\n\n        $validator = new Bitwise($control, $operator, $strict);\n\n        $this->assertSame($control, $validator->getControl());\n        $this->assertSame($operator, $validator->getOperator());\n        $this->assertSame($strict, $validator->getStrict());\n    }\n\n    public function testCanRetrieveControlValue()\n    {\n        $control   = 0x1;\n        $validator = new Bitwise($control, Bitwise::OP_AND, false);\n        $this->assertSame($control, $validator->getControl());\n    }\n\n    public function testCanRetrieveOperatorValue()\n    {\n        $operator  = Bitwise::OP_AND;\n        $validator = new Bitwise(0x1, $operator, false);\n        $this->assertSame($operator, $validator->getOperator());\n    }\n\n    public function testCanRetrieveStrictValue()\n    {\n        $strict    = true;\n        $validator = new Bitwise(0x1, Bitwise::OP_AND, $strict);\n        $this->assertSame($strict, $validator->getStrict());\n    }\n\n    public function testIsValidReturnsFalseWithInvalidOperator()\n    {\n        $validator      = new Bitwise(0x1, 'or', false);\n        $expectedResult = false;\n        $this->assertEquals($expectedResult, $validator->isValid(0x2));\n    }\n\n    public function testCanSetControlValue()\n    {\n        $validator = new Bitwise();\n        $control   = 0x2;\n        $validator->setControl($control);\n        $this->assertSame($control, $validator->getControl());\n    }\n}\n"
  },
  {
    "path": "test/CallbackTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Callback;\nuse ReflectionProperty;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass CallbackTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $valid = new Callback([$this, 'objectCallback']);\n        $this->assertTrue($valid->isValid('test'));\n    }\n\n    public function testStaticCallback()\n    {\n        $valid = new Callback(\n            [CallbackTest::class, 'staticCallback']\n        );\n        $this->assertTrue($valid->isValid('test'));\n    }\n\n    public function testSettingDefaultOptionsAfterwards()\n    {\n        $valid = new Callback([$this, 'objectCallback']);\n        $valid->setCallbackOptions('options');\n        $this->assertEquals(['options'], $valid->getCallbackOptions());\n        $this->assertTrue($valid->isValid('test'));\n    }\n\n    public function testSettingDefaultOptions()\n    {\n        $valid = new Callback(['callback' => [$this, 'objectCallback'], 'callbackOptions' => 'options']);\n        $this->assertEquals(['options'], $valid->getCallbackOptions());\n        $this->assertTrue($valid->isValid('test'));\n    }\n\n    public function testGettingCallback()\n    {\n        $valid = new Callback([$this, 'objectCallback']);\n        $this->assertEquals([$this, 'objectCallback'], $valid->getCallback());\n    }\n\n    public function testInvalidCallback()\n    {\n        $valid = new Callback([$this, 'objectCallback']);\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid callback given');\n        $valid->setCallback('invalidcallback');\n    }\n\n    public function testAddingValueOptions()\n    {\n        $valid = new Callback(['callback' => [$this, 'optionsCallback'], 'callbackOptions' => 'options']);\n        $this->assertEquals(['options'], $valid->getCallbackOptions());\n        $this->assertTrue($valid->isValid('test', 'something'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Callback([$this, 'objectCallback']);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testCanAcceptContextWithoutOptions()\n    {\n        $value     = 'bar';\n        $context   = ['foo' => 'bar', 'bar' => 'baz'];\n        $validator = new Callback(function ($v, $c) use ($value, $context) {\n            return (($value == $v) && ($context == $c));\n        });\n        $this->assertTrue($validator->isValid($value, $context));\n    }\n\n    public function testCanAcceptContextWithOptions()\n    {\n        $value     = 'bar';\n        $context   = ['foo' => 'bar', 'bar' => 'baz'];\n        $options   = ['baz' => 'bat'];\n        $validator = new Callback(function ($v, $c, $baz) use ($value, $context, $options) {\n            return (($value == $v) && ($context == $c) && ($options['baz'] == $baz));\n        });\n        $validator->setCallbackOptions($options);\n        $this->assertTrue($validator->isValid($value, $context));\n    }\n\n    public function objectCallback($value)\n    {\n        return true;\n    }\n\n    public static function staticCallback($value)\n    {\n        return true;\n    }\n\n    public function optionsCallback($value)\n    {\n        $args = func_get_args();\n        $this->assertContains('something', $args);\n        return $args;\n    }\n\n    public function testIsValidRaisesExceptionWhenNoCallbackPresent()\n    {\n        $validator = new Callback();\n\n        $r = new ReflectionProperty($validator, 'options');\n        $r->setAccessible(true);\n\n        $options = $r->getValue($validator);\n        $options['callback'] = [];\n\n        $r->setValue($validator, $options);\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('No callback given');\n        $validator->isValid('test');\n    }\n}\n"
  },
  {
    "path": "test/CreditCardTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Config;\nuse Zend\\Validator\\CreditCard;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass CreditCardTest extends TestCase\n{\n    public static function basicValues()\n    {\n        return [\n            ['4111111111111111', true],\n            ['5404000000000001', true],\n            ['374200000000004', true],\n            ['4444555566667777', false],\n            ['ABCDEF', false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicValues\n     */\n    public function testBasic($input, $expected)\n    {\n        $validator      = new CreditCard();\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new CreditCard();\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that get and setType works as expected\n     *\n     * @return void\n     */\n    public function testGetSetType()\n    {\n        $validator = new CreditCard();\n        $this->assertEquals(12, count($validator->getType()));\n\n        $validator->setType(CreditCard::MAESTRO);\n        $this->assertEquals([CreditCard::MAESTRO], $validator->getType());\n\n        $validator->setType(\n            [\n                CreditCard::AMERICAN_EXPRESS,\n                CreditCard::MAESTRO\n            ]\n        );\n        $this->assertEquals(\n            [\n                CreditCard::AMERICAN_EXPRESS,\n                CreditCard::MAESTRO\n            ],\n            $validator->getType()\n        );\n\n        $validator->addType(\n            CreditCard::MASTERCARD\n        );\n        $this->assertEquals(\n            [\n                CreditCard::AMERICAN_EXPRESS,\n                CreditCard::MAESTRO,\n                CreditCard::MASTERCARD\n            ],\n            $validator->getType()\n        );\n    }\n\n    public static function visaValues()\n    {\n        return [\n            ['4111111111111111', true],\n            ['5404000000000001', false],\n            ['374200000000004', false],\n            ['4444555566667777', false],\n            ['ABCDEF', false],\n        ];\n    }\n\n    /**\n     * Test specific provider\n     *\n     * @dataProvider visaValues\n     */\n    public function testProvider($input, $expected)\n    {\n        $validator      = new CreditCard(CreditCard::VISA);\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Test non string input\n     *\n     * @return void\n     */\n    public function testIsValidWithNonString()\n    {\n        $validator = new CreditCard(CreditCard::VISA);\n        $this->assertFalse($validator->isValid(['something']));\n    }\n\n    public static function serviceValues()\n    {\n        return [\n            ['4111111111111111', false],\n            ['5404000000000001', false],\n            ['374200000000004', false],\n            ['4444555566667777', false],\n            ['ABCDEF', false],\n        ];\n    }\n\n    /**\n     * Test service class with invalid validation\n     *\n     * @dataProvider serviceValues\n     */\n    public function testServiceClass($input, $expected)\n    {\n        $validator = new CreditCard();\n        $this->assertEquals(null, $validator->getService());\n        $validator->setService([CreditCardTest::class, 'staticCallback']);\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    public static function optionsValues()\n    {\n        return [\n            ['4111111111111111', false],\n            ['5404000000000001', false],\n            ['374200000000004', false],\n            ['4444555566667777', false],\n            ['ABCDEF', false],\n        ];\n    }\n\n    /**\n     * Test non string input\n     *\n     * @dataProvider optionsValues\n     */\n    public function testConstructionWithOptions($input, $expected)\n    {\n        $validator = new CreditCard(\n            [\n                'type' => CreditCard::VISA,\n                'service' => [CreditCardTest::class, 'staticCallback']\n            ]\n        );\n\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Data provider\n     *\n     * @return string[][]|bool[][]\n     */\n    public function jcbValues()\n    {\n        return [\n            ['3566003566003566', true],\n            ['3528000000000007', true],\n            ['3528000000000007', true],\n            ['3528000000000007', true],\n            ['3088185545477406', false],\n            ['3158854390756173', false],\n            ['3088936920428541', false],\n            ['213193692042852', true],\n            ['180012362524156', true],\n        ];\n    }\n\n    /**\n     * Test JCB number validity\n     *\n     * @dataProvider jcbValues\n     *\n     * @param string $input\n     * @param bool   $expected\n     *\n     * @group 6278\n     * @group 6927\n     */\n    public function testJcbCard($input, $expected)\n    {\n        $validator = new CreditCard(['type' => CreditCard::JCB]);\n\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Data provider\n     *\n     * @return string[][]|bool[][]\n     */\n    public function mastercardValues()\n    {\n        return [\n            ['4111111111111111', false],\n            ['5011642326344731', false],\n            ['5130982099822729', true],\n            ['2220993834549400', false],\n            ['2221006548643366', true],\n            ['2222007329134574', true],\n            ['2393923057923090', true],\n            ['2484350479254492', true],\n            ['2518224476613101', true],\n            ['2659969950495289', true],\n            ['2720992392889757', true],\n            ['2721008996056187', false],\n        ];\n    }\n\n    /**\n     * Test mastercard number validity\n     *\n     * @dataProvider mastercardValues\n     *\n     * @param string $input\n     * @param bool   $expected\n     */\n    public function testMastercardCard($input, $expected)\n    {\n        $validator = new CreditCard(['type' => CreditCard::MASTERCARD]);\n\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Data provider\n     *\n     * @return string[][]|bool[][]\n     */\n    public function mirValues()\n    {\n        return [\n            ['3011111111111000', false],\n            ['2031343323344731', false],\n            ['2200312032822721', true],\n            ['2209993834549400', false],\n            ['2204001882200999', true],\n            ['2202000312124573', true],\n            ['2203921957923012', true],\n            ['2204150479254495', true],\n            ['2201123406612104', true],\n            ['2900008996056', false],\n            ['2201969950494', true],\n            ['2201342387927', true],\n            ['2205969950494', false],\n        ];\n    }\n\n    /**\n     * Test mir card number validity\n     *\n     * @dataProvider mirValues\n     *\n     * @param string $input\n     * @param bool   $expected\n     */\n    public function testMirCard($input, $expected)\n    {\n        $validator = new CreditCard(['type' => CreditCard::MIR]);\n\n        $this->assertEquals($expected, $validator->isValid($input));\n    }\n\n    /**\n     * Test an invalid service class\n     *\n     * @return void\n     */\n    public function testInvalidServiceClass()\n    {\n        $validator = new CreditCard();\n        $this->assertEquals(null, $validator->getService());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid callback given');\n        $validator->setService([CreditCardTest::class, 'nocallback']);\n    }\n\n    /**\n     * Test a config object\n     *\n     * @return void\n     */\n    public function testConfigObject()\n    {\n        $options = ['type' => 'Visa'];\n        $config = new Config\\Config($options, false);\n\n        $validator = new CreditCard($config);\n        $this->assertEquals(['Visa'], $validator->getType());\n    }\n\n    /**\n     * Test optional parameters with config object\n     *\n     * @return void\n     */\n    public function testOptionalConstructorParameterByConfigObject()\n    {\n        $config = new Config\\Config(\n            ['type' => 'Visa', 'service' => [CreditCardTest::class, 'staticCallback']]\n        );\n\n        $validator = new CreditCard($config);\n        $this->assertEquals(['Visa'], $validator->getType());\n        $this->assertEquals([CreditCardTest::class, 'staticCallback'], $validator->getService());\n    }\n\n    /**\n     * Test optional constructor parameters\n     *\n     * @return void\n     */\n    public function testOptionalConstructorParameter()\n    {\n        $validator = new CreditCard('Visa', [CreditCardTest::class, 'staticCallback']);\n        $this->assertEquals(['Visa'], $validator->getType());\n        $this->assertEquals([CreditCardTest::class, 'staticCallback'], $validator->getService());\n    }\n\n    /**\n     * @group ZF-9477\n     */\n    public function testMultiInstitute()\n    {\n        $validator      = new CreditCard(['type' => CreditCard::MASTERCARD]);\n        $this->assertFalse($validator->isValid('4111111111111111'));\n        $message = $validator->getMessages();\n        $this->assertContains('not from an allowed institute', current($message));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new CreditCard();\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    /**\n     * @see https://github.com/zendframework/zend-validator/pull/202\n     */\n    public function testValidatorAllowsExtensionsToDefineAdditionalTypesViaConstants()\n    {\n        $validator = new TestAsset\\CreditCardValidatorExtension();\n        $this->assertSame($validator, $validator->addType('test_type'));\n        $this->assertContains(TestAsset\\CreditCardValidatorExtension::TEST_TYPE, $validator->getType());\n    }\n\n    public static function staticCallback($value)\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "test/CsrfTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Session\\Config\\StandardConfig;\nuse Zend\\Session\\Container;\nuse Zend\\Validator\\Csrf;\nuse Zend\\Session\\Storage\\ArrayStorage;\n\n/**\n * Zend\\Csrf\n *\n * @group      Zend_Validator\n */\nclass CsrfTest extends TestCase\n{\n    /** @var Csrf */\n    public $validator;\n\n    /** @var TestAsset\\SessionManager */\n    public $sessionManager;\n\n    public function setUp()\n    {\n        // Setup session handling\n        $_SESSION = [];\n        $sessionConfig = new StandardConfig([\n            'storage' => ArrayStorage::class,\n        ]);\n        $sessionManager       = new TestAsset\\SessionManager($sessionConfig);\n        $this->sessionManager = $sessionManager;\n        Container::setDefaultManager($sessionManager);\n\n        $this->validator = new Csrf;\n    }\n\n    public function tearDown()\n    {\n        if (! class_exists(Container::class)) {\n            return;\n        }\n\n        $_SESSION = [];\n        Container::setDefaultManager(null);\n    }\n\n    public function testSaltHasDefaultValueIfNotSet()\n    {\n        $this->assertEquals('salt', $this->validator->getSalt());\n    }\n\n    public function testSaltIsMutable()\n    {\n        $this->validator->setSalt('pepper');\n        $this->assertEquals('pepper', $this->validator->getSalt());\n    }\n\n    public function testSessionContainerIsLazyLoadedIfNotSet()\n    {\n        $container = $this->validator->getSession();\n        $this->assertInstanceOf(Container::class, $container);\n    }\n\n    public function testSessionContainerIsMutable()\n    {\n        $container = new Container('foo', $this->sessionManager);\n        $this->validator->setSession($container);\n        $this->assertSame($container, $this->validator->getSession());\n    }\n\n    public function testNameHasDefaultValue()\n    {\n        $this->assertEquals('csrf', $this->validator->getName());\n    }\n\n    public function testNameIsMutable()\n    {\n        $this->validator->setName('foo');\n        $this->assertEquals('foo', $this->validator->getName());\n    }\n\n    public function testTimeoutHasDefaultValue()\n    {\n        $this->assertEquals(300, $this->validator->getTimeout());\n    }\n\n    public function timeoutValuesDataProvider()\n    {\n        return [\n            //    timeout  expected\n            [600,     600],\n            [null,    null],\n            [\"0\",     0],\n            [\"100\",   100],\n        ];\n    }\n\n    /**\n     * @dataProvider timeoutValuesDataProvider\n     */\n    public function testTimeoutIsMutable($timeout, $expected)\n    {\n        $this->validator->setTimeout($timeout);\n        $this->assertEquals($expected, $this->validator->getTimeout());\n    }\n\n    public function testAllOptionsMayBeSetViaConstructor()\n    {\n        $container = new Container('foo', $this->sessionManager);\n        $options   = [\n            'name'    => 'hash',\n            'salt'    => 'hashful',\n            'session' => $container,\n            'timeout' => 600,\n        ];\n        $validator = new Csrf($options);\n        foreach ($options as $key => $value) {\n            if ($key == 'session') {\n                $this->assertSame($container, $value);\n                continue;\n            }\n            $method = 'get' . $key;\n            $this->assertEquals($value, $validator->$method());\n        }\n    }\n\n    public function testHashIsGeneratedOnFirstRetrieval()\n    {\n        $hash = $this->validator->getHash();\n        $this->assertNotEmpty($hash);\n        $test = $this->validator->getHash();\n        $this->assertEquals($hash, $test);\n    }\n\n    public function testSessionNameIsDerivedFromClassSaltAndName()\n    {\n        $class = get_class($this->validator);\n        $class = str_replace('\\\\', '_', $class);\n        $expected = sprintf('%s_%s_%s', $class, $this->validator->getSalt(), $this->validator->getName());\n        $this->assertEquals($expected, $this->validator->getSessionName());\n    }\n\n    public function testSessionNameRemainsValidForElementBelongingToFieldset()\n    {\n        $this->validator->setName('fieldset[csrf]');\n        $class = get_class($this->validator);\n        $class = str_replace('\\\\', '_', $class);\n        $name = strtr($this->validator->getName(), ['[' => '_', ']' => '']);\n        $expected = sprintf('%s_%s_%s', $class, $this->validator->getSalt(), $name);\n        $this->assertEquals($expected, $this->validator->getSessionName());\n    }\n\n    public function testIsValidReturnsFalseWhenValueDoesNotMatchHash()\n    {\n        $this->assertFalse($this->validator->isValid('foo'));\n    }\n\n    public function testValidationErrorMatchesNotSameConstantAndRelatedMessage()\n    {\n        $this->validator->isValid('foo');\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey(Csrf::NOT_SAME, $messages);\n        $this->assertEquals(\"The form submitted did not originate from the expected site\", $messages[Csrf::NOT_SAME]);\n    }\n\n    public function testIsValidReturnsTrueWhenValueMatchesHash()\n    {\n        $hash = $this->validator->getHash();\n        $this->assertTrue($this->validator->isValid($hash));\n    }\n\n    public function testSessionContainerContainsHashAfterHashHasBeenGenerated()\n    {\n        $hash        = $this->validator->getHash();\n        $container   = $this->validator->getSession();\n        $test        = $container->hash; // Doing this, as expiration hops are 1; have to grab on first access\n        $this->assertEquals($hash, $test);\n    }\n\n    public function testSettingNewSessionContainerSetsHashInNewContainer()\n    {\n        $hash        = $this->validator->getHash();\n        $container   = new Container('foo', $this->sessionManager);\n        $this->validator->setSession($container);\n        $test        = $container->hash; // Doing this, as expiration hops are 1; have to grab on first access\n        $this->assertEquals($hash, $test);\n    }\n\n    public function testMultipleValidatorsSharingContainerGenerateDifferentHashes()\n    {\n        $validatorOne = new Csrf();\n        $validatorTwo = new Csrf();\n\n        $containerOne = $validatorOne->getSession();\n        $containerTwo = $validatorOne->getSession();\n\n        $this->assertSame($containerOne, $containerTwo);\n\n        $hashOne = $validatorOne->getHash();\n        $hashTwo = $validatorTwo->getHash();\n        $this->assertNotEquals($hashOne, $hashTwo);\n    }\n\n    public function testCanValidateAnyHashWithinTheSameContainer()\n    {\n        $validatorOne = new Csrf();\n        $validatorTwo = new Csrf();\n\n        $hashOne = $validatorOne->getHash();\n        $hashTwo = $validatorTwo->getHash();\n\n        $this->assertTrue($validatorOne->isValid($hashOne));\n        $this->assertTrue($validatorOne->isValid($hashTwo));\n        $this->assertTrue($validatorTwo->isValid($hashOne));\n        $this->assertTrue($validatorTwo->isValid($hashTwo));\n    }\n\n    public function testCannotValidateHashesOfOtherContainers()\n    {\n        $validatorOne = new Csrf();\n        $validatorTwo = new Csrf(['name' => 'foo']);\n\n        $containerOne = $validatorOne->getSession();\n        $containerTwo = $validatorTwo->getSession();\n\n        $this->assertNotSame($containerOne, $containerTwo);\n\n        $hashOne = $validatorOne->getHash();\n        $hashTwo = $validatorTwo->getHash();\n\n        $this->assertTrue($validatorOne->isValid($hashOne));\n        $this->assertFalse($validatorOne->isValid($hashTwo));\n        $this->assertFalse($validatorTwo->isValid($hashOne));\n        $this->assertTrue($validatorTwo->isValid($hashTwo));\n    }\n\n    public function testCannotReValidateAnExpiredHash()\n    {\n        $hash = $this->validator->getHash();\n\n        $this->assertTrue($this->validator->isValid($hash));\n\n        $this->sessionManager->getStorage()->setMetadata(\n            $this->validator->getSession()->getName(),\n            ['EXPIRE' => $_SERVER['REQUEST_TIME'] - 18600]\n        );\n\n        $this->assertFalse($this->validator->isValid($hash));\n    }\n\n    public function testCanValidateHasheWithoutId()\n    {\n        $method = new \\ReflectionMethod(get_class($this->validator), 'getTokenFromHash');\n        $method->setAccessible(true);\n\n        $hash = $this->validator->getHash();\n        $bareToken = $method->invoke($this->validator, $hash);\n\n        $this->assertTrue($this->validator->isValid($bareToken));\n    }\n\n    public function testCanRejectArrayValues()\n    {\n        $this->assertFalse($this->validator->isValid([]));\n    }\n\n    public function fakeValuesDataProvider()\n    {\n        return [\n            [''],\n            ['-fakeTokenId'],\n            ['fakeTokenId-fakeTokenId'],\n            ['fakeTokenId-'],\n            ['fakeTokenId'],\n            [md5(uniqid()) . '-'],\n            [md5(uniqid()) . '-' . md5(uniqid())],\n            ['-' . md5(uniqid())],\n        ];\n    }\n\n    /**\n     * @dataProvider fakeValuesDataProvider\n     */\n    public function testWithFakeValues($value)\n    {\n        $validator = new Csrf();\n        $this->assertFalse($validator->isValid($value));\n    }\n}\n"
  },
  {
    "path": "test/DateStepTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator;\nuse DateTime;\nuse DateInterval;\nuse DateTimeZone;\nuse ReflectionMethod;\n\n/**\n * @group      Zend_Validator\n */\nclass DateStepTest extends TestCase\n{\n    public function stepTestsDataProvider()\n    {\n        $data = [\n            //    interval format            baseValue               value                  isValid\n            ['PT1S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:00:00Z', true ],\n            ['PT1S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true ],\n            ['PT1S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:00:02Z', true ],\n            ['PT2S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:00:01Z', false],\n            ['PT2S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:00:16Z', true ],\n            ['PT2S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true ],\n            // minutes\n            ['PT1M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true ],\n            ['PT1M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false],\n            ['PT1M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:02:00Z', true ],\n            ['PT2M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:01:00Z', false],\n            ['PT2M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T00:16:00Z', true ],\n            ['PT2M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true ],\n            ['PT1M', 'H:i:s',           '00:00:00',             '12:34:00',             true ],\n            ['PT2M', 'H:i:s',           '00:00:00',             '12:34:00',             true ],\n            ['PT2M', 'H:i:s',           '00:00:00',             '12:35:00',             false],\n            // hours\n            ['PT1H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true ],\n            ['PT1H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false],\n            ['PT1H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T02:00:00Z', true ],\n            ['PT2H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T01:00:00Z', false],\n            ['PT2H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-01T16:00:00Z', true ],\n            ['PT2H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true ],\n            // days\n            ['P1D',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true ],\n            ['P1D',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false],\n\n            ['P1D',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '2014-08-12T00:00:00Z', true],\n\n            ['P2D',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-02T00:00:00Z', false],\n            ['P2D',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-15T00:00:00Z', true ],\n            ['P2D',  DateTime::ISO8601, '1971-01-01T00:00:00Z', '1973-01-01T00:00:00Z', false],\n            ['P2D',  DateTime::ISO8601, '2000-01-01T00:00:00Z', '2001-01-01T00:00:00Z', true ], // leap year\n            // weeks\n            ['P1W',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-01-29T00:00:00Z', true ],\n            // months\n            ['P1M',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true ],\n            ['P1M',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false],\n            ['P2M',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-02-01T00:00:00Z', false],\n            ['P2M',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1971-05-01T00:00:00Z', true ],\n            ['P1M',  'Y-m',             '1970-01',              '1970-10',              true ],\n            ['P2M',  '!Y-m',            '1970-01',              '1970-11',              true ],\n            ['P2M',  'Y-m',             '1970-01',              '1970-10',              false],\n            // years\n            ['P1Y',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true ],\n            ['P1Y',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false],\n            ['P2Y',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1971-01-01T00:00:00Z', false],\n            ['P2Y',  DateTime::ISO8601, '1970-01-01T00:00:00Z', '1976-01-01T00:00:00Z', true ],\n            // complex\n            ['P2M2DT12H', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-03T12:00:00Z', true ],\n            ['P2M2DT12M', DateTime::ISO8601, '1970-01-01T00:00:00Z', '1970-03-03T12:00:00Z', false],\n            // long interval\n            ['PT1M20S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '2020-09-13T12:26:40Z', true], // 20,000,000 steps\n            ['PT1M20S', DateTime::ISO8601, '1970-01-01T00:00:00Z', '2020-09-13T12:26:41Z', false],\n\n            ['P2W',  'Y-\\WW',           '1970-W01',             '1973-W16',             true ],\n            ['P2W',  'Y-\\WW',           '1970-W01',             '1973-W17',             false],\n        ];\n\n        return $data;\n    }\n\n    /**\n     * @dataProvider stepTestsDataProvider\n     */\n    public function testDateStepValidation($interval, $format, $baseValue, $value, $isValid)\n    {\n        $validator = new Validator\\DateStep([\n            'format'       => $format,\n            'baseValue'    => $baseValue,\n            'step' => new DateInterval($interval),\n        ]);\n\n        $this->assertEquals($isValid, $validator->isValid($value));\n    }\n\n    public function testGetMessagesReturnsDefaultValue()\n    {\n        $validator = new Validator\\DateStep();\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator  = new Validator\\DateStep([]);\n        $this->assertObjectHasAttribute('messageTemplates', $validator);\n        $this->assertAttributeEquals($validator->getOption('messageTemplates'), 'messageTemplates', $validator);\n    }\n\n    public function testStepError()\n    {\n        $validator = new Validator\\DateStep([\n            'format'       => 'Y-m-d',\n            'baseValue'    => '2012-01-23',\n            'step' => new DateInterval(\"P10D\"),\n        ]);\n\n        $this->assertFalse($validator->isValid('2012-02-23'));\n    }\n\n    public function moscowWinterTimeDataProvider()\n    {\n        // dates before during and after Moscow's wintertime\n        return [\n            ['26-03-1999'],\n            ['26-03-2011'],\n            ['27-03-2011'],\n            ['26-03-2015'],\n        ];\n    }\n\n    /**\n     * @dataProvider moscowWinterTimeDataProvider\n     */\n    public function testMoscowWinterTime($dateToValidate)\n    {\n        $validator = new Validator\\DateStep([\n            'format' => 'd-m-Y',\n            'baseValue' => date('d-m-Y', 0),\n            'step' => new DateInterval(\"P1D\"),\n            'timezone' => new DateTimeZone('Europe/Moscow'),\n        ]);\n\n        $this->assertTrue($validator->isValid($dateToValidate));\n    }\n\n    public function testCanSetBaseValue()\n    {\n        $validator = new Validator\\DateStep();\n\n        $newBaseValue = '2013-01-23';\n        $validator->setBaseValue($newBaseValue);\n\n        $retrievedBaseValue = $validator->getBaseValue();\n\n        $this->assertSame($newBaseValue, $retrievedBaseValue);\n    }\n\n    public function testCanRetrieveTimezone()\n    {\n        $validator = new Validator\\DateStep();\n\n        $newTimezone = new DateTimeZone(\"Europe/Vienna\");\n        $validator->setTimezone($newTimezone);\n\n        $retrievedTimezone = $validator->getTimezone();\n\n        $this->assertSame($newTimezone, $retrievedTimezone);\n    }\n\n    public function testCanProvideOptionsToConstructorAsDiscreteArguments()\n    {\n        $baseValue = '2012-01-23';\n        $step      = new DateInterval(\"P1D\");\n        $format    = 'd-m-Y';\n        $timezone  = new DateTimeZone(\"Europe/Vienna\");\n\n        $validator = new Validator\\DateStep($baseValue, $step, $format, $timezone);\n\n        $retrievedBaseValue = $validator->getBaseValue();\n        $retrievedStep      = $validator->getStep();\n        $retrievedFormat    = $validator->getFormat();\n        $retrievedTimezone  = $validator->getTimezone();\n\n        $this->assertSame($baseValue, $retrievedBaseValue);\n        $this->assertSame($step, $retrievedStep);\n        $this->assertSame($format, $retrievedFormat);\n        $this->assertSame($timezone, $retrievedTimezone);\n    }\n\n    public function testConvertStringDoesNotRaiseErrorOnInvalidValue()\n    {\n        $validator = new Validator\\DateStep([\n            'format'    => 'Y-m-d',\n            'baseValue' => '2012-01-23',\n            'step'      => new DateInterval(\"P10D\"),\n        ]);\n\n        $r = new ReflectionMethod($validator, 'convertString');\n        $r->setAccessible(true);\n\n        $invalidValue = '20-20-20';\n\n        // Verify that the value returns false for an invalid value\n        $this->assertFalse($r->invoke($validator, $invalidValue, false));\n\n        // Verify that no message was set.\n        $this->assertEquals([], $validator->getMessages());\n    }\n}\n"
  },
  {
    "path": "test/DateTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2019 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse DateTime;\nuse DateTimeImmutable;\nuse PHPUnit\\Framework\\TestCase;\nuse stdClass;\nuse Zend\\Validator;\n\n/**\n * @group      Zend_Validator\n */\nclass DateTest extends TestCase\n{\n    /**\n     * @var Validator\\Date\n     */\n    protected $validator;\n\n    /**\n     * Creates a new Zend\\Validator\\Date object for each test method\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        $this->validator = new Validator\\Date();\n    }\n\n    public function testSetFormatIgnoresNull()\n    {\n        $this->validator->setFormat(null);\n        $this->assertEquals(Validator\\Date::FORMAT_DEFAULT, $this->validator->getFormat());\n    }\n\n    public function datesDataProvider()\n    {\n        return [\n            // date                     format             isValid   isValid Strict\n            ['2007-01-01',              null,              true,     true],\n            ['2007-02-28',              null,              true,     true],\n            ['2007-02-29',              null,              false,    false],\n            ['2008-02-29',              null,              true,     true],\n            ['2007-02-30',              null,              false,    false],\n            ['2007-02-99',              null,              false,    false],\n            ['2007-02-99',              'Y-m-d',           false,    false],\n            ['9999-99-99',              null,              false,    false],\n            ['9999-99-99',              'Y-m-d',           false,    false],\n            ['Jan 1 2007',              null,              false,    false],\n            ['Jan 1 2007',              'M j Y',           true,     true],\n            ['asdasda',                 null,              false,    false],\n            ['sdgsdg',                  null,              false,    false],\n            ['2007-01-01something',     null,              false,    false],\n            ['something2007-01-01',     null,              false,    false],\n            ['10.01.2008',              'd.m.Y',           true,     true],\n            ['01 2010',                 'm Y',             true,     true],\n            ['2008/10/22',              'd/m/Y',           false,    false],\n            ['22/10/08',                'd/m/y',           true,     true],\n            ['22/10',                   'd/m/Y',           false,    false],\n            // time\n            ['2007-01-01T12:02:55Z',    DateTime::ISO8601, true,     false],\n            ['2007-01-01T12:02:55+0000', DateTime::ISO8601, true,    true],\n            ['12:02:55',                'H:i:s',           true,     true],\n            ['25:02:55',                'H:i:s',           false,    false],\n            // int\n            [0,                         null,              true,     false],\n            [6,                         'd',               true,     false],\n            ['6',                       'd',               true,     false],\n            ['06',                      'd',               true,     true],\n            [123,                       null,              true,     false],\n            [1340677235,                null,              true,     false],\n            [1340677235,                'U',               true,     false],\n            ['1340677235',              'U',               true,     true],\n            // 32bit version of php will convert this to double\n            [999999999999,              null,              true,     false],\n            // double\n            [12.12,                     null,              false,    false],\n            // array\n            [['2012', '06', '25'],      null,              true,     false],\n            // 0012-06-25 is a valid date, if you want 2012, use 'y' instead of 'Y'\n            [['12', '06', '25'],        null,              true,     false],\n            [['2012', '06', '33'],      null,              false,    false],\n            [[1 => 1],                  null,              false,    false],\n            // DateTime\n            [new DateTime(),            null,              true,     false],\n            // invalid obj\n            [new stdClass(),            null,              false,    false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider datesDataProvider\n     */\n    public function testBasic($input, $format, $result)\n    {\n        $this->validator->setFormat($format);\n        $this->assertEquals($result, $this->validator->isValid($input));\n    }\n\n    /**\n     * @dataProvider datesDataProvider\n     *\n     * @param mixed $input\n     */\n    public function testBasicStrictMode($input, ?string $format, bool $result, bool $resultStrict) : void\n    {\n        $this->validator->setStrict(true);\n        $this->validator->setFormat($format);\n        $this->assertSame($resultStrict, $this->validator->isValid($input));\n    }\n\n    public function testDateTimeImmutable()\n    {\n        $this->assertTrue($this->validator->isValid(new DateTimeImmutable()));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures that the validator can handle different manual dateformats\n     *\n     * @group  ZF-2003\n     * @return void\n     */\n    public function testUseManualFormat()\n    {\n        $this->assertTrue(\n            $this->validator->setFormat('d.m.Y')->isValid('10.01.2008'),\n            var_export(date_get_last_errors(), 1)\n        );\n        $this->assertEquals('d.m.Y', $this->validator->getFormat());\n\n        $this->assertTrue($this->validator->setFormat('m Y')->isValid('01 2010'));\n        $this->assertFalse($this->validator->setFormat('d/m/Y')->isValid('2008/10/22'));\n        $this->assertTrue($this->validator->setFormat('d/m/Y')->isValid('22/10/08'));\n        $this->assertFalse($this->validator->setFormat('d/m/Y')->isValid('22/10'));\n        // Omitting the following assertion, as it varies from 5.3.3 to 5.3.11,\n        // and there is no indication in the PHP changelog as to when or why it\n        // may have changed. Leaving for posterity, to indicate original expectation.\n        // $this->assertFalse($this->validator->setFormat('s')->isValid(0));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function testConstructorWithFormatParameter()\n    {\n        $format = 'd/m/Y';\n        $validator = new Validator\\Date($format);\n\n        $this->assertEquals($format, $validator->getFormat());\n    }\n}\n"
  },
  {
    "path": "test/Db/AbstractDbTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Db;\n\nuse PHPUnit\\Framework\\TestCase;\nuse ZendTest\\Validator\\Db\\TestAsset\\ConcreteDbValidator;\nuse Zend\\Db\\Adapter\\AdapterAwareInterface;\nuse Zend\\Db\\Adapter\\Adapter;\nuse Zend\\Db\\Sql\\Select;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass AbstractDbTest extends TestCase\n{\n\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new ConcreteDbValidator([\n            'table' => 'table',\n            'field' => 'field',\n            'schema' => 'schema',\n        ]);\n    }\n\n    public function testConstructorWithNoTableAndSchemaKey()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Table or Schema option missing!');\n        $this->validator = new ConcreteDbValidator([\n            'field' => 'field',\n        ]);\n    }\n\n    public function testConstructorWithNoFieldKey()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Field option missing!');\n        $validator = new ConcreteDbValidator([\n            'schema' => 'schema',\n            'table' => 'table',\n        ]);\n    }\n\n    public function testSetSelect()\n    {\n        $select = new Select();\n        $this->validator->setSelect($select);\n\n        $this->assertSame($select, $this->validator->getSelect());\n    }\n\n    public function testGetSchema()\n    {\n        $schema = 'test_db';\n        $this->validator->setSchema($schema);\n\n        $this->assertEquals($schema, $this->validator->getSchema());\n    }\n\n    public function testGetTable()\n    {\n        $table = 'test_table';\n        $this->validator->setTable($table);\n\n        $this->assertEquals($table, $this->validator->getTable());\n    }\n\n    public function testGetField()\n    {\n        $field = 'test_field';\n        $this->validator->setField($field);\n\n        $this->assertEquals($field, $this->validator->getField());\n    }\n\n    public function testGetExclude()\n    {\n        $field = 'test_field';\n        $this->validator->setField($field);\n\n        $this->assertEquals($field, $this->validator->getField());\n    }\n\n    /**\n     * @group #46\n     */\n    public function testImplementationsAreDbAdapterAware()\n    {\n        $this->assertInstanceOf(AdapterAwareInterface::class, $this->validator);\n    }\n\n    /**\n     * @group #46\n     */\n    public function testSetAdapterIsEquivalentToSetDbAdapter()\n    {\n        $adapterFirst = $this->prophesize(Adapter::class)->reveal();\n        $adapterSecond = $this->prophesize(Adapter::class)->reveal();\n\n        $this->validator->setAdapter($adapterFirst);\n        $this->assertAttributeSame($adapterFirst, 'adapter', $this->validator);\n\n        $this->validator->setDbAdapter($adapterSecond);\n        $this->assertAttributeSame($adapterSecond, 'adapter', $this->validator);\n    }\n}\n"
  },
  {
    "path": "test/Db/NoRecordExistsTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Db;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Db\\NoRecordExists;\nuse Zend\\Db\\Adapter\\ParameterContainer;\nuse ArrayObject;\nuse Zend\\Validator\\Exception\\RuntimeException;\nuse Zend\\Db\\Adapter\\Driver\\ConnectionInterface;\nuse Zend\\Db\\Adapter\\Driver\\ResultInterface;\nuse Zend\\Db\\Adapter\\Driver\\StatementInterface;\nuse Zend\\Db\\Adapter\\Driver\\DriverInterface;\nuse Zend\\Db\\Adapter\\Adapter;\n\n/**\n * @group      Zend_Validator\n */\nclass NoRecordExistsTest extends TestCase\n{\n    /**\n     * Return a Mock object for a Db result with rows\n     *\n     * @return \\Zend\\Db\\Adapter\\Adapter\n     */\n    protected function getMockHasResult()\n    {\n        // mock the adapter, driver, and parts\n        $mockConnection = $this->createMock(ConnectionInterface::class);\n\n        // Mock has result\n        $mockHasResultRow      = new ArrayObject();\n        $mockHasResultRow->one = 'one';\n\n        $mockHasResult = $this->createMock(ResultInterface::class);\n        $mockHasResult->expects($this->any())\n            ->method('current')\n            ->will($this->returnValue($mockHasResultRow));\n\n        $mockHasResultStatement = $this->createMock(StatementInterface::class);\n        $mockHasResultStatement->expects($this->any())\n            ->method('execute')\n            ->will($this->returnValue($mockHasResult));\n\n        $mockHasResultStatement->expects($this->any())\n            ->method('getParameterContainer')\n            ->will($this->returnValue(new ParameterContainer()));\n\n        $mockHasResultDriver = $this->createMock(DriverInterface::class);\n        $mockHasResultDriver->expects($this->any())\n            ->method('createStatement')\n            ->will($this->returnValue($mockHasResultStatement));\n        $mockHasResultDriver->expects($this->any())\n            ->method('getConnection')\n            ->will($this->returnValue($mockConnection));\n\n        return $this->getMockBuilder(Adapter::class)\n            ->setMethods(null)\n            ->setConstructorArgs([$mockHasResultDriver])\n            ->getMock();\n    }\n\n    /**\n     * Return a Mock object for a Db result without rows\n     *\n     * @return \\Zend\\Db\\Adapter\\Adapter\n     */\n    protected function getMockNoResult()\n    {\n        // mock the adapter, driver, and parts\n        $mockConnection = $this->createMock(ConnectionInterface::class);\n\n        $mockNoResult = $this->createMock(ResultInterface::class);\n        $mockNoResult->expects($this->any())\n            ->method('current')\n            ->will($this->returnValue(null));\n\n        $mockNoResultStatement = $this->createMock(StatementInterface::class);\n        $mockNoResultStatement->expects($this->any())\n            ->method('execute')\n            ->will($this->returnValue($mockNoResult));\n\n        $mockNoResultStatement->expects($this->any())\n            ->method('getParameterContainer')\n            ->will($this->returnValue(new ParameterContainer()));\n\n        $mockNoResultDriver = $this->createMock(DriverInterface::class);\n        $mockNoResultDriver->expects($this->any())\n            ->method('createStatement')\n            ->will($this->returnValue($mockNoResultStatement));\n        $mockNoResultDriver->expects($this->any())\n            ->method('getConnection')\n            ->will($this->returnValue($mockConnection));\n\n        return $this->getMockBuilder(Adapter::class)\n            ->setMethods(null)\n            ->setConstructorArgs([$mockNoResultDriver])\n            ->getMock();\n    }\n\n    /**\n     * Test basic function of RecordExists (no exclusion)\n     *\n     * @return void\n     */\n    public function testBasicFindsRecord()\n    {\n        $validator = new NoRecordExists('users', 'field1', null, $this->getMockHasResult());\n        $this->assertFalse($validator->isValid('value1'));\n    }\n\n    /**\n     * Test basic function of RecordExists (no exclusion)\n     *\n     * @return void\n     */\n    public function testBasicFindsNoRecord()\n    {\n        $validator = new NoRecordExists('users', 'field1', null, $this->getMockNoResult());\n        $this->assertTrue($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * Test the exclusion function\n     *\n     * @return void\n     */\n    public function testExcludeWithArray()\n    {\n        $validator = new NoRecordExists(\n            'users',\n            'field1',\n            ['field' => 'id', 'value' => 1],\n            $this->getMockHasResult()\n        );\n        $this->assertFalse($validator->isValid('value3'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with an array\n     *\n     * @return void\n     */\n    public function testExcludeWithArrayNoRecord()\n    {\n        $validator = new NoRecordExists(\n            'users',\n            'field1',\n            ['field' => 'id', 'value' => 1],\n            $this->getMockNoResult()\n        );\n        $this->assertTrue($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with a string\n     *\n     * @return void\n     */\n    public function testExcludeWithString()\n    {\n        $validator = new NoRecordExists('users', 'field1', 'id != 1', $this->getMockHasResult());\n        $this->assertFalse($validator->isValid('value3'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with a string\n     *\n     * @return void\n     */\n    public function testExcludeWithStringNoRecord()\n    {\n        $validator = new NoRecordExists('users', 'field1', 'id != 1', $this->getMockNoResult());\n        $this->assertTrue($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * Test that the class throws an exception if no adapter is provided\n     * and no default is set.\n     *\n     * @return void\n     */\n    public function testThrowsExceptionWithNoAdapter()\n    {\n        $validator = new NoRecordExists('users', 'field1', 'id != 1');\n        $this->expectException(RuntimeException::class);\n        $this->expectExceptionMessage('No database adapter present');\n        $validator->isValid('nosuchvalue');\n    }\n\n    /**\n     * Test that schemas are supported and run without error\n     *\n     * @return void\n     */\n    public function testWithSchema()\n    {\n        $validator = new NoRecordExists([\n            'table' => 'users',\n            'schema' => 'my'\n        ], 'field1', null, $this->getMockHasResult());\n        $this->assertFalse($validator->isValid('value1'));\n    }\n\n    /**\n     * Test that schemas are supported and run without error\n     *\n     * @return void\n     */\n    public function testWithSchemaNoResult()\n    {\n        $validator = new NoRecordExists([\n            'table' => 'users',\n            'schema' => 'my'\n        ], 'field1', null, $this->getMockNoResult());\n        $this->assertTrue($validator->isValid('value1'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator  = new NoRecordExists('users', 'field1');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/Db/RecordExistsTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Db;\n\nuse ArrayObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Db\\Adapter\\Adapter;\nuse Zend\\Db\\Adapter\\ParameterContainer;\nuse Zend\\Db\\Sql\\Sql;\nuse Zend\\Validator\\Db\\RecordExists;\nuse ZendTest\\Validator\\Db\\TestAsset\\TrustingSql92Platform;\nuse Zend\\Validator\\Exception\\RuntimeException;\nuse Zend\\Db\\Adapter\\Driver\\ConnectionInterface;\nuse Zend\\Db\\Adapter\\Driver\\ResultInterface;\nuse Zend\\Db\\Adapter\\Driver\\StatementInterface;\nuse Zend\\Db\\Adapter\\Driver\\DriverInterface;\nuse Zend\\Db\\Sql\\Select;\nuse Zend\\Db\\Sql\\TableIdentifier;\n\n/**\n * @group      Zend_Validator\n */\nclass RecordExistsTest extends TestCase\n{\n    /**\n     * Return a Mock object for a Db result with rows\n     *\n     * @return \\Zend\\Db\\Adapter\\Adapter\n     */\n    protected function getMockHasResult()\n    {\n        // mock the adapter, driver, and parts\n        $mockConnection = $this->createMock(ConnectionInterface::class);\n\n        // Mock has result\n        $mockHasResultRow      = new ArrayObject();\n        $mockHasResultRow->one = 'one';\n\n        $mockHasResult = $this->createMock(ResultInterface::class);\n        $mockHasResult->expects($this->any())\n            ->method('current')\n            ->will($this->returnValue($mockHasResultRow));\n\n        $mockHasResultStatement = $this->createMock(StatementInterface::class);\n        $mockHasResultStatement->expects($this->any())\n            ->method('execute')\n            ->will($this->returnValue($mockHasResult));\n\n        $mockHasResultStatement->expects($this->any())\n            ->method('getParameterContainer')\n            ->will($this->returnValue(new ParameterContainer()));\n\n        $mockHasResultDriver = $this->createMock(DriverInterface::class);\n        $mockHasResultDriver->expects($this->any())\n            ->method('createStatement')\n            ->will($this->returnValue($mockHasResultStatement));\n        $mockHasResultDriver->expects($this->any())\n            ->method('getConnection')\n            ->will($this->returnValue($mockConnection));\n\n        return $this->getMockBuilder(Adapter::class)\n            ->setMethods(null)\n            ->setConstructorArgs([$mockHasResultDriver])\n            ->getMock();\n    }\n\n    /**\n     * Return a Mock object for a Db result without rows\n     *\n     * @return \\Zend\\Db\\Adapter\\Adapter\n     */\n    protected function getMockNoResult()\n    {\n        // mock the adapter, driver, and parts\n        $mockConnection = $this->createMock(ConnectionInterface::class);\n\n        $mockNoResult = $this->createMock(ResultInterface::class);\n        $mockNoResult->expects($this->any())\n            ->method('current')\n            ->will($this->returnValue(null));\n\n        $mockNoResultStatement = $this->createMock(StatementInterface::class);\n        $mockNoResultStatement->expects($this->any())\n            ->method('execute')\n            ->will($this->returnValue($mockNoResult));\n\n        $mockNoResultStatement->expects($this->any())\n            ->method('getParameterContainer')\n            ->will($this->returnValue(new ParameterContainer()));\n\n        $mockNoResultDriver = $this->createMock(DriverInterface::class);\n        $mockNoResultDriver->expects($this->any())\n            ->method('createStatement')\n            ->will($this->returnValue($mockNoResultStatement));\n        $mockNoResultDriver->expects($this->any())\n            ->method('getConnection')\n            ->will($this->returnValue($mockConnection));\n\n        return $this->getMockBuilder(Adapter::class)\n            ->setMethods(null)\n            ->setConstructorArgs([$mockNoResultDriver])\n            ->getMock();\n    }\n\n    /**\n     * Test basic function of RecordExists (no exclusion)\n     *\n     * @return void\n     */\n    public function testBasicFindsRecord()\n    {\n        $validator = new RecordExists([\n            'table'   => 'users',\n            'field'   => 'field1',\n            'adapter' => $this->getMockHasResult()\n        ]);\n        $this->assertTrue($validator->isValid('value1'));\n    }\n\n    /**\n     * Test basic function of RecordExists (no exclusion)\n     *\n     * @return void\n     */\n    public function testBasicFindsNoRecord()\n    {\n        $validator = new RecordExists(['table'   => 'users',\n                                            'field'   => 'field1',\n                                            'adapter' => $this->getMockNoResult()]);\n        $this->assertFalse($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * Test the exclusion function\n     *\n     * @return void\n     */\n    public function testExcludeWithArray()\n    {\n        $validator = new RecordExists(['table'   => 'users',\n                                            'field'   => 'field1',\n                                            'exclude' => ['field' => 'id',\n                                                               'value' => 1],\n                                            'adapter' => $this->getMockHasResult()]);\n        $this->assertTrue($validator->isValid('value3'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with an array\n     *\n     * @return void\n     */\n    public function testExcludeWithArrayNoRecord()\n    {\n        $validator = new RecordExists(['table'   => 'users',\n                                            'field'   => 'field1',\n                                            'exclude' => ['field' => 'id',\n                                                               'value' => 1],\n                                            'adapter' => $this->getMockNoResult()]);\n        $this->assertFalse($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with a string\n     *\n     * @return void\n     */\n    public function testExcludeWithString()\n    {\n        $validator = new RecordExists(['table'   => 'users',\n                                            'field'   => 'field1',\n                                            'exclude' => 'id != 1',\n                                            'adapter' => $this->getMockHasResult()]);\n        $this->assertTrue($validator->isValid('value3'));\n    }\n\n    /**\n     * Test the exclusion function\n     * with a string\n     *\n     * @return void\n     */\n    public function testExcludeWithStringNoRecord()\n    {\n        $validator = new RecordExists('users', 'field1', 'id != 1', $this->getMockNoResult());\n        $this->assertFalse($validator->isValid('nosuchvalue'));\n    }\n\n    /**\n     * @group ZF-8863\n     */\n    public function testExcludeConstructor()\n    {\n        $validator = new RecordExists('users', 'field1', 'id != 1', $this->getMockHasResult());\n        $this->assertTrue($validator->isValid('value3'));\n    }\n\n    /**\n     * Test that the class throws an exception if no adapter is provided\n     * and no default is set.\n     *\n     * @return void\n     */\n    public function testThrowsExceptionWithNoAdapter()\n    {\n        $validator = new RecordExists('users', 'field1', 'id != 1');\n        $this->expectException(RuntimeException::class);\n        $this->expectExceptionMessage('No database adapter present');\n        $validator->isValid('nosuchvalue');\n    }\n\n    /**\n     * Test that schemas are supported and run without error\n     *\n     * @return void\n     */\n    public function testWithSchema()\n    {\n        $validator = new RecordExists([\n            'table' => 'users',\n            'schema' => 'my'\n        ], 'field1', null, $this->getMockHasResult());\n        $this->assertTrue($validator->isValid('value1'));\n    }\n\n    /**\n     * Test that schemas are supported and run without error\n     *\n     * @return void\n     */\n    public function testWithSchemaNoResult()\n    {\n        $validator = new RecordExists([\n            'table' => 'users',\n            'schema' => 'my'\n        ], 'field1', null, $this->getMockNoResult());\n        $this->assertFalse($validator->isValid('value1'));\n    }\n\n    /**\n     * Test that the supplied table and schema are successfully passed to the select\n     * statement\n     */\n    public function testSelectAcknowledgesTableAndSchema()\n    {\n        $validator = new RecordExists([\n            'table' => 'users',\n            'schema' => 'my'\n        ], 'field1', null, $this->getMockHasResult());\n        $table = $validator->getSelect()->getRawState('table');\n        $this->assertInstanceOf(TableIdentifier::class, $table);\n        $this->assertEquals(['users', 'my'], $table->getTableAndSchema());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator  = new RecordExists('users', 'field1');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    /**\n     * @testdox Zend\\Validator\\Db\\RecordExists::getSelect\n     */\n    public function testGetSelect()\n    {\n        $validator = new RecordExists(\n            [\n                'table' => 'users',\n                'schema' => 'my'\n            ],\n            'field1',\n            [\n                'field' => 'foo',\n                'value' => 'bar'\n            ],\n            $this->getMockHasResult()\n        );\n        $select = $validator->getSelect();\n        $this->assertInstanceOf(Select::class, $select);\n        $this->assertEquals(\n            'SELECT \"my\".\"users\".\"field1\" AS \"field1\" FROM \"my\".\"users\" WHERE \"field1\" = \\'\\' AND \"foo\" != \\'bar\\'',\n            $select->getSqlString(new TrustingSql92Platform())\n        );\n\n        $sql = new Sql($this->getMockHasResult());\n        $statement = $sql->prepareStatementForSqlObject($select);\n        $parameters = $statement->getParameterContainer();\n        $this->assertNull($parameters['where1']);\n        $this->assertEquals($parameters['where2'], 'bar');\n    }\n\n    /**\n     * @cover Zend\\Validator\\Db\\RecordExists::getSelect\n     * @group ZF2-4521\n     */\n    public function testGetSelectWithSameValidatorTwice()\n    {\n        $validator = new RecordExists(\n            [\n                'table' => 'users',\n                'schema' => 'my'\n            ],\n            'field1',\n            [\n                'field' => 'foo',\n                'value' => 'bar'\n            ],\n            $this->getMockHasResult()\n        );\n        $select = $validator->getSelect();\n        $this->assertInstanceOf(Select::class, $select);\n        $this->assertEquals(\n            'SELECT \"my\".\"users\".\"field1\" AS \"field1\" FROM \"my\".\"users\" WHERE \"field1\" = \\'\\' AND \"foo\" != \\'bar\\'',\n            $select->getSqlString(new TrustingSql92Platform())\n        );\n\n        // same validator instance with changing properties\n        $validator->setTable('othertable');\n        $validator->setSchema('otherschema');\n        $validator->setField('fieldother');\n        $validator->setExclude([\n            'field' => 'fieldexclude',\n            'value' => 'fieldvalueexclude',\n        ]);\n        $select = $validator->getSelect();\n        $this->assertInstanceOf(Select::class, $select);\n        $this->assertEquals(\n            'SELECT \"otherschema\".\"othertable\".\"fieldother\" AS \"fieldother\" FROM \"otherschema\".\"othertable\" '\n            . 'WHERE \"fieldother\" = \\'\\' AND \"fieldexclude\" != \\'fieldvalueexclude\\'',\n            $select->getSqlString(new TrustingSql92Platform())\n        );\n    }\n}\n"
  },
  {
    "path": "test/Db/TestAsset/ConcreteDbValidator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Db\\TestAsset;\n\nuse Zend\\Validator\\Db\\AbstractDb;\n\nclass ConcreteDbValidator extends AbstractDb\n{\n    const FOO_MESSAGE = 'fooMessage';\n    const BAR_MESSAGE = 'barMessage';\n\n    protected $messageTemplates = [\n        'fooMessage' => '%value% was passed',\n        'barMessage' => '%value% was wrong'\n    ];\n\n    public function isValid($value)\n    {\n        $this->setValue($value);\n        $this->error(self::FOO_MESSAGE);\n        $this->error(self::BAR_MESSAGE);\n        return false;\n    }\n}\n"
  },
  {
    "path": "test/Db/TestAsset/TrustingSql92Platform.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Db\\TestAsset;\n\nuse Zend\\Db\\Adapter\\Platform\\Sql92;\n\nclass TrustingSql92Platform extends Sql92\n{\n    /**\n     * {@inheritDoc}\n     */\n    public function quoteValue($value)\n    {\n        return $this->quoteTrustedValue($value);\n    }\n}\n"
  },
  {
    "path": "test/DigitsTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Digits;\n\n/**\n * @group      Zend_Validator\n */\nclass DigitsTest extends TestCase\n{\n    /**\n     * @var Digits\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Digits();\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for basic input values\n     *\n     * @return void\n     */\n    public function testExpectedResultsWithBasicInputValues()\n    {\n        $valuesExpected = [\n            'abc123'  => false,\n            'abc 123' => false,\n            'abcxyz'  => false,\n            'AZ@#4.3' => false,\n            '1.23'    => false,\n            '0x9f'    => false,\n            '123'     => true,\n            '09'      => true,\n            ''        => false\n            ];\n        foreach ($valuesExpected as $input => $result) {\n            $this->assertEquals($result, $this->validator->isValid($input));\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected initial value\n     *\n     * @return void\n     */\n    public function testMessagesEmptyInitially()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * @return void\n     */\n    public function testEmptyStringValueResultsInProperValidationFailureMessages()\n    {\n        $this->assertFalse($this->validator->isValid(''));\n        $messages = $this->validator->getMessages();\n        $arrayExpected = [\n            Digits::STRING_EMPTY => 'The input is an empty string'\n            ];\n        $this->assertThat($messages, $this->identicalTo($arrayExpected));\n    }\n\n    /**\n     * @return void\n     */\n    public function testInvalidValueResultsInProperValidationFailureMessages()\n    {\n        $this->assertFalse($this->validator->isValid('#'));\n        $messages = $this->validator->getMessages();\n        $arrayExpected = [\n            Digits::NOT_DIGITS => 'The input must contain only digits'\n            ];\n        $this->assertThat($messages, $this->identicalTo($arrayExpected));\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/EmailAddressTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\EmailAddress;\nuse Zend\\Validator\\Hostname;\n\n/**\n * @group      Zend_Validator\n */\nclass EmailAddressTest extends TestCase\n{\n    /**\n     * @var EmailAddress\n     */\n    protected $validator;\n\n    /** @var bool */\n    public $multipleOptionsDetected;\n\n    public function setUp()\n    {\n        $this->validator = new EmailAddress();\n    }\n\n    /**\n     * Ensures that a basic valid e-mail address passes validation\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $this->assertTrue($this->validator->isValid('username@example.com'));\n    }\n\n    /**\n     * Ensures that localhost address is valid\n     *\n     * @return void\n     */\n    public function testLocalhostAllowed()\n    {\n        $validator = new EmailAddress(Hostname::ALLOW_ALL);\n        $this->assertTrue($validator->isValid('username@localhost'));\n    }\n\n    /**\n     * Ensures that local domain names are valid\n     *\n     * @return void\n     */\n    public function testLocaldomainAllowed()\n    {\n        $validator = new EmailAddress(Hostname::ALLOW_ALL);\n        $this->assertTrue($validator->isValid('username@localhost.localdomain'));\n    }\n\n    /**\n     * Ensures that IP hostnames are valid\n     *\n     * @return void\n     */\n    public function testIPAllowed()\n    {\n        $validator = new EmailAddress(Hostname::ALLOW_DNS | Hostname::ALLOW_IP);\n        $valuesExpected = [\n            [Hostname::ALLOW_DNS, true, ['bob@212.212.20.4']],\n            [Hostname::ALLOW_DNS, false, ['bob@localhost']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[2] as $input) {\n                $this->assertEquals($element[1], $validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n            }\n        }\n    }\n\n    /**\n     * Ensures that validation fails when the local part is missing\n     *\n     * @return void\n     */\n    public function testLocalPartMissing()\n    {\n        $this->assertFalse($this->validator->isValid('@example.com'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals(1, count($messages));\n        $this->assertContains('local-part@hostname', current($messages));\n    }\n\n    /**\n     * Ensures that validation fails and produces the expected messages when the local part is invalid\n     *\n     * @return void\n     */\n    public function testLocalPartInvalid()\n    {\n        $this->assertFalse($this->validator->isValid('Some User@example.com'));\n\n        $messages = $this->validator->getMessages();\n\n        $this->assertEquals(3, count($messages));\n\n        $this->assertContains('Some User', current($messages));\n        $this->assertContains('dot-atom', current($messages));\n\n        $this->assertContains('Some User', next($messages));\n        $this->assertContains('quoted-string', current($messages));\n\n        $this->assertContains('Some User', next($messages));\n        $this->assertContains('not a valid local part', current($messages));\n    }\n\n    /**\n     * Ensures that no validation failure message is produced when the local part follows the quoted-string format\n     *\n     * @return void\n     */\n    public function testLocalPartQuotedString()\n    {\n        $this->assertTrue($this->validator->isValid('\"Some User\"@example.com'));\n\n        $messages = $this->validator->getMessages();\n\n        $this->assertInternalType('array', $messages);\n        $this->assertEquals(0, count($messages));\n    }\n\n    /**\n     * Ensures that validation fails when the hostname is invalid\n     *\n     * @return void\n     */\n    public function testHostnameInvalid()\n    {\n        $this->assertFalse($this->validator->isValid('username@ example . com'));\n        $messages = $this->validator->getMessages();\n        $this->assertThat(count($messages), $this->greaterThanOrEqual(1));\n        $this->assertContains('not a valid hostname', current($messages));\n    }\n\n    /**\n     * Ensures that quoted-string local part is considered valid\n     *\n     * @return void\n     */\n    public function testQuotedString()\n    {\n        $emailAddresses = [\n            '\"\"@domain.com', // Optional\n            '\" \"@domain.com', // x20\n            '\"!\"@domain.com', // x21\n            '\"\\\"\"@domain.com', // \\\" (escaped x22)\n            '\"#\"@domain.com', // x23\n            '\"$\"@domain.com', // x24\n            '\"Z\"@domain.com', // x5A\n            '\"[\"@domain.com', // x5B\n            '\"\\\\\\\"@domain.com', // \\\\ (escaped x5C)\n            '\"]\"@domain.com', // x5D\n            '\"^\"@domain.com', // x5E\n            '\"}\"@domain.com', // x7D\n            '\"~\"@domain.com', // x7E\n            '\"username\"@example.com',\n            '\"bob%jones\"@domain.com',\n            '\"bob jones\"@domain.com',\n            '\"bob@jones\"@domain.com',\n            '\"[[ bob ]]\"@domain.com',\n            '\"jones\"@domain.com'\n            ];\n        foreach ($emailAddresses as $input) {\n            $this->assertTrue($this->validator->isValid($input), \"$input failed to pass validation:\\n\"\n                            . implode(\"\\n\", $this->validator->getMessages()));\n        }\n    }\n\n    /**\n     * Ensures that quoted-string local part is considered invalid\n     *\n     * @return void\n     */\n    public function testInvalidQuotedString()\n    {\n        $emailAddresses = [\n            \"\\\"\\x00\\\"@example.com\",\n            \"\\\"\\x01\\\"@example.com\",\n            \"\\\"\\x1E\\\"@example.com\",\n            \"\\\"\\x1F\\\"@example.com\",\n            '\"\"\"@example.com', // x22 (not escaped)\n            '\"\\\"@example.com', // x5C (not escaped)\n            \"\\\"\\x7F\\\"@example.com\",\n            ];\n        foreach ($emailAddresses as $input) {\n            $this->assertFalse($this->validator->isValid($input), \"$input failed to pass validation:\\n\"\n                            . implode(\"\\n\", $this->validator->getMessages()));\n        }\n    }\n\n    /**\n     * Ensures that validation fails when the e-mail is given as for display,\n     * with angle brackets around the actual address\n     *\n     * @return void\n     */\n    public function testEmailDisplay()\n    {\n        $this->assertFalse($this->validator->isValid('User Name <username@example.com>'));\n        $messages = $this->validator->getMessages();\n        $this->assertThat(count($messages), $this->greaterThanOrEqual(3));\n        $this->assertContains('not a valid hostname', current($messages));\n        $this->assertContains('cannot match TLD', next($messages));\n        $this->assertContains('does not appear to be a valid local network name', next($messages));\n    }\n\n    public function validEmailAddresses()\n    {\n        // @codingStandardsIgnoreStart\n        $return = [\n            'bob@domain.com'                                                          => ['bob@domain.com'],\n            'bob.jones@domain.co.uk'                                                  => ['bob.jones@domain.co.uk'],\n            'bob.jones.smythe@domain.co.uk'                                           => ['bob.jones.smythe@domain.co.uk'],\n            'BoB@domain.museum'                                                       => ['BoB@domain.museum'],\n            'bobjones@domain.info'                                                    => ['bobjones@domain.info'],\n            'bob+jones@domain.us'                                                     => ['bob+jones@domain.us'],\n            'bob+jones@domain.co.uk'                                                  => ['bob+jones@domain.co.uk'],\n            'bob@some.domain.uk.com'                                                  => ['bob@some.domain.uk.com'],\n            'bob@verylongdomainsupercalifragilisticexpialidociousspoonfulofsugar.com' => ['bob@verylongdomainsupercalifragilisticexpialidociousspoonfulofsugar.com'],\n            \"B.O'Callaghan@domain.com\"                                                => [\"B.O'Callaghan@domain.com\"],\n        ];\n\n        if (extension_loaded('intl')) {\n            $return['иван@письмо.рф']          = ['иван@письмо.рф'];\n            $return['öäü@ä-umlaut.de']         = ['öäü@ä-umlaut.de'];\n            $return['frédéric@domain.com']     = ['frédéric@domain.com'];\n            $return['bob@тест.рф']             = ['bob@тест.рф'];\n            $return['bob@xn--e1aybc.xn--p1ai'] = ['bob@xn--e1aybc.xn--p1ai'];\n        }\n\n        return $return;\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for valid email addresses\n     *\n     * @dataProvider validEmailAddresses\n     */\n    public function testBasicValid($value)\n    {\n        $this->assertTrue(\n            $this->validator->isValid($value),\n            sprintf(\n                '%s failed validation: %s',\n                $value,\n                implode(\"\\n\", $this->validator->getMessages())\n            )\n        );\n    }\n\n    public function invalidEmailAddresses()\n    {\n        // @codingStandardsIgnoreStart\n        return [\n            '[empty]'                                                                  => [''],\n            'bob jones@domain.com'                                                     => ['bob jones@domain.com'],\n            '.bobJones@studio24.com'                                                   => ['.bobJones@studio24.com'],\n            'bobJones.@studio24.com'                                                   => ['bobJones.@studio24.com'],\n            'bob.Jones.@studio24.com'                                                  => ['bob.Jones.@studio24.com'],\n            'bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com' => ['bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com'],\n            'bob+domain.com'                                                           => ['bob+domain.com'],\n            'bob.domain.com'                                                           => ['bob.domain.com'],\n            'bob @domain.com'                                                          => ['bob @domain.com'],\n            'bob@ domain.com'                                                          => ['bob@ domain.com'],\n            'bob @ domain.com'                                                         => ['bob @ domain.com'],\n            'Abc..123@example.com'                                                     => ['Abc..123@example.com'],\n            '\"bob%jones@domain.com'                                                    => ['\"bob%jones@domain.com'],\n            'multiline'                                                                => ['bob\n\n            @domain.com'],\n        ];\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for invalid email addresses\n     *\n     * @dataProvider invalidEmailAddresses\n     */\n    public function testBasicInvalid($value)\n    {\n        $this->assertFalse($this->validator->isValid($value));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for valid email addresses with complex local parts\n     *\n     * @return void\n     */\n    public function testComplexLocalValid()\n    {\n        $emailAddresses = [\n            'Bob.Jones@domain.com',\n            'Bob.Jones!@domain.com',\n            'Bob&Jones@domain.com',\n            '/Bob.Jones@domain.com',\n            '#Bob.Jones@domain.com',\n            'Bob.Jones?@domain.com',\n            'Bob~Jones@domain.com'\n            ];\n        foreach ($emailAddresses as $input) {\n            $this->assertTrue($this->validator->isValid($input));\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for valid email addresses with the non-strict option\n     *\n     * @return void\n     */\n    public function testNonStrict()\n    {\n        $validator = new EmailAddress(['strict' => false]);\n        $emailAddresses = [\n            // RFC 5321 does mention a limit of 64 for the username,\n            // but it also states \"To the maximum extent possible,\n            // implementation techniques that impose no limits on the\n            // length of these objects should be used.\".\n            // http://tools.ietf.org/html/rfc5321#section-4.5.3.1\n            'line length 320' => str_repeat('x', 309).'@domain.com',\n            'line length 321' => str_repeat('x', 310).'@domain.com',\n            'line length 911' => str_repeat('x', 900).'@domain.com',\n        ];\n        foreach ($emailAddresses as $input) {\n            $this->assertTrue($validator->isValid($input));\n        }\n    }\n\n   /**\n     * Ensures that the validator follows expected behavior for checking MX records\n     *\n     * @return void\n     */\n    public function testMXRecords()\n    {\n        $this->skipIfOnlineTestsDisabled();\n\n        $validator = new EmailAddress(Hostname::ALLOW_DNS, true);\n\n        // Are MX checks supported by this system?\n        if (! $validator->isMxSupported()) {\n            $this->markTestSkipped('Testing MX records is not supported with this configuration');\n        }\n\n        $valuesExpected = [\n            [true,  ['Bob.Jones@zend.com',        'Bob.Jones@php.net']],\n            [false, ['Bob.Jones@bad.example.com', 'Bob.Jones@anotherbad.example.com']]\n        ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals($element[0], $validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n            }\n        }\n\n        // Try a check via setting the option via a method\n        unset($validator);\n        $validator = new EmailAddress();\n        $validator->useMxCheck(true);\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals($element[0], $validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n            }\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for checking MX records with A record fallback.\n     * This behavior is documented in RFC 2821, section 5: \"If no MX records are found, but an A RR is\n     * found, the A RR is treated as if it was associated with an implicit MX RR, with a preference of 0,\n     * pointing to that host.\n     *\n     * @return void\n     */\n    public function testNoMxRecordARecordFallback()\n    {\n        $this->skipIfOnlineTestsDisabled();\n\n        $validator = new EmailAddress(Hostname::ALLOW_DNS, true);\n\n        // Are MX checks supported by this system?\n        if (! $validator->isMxSupported()) {\n            $this->markTestSkipped('Testing MX records is not supported with this configuration');\n        }\n\n        $email = 'good@example.com';\n        $host = preg_replace('/.*@/', null, $email);\n\n        //Assert that email host contains no MX records.\n        $this->assertFalse(checkdnsrr($host, 'MX'), 'Email host contains MX records');\n\n        //Asert that email host contains at least one A record.\n        $this->assertTrue(checkdnsrr($host, 'A'), 'Email host contains no A records');\n\n        //Assert that validtor falls back to A record.\n        $this->assertTrue($validator->isValid($email), implode(\"\\n\", $validator->getMessages()));\n    }\n\n   /**\n     * Test changing hostname settings via EmailAddress object\n     *\n     * @return void\n     */\n    public function testHostnameSettings()\n    {\n        $validator = new EmailAddress();\n\n        // Check no IDN matching\n        $validator->getHostnameValidator()->useIdnCheck(false);\n        $valuesExpected = [\n            [false, ['name@b�rger.de', 'name@h�llo.de', 'name@h�llo.se']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals($element[0], $validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n            }\n        }\n\n        // Check no TLD matching\n        $validator->getHostnameValidator()->useTldCheck(false);\n        $valuesExpected = [\n            [true, ['name@domain.xx', 'name@domain.zz', 'name@domain.madeup']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals($element[0], $validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value (an empty array)\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * @group ZF-2861\n     */\n    public function testHostnameValidatorMessagesShouldBeTranslated()\n    {\n        if (! extension_loaded('intl')) {\n            $this->markTestSkipped('ext/intl not enabled');\n        }\n\n        $hostnameValidator = new Hostname();\n        $translations = [\n            'hostnameIpAddressNotAllowed'   => 'hostnameIpAddressNotAllowed translation',\n            'hostnameUnknownTld'            => 'The input appears to be a DNS hostname '\n            . 'but cannot match TLD against known list',\n            'hostnameDashCharacter'         => 'hostnameDashCharacter translation',\n            'hostnameInvalidHostnameSchema' => 'hostnameInvalidHostnameSchema translation',\n            'hostnameUndecipherableTld'     => 'hostnameUndecipherableTld translation',\n            'hostnameInvalidHostname'       => 'hostnameInvalidHostname translation',\n            'hostnameInvalidLocalName'      => 'hostnameInvalidLocalName translation',\n            'hostnameLocalNameNotAllowed'   => 'hostnameLocalNameNotAllowed translation',\n        ];\n        $loader = new TestAsset\\ArrayTranslator();\n        $loader->translations = $translations;\n        $translator = new TestAsset\\Translator();\n        $translator->getPluginManager()->setService('test', $loader);\n        $translator->addTranslationFile('test', null);\n\n        $this->validator->setTranslator($translator)->setHostnameValidator($hostnameValidator);\n\n        $this->validator->isValid('_XX.!!3xx@0.239,512.777');\n        $messages = $hostnameValidator->getMessages();\n        $found = false;\n        foreach ($messages as $code => $message) {\n            if (array_key_exists($code, $translations)) {\n                $this->assertEquals($translations[$code], $message);\n                $found = true;\n                break;\n            }\n        }\n        $this->assertTrue($found);\n    }\n\n    /**\n     * @group ZF-4888\n     */\n    public function testEmailsExceedingLength()\n    {\n        // @codingStandardsIgnoreStart\n        $emailAddresses = [\n            'thislocalpathoftheemailadressislongerthantheallowedsizeof64characters@domain.com',\n            'bob@verylongdomainsupercalifragilisticexpialidociousspoonfulofsugarverylongdomainsupercalifragilisticexpialidociousspoonfulofsugarverylongdomainsupercalifragilisticexpialidociousspoonfulofsugarverylongdomainsupercalifragilisticexpialidociousspoonfulofsugarexpialidociousspoonfulofsugar.com',\n        ];\n        // @codingStandardsIgnoreEnd\n        foreach ($emailAddresses as $input) {\n            $this->assertFalse($this->validator->isValid($input));\n        }\n    }\n\n    /**\n     * @group ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    /**\n     * @group ZF-7490\n     */\n    public function testSettingHostnameMessagesThroughEmailValidator()\n    {\n        $translations = [\n            'hostnameIpAddressNotAllowed' => 'hostnameIpAddressNotAllowed translation',\n            'hostnameUnknownTld' => 'hostnameUnknownTld translation',\n            'hostnameDashCharacter' => 'hostnameDashCharacter translation',\n            'hostnameInvalidHostnameSchema' => 'hostnameInvalidHostnameSchema translation',\n            'hostnameUndecipherableTld' => 'hostnameUndecipherableTld translation',\n            'hostnameInvalidHostname' => 'hostnameInvalidHostname translation',\n            'hostnameInvalidLocalName' => 'hostnameInvalidLocalName translation',\n            'hostnameLocalNameNotAllowed' => 'hostnameLocalNameNotAllowed translation',\n        ];\n\n        $this->validator->setMessages($translations);\n        $this->validator->isValid('_XX.!!3xx@0.239,512.777');\n        $messages = $this->validator->getMessages();\n        $found = false;\n        foreach ($messages as $code => $message) {\n            if (array_key_exists($code, $translations)) {\n                $this->assertEquals($translations[$code], $message);\n                $found = true;\n                break;\n            }\n        }\n\n        $this->assertTrue($found);\n    }\n\n    /**\n     * Testing initializing with several options\n     */\n    public function testInstanceWithOldOptions()\n    {\n        $handler = set_error_handler([$this, 'errorHandler'], E_USER_NOTICE);\n        $validator = new EmailAddress();\n        $options   = $validator->getOptions();\n\n        $this->assertEquals(Hostname::ALLOW_DNS, $options['allow']);\n        $this->assertFalse($options['useMxCheck']);\n\n        try {\n            $validator = new EmailAddress(Hostname::ALLOW_ALL, true, new Hostname(Hostname::ALLOW_ALL));\n            $options   = $validator->getOptions();\n\n            $this->assertEquals(Hostname::ALLOW_ALL, $options['allow']);\n            $this->assertTrue($options['useMxCheck']);\n            set_error_handler($handler);\n        } catch (\\Zend\\Validator\\Exception\\InvalidArgumentException $e) {\n            $this->markTestSkipped('MX not available on this system');\n        }\n    }\n\n    /**\n     * Testing setOptions\n     */\n    public function testSetOptions()\n    {\n        $this->validator->setOptions(['messages' => [EmailAddress::INVALID => 'TestMessage']]);\n        $messages = $this->validator->getMessageTemplates();\n        $this->assertEquals('TestMessage', $messages[EmailAddress::INVALID]);\n\n        $oldHostname = $this->validator->getHostnameValidator();\n        $this->validator->setOptions(['hostnameValidator' => new Hostname(Hostname::ALLOW_ALL)]);\n        $hostname = $this->validator->getHostnameValidator();\n        $this->assertNotEquals($oldHostname, $hostname);\n    }\n\n    /**\n     * Testing setMessage\n     */\n    public function testSetSingleMessage()\n    {\n        $messages = $this->validator->getMessageTemplates();\n        $this->assertNotEquals('TestMessage', $messages[EmailAddress::INVALID]);\n        $this->validator->setMessage('TestMessage', EmailAddress::INVALID);\n        $messages = $this->validator->getMessageTemplates();\n        $this->assertEquals('TestMessage', $messages[EmailAddress::INVALID]);\n    }\n\n    public function testSetSingleMessageViaOptions()\n    {\n        $validator = new EmailAddress(['message' => 'TestMessage']);\n        foreach ($validator->getMessageTemplates() as $message) {\n            $this->assertEquals('TestMessage', $message);\n        }\n        foreach ($validator->getHostnameValidator()->getMessageTemplates() as $message) {\n            $this->assertEquals('TestMessage', $message);\n        }\n    }\n\n    public function testSetMultipleMessageViaOptions()\n    {\n        $validator = new EmailAddress(['messages' => [EmailAddress::INVALID => 'TestMessage']]);\n        $messages = $validator->getMessageTemplates();\n        $this->assertEquals('TestMessage', $messages[EmailAddress::INVALID]);\n    }\n\n    /**\n     * Testing getValidateMx\n     */\n    public function testGetValidateMx()\n    {\n        $this->assertFalse($this->validator->getMxCheck());\n    }\n\n    /**\n     * Testing getDeepMxCheck\n     */\n    public function testGetDeepMxCheck()\n    {\n        $this->assertFalse($this->validator->getDeepMxCheck());\n    }\n\n    /**\n     * Testing setMessage for all messages\n     *\n     * @group ZF-10690\n     */\n    public function testSetMultipleMessages()\n    {\n        $messages = $this->validator->getMessageTemplates();\n        $this->assertNotEquals('TestMessage', $messages[EmailAddress::INVALID]);\n        $this->validator->setMessage('TestMessage');\n        foreach ($this->validator->getMessageTemplates() as $message) {\n            $this->assertEquals('TestMessage', $message);\n        }\n        foreach ($this->validator->getHostnameValidator()->getMessageTemplates() as $message) {\n            $this->assertEquals('TestMessage', $message);\n        }\n    }\n\n    /**\n     * Testing getDomainCheck\n     */\n    public function testGetDomainCheck()\n    {\n        $this->assertTrue($this->validator->getDomainCheck());\n    }\n\n    public function errorHandler($errno, $errstr)\n    {\n        if (strstr($errstr, 'deprecated')) {\n            $this->multipleOptionsDetected = true;\n        }\n    }\n\n    /**\n     * @group ZF-11222\n     * @group ZF-11451\n     */\n    public function testEmailAddressesWithTrailingDotInHostPartAreRejected()\n    {\n        $this->assertFalse($this->validator->isValid('example@gmail.com.'));\n        $this->assertFalse($this->validator->isValid('test@test.co.'));\n        $this->assertFalse($this->validator->isValid('test@test.co.za.'));\n    }\n\n    /**\n     * @group ZF-11239\n     */\n    public function testNotSetHostnameValidator()\n    {\n        $hostname = $this->validator->getHostnameValidator();\n        $this->assertInstanceOf(Hostname::class, $hostname);\n    }\n\n    public function testIsMxSupported()\n    {\n        $validator = new EmailAddress(['useMxCheck' => true, 'allow' => Hostname::ALLOW_ALL]);\n        $this->assertInternalType('bool', $validator->isMxSupported());\n    }\n    /**\n     * Test getMXRecord\n     */\n    public function testGetMXRecord()\n    {\n        $this->skipIfOnlineTestsDisabled();\n\n        $validator = new EmailAddress(['useMxCheck' => true, 'allow' => Hostname::ALLOW_ALL]);\n\n        if (! $validator->isMxSupported()) {\n            $this->markTestSkipped('Testing MX records is not supported with this configuration');\n        }\n\n        $this->assertTrue($validator->isValid('john.doe@gmail.com'));\n        $result = $validator->getMXRecord();\n        $this->assertNotEmpty($result);\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    /**\n     * @group ZF2-130\n     */\n    public function testUseMxCheckBasicValid()\n    {\n        $this->skipIfOnlineTestsDisabled();\n\n        $validator = new EmailAddress([\n            'useMxCheck'        => true,\n            'useDeepMxCheck'    => true\n        ]);\n\n        $emailAddresses = [\n            'bob@gmail.com',\n            'bob.jones@bbc.co.uk',\n            'bob.jones.smythe@bbc.co.uk',\n            'BoB@aol.com',\n            'bobjones@nist.gov',\n            \"B.O'Callaghan@usmc.mil\",\n            'bob+jones@nic.us',\n            'bob+jones@dailymail.co.uk',\n            'bob@teaparty.uk.com',\n            'bob@thelongestdomainnameintheworldandthensomeandthensomemoreandmore.com'\n        ];\n\n        if (extension_loaded('intl')) {\n            $emailAddresses[] = 'test@письмо.рф';\n            $emailAddresses[] = 'test@xn--h1aigbl0e.xn--p1ai';\n        }\n\n        foreach ($emailAddresses as $input) {\n            $this->assertTrue($validator->isValid($input), \"$input failed to pass validation:\\n\"\n                            . implode(\"\\n\", $validator->getMessages()));\n        }\n    }\n\n    /**\n     * @group ZF2-130\n     */\n    public function testUseMxRecordsBasicInvalid()\n    {\n        $validator = new EmailAddress([\n            'useMxCheck'        => true,\n            'useDeepMxCheck'    => true\n        ]);\n\n        $emailAddresses = [\n            '',\n            'bob\n\n            @domain.com',\n            'bob jones@domain.com',\n            '.bobJones@studio24.com',\n            'bobJones.@studio24.com',\n            'bob.Jones.@studio24.com',\n            '\"bob%jones@domain.com',\n            'bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com',\n            'bob+domain.com',\n            'bob.domain.com',\n            'bob @domain.com',\n            'bob@ domain.com',\n            'bob @ domain.com',\n            'Abc..123@example.com'\n            ];\n\n        if (! extension_loaded('intl')) {\n            $emailAddresses[] = 'иван@письмо.рф';\n            $emailAddresses[] = 'xn--@-7sbfxdyelgv5j.xn--p1ai';\n        }\n\n        foreach ($emailAddresses as $input) {\n            $this->assertFalse($validator->isValid($input), implode(\"\\n\", $this->validator->getMessages()) . $input);\n        }\n    }\n\n    /**\n     * @group ZF-12349\n     */\n    public function testReservedIpRangeValidation()\n    {\n        $validator = new TestAsset\\EmailValidatorWithExposedIsReserved();\n        // 0.0.0.0/8\n        $this->assertTrue($validator->isReserved('0.0.0.0'));\n        $this->assertTrue($validator->isReserved('0.255.255.255'));\n        // 10.0.0.0/8\n        $this->assertTrue($validator->isReserved('10.0.0.0'));\n        $this->assertTrue($validator->isReserved('10.255.255.255'));\n        // 127.0.0.0/8\n        $this->assertTrue($validator->isReserved('127.0.0.0'));\n        $this->assertTrue($validator->isReserved('127.255.255.255'));\n        // 100.64.0.0/10\n        $this->assertTrue($validator->isReserved('100.64.0.0'));\n        $this->assertTrue($validator->isReserved('100.127.255.255'));\n        // 172.16.0.0/12\n        $this->assertTrue($validator->isReserved('172.16.0.0'));\n        $this->assertTrue($validator->isReserved('172.31.255.255'));\n        // 198.18.0.0./15\n        $this->assertTrue($validator->isReserved('198.18.0.0'));\n        $this->assertTrue($validator->isReserved('198.19.255.255'));\n        // 169.254.0.0/16\n        $this->assertTrue($validator->isReserved('169.254.0.0'));\n        $this->assertTrue($validator->isReserved('169.254.255.255'));\n        // 192.168.0.0/16\n        $this->assertTrue($validator->isReserved('192.168.0.0'));\n        $this->assertTrue($validator->isReserved('192.168.255.25'));\n        // 192.0.2.0/24\n        $this->assertTrue($validator->isReserved('192.0.2.0'));\n        $this->assertTrue($validator->isReserved('192.0.2.255'));\n        // 192.88.99.0/24\n        $this->assertTrue($validator->isReserved('192.88.99.0'));\n        $this->assertTrue($validator->isReserved('192.88.99.255'));\n        // 198.51.100.0/24\n        $this->assertTrue($validator->isReserved('198.51.100.0'));\n        $this->assertTrue($validator->isReserved('198.51.100.255'));\n        // 203.0.113.0/24\n        $this->assertTrue($validator->isReserved('203.0.113.0'));\n        $this->assertTrue($validator->isReserved('203.0.113.255'));\n        // 224.0.0.0/4\n        $this->assertTrue($validator->isReserved('224.0.0.0'));\n        $this->assertTrue($validator->isReserved('239.255.255.255'));\n        // 240.0.0.0/4\n        $this->assertTrue($validator->isReserved('240.0.0.0'));\n        $this->assertTrue($validator->isReserved('255.255.255.254'));\n        // 255.255.255.255/32\n        $this->assertTrue($validator->isReserved('255.255.55.255'));\n    }\n\n    /**\n     * @group ZF-12349\n     */\n    public function testIpRangeValidationOnRangesNoLongerMarkedAsReserved()\n    {\n        $validator = new TestAsset\\EmailValidatorWithExposedIsReserved();\n        // 128.0.0.0/16\n        $this->assertFalse($validator->isReserved('128.0.0.0'));\n        $this->assertFalse($validator->isReserved('128.0.255.255'));\n        // 191.255.0.0/16\n        $this->assertFalse($validator->isReserved('191.255.0.0'));\n        $this->assertFalse($validator->isReserved('191.255.255.255'));\n        // 223.255.255.0/24\n        $this->assertFalse($validator->isReserved('223.255.255.0'));\n        $this->assertFalse($validator->isReserved('223.255.255.255'));\n    }\n\n    /**\n     * @throws \\PHPUnit_Framework_SkippedTestError\n     *\n     * @return void\n     */\n    private function skipIfOnlineTestsDisabled()\n    {\n        if (! getenv('TESTS_ZEND_VALIDATOR_ONLINE_ENABLED')) {\n            $this->markTestSkipped('Testing MX records has been disabled');\n        }\n    }\n\n    public function testCanSetDomainCheckFlag()\n    {\n        $validator = new EmailAddress();\n        $validator->useDomainCheck(false);\n        $this->assertFalse($validator->getDomainCheck());\n    }\n}\n"
  },
  {
    "path": "test/ExplodeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Explode;\nuse Zend\\Validator\\Regex;\nuse Zend\\Validator\\Callback;\nuse Zend\\Validator\\Exception\\RuntimeException;\nuse Zend\\Validator\\ValidatorInterface;\nuse Zend\\Validator\\InArray;\n\n/**\n * @group      Zend_Validator\n */\nclass ExplodeTest extends TestCase\n{\n    public function testRaisesExceptionWhenValidatorIsMissing()\n    {\n        $validator = new Explode();\n        $this->expectException(RuntimeException::class);\n        $this->expectExceptionMessage('validator');\n        $validator->isValid('foo,bar');\n    }\n\n    public function getExpectedData()\n    {\n        return [\n            //    value              delim break  N  valid  messages                   expects\n            ['foo,bar,dev,null', ',', false, 4, true,  [],                   true],\n            ['foo,bar,dev,null', ',', true,  1, false, ['X'],                false],\n            ['foo,bar,dev,null', ',', false, 4, false, ['X'],                false],\n            ['foo,bar,dev,null', ';', false, 1, true,  [],                   true],\n            ['foo;bar,dev;null', ',', false, 2, true,  [],                   true],\n            ['foo;bar,dev;null', ',', false, 2, false, ['X'],                false],\n            ['foo;bar;dev;null', ';', false, 4, true,  [],                   true],\n            ['foo',              ',', false, 1, true,  [],                   true],\n            ['foo',              ',', false, 1, false, ['X'],                false],\n            ['foo',              ',', true,  1, false, ['X'],                false],\n            [['a', 'b'],   null, false, 2, true,  [],                   true],\n            [['a', 'b'],   null, false, 2, false, ['X'],                false],\n            ['foo',             null, false, 1, true,  [],                   true],\n            [1,                  ',', false, 1, true,  [],                   true],\n            [null,               ',', false, 1, true,  [],                   true],\n            [new \\stdClass(),    ',', false, 1, true,  [],                   true],\n            [new \\ArrayObject(['a', 'b']), null, false, 2, true,  [],   true],\n        ];\n    }\n\n    /**\n     * @dataProvider getExpectedData\n     */\n    public function testExpectedBehavior(\n        $value,\n        $delimiter,\n        $breakOnFirst,\n        $numIsValidCalls,\n        $isValidReturn,\n        $messages,\n        $expects\n    ) {\n        $mockValidator = $this->createMock(ValidatorInterface::class);\n        $mockValidator->expects(\n            $this->exactly($numIsValidCalls)\n        )->method('isValid')->will($this->returnValue($isValidReturn));\n        $mockValidator->expects($this->any())->method('getMessages')->will($this->returnValue('X'));\n\n        $validator = new Explode([\n            'validator'           => $mockValidator,\n            'valueDelimiter'      => $delimiter,\n            'breakOnFirstFailure' => $breakOnFirst,\n        ]);\n\n        $this->assertEquals($expects, $validator->isValid($value));\n        $this->assertEquals($messages, $validator->getMessages());\n    }\n\n    public function testGetMessagesReturnsDefaultValue()\n    {\n        $validator = new Explode();\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Explode([]);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new Explode([]);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function testSetValidatorAsArray()\n    {\n        $validator = new Explode();\n        $validator->setValidator(\n            [\n                'name' => 'inarray',\n                'options' => [\n                    'haystack' => [\n                        'a', 'b', 'c'\n                    ]\n                ]\n            ]\n        );\n\n        /** @var $inArrayValidator \\Zend\\Validator\\InArray */\n        $inArrayValidator = $validator->getValidator();\n        $this->assertInstanceOf(InArray::class, $inArrayValidator);\n        $this->assertSame(\n            ['a', 'b', 'c'],\n            $inArrayValidator->getHaystack()\n        );\n    }\n\n    public function testSetValidatorMissingName()\n    {\n        $validator = new Explode();\n        $this->expectException(RuntimeException::class);\n        $validator->setValidator(\n            [\n                'options' => []\n            ]\n        );\n    }\n\n    public function testSetValidatorInvalidParam()\n    {\n        $validator = new Explode();\n        $this->expectException(RuntimeException::class);\n        $validator->setValidator('inarray');\n    }\n\n    /**\n     * @group ZF2-5796\n     */\n    public function testGetMessagesMultipleInvalid()\n    {\n        $validator = new Explode([\n            'validator'           => new Regex(\n                '/^[a-zA-Z0-9.!#$%&\\'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/'\n            ),\n            'valueDelimiter'      => ',',\n            'breakOnFirstFailure' => false,\n        ]);\n\n        $messages = [\n            0 => [\n                'regexNotMatch' => \"The input does not match against pattern \"\n                    . \"'/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/'\",\n            ],\n        ];\n\n        $this->assertFalse($validator->isValid('zf-devteam@zend.com,abc,defghij'));\n        $this->assertEquals($messages, $validator->getMessages());\n    }\n\n    /**\n     * Assert context is passed to composed validator\n     */\n    public function testIsValidPassContext()\n    {\n        $context       = 'context';\n        $contextSame   = false;\n        $validator = new Explode([\n            'validator'           => new Callback(function ($v, $c) use ($context, &$contextSame) {\n                $contextSame = ($context === $c);\n                return true;\n            }),\n            'valueDelimiter'      => ',',\n            'breakOnFirstFailure' => false,\n        ]);\n        $this->assertTrue($validator->isValid('a,b,c', $context));\n        $this->assertTrue($contextSame);\n    }\n}\n"
  },
  {
    "path": "test/File/CountTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse ReflectionClass;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass CountTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $valuesExpected = [\n            [5, true, true, true, true],\n            [['min' => 0, 'max' => 3], true, true, true, false],\n            [['min' => 2, 'max' => 3], false, true, true, false],\n            [['min' => 2], false, true, true, true],\n            [['max' => 5], true, true, true, true],\n            ];\n\n        foreach ($valuesExpected as $element) {\n            $validator = new File\\Count($element[0]);\n            $this->assertEquals(\n                $element[1],\n                $validator->isValid(__DIR__ . '/_files/testsize.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n            $this->assertEquals(\n                $element[2],\n                $validator->isValid(__DIR__ . '/_files/testsize2.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n            $this->assertEquals(\n                $element[3],\n                $validator->isValid(__DIR__ . '/_files/testsize3.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n            $this->assertEquals(\n                $element[4],\n                $validator->isValid(__DIR__ . '/_files/testsize4.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n        }\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new File\\Count(['min' => 1, 'max' => 5]);\n        $this->assertEquals(1, $validator->getMin());\n    }\n\n    public function testGetMinGreaterThanOrEqualThrowsException()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\Count(['min' => 5, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMin() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMin()\n    {\n        $validator = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $validator->setMin(100);\n        $this->assertEquals(100, $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setMin(20000);\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new File\\Count(['min' => 1, 'max' => 100]);\n        $this->assertEquals(100, $validator->getMax());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\Count(['min' => 5, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMax() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMax()\n    {\n        $validator = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $validator->setMax(1000000);\n        $this->assertEquals(1000000, $validator->getMax());\n\n        $validator->setMin(100);\n        $this->assertEquals(1000000, $validator->getMax());\n    }\n\n    public function testCanSetMaxValueUsingAnArrayWithMaxKey()\n    {\n        $validator   = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $maxValue    = 33333333;\n        $setMaxArray = ['max' => $maxValue];\n\n        $validator->setMax($setMaxArray);\n        $this->assertSame($maxValue, $validator->getMax());\n    }\n\n    public function invalidMinMaxValues()\n    {\n        return [\n            'null'           => [null],\n            'true'           => [true],\n            'false'          => [false],\n            'invalid-string' => ['will-not-work'],\n            'invalid-array'  => [[100]],\n            'object'         => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSettingMaxWithInvalidArgumentRaisesException($max)\n    {\n        $validator = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n\n        $validator->setMax($max);\n    }\n\n    public function testCanSetMinUsingAnArrayWithAMinKey()\n    {\n        $validator   = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $minValue    = 33;\n        $setMinArray = ['min' => $minValue];\n\n        $validator->setMin($setMinArray);\n        $this->assertEquals($minValue, $validator->getMin());\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSettingMinWithInvalidArgumentRaisesException($min)\n    {\n        $validator = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->setMin($min);\n    }\n\n    public function testThrowErrorReturnsFalseAndSetsMessageWhenProvidedWithArrayRepresentingTooFewFiles()\n    {\n        $validator = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $filename  = 'test.txt';\n        $fileArray = ['name' => $filename];\n\n        $reflection = new ReflectionClass($validator);\n\n        $method = $reflection->getMethod('throwError');\n        $method->setAccessible(true);\n\n        $property = $reflection->getProperty('value');\n        $property->setAccessible(true);\n\n        $result = $method->invoke($validator, $fileArray, File\\Count::TOO_FEW);\n\n        $this->assertFalse($result);\n        $this->assertEquals($filename, $property->getValue($validator));\n    }\n\n    public function testThrowErrorReturnsFalseAndSetsMessageWhenProvidedWithASingleFilename()\n    {\n        $validator  = new File\\Count(['min' => 1000, 'max' => 10000]);\n        $filename   = 'test.txt';\n        $reflection = new ReflectionClass($validator);\n\n        $method = $reflection->getMethod('throwError');\n        $method->setAccessible(true);\n\n        $property = $reflection->getProperty('value');\n        $property->setAccessible(true);\n\n        $result = $method->invoke($validator, $filename, File\\Count::TOO_FEW);\n\n        $this->assertFalse($result);\n        $this->assertEquals($filename, $property->getValue($validator));\n    }\n\n    public function testCanProvideMinAndMaxAsDiscreteConstructorArguments()\n    {\n        $min       = 1000;\n        $max       = 10000;\n        $validator = new File\\Count($min, $max);\n\n        $this->assertSame($min, $validator->getMin());\n        $this->assertSame($max, $validator->getMax());\n    }\n}\n"
  },
  {
    "path": "test/File/Crc32Test.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass Crc32Test extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            ['3f8d07e2',                    $testFile, true, ''],\n            ['9f8d07e2',                    $testFile, false, 'fileCrc32DoesNotMatch'],\n            [['9f8d07e2', '3f8d07e2'], $testFile, true, ''],\n            [['9f8d07e2', '7f8d07e2'], $testFile, false, 'fileCrc32DoesNotMatch'],\n        ];\n\n        $testFile = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['3f8d07e2', $testFile, false, 'fileCrc32NotFound'],\n        ];\n\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $sizeFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['ffeb8d5d', $testFile, true,  ''],\n            ['9f8d07e2', $testFile, false, 'fileCrc32DoesNotMatch'],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests, $sizeFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\Crc32($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Crc32($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * Ensures that getCrc32() returns expected value\n     *\n     * @return void\n     */\n    public function testgetCrc32()\n    {\n        $validator = new File\\Crc32('12345');\n        $this->assertEquals(['12345' => 'crc32'], $validator->getCrc32());\n\n        $validator = new File\\Crc32(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'crc32', '12333' => 'crc32', '12344' => 'crc32'], $validator->getCrc32());\n    }\n\n    /**\n     * Ensures that getHash() returns expected value\n     *\n     * @return void\n     */\n    public function testgetHash()\n    {\n        $validator = new File\\Crc32('12345');\n        $this->assertEquals(['12345' => 'crc32'], $validator->getHash());\n\n        $validator = new File\\Crc32(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'crc32', '12333' => 'crc32', '12344' => 'crc32'], $validator->getHash());\n    }\n\n    /**\n     * Ensures that setCrc32() returns expected value\n     *\n     * @return void\n     */\n    public function testSetCrc32()\n    {\n        $validator = new File\\Crc32('12345');\n        $validator->setCrc32('12333');\n        $this->assertEquals(['12333' => 'crc32'], $validator->getCrc32());\n\n        $validator->setCrc32(['12321', '12121']);\n        $this->assertEquals(['12321' => 'crc32', '12121' => 'crc32'], $validator->getCrc32());\n    }\n\n    /**\n     * Ensures that setHash() returns expected value\n     *\n     * @return void\n     */\n    public function testSetHash()\n    {\n        $validator = new File\\Crc32('12345');\n        $validator->setHash('12333');\n        $this->assertEquals(['12333' => 'crc32'], $validator->getCrc32());\n\n        $validator->setHash(['12321', '12121']);\n        $this->assertEquals(['12321' => 'crc32', '12121' => 'crc32'], $validator->getCrc32());\n    }\n\n    /**\n     * Ensures that addCrc32() returns expected value\n     *\n     * @return void\n     */\n    public function testAddCrc32()\n    {\n        $validator = new File\\Crc32('12345');\n        $validator->addCrc32('12344');\n        $this->assertEquals(['12345' => 'crc32', '12344' => 'crc32'], $validator->getCrc32());\n\n        $validator->addCrc32(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'crc32', '12344' => 'crc32', '12321' => 'crc32', '12121' => 'crc32'],\n            $validator->getCrc32()\n        );\n    }\n\n    /**\n     * Ensures that addHash() returns expected value\n     *\n     * @return void\n     */\n    public function testAddHash()\n    {\n        $validator = new File\\Crc32('12345');\n        $validator->addHash('12344');\n        $this->assertEquals(['12345' => 'crc32', '12344' => 'crc32'], $validator->getCrc32());\n\n        $validator->addHash(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'crc32', '12344' => 'crc32', '12321' => 'crc32', '12121' => 'crc32'],\n            $validator->getCrc32()\n        );\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Crc32('3f8d07e2');\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileCrc32NotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Crc32();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Crc32::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Crc32::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testShouldThrowInvalidArgumentExceptionForArrayValueNotInFilesFormat()\n    {\n        $validator    = new File\\Crc32();\n        $invalidArray = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $validator->isValid($invalidArray);\n    }\n}\n"
  },
  {
    "path": "test/File/ExcludeExtensionTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass ExcludeExtensionTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile   = __DIR__ . '/_files/testsize.mo';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            ['mo',                       $testFile, false,  'fileExcludeExtensionFalse'],\n            ['gif',                      $testFile, true, ''],\n            [['mo'],                $testFile, false,  'fileExcludeExtensionFalse'],\n            [['gif'],               $testFile, true, ''],\n            [['gif', 'mo', 'pict'], $testFile, false,  'fileExcludeExtensionFalse'],\n            [['gif', 'gz', 'hint'], $testFile, true, ''],\n        ];\n\n        $testFile   = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['mo', $testFile, false, 'fileExcludeExtensionNotFound'],\n            [['extension' => 'gif', 'allowNonExistentFile' => true], $testFile, true, ''],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\ExcludeExtension($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\ExcludeExtension($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    public function testCaseTesting()\n    {\n        $files = [\n            'name'     => 'testsize.mo',\n            'type'     => 'text',\n            'size'     => 200,\n            'tmp_name' => __DIR__ . '/_files/testsize.mo',\n            'error'    => 0\n        ];\n        $validator = new File\\ExcludeExtension(['MO', 'case' => true]);\n        $this->assertEquals(true, $validator->isValid(__DIR__ . '/_files/testsize.mo', $files));\n\n        $validator = new File\\ExcludeExtension(['MO', 'case' => false]);\n        $this->assertEquals(false, $validator->isValid(__DIR__ . '/_files/testsize.mo', $files));\n    }\n\n    /**\n     * Ensures that getExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testGetExtension()\n    {\n        $validator = new File\\ExcludeExtension('mo');\n        $this->assertEquals(['mo'], $validator->getExtension());\n\n        $validator = new File\\ExcludeExtension(['mo', 'gif', 'jpg']);\n        $this->assertEquals(['mo', 'gif', 'jpg'], $validator->getExtension());\n    }\n\n    /**\n     * Ensures that setExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testSetExtension()\n    {\n        $validator = new File\\ExcludeExtension('mo');\n        $validator->setExtension('gif');\n        $this->assertEquals(['gif'], $validator->getExtension());\n\n        $validator->setExtension('jpg, mo');\n        $this->assertEquals(['jpg', 'mo'], $validator->getExtension());\n\n        $validator->setExtension(['zip', 'ti']);\n        $this->assertEquals(['zip', 'ti'], $validator->getExtension());\n    }\n\n    /**\n     * Ensures that addExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testAddExtension()\n    {\n        $validator = new File\\ExcludeExtension('mo');\n        $validator->addExtension('gif');\n        $this->assertEquals(['mo', 'gif'], $validator->getExtension());\n\n        $validator->addExtension('jpg, to');\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to'], $validator->getExtension());\n\n        $validator->addExtension(['zip', 'ti']);\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getExtension());\n\n        $validator->addExtension('');\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getExtension());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\ExcludeExtension('mo');\n        $this->assertEquals(false, $validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileExcludeExtensionNotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\ExcludeExtension('12345');\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\ExcludeExtension::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\ExcludeExtension::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testIsValidRaisesExceptionWithArrayNotInFilesFormat()\n    {\n        $validator = new File\\ExcludeExtension('12345');\n        $value     = ['foo' => 'bar'];\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/ExcludeMimeTypeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File\\ExcludeMimeType;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * ExcludeMimeType testbed\n *\n * @group      Zend_Validator\n */\nclass ExcludeMimeTypeTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $fileUpload = [\n            'tmp_name' => $testFile,\n            'name'     => basename($testFile),\n            'size'     => 200,\n            'error'    => 0,\n            'type'     => 'image/jpeg',\n        ];\n\n        $falseTypeMessage = [ExcludeMimeType::FALSE_TYPE => \"File has an incorrect mimetype of 'image/jpeg'\"];\n\n        return [\n            //    Options, isValid Param, Expected value, messages\n            ['image/gif',                 $fileUpload, true,  []],\n            ['image',                     $fileUpload, false, $falseTypeMessage],\n            ['test/notype',               $fileUpload, true,  []],\n            ['image/gif, image/jpeg',     $fileUpload, false, $falseTypeMessage],\n            [['image/vasa', 'image/gif'], $fileUpload, true,  []],\n            [['image/gif', 'jpeg'],       $fileUpload, false, $falseTypeMessage],\n            [['image/gif', 'gif'],        $fileUpload, true,  []],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     *\n     * @param string|array $options\n     * @param array $isValidParam\n     * @param bool $expected\n     * @param array $messages\n     */\n    public function testBasic($options, array $isValidParam, $expected, array $messages)\n    {\n        $validator = new ExcludeMimeType($options);\n        $validator->enableHeaderCheck();\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        $this->assertEquals($messages, $validator->getMessages());\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new ExcludeMimeType($options);\n            $validator->enableHeaderCheck();\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMimeType()\n    {\n        $validator = new ExcludeMimeType('image/gif');\n        $this->assertEquals('image/gif', $validator->getMimeType());\n\n        $validator = new ExcludeMimeType(['image/gif', 'video', 'text/test']);\n        $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());\n\n        $validator = new ExcludeMimeType(['image/gif', 'video', 'text/test']);\n        $this->assertEquals(['image/gif', 'video', 'text/test'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that setMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMimeType()\n    {\n        $validator = new ExcludeMimeType('image/gif');\n        $validator->setMimeType('image/jpeg');\n        $this->assertEquals('image/jpeg', $validator->getMimeType());\n        $this->assertEquals(['image/jpeg'], $validator->getMimeType(true));\n\n        $validator->setMimeType('image/gif, text/test');\n        $this->assertEquals('image/gif,text/test', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text/test'], $validator->getMimeType(true));\n\n        $validator->setMimeType(['video/mpeg', 'gif']);\n        $this->assertEquals('video/mpeg,gif', $validator->getMimeType());\n        $this->assertEquals(['video/mpeg', 'gif'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that addMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testAddMimeType()\n    {\n        $validator = new ExcludeMimeType('image/gif');\n        $validator->addMimeType('text');\n        $this->assertEquals('image/gif,text', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text'], $validator->getMimeType(true));\n\n        $validator->addMimeType('jpg, to');\n        $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to'], $validator->getMimeType(true));\n\n        $validator->addMimeType(['zip', 'ti']);\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n\n        $validator->addMimeType('');\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new ExcludeMimeType();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(ExcludeMimeType::NOT_READABLE, $validator->getMessages());\n        $this->assertNotEmpty($validator->getMessages()[ExcludeMimeType::NOT_READABLE]);\n    }\n\n    public function testEmptyArrayFileShouldReturnFalseAdnDisplayNotFoundMessage()\n    {\n        $validator = new ExcludeMimeType();\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(ExcludeMimeType::NOT_READABLE, $validator->getMessages());\n        $this->assertNotEmpty($validator->getMessages()[ExcludeMimeType::NOT_READABLE]);\n    }\n\n    public function testIsValidRaisesExceptionWithArrayNotInFilesFormat()\n    {\n        $validator = new ExcludeMimeType('image\\gif');\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/ExistsTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass ExistsTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $baseDir  = dirname($testFile);\n        $baseName = basename($testFile);\n        $fileUpload = [\n            'tmp_name' => $testFile, 'name' => basename($testFile),\n            'size' => 200, 'error' => 0, 'type' => 'text'\n        ];\n        return [\n            //    Options, isValid Param, Expected value\n            [dirname($baseDir), $baseName,   false],\n            [$baseDir,          $baseName,   true],\n            [$baseDir,          $testFile,   true],\n            [dirname($baseDir), $fileUpload, false],\n            [$baseDir,          $fileUpload, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\Exists($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Exists($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testGetDirectory()\n    {\n        $validator = new File\\Exists('C:/temp');\n        $this->assertEquals('C:/temp', $validator->getDirectory());\n\n        $validator = new File\\Exists(['temp', 'dir', 'jpg']);\n        $this->assertEquals('temp,dir,jpg', $validator->getDirectory());\n\n        $validator = new File\\Exists(['temp', 'dir', 'jpg']);\n        $this->assertEquals(['temp', 'dir', 'jpg'], $validator->getDirectory(true));\n    }\n\n    /**\n     * Ensures that setDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testSetDirectory()\n    {\n        $validator = new File\\Exists('temp');\n        $validator->setDirectory('gif');\n        $this->assertEquals('gif', $validator->getDirectory());\n        $this->assertEquals(['gif'], $validator->getDirectory(true));\n\n        $validator->setDirectory('jpg, temp');\n        $this->assertEquals('jpg,temp', $validator->getDirectory());\n        $this->assertEquals(['jpg', 'temp'], $validator->getDirectory(true));\n\n        $validator->setDirectory(['zip', 'ti']);\n        $this->assertEquals('zip,ti', $validator->getDirectory());\n        $this->assertEquals(['zip', 'ti'], $validator->getDirectory(true));\n    }\n\n    /**\n     * Ensures that addDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testAddDirectory()\n    {\n        $validator = new File\\Exists('temp');\n        $validator->addDirectory('gif');\n        $this->assertEquals('temp,gif', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif'], $validator->getDirectory(true));\n\n        $validator->addDirectory('jpg, to');\n        $this->assertEquals('temp,gif,jpg,to', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to'], $validator->getDirectory(true));\n\n        $validator->addDirectory(['zip', 'ti']);\n        $this->assertEquals('temp,gif,jpg,to,zip,ti', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getDirectory(true));\n\n        $validator->addDirectory('');\n        $this->assertEquals('temp,gif,jpg,to,zip,ti', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getDirectory(true));\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Exists(__DIR__);\n        $this->assertFalse($validator->isValid('nofile.mo'));\n        $this->assertArrayHasKey('fileExistsDoesNotExist', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileArrayShouldReturnFalse()\n    {\n        $validator = new File\\Exists();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Exists::DOES_NOT_EXIST, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Exists::DOES_NOT_EXIST, $validator->getMessages());\n    }\n\n    public function testIsValidShouldThrowInvalidArgumentExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\Exists();\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n\n    public function invalidDirectoryArguments()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidDirectoryArguments\n     */\n    public function testAddDirectoryShouldRaiseExceptionForInvalidArgument($value)\n    {\n        $validator = new File\\Exists();\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->addDirectory($value);\n    }\n}\n"
  },
  {
    "path": "test/File/ExtensionTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass ExtensionTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile   = __DIR__ . '/_files/testsize.mo';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            ['mo',                       $testFile, true,  ''],\n            ['gif',                      $testFile, false, 'fileExtensionFalse'],\n            [['mo'],                $testFile, true,  ''],\n            [['gif'],               $testFile, false, 'fileExtensionFalse'],\n            [['gif', 'mo', 'pict'], $testFile, true,  ''],\n            [['gif', 'gz', 'hint'], $testFile, false, 'fileExtensionFalse'],\n        ];\n\n        $testFile   = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['mo', $testFile, false, 'fileExtensionNotFound'],\n            [['extension' => 'mo', 'allowNonExistentFile' => true], $testFile, true, ''],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n\n\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\Extension($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Extension($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function testZF3891()\n    {\n        $files = [\n            'name'     => 'testsize.mo',\n            'type'     => 'text',\n            'size'     => 200,\n            'tmp_name' => __DIR__ . '/_files/testsize.mo',\n            'error'    => 0\n        ];\n        $validator = new File\\Extension(['MO', 'case' => true]);\n        $this->assertEquals(false, $validator->isValid(__DIR__ . '/_files/testsize.mo', $files));\n\n        $validator = new File\\Extension(['MO', 'case' => false]);\n        $this->assertEquals(true, $validator->isValid(__DIR__ . '/_files/testsize.mo', $files));\n    }\n\n    /**\n     * Ensures that getExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testGetExtension()\n    {\n        $validator = new File\\Extension('mo');\n        $this->assertEquals(['mo'], $validator->getExtension());\n\n        $validator = new File\\Extension(['mo', 'gif', 'jpg']);\n        $this->assertEquals(['mo', 'gif', 'jpg'], $validator->getExtension());\n    }\n\n    /**\n     * Ensures that setExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testSetExtension()\n    {\n        $validator = new File\\Extension('mo');\n        $validator->setExtension('gif');\n        $this->assertEquals(['gif'], $validator->getExtension());\n\n        $validator->setExtension('jpg, mo');\n        $this->assertEquals(['jpg', 'mo'], $validator->getExtension());\n\n        $validator->setExtension(['zip', 'ti']);\n        $this->assertEquals(['zip', 'ti'], $validator->getExtension());\n    }\n\n    /**\n     * Ensures that addExtension() returns expected value\n     *\n     * @return void\n     */\n    public function testAddExtension()\n    {\n        $validator = new File\\Extension('mo');\n        $validator->addExtension('gif');\n        $this->assertEquals(['mo', 'gif'], $validator->getExtension());\n\n        $validator->addExtension('jpg, to');\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to'], $validator->getExtension());\n\n        $validator->addExtension(['zip', 'ti']);\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getExtension());\n\n        $validator->addExtension('');\n        $this->assertEquals(['mo', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getExtension());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Extension('gif');\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileExtensionNotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Extension('foo');\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Extension::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Extension::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testIsValidRaisesExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\Extension('foo');\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/FileInformationTraitTest.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2019 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Prophecy\\Prophecy\\ObjectProphecy;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse ZendTest\\Validator\\File\\TestAsset\\FileInformation;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\nclass FileInformationTraitTest extends TestCase\n{\n    /** @var ObjectProphecy|StreamInterface */\n    public $stream;\n\n    /** @var ObjectProphecy */\n    public $upload;\n\n    public function setUp()\n    {\n        $this->stream = $this->prophesize(StreamInterface::class);\n        $this->upload = $this->prophesize(UploadedFileInterface::class);\n    }\n\n    public function testLegacyFileInfoBasic()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $basename = basename($testFile);\n        $file = [\n          'name'     => $basename,\n          'tmp_name' => $testFile\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $basename,\n            $file\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n        ]);\n    }\n\n    public function testLegacyFileInfoWithFiletype()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $basename = basename($testFile);\n        $file = [\n          'name'     => $basename,\n          'tmp_name' => $testFile,\n          'type' => 'mo',\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $basename,\n            $file,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n          'filetype' => $file['type'],\n        ]);\n    }\n\n    public function testLegacyFileInfoWithBasename()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $basename = basename($testFile);\n        $file = [\n          'name'     => $basename,\n          'tmp_name' => $testFile,\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $basename,\n            $file,\n            false,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n          'basename' => basename($file['tmp_name']),\n        ]);\n    }\n\n    public function testSapiFileInfoBasic()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $file = [\n          'name'     => basename($testFile),\n          'tmp_name' => $testFile\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $file\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n        ]);\n    }\n\n    public function testSapiFileInfoWithFiletype()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $file = [\n          'name'     => basename($testFile),\n          'tmp_name' => $testFile,\n          'type'     => 'mo',\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $file,\n            null,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n          'filetype' => $file['type'],\n        ]);\n    }\n\n    public function testSapiFileInfoWithBasename()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $file = [\n          'name'     => basename($testFile),\n          'tmp_name' => $testFile,\n        ];\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $file,\n            null,\n            false,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => $file['name'],\n          'file'     => $file['tmp_name'],\n          'basename' => basename($file['tmp_name']),\n        ]);\n    }\n\n    public function testPsr7FileInfoBasic()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $this->stream->getMetadata('uri')->willReturn($testFile);\n        $this->upload->getClientFilename()->willReturn(basename($testFile));\n        $this->upload->getClientMediaType()->willReturn(mime_content_type($testFile));\n        $this->upload->getStream()->willReturn($this->stream->reveal());\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $this->upload->reveal()\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n        ]);\n    }\n\n    public function testPsr7FileInfoBasicWithFiletype()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $this->stream->getMetadata('uri')->willReturn($testFile);\n        $this->upload->getClientFilename()->willReturn(basename($testFile));\n        $this->upload->getClientMediaType()->willReturn(mime_content_type($testFile));\n        $this->upload->getStream()->willReturn($this->stream->reveal());\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $this->upload->reveal(),\n            null,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n          'filetype' => mime_content_type($testFile),\n        ]);\n    }\n\n    public function testPsr7FileInfoBasicWithBasename()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $this->stream->getMetadata('uri')->willReturn($testFile);\n        $this->upload->getClientFilename()->willReturn(basename($testFile));\n        $this->upload->getClientMediaType()->willReturn(mime_content_type($testFile));\n        $this->upload->getStream()->willReturn($this->stream->reveal());\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $this->upload->reveal(),\n            null,\n            false,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n          'basename' => basename($testFile),\n        ]);\n    }\n\n    public function testFileBasedFileInfoBasic()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $testFile\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n        ]);\n    }\n\n    public function testFileBasedFileInfoBasicWithFiletype()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $testFile,\n            null,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n          'filetype' => null\n        ]);\n    }\n\n    public function testFileBasedFileInfoBasicWithBasename()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n\n        $fileInformation = new FileInformation();\n        $fileInfo = $fileInformation->checkFileInformation(\n            $testFile,\n            null,\n            false,\n            true\n        );\n\n        $this->assertEquals($fileInfo, [\n          'filename' => basename($testFile),\n          'file'     => $testFile,\n          'basename' => basename($testFile)\n        ]);\n    }\n}\n"
  },
  {
    "path": "test/File/FilesSizeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass FilesSizeTest extends TestCase\n{\n    /** @var bool */\n    public $multipleOptionsDetected;\n\n    public function setUp()\n    {\n        $this->multipleOptionsDetected = false;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $valuesExpected = [\n            [['min' => 0, 'max' => 2000], true, true, false],\n            [['min' => 0, 'max' => '2 MB'], true, true, true],\n            [['min' => 0, 'max' => '2MB'], true, true, true],\n            [['min' => 0, 'max' => '2  MB'], true, true, true],\n            [2000, true, true, false],\n            [['min' => 0, 'max' => 500], false, false, false],\n            [500, false, false, false]\n        ];\n\n        foreach ($valuesExpected as $element) {\n            $validator = new File\\FilesSize($element[0]);\n            $this->assertEquals(\n                $element[1],\n                $validator->isValid(__DIR__ . '/_files/testsize.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n            $this->assertEquals(\n                $element[2],\n                $validator->isValid(__DIR__ . '/_files/testsize2.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n            $this->assertEquals(\n                $element[3],\n                $validator->isValid(__DIR__ . '/_files/testsize3.mo'),\n                \"Tested with \" . var_export($element, 1)\n            );\n        }\n\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 200]);\n        $this->assertEquals(false, $validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileFilesSizeNotReadable', $validator->getMessages());\n\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 500000]);\n        $this->assertEquals(true, $validator->isValid([\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize2.mo']));\n        $this->assertEquals(true, $validator->isValid(__DIR__ . '/_files/testsize.mo'));\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new File\\FilesSize(['min' => 1, 'max' => 100]);\n        $this->assertEquals('1B', $validator->getMin());\n\n        $validator = new File\\FilesSize(['min' => 1, 'max' => 100]);\n        $this->assertEquals('1B', $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\FilesSize(['min' => 100, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMin() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMin()\n    {\n        $validator = new File\\FilesSize(['min' => 1000, 'max' => 10000]);\n        $validator->setMin(100);\n        $this->assertEquals('100B', $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setMin(20000);\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new File\\FilesSize(['min' => 1, 'max' => 100]);\n        $this->assertEquals('100B', $validator->getMax());\n\n        $validator = new File\\FilesSize(['min' => 1, 'max' => 100000]);\n        $this->assertEquals('97.66kB', $validator->getMax());\n\n        $validator = new File\\FilesSize(2000);\n        $validator->useByteString(false);\n        $test = $validator->getMax();\n        $this->assertEquals('2000', $test);\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\FilesSize(['min' => 100, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMax() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMax()\n    {\n        $validator = new File\\FilesSize(['min' => 1000, 'max' => 10000]);\n        $validator->setMax(1000000);\n        $this->assertEquals('976.56kB', $validator->getMax());\n\n        $validator->setMin(100);\n        $this->assertEquals('976.56kB', $validator->getMax());\n    }\n\n    public function testConstructorShouldRaiseErrorWhenPassedMultipleOptions()\n    {\n        $handler = set_error_handler([$this, 'errorHandler'], E_USER_NOTICE);\n        $validator = new File\\FilesSize(1000, 10000);\n        restore_error_handler();\n    }\n\n    /**\n     * Ensures that the validator returns size infos\n     *\n     * @return void\n     */\n    public function testFailureMessage()\n    {\n        $validator = new File\\FilesSize(['min' => 9999, 'max' => 10000]);\n        $this->assertFalse($validator->isValid([\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize2.mo',\n        ]));\n        $messages = $validator->getMessages();\n        $this->assertContains('9.76kB', current($messages));\n        $this->assertContains('1.55kB', current($messages));\n\n        $validator = new File\\FilesSize(['min' => 9999, 'max' => 10000, 'useByteString' => false]);\n        $this->assertFalse($validator->isValid([\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize.mo',\n            __DIR__ . '/_files/testsize2.mo',\n        ]));\n        $messages = $validator->getMessages();\n        $this->assertContains('9999', current($messages));\n        $this->assertContains('1588', current($messages));\n    }\n\n    public function errorHandler($errno, $errstr)\n    {\n        if (strstr($errstr, 'deprecated')) {\n            $this->multipleOptionsDetected = true;\n        }\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\FilesSize(0);\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\FilesSize::NOT_READABLE, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\FilesSize::NOT_READABLE, $validator->getMessages());\n    }\n\n    public function testFilesFormat()\n    {\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 2000]);\n\n        $this->assertTrue(\n            $validator->isValid($this->createFileInfo(__DIR__ . '/_files/testsize.mo'))\n        );\n        $this->assertTrue(\n            $validator->isValid($this->createFileInfo(__DIR__ . '/_files/testsize2.mo'))\n        );\n        $this->assertFalse(\n            $validator->isValid($this->createFileInfo(__DIR__ . '/_files/testsize3.mo'))\n        );\n\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 500000]);\n\n        $this->assertTrue($validator->isValid([\n            $this->createFileInfo(__DIR__ . '/_files/testsize.mo'),\n            $this->createFileInfo(__DIR__ . '/_files/testsize.mo'),\n            $this->createFileInfo(__DIR__ . '/_files/testsize2.mo'),\n        ]));\n    }\n\n    public function testIllegalFilesFormat()\n    {\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 2000]);\n        $this->expectException(InvalidArgumentException::class);\n        $validator->isValid([\n            [\n                'error' => 0\n            ],\n        ]);\n    }\n\n    private function createFileInfo($file)\n    {\n        return [\n            'tmp_name' => $file,\n            'name'     => basename($file),\n            'error'    => 0,\n            'type'     => '',\n            'size'     => filesize($file),\n        ];\n    }\n\n    public function testConstructorCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $min              = 0;\n        $max              = 10;\n        $useBytesAsString = false;\n\n        $validator = new File\\FilesSize($min, $max, $useBytesAsString);\n\n        $this->assertEquals($min, $validator->getMin(true));\n        $this->assertEquals($max, $validator->getMax(true));\n        $this->assertSame($useBytesAsString, $validator->getByteString());\n    }\n\n    public function testIsValidRaisesExceptionForArrayValueNotInFilesFormat()\n    {\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 2000]);\n        $value     = [['foo' => 'bar']];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/HashTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionProperty;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\File;\n\n/**\n * Hash testbed\n *\n * @group      Zend_Validator\n */\nclass HashTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            ['3f8d07e2',                    $testFile, true, ''],\n            ['9f8d07e2',                    $testFile, false, 'fileHashDoesNotMatch'],\n            [['9f8d07e2', '3f8d07e2'], $testFile, true, ''],\n            [['9f8d07e2', '7f8d07e2'], $testFile, false, 'fileHashDoesNotMatch'],\n            [\n                ['ed74c22109fe9f110579f77b053b8bc3', 'algorithm' => 'md5'],\n                $testFile, true, ''\n            ],\n            [\n                ['4d74c22109fe9f110579f77b053b8bc3', 'algorithm' => 'md5'],\n                $testFile, false, 'fileHashDoesNotMatch'\n            ],\n            [\n                ['4d74c22109fe9f110579f77b053b8bc3', 'ed74c22109fe9f110579f77b053b8bc3', 'algorithm' => 'md5'],\n                $testFile, true, ''\n            ],\n            [\n                ['4d74c22109fe9f110579f77b053b8bc3', '7d74c22109fe9f110579f77b053b8bc3', 'algorithm' => 'md5'],\n                $testFile, false, 'fileHashDoesNotMatch'\n            ],\n        ];\n\n        $testFile = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['3f8d07e2', $testFile, false, 'fileHashNotFound'],\n        ];\n\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $sizeFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['ffeb8d5d', $testFile, true,  ''],\n            ['9f8d07e2', $testFile, false, 'fileHashDoesNotMatch'],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests, $sizeFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\Hash($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Hash($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * Ensures that getHash() returns expected value\n     *\n     * @return void\n     */\n    public function testgetHash()\n    {\n        $validator = new File\\Hash('12345');\n        $this->assertEquals(['12345' => 'crc32'], $validator->getHash());\n\n        $validator = new File\\Hash(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'crc32', '12333' => 'crc32', '12344' => 'crc32'], $validator->getHash());\n    }\n\n    /**\n     * Ensures that setHash() returns expected value\n     *\n     * @return void\n     */\n    public function testSetHash()\n    {\n        $validator = new File\\Hash('12345');\n        $validator->setHash('12333');\n        $this->assertEquals(['12333' => 'crc32'], $validator->getHash());\n\n        $validator->setHash(['12321', '12121']);\n        $this->assertEquals(['12321' => 'crc32', '12121' => 'crc32'], $validator->getHash());\n    }\n\n    /**\n     * Ensures that addHash() returns expected value\n     *\n     * @return void\n     */\n    public function testAddHash()\n    {\n        $validator = new File\\Hash('12345');\n        $validator->addHash('12344');\n        $this->assertEquals(['12345' => 'crc32', '12344' => 'crc32'], $validator->getHash());\n\n        $validator->addHash(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'crc32', '12344' => 'crc32', '12321' => 'crc32', '12121' => 'crc32'],\n            $validator->getHash()\n        );\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Hash('3f8d07e2');\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileHashNotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Hash();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Hash::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Hash::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function invalidHashTypes()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidHashTypes\n     */\n    public function testAddHashRaisesExceptionForInvalidType($value)\n    {\n        $validator = new File\\Hash('12345');\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('False parameter given');\n        $validator->addHash($value);\n    }\n\n    public function testAddHashRaisesExceptionWithInvalidAlgorithm()\n    {\n        $validator = new File\\Hash('12345');\n        $algorithm = 'foobar123';\n        $options   = ['algorithm' => $algorithm];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage(sprintf(\"Unknown algorithm '%s'\", $algorithm));\n        $validator->addHash($options);\n    }\n\n    public function testIsValidRaisesExceptionForArrayValueNotInFilesFormat()\n    {\n        $validator = new File\\Hash('12345');\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n\n    public function testConstructorCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $algorithm = 'md5';\n        $validator = new File\\Hash('12345', $algorithm);\n\n        $r = new ReflectionProperty($validator, 'options');\n        $r->setAccessible(true);\n        $options = $r->getValue($validator);\n        $this->assertSame($algorithm, $options['algorithm']);\n    }\n\n    /**\n     * @dataProvider invalidHashTypes\n     *\n     * @param mixed $hash\n     */\n    public function testInvalidHashProvidedInArrayFormat($hash)\n    {\n        $validator = new File\\Hash('12345');\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Hash must be a string');\n        $validator->addHash([$hash]);\n    }\n\n    public function testIntHash()\n    {\n        $validator = new File\\Hash('10713230');\n\n        self::assertTrue($validator->isValid(__DIR__ . '/_files/crc32-int.pdf'));\n    }\n\n    public function testHashMustMatchWithTheAlgorithm()\n    {\n        $validator = new File\\Hash();\n        // swapped hashes for given algorithms\n        $validator->addHash(['6507f172bceb9ed0cc59246d41569c4d', 'algorithm' => 'crc32']);\n        $validator->addHash(['10713230', 'algorithm' => 'md5']);\n\n        self::assertFalse($validator->isValid(__DIR__ . '/_files/crc32-int.pdf'));\n    }\n}\n"
  },
  {
    "path": "test/File/ImageSizeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass ImageSizeTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            [\n                ['minWidth' => 0,   'minHeight' => 10,  'maxWidth' => 1000, 'maxHeight' => 2000],\n                $testFile, true, ''\n            ],\n            [\n                ['minWidth' => 0,   'minHeight' => 0,   'maxWidth' => 200,  'maxHeight' => 200],\n                $testFile, true, ''\n            ],\n            [\n                ['minWidth' => 150, 'minHeight' => 150, 'maxWidth' => 200,  'maxHeight' => 200],\n                $testFile, false, ['fileImageSizeWidthTooSmall', 'fileImageSizeHeightTooSmall']\n            ],\n            [\n                ['minWidth' => 80,  'minHeight' => 0,   'maxWidth' => 80,   'maxHeight' => 200],\n                $testFile, true, ''\n            ],\n            [\n                ['minWidth' => 0,   'minHeight' => 0,   'maxWidth' => 60,   'maxHeight' => 200],\n                $testFile, false, 'fileImageSizeWidthTooBig'\n            ],\n            [\n                ['minWidth' => 90,  'minHeight' => 0,   'maxWidth' => 200,  'maxHeight' => 200],\n                $testFile, false, 'fileImageSizeWidthTooSmall'\n            ],\n            [\n                ['minWidth' => 0,   'minHeight' => 0,   'maxWidth' => 200,  'maxHeight' => 80],\n                $testFile, false, 'fileImageSizeHeightTooBig'\n            ],\n            [\n                ['minWidth' => 0,   'minHeight' => 110, 'maxWidth' => 200,  'maxHeight' => 140],\n                $testFile, false, 'fileImageSizeHeightTooSmall'\n            ],\n        ];\n\n        $testFile = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            [\n                ['minWidth' => 0, 'minHeight' => 10, 'maxWidth' => 1000, 'maxHeight' => 2000],\n                $testFile, false, 'fileImageSizeNotReadable'\n            ],\n        ];\n\n        $testFile = __DIR__ . '/_files/badpicture.jpg';\n        $badPicTests = [\n            //    Options, isValid Param, Expected value, message\n            [\n                ['minWidth' => 0, 'minHeight' => 10, 'maxWidth' => 1000, 'maxHeight' => 2000],\n                $testFile, false,  'fileImageSizeNotDetected'\n            ],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests, $badPicTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKeys)\n    {\n        $validator = new File\\ImageSize($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            if (! is_array($messageKeys)) {\n                $messageKeys = [$messageKeys];\n            }\n            foreach ($messageKeys as $messageKey) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKeys)\n    {\n        // Test legacy Zend\\Transfer API\n        if (is_array($isValidParam)) {\n            $validator = new File\\ImageSize($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                if (! is_array($messageKeys)) {\n                    $messageKeys = [$messageKeys];\n                }\n                foreach ($messageKeys as $messageKey) {\n                    $this->assertArrayHasKey($messageKey, $validator->getMessages());\n                }\n            }\n        }\n    }\n\n    /**\n     * Ensures that getImageMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetImageMin()\n    {\n        $validator = new File\\ImageSize(['minWidth' => 1, 'minHeight' => 10, 'maxWidth' => 100, 'maxHeight' => 1000]);\n        $this->assertEquals(['minWidth' => 1, 'minHeight' => 10], $validator->getImageMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\ImageSize(['minWidth' => 1000, 'minHeight' => 100, 'maxWidth' => 10, 'maxHeight' => 1]);\n    }\n\n    /**\n     * Ensures that setImageMin() returns expected value\n     *\n     * @return void\n     */\n    public function testSetImageMin()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 100,\n            'minHeight' => 1000,\n            'maxWidth'  => 10000,\n            'maxHeight' => 100000,\n        ]);\n        $validator->setImageMin(['minWidth' => 10, 'minHeight' => 10]);\n        $this->assertEquals(['minWidth' => 10, 'minHeight' => 10], $validator->getImageMin());\n\n        $validator->setImageMin(['minWidth' => 9, 'minHeight' => 100]);\n        $this->assertEquals(['minWidth' => 9, 'minHeight' => 100], $validator->getImageMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setImageMin(['minWidth' => 20000, 'minHeight' => 20000]);\n    }\n\n    /**\n     * Ensures that getImageMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetImageMax()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 10,\n            'minHeight' => 100,\n            'maxWidth'  => 1000,\n            'maxHeight' => 10000,\n        ]);\n        $this->assertEquals(['maxWidth' => 1000, 'maxHeight' => 10000], $validator->getImageMax());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\ImageSize([\n            'minWidth'  => 10000,\n            'minHeight' => 1000,\n            'maxWidth'  => 100,\n            'maxHeight' => 10,\n        ]);\n    }\n\n    /**\n     * Ensures that setImageMax() returns expected value\n     *\n     * @return void\n     */\n    public function testSetImageMax()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 10,\n            'minHeight' => 100,\n            'maxWidth'  => 1000,\n            'maxHeight' => 10000,\n        ]);\n        $validator->setImageMax(['maxWidth' => 100, 'maxHeight' => 100]);\n        $this->assertEquals(['maxWidth' => 100, 'maxHeight' => 100], $validator->getImageMax());\n\n        $validator->setImageMax(['maxWidth' => 110, 'maxHeight' => 1000]);\n        $this->assertEquals(['maxWidth' => 110, 'maxHeight' => 1000], $validator->getImageMax());\n\n        $validator->setImageMax(['maxHeight' => 1100]);\n        $this->assertEquals(['maxWidth' => 110, 'maxHeight' => 1100], $validator->getImageMax());\n\n        $validator->setImageMax(['maxWidth' => 120]);\n        $this->assertEquals(['maxWidth' => 120, 'maxHeight' => 1100], $validator->getImageMax());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator->setImageMax(['maxWidth' => 10000, 'maxHeight' => 1]);\n    }\n\n    /**\n     * Ensures that getImageWidth() returns expected value\n     *\n     * @return void\n     */\n    public function testGetImageWidth()\n    {\n        $validator = new File\\ImageSize(['minWidth' => 1, 'minHeight' => 10, 'maxWidth' => 100, 'maxHeight' => 1000]);\n        $this->assertEquals(['minWidth' => 1, 'maxWidth' => 100], $validator->getImageWidth());\n    }\n\n    /**\n     * Ensures that setImageWidth() returns expected value\n     *\n     * @return void\n     */\n    public function testSetImageWidth()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 100,\n            'minHeight' => 1000,\n            'maxWidth'  => 10000,\n            'maxHeight' => 100000,\n        ]);\n        $validator->setImageWidth(['minWidth' => 2000, 'maxWidth' => 2200]);\n        $this->assertEquals(['minWidth' => 2000, 'maxWidth' => 2200], $validator->getImageWidth());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setImageWidth(['minWidth' => 20000, 'maxWidth' => 200]);\n    }\n\n    /**\n     * Ensures that getImageHeight() returns expected value\n     *\n     * @return void\n     */\n    public function testGetImageHeight()\n    {\n        $validator = new File\\ImageSize(['minWidth' => 1, 'minHeight' => 10, 'maxWidth' => 100, 'maxHeight' => 1000]);\n        $this->assertEquals(['minHeight' => 10, 'maxHeight' => 1000], $validator->getImageHeight());\n    }\n\n    /**\n     * Ensures that setImageHeight() returns expected value\n     *\n     * @return void\n     */\n    public function testSetImageHeight()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 100,\n            'minHeight' => 1000,\n            'maxWidth'  => 10000,\n            'maxHeight' => 100000,\n        ]);\n        $validator->setImageHeight(['minHeight' => 2000, 'maxHeight' => 2200]);\n        $this->assertEquals(['minHeight' => 2000, 'maxHeight' => 2200], $validator->getImageHeight());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setImageHeight(['minHeight' => 20000, 'maxHeight' => 200]);\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 100,\n            'minHeight' => 1000,\n            'maxWidth'  => 10000,\n            'maxHeight' => 100000,\n        ]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileImageSizeNotReadable', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\ImageSize();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\ImageSize::NOT_READABLE, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\ImageSize::NOT_READABLE, $validator->getMessages());\n    }\n\n    public function testConstructorCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $minWidth  = 20;\n        $minHeight = 10;\n        $maxWidth  = 200;\n        $maxHeight = 100;\n        $validator = new File\\ImageSize($minWidth, $minHeight, $maxWidth, $maxHeight);\n\n        $this->assertSame($minWidth, $validator->getMinWidth());\n        $this->assertSame($minHeight, $validator->getMinHeight());\n        $this->assertSame($maxWidth, $validator->getMaxWidth());\n        $this->assertSame($maxHeight, $validator->getMaxHeight());\n    }\n\n    public function testIsValidRaisesExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\ImageSize([\n            'minWidth'  => 100,\n            'minHeight' => 1000,\n            'maxWidth'  => 10000,\n            'maxHeight' => 100000,\n        ]);\n        $value = ['foo' => 'bar'];\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/IsCompressedTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\n\n/**\n * IsCompressed testbed\n *\n * @group      Zend_Validator\n */\nclass IsCompressedTest extends TestCase\n{\n    protected function getMagicMime()\n    {\n        // PHP 7 uses yet another version of libmagic, and thus a new magic\n        // database format.\n        if (version_compare(PHP_VERSION, '7.0', '>=')) {\n            return __DIR__ . '/_files/magic.7.mime';\n        }\n\n        // As of PHP >= 5.3.11 and >= 5.4.1 the magic database format has changed.\n        // http://doc.php.net/downloads/pdf/split/de/File-Information.pdf (page 11)\n        if (version_compare(PHP_VERSION, '5.4', '>=')\n                && version_compare(PHP_VERSION, '5.4.1', '<')\n        ) {\n            return __DIR__ . '/_files/magic.lte.5.3.10.mime';\n        }\n\n        return __DIR__ . '/_files/magic.mime';\n    }\n\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/test.zip';\n\n        // Sometimes finfo gives application/zip and sometimes\n        // application/x-zip ...\n        $expectedMimeType = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $testFile);\n\n        $allowed          = ['application/zip', 'application/x-zip'];\n        $fileUpload       = [\n            'tmp_name' => $testFile,\n            'name'     => basename($testFile),\n            'size'     => 200,\n            'error'    => 0,\n            'type'     => in_array($expectedMimeType, $allowed) ? $expectedMimeType : 'application/zip',\n        ];\n\n        return [\n            //    Options, isValid Param, Expected value\n            [null,                                                               $fileUpload, true],\n            ['zip',                                                              $fileUpload, true],\n            ['test/notype',                                                      $fileUpload, false],\n            ['application/x-zip, application/zip, application/x-tar',            $fileUpload, true],\n            [['application/x-zip', 'application/zip', 'application/x-tar'], $fileUpload, true],\n            [['zip', 'tar'],                                                $fileUpload, true],\n            [['tar', 'arj'],                                                $fileUpload, false],\n        ];\n    }\n\n    /**\n     * Skip a test if the file info extension is missing\n     */\n    protected function skipIfNoFileInfoExtension()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped(\n                'This PHP Version has no finfo extension'\n            );\n        }\n    }\n\n    /**\n     * Skip a test if finfo returns buggy information\n     */\n    protected function skipIfBuggyMimeContentType($options)\n    {\n        if (! is_array($options)) {\n            $options = (array) $options;\n        }\n\n        if (! in_array('application/zip', $options)) {\n            // finfo does not play a role; no need to skip\n            return;\n        }\n\n        // Sometimes finfo gives application/zip and sometimes\n        // application/x-zip ...\n        $expectedMimeType = finfo_file(finfo_open(FILEINFO_MIME_TYPE), __DIR__ . '/_files/test.zip');\n        if (! in_array($expectedMimeType, ['application/zip', 'application/x-zip'])) {\n            $this->markTestSkipped('finfo exhibits buggy behavior on this system!');\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $this->skipIfNoFileInfoExtension();\n        $this->skipIfBuggyMimeContentType($options);\n\n        $validator = new File\\IsCompressed($options);\n        $validator->enableHeaderCheck();\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (! is_array($isValidParam)) {\n            // nothing to test\n            return;\n        }\n\n        $this->skipIfNoFileInfoExtension();\n        $this->skipIfBuggyMimeContentType($options);\n\n        $validator = new File\\IsCompressed($options);\n        $validator->enableHeaderCheck();\n        $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n    }\n\n    /**\n     * Ensures that getMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMimeType()\n    {\n        $validator = new File\\IsCompressed('image/gif');\n        $this->assertEquals('image/gif', $validator->getMimeType());\n\n        $validator = new File\\IsCompressed(['image/gif', 'video', 'text/test']);\n        $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());\n\n        $validator = new File\\IsCompressed(['image/gif', 'video', 'text/test']);\n        $this->assertEquals(['image/gif', 'video', 'text/test'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that setMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMimeType()\n    {\n        $validator = new File\\IsCompressed('image/gif');\n        $validator->setMimeType('image/jpeg');\n        $this->assertEquals('image/jpeg', $validator->getMimeType());\n        $this->assertEquals(['image/jpeg'], $validator->getMimeType(true));\n\n        $validator->setMimeType('image/gif, text/test');\n        $this->assertEquals('image/gif,text/test', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text/test'], $validator->getMimeType(true));\n\n        $validator->setMimeType(['video/mpeg', 'gif']);\n        $this->assertEquals('video/mpeg,gif', $validator->getMimeType());\n        $this->assertEquals(['video/mpeg', 'gif'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that addMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testAddMimeType()\n    {\n        $validator = new File\\IsCompressed('image/gif');\n        $validator->addMimeType('text');\n        $this->assertEquals('image/gif,text', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text'], $validator->getMimeType(true));\n\n        $validator->addMimeType('jpg, to');\n        $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to'], $validator->getMimeType(true));\n\n        $validator->addMimeType(['zip', 'ti']);\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n\n        $validator->addMimeType('');\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n    }\n\n    /**\n     * @ZF-8111\n     */\n    public function testErrorMessages()\n    {\n        $files = [\n            'name'     => 'picture.jpg',\n            'type'     => 'image/jpeg',\n            'size'     => 200,\n            'tmp_name' => __DIR__ . '/_files/picture.jpg',\n            'error'    => 0\n        ];\n\n        $validator = new File\\IsCompressed('test/notype');\n        $validator->enableHeaderCheck();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/picture.jpg', $files));\n        $error = $validator->getMessages();\n        $this->assertArrayHasKey('fileIsCompressedFalseType', $error);\n    }\n\n    public function testOptionsAtConstructor()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped('This PHP Version has no finfo installed');\n        }\n\n        $magicFile = $this->getMagicMime();\n        $validator = new File\\IsCompressed([\n            'image/gif',\n            'image/jpg',\n            'magicFile'   => $magicFile,\n            'enableHeaderCheck' => true]);\n\n        $this->assertEquals($magicFile, $validator->getMagicFile());\n        $this->assertTrue($validator->getHeaderCheck());\n        $this->assertEquals('image/gif,image/jpg', $validator->getMimeType());\n    }\n\n    public function testNonMimeOptionsAtConstructorStillSetsDefaults()\n    {\n        $validator = new File\\IsCompressed([\n            'enableHeaderCheck' => true,\n        ]);\n\n        $this->assertNotEmpty($validator->getMimeType());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\IsCompressed();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileIsCompressedNotReadable', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n}\n"
  },
  {
    "path": "test/File/IsImageTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\n\n/**\n * IsImage testbed\n *\n * @group      Zend_Validator\n */\nclass IsImageTest extends TestCase\n{\n    protected function getMagicMime()\n    {\n        // PHP 7 uses yet another version of libmagic, and thus a new magic\n        // database format.\n        if (version_compare(PHP_VERSION, '7.0', '>=')) {\n            return __DIR__ . '/_files/magic.7.mime';\n        }\n\n        // As of PHP >= 5.3.11 and >= 5.4.1 the magic database format has changed.\n        // http://doc.php.net/downloads/pdf/split/de/File-Information.pdf (page 11)\n        if (version_compare(PHP_VERSION, '5.4', '>=')\n                && version_compare(PHP_VERSION, '5.4.1', '<')\n        ) {\n            return __DIR__ . '/_files/magic.lte.5.3.10.mime';\n        }\n\n        return __DIR__ . '/_files/magic.mime';\n    }\n\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $fileUpload = [\n            'tmp_name' => $testFile, 'name' => basename($testFile),\n            'size' => 200, 'error' => 0, 'type' => 'image/jpeg'\n        ];\n        return [\n            //    Options, isValid Param, Expected value\n            [null,                              $fileUpload, true],\n            ['jpeg',                            $fileUpload, true],\n            ['test/notype',                     $fileUpload, false],\n            ['image/gif, image/jpeg',           $fileUpload, true],\n            [['image/vasa', 'image/jpeg'], $fileUpload, true],\n            [['image/jpeg', 'gif'],        $fileUpload, true],\n            [['image/gif', 'gif'],         $fileUpload, false],\n            ['image/jp',                        $fileUpload, false],\n            ['image/jpg2000',                   $fileUpload, false],\n            ['image/jpeg2000',                  $fileUpload, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\IsImage($options);\n        $validator->enableHeaderCheck();\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\IsImage($options);\n            $validator->enableHeaderCheck();\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMimeType()\n    {\n        $validator = new File\\IsImage('image/gif');\n        $this->assertEquals('image/gif', $validator->getMimeType());\n\n        $validator = new File\\IsImage(['image/gif', 'video', 'text/test']);\n        $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());\n\n        $validator = new File\\IsImage(['image/gif', 'video', 'text/test']);\n        $this->assertEquals(['image/gif', 'video', 'text/test'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that setMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMimeType()\n    {\n        $validator = new File\\IsImage('image/gif');\n        $validator->setMimeType('image/jpeg');\n        $this->assertEquals('image/jpeg', $validator->getMimeType());\n        $this->assertEquals(['image/jpeg'], $validator->getMimeType(true));\n\n        $validator->setMimeType('image/gif, text/test');\n        $this->assertEquals('image/gif,text/test', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text/test'], $validator->getMimeType(true));\n\n        $validator->setMimeType(['video/mpeg', 'gif']);\n        $this->assertEquals('video/mpeg,gif', $validator->getMimeType());\n        $this->assertEquals(['video/mpeg', 'gif'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that addMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testAddMimeType()\n    {\n        $validator = new File\\IsImage('image/gif');\n        $validator->addMimeType('text');\n        $this->assertEquals('image/gif,text', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text'], $validator->getMimeType(true));\n\n        $validator->addMimeType('jpg, to');\n        $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to'], $validator->getMimeType(true));\n\n        $validator->addMimeType(['zip', 'ti']);\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n\n        $validator->addMimeType('');\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n    }\n\n    /**\n     * @ZF-8111\n     */\n    public function testErrorMessages()\n    {\n        $files = [\n            'name'     => 'picture.jpg',\n            'type'     => 'image/jpeg',\n            'size'     => 200,\n            'tmp_name' => __DIR__ . '/_files/picture.jpg',\n            'error'    => 0\n        ];\n\n        $validator = new File\\IsImage('test/notype');\n        $validator->enableHeaderCheck();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/picture.jpg', $files));\n        $error = $validator->getMessages();\n        $this->assertArrayHasKey('fileIsImageFalseType', $error);\n    }\n\n    public function testOptionsAtConstructor()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped('This PHP Version has no finfo installed');\n        }\n\n        $magicFile = $this->getMagicMime();\n        $validator = new File\\IsImage([\n            'image/gif',\n            'image/jpg',\n            'magicFile'   => $magicFile,\n            'enableHeaderCheck' => true]);\n\n        $this->assertEquals($magicFile, $validator->getMagicFile());\n        $this->assertTrue($validator->getHeaderCheck());\n        $this->assertEquals('image/gif,image/jpg', $validator->getMimeType());\n    }\n\n    public function testNonMimeOptionsAtConstructorStillSetsDefaults()\n    {\n        $validator = new File\\IsImage([\n            'enableHeaderCheck' => true,\n        ]);\n\n        $this->assertNotEmpty($validator->getMimeType());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\IsImage();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileIsImageNotReadable', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n}\n"
  },
  {
    "path": "test/File/Md5Test.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * Md5 testbed\n *\n * @group      Zend_Validator\n */\nclass Md5Test extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            [\n                'ed74c22109fe9f110579f77b053b8bc3',\n                $testFile, true, ''\n            ],\n            [\n                '4d74c22109fe9f110579f77b053b8bc3',\n                $testFile, false, 'fileMd5DoesNotMatch'\n            ],\n            [\n                ['4d74c22109fe9f110579f77b053b8bc3', 'ed74c22109fe9f110579f77b053b8bc3'],\n                $testFile, true, ''\n            ],\n            [\n                ['4d74c22109fe9f110579f77b053b8bc3', '7d74c22109fe9f110579f77b053b8bc3'],\n                $testFile, false, 'fileMd5DoesNotMatch'\n            ],\n        ];\n\n        $testFile = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['ed74c22109fe9f110579f77b053b8bc3', $testFile, false, 'fileMd5NotFound'],\n        ];\n\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $sizeFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['ec441f84a2944405baa22873cda22370', $testFile, true,  ''],\n            ['7d74c22109fe9f110579f77b053b8bc3', $testFile, false, 'fileMd5DoesNotMatch'],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests, $sizeFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\Md5($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Md5($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMd5() returns expected value\n     *\n     * @return void\n     */\n    public function testgetMd5()\n    {\n        $validator = new File\\Md5('12345');\n        $this->assertEquals(['12345' => 'md5'], $validator->getMd5());\n\n        $validator = new File\\Md5(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'md5', '12333' => 'md5', '12344' => 'md5'], $validator->getMd5());\n    }\n\n    /**\n     * Ensures that getHash() returns expected value\n     *\n     * @return void\n     */\n    public function testgetHash()\n    {\n        $validator = new File\\Md5('12345');\n        $this->assertEquals(['12345' => 'md5'], $validator->getHash());\n\n        $validator = new File\\Md5(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'md5', '12333' => 'md5', '12344' => 'md5'], $validator->getHash());\n    }\n\n    /**\n     * Ensures that setMd5() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMd5()\n    {\n        $validator = new File\\Md5('12345');\n        $validator->setMd5('12333');\n        $this->assertEquals(['12333' => 'md5'], $validator->getMd5());\n\n        $validator->setMd5(['12321', '12121']);\n        $this->assertEquals(['12321' => 'md5', '12121' => 'md5'], $validator->getMd5());\n    }\n\n    /**\n     * Ensures that setHash() returns expected value\n     *\n     * @return void\n     */\n    public function testSetHash()\n    {\n        $validator = new File\\Md5('12345');\n        $validator->setHash('12333');\n        $this->assertEquals(['12333' => 'md5'], $validator->getMd5());\n\n        $validator->setHash(['12321', '12121']);\n        $this->assertEquals(['12321' => 'md5', '12121' => 'md5'], $validator->getMd5());\n    }\n\n    /**\n     * Ensures that addMd5() returns expected value\n     *\n     * @return void\n     */\n    public function testAddMd5()\n    {\n        $validator = new File\\Md5('12345');\n        $validator->addMd5('12344');\n        $this->assertEquals(['12345' => 'md5', '12344' => 'md5'], $validator->getMd5());\n\n        $validator->addMd5(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'md5', '12344' => 'md5', '12321' => 'md5', '12121' => 'md5'],\n            $validator->getMd5()\n        );\n    }\n\n    /**\n     * Ensures that addHash() returns expected value\n     *\n     * @return void\n     */\n    public function testAddHash()\n    {\n        $validator = new File\\Md5('12345');\n        $validator->addHash('12344');\n        $this->assertEquals(['12345' => 'md5', '12344' => 'md5'], $validator->getMd5());\n\n        $validator->addHash(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'md5', '12344' => 'md5', '12321' => 'md5', '12121' => 'md5'],\n            $validator->getMd5()\n        );\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Md5('12345');\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileMd5NotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Md5();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Md5::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Md5::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testIsValidShouldThrowInvalidArgumentExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\Md5();\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/MimeTypeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse ReflectionProperty;\nuse Zend\\Validator\\Exception\\InvalidMagicMimeFileException;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * MimeType testbed\n *\n * @group      Zend_Validator\n */\nclass MimeTypeTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/picture.jpg';\n        $fileUpload = [\n            'tmp_name' => $testFile, 'name' => basename($testFile),\n            'size' => 200, 'error' => 0, 'type' => 'image/jpg'\n        ];\n        return [\n            //    Options, isValid Param, Expected value\n            [['image/jpg', 'image/jpeg'],               $fileUpload, true],\n            ['image',                                        $fileUpload, true],\n            ['test/notype',                                  $fileUpload, false],\n            ['image/gif, image/jpg, image/jpeg',             $fileUpload, true],\n            [['image/vasa', 'image/jpg', 'image/jpeg'], $fileUpload, true],\n            [['image/jpg', 'image/jpeg', 'gif'],        $fileUpload, true],\n            [['image/gif', 'gif'],                      $fileUpload, false],\n            ['image/jp',                                     $fileUpload, false],\n            ['image/jpg2000',                                $fileUpload, false],\n            ['image/jpeg2000',                               $fileUpload, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\MimeType($options);\n        $validator->enableHeaderCheck();\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\MimeType($options);\n            $validator->enableHeaderCheck();\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMimeType()\n    {\n        $validator = new File\\MimeType('image/gif');\n        $this->assertEquals('image/gif', $validator->getMimeType());\n\n        $validator = new File\\MimeType(['image/gif', 'video', 'text/test']);\n        $this->assertEquals('image/gif,video,text/test', $validator->getMimeType());\n\n        $validator = new File\\MimeType(['image/gif', 'video', 'text/test']);\n        $this->assertEquals(['image/gif', 'video', 'text/test'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that setMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMimeType()\n    {\n        $validator = new File\\MimeType('image/gif');\n        $validator->setMimeType('image/jpeg');\n        $this->assertEquals('image/jpeg', $validator->getMimeType());\n        $this->assertEquals(['image/jpeg'], $validator->getMimeType(true));\n\n        $validator->setMimeType('image/gif, text/test');\n        $this->assertEquals('image/gif,text/test', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text/test'], $validator->getMimeType(true));\n\n        $validator->setMimeType(['video/mpeg', 'gif']);\n        $this->assertEquals('video/mpeg,gif', $validator->getMimeType());\n        $this->assertEquals(['video/mpeg', 'gif'], $validator->getMimeType(true));\n    }\n\n    /**\n     * Ensures that addMimeType() returns expected value\n     *\n     * @return void\n     */\n    public function testAddMimeType()\n    {\n        $validator = new File\\MimeType('image/gif');\n        $validator->addMimeType('text');\n        $this->assertEquals('image/gif,text', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text'], $validator->getMimeType(true));\n\n        $validator->addMimeType('jpg, to');\n        $this->assertEquals('image/gif,text,jpg,to', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to'], $validator->getMimeType(true));\n\n        $validator->addMimeType(['zip', 'ti']);\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n\n        $validator->addMimeType('');\n        $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());\n        $this->assertEquals(['image/gif', 'text', 'jpg', 'to', 'zip', 'ti'], $validator->getMimeType(true));\n    }\n\n    public function testSetAndGetMagicFile()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped('This PHP Version has no finfo installed');\n        }\n\n        $validator = new File\\MimeType('image/gif');\n        $magic     = getenv('magic');\n        if (! empty($magic)) {\n            $mimetype  = $validator->getMagicFile();\n            $this->assertEquals($magic, $mimetype);\n        }\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('could not be');\n        $validator->setMagicFile('/unknown/magic/file');\n    }\n\n    public function testSetMagicFileWithinConstructor()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped('This PHP Version has no finfo installed');\n        }\n\n        $this->expectException(InvalidMagicMimeFileException::class);\n        $this->expectExceptionMessage('could not be used by ext/finfo');\n        $validator = new File\\MimeType(['image/gif', 'magicFile' => __FILE__]);\n    }\n\n    public function testOptionsAtConstructor()\n    {\n        $validator = new File\\MimeType([\n            'image/gif',\n            'image/jpg',\n            'enableHeaderCheck' => true]);\n\n        $this->assertTrue($validator->getHeaderCheck());\n        $this->assertEquals('image/gif,image/jpg', $validator->getMimeType());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\MimeType([\n            'image/gif',\n            'image/jpg',\n            'headerCheck' => true]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileMimeTypeNotReadable', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testDisableMagicFile()\n    {\n        $validator = new File\\MimeType('image/gif');\n        $magic     = getenv('magic');\n        if (! empty($magic)) {\n            $mimetype  = $validator->getMagicFile();\n            $this->assertEquals($magic, $mimetype);\n        }\n\n        $validator->disableMagicFile(true);\n        $this->assertTrue($validator->isMagicFileDisabled());\n\n        if (! empty($magic)) {\n            $mimetype  = $validator->getMagicFile();\n            $this->assertEquals($magic, $mimetype);\n        }\n    }\n\n    /**\n     * @group ZF-10461\n     */\n    public function testDisablingMagicFileByConstructor()\n    {\n        $files = [\n            'name'     => 'picture.jpg',\n            'size'     => 200,\n            'tmp_name' => dirname(__FILE__) . '/_files/picture.jpg',\n            'error'    => 0,\n            'magicFile' => false,\n        ];\n\n        $validator = new File\\MimeType($files);\n        $this->assertFalse($validator->getMagicFile());\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        if (! extension_loaded('fileinfo')) {\n            $this->markTestSkipped('This PHP Version has no finfo installed');\n        }\n\n        $validator = new File\\MimeType();\n\n        $this->assertFalse($validator->isValid(''));\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n    }\n\n    public function testConstructorCanAcceptOptionsArray()\n    {\n        $mimeType  = 'image/gif';\n        $options   = ['mimeType' => $mimeType];\n        $validator = new File\\MimeType($options);\n        $this->assertSame($mimeType, $validator->getMimeType());\n    }\n\n    public function testSettingMagicFileWithEmptyArrayNullifiesValue()\n    {\n        $validator = new File\\MimeType();\n        $validator->setMagicFile([]);\n\n        $r = new ReflectionProperty($validator, 'options');\n        $r->setAccessible(true);\n\n        $options = $r->getValue($validator);\n        $this->assertNull($options['magicFile']);\n    }\n\n    public function invalidMimeTypeTypes()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidMimeTypeTypes\n     */\n    public function testAddingMimeTypeWithInvalidTypeRaisesException($type)\n    {\n        $validator = new File\\MimeType();\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->addMimeType($type);\n    }\n\n    public function testAddingMimeTypeUsingMagicFileArrayKeyIgnoresKey()\n    {\n        $validator = new File\\MimeType('image/gif');\n\n        $mimeTypeArray = [\n            'magicFile' => 'test.txt',\n            'gif'       => 'text',\n        ];\n\n        $validator->addMimeType($mimeTypeArray);\n\n        $this->assertSame('image/gif,text', $validator->getMimeType());\n        $this->assertSame(['image/gif', 'text'], $validator->getMimeType(true));\n    }\n\n    public function testIsValidRaisesExceptionWithArrayNotInFilesFormat()\n    {\n        $validator = new File\\MimeType('image\\gif');\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/NotExistsTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * NotExists testbed\n *\n * @group      Zend_Validator\n */\nclass NotExistsTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $baseDir  = dirname($testFile);\n        $baseName = basename($testFile);\n        $fileUpload = [\n            'tmp_name' => $testFile, 'name' => basename($testFile),\n            'size' => 200, 'error' => 0, 'type' => 'text'\n        ];\n        return [\n            //    Options, isValid Param, Expected value\n            [dirname($baseDir), $baseName,   true],\n            [$baseDir,          $baseName,   false],\n            [$baseDir,          $testFile,   false],\n            [dirname($baseDir), $fileUpload, true],\n            [$baseDir,          $fileUpload, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\NotExists($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\NotExists($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testGetDirectory()\n    {\n        $validator = new File\\NotExists('C:/temp');\n        $this->assertEquals('C:/temp', $validator->getDirectory());\n\n        $validator = new File\\NotExists(['temp', 'dir', 'jpg']);\n        $this->assertEquals('temp,dir,jpg', $validator->getDirectory());\n\n        $validator = new File\\NotExists(['temp', 'dir', 'jpg']);\n        $this->assertEquals(['temp', 'dir', 'jpg'], $validator->getDirectory(true));\n    }\n\n    /**\n     * Ensures that setDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testSetDirectory()\n    {\n        $validator = new File\\NotExists('temp');\n        $validator->setDirectory('gif');\n        $this->assertEquals('gif', $validator->getDirectory());\n        $this->assertEquals(['gif'], $validator->getDirectory(true));\n\n        $validator->setDirectory('jpg, temp');\n        $this->assertEquals('jpg,temp', $validator->getDirectory());\n        $this->assertEquals(['jpg', 'temp'], $validator->getDirectory(true));\n\n        $validator->setDirectory(['zip', 'ti']);\n        $this->assertEquals('zip,ti', $validator->getDirectory());\n        $this->assertEquals(['zip', 'ti'], $validator->getDirectory(true));\n    }\n\n    /**\n     * Ensures that addDirectory() returns expected value\n     *\n     * @return void\n     */\n    public function testAddDirectory()\n    {\n        $validator = new File\\NotExists('temp');\n        $validator->addDirectory('gif');\n        $this->assertEquals('temp,gif', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif'], $validator->getDirectory(true));\n\n        $validator->addDirectory('jpg, to');\n        $this->assertEquals('temp,gif,jpg,to', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to'], $validator->getDirectory(true));\n\n        $validator->addDirectory(['zip', 'ti']);\n        $this->assertEquals('temp,gif,jpg,to,zip,ti', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getDirectory(true));\n\n        $validator->addDirectory('');\n        $this->assertEquals('temp,gif,jpg,to,zip,ti', $validator->getDirectory());\n        $this->assertEquals(['temp', 'gif', 'jpg', 'to', 'zip', 'ti'], $validator->getDirectory(true));\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\NotExists();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/testsize.mo'));\n        $this->assertArrayHasKey('fileNotExistsDoesExist', $validator->getMessages());\n        $this->assertContains(\"File exists\", current($validator->getMessages()));\n    }\n\n    public function testIsValidShouldThrowInvalidArgumentExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\NotExists();\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n\n    public function invalidDirectoryArguments()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidDirectoryArguments\n     */\n    public function testAddingDirectoryUsingInvalidTypeRaisesException($value)\n    {\n        $validator = new File\\NotExists();\n        $this->expectException(InvalidArgumentException::class);\n        $validator->addDirectory($value);\n    }\n}\n"
  },
  {
    "path": "test/File/Sha1Test.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * Sha1 testbed\n *\n * @group      Zend_Validator\n */\nclass Sha1Test extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile   = __DIR__ . '/_files/picture.jpg';\n        $pictureTests = [\n            //    Options, isValid Param, Expected value, Expected message\n            ['b2a5334847b4328e7d19d9b41fd874dffa911c98', $testFile, true,  ''],\n            ['52a5334847b4328e7d19d9b41fd874dffa911c98', $testFile, false, 'fileSha1DoesNotMatch'],\n            [\n                ['42a5334847b4328e7d19d9b41fd874dffa911c98', 'b2a5334847b4328e7d19d9b41fd874dffa911c98'],\n                $testFile, true, ''\n            ],\n            [\n                ['42a5334847b4328e7d19d9b41fd874dffa911c98', '72a5334847b4328e7d19d9b41fd874dffa911c98'],\n                $testFile, false, 'fileSha1DoesNotMatch'\n            ],\n        ];\n\n        $testFile   = __DIR__ . '/_files/nofile.mo';\n        $noFileTests = [\n            //    Options, isValid Param, Expected value, message\n            ['b2a5334847b4328e7d19d9b41fd874dffa911c98', $testFile, false, 'fileSha1NotFound'],\n        ];\n\n        // Dupe data in File Upload format\n        $testData = array_merge($pictureTests, $noFileTests);\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2], $data[3]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected, $messageKey)\n    {\n        $validator = new File\\Sha1($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n        if (! $expected) {\n            $this->assertArrayHasKey($messageKey, $validator->getMessages());\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected, $messageKey)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Sha1($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n            if (! $expected) {\n                $this->assertArrayHasKey($messageKey, $validator->getMessages());\n            }\n        }\n    }\n\n    /**\n     * Ensures that getSha1() returns expected value\n     *\n     * @return void\n     */\n    public function testgetSha1()\n    {\n        $validator = new File\\Sha1('12345');\n        $this->assertEquals(['12345' => 'sha1'], $validator->getSha1());\n\n        $validator = new File\\Sha1(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'sha1', '12333' => 'sha1', '12344' => 'sha1'], $validator->getSha1());\n    }\n\n    /**\n     * Ensures that getHash() returns expected value\n     *\n     * @return void\n     */\n    public function testgetHash()\n    {\n        $validator = new File\\Sha1('12345');\n        $this->assertEquals(['12345' => 'sha1'], $validator->getHash());\n\n        $validator = new File\\Sha1(['12345', '12333', '12344']);\n        $this->assertEquals(['12345' => 'sha1', '12333' => 'sha1', '12344' => 'sha1'], $validator->getHash());\n    }\n\n    /**\n     * Ensures that setSha1() returns expected value\n     *\n     * @return void\n     */\n    public function testSetSha1()\n    {\n        $validator = new File\\Sha1('12345');\n        $validator->setSha1('12333');\n        $this->assertEquals(['12333' => 'sha1'], $validator->getSha1());\n\n        $validator->setSha1(['12321', '12121']);\n        $this->assertEquals(['12321' => 'sha1', '12121' => 'sha1'], $validator->getSha1());\n    }\n\n    /**\n     * Ensures that setHash() returns expected value\n     *\n     * @return void\n     */\n    public function testSetHash()\n    {\n        $validator = new File\\Sha1('12345');\n        $validator->setHash('12333');\n        $this->assertEquals(['12333' => 'sha1'], $validator->getSha1());\n\n        $validator->setHash(['12321', '12121']);\n        $this->assertEquals(['12321' => 'sha1', '12121' => 'sha1'], $validator->getSha1());\n    }\n\n    /**\n     * Ensures that addSha1() returns expected value\n     *\n     * @return void\n     */\n    public function testAddSha1()\n    {\n        $validator = new File\\Sha1('12345');\n        $validator->addSha1('12344');\n        $this->assertEquals(['12345' => 'sha1', '12344' => 'sha1'], $validator->getSha1());\n\n        $validator->addSha1(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'sha1', '12344' => 'sha1', '12321' => 'sha1', '12121' => 'sha1'],\n            $validator->getSha1()\n        );\n    }\n\n    /**\n     * Ensures that addHash() returns expected value\n     *\n     * @return void\n     */\n    public function testAddHash()\n    {\n        $validator = new File\\Sha1('12345');\n        $validator->addHash('12344');\n        $this->assertEquals(['12345' => 'sha1', '12344' => 'sha1'], $validator->getSha1());\n\n        $validator->addHash(['12321', '12121']);\n        $this->assertEquals(\n            ['12345' => 'sha1', '12344' => 'sha1', '12321' => 'sha1', '12121' => 'sha1'],\n            $validator->getSha1()\n        );\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Sha1('12345');\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileSha1NotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Sha1();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Sha1::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Sha1::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testIsValidShouldThrowInvalidArgumentExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\Sha1();\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n}\n"
  },
  {
    "path": "test/File/SizeTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass SizeTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/testsize.mo';\n        $testData = [\n            //    Options, isValid Param, Expected value\n            [794,     $testFile,     true],\n            [500,     $testFile,     false],\n            [['min' => 0, 'max' => 10000],      $testFile,   true],\n            [['min' => 0, 'max' => '10 MB'],    $testFile,   true],\n            [['min' => '4B', 'max' => '10 MB'], $testFile,   true],\n            [['min' => 0, 'max' => '10MB'],     $testFile,   true],\n            [['min' => 0, 'max' => '10  MB'],   $testFile,   true],\n            [['min' => 794],                    $testFile,   true],\n            [['min' => 0, 'max' => 500],        $testFile,   false],\n        ];\n\n        // Dupe data in File Upload format\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\Size($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\Size($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new File\\Size(['min' => 1, 'max' => 100]);\n        $this->assertEquals('1B', $validator->getMin());\n\n        $validator = new File\\Size(['min' => 1, 'max' => 100, 'useByteString' => false]);\n        $this->assertEquals(1, $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\Size(['min' => 100, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMin() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMin()\n    {\n        $validator = new File\\Size(['min' => 1000, 'max' => 10000]);\n        $validator->setMin(100);\n        $this->assertEquals('100B', $validator->getMin());\n\n        $validator = new File\\Size(['min' => 1000, 'max' => 10000, 'useByteString' => false]);\n        $validator->setMin(100);\n        $this->assertEquals(100, $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setMin(20000);\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new File\\Size(['min' => 1, 'max' => 100, 'useByteString' => false]);\n        $this->assertEquals(100, $validator->getMax());\n\n        $validator = new File\\Size(['min' => 1, 'max' => 100000]);\n        $this->assertEquals('97.66kB', $validator->getMax());\n\n        $validator = new File\\Size(2000);\n        $this->assertEquals('1.95kB', $validator->getMax());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\Size(['min' => 100, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMax() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMax()\n    {\n        $validator = new File\\Size(['max' => 0, 'useByteString' => true]);\n        $this->assertEquals('0B', $validator->getMax());\n\n        $validator->setMax(1000000);\n        $this->assertEquals('976.56kB', $validator->getMax());\n\n        $validator->setMin(100);\n        $this->assertEquals('976.56kB', $validator->getMax());\n\n        $validator->setMax('100 AB');\n        $this->assertEquals('100B', $validator->getMax());\n\n        $validator->setMax('100 kB');\n        $this->assertEquals('100kB', $validator->getMax());\n\n        $validator->setMax('100 MB');\n        $this->assertEquals('100MB', $validator->getMax());\n\n        $validator->setMax('1 GB');\n        $this->assertEquals('1GB', $validator->getMax());\n\n        $validator->setMax('0.001 TB');\n        $this->assertEquals('1.02GB', $validator->getMax());\n\n        $validator->setMax('0.000001 PB');\n        $this->assertEquals('1.05GB', $validator->getMax());\n\n        $validator->setMax('0.000000001 EB');\n        $this->assertEquals('1.07GB', $validator->getMax());\n\n        $validator->setMax('0.000000000001 ZB');\n        $this->assertEquals('1.1GB', $validator->getMax());\n\n        $validator->setMax('0.000000000000001 YB');\n        $this->assertEquals('1.13GB', $validator->getMax());\n    }\n\n    /**\n     * Ensures that the validator returns size infos\n     *\n     * @return void\n     */\n    public function testFailureMessage()\n    {\n        $validator = new File\\Size(['min' => 9999, 'max' => 10000]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/testsize.mo'));\n        $messages = $validator->getMessages();\n        $this->assertContains('9.76kB', current($messages));\n        $this->assertContains('794B', current($messages));\n\n        $validator = new File\\Size(['min' => 9999, 'max' => 10000, 'useByteString' => false]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/testsize.mo'));\n        $messages = $validator->getMessages();\n        $this->assertContains('9999', current($messages));\n        $this->assertContains('794', current($messages));\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Size(['min' => 1, 'max' => 10000]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileSizeNotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\Size();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\Size::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\Size::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function invalidMinMaxValues()\n    {\n        return [\n            'null'               => [null],\n            'true'               => [true],\n            'false'              => [false],\n            'array'              => [[100]],\n            'object'             => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSetMinWithInvalidArgument($value)\n    {\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 2000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->setMin($value);\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSetMaxWithInvalidArgument($value)\n    {\n        $validator = new File\\FilesSize(['min' => 0, 'max' => 2000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->setMax($value);\n    }\n}\n"
  },
  {
    "path": "test/File/TestAsset/FileInformation.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2019 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace ZendTest\\Validator\\File\\TestAsset;\n\nuse Zend\\Validator\\File\\FileInformationTrait;\n\n/**\n* Validator which checks if the file already exists in the directory\n*/\nclass FileInformation\n{\n    use FileInformationTrait;\n\n    /**\n     * Returns array if the procedure is identified\n     *\n     * @param  string|array|object $value    Filename to check\n     * @param  null|array          $file     File data (when using legacy Zend_File_Transfer API)\n     * @param  bool                $hasType  Return with filetype (optional)\n     * @param  bool                $basename Return with basename - is calculated from location path (optional)\n     * @return array\n     */\n    public function checkFileInformation(\n        $value,\n        array $file = null,\n        $hasType = false,\n        $hasBasename = false\n    ) {\n        return $this->getFileInfo($value, $file, $hasType, $hasBasename);\n    }\n}\n"
  },
  {
    "path": "test/File/UploadFileTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\File;\n\n/**\n * @group      Zend_Validator\n */\nclass UploadFileTest extends TestCase\n{\n    public function uploadErrorsTestDataProvider()\n    {\n        $data = [];\n        $errorTypes = [\n            0 => 'fileUploadFileErrorAttack',\n            1 => 'fileUploadFileErrorIniSize',\n            2 => 'fileUploadFileErrorFormSize',\n            3 => 'fileUploadFileErrorPartial',\n            4 => 'fileUploadFileErrorNoFile',\n            5 => 'fileUploadFileErrorUnknown',\n            6 => 'fileUploadFileErrorNoTmpDir',\n            7 => 'fileUploadFileErrorCantWrite',\n            8 => 'fileUploadFileErrorExtension',\n            9 => 'fileUploadFileErrorUnknown',\n        ];\n        $testSizeFile = __DIR__ . '/_files/testsize.mo';\n\n        foreach ($errorTypes as $errorCode => $errorType) {\n            $name = sprintf('SAPI - %s', $errorType);\n            $data[$name] = [\n                // fileInfo\n                [\n                    'name'     => 'test' . $errorCode,\n                    'type'     => 'text',\n                    'size'     => 200 + $errorCode,\n                    'tmp_name' => $testSizeFile,\n                    'error'    => $errorCode,\n                ],\n                // messageKey\n                $errorType,\n            ];\n        }\n\n        // Diactoros does not have UNKNOWN error type.\n        unset($errorTypes[9]);\n        foreach ($errorTypes as $errorCode => $errorType) {\n            if ($errorCode === UPLOAD_ERR_OK) {\n                // Unable to get to this vector\n                continue;\n            }\n\n            $name = sprintf('PSR-7 - %s', $errorType);\n            $upload = $this->prophesize(UploadedFileInterface::class);\n            $upload->getClientFilename()->willReturn('test' . $errorCode);\n            $upload->getError()->willReturn($errorCode);\n\n            $data[$name] = [$upload->reveal(), $errorType];\n        }\n\n        return $data;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider uploadErrorsTestDataProvider\n     * @return void\n     */\n    public function testBasic($fileInfo, $messageKey)\n    {\n        $validator = new File\\UploadFile();\n        $this->assertFalse($validator->isValid($fileInfo));\n        $this->assertArrayHasKey($messageKey, $validator->getMessages());\n    }\n\n    /**\n     * @return void\n     */\n    public function testRaisesExceptionWhenValueArrayIsBad()\n    {\n        $validator = new File\\UploadFile();\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('$_FILES format');\n        $validator->isValid(['foo', 'bar']);\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\UploadFile();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileUploadFileErrorFileNotFound', $validator->getMessages());\n        $this->assertContains(\"not found\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\UploadFile();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\UploadFile::FILE_NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testUploadErrorCodeShouldPrecedeEmptyFileCheck()\n    {\n        $validator = new File\\UploadFile();\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\UploadFile::NO_FILE, $validator->getMessages());\n        $this->assertArrayNotHasKey(File\\UploadFile::FILE_NOT_FOUND, $validator->getMessages());\n    }\n}\n"
  },
  {
    "path": "test/File/UploadTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\File;\n\n/**\n * @group      Zend_Validator\n */\nclass UploadTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $_FILES = [\n            'test'  => [\n                'name'     => 'test1',\n                'type'     => 'text',\n                'size'     => 200,\n                'tmp_name' => 'tmp_test1',\n                'error'    => 0],\n            'test2' => [\n                'name'     => 'test2',\n                'type'     => 'text2',\n                'size'     => 202,\n                'tmp_name' => 'tmp_test2',\n                'error'    => 1],\n            'test3' => [\n                'name'     => 'test3',\n                'type'     => 'text3',\n                'size'     => 203,\n                'tmp_name' => 'tmp_test3',\n                'error'    => 2],\n            'test4' => [\n                'name'     => 'test4',\n                'type'     => 'text4',\n                'size'     => 204,\n                'tmp_name' => 'tmp_test4',\n                'error'    => 3],\n            'test5' => [\n                'name'     => 'test5',\n                'type'     => 'text5',\n                'size'     => 205,\n                'tmp_name' => 'tmp_test5',\n                'error'    => 4],\n            'test6' => [\n                'name'     => 'test6',\n                'type'     => 'text6',\n                'size'     => 206,\n                'tmp_name' => 'tmp_test6',\n                'error'    => 5],\n            'test7' => [\n                'name'     => 'test7',\n                'type'     => 'text7',\n                'size'     => 207,\n                'tmp_name' => 'tmp_test7',\n                'error'    => 6],\n            'test8' => [\n                'name'     => 'test8',\n                'type'     => 'text8',\n                'size'     => 208,\n                'tmp_name' => 'tmp_test8',\n                'error'    => 7],\n            'test9' => [\n                'name'     => 'test9',\n                'type'     => 'text9',\n                'size'     => 209,\n                'tmp_name' => 'tmp_test9',\n                'error'    => 8]\n        ];\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test'));\n        $this->assertArrayHasKey('fileUploadErrorAttack', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test2'));\n        $this->assertArrayHasKey('fileUploadErrorIniSize', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test3'));\n        $this->assertArrayHasKey('fileUploadErrorFormSize', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test4'));\n        $this->assertArrayHasKey('fileUploadErrorPartial', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test5'));\n        $this->assertArrayHasKey('fileUploadErrorNoFile', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test6'));\n        $this->assertArrayHasKey('fileUploadErrorUnknown', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test7'));\n        $this->assertArrayHasKey('fileUploadErrorNoTmpDir', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test8'));\n        $this->assertArrayHasKey('fileUploadErrorCantWrite', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test9'));\n        $this->assertArrayHasKey('fileUploadErrorExtension', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test1'));\n        $this->assertArrayHasKey('fileUploadErrorAttack', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('tmp_test1'));\n        $this->assertArrayHasKey('fileUploadErrorAttack', $validator->getMessages());\n\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid('test000'));\n        $this->assertArrayHasKey('fileUploadErrorFileNotFound', $validator->getMessages());\n    }\n\n    public function invalidPsr7UploadedFiles()\n    {\n        $uploads = [];\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test2');\n        $upload->getError()->willReturn(1);\n        yield 'size' => [['test2' => $upload->reveal()], 'test2', 'fileUploadErrorIniSize'];\n\n        $uploads['test2'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test3');\n        $upload->getError()->willReturn(2);\n        yield 'form-size' => [['test3' => $upload->reveal()], 'test3', 'fileUploadErrorFormSize'];\n\n        $uploads['test3'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test4');\n        $upload->getError()->willReturn(3);\n        yield 'partial' => [['test4' => $upload->reveal()], 'test4', 'fileUploadErrorPartial'];\n\n        $uploads['test4'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test5');\n        $upload->getError()->willReturn(4);\n        yield 'no-file' => [['test5' => $upload->reveal()], 'test5', 'fileUploadErrorNoFile'];\n\n        $uploads['test5'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test6');\n        $upload->getError()->willReturn(5);\n        yield 'unknown' => [['test6' => $upload->reveal()], 'test6', 'fileUploadErrorUnknown'];\n\n        $uploads['test6'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test7');\n        $upload->getError()->willReturn(6);\n        yield 'no-tmp-dir' => [['test7' => $upload->reveal()], 'test7', 'fileUploadErrorNoTmpDir'];\n\n        $uploads['test7'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test8');\n        $upload->getError()->willReturn(7);\n        yield 'cannot write' => [['test8' => $upload->reveal()], 'test8', 'fileUploadErrorCantWrite'];\n\n        $uploads['test8'] = $upload->reveal();\n\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test9');\n        $upload->getError()->willReturn(8);\n        yield 'cannot write' => [['test9' => $upload->reveal()], 'test9', 'fileUploadErrorExtension'];\n\n        $uploads['test9'] = $upload->reveal();\n\n        yield 'not-found' => [$uploads, 'test000', 'fileUploadErrorFileNotFound'];\n    }\n\n    /**\n     * Validate invalid PSR-7 file uploads\n     *\n     * Not testing lookup by temp file name since PSR does not expose it.\n     *\n     * @dataProvider invalidPsr7UploadedFiles\n     * @param UploadedFileInterface[] $files\n     * @param string $fileName\n     * @param string $expectedErrorKey\n     * @return void\n     */\n    public function testRaisesExpectedErrorsForInvalidPsr7UploadedFileInput($files, $fileName, $expectedErrorKey)\n    {\n        $validator = new File\\Upload();\n        $validator->setFiles($files);\n        $this->assertFalse($validator->isValid($fileName));\n        $this->assertArrayHasKey($expectedErrorKey, $validator->getMessages());\n    }\n\n    public function testCanValidateCorrectlyFormedPsr7UploadedFiles()\n    {\n        $upload = $this->prophesize(UploadedFileInterface::class);\n        $upload->getClientFilename()->willReturn('test');\n        $upload->getError()->willReturn(0);\n\n        $validator = new File\\Upload();\n        $validator->setFiles(['upload' => $upload->reveal()]);\n\n        $this->assertTrue($validator->isValid('test'));\n    }\n\n    /**\n     * Ensures that getFiles() returns expected value\n     *\n     * @return void\n     */\n    public function testGetFiles()\n    {\n        $_FILES = [\n            'test'  => [\n                'name'     => 'test1',\n                'type'     => 'text',\n                'size'     => 200,\n                'tmp_name' => 'tmp_test1',\n                'error'    => 0],\n            'test2' => [\n                'name'     => 'test3',\n                'type'     => 'text2',\n                'size'     => 202,\n                'tmp_name' => 'tmp_test2',\n                'error'    => 1]];\n\n        $files = [\n            'test'  => [\n                'name'     => 'test1',\n                'type'     => 'text',\n                'size'     => 200,\n                'tmp_name' => 'tmp_test1',\n                'error'    => 0]];\n\n        $files1 = [\n            'test2' => [\n                'name'     => 'test3',\n                'type'     => 'text2',\n                'size'     => 202,\n                'tmp_name' => 'tmp_test2',\n                'error'    => 1]];\n\n        $validator = new File\\Upload();\n        $this->assertEquals($files, $validator->getFiles('test'));\n        $this->assertEquals($files, $validator->getFiles('test1'));\n        $this->assertEquals($files1, $validator->getFiles('test3'));\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('was not found');\n        $this->assertEquals([], $validator->getFiles('test5'));\n    }\n\n    public function testGetFilesReturnsArtifactsFromPsr7UploadedFiles()\n    {\n        $upload1 = $this->prophesize(UploadedFileInterface::class);\n        $upload1->getClientFilename()->willReturn('test1');\n\n        $upload2 = $this->prophesize(UploadedFileInterface::class);\n        $upload2->getClientFilename()->willReturn('test3');\n\n        $files = [\n            'test'  => $upload1->reveal(),\n            'test2' => $upload2->reveal(),\n        ];\n\n        $validator = new File\\Upload();\n        $validator->setFiles($files);\n\n        // Retrieve by index\n        $this->assertEquals(['test' => $files['test']], $validator->getFiles('test'));\n        $this->assertEquals(['test2' => $files['test2']], $validator->getFiles('test2'));\n\n        // Retrieve by client filename\n        $this->assertEquals(['test' => $files['test']], $validator->getFiles('test1'));\n        $this->assertEquals(['test2' => $files['test2']], $validator->getFiles('test3'));\n\n        return $validator;\n    }\n\n    /**\n     * @depends testGetFilesReturnsArtifactsFromPsr7UploadedFiles\n     */\n    public function testGetFilesRaisesExceptionWhenPsr7UploadedFilesArrayDoesNotContainGivenFilename(\n        File\\Upload $validator\n    ) {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('was not found');\n        $validator->getFiles('test5');\n    }\n\n    /**\n     * Ensures that setFiles() returns expected value\n     *\n     * @return void\n     */\n    public function testSetFiles()\n    {\n        $files = [\n            'test'  => [\n                'name'     => 'test1',\n                'type'     => 'text',\n                'size'     => 200,\n                'tmp_name' => 'tmp_test1',\n                'error'    => 0],\n            'test2' => [\n                'name'     => 'test2',\n                'type'     => 'text2',\n                'size'     => 202,\n                'tmp_name' => 'tmp_test2',\n                'error'    => 1]];\n\n        $_FILES = [\n            'test'  => [\n                'name'     => 'test3',\n                'type'     => 'text3',\n                'size'     => 203,\n                'tmp_name' => 'tmp_test3',\n                'error'    => 2]];\n\n\n        $validator = new File\\Upload();\n        $validator->setFiles([]);\n        $this->assertEquals($_FILES, $validator->getFiles());\n        $validator->setFiles();\n        $this->assertEquals($_FILES, $validator->getFiles());\n        $validator->setFiles($files);\n        $this->assertEquals($files, $validator->getFiles());\n    }\n\n    public function testCanPopulateFilesFromArrayOfPsr7UploadedFiles()\n    {\n        $upload1 = $this->prophesize(UploadedFileInterface::class);\n        $upload2 = $this->prophesize(UploadedFileInterface::class);\n\n        $psrFiles = [\n            'test4' => $upload1->reveal(),\n            'test5' => $upload2->reveal(),\n        ];\n\n        $validator = new File\\Upload();\n        $validator->setFiles($psrFiles);\n        $this->assertSame($psrFiles, $validator->getFiles());\n    }\n\n    /**\n     * @group ZF-10738\n     */\n    public function testGetFilesReturnsEmptyArrayWhenFilesSuperglobalIsNull()\n    {\n        $_FILES = null;\n        $validator = new File\\Upload();\n        $validator->setFiles();\n        $this->assertEquals([], $validator->getFiles());\n    }\n\n    /**\n     * @group ZF-10738\n     */\n    public function testGetFilesReturnsEmptyArrayAfterSetFilesIsCalledWithNull()\n    {\n        $validator = new File\\Upload();\n        $validator->setFiles(null);\n        $this->assertEquals([], $validator->getFiles());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\Upload();\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileUploadErrorFileNotFound', $validator->getMessages());\n        $this->assertContains(\"nofile.mo'\", current($validator->getMessages()));\n    }\n\n    /**\n     * @group ZF-12128\n     */\n    public function testErrorMessage()\n    {\n        $_FILES = [\n            'foo' => [\n                'name'     => 'bar',\n                'type'     => 'text',\n                'size'     => 100,\n                'tmp_name' => 'tmp_bar',\n                'error'    => 7,\n            ]\n        ];\n\n        $validator = new File\\Upload;\n        $validator->isValid('foo');\n\n        $this->assertEquals(\n            [\n                'fileUploadErrorCantWrite' => \"Failed to write file 'bar' to disk\",\n            ],\n            $validator->getMessages()\n        );\n    }\n}\n"
  },
  {
    "path": "test/File/WordCountTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\File;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\File;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass WordCountTest extends TestCase\n{\n    /**\n     * @return array\n     */\n    public function basicBehaviorDataProvider()\n    {\n        $testFile = __DIR__ . '/_files/wordcount.txt';\n        $testData = [\n            //    Options, isValid Param, Expected value\n            [15,      $testFile,     true],\n            [4,       $testFile,     false],\n            [['min' => 0,  'max' => 10], $testFile,   true],\n            [['min' => 10, 'max' => 15], $testFile,   false],\n        ];\n\n        // Dupe data in File Upload format\n        foreach ($testData as $data) {\n            $fileUpload = [\n                'tmp_name' => $data[1], 'name' => basename($data[1]),\n                'size' => 200, 'error' => 0, 'type' => 'text'\n            ];\n            $testData[] = [$data[0], $fileUpload, $data[2]];\n        }\n        return $testData;\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testBasic($options, $isValidParam, $expected)\n    {\n        $validator = new File\\WordCount($options);\n        $this->assertEquals($expected, $validator->isValid($isValidParam));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for legacy Zend\\Transfer API\n     *\n     * @dataProvider basicBehaviorDataProvider\n     * @return void\n     */\n    public function testLegacy($options, $isValidParam, $expected)\n    {\n        if (is_array($isValidParam)) {\n            $validator = new File\\WordCount($options);\n            $this->assertEquals($expected, $validator->isValid($isValidParam['tmp_name'], $isValidParam));\n        }\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new File\\WordCount(['min' => 1, 'max' => 5]);\n        $this->assertEquals(1, $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\WordCount(['min' => 5, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMin() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMin()\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $validator->setMin(100);\n        $this->assertEquals(100, $validator->getMin());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('less than or equal');\n        $validator->setMin(20000);\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new File\\WordCount(['min' => 1, 'max' => 100]);\n        $this->assertEquals(100, $validator->getMax());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('greater than or equal');\n        $validator = new File\\WordCount(['min' => 5, 'max' => 1]);\n    }\n\n    /**\n     * Ensures that setMax() returns expected value\n     *\n     * @return void\n     */\n    public function testSetMax()\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $validator->setMax(1000000);\n        $this->assertEquals(1000000, $validator->getMax());\n\n        $validator->setMin(100);\n        $this->assertEquals(1000000, $validator->getMax());\n    }\n\n    /**\n     * @group ZF-11258\n     */\n    public function testZF11258()\n    {\n        $validator = new File\\WordCount(['min' => 1, 'max' => 10000]);\n        $this->assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo'));\n        $this->assertArrayHasKey('fileWordCountNotFound', $validator->getMessages());\n        $this->assertContains(\"does not exist\", current($validator->getMessages()));\n    }\n\n    public function testEmptyFileShouldReturnFalseAndDisplayNotFoundMessage()\n    {\n        $validator = new File\\WordCount();\n\n        $this->assertFalse($validator->isValid(''));\n        $this->assertArrayHasKey(File\\WordCount::NOT_FOUND, $validator->getMessages());\n\n        $filesArray = [\n            'name'      => '',\n            'size'      => 0,\n            'tmp_name'  => '',\n            'error'     => UPLOAD_ERR_NO_FILE,\n            'type'      => '',\n        ];\n\n        $this->assertFalse($validator->isValid($filesArray));\n        $this->assertArrayHasKey(File\\WordCount::NOT_FOUND, $validator->getMessages());\n    }\n\n    public function testCanSetMinValueUsingOptionsArray()\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $minValue  = 33;\n        $options   = ['min' => $minValue];\n\n        $validator->setMin($options);\n        $this->assertSame($minValue, $validator->getMin());\n    }\n\n    public function invalidMinMaxValues()\n    {\n        return [\n            'null'               => [null],\n            'true'               => [true],\n            'false'              => [false],\n            'non-numeric-string' => ['not-a-good-value'],\n            'array-without-keys' => [[100]],\n            'object'             => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSettingMinValueRaisesExceptionForInvalidType($value)\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->setMin($value);\n    }\n\n    public function testCanSetMaxValueUsingOptionsArray()\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $maxValue  = 33333333;\n        $options   = ['max' => $maxValue];\n\n        $validator->setMax($options);\n        $this->assertSame($maxValue, $validator->getMax());\n    }\n\n    /**\n     * @dataProvider invalidMinMaxValues\n     */\n    public function testSettingMaxValueRaisesExceptionForInvalidType($value)\n    {\n        $validator = new File\\WordCount(['min' => 1000, 'max' => 10000]);\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid options to validator provided');\n        $validator->setMax($value);\n    }\n\n    public function testIsValidShouldThrowInvalidArgumentExceptionForArrayNotInFilesFormat()\n    {\n        $validator = new File\\WordCount(['min' => 1, 'max' => 10000]);\n        $value     = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Value array must be in $_FILES format');\n        $validator->isValid($value);\n    }\n\n    public function testConstructCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $min       = 1;\n        $max       = 10000;\n        $validator = new File\\WordCount($min, $max);\n\n        $this->assertSame($min, $validator->getMin());\n        $this->assertSame($max, $validator->getMax());\n    }\n}\n"
  },
  {
    "path": "test/File/_files/magic.7.mime",
    "content": "# Magic data for file(1) command.\n# Format is described in magic(files), where:\n# files is 5 on V7 and BSD, 4 on SV, and ?? on SVID.\n# Don't edit this file, edit /etc/magic or send your magic improvements\n# to the maintainers, at file@mx.gw.com\n\n#------------------------------------------------------------------------------\n# Localstuff:  file(1) magic for locally observed files\n#\n# $File: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $\n# Add any locally observed files here.  Remember:\n# text if readable, executable if runnable binary, data if unreadable.\n\n#------------------------------------------------------------------------------\n# $File$\n# acorn:  file(1) magic for files found on Acorn systems\n#\n\n# RISC OS Chunk File Format\n# From RISC OS Programmer's Reference Manual, Appendix D\n# We guess the file type from the type of the first chunk.\n0\tlelong\t\t0xc3cbc6c5\tRISC OS Chunk data\n>12\tstring\t\tOBJ_\t\t\\b, AOF object\n>12\tstring\t\tLIB_\t\t\\b, ALF library\n\n# RISC OS AIF, contains \"SWI OS_Exit\" at offset 16.\n16\tlelong\t\t0xef000011\tRISC OS AIF executable\n\n# RISC OS Draw files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring \t\tDraw\t\tRISC OS Draw file data\n\n# RISC OS new format font files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring\t\tFONT\\0\t\tRISC OS outline font data,\n>5\tbyte\t\tx\t\tversion %d\n0\tstring\t\tFONT\\1\t\tRISC OS 1bpp font data,\n>5\tbyte\t\tx\t\tversion %d\n0\tstring\t\tFONT\\4\t\tRISC OS 4bpp font data\n>5\tbyte\t\tx\t\tversion %d\n\n# RISC OS Music files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring\t\tMaestro\\r\tRISC OS music file\n>8\tbyte\t\tx\t\tversion %d\n\n>8\tbyte\t\tx\t\ttype %d\n\n# Digital Symphony data files\n# From: Bernard Jungen (bern8817@euphonynet.be)\n0\t\tstring\t\\x02\\x01\\x13\\x13\\x13\\x01\\x0d\\x10\tDigital Symphony sound sample (RISC OS),\n>8\t\tbyte\tx\tversion %d,\n>9\t\tpstring\tx\tnamed \"%s\",\n>(9.b+19)\tbyte\t=0\t8-bit logarithmic\n>(9.b+19)\tbyte\t=1\tLZW-compressed linear\n>(9.b+19)\tbyte\t=2\t8-bit linear signed\n>(9.b+19)\tbyte\t=3\t16-bit linear signed\n>(9.b+19)\tbyte\t=4\tSigmaDelta-compressed linear\n>(9.b+19)\tbyte\t=5\tSigmaDelta-compressed logarithmic\n>(9.b+19)\tbyte\t>5\tunknown format\n\n0\tstring\t\\x02\\x01\\x13\\x13\\x14\\x12\\x01\\x0b\tDigital Symphony song (RISC OS),\n>8\tbyte\tx\tversion %d,\n>9\tbyte\t=1\t1 voice,\n>9\tbyte\t!1\t%d voices,\n>10\tleshort\t=1\t1 track,\n>10\tleshort\t!1\t%d tracks,\n>12\tleshort\t=1\t1 pattern\n>12\tleshort\t!1\t%d patterns\n\n0\tstring\t\\x02\\x01\\x13\\x13\\x10\\x14\\x12\\x0e\n>9\tbyte\t=0\tDigital Symphony sequence (RISC OS),\n>>8\tbyte\tx\tversion %d,\n>>10\tbyte\t=1\t1 line,\n>>10\tbyte\t!1\t%d lines,\n>>11\tleshort\t=1\t1 position\n>>11\tleshort\t!1\t%d positions\n>9\tbyte\t=1\tDigital Symphony pattern data (RISC OS),\n>>8\tbyte\tx\tversion %d,\n>>10\tleshort\t=1\t1 pattern\n>>10\tleshort\t!1\t%d patterns\n\n#------------------------------------------------------------------------------\n# $File$\n# adi: file(1) magic for ADi's objects\n# From Gregory McGarry <g.mcgarry@ieee.org>\n#\n0\tleshort\t\t0x521c\t\tCOFF DSP21k\n>18\tlelong\t\t&02\t\texecutable,\n>18\tlelong\t\t^02\n>>18\tlelong\t\t&01\t\tstatic object,\n>>18\tlelong\t\t^01\t\trelocatable object,\n>18\tlelong\t\t&010\t\tstripped\n>18\tlelong\t\t^010\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: adventure,v 1.13 2010/12/31 16:32:54 christos Exp $\n# adventure: file(1) magic for Adventure game files\n#\n# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>\n# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998\n# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002\n#\n# ALAN\n# I assume there are other, lower versions, but these are the only ones I\n# saw in the archive.\n0\tbeshort\t0x0206\tALAN game data\n>2\tbyte\t<10\tversion 2.6%d\n\n\n# Infocom (see z-machine)\n#------------------------------------------------------------------------------\n# Z-machine:  file(1) magic for Z-machine binaries.\n# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n#http://www.gnelson.demon.co.uk/zspec/sect11.html\n#http://www.jczorkmid.net/~jpenney/ZSpec11-latest.txt\n#http://en.wikipedia.org/wiki/Z-machine\n# The first byte is the Z-machine revision; it is always between 1 and 8. We\n# had false matches (for instance, inbig5.ocp from the Omega TeX extension as\n# well as an occasional MP3 file), so we sanity-check the version number.\n#\n# It might be possible to sanity-check the release number as well, as it seems\n# (at least in classic Infocom games) to always be a relatively small number,\n# always under 150 or so, but as this isn't rigorous, we'll wait on that until\n# it becomes clear that it's needed.\n#\n0\tubyte\t\t\t>0\n>0\tubyte\t\t\t<9\n>>16\tbelong&0xfe00f0f0\t0x3030\n>>>0\tubyte\t\t\t< 10\n>>>>2\tubeshort\t\t< 10\n>>>>>18\tregex\t\t\t[0-9][0-9][0-9][0-9][0-9][0-9]\n>>>>>>0\tubyte\t\t\t< 10\tInfocom (Z-machine %d,\n>>>>>>>2\tubeshort\t< 10 \tRelease %d /\n>>>>>>>>18\tstring\t\t>\\0\tSerial %.6s)\n!:strength + 40\n\n#------------------------------------------------------------------------------\n# Glulx:  file(1) magic for Glulx binaries.\n#\n# I haven't checked for false matches yet.\n#\n0\tstring\t\t\tGlul\tGlulx game data\n>4\tbeshort\t\t\tx\t(Version %d\n>>6\tbyte\t\t\tx\t\\b.%d\n>>8\tbyte\t\t\tx\t\\b.%d)\n>36\tstring\t\t\tInfo\tCompiled by Inform\n\n\n\n# For Quetzal and blorb magic see iff\n\n\n# TADS (Text Adventure Development System) version 2\n#  All files are machine-independent (games compile to byte-code) and are tagged\n#  with a version string of the form \"V2.<digit>.<digit>\\0\".\n#  Game files start with \"TADS2 bin\\n\\r\\032\\0\" then the compiler version.\n0\tstring\tTADS2\\ bin\tTADS\n>9\tbelong  !0x0A0D1A00\tgame data, CORRUPTED\n>9\tbelong\t 0x0A0D1A00\n>>13\tstring\t>\\0\t\t%s game data\n#  Resource files start with \"TADS2 rsc\\n\\r\\032\\0\" then the compiler version.\n0\tstring\tTADS2\\ rsc\tTADS\n>9\tbelong  !0x0A0D1A00\tresource data, CORRUPTED\n>9\tbelong\t 0x0A0D1A00\n>>13\tstring\t>\\0\t\t%s resource data\n#  Some saved game files start with \"TADS2 save/g\\n\\r\\032\\0\", a little-endian\n#  2-byte length N, the N-char name of the game file *without* a NUL (darn!),\n# \"TADS2 save\\n\\r\\032\\0\" and the interpreter version. \n0\tstring\tTADS2\\ save/g\tTADS\n>12\tbelong\t!0x0A0D1A00\tsaved game data, CORRUPTED\n>12\tbelong\t 0x0A0D1A00\n>>(16.s+32) string >\\0\t\t%s saved game data\n#  Other saved game files start with \"TADS2 save\\n\\r\\032\\0\" and the interpreter\n#  version.\n0\tstring\tTADS2\\ save\tTADS\n>10\tbelong\t!0x0A0D1A00\tsaved game data, CORRUPTED\n>10\tbelong\t 0x0A0D1A00\n>>14\tstring\t>\\0\t\t%s saved game data\n\n# TADS (Text Adventure Development System) version 3\n#  Game files start with \"T3-image\\015\\012\\032\"\n0\tstring\tT3-image\\015\\012\\032\n>11\tleshort\tx\t\tTADS 3 game data (format version %d)\n#  Saved game files start with \"T3-state-v####\\015\\012\\032\"\n#  where #### is a format version number\n0\tstring\tT3-state-v\n>14\tstring\t\\015\\012\\032\tTADS 3 saved game data (format version\n>>10\tbyte\tx\t\t%c\n>>11\tbyte\tx\t\t\\b%c\n>>12\tbyte\tx\t\t\\b%c\n>>13\tbyte\tx\t\t\\b%c)\n\n# Danny Milosavljevic <danny.milo@gmx.net>\n# this are adrift (adventure game standard) game files, extension .taf\n# depending on version magic continues with 0x93453E6139FA (V 4.0)\n# 0x9445376139FA (V 3.90)\n# 0x9445366139FA (V 3.80)\n# this is from source (http://www.adrift.org.uk/) and I have some taf\n# files, and checked them.\n#0\tbelong\t0x3C423FC9\n#>4\tbelong\t0x6A87C2CF\tAdrift game file\n#!:mime\tapplication/x-adrift\n\n#------------------------------------------------------------------------------\n# $File$\n# allegro:  file(1) magic for Allegro datafiles\n# Toby Deshane <hac@shoelace.digivill.net>\n#\n0 belong 0x736C6821   Allegro datafile (packed)\n0 belong 0x736C682E   Allegro datafile (not packed/autodetect)\n0 belong 0x736C682B   Allegro datafile (appended exe data)\n\n#------------------------------------------------------------------------------\n# $File$\n# alliant:  file(1) magic for Alliant FX series a.out files\n#\n# If the FX series is the one that had a processor with a 68K-derived\n# instruction set, the \"short\" should probably become \"beshort\" and the\n# \"long\" should probably become \"belong\".\n# If it's the i860-based one, they should probably become either the\n# big-endian or little-endian versions, depending on the mode they ran\n# the 860 in....\n#\n0\tshort\t\t0420\t\t0420 Alliant virtual executable\n>2\tshort\t\t&0x0020\t\tcommon library\n>16\tlong\t\t>0\t\tnot stripped\n0\tshort\t\t0421\t\t0421 Alliant compact executable\n>2\tshort\t\t&0x0020\t\tcommon library\n>16\tlong\t\t>0\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File$\n# alpha architecture description\n#\n\n0\tleshort\t\t0603\t\tCOFF format alpha\n>22\tleshort&030000\t!020000\t\texecutable\n>24\tleshort\t\t0410\t\tpure\n>24\tleshort\t\t0413\t\tpaged\n>22\tleshort&020000\t!0\t\tdynamically linked\n>16\tlelong\t\t!0\t\tnot stripped\n>16\tlelong\t\t0\t\tstripped\n>22\tleshort&030000\t020000\t\tshared library\n>24\tleshort\t\t0407\t\tobject\n>27\tbyte\t\tx\t\t- version %d\n>26\tbyte\t\tx\t\t\b.%d\n>28\tbyte\t\tx\t\t\b-%d\n\n# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>\n#\n# The actual magic number is just \"Core\", followed by a 2-byte version\n# number; however, treating any file that begins with \"Core\" as a Digital\n# UNIX core dump file may produce too many false hits, so we include one\n# byte of the version number as well; DU 5.0 appears only to be up to\n# version 2.\n#\n0\tstring\t\tCore\\001\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n0\tstring\t\tCore\\002\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n\n\n#------------------------------------------------------------------------------\n# $File$\n# amanda:  file(1) magic for amanda file format\n#\n0\tstring\tAMANDA:\\ \t\tAMANDA \n>8\tstring\tTAPESTART\\ DATE\t\ttape header file,\n>>23\tstring\tX\n>>>25\tstring\t>\\ \t\t\tUnused %s\n>>23\tstring\t>\\ \t\t\tDATE %s\n>8\tstring\tFILE\\ \t\t\tdump file,\n>>13\tstring\t>\\ \t\t\tDATE %s\n\n#------------------------------------------------------------------------------\n# $File: amigaos,v 1.14 2009/09/19 16:28:07 christos Exp $\n# amigaos:  file(1) magic for AmigaOS binary formats:\n\n#\n# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)\n#\n0\tbelong\t\t0x000003fa\tAmigaOS shared library\n0\tbelong\t\t0x000003f3\tAmigaOS loadseg()ble executable/binary\n0\tbelong\t\t0x000003e7\tAmigaOS object/library data\n#\n0\tbeshort\t\t0xe310\t\tAmiga Workbench\n>2\tbeshort\t\t1\t\t\n>>48\tbyte\t\t1\t\tdisk icon\n>>48\tbyte\t\t2\t\tdrawer icon\n>>48\tbyte\t\t3\t\ttool icon\n>>48\tbyte\t\t4\t\tproject icon\n>>48\tbyte\t\t5\t\tgarbage icon\n>>48\tbyte\t\t6\t\tdevice icon\n>>48\tbyte\t\t7\t\tkickstart icon\n>>48\tbyte\t\t8\t\tworkbench application icon\n>2\tbeshort\t\t>1\t\ticon, vers. %d\n#\n# various sound formats from the Amiga\n# G=F6tz Waschk <waschk@informatik.uni-rostock.de>\n#\n0\tstring\t\tFC14\t\tFuture Composer 1.4 Module sound file\n0\tstring\t\tSMOD\t\tFuture Composer 1.3 Module sound file\n0\tstring\t\tAON4artofnoise\tArt Of Noise Module sound file\n1\tstring\t\tMUGICIAN/SOFTEYES Mugician Module sound file\n58\tstring\t\tSIDMON\\ II\\ -\\ THE\tSidmon 2.0 Module sound file\n0\tstring\t\tSynth4.0\tSynthesis Module sound file\n0\tstring\t\tARP.\t\tThe Holy Noise Module sound file\n0\tstring\t\tBeEp\\0\t\tJamCracker Module sound file\n0\tstring\t\tCOSO\\0\t\tHippel-COSO Module sound file\n# Too simple (short, pure ASCII, deep), MPi\n#26\tstring\t\tV.3\t\tBrian Postma's Soundmon Module sound file v3\n#26\tstring\t\tBPSM\t\tBrian Postma's Soundmon Module sound file v3\n#26\tstring\t\tV.2\t\tBrian Postma's Soundmon Module sound file v2\n\n# The following are from: \"Stefan A. Haubenthal\" <polluks@web.de>\n0\tbeshort\t\t0x0f00\t\tAmigaOS bitmap font\n0\tbeshort\t\t0x0f03\t\tAmigaOS outline font\n0\tbelong\t\t0x80001001\tAmigaOS outline tag\n0\tstring\t\t##\\ version\tcatalog translation\n0\tstring\t\tEMOD\\0\t\tAmiga E module\n8\tstring\t\tECXM\\0\t\tECX module\n0\tstring/c\t@database\tAmigaGuide file\n\n# Amiga disk types\n# \n0\tstring\t\tRDSK\t\tRigid Disk Block\n>160\tstring\t\tx\t\ton %.24s\n0\tstring\t\tDOS\\0\t\tAmiga DOS disk\n0\tstring\t\tDOS\\1\t\tAmiga FFS disk\n0\tstring\t\tDOS\\2\t\tAmiga Inter DOS disk\n0\tstring\t\tDOS\\3\t\tAmiga Inter FFS disk\n0\tstring\t\tDOS\\4\t\tAmiga Fastdir DOS disk\n0\tstring\t\tDOS\\5\t\tAmiga Fastdir FFS disk\n0\tstring\t\tKICK\t\tKickstart disk\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n0\tstring\t\tLZX\t\tLZX compressed archive (Amiga)\n\n# From: Przemek Kramarczyk <pkramarczyk@gmail.com>\n0\tstring \t\t.KEY\t\tAmigaDOS script\n0\tstring \t\t.key\t\tAmigaDOS script\n\n#------------------------------------------------------------\n# $File: android,v 1.6 2014/08/04 06:00:36 christos Exp $\n# Various android related magic entries\n#------------------------------------------------------------\n\n# Dalvik .dex format. http://retrodev.com/android/dexformat.html\n# From <mkf@google.com> \"Mike Fleming\"\n# Fixed to avoid regexec 17 errors on some dex files\n# From <diff@lookout.com> \"Tim Strazzere\"\n0\tstring\tdex\\n\n>0\tregex\tdex\\n[0-9]{2}\\0\tDalvik dex file\n>4\tstring\t>000\t\t\tversion %s\n0\tstring\tdey\\n\n>0\tregex\tdey\\n[0-9]{2}\\0\tDalvik dex file (optimized for host)\n>4\tstring\t>000\t\t\tversion %s\n\n# Android bootimg format\n# From https://android.googlesource.com/\\\n# platform/system/core/+/master/mkbootimg/bootimg.h\n0\t\tstring\tANDROID!\tAndroid bootimg\n>1024\tstring\tLOKI\\01\t\t\\b, LOKI'd\n>8\t\tlelong\t>0\t\t\t\\b, kernel\n>>12\tlelong\t>0\t\t\t\\b (0x%x)\n>16\t\tlelong\t>0\t\t\t\\b, ramdisk\n>>20\tlelong\t>0\t\t\t\\b (0x%x)\n>24\t\tlelong\t>0\t\t\t\\b, second stage\n>>28\tlelong\t>0\t\t\t\\b (0x%x)\n>36\t\tlelong\t>0\t\t\t\\b, page size: %d\n>38\t\tstring\t>0\t\t\t\\b, name: %s\n>64\t\tstring\t>0\t\t \t\\b, cmdline (%s)\n\n# Android Backup archive\n# From: Ariel Shkedi\n# File extension: .ab\n# No mime-type defined\n# URL: https://github.com/android/platform_frameworks_base/blob/\\\n# 0bacfd2ba68d21a68a3df345b830bc2a1e515b5a/services/java/com/\\\n# android/server/BackupManagerService.java#L2367\n# After the header comes a tar file\n# If compressed, the entire tar file is compressed with JAVA deflate\n#\n# Include the version number hardcoded with the magic string to avoid\n# false positives\n0\tstring/b\tANDROID\\ BACKUP\\n1\\n\tAndroid Backup\n>17\tstring\t\t0\\n\t\t\t\\b, Not-Compressed\n>17\tstring\t\t1\\n\t\t\t\\b, Compressed\n# any string as long as it's not the word none (which is matched below)\n>>19    regex/1l\t\\^([^n\\n]|n[^o]|no[^n]|non[^e]|none.+).*\t\\b, Encrypted (%s)\n>>19\tstring\t\tnone\\n\t\t\t\\b, Not-Encrypted\n# Commented out because they don't seem useful to print\n# (but they are part of the header - the tar file comes after them):\n#>>>&1\t\tregex/1l .*\t\\b, Password salt: %s\n#>>>>&1\t\tregex/1l .*\t\\b, Master salt: %s\n#>>>>>&1\tregex/1l .*\t\\b, PBKDF2 rounds: %s\n#>>>>>>&1\tregex/1l .*\t\\b, IV: %s\n#>>>>>>>&1\tregex/1l .*\t\\b, Key: %s\n\n# *.pit files by Joerg Jenderek\n# http://forum.xda-developers.com/showthread.php?p=9122369\n# http://forum.xda-developers.com/showthread.php?t=816449\n# Partition Information Table for Samsung's smartphone with Android\n# used by flash software Odin\n0\t\tulelong\t\t\t0x12349876\t\n# 1st pit entry marker\n>0x01C\tulequad&0xFFFFFFFCFFFFFFFC\t=0x0000000000000000\t\n# minimal 13 and maximal 18 PIT entries found\n>>4\t\tulelong\t\t\t<128\tPartition Information Table for Samsung smartphone\n>>>4\t\tulelong\t\t\tx\t\\b, %d entries\n# 1. pit entry\n>>>4\t\tulelong\t\t\t>0\t\\b; #1\n>>>0x01C\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>1\t\\b; #2\n>>>0x0A0\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>2\t\\b; #3\n>>>0x124\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>3\t\\b; #4\n>>>0x1A8\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>4\t\\b; #5\n>>>0x22C\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>5\t\\b; #6\n>>>0x2B0\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>6\t\\b; #7\n>>>0x334\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>7 \t\\b; #8\n>>>0x3B8\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>8 \t\\b; #9\n>>>0x43C\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>9\t\\b; #10\n>>>0x4C0\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>10\t\\b; #11\n>>>0x544\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>11\t\\b; #12\n>>>0x5C8\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>12\t\\b; #13\n>>>>0x64C\tuse\t\t\t\tPIT-entry\n# 14. pit entry\n>>>4\t\tulelong\t\t\t>13\t\\b; #14\n>>>>0x6D0\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>14\t\\b; #15\n>>>0x754\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>15\t\\b; #16\n>>>0x7D8\tuse\t\t\t\tPIT-entry\n>>>4\t\tulelong\t\t\t>16\t\\b; #17\n>>>0x85C\tuse\t\t\t\tPIT-entry\n# 18. pit entry\n>>>4\t\tulelong\t\t\t>17\t\\b; #18\n>>>0x8E0\tuse\t\t\t\tPIT-entry\n\n0\tname\t\t\tPIT-entry\n# garbage value implies end of pit entries\n>0x00\t\tulequad&0xFFFFFFFCFFFFFFFC\t=0x0000000000000000\t\n# skip empty partition name\n>>0x24\t\tubyte\t\t\t\t!0\t\t\t\n# partition name\n>>>0x24\t\tstring\t\t\t\t>\\0\t\t\t%-.32s\n# flags\n>>>0x0C\t\tulelong&0x00000002\t\t2\t\t\t\\b+RW\n# partition ID:\n# 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~KENREl,RECOVER,misc;7~RECOVER\n# ;11~MODEM;20~efs;21~PARAM;22~FACTORY,SYSTEM;23~DBDATAFS,USERDATA;24~CACHE;80~BOOTLOADER;81~TZSW\n>>>0x08\tulelong\t\tx\t\t\t(0x%x)\n# filename\n>>>0x44\t\tstring\t\t\t\t>\\0\t\t\t\"%-.64s\"\n#>>>0x18\tulelong\t\t\t\t>0\t\t\t\n# blocksize in 512 byte units ?\n#>>>>0x18\tulelong\t\t\t\tx\t\t\t\\b, %db\n# partition size in blocks ?\n#>>>>0x22\tulelong\t\t\t\tx\t\t\t\\b*%d\n\n# Android bootimg format\n# From https://android.googlesource.com/\\\n# platform/system/core/+/master/libsparse/sparse_format.h\n0\t\tlelong\t0xed26ff3a\t\tAndroid sparse image\n>4\t\tleshort\tx\t\t\t\\b, version: %d\n>6\t\tleshort\tx\t\t\t\\b.%d\n>16\t\tlelong\tx\t\t\t\\b, Total of %d\n>12\t\tlelong\tx\t\t\t\\b %d-byte output blocks in\n>20\t\tlelong\tx\t\t\t\\b %d input chunks.\n\n#------------------------------------------------------------------------------\n# $File: animation,v 1.55 2014/09/13 14:29:51 christos Exp $\n# animation:  file(1) magic for animation/movie formats\n#\n# animation formats\n# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)\n# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)\n\n# SGI and Apple formats\n0\tstring\t\tMOVI\t\tSilicon Graphics movie file\n!:mime\tvideo/x-sgi-movie\n4       string          moov            Apple QuickTime\n!:mime\tvideo/quicktime\n>12     string          mvhd            \\b movie (fast start)\n>12     string          mdra            \\b URL\n>12     string          cmov            \\b movie (fast start, compressed header)\n>12     string          rmra            \\b multiple URLs\n4       string          mdat            Apple QuickTime movie (unoptimized)\n!:mime\tvideo/quicktime\n#4       string          wide            Apple QuickTime movie (unoptimized)\n#!:mime\tvideo/quicktime\n#4       string          skip            Apple QuickTime movie (modified)\n#!:mime\tvideo/quicktime\n#4       string          free            Apple QuickTime movie (modified)\n#!:mime\tvideo/quicktime\n4       string          idsc            Apple QuickTime image (fast start)\n!:mime\timage/x-quicktime\n#4       string          idat            Apple QuickTime image (unoptimized)\n#!:mime\timage/x-quicktime\n4       string          pckg            Apple QuickTime compressed archive\n!:mime\tapplication/x-quicktime-player\n4\tstring/W\tjP\t\tJPEG 2000 image\n!:mime\timage/jp2\n# http://www.ftyps.com/ with local additions\n4\tstring\t\tftyp\t\tISO Media\n>8\tstring\t\t3g2\t\t\\b, MPEG v4 system, 3GPP2\n!:mime\tvideo/3gpp2\n>>11\tbyte\t\t4\t\t\\b v4 (H.263/AMR GSM 6.10)\n>>11\tbyte\t\t5\t\t\\b v5 (H.263/AMR GSM 6.10)\n>>11\tbyte\t\t6\t\t\\b v6 (ITU H.264/AMR GSM 6.10)\n>>11\tbyte\t\ta\t\t\\b C.S0050-0 V1.0\n>>11\tbyte\t\tb\t\t\\b C.S0050-0-A V1.0.0\n>>11\tbyte\t\tc\t\t\\b C.S0050-0-B V1.0\n>8\tstring\t\t3ge\t\t\\b, MPEG v4 system, 3GPP\n!:mime\tvideo/3gpp\n>>11\tbyte\t\t6\t\t\\b, Release 6 MBMS Extended Presentations\n>>11\tbyte\t\t7\t\t\\b, Release 7 MBMS Extended Presentations\n>8\tstring\t\t3gg\t\t\\b, MPEG v4 system, 3GPP\n>11\tbyte\t\t6\t\t\\b, Release 6 General Profile\n!:mime\tvideo/3gpp\n>8\tstring\t\t3gp\t\t\\b, MPEG v4 system, 3GPP\n>11\tbyte\t\t1\t\t\\b, Release %d (non existent)\n>11\tbyte\t\t2\t\t\\b, Release %d (non existent)\n>11\tbyte\t\t3\t\t\\b, Release %d (non existent)\n>11\tbyte\t\t4\t\t\\b, Release %d\n>11\tbyte\t\t5\t\t\\b, Release %d\n>11\tbyte\t\t6\t\t\\b, Release %d\n>11\tbyte\t\t7\t\t\\b, Release %d Streaming Servers\n!:mime\tvideo/3gpp\n>8\tstring\t\t3gs\t\t\\b, MPEG v4 system, 3GPP\n>11\tbyte\t\t7\t\t\\b, Release %d Streaming Servers\n!:mime\tvideo/3gpp\n>8\tstring\t\tavc1\t\t\\b, MPEG v4 system, 3GPP JVT AVC [ISO 14496-12:2005]\n!:mime\tvideo/mp4\n>8\tstring/W\tqt\t\t\\b, Apple QuickTime movie\n!:mime\tvideo/quicktime\n>8\tstring\t\tCAEP\t\t\\b, Canon Digital Camera\n>8\tstring\t\tcaqv\t\t\\b, Casio Digital Camera\n>8\tstring\t\tCDes\t\t\\b, Convergent Design\n>8\tstring\t\tda0a\t\t\\b, DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG\n>8\tstring\t\tda0b\t\t\\b, DMB MAF, ext DA0A, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tda1a\t\t\\b, DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images\n>8\tstring\t\tda1b\t\t\\b, DMB MAF, ext da1a, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tda2a\t\t\\b, DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG\n>8\tstring\t\tda2b\t\t\\b, DMB MAF, ext da2a, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tda3a\t\t\\b, DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images\n>8\tstring\t\tda3b\t\t\\b, DMB MAF, ext da3a w/ BIFS, 3GPP, DID, TVA, REL, IPMP\n>8\tstring\t\tdmb1\t\t\\b, DMB MAF supporting all the components defined in the spec\n>8\tstring\t\tdmpf\t\t\\b, Digital Media Project\n>8\tstring\t\tdrc1\t\t\\b, Dirac (wavelet compression), encap in ISO base media (MP4)\n>8\tstring\t\tdv1a\t\t\\b, DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG, TS\n>8\tstring\t\tdv1b\t\t\\b, DMB MAF, ext dv1a, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tdv2a\t\t\\b, DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG, TS\n>8\tstring\t\tdv2b\t\t\\b, DMB MAF, ext dv2a, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tdv3a\t\t\\b, DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG, TS\n>8\tstring\t\tdv3b\t\t\\b, DMB MAF, ext dv3a, with 3GPP timed text, DID, TVA, REL, IPMP\n>8\tstring\t\tdvr1\t\t\\b, DVB (.DVB) over RTP\n!:mime\tvideo/vnd.dvb.file\n>8\tstring\t\tdvt1\t\t\\b, DVB (.DVB) over MPEG-2 Transport Stream\n!:mime\tvideo/vnd.dvb.file\n>8\tstring\t\tF4V\t\t\\b, Video for Adobe Flash Player 9+ (.F4V)\n!:mime\tvideo/mp4\n>8\tstring\t\tF4P\t\t\\b, Protected Video for Adobe Flash Player 9+ (.F4P)\n!:mime\tvideo/mp4\n>8\tstring\t\tF4A\t\t\\b, Audio for Adobe Flash Player 9+ (.F4A)\n!:mime\taudio/mp4\n>8\tstring\t\tF4B\t\t\\b, Audio Book for Adobe Flash Player 9+ (.F4B)\n!:mime\taudio/mp4\n>8\tstring\t\tisc2\t\t\\b, ISMACryp 2.0 Encrypted File\n#\t?/enc-isoff-generic\n>8\tstring\t\tiso2\t\t\\b, MP4 Base Media v2 [ISO 14496-12:2005]\n!:mime\tvideo/mp4\n>8\tstring\t\tisom\t\t\\b, MP4 Base Media v1 [IS0 14496-12:2003]\n!:mime\tvideo/mp4\n>8\tstring/W\tjp2\t\t\\b, JPEG 2000\n!:mime\timage/jp2\n>8\tstring\t\tJP2\t\t\\b, JPEG 2000 Image (.JP2) [ISO 15444-1 ?]\n!:mime\timage/jp2\n>8\tstring\t\tJP20\t\t\\b, Unknown, from GPAC samples (prob non-existent)\n>8\tstring\t\tjpm\t\t\\b, JPEG 2000 Compound Image (.JPM) [ISO 15444-6]\n!:mime\timage/jpm\n>8\tstring\t\tjpx\t\t\\b, JPEG 2000 w/ extensions (.JPX) [ISO 15444-2]\n!:mime\timage/jpx\n>8\tstring\t\tKDDI\t\t\\b, 3GPP2 EZmovie for KDDI 3G cellphones\n!:mime\tvideo/3gpp2\n>8\tstring\t\tM4A \t\t\\b, Apple iTunes ALAC/AAC-LC (.M4A) Audio\n!:mime\taudio/x-m4a\n>8\tstring\t\tM4B \t\t\\b, Apple iTunes ALAC/AAC-LC (.M4B) Audio Book\n!:mime\taudio/mp4\n>8\tstring\t\tM4P \t\t\\b, Apple iTunes ALAC/AAC-LC (.M4P) AES Protected Audio\n!:mime\tvideo/mp4\n>8\tstring\t\tM4V \t\t\\b, Apple iTunes Video (.M4V) Video\n!:mime\tvideo/x-m4v\n>8\tstring\t\tM4VH\t\t\\b, Apple TV (.M4V)\n!:mime\tvideo/x-m4v\n>8\tstring\t\tM4VP\t\t\\b, Apple iPhone (.M4V)\n!:mime\tvideo/x-m4v\n>8\tstring\t\tmj2s\t\t\\b, Motion JPEG 2000 [ISO 15444-3] Simple Profile\n!:mime\tvideo/mj2\n>8\tstring\t\tmjp2\t\t\\b, Motion JPEG 2000 [ISO 15444-3] General Profile\n!:mime\tvideo/mj2\n>8\tstring\t\tmmp4\t\t\\b, MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT)\n!:mime\tvideo/mp4\n>8\tstring\t\tmobi\t\t\\b, MPEG-4, MOBI format\n!:mime\tvideo/mp4\n>8\tstring\t\tmp21\t\t\\b, MPEG-21 [ISO/IEC 21000-9]\n>8\tstring\t\tmp41\t\t\\b, MP4 v1 [ISO 14496-1:ch13]\n!:mime\tvideo/mp4\n>8\tstring\t\tmp42\t\t\\b, MP4 v2 [ISO 14496-14]\n!:mime\tvideo/mp4\n>8\tstring\t\tmp71\t\t\\b, MP4 w/ MPEG-7 Metadata [per ISO 14496-12]\n>8\tstring\t\tmp7t\t\t\\b, MPEG v4 system, MPEG v7 XML\n>8\tstring\t\tmp7b\t\t\\b, MPEG v4 system, MPEG v7 binary XML\n>8\tstring\t\tmmp4\t\t\\b, MPEG v4 system, 3GPP Mobile\n!:mime\tvideo/mp4\n>8\tstring\t\tMPPI\t\t\\b, Photo Player, MAF [ISO/IEC 23000-3]\n>8\tstring\t\tmqt\t\t\\b, Sony / Mobile QuickTime (.MQV) US Pat 7,477,830\n!:mime\tvideo/quicktime\n>8\tstring\t\tMSNV\t\t\\b, MPEG-4 (.MP4) for SonyPSP\n!:mime\taudio/mp4\n>8\tstring\t\tNDAS\t\t\\b, MP4 v2 [ISO 14496-14] Nero Digital AAC Audio\n!:mime\taudio/mp4\n>8\tstring\t\tNDSC\t\t\\b, MPEG-4 (.MP4) Nero Cinema Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDSH\t\t\\b, MPEG-4 (.MP4) Nero HDTV Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDSM\t\t\\b, MPEG-4 (.MP4) Nero Mobile Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDSP\t\t\\b, MPEG-4 (.MP4) Nero Portable Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDSS\t\t\\b, MPEG-4 (.MP4) Nero Standard Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDXC\t\t\\b, H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDXH\t\t\\b, H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDXM\t\t\\b, H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDXP\t\t\\b, H.264/MPEG-4 AVC (.MP4) Nero Portable Profile\n!:mime\tvideo/mp4\n>8\tstring\t\tNDXS\t\t\\b, H.264/MPEG-4 AVC (.MP4) Nero Standard Profile\n!:mime\tvideo/mp4\n>8\tstring\t\todcf  \t\t\\b, OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)\n>8\tstring\t\topf2 \t\t\\b, OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)\n>8\tstring\t\topx2  \t\t\\b, OMA PDCF DRM + XBS ext (OMA-TS-DRM_XBS-V1_0-20070529-C)\n>8\tstring\t\tpana\t\t\\b, Panasonic Digital Camera\n>8\tstring\t\tqt  \t\t\\b, Apple QuickTime (.MOV/QT)\n!:mime\tvideo/quicktime\n>8\tstring\t\tROSS\t\t\\b, Ross Video\n>8\tstring\t\tsdv\t\t\\b, SD Memory Card Video\n>8\tstring\t\tssc1\t\t\\b, Samsung stereo, single stream (patent pending)\n>8\tstring\t\tssc2\t\t\\b, Samsung stereo, dual stream (patent pending)\n\n# MPEG sequences\n# Scans for all common MPEG header start codes\n0\t belong\t\t    0x00000001     \n>4\t byte&0x1F\t    0x07\t   JVT NAL sequence, H.264 video\n>>5      byte               66             \\b, baseline\n>>5      byte               77             \\b, main\n>>5      byte               88             \\b, extended\n>>7      byte               x              \\b @ L %u\n0        belong&0xFFFFFF00  0x00000100     \n>3       byte               0xBA           MPEG sequence\n!:mime  video/mpeg\n>>4      byte               &0x40          \\b, v2, program multiplex\n>>4      byte               ^0x40          \\b, v1, system multiplex\n>3       byte               0xBB           MPEG sequence, v1/2, multiplex (missing pack header)\n>3       byte&0x1F          0x07           MPEG sequence, H.264 video\n>>4      byte               66             \\b, baseline\n>>4      byte               77             \\b, main\n>>4      byte               88             \\b, extended\n>>6      byte               x              \\b @ L %u\n# GRR too general as it catches also FoxPro Memo example NG.FPT\n>3       byte               0xB0           MPEG sequence, v4\n# TODO: maybe this extra line exclude FoxPro Memo example NG.FPT starting with 000001b0 00000100 00000000\n#>>4      byte               !0             MPEG sequence, v4\n!:mime  video/mpeg4-generic\n>>5      belong             0x000001B5\n>>>9     byte               &0x80\n>>>>10   byte&0xF0          16             \\b, video\n>>>>10   byte&0xF0          32             \\b, still texture\n>>>>10   byte&0xF0          48             \\b, mesh\n>>>>10   byte&0xF0          64             \\b, face\n>>>9     byte&0xF8          8              \\b, video\n>>>9     byte&0xF8          16             \\b, still texture\n>>>9     byte&0xF8          24             \\b, mesh\n>>>9     byte&0xF8          32             \\b, face\n>>4      byte               1              \\b, simple @ L1\n>>4      byte               2              \\b, simple @ L2\n>>4      byte               3              \\b, simple @ L3\n>>4      byte               4              \\b, simple @ L0\n>>4      byte               17             \\b, simple scalable @ L1\n>>4      byte               18             \\b, simple scalable @ L2\n>>4      byte               33             \\b, core @ L1\n>>4      byte               34             \\b, core @ L2\n>>4      byte               50             \\b, main @ L2\n>>4      byte               51             \\b, main @ L3\n>>4      byte               53             \\b, main @ L4\n>>4      byte               66             \\b, n-bit @ L2\n>>4      byte               81             \\b, scalable texture @ L1\n>>4      byte               97             \\b, simple face animation @ L1\n>>4      byte               98             \\b, simple face animation @ L2\n>>4      byte               99             \\b, simple face basic animation @ L1\n>>4      byte               100            \\b, simple face basic animation @ L2\n>>4      byte               113            \\b, basic animation text @ L1\n>>4      byte               114            \\b, basic animation text @ L2\n>>4      byte               129            \\b, hybrid @ L1\n>>4      byte               130            \\b, hybrid @ L2\n>>4      byte               145            \\b, advanced RT simple @ L!\n>>4      byte               146            \\b, advanced RT simple @ L2\n>>4      byte               147            \\b, advanced RT simple @ L3\n>>4      byte               148            \\b, advanced RT simple @ L4\n>>4      byte               161            \\b, core scalable @ L1\n>>4      byte               162            \\b, core scalable @ L2\n>>4      byte               163            \\b, core scalable @ L3\n>>4      byte               177            \\b, advanced coding efficiency @ L1\n>>4      byte               178            \\b, advanced coding efficiency @ L2\n>>4      byte               179            \\b, advanced coding efficiency @ L3\n>>4      byte               180            \\b, advanced coding efficiency @ L4\n>>4      byte               193            \\b, advanced core @ L1\n>>4      byte               194            \\b, advanced core @ L2\n>>4      byte               209            \\b, advanced scalable texture @ L1\n>>4      byte               210            \\b, advanced scalable texture @ L2\n>>4      byte               211            \\b, advanced scalable texture @ L3\n>>4      byte               225            \\b, simple studio @ L1\n>>4      byte               226            \\b, simple studio @ L2\n>>4      byte               227            \\b, simple studio @ L3\n>>4      byte               228            \\b, simple studio @ L4\n>>4      byte               229            \\b, core studio @ L1\n>>4      byte               230            \\b, core studio @ L2\n>>4      byte               231            \\b, core studio @ L3\n>>4      byte               232            \\b, core studio @ L4\n>>4      byte               240            \\b, advanced simple @ L0\n>>4      byte               241            \\b, advanced simple @ L1\n>>4      byte               242            \\b, advanced simple @ L2\n>>4      byte               243            \\b, advanced simple @ L3\n>>4      byte               244            \\b, advanced simple @ L4\n>>4      byte               245            \\b, advanced simple @ L5\n>>4      byte               247            \\b, advanced simple @ L3b\n>>4      byte               248            \\b, FGS @ L0\n>>4      byte               249            \\b, FGS @ L1\n>>4      byte               250            \\b, FGS @ L2\n>>4      byte               251            \\b, FGS @ L3\n>>4      byte               252            \\b, FGS @ L4\n>>4      byte               253            \\b, FGS @ L5\n>3       byte               0xB5           MPEG sequence, v4\n!:mime  video/mpeg4-generic\n>>4      byte               &0x80\n>>>5     byte&0xF0          16             \\b, video (missing profile header)\n>>>5     byte&0xF0          32             \\b, still texture (missing profile header)\n>>>5     byte&0xF0          48             \\b, mesh (missing profile header)\n>>>5     byte&0xF0          64             \\b, face (missing profile header)\n>>4      byte&0xF8          8              \\b, video (missing profile header)\n>>4      byte&0xF8          16             \\b, still texture (missing profile header)\n>>4      byte&0xF8          24             \\b, mesh (missing profile header)\n>>4      byte&0xF8          32             \\b, face (missing profile header)\n>3       byte               0xB3           MPEG sequence\n!:mime  video/mpeg\n>>12     belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>12     belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>12     belong             0x000001B5     \\b, v2,\n>>>16    byte&0x0F          1              \\b HP\n>>>16    byte&0x0F          2              \\b Spt\n>>>16    byte&0x0F          3              \\b SNR\n>>>16    byte&0x0F          4              \\b MP\n>>>16    byte&0x0F          5              \\b SP\n>>>17    byte&0xF0          64             \\b@HL\n>>>17    byte&0xF0          96             \\b@H-14\n>>>17    byte&0xF0          128            \\b@ML\n>>>17    byte&0xF0          160            \\b@LL\n>>>17    byte               &0x08          \\b progressive\n>>>17    byte               ^0x08          \\b interlaced\n>>>17    byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>17    byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>17    byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>11     byte               &0x02\n>>>75    byte               &0x01\n>>>>140  belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>>>140  belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>>>140  belong             0x000001B5     \\b, v2,\n>>>>>144 byte&0x0F          1              \\b HP\n>>>>>144 byte&0x0F          2              \\b Spt\n>>>>>144 byte&0x0F          3              \\b SNR\n>>>>>144 byte&0x0F          4              \\b MP\n>>>>>144 byte&0x0F          5              \\b SP\n>>>>>145 byte&0xF0          64             \\b@HL\n>>>>>145 byte&0xF0          96             \\b@H-14\n>>>>>145 byte&0xF0          128            \\b@ML\n>>>>>145 byte&0xF0          160            \\b@LL\n>>>>>145 byte               &0x08          \\b progressive\n>>>>>145 byte               ^0x08          \\b interlaced\n>>>>>145 byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>>>145 byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>>>145 byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>76    belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>76    belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>76    belong             0x000001B5     \\b, v2,\n>>>80   byte&0x0F          1              \\b HP\n>>>80   byte&0x0F          2              \\b Spt\n>>>80   byte&0x0F          3              \\b SNR\n>>>80   byte&0x0F          4              \\b MP\n>>>80   byte&0x0F          5              \\b SP\n>>>81   byte&0xF0          64             \\b@HL\n>>>81   byte&0xF0          96             \\b@H-14\n>>>81   byte&0xF0          128            \\b@ML\n>>>81   byte&0xF0          160            \\b@LL\n>>>81   byte               &0x08          \\b progressive\n>>>81   byte               ^0x08          \\b interlaced\n>>>81   byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>81   byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>81   byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>4      belong&0xFFFFFF00  0x78043800     \\b, HD-TV 1920P\n>>>7     byte&0xF0          0x10           \\b, 16:9\n>>4      belong&0xFFFFFF00  0x50002D00     \\b, SD-TV 1280I\n>>>7     byte&0xF0          0x10           \\b, 16:9\n>>4      belong&0xFFFFFF00  0x30024000     \\b, PAL Capture\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      beshort&0xFFF0     0x2C00         \\b, 4CIF\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC\n>>>5     beshort&0x0FFF     0x0240         \\b PAL\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>>7     byte&0xF0          0x80           \\b, PAL 4:3\n>>>7     byte&0xF0          0xC0           \\b, NTSC 4:3\n>>4      belong&0xFFFFFF00  0x2801E000     \\b, LD-TV 640P\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x1400F000     \\b, 320x240\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x0F00A000     \\b, 240x160\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x0A007800     \\b, 160x120\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      beshort&0xFFF0     0x1600         \\b, CIF\n>>>5     beshort&0x0FFF     0x00F0         \\b NTSC\n>>>5     beshort&0x0FFF     0x0120         \\b PAL\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>>7     byte&0xF0          0x80           \\b, PAL 4:3\n>>>7     byte&0xF0          0xC0           \\b, NTSC 4:3\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>>7    byte&0xF0          0x20           \\b, 4:3\n>>>>7    byte&0xF0          0x30           \\b, 16:9\n>>>>7    byte&0xF0          0x40           \\b, 11:5\n>>4      beshort&0xFFF0     0x2D00         \\b, CCIR/ITU\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC 525\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>4      beshort&0xFFF0     0x1E00         \\b, SVCD\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC 525\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>7      byte&0x0F          1              \\b, 23.976 fps\n>>7      byte&0x0F          2              \\b, 24 fps\n>>7      byte&0x0F          3              \\b, 25 fps\n>>7      byte&0x0F          4              \\b, 29.97 fps\n>>7      byte&0x0F          5              \\b, 30 fps\n>>7      byte&0x0F          6              \\b, 50 fps\n>>7      byte&0x0F          7              \\b, 59.94 fps\n>>7      byte&0x0F          8              \\b, 60 fps\n>>11     byte               &0x04          \\b, Constrained\n\n# MPEG ADTS Audio (*.mpx/mxa/aac)\n# from dreesen@math.fu-berlin.de\n# modified to fully support MPEG ADTS\n\n# MP3, M1A\n# modified by Joerg Jenderek\n# GRR the original test are too common for many DOS files\n# so don't accept as MP3 until we've tested the rate\n0       beshort&0xFFFE  0xFFFA\n# rates\n>2      byte&0xF0       0x10           MPEG ADTS, layer III, v1,  32 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x20           MPEG ADTS, layer III, v1,  40 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x30           MPEG ADTS, layer III, v1,  48 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x40           MPEG ADTS, layer III, v1,  56 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x50           MPEG ADTS, layer III, v1,  64 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x60           MPEG ADTS, layer III, v1,  80 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x70           MPEG ADTS, layer III, v1,  96 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x80           MPEG ADTS, layer III, v1, 112 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x90           MPEG ADTS, layer III, v1, 128 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xA0           MPEG ADTS, layer III, v1, 160 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xB0           MPEG ADTS, layer III, v1, 192 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xC0           MPEG ADTS, layer III, v1, 224 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xD0           MPEG ADTS, layer III, v1, 256 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xE0           MPEG ADTS, layer III, v1, 320 kbps\n!:mime\taudio/mpeg\n# timing\n>2      byte&0x0C       0x00           \\b, 44.1 kHz\n>2      byte&0x0C       0x04           \\b, 48 kHz\n>2      byte&0x0C       0x08           \\b, 32 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP2, M1A\n0       beshort&0xFFFE  0xFFFC         MPEG ADTS, layer II, v1\n!:mime\taudio/mpeg\n# rates\n>2      byte&0xF0       0x10           \\b,  32 kbps\n>2      byte&0xF0       0x20           \\b,  48 kbps\n>2      byte&0xF0       0x30           \\b,  56 kbps\n>2      byte&0xF0       0x40           \\b,  64 kbps\n>2      byte&0xF0       0x50           \\b,  80 kbps\n>2      byte&0xF0       0x60           \\b,  96 kbps\n>2      byte&0xF0       0x70           \\b, 112 kbps\n>2      byte&0xF0       0x80           \\b, 128 kbps\n>2      byte&0xF0       0x90           \\b, 160 kbps\n>2      byte&0xF0       0xA0           \\b, 192 kbps\n>2      byte&0xF0       0xB0           \\b, 224 kbps\n>2      byte&0xF0       0xC0           \\b, 256 kbps\n>2      byte&0xF0       0xD0           \\b, 320 kbps\n>2      byte&0xF0       0xE0           \\b, 384 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 44.1 kHz\n>2      byte&0x0C       0x04           \\b, 48 kHz\n>2      byte&0x0C       0x08           \\b, 32 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MPA, M1A\n# updated by Joerg Jenderek\n# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448\n# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)\n# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries\n#0\tbeshort&0xFFFE\t\t0xFFFE\t\n#>2\tubyte&0xF0\t>0x0F\t\t\n#>>2\tubyte&0xF0\t<0xE1\t\tMPEG ADTS, layer I, v1\n## rate\n#>>>2      byte&0xF0       0x10           \\b,  32 kbps\n#>>>2      byte&0xF0       0x20           \\b,  64 kbps\n#>>>2      byte&0xF0       0x30           \\b,  96 kbps\n#>>>2      byte&0xF0       0x40           \\b, 128 kbps\n#>>>2      byte&0xF0       0x50           \\b, 160 kbps\n#>>>2      byte&0xF0       0x60           \\b, 192 kbps\n#>>>2      byte&0xF0       0x70           \\b, 224 kbps\n#>>>2      byte&0xF0       0x80           \\b, 256 kbps\n#>>>2      byte&0xF0       0x90           \\b, 288 kbps\n#>>>2      byte&0xF0       0xA0           \\b, 320 kbps\n#>>>2      byte&0xF0       0xB0           \\b, 352 kbps\n#>>>2      byte&0xF0       0xC0           \\b, 384 kbps\n#>>>2      byte&0xF0       0xD0           \\b, 416 kbps\n#>>>2      byte&0xF0       0xE0           \\b, 448 kbps\n## timing\n#>>>2      byte&0x0C       0x00           \\b, 44.1 kHz\n#>>>2      byte&0x0C       0x04           \\b, 48 kHz\n#>>>2      byte&0x0C       0x08           \\b, 32 kHz\n## channels/options\n#>>>3      byte&0xC0       0x00           \\b, Stereo\n#>>>3      byte&0xC0       0x40           \\b, JntStereo\n#>>>3      byte&0xC0       0x80           \\b, 2x Monaural\n#>>>3      byte&0xC0       0xC0           \\b, Monaural\n##>1     byte            ^0x01          \\b, Data Verify\n##>2     byte            &0x02          \\b, Packet Pad\n##>2     byte            &0x01          \\b, Custom Flag\n##>3     byte            &0x08          \\b, Copyrighted\n##>3     byte            &0x04          \\b, Original Source\n##>3     byte&0x03       1              \\b, NR: 50/15 ms\n##>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP3, M2A\n0       beshort&0xFFFE  0xFFF2         MPEG ADTS, layer III, v2\n!:mime\taudio/mpeg\n# rate\n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps\n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP2, M2A\n0       beshort&0xFFFE  0xFFF4         MPEG ADTS, layer II, v2\n!:mime\taudio/mpeg\n# rate \n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps \n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MPA, M2A\n0       beshort&0xFFFE  0xFFF6         MPEG ADTS, layer I, v2\n!:mime\taudio/mpeg\n# rate\n>2      byte&0xF0       0x10           \\b,  32 kbps\n>2      byte&0xF0       0x20           \\b,  48 kbps\n>2      byte&0xF0       0x30           \\b,  56 kbps\n>2      byte&0xF0       0x40           \\b,  64 kbps\n>2      byte&0xF0       0x50           \\b,  80 kbps\n>2      byte&0xF0       0x60           \\b,  96 kbps\n>2      byte&0xF0       0x70           \\b, 112 kbps\n>2      byte&0xF0       0x80           \\b, 128 kbps\n>2      byte&0xF0       0x90           \\b, 144 kbps\n>2      byte&0xF0       0xA0           \\b, 160 kbps\n>2      byte&0xF0       0xB0           \\b, 176 kbps\n>2      byte&0xF0       0xC0           \\b, 192 kbps\n>2      byte&0xF0       0xD0           \\b, 224 kbps\n>2      byte&0xF0       0xE0           \\b, 256 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP3, M25A\n0       beshort&0xFFFE  0xFFE2         MPEG ADTS, layer III,  v2.5\n!:mime\taudio/mpeg\n# rate  \n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps\n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 11.025 kHz\n>2      byte&0x0C       0x04           \\b, 12 kHz\n>2      byte&0x0C       0x08           \\b, 8 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio\n\n# Stored AAC streams (instead of the MP4 format)\n0       string          ADIF           MPEG ADIF, AAC\n!:mime\taudio/x-hx-aac-adif\n>4      byte            &0x80\n>>13    byte            &0x10          \\b, VBR\n>>13    byte            ^0x10          \\b, CBR\n>>16    byte&0x1E       0x02           \\b, single stream\n>>16    byte&0x1E       0x04           \\b, 2 streams\n>>16    byte&0x1E       0x06           \\b, 3 streams\n>>16    byte            &0x08          \\b, 4 or more streams\n>>16    byte            &0x10          \\b, 8 or more streams\n>>4    byte            &0x80          \\b, Copyrighted\n>>13   byte            &0x40          \\b, Original Source\n>>13   byte            &0x20          \\b, Home Flag\n>4      byte            ^0x80\n>>4     byte            &0x10          \\b, VBR\n>>4     byte            ^0x10          \\b, CBR\n>>7     byte&0x1E       0x02           \\b, single stream\n>>7     byte&0x1E       0x04           \\b, 2 streams\n>>7     byte&0x1E       0x06           \\b, 3 streams\n>>7     byte            &0x08          \\b, 4 or more streams\n>>7     byte            &0x10          \\b, 8 or more streams\n>>4    byte            &0x40          \\b, Original Stream(s)\n>>4    byte            &0x20          \\b, Home Source\n\n# Live or stored single AAC stream (used with MPEG-2 systems)\n0       beshort&0xFFF6  0xFFF0         MPEG ADTS, AAC\n!:mime\taudio/x-hx-aac-adts\n>1      byte            &0x08          \\b, v2\n>1      byte            ^0x08          \\b, v4\n# profile\n>>2     byte            &0xC0          \\b LTP\n>2      byte&0xc0       0x00           \\b Main\n>2      byte&0xc0       0x40           \\b LC\n>2      byte&0xc0       0x80           \\b SSR\n# timing\n>2      byte&0x3c       0x00           \\b, 96 kHz\n>2      byte&0x3c       0x04           \\b, 88.2 kHz\n>2      byte&0x3c       0x08           \\b, 64 kHz\n>2      byte&0x3c       0x0c           \\b, 48 kHz\n>2      byte&0x3c       0x10           \\b, 44.1 kHz\n>2      byte&0x3c       0x14           \\b, 32 kHz\n>2      byte&0x3c       0x18           \\b, 24 kHz\n>2      byte&0x3c       0x1c           \\b, 22.05 kHz\n>2      byte&0x3c       0x20           \\b, 16 kHz\n>2      byte&0x3c       0x24           \\b, 12 kHz\n>2      byte&0x3c       0x28           \\b, 11.025 kHz\n>2      byte&0x3c       0x2c           \\b, 8 kHz\n# channels\n>2      beshort&0x01c0  0x0040         \\b, monaural\n>2      beshort&0x01c0  0x0080         \\b, stereo\n>2      beshort&0x01c0  0x00c0         \\b, stereo + center\n>2      beshort&0x01c0  0x0100         \\b, stereo+center+LFE\n>2      beshort&0x01c0  0x0140         \\b, surround\n>2      beshort&0x01c0  0x0180         \\b, surround + LFE\n>2      beshort         &0x01C0        \\b, surround + side\n#>1     byte            ^0x01           \\b, Data Verify\n#>2     byte            &0x02           \\b, Custom Flag\n#>3     byte            &0x20           \\b, Original Stream\n#>3     byte            &0x10           \\b, Home Source\n#>3     byte            &0x08           \\b, Copyrighted\n\n# Live MPEG-4 audio streams (instead of RTP FlexMux)\n0       beshort&0xFFE0  0x56E0         MPEG-4 LOAS\n!:mime\taudio/x-mp4a-latm\n#>1     beshort&0x1FFF  x              \\b, %hu byte packet\n>3      byte&0xE0       0x40\n>>4     byte&0x3C       0x04           \\b, single stream\n>>4     byte&0x3C       0x08           \\b, 2 streams\n>>4     byte&0x3C       0x0C           \\b, 3 streams\n>>4     byte            &0x08          \\b, 4 or more streams\n>>4     byte            &0x20          \\b, 8 or more streams\n>3      byte&0xC0       0\n>>4     byte&0x78       0x08           \\b, single stream\n>>4     byte&0x78       0x10           \\b, 2 streams\n>>4     byte&0x78       0x18           \\b, 3 streams\n>>4     byte            &0x20          \\b, 4 or more streams\n>>4     byte            &0x40          \\b, 8 or more streams\n# This magic isn't strong enough (matches plausible ISO-8859-1 text)\n#0       beshort         0x4DE1         MPEG-4 LO-EP audio stream\n#!:mime\taudio/x-mp4a-latm\n\n# Summary: FLI animation format\n# Created by: Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)\n4\tleshort\t\t0xAF11\n# standard FLI always has 320x200 resolution and 8 bit color\n>8\tleshort\t\t320\n>>10\tleshort\t\t200\n>>>12\tleshort\t\t8\t\t\tFLI animation, 320x200x8\n!:mime\tvideo/x-fli\n>>>>6\tleshort\t\tx\t\t\t\\b, %d frames\n# frame speed is multiple of 1/70s\n>>>>16\tleshort\t\tx\t\t\t\\b, %d/70s per frame\n\n# Summary: FLC animation format\n# Created by: Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)\n4\tleshort\t\t0xAF12\n# standard FLC always use 8 bit color\n>12\tleshort\t\t8\t\t\tFLC animation\n!:mime\tvideo/x-flc\n>>8\tleshort\t\tx\t\t\t\\b, %d\n>>10\tleshort\t\tx\t\t\t\\bx%dx8\n>>6\tuleshort\tx\t\t\t\\b, %d frames\n>>16\tuleshort\tx\t\t\t\\b, %dms per frame\n\n# DL animation format\n# XXX - collision with most `mips' magic\n#\n# I couldn't find a real magic number for these, however, this\n# -appears- to work.  Note that it might catch other files, too, so be\n# careful!\n#\n# Note that title and author appear in the two 20-byte chunks\n# at decimal offsets 2 and 22, respectively, but they are XOR'ed with\n# 255 (hex FF)!  The DL format is really bad.\n#\n#0\tbyte\t1\tDL version 1, medium format (160x100, 4 images/screen)\n#!:mime\tvideo/x-unknown\n#>42\tbyte\tx\t- %d screens,\n#>43\tbyte\tx\t%d commands\n#0\tbyte\t2\tDL version 2\n#!:mime\tvideo/x-unknown\n#>1\tbyte\t1\t- large format (320x200,1 image/screen),\n#>1\tbyte\t2\t- medium format (160x100,4 images/screen),\n#>1\tbyte\t>2\t- unknown format,\n#>42\tbyte\tx\t%d screens,\n#>43\tbyte\tx\t%d commands\n# Based on empirical evidence, DL version 3 have several nulls following the\n# \\003.  Most of them start with non-null values at hex offset 0x34 or so.\n#0\tstring\t\\3\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tDL version 3\n\n# iso 13818 transport stream\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)\n# syncbyte      8 bit\t0x47\n# error_ind     1 bit\t-\n# payload_start 1 bit\t1\n# priority      1 bit\t-\n# PID          13 bit\t0x0000\n# scrambling    2 bit\t-\n# adaptfld_ctrl 2 bit\t1 or 3\n# conti_count   4 bit\t-\n0\tbelong&0xFF5FFF10\t0x47400010\n>188\tbyte\t\t\t0x47\t\tMPEG transport stream data\n\n# DIF digital video file format <mpruett@sgi.com>\n0\tbelong&0xffffff00\t0x1f070000      DIF\n>4\tbyte\t\t\t&0x01\t\t(DVCPRO) movie file\n>4\tbyte\t\t\t^0x01\t\t(DV) movie file\n>3\tbyte\t\t\t&0x80\t\t(PAL)\n>3\tbyte\t\t\t^0x80\t\t(NTSC)\n\n# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>\n0\tbelong\t\t\t0x3026b275\tMicrosoft ASF\n!:mime  video/x-ms-asf\n\n# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>\n0\tstring\t\t\t\\x8aMNG\t\tMNG video data,\n!:mime\tvideo/x-mng\n>4\tbelong\t\t\t!0x0d0a1a0a\tCORRUPTED,\n>4\tbelong\t\t\t0x0d0a1a0a\n>>16    belong\tx\t\t\t\t%d x\n>>20    belong\tx\t\t\t\t%d\n\n# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>\n0\tstring\t\t\t\\x8bJNG\t\tJNG video data,\n!:mime\tvideo/x-jng\n>4\tbelong\t\t\t!0x0d0a1a0a\tCORRUPTED,\n>4\tbelong\t\t\t0x0d0a1a0a\n>>16    belong\tx\t\t\t\t%d x\n>>20    belong\tx\t\t\t\t%d\n\n# Vivo video (Wolfram Kleff)\n3\tstring\t\t\\x0D\\x0AVersion:Vivo\tVivo video data\n\n# VRML (Virtual Reality Modelling Language)\n0       string/w        #VRML\\ V1.0\\ ascii\tVRML 1 file\n!:mime\tmodel/vrml\n0\tstring/w\t#VRML\\ V2.0\\ utf8\tISO/IEC 14772 VRML 97 file\n!:mime\tmodel/vrml\n\n# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]\n# From Michel Briand <michelbriand@free.fr>\n0\tstring/t\t\t\\<?xml\\ version=\"\n!:strength +1\n>20\tsearch/1000/cw  \\<!DOCTYPE\\ X3D\t\tX3D (Extensible 3D) model xml text\n!:mime model/x3d\n\n#---------------------------------------------------------------------------\n# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube\n# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03\n#\n0\tstring\t\tHVQM4\t\t%s\n>6\tstring\t\t>\\0\t\tv%s\n>0\tbyte\t\tx\t\tGameCube movie,\n>0x34\tubeshort\tx\t\t%d x\n>0x36\tubeshort\tx\t\t%d,\n>0x26\tubeshort\tx\t\t%dus,\n>0x42\tubeshort\t0\t\tno audio\n>0x42\tubeshort\t>0\t\t%dHz audio\n\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n0\tstring\t\tDVDVIDEO-VTS\tVideo title set,\n>0x21\tbyte\t\tx\t\tv%x\n0\tstring\t\tDVDVIDEO-VMG\tVideo manager,\n>0x21\tbyte\t\tx\t\tv%x\n\n# From: Behan Webster <behanw@websterwood.com>\n# NuppelVideo used by Mythtv (*.nuv)\n# Note: there are two identical stanzas here differing only in the\n# initial string matched. It used to be done with a regex, but we're\n# trying to get rid of those.\n0\tstring\t\tNuppelVideo\tMythTV NuppelVideo\n>12\tstring\t\tx\t\tv%s\n>20\tlelong\t\tx\t\t(%d\n>24\tlelong\t\tx\t\t\\bx%d),\n>36\tstring\t\tP\t\t\\bprogressive,\n>36\tstring\t\tI\t\t\\binterlaced,\n>40\tledouble\tx\t\t\\baspect:%.2f,\n>48\tledouble\tx\t\t\\bfps:%.2f\n0\tstring\t\tMythTV\t\tMythTV NuppelVideo\n>12\tstring\t\tx\t\tv%s\n>20\tlelong\t\tx\t\t(%d\n>24\tlelong\t\tx\t\t\\bx%d),\n>36\tstring\t\tP\t\t\\bprogressive,\n>36\tstring\t\tI\t\t\\binterlaced,\n>40\tledouble\tx\t\t\\baspect:%.2f,\n>48\tledouble\tx\t\t\\bfps:%.2f\n\n#\t\t\t\t\t\tMPEG file\n# MPEG sequences\n# FIXME: This section is from the old magic.mime file and needs\n# integrating with the rest\n#0       belong             0x000001BA\n#>4      byte               &0x40\n#!:mime\tvideo/mp2p\n#>4      byte               ^0x40\n#!:mime\tvideo/mpeg\n#0       belong             0x000001BB\n#!:mime\tvideo/mpeg\n#0       belong             0x000001B0\n#!:mime\tvideo/mp4v-es\n#0       belong             0x000001B5\n#!:mime\tvideo/mp4v-es\n#0       belong             0x000001B3\n#!:mime\tvideo/mpv\n#0       belong&0xFF5FFF10  0x47400010\n#!:mime\tvideo/mp2t\n#0       belong             0x00000001\n#>4      byte&0x1F\t   0x07\n#!:mime\tvideo/h264\n\n# Type: Bink Video\n# Extension: .bik\n# URL:  http://wiki.multimedia.cx/index.php?title=Bink_Container\n# From: <hoehle@users.sourceforge.net>  2008-07-18\n0\tstring\t\tBIK\tBink Video\n>3\tregex\t\t=[a-z]\trev.%s\n#>4\tulelong\t\tx\tsize %d\n>20\tulelong\t\tx\t\\b, %d\n>24\tulelong\t\tx\t\\bx%d\n>8\tulelong\t\tx\t\\b, %d frames\n>32\tulelong\t\tx\tat rate %d/\n>28\tulelong\t\t>1\t\\b%d\n>40\tulelong\t\t=0\t\\b, no audio\n>40\tulelong\t\t!0\t\\b, %d audio track\n>>40\tulelong\t\t!1\t\\bs\n# follow properties of the first audio track only\n>>48\tuleshort\tx\t%dHz\n>>51\tbyte&0x20\t0\tmono\n>>51\tbyte&0x20\t!0\tstereo\n#>>51\tbyte&0x10\t0\tFFT\n#>>51\tbyte&0x10\t!0\tDCT\n\n# Type:\tNUT Container\n# URL:\thttp://wiki.multimedia.cx/index.php?title=NUT\n# From:\tAdam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\tnut/multimedia\\ container\\0\tNUT multimedia container\n\n# Type: Nullsoft Video (NSV)\n# URL:  http://wiki.multimedia.cx/index.php?title=Nullsoft_Video\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tNSVf\tNullsoft Video\n\n# Type: REDCode Video\n# URL:  http://www.red.com/ ; http://wiki.multimedia.cx/index.php?title=REDCode\n# From: Mike Melanson <mike@multimedia.cx>\n4\tstring\tRED1\tREDCode Video\n\n# Type: MTV Multimedia File\n# URL:  http://wiki.multimedia.cx/index.php?title=MTV\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tAMVS\tMTV Multimedia File\n\n# Type: ARMovie\n# URL:  http://wiki.multimedia.cx/index.php?title=ARMovie\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tARMovie\\012\tARMovie\n\n# Type: Interplay MVE Movie\n# URL:  http://wiki.multimedia.cx/index.php?title=Interplay_MVE\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tInterplay\\040MVE\\040File\\032\tInterplay MVE Movie\n\n# Type: Windows Television DVR File\n# URL:  http://wiki.multimedia.cx/index.php?title=WTV\n# From: Mike Melanson <mike@mutlimedia.cx>\n# This takes the form of a Windows-style GUID\n0\tbequad\t0xB7D800203749DA11\n>8\tbequad\t0xA64E0007E95EAD8D\tWindows Television DVR Media\n\n# Type: Sega FILM/CPK Multimedia\n# URL:  http://wiki.multimedia.cx/index.php?title=Sega_FILM\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tFILM\tSega FILM/CPK Multimedia,\n>32\tbelong\tx\t%d x\n>28\tbelong\tx\t%d\n\n# Type: Nintendo THP Multimedia\n# URL:  http://wiki.multimedia.cx/index.php?title=THP\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tTHP\\0\tNintendo THP Multimedia\n\n# Type: BBC Dirac Video\n# URL:  http://wiki.multimedia.cx/index.php?title=Dirac\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tBBCD\tBBC Dirac Video\n\n# Type: RAD Game Tools Smacker Multimedia\n# URL:  http://wiki.multimedia.cx/index.php?title=Smacker\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tSMK\tRAD Game Tools Smacker Multimedia\n>3\tbyte\tx\tversion %c,\n>4\tlelong\tx\t%d x\n>8\tlelong\tx\t%d,\n>12\tlelong\tx\t%d frames\n\n#------------------------------------------------------------------------------\n# $File$\n# aout:  file(1) magic for a.out executable/object/etc entries that\n# handle executables on multiple platforms.\n#\n\n#\n# Little-endian 32-bit-int a.out, merged from bsdi (for BSD/OS, from\n# BSDI), netbsd, and vax (for UNIX/32V and BSD)\n#\n# XXX - is there anything we can look at to distinguish BSD/OS 386 from\n# NetBSD 386 from various VAX binaries?  The BSD/OS shared library flag\n# works only for binaries using shared libraries.  Grabbing the entry\n# point from the a.out header, using it to find the first code executed\n# in the program, and looking at that might help.\n#\n0\tlelong\t\t0407\t\ta.out little-endian 32-bit executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses BSD/OS shared libs)\n\n0\tlelong\t\t0410\t\ta.out little-endian 32-bit pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses BSD/OS shared libs)\n\n0\tlelong\t\t0413\t\ta.out little-endian 32-bit demand paged pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses BSD/OS shared libs)\n\n#\n# Big-endian 32-bit-int a.out, merged from sun (for old 68010 SunOS a.out),\n# mips (for old 68020(!) SGI a.out), and netbsd (for old big-endian a.out).\n#\n# XXX - is there anything we can look at to distinguish old SunOS 68010\n# from old 68020 IRIX from old NetBSD?  Again, I guess we could look at\n# the first instruction or instructions in the program.\n#\n0\tbelong\t\t0407\t\ta.out big-endian 32-bit executable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0410\t\ta.out big-endian 32-bit pure executable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0413\t\ta.out big-endian 32-bit demand paged executable\n>16\tbelong\t\t>0\t\tnot stripped\n\n\n#------------------------------------------------------------------------------\n# $File$\n# apl:  file(1) magic for APL (see also \"pdp\" and \"vax\" for other APL\n#       workspaces)\n#\n0\tlong\t\t0100554\t\tAPL workspace (Ken's original?)\n\n#------------------------------------------------------------------------------\n# $File: apple,v 1.28 2014/04/28 12:04:50 christos Exp $\n# apple:  file(1) magic for Apple file formats\n#\n0\tsearch/1/t\tFiLeStArTfIlEsTaRt\tbinscii (apple ][) text\n0\tstring\t\t\\x0aGL\t\t\tBinary II (apple ][) data\n0\tstring\t\t\\x76\\xff\t\tSqueezed (apple ][) data\n0\tstring\t\tNuFile\t\t\tNuFile archive (apple ][) data\n0\tstring\t\tN\\xf5F\\xe9l\\xe5\t\tNuFile archive (apple ][) data\n0\tbelong\t\t0x00051600\t\tAppleSingle encoded Macintosh file\n0\tbelong\t\t0x00051607\t\tAppleDouble encoded Macintosh file\n\n# Type: Apple Emulator 2IMG format\n# From: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\t2IMG\tApple ][ 2IMG Disk Image\n>4\tstring\t\tXGS!\t\\b, XGS\n>4\tstring\t\tCTKG\t\\b, Catakig\n>4\tstring\t\tShIm\t\\b, Sheppy's ImageMaker\n>4\tstring\t\tWOOF\t\\b, Sweet 16\n>4\tstring\t\tB2TR\t\\b, Bernie ][ the Rescue\n>4\tstring\t\t!nfc\t\\b, ASIMOV2\n>4\tstring\t\tx\t\\b, Unknown Format\n>0xc\tbyte\t\t00\t\\b, DOS 3.3 sector order\n>>0x10\tbyte\t\t00\t\\b, Volume 254\n>>0x10\tbyte&0x7f\tx\t\\b, Volume %u\n>0xc\tbyte\t\t01\t\\b, ProDOS sector order\n>>0x14\tshort\t\tx\t\\b, %u Blocks\n>0xc\tbyte\t\t02\t\\b, NIB data\n\n# magic for Newton PDA package formats\n# from Ruda Moura <ruda@helllabs.org>\n0\tstring\tpackage0\tNewton package, NOS 1.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n>12\tbelong\t&0x04000000\tRelocation,\n>12\tbelong\t&0x02000000\tUseFasterCompression,\n>16\tbelong\tx\t\tversion %d\n\n0\tstring\tpackage1\tNewton package, NOS 2.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n>12\tbelong\t&0x04000000\tRelocation,\n>12\tbelong\t&0x02000000\tUseFasterCompression,\n>16\tbelong\tx\t\tversion %d\n\n0\tstring\tpackage4\tNewton package,\n>8\tbyte\t8\t\tNOS 1.x,\n>8\tbyte\t9\t\tNOS 2.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n\n# The following entries for the Apple II are for files that have\n# been transferred as raw binary data from an Apple, without having\n# been encapsulated by any of the above archivers.\n#\n# In general, Apple II formats are hard to identify because Apple DOS\n# and especially Apple ProDOS have strong typing in the file system and\n# therefore programmers never felt much need to include type information\n# in the files themselves.\n#\n# Eric Fischer <enf@pobox.com>\n\n# AppleWorks word processor:\n#\n# This matches the standard tab stops for an AppleWorks file, but if\n# a file has a tab stop set in the first four columns this will fail.\n#\n# The \"O\" is really the magic number, but that's so common that it's\n# necessary to check the tab stops that follow it to avoid false positives.\n\n4       string          O====   AppleWorks word processor data\n>85     byte&0x01       >0      \\b, zoomed\n>90     byte&0x01       >0      \\b, paginated\n>92     byte&0x01       >0      \\b, with mail merge\n#>91    byte            x       \\b, left margin %d\n\n# AppleWorks database:\n#\n# This isn't really a magic number, but it's the closest thing to one\n# that I could find.  The 1 and 2 really mean \"order in which you defined\n# categories\" and \"left to right, top to bottom,\" respectively; the D and R\n# mean that the cursor should move either down or right when you press Return.\n\n#30\tstring\t\t\\x01D\tAppleWorks database data\n#30\tstring\t\t\\x02D\tAppleWorks database data\n#30\tstring\t\t\\x01R\tAppleWorks database data\n#30\tstring\t\t\\x02R\tAppleWorks database data\n\n# AppleWorks spreadsheet:\n#\n# Likewise, this isn't really meant as a magic number.  The R or C means\n# row- or column-order recalculation; the A or M means automatic or manual\n# recalculation.\n\n#131\tstring\t\tRA\tAppleWorks spreadsheet data\n#131\tstring\t\tRM\tAppleWorks spreadsheet data\n#131\tstring\t\tCA\tAppleWorks spreadsheet data\n#131\tstring\t\tCM\tAppleWorks spreadsheet data\n\n# Applesoft BASIC:\n#\n# This is incredibly sloppy, but will be true if the program was\n# written at its usual memory location of 2048 and its first line\n# number is less than 256.  Yuck.\n# update by Joerg Jenderek at Feb 2013\n\n# GRR: this test is still too general as it catches also Gujin BOOT144.SYS (0xfa080000)\n#0       belong&0xff00ff 0x80000 Applesoft BASIC program data\n0\tbelong&0x00ff00ff\t0x00080000\t\n# assuming that line number must be positive\n>2\tleshort\t\t\t>0\t\tApplesoft BASIC program data, first line number %d\n#>2     leshort         x       \\b, first line number %d\n\n# ORCA/EZ assembler:\n# \n# This will not identify ORCA/M source files, since those have\n# some sort of date code instead of the two zero bytes at 6 and 7\n# XXX Conflicts with ELF\n#4       belong&0xff00ffff       0x01000000      ORCA/EZ assembler source data\n#>5      byte                    x               \\b, build number %d\n\n# Broderbund Fantavision\n#\n# I don't know what these values really mean, but they seem to recur.\n# Will they cause too many conflicts?\n\n# Probably :-)\n#2\tbelong&0xFF00FF\t\t0x040008\tFantavision movie data\n\n# Some attempts at images.\n#\n# These are actually just bit-for-bit dumps of the frame buffer, so\n# there's really no reasonably way to distinguish them except for their\n# address (if preserved) -- 8192 or 16384 -- and their length -- 8192\n# or, occasionally, 8184.\n#\n# Nevertheless this will manage to catch a lot of images that happen\n# to have a solid-colored line at the bottom of the screen.\n\n# GRR: Magic too weak\n#8144\tstring\t\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\tApple II image with white background\n#8144\tstring\t\\x55\\x2A\\x55\\x2A\\x55\\x2A\\x55\\x2A\tApple II image with purple background\n#8144\tstring\t\\x2A\\x55\\x2A\\x55\\x2A\\x55\\x2A\\x55\tApple II image with green background\n#8144\tstring\t\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\tApple II image with blue background\n#8144\tstring\t\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\tApple II image with orange background\n\n# Beagle Bros. Apple Mechanic fonts\n\n0\tbelong&0xFF00FFFF\t0x6400D000\tApple Mechanic font\n\n# Apple Universal Disk Image Format (UDIF) - dmg files.\n# From Johan Gade.\n# These entries are disabled for now until we fix the following issues.\n#\n# Note there might be some problems with the \"VAX COFF executable\" \n# entry. Note this entry should be placed before the mac filesystem section, \n# particularly the \"Apple Partition data\" entry.\n#\n# The intended meaning of these tests is, that the file is only of the \n# specified type if both of the lines are correct - i.e. if the first\n# line matches and the second doesn't then it is not of that type.\n#\n#0\tlong\t0x7801730d\n#>4\tlong\t0x62626060\tUDIF read-only zlib-compressed image (UDZO)\n#\n# Note that this entry is recognized correctly by the \"Apple Partition \n# data\" entry - however since this entry is more specific - this\n# information seems to be more useful.\n#0\tlong\t0x45520200\n#>0x410\tstring\tdisk\\ image\tUDIF read/write image (UDRW)\n\n# From: Toby Peterson <toby@apple.com>\n0\tstring\tbplist00\tApple binary property list\n\n# Apple binary property list (bplist)\n#  Assumes version bytes are hex.\n#  Provides content hints for version 0 files. Assumes that the root\n#  object is the first object (true for CoreFoundation implementation).\n# From: David Remahl <dremahl@apple.com>\n0\t\tstring\tbplist\n>6\t\tbyte\tx\t\\bCoreFoundation binary property list data, version 0x%c\n>>7\t\tbyte\tx\t\\b%c\n>6\t\tstring\t\t00\t\t\\b\n>>8\t\tbyte&0xF0\t0x00\t\\b\n>>>8\tbyte&0x0F\t0x00\t\\b, root type: null\n>>>8\tbyte&0x0F\t0x08\t\\b, root type: false boolean\n>>>8\tbyte&0x0F\t0x09\t\\b, root type: true boolean\n>>8\t\tbyte&0xF0\t0x10\t\\b, root type: integer\n>>8\t\tbyte&0xF0\t0x20\t\\b, root type: real\n>>8\t\tbyte&0xF0\t0x30\t\\b, root type: date\n>>8\t\tbyte&0xF0\t0x40    \\b, root type: data\n>>8\t\tbyte&0xF0\t0x50\t\\b, root type: ascii string\n>>8\t\tbyte&0xF0\t0x60\t\\b, root type: unicode string\n>>8\t\tbyte&0xF0\t0x80\t\\b, root type: uid (CORRUPT)\n>>8\t\tbyte&0xF0\t0xa0\t\\b, root type: array\n>>8\t\tbyte&0xF0\t0xd0\t\\b, root type: dictionary\n\n# Apple/NeXT typedstream data\n#  Serialization format used by NeXT and Apple for various\n#  purposes in YellowStep/Cocoa, including some nib files.\n# From: David Remahl <dremahl@apple.com>\n2\t\tstring\t\ttypedstream\tNeXT/Apple typedstream data, big endian\n>0\t\tbyte\t\tx\t\t\\b, version %d\n>0\t\tbyte\t\t<5\t\t\\b\n>>13\tbyte\t\t0x81\t\\b\n>>>14\tubeshort\tx\t\t\\b, system %d\n2\t\tstring\t\tstreamtyped NeXT/Apple typedstream data, little endian\n>0\t\tbyte\t\tx\t\t\\b, version %d\n>0\t\tbyte\t\t<5\t\t\\b\n>>13\tbyte\t\t0x81\t\\b\n>>>14\tuleshort\tx\t\t\\b, system %d\n\n#------------------------------------------------------------------------------\n# CAF: Apple CoreAudio File Format\n#\n# Container format for high-end audio purposes.\n# From: David Remahl <dremahl@apple.com>\n#\n0\tstring\t\tcaff\t\tCoreAudio Format audio file\n>4\tbeshort\t\t<10\t\tversion %d\n>6\tbeshort\t\tx\n\n\n#------------------------------------------------------------------------------\n# Keychain database files\n0\tstring\t\tkych\t\tMac OS X Keychain File\n\n#------------------------------------------------------------------------------\n# Code Signing related file types\n0\tbelong\t\t0xfade0c00\tMac OS X Code Requirement\n>8\tbelong\t\t1\t\t\t(opExpr)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0c01\tMac OS X Code Requirement Set\n>8\tbelong\t\t>1\t\t\tcontaining %d items\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0c02\tMac OS X Code Directory\n>8\tbelong\t\tx\t\t\tversion %x\n>12\tbelong\t\t>0\t\t\tflags 0x%x\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0cc0\tMac OS X Detached Code Signature (non-executable)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0cc1\tMac OS X Detached Code Signature\n>8\tbelong\t\t>1\t\t\t(%d elements)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# .vdi\n4\tstring innotek\\ VirtualBox\\ Disk\\ Image %s\n\n# Apple disk partition stuff, strengthen the magic using byte 4\n0\tbeshort\t0x4552\n>4\tbyte\t0\t\t\tApple Driver Map\n>>2\tbeshort\tx\t\t\t\\b, blocksize %d\n>>4\tbelong\tx\t\t\t\\b, blockcount %d\n>>10\tbeshort\tx\t\t\t\\b, devtype %d\n>>12\tbeshort\tx\t\t\t\\b, devid %d\n>>20\tbeshort x\t\t\t\\b, descriptors %d\n# Assume \t8 partitions each at a multiple of the sector size.\n# We could glean this from the partition descriptors, but they are empty!?!?\n>>(2.S*1)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*2)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*3)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*4)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*5)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*6)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*7)\tindirect\t\t\\b, contains[@0x%x]: \n>>(2.S*8)\tindirect\t\t\\b, contains[@0x%x]: \n\n# Yes, the 3rd and 4th bytes are reserved, but we use them to make the\n# magic stronger.\n0\tbelong\t0x504d0000\t\tApple Partition Map\n>4\tbelong\tx\t\t\t\\b, map block count %d\n>8\tbelong\tx\t\t\t\\b, start block %d\n>12\tbelong\tx\t\t\t\\b, block count %d\n>16\tstring >0\t\t\t\\b, name %s\n>48\tstring >0\t\t\t\\b, type %s\n>124\tstring >0\t\t\t\\b, processor %s\n>140\tstring >0\t\t\t\\b, boot arguments %s\n>92\tbelong\t& 1\t\t\t\\b, valid\n>92\tbelong\t& 2\t\t\t\\b, allocated\n>92\tbelong\t& 4\t\t\t\\b, in use\n>92\tbelong\t& 8\t\t\t\\b, has boot info\n>92\tbelong\t& 16\t\t\t\\b, readable\n>92\tbelong\t& 32\t\t\t\\b, writable\n>92\tbelong\t& 64\t\t\t\\b, pic boot code\n>92\tbelong\t& 128\t\t\t\\b, chain compatible driver\n>92\tbelong\t& 256\t\t\t\\b, real driver\n>92\tbelong\t& 512\t\t\t\\b, chain driver\n>92\tbelong\t& 1024\t\t\t\\b, mount at startup\n>92\tbelong\t& 2048\t\t\t\\b, is the startup partition\n\n#http://wiki.mozilla.org/DS_Store_File_Format`\n#http://en.wikipedia.org/wiki/.DS_Store\n0\tstring\t\\0\\0\\0\\1Bud1\\0\t\tApple Desktop Services Store\n\n#------------------------------------------------------------------------------\n# $File$\n# applix:  file(1) magic for Applixware\n# From: Peter Soos <sp@osb.hu>\n#\n0\tstring\t\t*BEGIN\t\tApplixware\n>7\tstring\t\tWORDS\t\t\tWords Document\n>7\tstring\t\tGRAPHICS\t\tGraphic\n>7\tstring\t\tRASTER\t\t\tBitmap\n>7\tstring\t\tSPREADSHEETS\t\tSpreadsheet\n>7\tstring\t\tMACRO\t\t\tMacro\n>7\tstring\t\tBUILDER\t\t\tBuilder Object\n#------------------------------------------------------------------------------\n# $File: archive,v 1.87 2014/06/03 19:15:58 christos Exp $\n# archive:  file(1) magic for archive formats (see also \"msdos\" for self-\n#           extracting compressed archives)\n#\n# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.\n# pre-POSIX \"tar\" archives are handled in the C code.\n\n# POSIX tar archives\n257\tstring\t\tustar\\0\t\tPOSIX tar archive\n!:mime\tapplication/x-tar # encoding: posix\n257\tstring\t\tustar\\040\\040\\0\tGNU tar archive\n!:mime\tapplication/x-tar # encoding: gnu\n\n# Incremental snapshot gnu-tar format from:\n# http://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html\n0\tstring\t\tGNU\\ tar-\tGNU tar incremental snapshot data\n>&0\tregex\t\t[0-9]\\.[0-9]+-[0-9]+\tversion %s\n\n# cpio archives\n#\n# Yes, the top two \"cpio archive\" formats *are* supposed to just be \"short\".\n# The idea is to indicate archives produced on machines with the same\n# byte order as the machine running \"file\" with \"cpio archive\", and\n# to indicate archives produced on machines with the opposite byte order\n# from the machine running \"file\" with \"byte-swapped cpio archive\".\n#\n# The SVR4 \"cpio(4)\" hints that there are additional formats, but they\n# are defined as \"short\"s; I think all the new formats are\n# character-header formats and thus are strings, not numbers.\n0\tshort\t\t070707\t\tcpio archive\n!:mime\tapplication/x-cpio\n0\tshort\t\t0143561\t\tbyte-swapped cpio archive\n!:mime\tapplication/x-cpio # encoding: swapped\n0\tstring\t\t070707\t\tASCII cpio archive (pre-SVR4 or odc)\n0\tstring\t\t070701\t\tASCII cpio archive (SVR4 with no CRC)\n0\tstring\t\t070702\t\tASCII cpio archive (SVR4 with CRC)\n\n#\n# Various archive formats used by various versions of the \"ar\"\n# command.\n#\n\n#\n# Original UNIX archive formats.\n# They were written with binary values in host byte order, and\n# the magic number was a host \"int\", which might have been 16 bits\n# or 32 bits.  We don't say \"PDP-11\" or \"VAX\", as there might have\n# been ports to little-endian 16-bit-int or 32-bit-int platforms\n# (x86?) using some of those formats; if none existed, feel free\n# to use \"PDP-11\" for little-endian 16-bit and \"VAX\" for little-endian\n# 32-bit.  There might have been big-endian ports of that sort as\n# well.\n#\n0\tleshort\t\t0177555\t\tvery old 16-bit-int little-endian archive\n0\tbeshort\t\t0177555\t\tvery old 16-bit-int big-endian archive\n0\tlelong\t\t0177555\t\tvery old 32-bit-int little-endian archive\n0\tbelong\t\t0177555\t\tvery old 32-bit-int big-endian archive\n\n0\tleshort\t\t0177545\t\told 16-bit-int little-endian archive\n>2\tstring\t\t__.SYMDEF\trandom library\n0\tbeshort\t\t0177545\t\told 16-bit-int big-endian archive\n>2\tstring\t\t__.SYMDEF\trandom library\n0\tlelong\t\t0177545\t\told 32-bit-int little-endian archive\n>4\tstring\t\t__.SYMDEF\trandom library\n0\tbelong\t\t0177545\t\told 32-bit-int big-endian archive\n>4\tstring\t\t__.SYMDEF\trandom library\n\n#\n# From \"pdp\" (but why a 4-byte quantity?)\n#\n0\tlelong\t\t0x39bed\t\tPDP-11 old archive\n0\tlelong\t\t0x39bee\t\tPDP-11 4.0 archive\n\n#\n# XXX - what flavor of APL used this, and was it a variant of\n# some ar archive format?  It's similar to, but not the same\n# as, the APL workspace magic numbers in pdp.\n#\n0\tlong\t\t0100554\t\tapl workspace\n\n#\n# System V Release 1 portable(?) archive format.\n#\n0\tstring\t\t=<ar>\t\tSystem V Release 1 ar archive\n!:mime\tapplication/x-archive\n\n#\n# Debian package; it's in the portable archive format, and needs to go\n# before the entry for regular portable archives, as it's recognized as\n# a portable archive whose first member has a name beginning with\n# \"debian\".\n#\n0\tstring\t\t=!<arch>\\ndebian\n>8\tstring\t\tdebian-split\tpart of multipart Debian package\n!:mime\tapplication/vnd.debian.binary-package\n>8\tstring\t\tdebian-binary\tDebian binary package\n!:mime\tapplication/vnd.debian.binary-package\n>8\tstring\t\t!debian\n>68\tstring\t\t>\\0\t\t(format %s)\n# These next two lines do not work, because a bzip2 Debian archive\n# still uses gzip for the control.tar (first in the archive).  Only\n# data.tar varies, and the location of its filename varies too.\n# file/libmagic does not current have support for ascii-string based\n# (offsets) as of 2005-09-15.\n#>81\tstring\t\tbz2\t\t\\b, uses bzip2 compression\n#>84\tstring\t\tgz\t\t\\b, uses gzip compression\n#>136\tledate\t\tx\t\tcreated: %s\n\n#\n# MIPS archive; they're in the portable archive format, and need to go\n# before the entry for regular portable archives, as it's recognized as\n# a portable archive whose first member has a name beginning with\n# \"__________E\".\n#\n0\tstring\t=!<arch>\\n__________E\tMIPS archive\n!:mime\tapplication/x-archive\n>20\tstring\tU\t\t\twith MIPS Ucode members\n>21\tstring\tL\t\t\twith MIPSEL members\n>21\tstring\tB\t\t\twith MIPSEB members\n>19\tstring\tL\t\t\tand an EL hash table\n>19\tstring\tB\t\t\tand an EB hash table\n>22\tstring\tX\t\t\t-- out of date\n\n0\tsearch/1\t-h-\t\tSoftware Tools format archive text\n\n#\n# BSD/SVR2-and-later portable archive formats.\n#\n0\tstring\t\t=!<arch>\t\tcurrent ar archive\n!:mime\tapplication/x-archive\n>8\tstring\t\t__.SYMDEF\trandom library\n>68\tstring\t\t__.SYMDEF\\ SORTED\trandom library\n\n#\n# \"Thin\" archive, as can be produced by GNU ar.\n#\n0\tstring\t\t=!<thin>\\n\tthin archive with\n>68\tbelong\t\t0\t\tno symbol entries\n>68\tbelong\t\t1\t\t%d symbol entry\n>68\tbelong\t\t>1\t\t%d symbol entries\n\n# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)\n#\n# The first byte is the magic (0x1a), byte 2 is the compression type for\n# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS\n# filename of the first file (null terminated).  Since some types collide\n# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),\n# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.\n0\tlelong&0x8080ffff\t0x0000081a\tARC archive data, dynamic LZW\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000091a\tARC archive data, squashed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000021a\tARC archive data, uncompressed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000031a\tARC archive data, packed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000041a\tARC archive data, squeezed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000061a\tARC archive data, crunched\n!:mime\tapplication/x-arc\n# [JW] stuff taken from idarc, obviously ARC successors:\n0\tlelong&0x8080ffff\t0x00000a1a\tPAK archive data\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000141a\tARC+ archive data\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000481a\tHYP archive data\n!:mime\tapplication/x-arc\n\n# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)\n# I can't create either SPARK or ArcFS archives so I have not tested this stuff\n# [GRR:  the original entries collide with ARC, above; replaced with combined\n#  version (not tested)]\n#0\tbyte\t\t0x1a\t\tRISC OS archive (spark format)\n0\tstring\t\t\\032archive\tRISC OS archive (ArcFS format)\n0       string          Archive\\000     RISC OS archive (ArcFS format)\n\n# All these were taken from idarc, many could not be verified. Unfortunately,\n# there were many low-quality sigs, i.e. easy to trigger false positives.\n# Please notify me of any real-world fishy/ambiguous signatures and I'll try\n# to get my hands on the actual archiver and see if I find something better. [JW]\n# probably many can be enhanced by finding some 0-byte or control char near the start\n\n# idarc calls this Crush/Uncompressed... *shrug*\n0\tstring\tCRUSH Crush archive data\n# Squeeze It (.sqz)\n0\tstring\tHLSQZ Squeeze It archive data\n# SQWEZ\n0\tstring\tSQWEZ SQWEZ archive data\n# HPack (.hpk)\n0\tstring\tHPAK HPack archive data\n# HAP\n0\tstring\t\\x91\\x33HF HAP archive data\n# MD/MDCD\n0\tstring\tMDmd MDCD archive data\n# LIM\n0\tstring\tLIM\\x1a LIM archive data\n# SAR\n3\tstring\tLH5 SAR archive data\n# BSArc/BS2\n0\tstring\t\\212\\3SB\\020\\0\tBSArc/BS2 archive data\n# Bethesda Softworks Archive (Oblivion)\n0\tstring\tBSA\\0 \t\tBSArc archive data\n>4\tlelong\tx\t\tversion %d\n# MAR\n2\tstring\t=-ah MAR archive data\n# ACB\n#0\tbelong&0x00f800ff\t0x00800000 ACB archive data\n# CPZ\n# TODO, this is what idarc says: 0\tstring\t\\0\\0\\0 CPZ archive data\n# JRC\n0\tstring\tJRchive JRC archive data\n# Quantum\n0\tstring\tDS\\0 Quantum archive data\n# ReSOF\n0\tstring\tPK\\3\\6 ReSOF archive data\n# QuArk\n0\tstring\t7\\4 QuArk archive data\n# YAC\n14\tstring\tYC YAC archive data\n# X1\n0\tstring\tX1 X1 archive data\n0\tstring\tXhDr X1 archive data\n# CDC Codec (.dqt)\n0\tbelong&0xffffe000\t0x76ff2000 CDC Codec archive data\n# AMGC\n0\tstring\t\\xad6\" AMGC archive data\n# NuLIB\n0\tstring\tN\\xc3\\xb5F\\xc3\\xa9lx\\xc3\\xa5 NuLIB archive data\n# PakLeo\n0\tstring\tLEOLZW PAKLeo archive data\n# ChArc\n0\tstring\tSChF ChArc archive data\n# PSA\n0\tstring\tPSA PSA archive data\n# CrossePAC\n0\tstring\tDSIGDCC CrossePAC archive data\n# Freeze\n0\tstring\t\\x1f\\x9f\\x4a\\x10\\x0a Freeze archive data\n# KBoom\n0\tstring\t\\xc2\\xa8MP\\xc2\\xa8 KBoom archive data\n# NSQ, must go after CDC Codec\n0\tstring\t\\x76\\xff NSQ archive data\n# DPA\n0\tstring\tDirk\\ Paehl DPA archive data\n# BA\n# TODO: idarc says \"bytes 0-2 == bytes 3-5\"\n# TTComp\n0\tstring\t\\0\\6 TTComp archive data\n# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?\n0\tstring\tESP ESP archive data\n# ZPack\n0\tstring\t\\1ZPK\\1 ZPack archive data\n# Sky\n0\tstring\t\\xbc\\x40 Sky archive data\n# UFA\n0\tstring\tUFA UFA archive data\n# Dry\n0\tstring\t=-H2O DRY archive data\n# FoxSQZ\n0\tstring\tFOXSQZ FoxSQZ archive data\n# AR7\n0\tstring\t,AR7 AR7 archive data\n# PPMZ\n0\tstring\tPPMZ PPMZ archive data\n# MS Compress\n4\tstring\t\\x88\\xf0\\x27 MS Compress archive data\n# updated by Joerg Jenderek\n>9\tstring\t\\0\n>>0\tstring\tKWAJ\n>>>7\tstring\t\\321\\003\tMS Compress archive data\n>>>>14\tulong\t>0\t\t\\b, original size: %d bytes\n>>>>18\t\tubyte\t>0x65\n>>>>>18\t\tstring\tx       \\b, was %.8s\n>>>>>(10.b-4)\tstring\tx       \\b.%.3s\n# MP3 (archiver, not lossy audio compression)\n0\tstring\tMP3\\x1a MP3-Archiver archive data\n# ZET\n0\tstring\tOZ\\xc3\\x9d ZET archive data\n# TSComp\n0\tstring\t\\x65\\x5d\\x13\\x8c\\x08\\x01\\x03\\x00 TSComp archive data\n# ARQ\n0\tstring\tgW\\4\\1 ARQ archive data\n# Squash\n3\tstring\tOctSqu Squash archive data\n# Terse\n0\tstring\t\\5\\1\\1\\0 Terse archive data\n# PUCrunch\n0\tstring\t\\x01\\x08\\x0b\\x08\\xef\\x00\\x9e\\x32\\x30\\x36\\x31 PUCrunch archive data\n# UHarc\n0\tstring\tUHA UHarc archive data\n# ABComp\n0\tstring\t\\2AB ABComp archive data\n0\tstring\t\\3AB2 ABComp archive data\n# CMP\n0\tstring\tCO\\0 CMP archive data\n# Splint\n0\tstring\t\\x93\\xb9\\x06 Splint archive data\n# InstallShield\n0\tstring\t\\x13\\x5d\\x65\\x8c InstallShield Z archive Data\n# Gather\n1\tstring\tGTH Gather archive data\n# BOA\n0\tstring\tBOA BOA archive data\n# RAX\n0\tstring\tULEB\\xa RAX archive data\n# Xtreme\n0\tstring\tULEB\\0 Xtreme archive data\n# Pack Magic\n0\tstring\t@\\xc3\\xa2\\1\\0 Pack Magic archive data\n# BTS\n0\tbelong&0xfeffffff\t0x1a034465 BTS archive data\n# ELI 5750\n0\tstring\tOra\\  ELI 5750 archive data\n# QFC\n0\tstring\t\\x1aFC\\x1a QFC archive data\n0\tstring\t\\x1aQF\\x1a QFC archive data\n# PRO-PACK\n0\tstring\tRNC PRO-PACK archive data\n# 777\n0\tstring\t777 777 archive data\n# LZS221\n0\tstring\tsTaC LZS221 archive data\n# HPA\n0\tstring\tHPA HPA archive data\n# Arhangel\n0\tstring\tLG Arhangel archive data\n# EXP1, uses bzip2\n0\tstring\t0123456789012345BZh EXP1 archive data\n# IMP\n0\tstring\tIMP\\xa IMP archive data\n# NRV\n0\tstring\t\\x00\\x9E\\x6E\\x72\\x76\\xFF NRV archive data\n# Squish\n0\tstring\t\\x73\\xb2\\x90\\xf4 Squish archive data\n# Par\n0\tstring\tPHILIPP Par archive data\n0\tstring\tPAR Par archive data\n# HIT\n0\tstring\tUB HIT archive data\n# SBX\n0\tbelong&0xfffff000\t0x53423000 SBX archive data\n# NaShrink\n0\tstring\tNSK NaShrink archive data\n# SAPCAR\n0\tstring\t#\\ CAR\\ archive\\ header SAPCAR archive data\n0\tstring\tCAR\\ 2.00RG SAPCAR archive data\n# Disintegrator\n0\tstring\tDST Disintegrator archive data\n# ASD\n0\tstring\tASD ASD archive data\n# InstallShield CAB\n0\tstring\tISc( InstallShield CAB\n# TOP4\n0\tstring\tT4\\x1a TOP4 archive data\n# BatComp left out: sig looks like COM executable\n# so TODO: get real 4dos batcomp file and find sig\n# BlakHole\n0\tstring\tBH\\5\\7 BlakHole archive data\n# BIX\n0\tstring\tBIX0 BIX archive data\n# ChiefLZA\n0\tstring\tChfLZ ChiefLZA archive data\n# Blink\n0\tstring\tBlink Blink archive data\n# Logitech Compress\n0\tstring\t\\xda\\xfa Logitech Compress archive data\n# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)\n1\tstring\t(C)\\ STEPANYUK ARS-Sfx archive data\n# AKT/AKT32\n0\tstring\tAKT32 AKT32 archive data\n0\tstring\tAKT AKT archive data\n# NPack\n0\tstring\tMSTSM NPack archive data\n# PFT\n0\tstring\t\\0\\x50\\0\\x14 PFT archive data\n# SemOne\n0\tstring\tSEM SemOne archive data\n# PPMD\n0\tstring\t\\x8f\\xaf\\xac\\x84 PPMD archive data\n# FIZ\n0\tstring\tFIZ FIZ archive data\n# MSXiE\n0\tbelong&0xfffff0f0\t0x4d530000 MSXiE archive data\n# DeepFreezer\n0\tbelong&0xfffffff0\t0x797a3030 DeepFreezer archive data\n# DC\n0\tstring\t=<DC- DC archive data\n# TPac\n0\tstring\t\\4TPAC\\3 TPac archive data\n# Ai\n0\tstring\tAi\\1\\1\\0 Ai archive data\n0\tstring\tAi\\1\\0\\0 Ai archive data\n# Ai32\n0\tstring\tAi\\2\\0 Ai32 archive data\n0\tstring\tAi\\2\\1 Ai32 archive data\n# SBC\n0\tstring\tSBC SBC archive data\n# Ybs\n0\tstring\tYBS Ybs archive data\n# DitPack\n0\tstring\t\\x9e\\0\\0 DitPack archive data\n# DMS\n0\tstring\tDMS! DMS archive data\n# EPC\n0\tstring\t\\x8f\\xaf\\xac\\x8c EPC archive data\n# VSARC\n0\tstring\tVS\\x1a VSARC archive data\n# PDZ\n0\tstring\tPDZ PDZ archive data\n# ReDuq\n0\tstring\trdqx ReDuq archive data\n# GCA\n0\tstring\tGCAX GCA archive data\n# PPMN\n0\tstring\tpN PPMN archive data\n# WinImage\n3\tstring\tWINIMAGE WinImage archive data\n# Compressia\n0\tstring\tCMP0CMP Compressia archive data\n# UHBC\n0\tstring\tUHB UHBC archive data\n# WinHKI\n0\tstring\t\\x61\\x5C\\x04\\x05 WinHKI archive data\n# WWPack data file\n0\tstring\tWWP WWPack archive data\n# BSN (BSA, PTS-DOS)\n0\tstring\t\\xffBSG BSN archive data\n1\tstring\t\\xffBSG BSN archive data\n3\tstring\t\\xffBSG BSN archive data\n1\tstring\t\\0\\xae\\2 BSN archive data\n1\tstring\t\\0\\xae\\3 BSN archive data\n1\tstring\t\\0\\xae\\7 BSN archive data\n# AIN\n0\tstring\t\\x33\\x18 AIN archive data\n0\tstring\t\\x33\\x17 AIN archive data\n# XPA32\n0\tstring\txpa\\0\\1 XPA32 archive data\n# SZip (TODO: doesn't catch all versions)\n0\tstring\tSZ\\x0a\\4 SZip archive data\n# XPack DiskImage\n0\tstring\tjm XPack DiskImage archive data\n# XPack Data\n0\tstring\txpa XPack archive data\n# XPack Single Data\n0\tstring\t\\xc3\\x8d\\ jm XPack single archive data\n\n# TODO: missing due to unknown magic/magic at end of file:\n#DWC\n#ARG\n#ZAR\n#PC/3270\n#InstallIt\n#RKive\n#RK\n#XPack Diskimage\n\n# These were inspired by idarc, but actually verified\n# Dzip archiver (.dz)\n0\tstring\tDZ Dzip archive data\n>2\tbyte\tx \\b, version %i\n>3\tbyte\tx \\b.%i\n# ZZip archiver (.zz)\n0\tstring\tZZ\\ \\0\\0 ZZip archive data\n0\tstring\tZZ0 ZZip archive data\n# PAQ archiver (.paq)\n0\tstring\t\\xaa\\x40\\x5f\\x77\\x1f\\xe5\\x82\\x0d PAQ archive data\n0\tstring\tPAQ PAQ archive data\n>3\tbyte&0xf0\t0x30\n>>3\tbyte\tx (v%c)\n# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)\n0xe\tstring\t\\x1aJar\\x1b JAR (ARJ Software, Inc.) archive data\n0\tstring\tJARCS JAR (ARJ Software, Inc.) archive data\n\n# ARJ archiver (jason@jarthur.Claremont.EDU)\n0\tleshort\t\t0xea60\t\tARJ archive data\n!:mime\tapplication/x-arj\n>5\tbyte\t\tx\t\t\\b, v%d,\n>8\tbyte\t\t&0x04\t\tmulti-volume,\n>8\tbyte\t\t&0x10\t\tslash-switched,\n>8\tbyte\t\t&0x20\t\tbackup,\n>34\tstring\t\tx\t\toriginal name: %s,\n>7\tbyte\t\t0\t\tos: MS-DOS\n>7\tbyte\t\t1\t\tos: PRIMOS\n>7\tbyte\t\t2\t\tos: Unix\n>7\tbyte\t\t3\t\tos: Amiga\n>7\tbyte\t\t4\t\tos: Macintosh\n>7\tbyte\t\t5\t\tos: OS/2\n>7\tbyte\t\t6\t\tos: Apple ][ GS\n>7\tbyte\t\t7\t\tos: Atari ST\n>7\tbyte\t\t8\t\tos: NeXT\n>7\tbyte\t\t9\t\tos: VAX/VMS\n>3\tbyte\t\t>0\t\t%d]\n# [JW] idarc says this is also possible\n2\tleshort\t\t0xea60\t\tARJ archive data\n\n# HA archiver (Greg Roelofs, newt@uchicago.edu)\n# This is a really bad format. A file containing HAWAII will match this...\n#0\tstring\t\tHA\t\tHA archive data,\n#>2\tleshort\t\t=1\t\t1 file,\n#>2\tleshort\t\t>1\t\t%hu files,\n#>4\tbyte&0x0f\t=0\t\tfirst is type CPY\n#>4\tbyte&0x0f\t=1\t\tfirst is type ASC\n#>4\tbyte&0x0f\t=2\t\tfirst is type HSC\n#>4\tbyte&0x0f\t=0x0e\t\tfirst is type DIR\n#>4\tbyte&0x0f\t=0x0f\t\tfirst is type SPECIAL\n# suggestion: at least identify small archives (<1024 files)\n0  belong&0xffff00fc 0x48410000 HA archive data\n>2\tleshort\t\t=1\t\t1 file,\n>2\tleshort\t\t>1\t\t%u files,\n>4\tbyte&0x0f\t=0\t\tfirst is type CPY\n>4\tbyte&0x0f\t=1\t\tfirst is type ASC\n>4\tbyte&0x0f\t=2\t\tfirst is type HSC\n>4\tbyte&0x0f\t=0x0e\t\tfirst is type DIR\n>4\tbyte&0x0f\t=0x0f\t\tfirst is type SPECIAL\n\n# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)\n0\tstring\t\tHPAK\t\tHPACK archive data\n\n# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net\n0\tstring\t\t\\351,\\001JAM\\ \t\tJAM archive,\n>7\tstring\t\t>\\0\t\t\tversion %.4s\n>0x26\tbyte\t\t=0x27\t\t\t-\n>>0x2b\tstring          >\\0\t\t\tlabel %.11s,\n>>0x27\tlelong\t\tx\t\t\tserial %08x,\n>>0x36\tstring\t\t>\\0\t\t\tfstype %.8s\n\n# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)\n2\tstring\t\t-lh0-\t\tLHarc 1.x/ARX archive data [lh0]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lh1-\t\tLHarc 1.x/ARX archive data [lh1]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lz4-\t\tLHarc 1.x archive data [lz4]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lz5-\t\tLHarc 1.x archive data [lz5]\n!:mime\tapplication/x-lharc\n#\t[never seen any but the last; -lh4- reported in comp.compression:]\n2\tstring\t\t-lzs-\t\tLHa/LZS archive data [lzs]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh\\40-\t\tLHa 2.x? archive data [lh ]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lhd-\t\tLHa 2.x? archive data [lhd]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh2-\t\tLHa 2.x? archive data [lh2]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh3-\t\tLHa 2.x? archive data [lh3]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh4-\t\tLHa (2.x) archive data [lh4]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh5-\t\tLHa (2.x) archive data [lh5]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh6-\t\tLHa (2.x) archive data [lh6]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh7-\t\tLHa (2.x)/LHark archive data [lh7]\n!:mime\tapplication/x-lha\n>20\tbyte\t\tx\t\t- header level %d\n# taken from idarc [JW]\n2   string      -lZ         PUT archive data\n2   string      -lz         LZS archive data\n2   string      -sw1-       Swag archive data\n\n# RAR archiver (Greg Roelofs, newt@uchicago.edu)\n0\tstring\t\tRar!\t\tRAR archive data,\n!:mime\tapplication/x-rar\n>44\tbyte\t\tx\t\tv%0x,\n>10\tbyte\t\t>0\t\tflags:\n>>10\tbyte\t\t&0x01\t\tArchive volume,\n>>10\tbyte\t\t&0x02\t\tCommented,\n>>10\tbyte\t\t&0x04\t\tLocked,\n>>10\tbyte\t\t&0x08\t\tSolid,\n>>10\tbyte\t\t&0x20\t\tAuthenticated,\n>35\tbyte\t\t0\t\tos: MS-DOS\n>35\tbyte\t\t1\t\tos: OS/2\n>35\tbyte\t\t2\t\tos: Win32\n>35\tbyte\t\t3\t\tos: Unix\n# some old version? idarc says:\n0   string      RE\\x7e\\x5e  RAR archive data\n\n# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)\n0\tstring\t\tSQSH\t\tsquished archive data (Acorn RISCOS)\n\n# UC2 archiver (Greg Roelofs, newt@uchicago.edu)\n# [JW] see exe section for self-extracting version\n0\tstring\t\tUC2\\x1a\t\tUC2 archive data\n\n# PKZIP multi-volume archive\n0\tstring\t\tPK\\x07\\x08PK\\x03\\x04\tZip multi-volume archive data, at least PKZIP v2.50 to extract\n!:mime\tapplication/zip\n\n# Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)\n0\tstring\t\tPK\\005\\006\tZip archive data (empty)\n0\tstring\t\tPK\\003\\004\n\n# Specialised zip formats which start with a member named 'mimetype'\n# (stored uncompressed, with no 'extra field') containing the file's MIME type.\n# Check for have 8-byte name, 0-byte extra field, name \"mimetype\", and\n#  contents starting with \"application/\":\n>26\tstring\t\t\\x8\\0\\0\\0mimetypeapplication/\n\n#  KOffice / OpenOffice & StarOffice / OpenDocument formats\n#    From: Abel Cheung <abel@oaka.org>\n\n#   KOffice (1.2 or above) formats\n#    (mimetype contains \"application/vnd.kde.<SUBTYPE>\")\n>>50\tstring\tvnd.kde.\t\tKOffice (>=1.2)\n>>>58\tstring\tkarbon\t\t\tKarbon document\n>>>58\tstring\tkchart\t\t\tKChart document\n>>>58\tstring\tkformula\t\tKFormula document\n>>>58\tstring\tkivio\t\t\tKivio document\n>>>58\tstring\tkontour\t\t\tKontour document\n>>>58\tstring\tkpresenter\t\tKPresenter document\n>>>58\tstring\tkspread\t\t\tKSpread document\n>>>58\tstring\tkword\t\t\tKWord document\n\n#   OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)\n#    (mimetype contains \"application/vnd.sun.xml.<SUBTYPE>\")\n>>50\tstring\tvnd.sun.xml.\t\tOpenOffice.org 1.x\n>>>62\tstring\twriter\t\t\tWriter\n>>>>68\tbyte\t!0x2e\t\t\tdocument\n>>>>68\tstring\t.template\t\ttemplate\n>>>>68\tstring\t.global\t\t\tglobal document\n>>>62\tstring\tcalc\t\t\tCalc\n>>>>66\tbyte\t!0x2e\t\t\tspreadsheet\n>>>>66\tstring\t.template\t\ttemplate\n>>>62\tstring\tdraw\t\t\tDraw\n>>>>66\tbyte\t!0x2e\t\t\tdocument\n>>>>66\tstring\t.template\t\ttemplate\n>>>62\tstring\timpress\t\t\tImpress\n>>>>69\tbyte\t!0x2e\t\t\tpresentation\n>>>>69\tstring\t.template\t\ttemplate\n>>>62\tstring\tmath\t\t\tMath document\n>>>62\tstring\tbase\t\t\tDatabase file\n\n#   OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)\n#    http://lists.oasis-open.org/archives/office/200505/msg00006.html\n#    (mimetype contains \"application/vnd.oasis.opendocument.<SUBTYPE>\")\n>>50\tstring\tvnd.oasis.opendocument.\tOpenDocument\n>>>73\tstring\ttext\n>>>>77\tbyte\t!0x2d\t\t\tText\n!:mime\tapplication/vnd.oasis.opendocument.text\n>>>>77\tstring\t-template\t\tText Template\n!:mime\tapplication/vnd.oasis.opendocument.text-template\n>>>>77\tstring\t-web\t\t\tHTML Document Template\n!:mime\tapplication/vnd.oasis.opendocument.text-web\n>>>>77\tstring\t-master\t\t\tMaster Document\n!:mime\tapplication/vnd.oasis.opendocument.text-master\n>>>73\tstring\tgraphics\n>>>>81\tbyte\t!0x2d\t\t\tDrawing\n!:mime\tapplication/vnd.oasis.opendocument.graphics\n>>>>81\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.graphics-template\n>>>73\tstring\tpresentation\n>>>>85\tbyte\t!0x2d\t\t\tPresentation\n!:mime\tapplication/vnd.oasis.opendocument.presentation\n>>>>85\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.presentation-template\n>>>73\tstring\tspreadsheet\n>>>>84\tbyte\t!0x2d\t\t\tSpreadsheet\n!:mime\tapplication/vnd.oasis.opendocument.spreadsheet\n>>>>84\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.spreadsheet-template\n>>>73\tstring\tchart\n>>>>78\tbyte\t!0x2d\t\t\tChart\n!:mime\tapplication/vnd.oasis.opendocument.chart\n>>>>78\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.chart-template\n>>>73\tstring\tformula\n>>>>80\tbyte\t!0x2d\t\t\tFormula\n!:mime\tapplication/vnd.oasis.opendocument.formula\n>>>>80\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.formula-template\n>>>73\tstring\tdatabase\t\tDatabase\n!:mime\tapplication/vnd.oasis.opendocument.database\n>>>73\tstring\timage\n>>>>78\tbyte\t!0x2d\t\t\tImage\n!:mime\tapplication/vnd.oasis.opendocument.image\n>>>>78\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.image-template\n\n#  EPUB (OEBPS) books using OCF (OEBPS Container Format)\n#    http://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4.\n#    From: Ralf Brown <ralf.brown@gmail.com>\n>>50\tstring\tepub+zip\tEPUB document\n!:mime application/epub+zip\n\n#  Catch other ZIP-with-mimetype formats\n#\tIn a ZIP file, the bytes immediately after a member's contents are\n#\talways \"PK\". The 2 regex rules here print the \"mimetype\" member's\n#\tcontents up to the first 'P'. Luckily, most MIME types don't contain\n#\tany capital 'P's. This is a kludge.\n#    (mimetype contains \"application/<OTHER>\")\n>>50\t\tstring\t!epub+zip\n>>>50\t\tstring\t!vnd.oasis.opendocument.\n>>>>50\t\tstring\t!vnd.sun.xml.\n>>>>>50\t\tstring\t!vnd.kde.\n>>>>>>38\tregex\t[!-OQ-~]+\t\tZip data (MIME type \"%s\"?)\n!:mime\tapplication/zip\n#    (mimetype contents other than \"application/*\")\n>26\t\tstring\t\\x8\\0\\0\\0mimetype\n>>38\t\tstring\t!application/\n>>>38\t\tregex\t[!-OQ-~]+\t\tZip data (MIME type \"%s\"?)\n!:mime\tapplication/zip\n\n# Java Jar files\n>(26.s+30)\tleshort\t0xcafe\t\tJava archive data (JAR)\n!:mime\tapplication/java-archive\n\n# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)\n#   Next line excludes specialized formats:\n>(26.s+30)\tleshort\t!0xcafe\n>>26    string          !\\x8\\0\\0\\0mimetype\tZip archive data\n!:mime\tapplication/zip\n>>>4\tbyte\t\t0x09\t\t\\b, at least v0.9 to extract\n>>>4\tbyte\t\t0x0a\t\t\\b, at least v1.0 to extract\n>>>4\tbyte\t\t0x0b\t\t\\b, at least v1.1 to extract\n>>>4\tbyte\t\t0x14\t\t\\b, at least v2.0 to extract\n>>>4\tbyte\t\t0x2d\t\t\\b, at least v3.0 to extract\n>>>0x161\tstring\t\tWINZIP\t\t\\b, WinZIP self-extracting\n\n# StarView Metafile\n# From Pierre Ducroquet <pinaraf@pinaraf.info>\n0\tstring\tVCLMTF\tStarView MetaFile\n>6\tbeshort\tx\t\\b, version %d\n>8\tbelong\tx\t\\b, size %d\n\n# Zoo archiver\n20\tlelong\t\t0xfdc4a7dc\tZoo archive data\n!:mime\tapplication/x-zoo\n>4\tbyte\t\t>48\t\t\\b, v%c.\n>>6\tbyte\t\t>47\t\t\\b%c\n>>>7\tbyte\t\t>47\t\t\\b%c\n>32\tbyte\t\t>0\t\t\\b, modify: v%d\n>>33\tbyte\t\tx\t\t\\b.%d+\n>42\tlelong\t\t0xfdc4a7dc\t\\b,\n>>70\tbyte\t\t>0\t\textract: v%d\n>>>71\tbyte\t\tx\t\t\\b.%d+\n\n# Shell archives\n10\tstring\t\t#\\ This\\ is\\ a\\ shell\\ archive\tshell archive text\n!:mime\tapplication/octet-stream\n\n#\n# LBR. NB: May conflict with the questionable\n#          \"binary Computer Graphics Metafile\" format.\n#\n0       string  \\0\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\0\\0    LBR archive data\n#\n# PMA (CP/M derivative of LHA)\n#\n2       string          -pm0-           PMarc archive data [pm0]\n2       string          -pm1-           PMarc archive data [pm1]\n2       string          -pm2-           PMarc archive data [pm2]\n2       string          -pms-           PMarc SFX archive (CP/M, DOS)\n5       string          -pc1-           PopCom compressed executable (CP/M)\n\n# From Rafael Laboissiere <rafael@laboissiere.net>\n# The Project Revision Control System (see\n# http://prcs.sourceforge.net) generates a packaged project\n# file which is recognized by the following entry:\n0\tleshort\t\t0xeb81\tPRCS packaged project\n\n# Microsoft cabinets\n# by David Necas (Yeti) <yeti@physics.muni.cz>\n#0\tstring\tMSCF\\0\\0\\0\\0\tMicrosoft cabinet file data,\n#>25\tbyte\tx\t\tv%d\n#>24\tbyte\tx\t\t\\b.%d\n# MPi: All CABs have version 1.3, so this is pointless.\n# Better magic in debian-additions.\n\n# GTKtalog catalogs\n# by David Necas (Yeti) <yeti@physics.muni.cz>\n4\tstring\tgtktalog\\ \tGTKtalog catalog data,\n>13\tstring\t3\t\tversion 3\n>>14\tbeshort\t0x677a\t\t(gzipped)\n>>14\tbeshort\t!0x677a\t\t(not gzipped)\n>13\tstring\t>3\t\tversion %s\n\n############################################################################\n# Parity archive reconstruction file, the 'par' file format now used on Usenet.\n0       string          PAR\\0\tPARity archive data\n>48\tleshort\t\t=0\t- Index file\n>48\tleshort\t\t>0\t- file number %d\n\n# Felix von Leitner <felix-file@fefe.de>\n0\tstring\td8:announce\tBitTorrent file\n!:mime\tapplication/x-bittorrent\n\n# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>\n0\tbeshort 0x0e0f\t\tAtari MSA archive data\n>2\tbeshort x\t\t\\b, %d sectors per track\n>4\tbeshort 0\t\t\\b, 1 sided\n>4\tbeshort 1\t\t\\b, 2 sided\n>6\tbeshort x\t\t\\b, starting track: %d\n>8\tbeshort x\t\t\\b, ending track: %d\n\n# Alternate ZIP string (amc@arwen.cs.berkeley.edu)\n0\tstring\tPK00PK\\003\\004\tZip archive data\n\n# ACE archive (from http://www.wotsit.org/download.asp?f=ace)\n# by Stefan `Sec` Zehl <sec@42.org>\n7\tstring\t\t**ACE**\t\tACE archive data\n>15\tbyte\t>0\t\tversion %d\n>16\tbyte\t=0x00\t\t\\b, from MS-DOS\n>16\tbyte\t=0x01\t\t\\b, from OS/2\n>16\tbyte\t=0x02\t\t\\b, from Win/32\n>16\tbyte\t=0x03\t\t\\b, from Unix\n>16\tbyte\t=0x04\t\t\\b, from MacOS\n>16\tbyte\t=0x05\t\t\\b, from WinNT\n>16\tbyte\t=0x06\t\t\\b, from Primos\n>16\tbyte\t=0x07\t\t\\b, from AppleGS\n>16\tbyte\t=0x08\t\t\\b, from Atari\n>16\tbyte\t=0x09\t\t\\b, from Vax/VMS\n>16\tbyte\t=0x0A\t\t\\b, from Amiga\n>16\tbyte\t=0x0B\t\t\\b, from Next\n>14\tbyte\tx\t\t\\b, version %d to extract\n>5\tleshort &0x0080\t\t\\b, multiple volumes,\n>>17\tbyte\tx\t\t\\b (part %d),\n>5\tleshort &0x0002\t\t\\b, contains comment\n>5\tleshort\t&0x0200\t\t\\b, sfx\n>5\tleshort\t&0x0400\t\t\\b, small dictionary\n>5\tleshort\t&0x0800\t\t\\b, multi-volume\n>5\tleshort\t&0x1000\t\t\\b, contains AV-String\n>>30\tstring\t\\x16*UNREGISTERED\\x20VERSION*\t(unregistered)\n>5\tleshort &0x2000\t\t\\b, with recovery record\n>5\tleshort &0x4000\t\t\\b, locked\n>5\tleshort &0x8000\t\t\\b, solid\n# Date in MS-DOS format (whatever that is)\n#>18\tlelong\tx\t\tCreated on\n\n# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann\n# <doj@cubic.org>\n0x1A\tstring\tsfArk\t\tsfArk compressed Soundfont\n>0x15\tstring\t2\n>>0x1\tstring\t>\\0\t\tVersion %s\n>>0x2A\tstring\t>\\0\t\t: %s\n\n# DR-DOS 7.03 Packed File *.??_\n0\tstring\tPacked\\ File\\ \tPersonal NetWare Packed File\n>12\tstring\tx\t\t\\b, was \"%.12s\"\n\n# EET archive\n# From: Tilman Sauerbeck <tilman@code-monkey.de>\n0\tbelong\t0x1ee7ff00\tEET archive\n!:mime\tapplication/x-eet\n\n# rzip archives\n0\tstring\tRZIP\t\trzip compressed data\n>4\tbyte\tx\t\t- version %d\n>5\tbyte\tx\t\t\\b.%d\n>6\tbelong\tx\t\t(%d bytes)\n\n# From: \"Robert Dale\" <robdale@gmail.com>\n0\tbelong\t123\t\tdar archive,\n>4\tbelong\tx\t\tlabel \"%.8x\n>>8\tbelong\tx\t\t%.8x\n>>>12\tbeshort\tx\t\t%.4x\"\n>14\tbyte\t0x54\t\tend slice\n>14\tbeshort\t0x4e4e\t\tmulti-part\n>14\tbeshort\t0x4e53\t\tmulti-part, with -S\n\n# Symbian installation files\n#  http://www.thouky.co.uk/software/psifs/sis.html\n#  http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf\n8\tlelong\t0x10000419\tSymbian installation file\n!:mime\tapplication/vnd.symbian.install\n>4\tlelong\t0x1000006D\t(EPOC release 3/4/5)\n>4\tlelong\t0x10003A12\t(EPOC release 6)\n0\tlelong\t0x10201A7A\tSymbian installation file (Symbian OS 9.x)\n!:mime\tx-epoc/x-sisx-app\n\n# From \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\tMPQ\\032\t\tMoPaQ (MPQ) archive\n\n# From: Dirk Jagdmann <doj@cubic.org>\n# xar archive format: http://code.google.com/p/xar/\n0\tstring\txar!\t\txar archive\n>6\tbeshort\tx\t\t- version %d\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# .kgb\n0\tstring KGB_arch\t\tKGB Archiver file\n>10\tstring x\t\twith compression level %.1s\n\n# xar (eXtensible ARchiver) archive\n# From: \"David Remahl\" <dremahl@apple.com>\n0\tstring\txar!\t\txar archive\n#>4\tbeshort\tx\t\theader size %d\n>6\tbeshort\tx\t\tversion %d,\n#>8\tquad\tx\t\tcompressed TOC: %d,\n#>16\tquad\tx\t\tuncompressed TOC: %d,\n>24\tbelong\t0\t\tno checksum\n>24\tbelong\t1\t\tSHA-1 checksum\n>24\tbelong\t2\t\tMD5 checksum\n\n# Type: Parity Archive\n# From: Daniel van Eeden <daniel_e@dds.nl>\n0\tstring\tPAR2\t\tParity Archive Volume Set\n\n# Bacula volume format. (Volumes always start with a block header.)\n# URL: http://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n12\tstring\tBB02\t\tBacula volume\n>20\tbedate\tx\t\t\\b, started %s\n\n# ePub is XHTML + XML inside a ZIP archive.  The first member of the\n#   archive must be an uncompressed file called 'mimetype' with contents\n#   'application/epub+zip'\n\n\n# From: \"Michael Gorny\" <mgorny@gentoo.org>\n# ZPAQ: http://mattmahoney.net/dc/zpaq.html\n0\tstring\tzPQ\tZPAQ stream\n>3\tbyte\tx\t\\b, level %d\n\n# BBeB ebook, unencrypted (LRF format)\n# URL: http://www.sven.de/librie/Librie/LrfFormat\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\tL\\0R\\0F\\0\\0\\0\tBBeB ebook data, unencrypted\n>8\tbeshort\tx\t\t\\b, version %d\n>36\tbyte\t1\t\t\\b, front-to-back\n>36\tbyte\t16\t\t\\b, back-to-front\n>42\tbeshort\tx\t\t\\b, (%dx,\n>44\tbeshort\tx\t\t%d)\n\n# Symantec GHOST image by Joerg Jenderek at May 2014\n# http://us.norton.com/ghost/\n# http://www.garykessler.net/library/file_sigs.html\n0\t\tubelong&0xFFFFf7f0\t0xFEEF0100\tNorton GHost image\n# *.GHO\n>2\t\tubyte&0x08\t\t0x00\t\t\\b, first file\n# *.GHS or *.[0-9] with cns program option\n>2\t\tubyte&0x08\t\t0x08\t\t\\b, split file\n# part of split index interesting for *.ghs\n>>4\t\tubyte\t\t\tx\t\tid=0x%x\n# compression tag minus one equals numeric compression command line switch z[1-9]\n>3\t\tubyte\t\t\t0\t\t\\b, no compression\n>3\t\tubyte\t\t\t2\t\t\\b, fast compression (Z1)\n>3\t\tubyte\t\t\t3\t\t\\b, medium compression (Z2)\n>3\t\tubyte\t\t\t>3\t\t\n>>3\t\tubyte\t\t\t<11\t\t\\b, compression (Z%d-1)\n>2\t\tubyte&0x08\t\t0x00\t\t\n# ~ 30 byte password field only for *.gho\n>>12\t\tubequad\t\t\t!0\t\t\\b, password protected\n>>44\t\tubyte\t\t\t!1\t\t\n# 1~Image All, sector-by-sector only for *.gho\n>>>10\t\tubyte\t\t\t1\t\t\\b, sector copy\n# 1~Image Boot track only for *.gho\n>>>43\t\tubyte\t\t\t1\t\t\\b, boot track\n# 1~Image Disc only for *.gho implies Image Boot track and sector copy\n>>44\t\tubyte\t\t\t1\t\t\\b, disc sector copy\n# optional image description only *.gho\n>>0xff\t\tstring\t\t\t>\\0\t\t\"%-.254s\"\n# look for DOS sector end sequence\n>0xE08\tsearch/7776\t\t\\x55\\xAA\t\n>>&-512\tindirect\t\tx\t\t\\b; contains \n\n#------------------------------------------------------------------------------\n# $File: assembler,v 1.5 2013/09/17 17:33:36 christos Exp $\n# make:  file(1) magic for assembler source\n#\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.asciiz\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.byte\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.even\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.globl\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.text\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.file\t\tassembler source text\n!:mime\ttext/x-asm\n0\tregex\t\\^[\\040\\t]{0,50}\\\\.type\t\tassembler source text\n!:mime\ttext/x-asm\n\n#------------------------------------------------------------------------------\n# $File$\n# asterix:  file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character\n# strings as \"long\" - we assume they're just strings:\n# From: guy@netapp.com (Guy Harris)\n#\n0\tstring\t\t*STA\t\tAster*x\n>7\tstring\t\tWORD\t\t\tWords Document\n>7\tstring\t\tGRAP\t\t\tGraphic\n>7\tstring\t\tSPRE\t\t\tSpreadsheet\n>7\tstring\t\tMACR\t\t\tMacro\n0\tstring\t\t2278\t\tAster*x Version 2\n>29\tbyte\t\t0x36\t\t\tWords Document\n>29\tbyte\t\t0x35\t\t\tGraphic\n>29\tbyte\t\t0x32\t\t\tSpreadsheet\n>29\tbyte\t\t0x38\t\t\tMacro\n\n\n#------------------------------------------------------------------------------\n# $File: att3b,v 1.8 2009/09/19 16:28:08 christos Exp $\n# att3b:  file(1) magic for AT&T 3B machines\n#\n# The `versions' should be un-commented if they work for you.\n# (Was the problem just one of endianness?)\n#\n# 3B20\n#\n# The 3B20 conflicts with SCCS.\n#0\tbeshort\t\t0550\t\t3b20 COFF executable\n#>12\tbelong\t\t>0\t\tnot stripped\n#>22\tbeshort\t\t>0\t\t- version %d\n#0\tbeshort\t\t0551\t\t3b20 COFF executable (TV)\n#>12\tbelong\t\t>0\t\tnot stripped\n#>22\tbeshort\t\t>0\t\t- version %d\n#\n# WE32K\n#\n0\tbeshort\t\t0560\t\tWE32000 COFF\n>18\tbeshort\t\t^00000020\tobject\n>18\tbeshort\t\t&00000020\texecutable\n>12\tbelong\t\t>0\t\tnot stripped\n>18\tbeshort\t\t^00010000\tN/A on 3b2/300 w/paging\n>18\tbeshort\t\t&00020000\t32100 required\n>18\tbeshort\t\t&00040000\tand MAU hardware required\n>20\tbeshort\t\t0407\t\t(impure)\n>20\tbeshort\t\t0410\t\t(pure)\n>20\tbeshort\t\t0413\t\t(demand paged)\n>20\tbeshort\t\t0443\t\t(target shared library)\n>22\tbeshort\t\t>0\t\t- version %d\n0\tbeshort\t\t0561\t\tWE32000 COFF executable (TV)\n>12\tbelong\t\t>0\t\tnot stripped\n#>18\tbeshort\t\t&00020000\t- 32100 required\n#>18\tbeshort\t\t&00040000\tand MAU hardware required\n#>22\tbeshort\t\t>0\t\t- version %d\n#\n# core file for 3b2 \n0\tstring\t\t\\000\\004\\036\\212\\200\t3b2 core file\n>364\tstring\t\t>\\0\t\tof '%s'\n\n#------------------------------------------------------------------------------\n# $File: audio,v 1.71 2014/05/14 23:30:28 christos Exp $\n# audio:  file(1) magic for sound formats (see also \"iff\")\n#\n# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),\n# and others\n#\n\n# Sun/NeXT audio data\n0\tstring\t\t.snd\t\tSun/NeXT audio data:\n>12\tbelong\t\t1\t\t8-bit ISDN mu-law,\n!:mime\taudio/basic\n>12\tbelong\t\t2\t\t8-bit linear PCM [REF-PCM],\n!:mime\taudio/basic\n>12\tbelong\t\t3\t\t16-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t4\t\t24-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t5\t\t32-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t6\t\t32-bit IEEE floating point,\n!:mime\taudio/basic\n>12\tbelong\t\t7\t\t64-bit IEEE floating point,\n!:mime\taudio/basic\n>12\tbelong\t\t8\t\tFragmented sample data,\n>12\tbelong\t\t10\t\tDSP program,\n>12\tbelong\t\t11\t\t8-bit fixed point,\n>12\tbelong\t\t12\t\t16-bit fixed point,\n>12\tbelong\t\t13\t\t24-bit fixed point,\n>12\tbelong\t\t14\t\t32-bit fixed point,\n>12\tbelong\t\t18\t\t16-bit linear with emphasis,\n>12\tbelong\t\t19\t\t16-bit linear compressed,\n>12\tbelong\t\t20\t\t16-bit linear with emphasis and compression,\n>12\tbelong\t\t21\t\tMusic kit DSP commands,\n>12\tbelong\t\t23\t\t8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),\n!:mime  audio/x-adpcm\n>12\tbelong\t\t24\t\tcompressed (8-bit CCITT G.722 ADPCM)\n>12\tbelong\t\t25\t\tcompressed (3-bit CCITT G.723.3 ADPCM),\n>12\tbelong\t\t26\t\tcompressed (5-bit CCITT G.723.5 ADPCM),\n>12\tbelong\t\t27\t\t8-bit A-law (CCITT G.711),\n>20\tbelong\t\t1\t\tmono,\n>20\tbelong\t\t2\t\tstereo,\n>20\tbelong\t\t4\t\tquad,\n>16\tbelong\t\t>0\t\t%d Hz\n\n# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format\n# that uses little-endian encoding and has a different magic number\n0\tlelong\t\t0x0064732E\tDEC audio data:\n>12\tlelong\t\t1\t\t8-bit ISDN mu-law,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t2\t\t8-bit linear PCM [REF-PCM],\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t3\t\t16-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t4\t\t24-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t5\t\t32-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t6\t\t32-bit IEEE floating point,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t7\t\t64-bit IEEE floating point,\n!:mime\taudio/x-dec-basic\n>12\tbelong\t\t8\t\tFragmented sample data,\n>12\tbelong\t\t10\t\tDSP program,\n>12\tbelong\t\t11\t\t8-bit fixed point,\n>12\tbelong\t\t12\t\t16-bit fixed point,\n>12\tbelong\t\t13\t\t24-bit fixed point,\n>12\tbelong\t\t14\t\t32-bit fixed point,\n>12\tbelong\t\t18\t\t16-bit linear with emphasis,\n>12\tbelong\t\t19\t\t16-bit linear compressed,\n>12\tbelong\t\t20\t\t16-bit linear with emphasis and compression,\n>12\tbelong\t\t21\t\tMusic kit DSP commands,\n>12\tlelong\t\t23\t\t8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),\n!:mime\taudio/x-dec-basic\n>12\tbelong\t\t24\t\tcompressed (8-bit CCITT G.722 ADPCM)\n>12\tbelong\t\t25\t\tcompressed (3-bit CCITT G.723.3 ADPCM),\n>12\tbelong\t\t26\t\tcompressed (5-bit CCITT G.723.5 ADPCM),\n>12\tbelong\t\t27\t\t8-bit A-law (CCITT G.711),\n>20\tlelong\t\t1\t\tmono,\n>20\tlelong\t\t2\t\tstereo,\n>20\tlelong\t\t4\t\tquad,\n>16\tlelong\t\t>0\t\t%d Hz\n\n# Creative Labs AUDIO stuff\n0\tstring\tMThd\t\t\tStandard MIDI data\n!:mime\taudio/midi\n>8 \tbeshort\tx\t\t\t(format %d)\n>10\tbeshort\tx\t\t\tusing %d track\n>10\tbeshort\t\t>1\t\t\\bs\n>12\tbeshort&0x7fff\tx\t\tat 1/%d\n>12\tbeshort&0x8000\t>0\t\tSMPTE\n\n0\tstring\tCTMF\t\t\tCreative Music (CMF) data\n!:mime\taudio/x-unknown\n0\tstring\tSBI\t\t\tSoundBlaster instrument data\n!:mime\taudio/x-unknown\n0\tstring\tCreative\\ Voice\\ File\tCreative Labs voice data\n!:mime\taudio/x-unknown\n# is this next line right?  it came this way...\n>19\tbyte\t0x1A\n>23\tbyte\t>0\t\t\t- version %d\n>22\tbyte\t>0\t\t\t\\b.%d\n\n# first entry is also the string \"NTRK\"\n0\tbelong\t\t0x4e54524b\tMultiTrack sound data\n>4\tbelong\t\tx\t\t- version %d\n\n# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED\n# [based on posting 940824 by \"Dirk/Elastik\", husberg@lehtori.cc.tut.fi]\n0\tstring\t\tEMOD\t\tExtended MOD sound data,\n>4\tbyte&0xf0\tx\t\tversion %d\n>4\tbyte&0x0f\tx\t\t\\b.%d,\n>45\tbyte\t\tx\t\t%d instruments\n>83\tbyte\t\t0\t\t(module)\n>83\tbyte\t\t1\t\t(song)\n\n# Real Audio (Magic .ra\\0375)\n0\tbelong\t\t0x2e7261fd\tRealAudio sound file\n!:mime\taudio/x-pn-realaudio\n0\tstring\t\t.RMF\\0\\0\\0\tRealMedia file\n!:mime\tapplication/vnd.rn-realmedia\n#video/x-pn-realvideo\n#video/vnd.rn-realvideo\n#application/vnd.rn-realmedia\n#\tsigh, there are many mimes for that but the above are the most common.\n\n# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]\n# Oct 31, 1995\n# fixed by <doj@cubic.org> 2003-06-24\n# Too short...\n#0\tstring\t\tMTM\t\tMultiTracker Module sound file\n#0\tstring\t\tif\t\tComposer 669 Module sound data\n#0\tstring\t\tJN\t\tComposer 669 Module sound data (extended format)\n0\tstring\t\tMAS_U\t\tULT(imate) Module sound data\n\n#0\tstring\t\tFAR\t\tModule sound data\n#>4\tstring\t\t>\\15\t\tTitle: \"%s\"\n\n0x2c\tstring\t\tSCRM\t\tScreamTracker III Module sound data\n>0\tstring\t\t>\\0\t\tTitle: \"%s\"\n\n# Gravis UltraSound patches\n# From <ache@nagual.ru>\n\n0\tstring\t\tGF1PATCH110\\0ID#000002\\0\tGUS patch\n0\tstring\t\tGF1PATCH100\\0ID#000002\\0\tOld GUS\tpatch\n\n# mime types according to http://www.geocities.com/nevilo/mod.htm:\n#\taudio/it\t.it\n#\taudio/x-zipped-it\t.itz\n#\taudio/xm\tfasttracker modules\n#\taudio/x-s3m\tscreamtracker modules\n#\taudio/s3m\tscreamtracker modules\n#\taudio/x-zipped-mod\tmdz\n#\taudio/mod\tmod\n#\taudio/x-mod\tAll modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)\n\n#\n# Taken from loader code from mikmod version 2.14\n# by Steve McIntyre (stevem@chiark.greenend.org.uk)\n# <doj@cubic.org> added title printing on 2003-06-24\n0\tstring\tMAS_UTrack_V00\n>14\tstring\t>/0\t\tultratracker V1.%.1s module sound data\n!:mime\taudio/x-mod\n#audio/x-tracker-module\n\n0\tstring\tUN05\t\tMikMod UNI format module sound data\n\n0\tstring\tExtended\\ Module: Fasttracker II module sound data\n!:mime\taudio/x-mod\n#audio/x-tracker-module\n>17\tstring\t>\\0\t\tTitle: \"%s\"\n\n21\tstring/c\t=!SCREAM!\tScreamtracker 2 module sound data\n!:mime\taudio/x-mod\n#audio/x-screamtracker-module\n21\tstring\tBMOD2STM\tScreamtracker 2 module sound data\n!:mime\taudio/x-mod\n#audio/x-screamtracker-module\n1080\tstring\tM.K.\t\t4-channel Protracker module sound data\n!:mime\taudio/x-mod\n#audio/x-protracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tM!K!\t\t4-channel Protracker module sound data\n!:mime\taudio/x-mod\n#audio/x-protracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tFLT4\t\t4-channel Startracker module sound data\n!:mime\taudio/x-mod\n#audio/x-startracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tFLT8\t\t8-channel Startracker module sound data\n!:mime\taudio/x-mod\n#audio/x-startracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t4CHN\t\t4-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t6CHN\t\t6-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t8CHN\t\t8-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tCD81\t\t8-channel Octalyser module sound data\n!:mime\taudio/x-mod\n#audio/x-octalysertracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tOKTA\t\t8-channel Octalyzer module sound data\n!:mime\taudio/x-mod\n#audio/x-octalysertracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n# Not good enough.\n#1082\tstring\tCH\n#>1080\tstring\t>/0\t\t%.2s-channel Fasttracker \"oktalyzer\" module sound data\n1080\tstring\t16CN\t\t16-channel Taketracker module sound data\n!:mime\taudio/x-mod\n#audio/x-taketracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t32CN\t\t32-channel Taketracker module sound data\n!:mime\taudio/x-mod\n#audio/x-taketracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n\n# TOC sound files -Trevor Johnson <trevor@jpj.net>\n#\n0       string          TOC             TOC sound file\n\n# sidfiles <pooka@iki.fi>\n# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24\n0\tstring\t\tSIDPLAY\\ INFOFILE\tSidplay info file\n\n0\tstring\t\tPSID\t\t\tPlaySID v2.2+ (AMIGA) sidtune\n>4\tbeshort\t\t>0\t\t\tw/ header v%d,\n>14\tbeshort\t\t=1\t\t\tsingle song,\n>14\tbeshort\t\t>1\t\t\t%d songs,\n>16\tbeshort\t\t>0\t\t\tdefault song: %d\n>0x16\tstring\t\t>\\0\t\t\tname: \"%s\"\n>0x36\tstring\t\t>\\0\t\t\tauthor: \"%s\"\n>0x56\tstring\t\t>\\0\t\t\tcopyright: \"%s\"\n\n0\tstring\t\tRSID\t\t\tRSID sidtune PlaySID compatible\n>4\tbeshort\t\t>0\t\t\tw/ header v%d,\n>14\tbeshort\t\t=1\t\t\tsingle song,\n>14\tbeshort\t\t>1\t\t\t%d songs,\n>16\tbeshort\t\t>0\t\t\tdefault song: %d\n>0x16\tstring\t\t>\\0\t\t\tname: \"%s\"\n>0x36\tstring\t\t>\\0\t\t\tauthor: \"%s\"\n>0x56\tstring\t\t>\\0\t\t\tcopyright: \"%s\"\n\n# IRCAM sound files - Michael Pruett <michael@68k.org>\n# http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html\n0\tbelong\t\t0x64a30100\t\tIRCAM file (VAX little-endian)\n0\tbelong\t\t0x0001a364\t\tIRCAM file (VAX big-endian)\n0\tbelong\t\t0x64a30200\t\tIRCAM file (Sun big-endian)\n0\tbelong\t\t0x0002a364\t\tIRCAM file (Sun little-endian)\n0\tbelong\t\t0x64a30300\t\tIRCAM file (MIPS little-endian)\n0\tbelong\t\t0x0003a364\t\tIRCAM file (MIPS big-endian)\n0\tbelong\t\t0x64a30400\t\tIRCAM file (NeXT big-endian)\n0\tbelong\t\t0x64a30400\t\tIRCAM file (NeXT big-endian)\n0\tbelong\t\t0x0004a364\t\tIRCAM file (NeXT little-endian)\n\n# NIST SPHERE <mpruett@sgi.com>\n0\tstring\t\tNIST_1A\\n\\ \\ \\ 1024\\n\tNIST SPHERE file\n\n# Sample Vision <mpruett@sgi.com>\n0\tstring\t\tSOUND\\ SAMPLE\\ DATA\\ \tSample Vision file\n\n# Audio Visual Research <tonigonenstein@users.sourceforge.net>\n0\tstring\t\t2BIT\t\t\tAudio Visual Research file,\n>12\tbeshort\t\t=0\t\t\tmono,\n>12\tbeshort\t\t=-1\t\t\tstereo,\n>14\tbeshort\t\tx\t\t\t%d bits\n>16\tbeshort\t\t=0\t\t\tunsigned,\n>16\tbeshort\t\t=-1\t\t\tsigned,\n>22\tbelong&0x00ffffff\tx\t\t%d Hz,\n>18\tbeshort\t\t=0\t\t\tno loop,\n>18\tbeshort\t\t=-1\t\t\tloop,\n>21\tubyte\t\t<128\t\t\tnote %d,\n>22\tbyte\t\t=0\t\t\treplay 5.485 KHz\n>22\tbyte\t\t=1\t\t\treplay 8.084 KHz\n>22\tbyte\t\t=2\t\t\treplay 10.971 KHz\n>22\tbyte\t\t=3\t\t\treplay 16.168 KHz\n>22\tbyte\t\t=4\t\t\treplay 21.942 KHz\n>22\tbyte\t\t=5\t\t\treplay 32.336 KHz\n>22\tbyte\t\t=6\t\t\treplay 43.885 KHz\n>22\tbyte\t\t=7\t\t\treplay 47.261 KHz\n\n# SGI SoundTrack <mpruett@sgi.com>\n0\tstring\t\t_SGI_SoundTrack\t\tSGI SoundTrack project file\n# ID3 version 2 tags <waschk@informatik.uni-rostock.de>\n0\tstring\t\tID3\tAudio file with ID3 version 2\n>3\tbyte\t\tx\t\\b.%d\n>4\tbyte\t\tx\t\\b.%d\n>>5\tbyte\t\t&0x80\t\\b, unsynchronized frames\n>>5\tbyte\t\t&0x40\t\\b, extended header\n>>5\tbyte\t\t&0x20\t\\b, experimental\n>>5\tbyte\t\t&0x10\t\\b, footer present\n>(6.I+10)\tindirect\tx\t\\b, contains: \n\n# NSF (NES sound file) magic\n0\tstring\t\tNESM\\x1a\tNES Sound File\n>14\tstring\t\t>\\0\t\t(\"%s\" by\n>46\tstring\t\t>\\0\t\t%s, copyright\n>78\tstring\t\t>\\0\t\t%s),\n>5\tbyte\t\tx\t\tversion %d,\n>6\tbyte\t\tx\t\t%d tracks,\n>122\tbyte&0x2\t=1\t\tdual PAL/NTSC\n>122\tbyte&0x1\t=1\t\tPAL\n>122\tbyte&0x1\t=0\t\tNTSC\n\n# Type: SNES SPC700 sound files\n# From: Josh Triplett <josh@freedesktop.org>\n0\tstring\tSNES-SPC700\\ Sound\\ File\\ Data\\ v\tSNES SPC700 sound file\n>&0\tstring\t0.30\t\t\t\t\t\\b, version %s\n>>0x23\tbyte\t0x1B\t\t\t\t\t\\b, without ID666 tag\n>>0x23\tbyte\t0x1A\t\t\t\t\t\\b, with ID666 tag\n>>>0x2E\tstring\t>\\0\t\t\t\t\t\\b, song \"%.32s\"\n>>>0x4E\tstring\t>\\0\t\t\t\t\t\\b, game \"%.32s\"\n\n# Impulse tracker module (audio/x-it)\n0\tstring\t\tIMPM\t\tImpulse Tracker module sound data -\n!:mime\taudio/x-mod\n>4\tstring\t\t>\\0\t\t\"%s\"\n>40\tleshort\t\t!0\t\tcompatible w/ITv%x\n>42\tleshort\t\t!0\t\tcreated w/ITv%x\n\n# Imago Orpheus module (audio/x-imf)\n60\tstring\t\tIM10\t\tImago Orpheus module sound data -\n>0\tstring\t\t>\\0\t\t\"%s\"\n\n# From <collver1@attbi.com>\n# These are the /etc/magic entries to decode modules, instruments, and\n# samples in Impulse Tracker's native format.\n\n0\tstring\t\tIMPS\t\tImpulse Tracker Sample\n>18\tbyte\t\t&2\t\t16 bit\n>18\tbyte\t\t^2\t\t8 bit\n>18\tbyte\t\t&4\t\tstereo\n>18\tbyte\t\t^4\t\tmono\n0\tstring\t\tIMPI\t\tImpulse Tracker Instrument\n>28\tleshort\t\t!0\t\tITv%x\n>30\tbyte\t\t!0\t\t%d samples\n\n# Yamaha TX Wave:  file(1) magic for Yamaha TX Wave audio files\n# From <collver1@attbi.com>\n0\tstring\t\tLM8953\t\tYamaha TX Wave\n>22\tbyte\t\t0x49\t\tlooped\n>22\tbyte\t\t0xC9\t\tnon-looped\n>23\tbyte\t\t1\t\t33kHz\n>23\tbyte\t\t2\t\t50kHz\n>23\tbyte\t\t3\t\t16kHz\n\n# scream tracker:  file(1) magic for Scream Tracker sample files\n#\n# From <collver1@attbi.com>\n76\tstring\t\tSCRS\t\tScream Tracker Sample\n>0\tbyte\t\t1\t\tsample\n>0\tbyte\t\t2\t\tadlib melody\n>0\tbyte\t\t>2\t\tadlib drum\n>31\tbyte\t\t&2\t\tstereo\n>31\tbyte\t\t^2\t\tmono\n>31\tbyte\t\t&4\t\t16bit little endian\n>31\tbyte\t\t^4\t\t8bit\n>30\tbyte\t\t0\t\tunpacked\n>30\tbyte\t\t1\t\tpacked\n\n# audio\n# From: Cory Dikkers <cdikkers@swbell.net>\n0\tstring\t\tMMD0\t\tMED music file, version 0\n0\tstring\t\tMMD1\t\tOctaMED Pro music file, version 1\n0\tstring\t\tMMD3\t\tOctaMED Soundstudio music file, version 3\n0\tstring\t\tOctaMEDCmpr\tOctaMED Soundstudio compressed file\n0\tstring\t\tMED\t\tMED_Song\n0\tstring\t\tSymM\t\tSymphonie SymMOD music file\n#\n0\tstring\t\tTHX\t\tAHX version\n>3\tbyte\t\t=0\t\t1 module data\n>3\tbyte\t\t=1\t\t2 module data\n#\n0\tstring\t\tOKTASONG\tOktalyzer module data\n#\n0\tstring\t\tDIGI\\ Booster\\ module\\0\t%s\n>20\tbyte\t\t>0\t\t%c\n>>21\tbyte\t\t>0\t\t\\b%c\n>>>22\tbyte\t\t>0\t\t\\b%c\n>>>>23\tbyte\t\t>0\t\t\\b%c\n>610\tstring\t\t>\\0\t\t\\b, \"%s\"\n#\n0\tstring\t\tDBM0\t   \tDIGI Booster Pro Module\n>4\tbyte\t\t>0\t\tV%X.\n>>5\tbyte\t\tx\t\t\\b%02X\n>16\tstring\t\t>\\0\t\t\\b, \"%s\"\n#\n0\tstring\t\tFTMN\t\tFaceTheMusic module\n>16\tstring\t\t>\\0d\t\t\\b, \"%s\"\n\n# From: <doj@cubic.org> 2003-06-24\n0\tstring\t\tAMShdr\\32\tVelvet Studio AMS Module v2.2\n0\tstring\t\tExtreme\t\tExtreme Tracker AMS Module v1.3\n0\tstring\t\tDDMF\t\tXtracker DMF Module\n>4\tbyte\t\tx\t\tv%i\n>0xD\tstring\t\t>\\0\t\tTitle: \"%s\"\n>0x2B\tstring\t\t>\\0\t\tComposer: \"%s\"\n0\tstring\t\tDSM\\32\t\tDynamic Studio Module DSM\n0\tstring\t\tSONG\t\tDigiTrekker DTM Module\n0\tstring\t\tDMDL\t\tDigiTrakker MDL Module\n0\tstring\t\tPSM\\32\t\tProtracker Studio PSM Module\n44\tstring\t\tPTMF\t\tPoly Tracker PTM Module\n>0\tstring\t\t>\\32\t\tTitle: \"%s\"\n0\tstring\t\tMT20\t\tMadTracker 2.0 Module MT2\n0\tstring\t\tRAD\\40by\\40REALiTY!! RAD Adlib Tracker Module RAD\n0\tstring\t\tRTMM\t\tRTM Module\n0x426\tstring\t\tMaDoKaN96\tXMS Adlib Module\n>0\tstring\t\t>\\0\t\tComposer: \"%s\"\n0\tstring\t\tAMF\t\tAMF Module\n>4\tstring\t\t>\\0\t\tTitle: \"%s\"\n0\tstring\t\tMODINFO1\tOpen Cubic Player Module Inforation MDZ\n0\tstring\t\tExtended\\40Instrument: Fast Tracker II Instrument\n\n# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>\n# NOA Nancy Codec file\n0\tstring\t\t\\210NOA\\015\\012\\032\tNOA Nancy Codec Movie file\n# Yamaha SMAF format\n0\tstring\t\tMMMD\t\tYamaha SMAF file\n# Sharp Jisaku Melody format for PDC\n0\tstring\t\t\\001Sharp\\040JisakuMelody\tSHARP Cell-Phone ringing Melody\n>20\tstring\t\tVer01.00\tVer. 1.00\n>>32\tbyte\t\tx\t\t, %d tracks\n\n# Free lossless audio codec <http://flac.sourceforge.net>\n# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>\n0\tstring\t\t\tfLaC\t\tFLAC audio bitstream data\n!:mime\taudio/x-flac\n>4\tbyte&0x7f\t\t>0\t\t\\b, unknown version\n>4\tbyte&0x7f\t\t0\t\t\\b\n# some common bits/sample values\n>>20\tbeshort&0x1f0\t\t0x030\t\t\\b, 4 bit\n>>20\tbeshort&0x1f0\t\t0x050\t\t\\b, 6 bit\n>>20\tbeshort&0x1f0\t\t0x070\t\t\\b, 8 bit\n>>20\tbeshort&0x1f0\t\t0x0b0\t\t\\b, 12 bit\n>>20\tbeshort&0x1f0\t\t0x0f0\t\t\\b, 16 bit\n>>20\tbeshort&0x1f0\t\t0x170\t\t\\b, 24 bit\n>>20\tbyte&0xe\t\t0x0\t\t\\b, mono\n>>20\tbyte&0xe\t\t0x2\t\t\\b, stereo\n>>20\tbyte&0xe\t\t0x4\t\t\\b, 3 channels\n>>20\tbyte&0xe\t\t0x6\t\t\\b, 4 channels\n>>20\tbyte&0xe\t\t0x8\t\t\\b, 5 channels\n>>20\tbyte&0xe\t\t0xa\t\t\\b, 6 channels\n>>20\tbyte&0xe\t\t0xc\t\t\\b, 7 channels\n>>20\tbyte&0xe\t\t0xe\t\t\\b, 8 channels\n# some common sample rates\n>>17\tbelong&0xfffff0\t\t0x0ac440\t\\b, 44.1 kHz\n>>17\tbelong&0xfffff0\t\t0x0bb800\t\\b, 48 kHz\n>>17\tbelong&0xfffff0\t\t0x07d000\t\\b, 32 kHz\n>>17\tbelong&0xfffff0\t\t0x056220\t\\b, 22.05 kHz\n>>17\tbelong&0xfffff0\t\t0x05dc00\t\\b, 24 kHz\n>>17\tbelong&0xfffff0\t\t0x03e800\t\\b, 16 kHz\n>>17\tbelong&0xfffff0\t\t0x02b110\t\\b, 11.025 kHz\n>>17\tbelong&0xfffff0\t\t0x02ee00\t\\b, 12 kHz\n>>17\tbelong&0xfffff0\t\t0x01f400\t\\b, 8 kHz\n>>17\tbelong&0xfffff0\t\t0x177000\t\\b, 96 kHz\n>>17\tbelong&0xfffff0\t\t0x0fa000\t\\b, 64 kHz\n>>21\tbyte&0xf\t\t>0\t\t\\b, >4G samples\n>>21\tbyte&0xf\t\t0\t\t\\b\n>>>22\tbelong\t\t\t>0\t\t\\b, %u samples\n>>>22\tbelong\t\t\t0\t\t\\b, length unknown\n\n# (ISDN) VBOX voice message file (Wolfram Kleff)\n0       string          VBOX            VBOX voice message data\n\n# ReBorn Song Files (.rbs)\n# David J. Singer <doc@deadvirgins.org.uk>\n8       string          RB40             RBS Song file\n>29     string          ReBorn           created by ReBorn\n>37     string          Propellerhead    created by ReBirth\n\n# Synthesizer Generator and Kimwitu share their file format\n0\tstring\t\tA#S#C#S#S#L#V#3\t    Synthesizer Generator or Kimwitu data\n# Kimwitu++ uses a slightly different magic\n0\tstring\t\tA#S#C#S#S#L#HUB\t    Kimwitu++ data\n\n# From \"Simon Hosie\n0       string  TFMX-SONG       TFMX module sound data\n\n# Monkey's Audio compressed audio format (.ape)\n# From danny.milo@gmx.net (Danny Milosavljevic)\n# New version from Abel Cheung <abel (@) oaka.org>\n0\t\tstring\t\tMAC\\040\t\tMonkey's Audio compressed format\n!:mime audio/x-ape\n>4\t\tuleshort\t>0x0F8B\t\tversion %d\n>>(0x08.l)\tuleshort\t=1000\t\twith fast compression\n>>(0x08.l)\tuleshort\t=2000\t\twith normal compression\n>>(0x08.l)\tuleshort\t=3000\t\twith high compression\n>>(0x08.l)\tuleshort\t=4000\t\twith extra high compression\n>>(0x08.l)\tuleshort\t=5000\t\twith insane compression\n>>(0x08.l+18)\tuleshort\t=1\t\t\\b, mono\n>>(0x08.l+18)\tuleshort\t=2\t\t\\b, stereo\n>>(0x08.l+20)\tulelong\t\tx\t\t\\b, sample rate %d\n>4\t\tuleshort\t<0x0F8C\t\tversion %d\n>>6\t\tuleshort\t=1000\t\twith fast compression\n>>6\t\tuleshort\t=2000\t\twith normal compression\n>>6\t\tuleshort\t=3000\t\twith high compression\n>>6\t\tuleshort\t=4000\t\twith extra high compression\n>>6\t\tuleshort\t=5000\t\twith insane compression\n>>10\t\tuleshort\t=1\t\t\\b, mono\n>>10\t\tuleshort\t=2\t\t\\b, stereo\n>>12\t\tulelong\t\tx\t\t\\b, sample rate %d\n\n# adlib sound files\n# From Gurkan Sengun <gurkan@linuks.mine.nu>, http://www.linuks.mine.nu\n0    \tstring\t\tRAWADATA\tRdosPlay RAW\n\n1068\tstring\t\tRoR\t\tAMUSIC Adlib Tracker\n\n0\tstring\t\tJCH\t\tEdLib\n\n0\tstring\t\tmpu401tr\tMPU-401 Trakker\n\n0\tstring\t\tSAdT\t\tSurprise! Adlib Tracker\n>4\tbyte\t\tx\t\tVersion %d\n\n0\tstring\t\tXAD!\t\teXotic ADlib\n\n0\tstring\t\tofTAZ!\t\teXtra Simple Music\n\n# Spectrum 128 tunes (.ay files).\n# From: Emanuel Haupt <ehaupt@critical.ch>\n0\tstring\t\tZXAYEMUL\tSpectrum 128 tune\n\n0\tstring\t\t\\0BONK\t\tBONK,\n#>5\tbyte\t\tx\t\tversion %d\n>14\tbyte\t\tx\t\t%d channel(s),\n>15\tbyte\t\t=1\t\tlossless,\n>15\tbyte\t\t=0\t\tlossy,\n>16\tbyte\t\tx\t\tmid-side\n\n384\tstring\t\tLockStream\tLockStream Embedded file (mostly MP3 on old Nokia phones)\n\n# format VQF (proprietary codec for sound)\n# some infos on the header file available at :\n# http://www.twinvq.org/english/technology_format.html\n0\tstring\t\tTWIN97012000\tVQF data\n>27\tshort\t\t0\t\t\\b, Mono\n>27\tshort\t\t1\t\t\\b, Stereo\n>31\tshort \t\t>0\t\t\\b, %d kbit/s\n>35\tshort \t\t>0\t\t\\b, %d kHz\n\n# Nelson A. de Oliveira (naoliv@gmail.com)\n# .eqf\n0\tstring\tWinamp\\ EQ\\ library\\ file\t%s\n# it will match only versions like v<digit>.<digit>\n# Since I saw only eqf files with version v1.1 I think that it's OK\n>23\tstring\tx\t\\b%.4s\n# .preset\n0\tstring\t[Equalizer\\ preset]\tXMMS equalizer preset\n# .m3u\n0\tsearch/1\t#EXTM3U \tM3U playlist text\n# .pls\n0\tsearch/1\t[playlist]\tPLS playlist text\n# licq.conf\n1\tstring\t[licq]\t\t\tLICQ configuration file\n\n# Atari ST audio files by Dirk Jagdmann <doj@cubic.org>\n0\tstring\t\tICE!\t\tSNDH Atari ST music\n0\tstring\t\tSC68\\ Music-file\\ /\\ (c)\\ (BeN)jami\tsc68 Atari ST music\n\n# musepak support From: \"Jiri Pejchal\" <jiri.pejchal@gmail.com>\n0       string          MP+     Musepack audio\n!:mime\taudio/x-musepack\n>3      byte            255     \\b, SV pre8\n>3      byte&0xF        0x6     \\b, SV 6\n>3      byte&0xF        0x8     \\b, SV 8\n>3      byte&0xF        0x7     \\b, SV 7\n>>3     byte&0xF0       0x0     \\b.0\n>>3     byte&0xF0       0x10    \\b.1\n>>3     byte&0xF0       240     \\b.15\n>>10    byte&0xF0       0x0     \\b, no profile\n>>10    byte&0xF0       0x10    \\b, profile 'Unstable/Experimental'\n>>10    byte&0xF0       0x50    \\b, quality 0\n>>10    byte&0xF0       0x60    \\b, quality 1\n>>10    byte&0xF0       0x70    \\b, quality 2 (Telephone)\n>>10    byte&0xF0       0x80    \\b, quality 3 (Thumb)\n>>10    byte&0xF0       0x90    \\b, quality 4 (Radio)\n>>10    byte&0xF0       0xA0    \\b, quality 5 (Standard)\n>>10    byte&0xF0       0xB0    \\b, quality 6 (Xtreme)\n>>10    byte&0xF0       0xC0    \\b, quality 7 (Insane)\n>>10    byte&0xF0       0xD0    \\b, quality 8 (BrainDead)\n>>10    byte&0xF0       0xE0    \\b, quality 9\n>>10    byte&0xF0       0xF0    \\b, quality 10\n>>27    byte            0x0     \\b, Buschmann 1.7.0-9, Klemm 0.90-1.05\n>>27    byte            102     \\b, Beta 1.02\n>>27    byte            104     \\b, Beta 1.04\n>>27    byte            105     \\b, Alpha 1.05\n>>27    byte            106     \\b, Beta 1.06\n>>27    byte            110     \\b, Release 1.1\n>>27    byte            111     \\b, Alpha 1.11\n>>27    byte            112     \\b, Beta 1.12\n>>27    byte            113     \\b, Alpha 1.13\n>>27    byte            114     \\b, Beta 1.14\n>>27    byte            115     \\b, Alpha 1.15\n\n# IMY\n# from http://filext.com/detaillist.php?extdetail=IMY\n# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm\n# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html\n# http://www.wx800.com/msg/download/irda/iMelody.pdf\n0\tstring\tBEGIN:IMELODY\tiMelody Ringtone Format\n\n# From: \"Mateus Caruccio\" <mateus@caruccio.com>\n# guitar pro v3,4,5 from http://filext.com/file-extension/gp3\n0\tstring\t\\030FICHIER\\ GUITAR\\ PRO\\ v3.\tGuitar Pro Ver. 3 Tablature\n\n# From: \"Leslie P. Polzer\" <leslie.polzer@gmx.net>\n60\tstring\tSONG\t\tSoundFX Module sound file\n\n# Type: Adaptive Multi-Rate Codec\n# URL:  http://filext.com/detaillist.php?extdetail=AMR\n# From: Russell Coker <russell@coker.com.au>\n0\tstring\t#!AMR\t\tAdaptive Multi-Rate Codec (GSM telephony)\n\n# Type: SuperCollider 3 Synth Definition File Format\n# From: Mario Lang <mlang@debian.org>\n0\tstring\tSCgf\tSuperCollider3 Synth Definition file,\n>4\tbelong\tx\tversion %d\n\n# Type: True Audio Lossless Audio\n# URL:  http://wiki.multimedia.cx/index.php?title=True_Audio\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\tTTA1\tTrue Audio Lossless Audio\n\n# Type: WavPack Lossless Audio\n# URL:  http://wiki.multimedia.cx/index.php?title=WavPack\n# From: Mike Melanson <mike@multimedia.cx>\n0\tstring\twvpk\tWavPack Lossless Audio\n\n# From Fabio R. Schmidlin <frs@pop.com.br>\n# VGM music file\n0\tstring\t\tVgm\\ \n>9\tubyte\t\t>0\tVGM Video Game Music dump v\n>>9\tubyte/16\t>0\t\\b%d\n>>9\tubyte&0x0F\tx\t\\b%d\n>>8\tubyte/16\tx\t\\b.%d\n>>8\tubyte&0x0F\t>0\t\\b%d\n#Get soundchips\n>>8\tubyte\t\tx\t\\b, soundchip(s)=\n>>0x0C\tulelong\t\t>0\tSN76489,\n>>0x10\tulelong\t\t>0\tYM2413,\n>>0x2C\tulelong\t\t>0\tYM2612,\n>>0x30\tulelong\t\t>0\tYM2151,\n>>0x38\tulelong\t\t>0\tSega PCM,\n>>0x34\tulelong\t\t>0xC\n>>>0x40\tulelong\t\t>0\tRF5C68,\n>>0x34\tulelong\t\t>0x10\n>>>0x44\tulelong\t\t>0\tYM2203,\n>>0x34\tulelong\t\t>0x14\n>>>0x48\tulelong\t\t>0\tYM2608,\n>>0x34\tulelong\t\t>0x18\n>>>0x4C\tlelong\t\t>0\tYM2610,\n>>>0x4C\tlelong\t\t<0\tYM2610B,\n>>0x34\tulelong\t\t>0x1C\n>>>0x50\tulelong\t\t>0\tYM3812,\n>>0x34\tulelong\t\t>0x20\n>>>0x54\tulelong\t\t>0\tYM3526,\n>>0x34\tulelong\t\t>0x24\n>>>0x58\tulelong\t\t>0\tY8950,\n>>0x34\tulelong\t\t>0x28\n>>>0x5C\tulelong\t\t>0\tYMF262,\n>>0x34\tulelong\t\t>0x2C\n>>>0x60\tulelong\t\t>0\tYMF278B,\n>>0x34\tulelong\t\t>0x30\n>>>0x64\tulelong\t\t>0\tYMF271,\n>>0x34\tulelong\t\t>0x34\n>>>0x68\tulelong\t\t>0\tYMZ280B,\n>>0x34\tulelong\t\t>0x38\n>>>0x6C\tulelong\t\t>0\tRF5C164,\n>>0x34\tulelong\t\t>0x3C\n>>>0x70\tulelong\t\t>0\tPWM,\n>>0x34\tulelong\t\t>0x40\n>>>0x74\tulelong\t\t>0\n>>>>0x78 ubyte\t\t0x00\tAY-3-8910,\n>>>>0x78 ubyte\t\t0x01\tAY-3-8912,\n>>>>0x78 ubyte\t\t0x02\tAY-3-8913,\n>>>>0x78 ubyte\t\t0x03\tAY-3-8930,\n>>>>0x78 ubyte\t\t0x10\tYM2149,\n>>>>0x78 ubyte\t\t0x11\tYM3439,\n\n# GVOX Encore file format\n# Since this is a proprietary file format and there is no publicly available\n# format specification, this is just based on induction\n#\n0\tstring\tSCOW\n>4\tbyte\t0xc4\tGVOX Encore music, version 5.0 or above\n>4\tbyte\t0xc2\tGVOX Encore music, version < 5.0\n\n0\tstring\tZBOT\n>4\tbyte\t0xc5\tGVOX Encore music, version < 5.0\n\n\n#----------------------------------------------------------------\n# $File$\n# basis: file(1) magic for BBx/Pro5-files\n#      Oliver Dammer <dammer@olida.de>\t 2005/11/07\n# http://www.basis.com business-basic-files.\n#\n0\tstring\t\t\\074\\074bbx\\076\\076\tBBx\n>7\tstring\t\t\\000\t\t\tindexed file\n>7\tstring\t\t\\001\t\t\tserial file\n>7\tstring\t\t\\002\t\t\tkeyed file\n>>13\tshort\t\t0\t\t\t(sort)\n>7\tstring\t\t\\004\t\t\tprogram\n>>18\tbyte\t\tx\t\t\t(LEVEL %d)\n>>>23\tstring\t\t>\\000\t\t\tpsaved\n>7\tstring\t\t\\006\t\t\tmkeyed file\n>>13\tshort\t\t0\t\t\t(sort)\n>>8\tstring\t\t\\000\t\t\t(mkey)\n\n#------------------------------------------------------------------------------\n# $File: bflt,v 1.4 2009/09/19 16:28:08 christos Exp $\n# bFLT: file(1) magic for BFLT uclinux binary files\n#\n# From Philippe De Muyter <phdm@macqel.be>\n#\n0\tstring\t\tbFLT\t\tBFLT executable\n>4\tbelong\t\tx\t\t- version %d\n>4\tbelong\t\t4\n>>36\tbelong&0x1\t0x1\t\tram\n>>36\tbelong&0x2\t0x2\t\tgotpic\n>>36\tbelong&0x4\t0x4\t\tgzip\n>>36\tbelong&0x8\t0x8\t\tgzdata\n\n#------------------------------------------------------------------------------\n# $File: apple,v 1.27 2013/03/09 22:36:00 christos Exp $\n# blackberry:  file(1) magic for BlackBerry file formats\n#\n5\tbelong\t0\t\t\n>8\tbelong  010010010\tBlackBerry RIM ETP file\n>>22\tstring\tx\t\t\\b for %s\n# Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files\n# http://ftg.lbl.gov/checkpoint\n0\tstring\tC\\0\\0\\0R\\0\\0\\0\tBLCR\n>16\tlelong\t1\tx86\n>16\tlelong\t3\talpha\n>16\tlelong\t5\tx86-64\n>16\tlelong\t7\tARM\n>8\tlelong\tx\tcontext data (little endian, version %d)\n# Uncomment the following only of your \"file\" program supports \"search\"\n#>0\tsearch/1024\tVMA\\06\tfor kernel\n#>>&1\tbyte\tx\t%d.\n#>>&2\tbyte\tx\t\b%d.\n#>>&3\tbyte\tx\t\b%d\n0\tstring\t\\0\\0\\0C\\0\\0\\0R\tBLCR\n>16\tbelong\t2\tSPARC\n>16\tbelong\t4\tppc\n>16\tbelong\t6\tppc64\n>16\tbelong\t7\tARMEB\n>16\tbelong\t8\tSPARC64\n>8\tbelong\tx\tcontext data (big endian, version %d)\n# Uncomment the following only of your \"file\" program supports \"search\"\n#>0\tsearch/1024\tVMA\\06\tfor kernel\n#>>&1\tbyte\tx\t%d.\n#>>&2\tbyte\tx\t\\b%d.\n#>>&3\tbyte\tx\t\\b%d\n\n#------------------------------------------------------------------------------\n# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $\n# blender: file(1) magic for Blender 3D related files\n#\n# Native format rule v1.2. For questions use the developers list \n# http://lists.blender.org/mailman/listinfo/bf-committers\n# GLOB chunk was moved near start and provides subversion info since 2.42 \n\n0\t\tstring\t=BLENDER\tBlender3D,\n>7\t\tstring\t=_\t\tsaved as 32-bits\n>>8\t\tstring\t=v\t\tlittle endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x40\t\tstring\t=GLOB\t\t\\b.\n>>>>0x58\tleshort\tx\t\t\\b%.4d\n>>8\t\tstring\t=V\t\tbig endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x40\t\tstring\t=GLOB\t\t\\b.\n>>>>0x58\tbeshort\tx\t\t\\b%.4d\n>7\t\tstring\t=-\t\tsaved as 64-bits\n>>8\t\tstring\t=v\t\tlittle endian\n>>9\t\tbyte\tx\t\twith version %c.\n>>10\t\tbyte\tx\t\t\\b%c\n>>11\t\tbyte\tx\t\t\\b%c\n>>0x44\t\tstring\t=GLOB\t\t\\b.\n>>>0x60\t\tleshort\tx\t\t\\b%.4d\n>>8\t\tstring\t=V\t\tbig endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x44\t\tstring\t=GLOB\t\t\\b.\n>>>>0x60\tbeshort\tx\t\t\\b%.4d\n\n# Scripts that run in the embedded Python interpreter\n0\t\tstring\t#!BPY\t\tBlender3D BPython script\n\n#------------------------------------------------------------------------------\n# $File$\n# blit:  file(1) magic for 68K Blit stuff as seen from 680x0 machine\n#\n# Note that this 0407 conflicts with several other a.out formats...\n#\n# XXX - should this be redone with \"be\" and \"le\", so that it works on\n# little-endian machines as well?  If so, what's the deal with\n# \"VAX-order\" and \"VAX-order2\"?\n#\n#0\tlong\t\t0407\t\t68K Blit (standalone) executable\n#0\tshort\t\t0407\t\tVAX-order2 68K Blit (standalone) executable\n0\tshort\t\t03401\t\tVAX-order 68K Blit (standalone) executable\n0\tlong\t\t0406\t\t68k Blit mpx/mux executable\n0\tshort\t\t0406\t\tVAX-order2 68k Blit mpx/mux executable\n0\tshort\t\t03001\t\tVAX-order 68k Blit mpx/mux executable\n# Need more values for WE32 DMD executables.\n# Note that 0520 is the same as COFF\n#0\tshort\t\t0520\t\ttty630 layers executable\n\n#------------------------------------------------------------------------------\n# $File$\n# i80960 b.out objects and archives\n#\n0\tlong\t\t0x10d\t\ti960 b.out relocatable object\n>16\tlong\t\t>0\t\tnot stripped\n#\n# b.out archive (hp-rt on i960)\n0\tstring\t\t=!<bout>\tb.out archive\n>8\tstring\t\t__.SYMDEF\trandom library\n\n#------------------------------------------------------------------------------\n# $File: bsdi,v 1.6 2013/01/09 22:37:24 christos Exp $\n# bsdi:  file(1) magic for BSD/OS (from BSDI) objects\n# Some object/executable formats use the same magic numbers as are used\n# in other OSes; those are handled by entries in aout.\n#\n\n0\tlelong\t\t0314\t\t386 compact demand paged pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses shared libs)\n\n# same as in SunOS 4.x, except for static shared libraries\n0\tbelong&077777777\t0600413\t\tSPARC demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n\n0\tbelong&077777777\t0600410\t\tSPARC pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n\n0\tbelong&077777777\t0600407\t\tSPARC\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n# Chiasmus is a encryption standard developed by the German Federal\n# Office for Information Security (Bundesamt fuer Sicherheit in der\n# Informationstechnik).\n\n# Extension: .xia\n0\tstring\tXIA1\tChiasmus encrypted data\n\n# Extension: .xis\n0\tstring\tXIS\tChiasmus key\n\n#------------------------------------------------------------------------------\n# $File$\n# BTSnoop:  file(1) magic for BTSnoop files\n#\n# From <marcel@holtmann.org>\n0\tstring\t\tbtsnoop\\0\t\tBTSnoop\n>8\tbelong\t\tx\t\t\tversion %d,\n>12\tbelong\t\t1001\t\t\tUnencapsulated HCI\n>12\tbelong\t\t1002\t\t\tHCI UART (H4)\n>12\tbelong\t\t1003\t\t\tHCI BCSP\n>12\tbelong\t\t1004\t\t\tHCI Serial (H5)\n>>12\tbelong\t\tx\t\t\ttype %d\n\n#------------------------------------------------------------------------------\n# $File$\n# c64:  file(1) magic for various commodore 64 related files\n#\n# From: Dirk Jagdmann <doj@cubic.org>\n\n0x16500\tbelong\t\t0x12014100\tD64 Image\n0x16500\tbelong\t\t0x12014180\tD71 Image\n0x61800 belong\t\t0x28034400\tD81 Image\n0\tstring\t\tC64\\40CARTRIDGE\tCCS C64 Emultar Cartridge Image\n0\tbelong\t\t0x43154164\tX64 Image\n\n0\tstring\t\tGCR-1541\tGCR Image\n>8\tbyte\t\tx\t\tversion: %i\n>9\tbyte\t\tx\t\ttracks: %i\n\n9\tstring\t\tPSUR\t\tARC archive (c64)\n2\tstring\t\t-LH1-\t\tLHA archive (c64)\n\n0\tstring\t\tC64File\t\tPC64 Emulator file\n>8\tstring\t\t>\\0\t\t\"%s\"\n0\tstring\t\tC64Image\tPC64 Freezer Image\n\n0\tbeshort\t\t0x38CD\t\tC64 PCLink Image\n0\tstring\t\tCBM\\144\\0\\0\tPower 64 C64 Emulator Snapshot\n\n0\tbelong\t\t0xFF424CFF\tWRAptor packer (c64)\n\n0\tstring\t\tC64S\\x20tape\\x20file\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n0\tstring\t\tC64\\x20tape\\x20image\\x20file\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n0\tstring\t\tC64S\\x20tape\\x20image\\x20file\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n#------------------------------------------------------------------------------\n# $File: cad,v 1.12 2013/07/04 15:24:37 christos Exp $\n# autocad:  file(1) magic for cad files\n#\n\n# Microstation DGN/CIT Files (www.bentley.com)\n# Last updated July 29, 2005 by Lester Hightower\n# DGN is the default file extension of Microstation/Intergraph CAD files.\n# CIT is the proprietary raster format (similar to TIFF) used to attach\n# raster underlays to Microstation DGN (vector) drawings.\n# \n# http://www.wotsit.org/search.asp\n# http://filext.com/detaillist.php?extdetail=DGN\n# http://filext.com/detaillist.php?extdetail=CIT\n#\n# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2\n# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928\n# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682\n# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F\n0\tstring\t\\010\\011\\376\t\t\tMicrostation\n>3\tstring\t\\002\n>>30\tstring\t\\026\\105\t\t\tDGNFile\n>>30\tstring\t\\034\\105\t\t\tDGNFile\n>>30\tstring\t\\073\\107\t\t\tDGNFile\n>>30\tstring\t\\073\\110\t\t\tDGNFile\n>>30\tstring\t\\106\\107\t\t\tDGNFile\n>>30\tstring\t\\110\\103\t\t\tDGNFile\n>>30\tstring\t\\120\\104\t\t\tDGNFile\n>>30\tstring\t\\172\\104\t\t\tDGNFile\n>>30\tstring\t\\172\\105\t\t\tDGNFile\n>>30\tstring\t\\172\\106\t\t\tDGNFile\n>>30\tstring\t\\234\\106\t\t\tDGNFile\n>>30\tstring\t\\273\\105\t\t\tDGNFile\n>>30\tstring\t\\306\\106\t\t\tDGNFile\n>>30\tstring\t\\310\\104\t\t\tDGNFile\n>>30\tstring\t\\341\\104\t\t\tDGNFile\n>>30\tstring\t\\372\\103\t\t\tDGNFile\n>>30\tstring\t\\372\\104\t\t\tDGNFile\n>>30\tstring\t\\372\\106\t\t\tDGNFile\n>>30\tstring\t\\376\\103\t\t\tDGNFile\n>4\tstring\t\\030\\000\\000\t\t\tCITFile\n>4\tstring\t\\030\\000\\003\t\t\tCITFile\n\n# AutoCAD \n# Merge of the different contributions and updates from http://en.wikipedia.org/wiki/Dwg\n# and http://www.iana.org/assignments/media-types/image/vnd.dwg\n0\tstring\tMC0.0\tDWG AutoDesk AutoCAD Release 1.0\n!:mime image/vnd.dwg\n0\tstring\tAC1.2\tDWG AutoDesk AutoCAD Release 1.2\n!:mime image/vnd.dwg\n0\tstring\tAC1.3\tDWG AutoDesk AutoCAD Release 1.3\n!:mime image/vnd.dwg\n0\tstring\tAC1.40\tDWG AutoDesk AutoCAD Release 1.40\n!:mime image/vnd.dwg\n0\tstring\tAC1.50\tDWG AutoDesk AutoCAD Release 2.05\n!:mime image/vnd.dwg\n0\tstring\tAC2.10\tDWG AutoDesk AutoCAD Release 2.10\n!:mime image/vnd.dwg\n0\tstring\tAC2.21\tDWG AutoDesk AutoCAD Release 2.21\n!:mime image/vnd.dwg\n0\tstring\tAC2.22\tDWG AutoDesk AutoCAD Release 2.22\n!:mime image/vnd.dwg\n0\tstring\tAC1001\tDWG AutoDesk AutoCAD Release 2.22\n!:mime image/vnd.dwg\n0\tstring\tAC1002\tDWG AutoDesk AutoCAD Release 2.50\n!:mime image/vnd.dwg\n0\tstring\tAC1003\tDWG AutoDesk AutoCAD Release 2.60\n!:mime image/vnd.dwg\n0\tstring\tAC1004\tDWG AutoDesk AutoCAD Release 9\n!:mime image/vnd.dwg\n0\tstring\tAC1006\tDWG AutoDesk AutoCAD Release 10\n!:mime image/vnd.dwg\n0\tstring\tAC1009\tDWG AutoDesk AutoCAD Release 11/12\n!:mime image/vnd.dwg\n# AutoCAD DWG versions R13/R14 (www.autodesk.com)\n# Written December 01, 2003 by Lester Hightower\n# Based on the DWG File Format Specifications at http://www.opendwg.org/\n# AutoCad, from Nahuel Greco\n# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)\n0\tstring\tAC1012\tDWG AutoDesk AutoCAD Release 13\n!:mime image/vnd.dwg\n0\tstring\tAC1014\tDWG AutoDesk AutoCAD Release 14\n!:mime image/vnd.dwg\n0\tstring\tAC1015\tDWG AutoDesk AutoCAD 2000/2002\n!:mime image/vnd.dwg\n\n# A new version of AutoCAD DWG\n# Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru,\n# ICQ 358572321)\n# From various sources like:\n# http://autodesk.blogs.com/between_the_lines/autocad-release-history.html\n0\tstring\tAC1018\tDWG AutoDesk AutoCAD 2004/2005/2006\n!:mime image/vnd.dwg\n0\tstring\tAC1021\tDWG AutoDesk AutoCAD 2007/2008/2009\n!:mime image/vnd.dwg\n0\tstring\tAC1024\tDWG AutoDesk AutoCAD 2010/2011/2012\n!:mime image/vnd.dwg\n0\tstring\tAC1027\tDWG AutoDesk AutoCAD 2013/2014\n!:mime image/vnd.dwg\n\n# KOMPAS 2D drawing from ASCON \n# This is KOMPAS 2D drawing or fragment of drawing but is not detailed nor\n# gathered nor specification\n# ASCON http://ascon.net/main/ in English,\n#\thttp://ascon.ru/ main site in Russian\n# Extension is CDW for drawing and FRW for fragment of drawing \n# Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru,\n# ICQ 358572321, http://vkontakte.ru/id16076543)\n# From:\n# http://sd.ascon.ru/otrs/customer.pl?Action=CustomerFAQ&CategoryID=4&ItemID=292\n# (in russian) and my experiments\n0\tstring\tKF\n>2\tbelong\t0x4E00000C\tKompas drawing 12.0 SP1 \n>2\tbelong\t0x4D00000C\tKompas drawing 12.0 \n>2\tbelong\t0x3200000B\tKompas drawing 11.0 SP1 \n>2\tbelong\t0x3100000B\tKompas drawing 11.0 \n>2\tbelong\t0x2310000A\tKompas drawing 10.0 SP1 \n>2\tbelong\t0x2110000A\tKompas drawing 10.0 \n>2\tbelong\t0x08000009\tKompas drawing 9.0 SP1 \n>2\tbelong\t0x05000009\tKompas drawing 9.0 \n>2\tbelong\t0x33010008\tKompas drawing 8+ \n>2\tbelong\t0x1A000008\tKompas drawing 8.0 \n>2\tbelong\t0x2C010107\tKompas drawing 7+ \n>2\tbelong\t0x05000007\tKompas drawing 7.0 \n>2\tbelong\t0x32000006\tKompas drawing 6+ \n>2\tbelong\t0x09000006\tKompas drawing 6.0 \n>2\tbelong\t0x5C009005\tKompas drawing 5.11R03 \n>2\tbelong\t0x54009005\tKompas drawing 5.11R02 \n>2\tbelong\t0x51009005\tKompas drawing 5.11R01 \n>2\tbelong\t0x22009005\tKompas drawing 5.10R03 \n>2\tbelong\t0x22009005\tKompas drawing 5.10R02 mar \n>2\tbelong\t0x21009005\tKompas drawing 5.10R02 febr \n>2\tbelong\t0x19009005\tKompas drawing 5.10R01 \n>2\tbelong\t0xF4008005\tKompas drawing 5.9R01.003 \n>2\tbelong\t0x1C008005\tKompas drawing 5.9R01.002 \n>2\tbelong\t0x11008005\tKompas drawing 5.8R01.003 \n\n# CAD: file(1) magic for computer aided design files\n# Phillip Griffith <phillip dot griffith at gmail dot com>\n# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.\n#\n0\tbelong\t0x08051700\tBentley/Intergraph MicroStation DGN cell library\n0\tbelong\t0x0809fe02\tBentley/Intergraph MicroStation DGN vector CAD\n0\tbelong\t0xc809fe02\tBentley/Intergraph MicroStation DGN vector CAD\n0\tbeshort\t0x0809\t\tBentley/Intergraph MicroStation\n>0x02\tbyte\t0xfe\n>>0x04\tbeshort\t0x1800\t\tCIT raster CAD\n\n# 3DS (3d Studio files) Conflicts with diff output 0x3d '='\n#16\tbeshort\t\t0x3d3d\t\timage/x-3ds\n\n# MegaCAD 2D/3D drawing (.prt)\n# http://megacad.de/\n# From: Markus Heidelberg <markus.heidelberg@web.de>\n0\tstring\tMegaCad23\\0\tMegaCAD 2D/3D drawing\n\n#------------------------------------------------------------------------------\n# $File: cafebabe,v 1.17 2015/01/01 17:07:00 christos Exp $\n# Cafe Babes unite!\n#\n# Since Java bytecode and Mach-O universal binaries have the same magic number,\n# the test must be performed in the same \"magic\" sequence to get both right.\n# The long at offset 4 in a Mach-O universal binary tells the number of\n# architectures; the short at offset 4 in a Java bytecode file is the JVM minor\n# version and the short at offset 6 is the JVM major version.  Since there are only \n# only 18 labeled Mach-O architectures at current, and the first released \n# Java class format was version 43.0, we can safely choose any number\n# between 18 and 39 to test the number of architectures against\n# (and use as a hack). Let's not use 18, because the Mach-O people\n# might add another one or two as time goes by...\n#\n### JAVA START ###\n0\tbelong\t\t0xcafebabe\n>4\tbelong\t\t>30\t\tcompiled Java class data,\n!:mime\tapplication/x-java-applet\n>>6\tbeshort\t\tx\t        version %d.\n>>4\tbeshort\t\tx       \t\\b%d\n# Which is which?\n#>>4\tbelong\t\t0x032d\t\t(Java 1.0)\n#>>4\tbelong\t\t0x032d\t\t(Java 1.1)\n>>4\tbelong\t\t0x002e\t\t(Java 1.2)\n>>4\tbelong\t\t0x002f\t\t(Java 1.3)\n>>4\tbelong\t\t0x0030\t\t(Java 1.4)\n>>4\tbelong\t\t0x0031\t\t(Java 1.5)\n>>4\tbelong\t\t0x0032\t\t(Java 1.6)\n>>4\tbelong\t\t0x0033\t\t(Java 1.7)\n>>4\tbelong\t\t0x0034\t\t(Java 1.8)\n\n0\tbelong\t\t0xcafed00d\tJAR compressed with pack200,\n>5\tbyte\t\tx\t\tversion %d.\n>4\tbyte\t\tx\t\t\\b%d\n!:mime\tapplication/x-java-pack200\n\n\n0\tbelong\t\t0xcafed00d\tJAR compressed with pack200,\n>5\tbyte\t\tx\t\tversion %d.\n>4\tbyte\t\tx\t\t\\b%d\n!:mime\tapplication/x-java-pack200\n\n### JAVA END ###\n### MACH-O START ###\n\n0\tname\t\tmach-o\t\t\\b [\n>0\tuse\t\tmach-o-cpu\t\\b\n>(8.L)\tindirect\t\t\t\\b: \n>0\tbelong\t\tx\t\t\\b]\n\n0\tbelong\t\t0xcafebabe\n>4\tbelong\t\t1\t\tMach-O universal binary with 1 architecture:\n>>8\tuse\t\tmach-o\t\t\\b\n>4\tbelong\t\t>1\n>>4\tbelong\t\t<20\t\tMach-O universal binary with %d architectures:\n>>>8\tuse\t\tmach-o\t\t\\b\n>>>28\tuse\t\tmach-o\t\t\\b\n>>4\tbelong\t\t>2\n>>>48\tuse\t\tmach-o\t\t\\b\n>>4\tbelong\t\t>3\n>>>68\tuse\t\tmach-o\t\t\\b\n\n### MACH-O END ###\n\n#------------------------------------------------------------------------------\n# $File: elf,v 1.68 2014/09/19 19:05:57 christos Exp $\n# cbor:  file(1) magic for CBOR files as defined in RFC 7049\n\n0\tstring\t\\xd9\\xd9\\xf7 Concise Binary Object Representation (CBOR) container\n!:mime\tapplication/cbor\n>3\tubyte\t<0x20\t(positive integer)\n>3\tubyte\t<0x40\n>>3\tubyte\t>0x1f\t(negative integer)\n>3\tubyte\t<0x60\n>>3\tubyte\t>0x3f\t(byte string)\n>3\tubyte\t<0x80\n>>3\tubyte\t>0x5f\t(text string)\n>3\tubyte\t<0xa0\n>3\tubyte\t>0x7f\t(array)\n>3\tubyte\t<0xc0\n>>3\tubyte\t>0x9f\t(map)\n>3\tubyte\t<0xe0\n>>3\tubyte\t>0xbf\t(tagged)\n>3\tubyte\t>0xdf\t(other)\n\n#------------------------------------------------------------------------------\n# $File$\n# CDDB: file(1) magic for CDDB(tm) format CD text data files\n#\n# From <steve@gracenote.com>\n#\n# This is the /etc/magic entry to decode datafiles as used by\n# CDDB-enabled CD player applications.\n#\n\n0\tsearch/1/w\t#\\040xmcd\tCDDB(tm) format CD text data\n\n#------------------------------------------------------------------------------\n# $File: chord,v 1.4 2009/09/19 16:28:08 christos Exp $\n# chord: file(1) magic for Chord music sheet typesetting utility input files\n#\n# From Philippe De Muyter <phdm@macqel.be>\n# File format is actually free, but many distributed files begin with `{title'\n#\n0\tstring\t\t{title\t\tChord text file\n\n# Type:\tPowerTab file format\n# URL:\thttp://www.power-tab.net/\n# From:\tJelmer Vernooij <jelmer@samba.org>\n0\tstring\t\tptab\\003\\000\tPower-Tab v3 Tablature File\n0\tstring\t\tptab\\004\\000\tPower-Tab v4 Tablature File\n\n#------------------------------------------------------------------------------\n# $File$\n# cisco:  file(1) magic for cisco Systems routers\n#\n# Most cisco file-formats are covered by the generic elf code\n#\n# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.\n0\tbelong&0xffffff00\t0x85011400  cisco IOS microcode\n>7\tstring\t\t>\\0\t\t    for '%s'\n0\tbelong&0xffffff00\t0x8501cb00  cisco IOS experimental microcode\n>7\tstring\t\t>\\0\t\t    for '%s'\n\n#------------------------------------------------------------------------------\n# $File$\n# citrus locale declaration\n#\n\n0\tstring\t\tRuneCT\t\tCitrus locale declaration for LC_CTYPE\n\n#------------------------------------------------------------------------------\n# $File: c-lang,v 1.18 2013/08/14 13:06:43 christos Exp $\n# c-lang:  file(1) magic for C and related languages programs\n#\n\n# BCPL\n0\tsearch/8192\t\"libhdr\"\tBCPL source text\n!:mime\ttext/x-bcpl\n0\tsearch/8192\t\"LIBHDR\"\tBCPL source text\n!:mime\ttext/x-bcpl\n\n# C\n0\tregex\t\\^#include\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^char[\\ \\t\\n]+\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^double[\\ \\t\\n]+\t\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^extern[\\ \\t\\n]+\t\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^float[\\ \\t\\n]+\t\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^struct[\\ \\t\\n]+\t\tC source text\n!:mime\ttext/x-c\n0\tregex\t\\^union[\\ \\t\\n]+\t\tC source text\n!:mime\ttext/x-c\n0\tsearch/8192\tmain(\t\tC source text\n!:mime\ttext/x-c\n\n# C++\n# The strength of these rules is increased so they beat the C rules above\n0\tregex\t\\^template[\\ \\t\\n]+\tC++ source text\n!:strength + 5\n!:mime\ttext/x-c++\n0\tregex\t\\^virtual[\\ \\t\\n]+\t\tC++ source text\n!:strength + 5\n!:mime\ttext/x-c++\n0\tregex\t\\^class[\\ \\t\\n]+\t\tC++ source text\n!:strength + 5\n!:mime\ttext/x-c++\n0\tregex\t\\^public:\t\tC++ source text\n!:strength + 5\n!:mime\ttext/x-c++\n0\tregex\t\\^private:\t\tC++ source text\n!:strength + 5\n!:mime\ttext/x-c++\n\n# From: Mikhail Teterin <mi@aldan.algebra.com> \n0\tstring\t\tcscope\t\tcscope reference data\n>7\tstring\t\tx\t\tversion %.2s\n# We skip the path here, because it is often long (so file will\n# truncate it) and mostly redundant.\n# The inverted index functionality was added some time between\n# versions 11 and 15, so look for -q if version is above 14:\n>7\tstring\t\t>14\n>>10\tsearch/100\t\\ -q\\ \t\twith inverted index\n>10\tsearch/100\t\\ -c\\ \t\ttext (non-compressed)\n\n#------------------------------------------------------------------------------\n# $File: clarion,v 1.4 2009/09/19 16:28:08 christos Exp $\n# clarion:  file(1) magic for # Clarion Personal/Professional Developer\n# (v2 and above)\n# From: Julien Blache <jb@jblache.org>\n\n# Database files\n# signature\n0\tleshort\t0x3343\tClarion Developer (v2 and above) data file\n# attributes\n>2\tleshort\t&0x0001\t\\b, locked\n>2\tleshort\t&0x0004\t\\b, encrypted\n>2\tleshort\t&0x0008\t\\b, memo file exists\n>2\tleshort\t&0x0010\t\\b, compressed\n>2\tleshort\t&0x0040\t\\b, read only\n# number of records\n>5\tlelong\tx\t\\b, %d records\n\n# Memo files\n0\tleshort\t0x334d\tClarion Developer (v2 and above) memo data\n\n# Key/Index files\n# No magic? :(\n\n# Help files\n0\tleshort\t0x49e0\tClarion Developer (v2 and above) help data\n\n#------------------------------------------------------------------------------\n# $File: claris,v 1.6 2012/06/20 21:19:05 christos Exp $\n# claris:  file(1) magic for claris\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Claris Works a word processor, etc.\n# Version 3.0\n\n# .pct claris works clip art files\n#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000\n#*\n#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000\n#null to byte 1000 octal\n514\tstring\t\\377\\377\\377\\377\\000\n>0\tstring\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tClaris clip art\n514\tstring\t\\377\\377\\377\\377\\001\n>0\tstring\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tClaris clip art\n\n# Claris works files\n# .cwk\n0\tstring\t\\002\\000\\210\\003\\102\\117\\102\\117\\000\\001\\206 Claris works document\n# .plt\n0\tstring\t\\020\\341\\000\\000\\010\\010\tClaris Works palette files .plt\n\n# .msp a dictionary file I am not sure about this I have only one .msp file\n0\tstring\t\\002\\271\\262\\000\\040\\002\\000\\164\tClaris works dictionary\n\n# .usp are user dictionary bits\n# I am not sure about a magic header:\n#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151\n#        soh   S   p   f   8   U   D  sp   ^   S  cr  nl   p   o   d   i\n#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043\n#          a   t   r   i   s   t  sp   ^   S  cr  nl   d   i   v  sp   #\n\n# .mth Thesaurus\n# starts with \\0 but no magic header\n\n# .chy Hyphenation file\n# I am not sure: 000 210 034 000 000\n\n# other claris files\n#./windows/claris/useng.ndx: data\n#./windows/claris/xtndtran.l32: data\n#./windows/claris/xtndtran.lst: data\n#./windows/claris/clworks.lbl: data\n#./windows/claris/clworks.prf: data\n#./windows/claris/userd.spl: data\n\n#------------------------------------------------------------------------------\n# $File: clipper,v 1.6 2009/09/19 16:28:08 christos Exp $\n# clipper:  file(1) magic for Intergraph (formerly Fairchild) Clipper.\n#\n# XXX - what byte order does the Clipper use?\n#\n# XXX - what's the \"!\" stuff:\n#\n# >18\tshort\t\t!074000,000000\tC1 R1 \n# >18\tshort\t\t!074000,004000\tC2 R1\n# >18\tshort\t\t!074000,010000\tC3 R1\n# >18\tshort\t\t!074000,074000\tTEST\n#\n# I shall assume it's ANDing the field with the first value and\n# comparing it with the second, and rewrite it as:\n#\n# >18\tshort&074000\t000000\t\tC1 R1 \n# >18\tshort&074000\t004000\t\tC2 R1\n# >18\tshort&074000\t010000\t\tC3 R1\n# >18\tshort&074000\t074000\t\tTEST\n#\n# as SVR3.1's \"file\" doesn't support anything of the \"!074000,000000\"\n# sort, nor does SunOS 4.x, so either it's something Intergraph added\n# in CLIX, or something AT&T added in SVR3.2 or later, or something\n# somebody else thought was a good idea; it's not documented in the\n# man page for this version of \"magic\", nor does it appear to be\n# implemented (at least not after I blew off the bogus code to turn\n# old-style \"&\"s into new-style \"&\"s, which just didn't work at all).\n#\n0\tshort\t\t0575\t\tCLIPPER COFF executable (VAX #)\n>20\tshort\t\t0407\t\t(impure)\n>20\tshort\t\t0410\t\t(5.2 compatible)\n>20\tshort\t\t0411\t\t(pure)\n>20\tshort\t\t0413\t\t(demand paged)\n>20\tshort\t\t0443\t\t(target shared library)\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %d\n0\tshort\t\t0577\t\tCLIPPER COFF executable\n>18\tshort&074000\t000000\t\tC1 R1 \n>18\tshort&074000\t004000\t\tC2 R1\n>18\tshort&074000\t010000\t\tC3 R1\n>18\tshort&074000\t074000\t\tTEST\n>20\tshort\t\t0407\t\t(impure)\n>20\tshort\t\t0410\t\t(pure)\n>20\tshort\t\t0411\t\t(separate I&D)\n>20\tshort\t\t0413\t\t(paged)\n>20\tshort\t\t0443\t\t(target shared library)\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %d\n>48\tlong&01\t\t01\t\talignment trap enabled\n>52\tbyte\t\t1\t\t-Ctnc\n>52\tbyte\t\t2\t\t-Ctsw\n>52\tbyte\t\t3\t\t-Ctpw\n>52\tbyte\t\t4\t\t-Ctcb\n>53\tbyte\t\t1\t\t-Cdnc\n>53\tbyte\t\t2\t\t-Cdsw\n>53\tbyte\t\t3\t\t-Cdpw\n>53\tbyte\t\t4\t\t-Cdcb\n>54\tbyte\t\t1\t\t-Csnc\n>54\tbyte\t\t2\t\t-Cssw\n>54\tbyte\t\t3\t\t-Cspw\n>54\tbyte\t\t4\t\t-Cscb\n4\tstring\t\tpipe\t\tCLIPPER instruction trace\n4\tstring\t\tprof\t\tCLIPPER instruction profile\n\n#------------------------------------------------------------------------------\n# $File: commands,v 1.50 2014/05/30 16:48:44 christos Exp $\n# commands:  file(1) magic for various shells and interpreters\n#\n#0\tstring/w\t:\t\t\tshell archive or script for antique kernel text\n0\tstring/wt\t#!\\ /bin/sh\t\tPOSIX shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /bin/sh\t\tPOSIX shell script executable (binary data)\n!:mime\ttext/x-shellscript\n\n0\tstring/wt\t#!\\ /bin/csh\t\tC shell script text executable\n!:mime\ttext/x-shellscript\n\n# korn shell magic, sent by George Wu, gwu@clyde.att.com\n0\tstring/wt\t#!\\ /bin/ksh\t\tKorn shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /bin/ksh\t\tKorn shell script executable (binary data)\n!:mime\ttext/x-shellscript\n\n0\tstring/wt \t#!\\ /bin/tcsh\t\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/bin/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt \t#!\\ /usr/local/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bin/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n\n#\n# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)\n0\tstring/wt\t#!\\ /bin/zsh\t\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/bin/zsh\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bin/zsh\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bin/ash\tNeil Brown's ash script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bin/ae\tNeil Brown's ae script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /bin/nawk\t\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/wt\t#!\\ /usr/bin/nawk\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/wt\t#!\\ /usr/local/bin/nawk\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/wt\t#!\\ /bin/gawk\t\tGNU awk script text executable\n!:mime\ttext/x-gawk\n0\tstring/wt\t#!\\ /usr/bin/gawk\tGNU awk script text executable\n!:mime\ttext/x-gawk\n0\tstring/wt\t#!\\ /usr/local/bin/gawk\tGNU awk script text executable\n!:mime\ttext/x-gawk\n#\n0\tstring/wt\t#!\\ /bin/awk\t\tawk script text executable\n!:mime\ttext/x-awk\n0\tstring/wt\t#!\\ /usr/bin/awk\tawk script text executable\n!:mime\ttext/x-awk\n0\tregex/4096\t=^\\\\s{0,100}BEGIN\\\\s{0,100}[{]\tawk or perl script text\n\n# AT&T Bell Labs' Plan 9 shell\n0\tstring/wt\t#!\\ /bin/rc\tPlan 9 rc shell script text executable\n\n# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)\n0\tstring/wt\t#!\\ /bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /bin/bash\tBourne-Again shell script executable (binary data)\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /usr/bin/bash\tBourne-Again shell script executable (binary data)\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /usr/local/bash\tBourne-Again shell script executable (binary data)\n!:mime\ttext/x-shellscript\n0\tstring/wt\t#!\\ /usr/local/bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/wb\t#!\\ /usr/local/bin/bash\tBourne-Again shell script executable (binary data)\n!:mime\ttext/x-shellscript\n\n# PHP scripts\n# Ulf Harnhammar <ulfh@update.uu.se>\n0\tsearch/1/c\t=<?php\t\t\tPHP script text\n!:strength + 10\n!:mime\ttext/x-php\n0\tsearch/1\t=<?\\n\t\t\tPHP script text\n!:mime\ttext/x-php\n0\tsearch/1\t=<?\\r\t\t\tPHP script text\n!:mime\ttext/x-php\n0\tsearch/1/w\t#!\\ /usr/local/bin/php\tPHP script text executable\n!:strength + 10\n!:mime\ttext/x-php\n0\tsearch/1/w\t#!\\ /usr/bin/php\tPHP script text executable\n!:strength + 10\n!:mime\ttext/x-php\n# Smarty compiled template, http://www.smarty.net/\n# Elan Ruusamae <glen@delfi.ee>\n0\tstring\t=<?php\\ /*\\ Smarty\\ version\tSmarty compiled template\n>24\tregex\t[0-9.]+\t\t\t\t\\b, version %s\n!:mime\ttext/x-php\n\n0\tstring\t\tZend\\x00\t\tPHP script Zend Optimizer data\n\n0\tstring/t\t$!\t\t\tDCL command file\n\n# Type: Pdmenu\n# URL:  http://packages.debian.org/pdmenu\n# From: Edward Betts <edward@debian.org>\n0\tstring\t\t#!/usr/bin/pdmenu\tPdmenu configuration file text\n\n#----------------------------------------------------------------------------\n# $File$\n# communication\n\n# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.\n# It is used for conformance testing of communication protocols.\n# Added by W. Borgert <debacle@debian.org>.\n0\tstring\t\t$Suite\t\t\tTTCN Abstract Test Suite\n>&1\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n>&2\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n>&3\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n\n# MSC (message sequence charts) are a formal description technique,\n# described in ITU-T Z.120, mainly used for communication protocols.\n# Added by W. Borgert <debacle@debian.org>.\n0\tstring\t\tmscdocument\tMessage Sequence Chart (document)\n0\tstring\t\tmsc\t\tMessage Sequence Chart (chart)\n0\tstring\t\tsubmsc\t\tMessage Sequence Chart (subchart)\n#------------------------------------------------------------------------------\n# $File: compress,v 1.61 2014/09/12 20:57:45 christos Exp $\n# compress:  file(1) magic for pure-compression formats (no archives)\n#\n# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.\n#\n# Formats for various forms of compressed data\n# Formats for \"compress\" proper have been moved into \"compress.c\",\n# because it tries to uncompress it to figure out what's inside.\n\n# standard unix compress\n0\tstring\t\t\\037\\235\tcompress'd data\n!:mime\tapplication/x-compress\n!:apple\tLZIVZIVU\n>2\tbyte&0x80\t>0\t\tblock compressed\n>2\tbyte&0x1f\tx\t\t%d bits\n\n# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)\n#   Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002\n#\t* Original filename is only at offset 10 if \"extra field\" absent\n#\t* Produce shorter output - notably, only report compression methods\n#         other than 8 (\"deflate\", the only method defined in RFC 1952).\n0       string          \\037\\213        gzip compressed data\n!:mime\tapplication/x-gzip\n!:strength * 2\n>2\tbyte\t\t<8\t\t\\b, reserved method\n>2\tbyte\t\t>8\t\t\\b, unknown method\n>3\tbyte\t\t&0x01\t\t\\b, ASCII\n>3\tbyte\t\t&0x02\t\t\\b, has CRC\n>3\tbyte\t\t&0x04\t\t\\b, extra field\n>3\tbyte&0xC\t=0x08\n>>10\tstring\t\tx\t\t\\b, was \"%s\"\n>3\tbyte\t\t&0x10\t\t\\b, has comment\n>3\tbyte\t\t&0x20\t\t\\b, encrypted\n>4\tledate\t\t>0\t\t\\b, last modified: %s\n>8\tbyte\t\t2\t\t\\b, max compression\n>8\tbyte\t\t4\t\t\\b, max speed\n>9\tbyte\t\t=0x00\t\t\\b, from FAT filesystem (MS-DOS, OS/2, NT)\n>9\tbyte\t\t=0x01\t\t\\b, from Amiga\n>9\tbyte\t\t=0x02\t\t\\b, from VMS\n>9\tbyte\t\t=0x03\t\t\\b, from Unix\n>9\tbyte\t\t=0x04\t\t\\b, from VM/CMS\n>9\tbyte\t\t=0x05\t\t\\b, from Atari\n>9\tbyte\t\t=0x06\t\t\\b, from HPFS filesystem (OS/2, NT)\n>9\tbyte\t\t=0x07\t\t\\b, from MacOS\n>9\tbyte\t\t=0x08\t\t\\b, from Z-System\n>9\tbyte\t\t=0x09\t\t\\b, from CP/M\n>9\tbyte\t\t=0x0A\t\t\\b, from TOPS/20\n>9\tbyte\t\t=0x0B\t\t\\b, from NTFS filesystem (NT)\n>9\tbyte\t\t=0x0C\t\t\\b, from QDOS\n>9\tbyte\t\t=0x0D\t\t\\b, from Acorn RISCOS\n\n# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis\n0\tstring\t\t\\037\\036\tpacked data\n!:mime\tapplication/octet-stream\n>2\tbelong\t\t>1\t\t\\b, %d characters originally\n>2\tbelong\t\t=1\t\t\\b, %d character originally\n#\n# This magic number is byte-order-independent.\n0\tshort\t\t0x1f1f\t\told packed data\n!:mime\tapplication/octet-stream\n\n# XXX - why *two* entries for \"compacted data\", one of which is\n# byte-order independent, and one of which is byte-order dependent?\n#\n0\tshort\t\t0x1fff\t\tcompacted data\n!:mime\tapplication/octet-stream\n# This string is valid for SunOS (BE) and a matching \"short\" is listed\n# in the Ultrix (LE) magic file.\n0\tstring\t\t\\377\\037\tcompacted data\n!:mime\tapplication/octet-stream\n0\tshort\t\t0145405\t\thuf output\n!:mime\tapplication/octet-stream\n\n# bzip2\n0\tstring\t\tBZh\t\tbzip2 compressed data\n!:mime\tapplication/x-bzip2\n>3\tbyte\t\t>47\t\t\\b, block size = %c00k\n\n# lzip\n0\tstring\t\tLZIP\t\tlzip compressed data\n!:mime application/x-lzip\n>4\tbyte\t\tx\t\t\\b, version: %d\n\n# squeeze and crunch\n# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>\n0\tbeshort\t\t0x76FF\t\tsqueezed data,\n>4\tstring\t\tx\t\toriginal name %s\n0\tbeshort\t\t0x76FE\t\tcrunched data,\n>2\tstring\t\tx\t\toriginal name %s\n0\tbeshort\t\t0x76FD\t\tLZH compressed data,\n>2\tstring\t\tx\t\toriginal name %s\n\n# Freeze\n0\tstring\t\t\\037\\237\tfrozen file 2.1\n0\tstring\t\t\\037\\236\tfrozen file 1.0 (or gzip 0.5)\n\n# SCO compress -H (LZH)\n0\tstring\t\t\\037\\240\tSCO compress -H (LZH) data\n\n# European GSM 06.10 is a provisional standard for full-rate speech\n# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse\n# excitation/long term prediction) coding at 13 kbit/s.\n#\n# There's only a magic nibble (4 bits); that nibble repeats every 33\n# bytes.  This isn't suited for use, but maybe we can use it someday.\n#\n# This will cause very short GSM files to be declared as data and\n# mismatches to be declared as data too!\n#0\tbyte&0xF0\t0xd0\t\tdata\n#>33\tbyte&0xF0\t0xd0\n#>66\tbyte&0xF0\t0xd0\n#>99\tbyte&0xF0\t0xd0\n#>132\tbyte&0xF0\t0xd0\t\tGSM 06.10 compressed audio\n\n# bzip\ta block-sorting file compressor\n#\tby Julian Seward <sewardj@cs.man.ac.uk> and others\n#\n#0\tstring\t\tBZ\t\tbzip compressed data\n#>2\tbyte\t\tx\t\t\\b, version: %c\n#>3\tstring\t\t=1\t\t\\b, compression block size 100k\n#>3\tstring\t\t=2\t\t\\b, compression block size 200k\n#>3\tstring\t\t=3\t\t\\b, compression block size 300k\n#>3\tstring\t\t=4\t\t\\b, compression block size 400k\n#>3\tstring\t\t=5\t\t\\b, compression block size 500k\n#>3\tstring\t\t=6\t\t\\b, compression block size 600k\n#>3\tstring\t\t=7\t\t\\b, compression block size 700k\n#>3\tstring\t\t=8\t\t\\b, compression block size 800k\n#>3\tstring\t\t=9\t\t\\b, compression block size 900k\n\n# lzop from <markus.oberhumer@jk.uni-linz.ac.at>\n0\tstring\t\t\\x89\\x4c\\x5a\\x4f\\x00\\x0d\\x0a\\x1a\\x0a\tlzop compressed data\n>9\tbeshort\t\t<0x0940\n>>9\tbyte&0xf0\t=0x00\t\t- version 0.\n>>9\tbeshort&0x0fff\tx\t\t\\b%03x,\n>>13\tbyte\t\t1\t\tLZO1X-1,\n>>13\tbyte\t\t2\t\tLZO1X-1(15),\n>>13\tbyte\t\t3\t\tLZO1X-999,\n## >>22\tbedate\t\t>0\t\tlast modified: %s,\n>>14\tbyte\t\t=0x00\t\tos: MS-DOS\n>>14\tbyte\t\t=0x01\t\tos: Amiga\n>>14\tbyte\t\t=0x02\t\tos: VMS\n>>14\tbyte\t\t=0x03\t\tos: Unix\n>>14\tbyte\t\t=0x05\t\tos: Atari\n>>14\tbyte\t\t=0x06\t\tos: OS/2\n>>14\tbyte\t\t=0x07\t\tos: MacOS\n>>14\tbyte\t\t=0x0A\t\tos: Tops/20\n>>14\tbyte\t\t=0x0B\t\tos: WinNT\n>>14\tbyte\t\t=0x0E\t\tos: Win32\n>9\tbeshort\t\t>0x0939\n>>9\tbyte&0xf0\t=0x00\t\t- version 0.\n>>9\tbyte&0xf0\t=0x10\t\t- version 1.\n>>9\tbyte&0xf0\t=0x20\t\t- version 2.\n>>9\tbeshort&0x0fff\tx\t\t\\b%03x,\n>>15\tbyte\t\t1\t\tLZO1X-1,\n>>15\tbyte\t\t2\t\tLZO1X-1(15),\n>>15\tbyte\t\t3\t\tLZO1X-999,\n## >>25\tbedate\t\t>0\t\tlast modified: %s,\n>>17\tbyte\t\t=0x00\t\tos: MS-DOS\n>>17\tbyte\t\t=0x01\t\tos: Amiga\n>>17\tbyte\t\t=0x02\t\tos: VMS\n>>17\tbyte\t\t=0x03\t\tos: Unix\n>>17\tbyte\t\t=0x05\t\tos: Atari\n>>17\tbyte\t\t=0x06\t\tos: OS/2\n>>17\tbyte\t\t=0x07\t\tos: MacOS\n>>17\tbyte\t\t=0x0A\t\tos: Tops/20\n>>17\tbyte\t\t=0x0B\t\tos: WinNT\n>>17\tbyte\t\t=0x0E\t\tos: Win32\n\n# 4.3BSD-Quasijarus Strong Compression\n# http://minnie.tuhs.org/Quasijarus/compress.html\n0\tstring\t\t\\037\\241\tQuasijarus strong compressed data\n\n# From: Cory Dikkers <cdikkers@swbell.net>\n0\tstring\t\tXPKF\t\tAmiga xpkf.library compressed data\n0\tstring\t\tPP11\t\tPower Packer 1.1 compressed data\n0\tstring\t\tPP20\t\tPower Packer 2.0 compressed data,\n>4\tbelong\t\t0x09090909\tfast compression\n>4\tbelong\t\t0x090A0A0A\tmediocre compression\n>4\tbelong\t\t0x090A0B0B\tgood compression\n>4\tbelong\t\t0x090A0C0C\tvery good compression\n>4\tbelong\t\t0x090A0C0D\tbest compression\n\n# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)\n# http://www.7-zip.org or DOC/7zFormat.txt\n#\n0\tstring\t\t7z\\274\\257\\047\\034\t7-zip archive data,\n>6\tbyte\t\tx\t\t\tversion %d\n>7\tbyte\t\tx\t\t\t\\b.%d\n!:mime\tapplication/x-7z-compressed\n\n# Type: LZMA\n0\tlelong&0xffffff\t=0x5d\n>12\tleshort\t\t0xff\t\t\tLZMA compressed data,\n!:mime\tapplication/x-lzma\n>>5\tlequad\t\t=0xffffffffffffffff\tstreamed\n>>5\tlequad\t\t!0xffffffffffffffff\tnon-streamed, size %lld\n>12\tleshort\t\t0\t\t\tLZMA compressed data,\n>>5\tlequad\t\t=0xffffffffffffffff\tstreamed\n>>5\tlequad\t\t!0xffffffffffffffff\tnon-streamed, size %lld\n\n# http://tukaani.org/xz/xz-file-format.txt\n0\tustring\t\t\\xFD7zXZ\\x00\t\tXZ compressed data\n!:mime\tapplication/x-xz\n\n# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt\n0\tstring\t\tLRZI\t\t\tLRZIP compressed data\n>4\tbyte\t\tx\t\t\t- version %d\n>5\tbyte\t\tx\t\t\t\\b.%d\n!:mime\tapplication/x-lrzip\n\n# http://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html\n0\tlelong\t\t0x184d2204\tLZ4 compressed data (v1.4+)\n!:mime\tapplication/x-lz4\n# Added by osm0sis@xda-developers.com\n0 \tlelong\t\t0x184c2103\tLZ4 compressed data (v1.0-v1.3)\n!:mime\tapplication/x-lz4\n0\tlelong\t\t0x184c2102\tLZ4 compressed data (v0.1-v0.9)\n!:mime\tapplication/x-lz4\n\n# AFX compressed files (Wolfram Kleff)\n2\tstring\t\t-afx-\t\tAFX compressed file data\n\n# Supplementary magic data for the file(1) command to support\n# rzip(1).  The format is described in magic(5).\n#\n# Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with\n# this file.\n#\n0\tstring\t\tRZIP\t\trzip compressed data\n>4\tbyte\t\tx\t\t- version %d\n>5\tbyte\t\tx\t\t\\b.%d\n>6\tbelong\t\tx\t\t(%d bytes)\n\n0\tstring\t\tArC\\x01\t\tFreeArc archive <http://freearc.org>\n\n# Type:\tDACT compressed files\n0\tlong\t0x444354C3\tDACT compressed data\n>4\tbyte\t>-1\t\t(version %i.\n>5\tbyte\t>-1\t\t%i.\n>6\tbyte\t>-1\t\t%i)\n>7\tlong\t>0\t\t, original size: %i bytes\n>15\tlong\t>30\t\t, block size: %i bytes\n\n# Valve Pack (VPK) files\n0\tlelong\t0x55aa1234\tValve Pak file\n>0x4\tlelong\tx\t\t\\b, version %u\n>0x8\tlelong\tx\t\t\\b, %u entries\n\n# Snappy framing format\n# http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt\n0\tstring\t\\377\\006\\0\\0sNaPpY\tsnappy framed data\n!:mime\tapplication/x-snappy-framed\n\n# qpress, http://www.quicklz.com/\n0\tstring\tqpress10\tqpress compressed data\n!:mime\tapplication/x-qpress\n\n# Zlib https://www.ietf.org/rfc/rfc6713.txt\n0\tbeshort%31\t=0\t\n>0\tbyte&0xf\t=8\n>>0\tbyte&0x80 \t=0\tzlib compressed data\n!:mime\tapplication/zlib\n\n#------------------------------------------------------------------------------\n# $File: console,v 1.18 2010/09/20 19:19:17 rrt Exp $\n# Console game magic\n# Toby Deshane <hac@shoelace.digivill.net>\n#    ines:  file(1) magic for Marat's iNES Nintendo Entertainment System\n#           ROM dump format\n\n0 string NES\\032 iNES ROM dump,\n>4 byte  x     %dx16k PRG\n>5 byte  x     \\b, %dx8k CHR\n>6 byte&0x01  =0x1  \\b, [Vert.]\n>6 byte&0x01  =0x0  \\b, [Horiz.]\n>6 byte&0x02  =0x2  \\b, [SRAM]\n>6 byte&0x04  =0x4  \\b, [Trainer]\n>6 byte&0x04  =0x8  \\b, [4-Scr]\n\n#------------------------------------------------------------------------------\n# gameboy:  file(1) magic for the Nintendo (Color) Gameboy raw ROM format\n#\n0x104 belong 0xCEED6666 Gameboy ROM:\n>0x134 string >\\0 \"%.16s\"\n>0x146 byte 0x03  \\b,[SGB]\n>0x147 byte 0x00  \\b, [ROM ONLY]\n>0x147 byte 0x01  \\b, [ROM+MBC1]\n>0x147 byte 0x02  \\b, [ROM+MBC1+RAM]\n>0x147 byte 0x03  \\b, [ROM+MBC1+RAM+BATT]\n>0x147 byte 0x05  \\b, [ROM+MBC2]\n>0x147 byte 0x06  \\b, [ROM+MBC2+BATTERY]\n>0x147 byte 0x08  \\b, [ROM+RAM]\n>0x147 byte 0x09  \\b, [ROM+RAM+BATTERY]\n>0x147 byte 0x0B  \\b, [ROM+MMM01]\n>0x147 byte 0x0C  \\b, [ROM+MMM01+SRAM]\n>0x147 byte 0x0D  \\b, [ROM+MMM01+SRAM+BATT]\n>0x147 byte 0x0F  \\b, [ROM+MBC3+TIMER+BATT]\n>0x147 byte 0x10  \\b, [ROM+MBC3+TIMER+RAM+BATT]\n>0x147 byte 0x11  \\b, [ROM+MBC3]\n>0x147 byte 0x12  \\b, [ROM+MBC3+RAM]\n>0x147 byte 0x13  \\b, [ROM+MBC3+RAM+BATT]\n>0x147 byte 0x19  \\b, [ROM+MBC5]\n>0x147 byte 0x1A  \\b, [ROM+MBC5+RAM]\n>0x147 byte 0x1B  \\b, [ROM+MBC5+RAM+BATT]\n>0x147 byte 0x1C  \\b, [ROM+MBC5+RUMBLE]\n>0x147 byte 0x1D  \\b, [ROM+MBC5+RUMBLE+SRAM]\n>0x147 byte 0x1E  \\b, [ROM+MBC5+RUMBLE+SRAM+BATT]\n>0x147 byte 0x1F  \\b, [Pocket Camera]\n>0x147 byte 0xFD  \\b, [Bandai TAMA5]\n>0x147 byte 0xFE  \\b, [Hudson HuC-3]\n>0x147 byte 0xFF  \\b, [Hudson HuC-1]\n\n>0x148 byte 0     \\b, ROM: 256Kbit\n>0x148 byte 1     \\b, ROM: 512Kbit\n>0x148 byte 2     \\b, ROM: 1Mbit\n>0x148 byte 3     \\b, ROM: 2Mbit\n>0x148 byte 4     \\b, ROM: 4Mbit\n>0x148 byte 5     \\b, ROM: 8Mbit\n>0x148 byte 6     \\b, ROM: 16Mbit\n>0x148 byte 0x52  \\b, ROM: 9Mbit\n>0x148 byte 0x53  \\b, ROM: 10Mbit\n>0x148 byte 0x54  \\b, ROM: 12Mbit\n\n>0x149 byte 1     \\b, RAM: 16Kbit\n>0x149 byte 2     \\b, RAM: 64Kbit\n>0x149 byte 3     \\b, RAM: 128Kbit\n>0x149 byte 4     \\b, RAM: 1Mbit\n\n#>0x14e long  x     \\b, CRC: %x\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) magic for the Sega MegaDrive/Genesis raw ROM format\n#\n0x100 string SEGA  Sega MegaDrive/Genesis raw ROM dump\n>0x120 string >\\0 Name: \"%.16s\"\n>0x110 string >\\0 %.16s\n>0x1B0 string RA with SRAM\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) magic for the Super MegaDrive ROM dump format\n#\n0x280 string EAGN  Super MagicDrive ROM dump\n>0 byte x %dx16k blocks\n>2 byte 0 \\b, last in series or standalone\n>2 byte >0 \\b, split ROM\n>8 byte 0xAA\n>9 byte 0xBB\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) alternate magic for the Super MegaDrive ROM dump format\n#\n0x280 string EAMG  Super MagicDrive ROM dump\n>0 byte x %dx16k blocks\n>2 byte x \\b, last in series or standalone\n>8 byte 0xAA\n>9 byte 0xBB\n\n#------------------------------------------------------------------------------\n# smsgg:  file(1) magic for Sega Master System and Game Gear ROM dumps\n#\n# Does not detect all images.  Very preliminary guesswork.  Need more data\n# on format.\n#\n# FIXME: need a little more info...;P\n#\n#0 byte 0xF3\n#>1 byte 0xED  Sega Master System/Game Gear ROM dump\n#>1 byte 0x31  Sega Master System/Game Gear ROM dump\n#>1 byte 0xDB  Sega Master System/Game Gear ROM dump\n#>1 byte 0xAF  Sega Master System/Game Gear ROM dump\n#>1 byte 0xC3  Sega Master System/Game Gear ROM dump\n\n#------------------------------------------------------------------------------\n# dreamcast:  file(1) uncertain magic for the Sega Dreamcast VMU image format\n#\n0 belong 0x21068028   Sega Dreamcast VMU game image\n0 string LCDi         Dream Animator file\n\n#------------------------------------------------------------------------------\n# v64: file(1) uncertain magic for the V64 format N64 ROM dumps\n#\n0 belong 0x37804012    V64 Nintendo 64 ROM dump\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# Nintendo .nds\n192\tstring\t\\044\\377\\256Qi\\232\tNintendo DS Game ROM Image\n# Nintendo .gba\n0\tstring\t\\056\\000\\000\\352$\\377\\256Qi\tNintendo Game Boy Advance ROM Image\n\n#------------------------------------------------------------------------------\n# msx: file(1) magic for MSX game cartridge dumps\n# Too simple - MPi\n#0 beshort 0x4142 MSX game cartridge dump \n\n#------------------------------------------------------------------------------\n# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :\n0\tstring\tPS-X\\ EXE\tSony Playstation executable\n#  Area:\n>113\tstring\tx\t\t(%s)\n\n#------------------------------------------------------------------------------\n# Microsoft Xbox executables .xbe (Esa Hyytia <ehyytia@cc.hut.fi>)\n0       string          XBEH            XBE, Microsoft Xbox executable\n# probabilistic checks whether signed or not\n>0x0004 ulelong =0x0\n>>&2    ulelong =0x0\n>>>&2   ulelong =0x0  \\b, not signed\n>0x0004 ulelong >0\n>>&2    ulelong >0\n>>>&2   ulelong >0    \\b, signed\n# expect base address of 0x10000\n>0x0104               ulelong =0x10000\n>>(0x0118-0x0FF60)    ulelong&0x80000007  0x80000007 \\b, all regions\n>>(0x0118-0x0FF60)    ulelong&0x80000007  !0x80000007\n>>>(0x0118-0x0FF60)   ulelong >0           (regions:\n>>>>(0x0118-0x0FF60)  ulelong &0x00000001  NA\n>>>>(0x0118-0x0FF60)  ulelong &0x00000002  Japan\n>>>>(0x0118-0x0FF60)  ulelong &0x00000004  Rest_of_World\n>>>>(0x0118-0x0FF60)  ulelong &0x80000000  Manufacturer\n>>>(0x0118-0x0FF60)   ulelong >0           \\b)\n\n# --------------------------------\n# Microsoft Xbox data file formats\n0       string          XIP0            XIP, Microsoft Xbox data\n0       string          XTF0            XTF, Microsoft Xbox data\n\n# Atari Lynx cartridge dump (EXE/BLL header)\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n\n# Double-check that the image type matches too, 0x8008 conflicts with\n# 8 character OMF-86 object file headers.\n0\tbeshort\t\t0x8008\t\t\n>6\tstring\t\tBS93\t\tLynx homebrew cartridge\n>>2\tbeshort\t\tx\t\t\\b, RAM start $%04x\n>6\tstring\t\tLYNX\t\tLynx cartridge\n>>2\tbeshort\t\tx\t\t\\b, RAM start $%04x\n\n# Opera file system that is used on the 3DO console\n# From: Serge van den Boom <svdb@stack.nl>\n0\tstring\t\t\\x01ZZZZZ\\x01\t3DO \"Opera\" file system\n\n# From Gurkan Sengun <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n0\tstring\t\tGBS\t\tNintendo Gameboy Music/Audio Data\n12\tstring\t\tGameBoy\\ Music\\ Module\tNintendo Gameboy Music Module\n\n# Playstations Patch Files from: From: Thomas Klausner <tk@giga.or.at>\n0\tstring\tPPF30\t\t\tPlaystation Patch File version 3.0\n>5\tbyte\t0\t\t\t\\b, PPF 1.0 patch\n>5\tbyte\t1\t\t\t\\b, PPF 2.0 patch\n>5\tbyte\t2\t\t\t\\b, PPF 3.0 patch\n>>56\tbyte\t0\t\t\t\\b, Imagetype BIN (any)\n>>56\tbyte\t1\t\t\t\\b, Imagetype GI (PrimoDVD)\n>>57\tbyte\t0\t\t\t\\b, Blockcheck disabled\n>>57\tbyte\t1\t\t\t\\b, Blockcheck enabled\n>>58\tbyte\t0\t\t\t\\b, Undo data not available\n>>58\tbyte\t1\t\t\t\\b, Undo data available\n>6\tstring\tx\t\t\t\\b, description: %s\n\n0\tstring\tPPF20\t\t\tPlaystation Patch File version 2.0\n>5\tbyte\t0\t\t\t\\b, PPF 1.0 patch\n>5\tbyte\t1\t\t\t\\b, PPF 2.0 patch\n>>56\tlelong\t>0\t\t\t\\b, size of file to patch %d\n>6\tstring\tx\t\t\t\\b, description: %s\n\n0\tstring\tPPF10\t\t\tPlaystation Patch File version 1.0\n>5\tbyte\t0\t\t\t\\b, Simple Encoding\n>6\tstring\tx\t\t\t\\b, description: %s\n\n# From: Daniel Dawson <ddawson@icehouse.net>\n# SNES9x .smv \"movie\" file format.\n0\t\tstring\t\tSMV\\x1A\tSNES9x input recording\n>0x4\t\tlelong\t\tx\t\\b, version %d\n# version 4 is latest so far \n>0x4\t\tlelong\t\t<5\n>>0x8\t\tledate\t\tx\t\\b, recorded at %s\n>>0xc\t\tlelong\t\t>0\t\\b, rerecorded %d times\n>>0x10\t\tlelong\t\tx\t\\b, %d frames long\n>>0x14\t\tbyte\t\t>0\t\\b, data for controller(s):\n>>>0x14\t\tbyte\t\t&0x1\t#1\n>>>0x14\t\tbyte\t\t&0x2\t#2\n>>>0x14\t\tbyte\t\t&0x4\t#3\n>>>0x14\t\tbyte\t\t&0x8\t#4\n>>>0x14\t\tbyte\t\t&0x10\t#5\n>>0x15\t\tbyte\t\t^0x1\t\\b, begins from snapshot\n>>0x15\t\tbyte\t\t&0x1\t\\b, begins from reset\n>>0x15\t\tbyte\t\t^0x2\t\\b, NTSC standard\n>>0x15\t\tbyte\t\t&0x2\t\\b, PAL standard\n>>0x17\t\tbyte\t\t&0x1    \\b, settings:\n# WIP1Timing not used as of version 4\n>>>0x4\t\tlelong\t\t<4\n>>>>0x17\tbyte\t\t&0x2\tWIP1Timing\n>>>0x17\t\tbyte\t\t&0x4\tLeft+Right\n>>>0x17\t\tbyte\t\t&0x8\tVolumeEnvX\n>>>0x17\t\tbyte\t\t&0x10\tFakeMute\n>>>0x17\t\tbyte\t\t&0x20\tSyncSound\n# New flag as of version 4\n>>>0x4\t\tlelong\t\t>3\n>>>>0x17\tbyte\t\t&0x80\tNoCPUShutdown\n>>0x4\t\tlelong\t\t<4\n>>>0x18\t\tlelong\t\t>0x23\n>>>>0x20\tleshort\t\t!0\n>>>>>0x20\tlestring16\tx\t\\b, metadata: \"%s\"\n>>0x4\t\tlelong\t\t>3\n>>>0x24\t\tbyte\t\t>0\t\\b, port 1:\n>>>>0x24\tbyte\t\t1\tjoypad\n>>>>0x24\tbyte\t\t2\tmouse\n>>>>0x24\tbyte\t\t3\tSuperScope\n>>>>0x24\tbyte\t\t4\tJustifier\n>>>>0x24\tbyte\t\t5\tmultitap\n>>>0x24\t\tbyte\t\t>0\t\\b, port 2:\n>>>>0x25\tbyte\t\t1\tjoypad\n>>>>0x25\tbyte\t\t2\tmouse\n>>>>0x25\tbyte\t\t3\tSuperScope\n>>>>0x25\tbyte\t\t4\tJustifier\n>>>>0x25\tbyte\t\t5\tmultitap\n>>>0x18\t\tlelong\t\t>0x43\n>>>>0x40\tleshort\t\t!0\n>>>>>0x40\tlestring16\tx\t\\b, metadata: \"%s\"\n>>0x17\t\tbyte\t\t&0x40   \\b, ROM:\n>>>(0x18.l-26)\tlelong\t\tx\tCRC32 0x%08x\n>>>(0x18.l-23)\tstring\t\tx\t\"%s\"\n\n# Type: scummVM savegame files\n# From: Sven Hartge <debian@ds9.argh.org>\n0\tstring\tSCVM\tScummVM savegame\n>12\tstring\t>\\0\t\"%s\"\n\n#------------------------------------------------------------------------------\n# $File: convex,v 1.7 2009/09/19 16:28:08 christos Exp $\n# convex:  file(1) magic for Convex boxes\n#\n# Convexes are big-endian.\n#\n# /*\\\n#  * Below are the magic numbers and tests added for Convex.\n#  * Added at beginning, because they are expected to be used most.\n# \\*/\n0\tbelong\t0507\tConvex old-style object\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0513\tConvex old-style demand paged executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0515\tConvex old-style pre-paged executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0517\tConvex old-style pre-paged, non-swapped executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0x011257\tCore file\n#\n# The following are a series of dump format magic numbers.  Each one\n# corresponds to a drastically different dump format.  The first on is\n# the original dump format on a 4.1 BSD or earlier file system.  The\n# second marks the change between the 4.1 file system and the 4.2 file\n# system.  The Third marks the changing of the block size from 1K\n# to 2K to be compatible with an IDC file system.  The fourth indicates\n# a dump that is dependent on Convex Storage Manager, because data in\n# secondary storage is not physically contained within the dump.\n# The restore program uses these number to determine how the data is\n# to be extracted.\n#\n24\tbelong\t=60013\tdump format, 4.2 or 4.3 BSD (IDC compatible)\n24\tbelong\t=60014\tdump format, Convex Storage Manager by-reference dump\n#\n# what follows is a bunch of bit-mask checks on the flags field of the opthdr.\n# If there is no `=' sign, assume just checking for whether the bit is set?\n#\n0\tbelong\t0601\t\tConvex SOFF\n>88\tbelong&0x000f0000\t=0x00000000\tc1\n>88\tbelong\t\t\t&0x00010000\tc2\n>88\tbelong\t\t\t&0x00020000\tc2mp\n>88\tbelong\t\t\t&0x00040000\tparallel\n>88\tbelong\t\t\t&0x00080000\tintrinsic\n>88\tbelong\t\t\t&0x00000001\tdemand paged\n>88\tbelong\t\t\t&0x00000002\tpre-paged\n>88\tbelong\t\t\t&0x00000004\tnon-swapped\n>88\tbelong\t\t\t&0x00000008\tPOSIX\n#\n>84\tbelong\t\t\t&0x80000000\texecutable\n>84\tbelong\t\t\t&0x40000000\tobject\n>84\tbelong&0x20000000\t=0\t\tnot stripped\n>84\tbelong&0x18000000\t=0x00000000\tnative fpmode\n>84\tbelong&0x18000000\t=0x10000000\tieee fpmode\n>84\tbelong&0x18000000\t=0x18000000\tundefined fpmode\n#\n0\tbelong\t\t\t0605\t\tConvex SOFF core\n#\n0\tbelong\t\t\t0607\t\tConvex SOFF checkpoint\n>88\tbelong&0x000f0000\t=0x00000000\tc1\n>88\tbelong\t\t\t&0x00010000\tc2\n>88\tbelong\t\t\t&0x00020000\tc2mp\n>88\tbelong\t\t\t&0x00040000\tparallel\n>88\tbelong\t\t\t&0x00080000\tintrinsic\n>88\tbelong\t\t\t&0x00000008\tPOSIX\n#\n>84\tbelong&0x18000000\t=0x00000000\tnative fpmode\n>84\tbelong&0x18000000\t=0x10000000\tieee fpmode\n>84\tbelong&0x18000000\t=0x18000000\tundefined fpmode\n\n#------------------------------------------------------------------------------\n# $File$\n# cracklib:  file (1) magic for cracklib v2.7\n\n0\tlelong\t0x70775631\tCracklib password index, little endian\n>4\tlong\t>0\t\t(%i words)\n>4\tlong\t0\t\t(\"64-bit\")\n>>8\tlong\t>-1\t\t(%i words)\n0\tbelong\t0x70775631\tCracklib password index, big endian\n>4\tbelong\t>-1\t\t(%i words)\n# really bellong 0x0000000070775631\n0\tsearch/1\t\\0\\0\\0\\0pwV1\tCracklib password index, big endian (\"64-bit\")\n>12\tbelong\t>0\t\t(%i words)\n\n# ----------------------------------------------------------------------------\n# $File$\n# ctags:  file (1) magic for Exuberant Ctags files\n# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>\n0\tsearch/1\t=!_TAG\tExuberant Ctags tag file text\n\n#--------------------------------------------------------------\n# ctf:  file(1) magic for CTF (Common Trace Format) trace files\n#\n# Specs. available here: <http://www.efficios.com/ctf>\n#--------------------------------------------------------------\n\n# CTF trace data\n0\tlelong\t0xc1fc1fc1\tCommon Trace Format (CTF) trace data (LE)\n0\tbelong\t0xc1fc1fc1\tCommon Trace Format (CTF) trace data (BE)\n\n# CTF metadata (packetized)\n0\tlelong\t0x75d11d57\tCommon Trace Format (CTF) packetized metadata (LE)\n>35\tbyte\tx\t\t\\b, v%d\n>36\tbyte\tx\t\t\\b.%d\n0\tbelong\t0x75d11d57\tCommon Trace Format (CTF) packetized metadata (BE)\n>35\tbyte\tx\t\t\\b, v%d\n>36\tbyte\tx\t\t\\b.%d\n\n# CTF metadata (plain text)\n0\tstring\t/*\\x20CTF\\x20   Common Trace Format (CTF) plain text metadata\n!:strength + 5\t\t\t# this is to make sure we beat C\n>&0\tregex\t[0-9]+\\.[0-9]+\t\\b, v%s\n\n#------------------------------------------------------------------------------\n# $File: cubemaps,v 1.0 2011/12/22 09:01:05 christos Exp $\n# file(1) magic(5) data for cubemaps  Martin Erik Werner <martinerikwerner@gmail.com>\n#\n0\tstring\tACMP\tMap file for the AssaultCube FPS game\n0\tstring\tCUBE\tMap file for cube and cube2 engine games\n0\tstring\tMAPZ)\tMap file for the Blood Frontier/Red Eclipse FPS games\n\n#------------------------------------------------------------------------------\n# $File: cups,v 1.2 2012/11/02 21:50:29 christos Exp $\n# Cups: file(1) magic for the cups raster file format\n# From: Laurent Martelli <martellilaurent@gmail.com>\n# http://www.cups.org/documentation.php/spec-raster.html\n#\n\n0\tname\t\tcups-le\n>280\tlelong\t\tx\t\t\\b, %d\n>284\tlelong\t\tx\t\t\\bx%d dpi\n>376\tlelong\t\tx\t\t\\b, %dx\n>380\tlelong\t\tx\t\t\\b%d pixels\n>388\tlelong\t\tx\t\t%d bits/color\n>392\tlelong\t\tx\t\t%d bits/pixel\n>400\tlelong\t\t0\t\tColorOrder=Chunky\n>400\tlelong\t\t1\t\tColorOrder=Banded\n>400\tlelong\t\t2\t\tColorOrder=Planar\n>404\tlelong\t\t0\t\tColorSpace=gray\n>404\tlelong\t\t1\t\tColorSpace=RGB\n>404\tlelong\t\t2\t\tColorSpace=RGBA\n>404\tlelong\t\t3\t\tColorSpace=black\n>404\tlelong\t\t4\t\tColorSpace=CMY\n>404\tlelong\t\t5\t\tColorSpace=YMC\n>404\tlelong\t\t6\t\tColorSpace=CMYK\n>404\tlelong\t\t7\t\tColorSpace=YMCK\n>404\tlelong\t\t8\t\tColorSpace=KCMY\n>404\tlelong\t\t9\t\tColorSpace=KCMYcm\n>404\tlelong\t\t10\t\tColorSpace=GMCK\n>404\tlelong\t\t11\t\tColorSpace=GMCS\n>404\tlelong\t\t12\t\tColorSpace=WHITE\n>404\tlelong\t\t13\t\tColorSpace=GOLD\n>404\tlelong\t\t14\t\tColorSpace=SILVER\n>404\tlelong\t\t15\t\tColorSpace=CIE XYZ\n>404\tlelong\t\t16\t\tColorSpace=CIE Lab\n>404\tlelong\t\t17\t\tColorSpace=RGBW\n>404\tlelong\t\t18\t\tColorSpace=sGray\n>404\tlelong\t\t19\t\tColorSpace=sRGB\n>404\tlelong\t\t20\t\tColorSpace=AdobeRGB\n\n# Cups Raster image format, Big Endian\n0\tstring\t\tRaS\t\t\n>3\tstring\t\tt\t\tCups Raster version 1, Big Endian\n>3\tstring\t\t2\t\tCups Raster version 2, Big Endian\n>3\tstring\t\t3\t\tCups Raster version 3, Big Endian\n!:mime\tapplication/vnd.cups-raster\n>0\tuse\t\t^cups-le\n\n\n# Cups Raster image format, Little Endian\n1\tstring\t\tSaR\t\t\n>0\tstring\t\tt\t\tCups Raster version 1, Little Endian\n>0\tstring\t\t2\t\tCups Raster version 2, Little Endian\n>0\tstring\t\t3\t\tCups Raster version 3, Little Endian\n!:mime\tapplication/vnd.cups-raster\n>0\tuse\t\tcups-le\n\n#------------------------------------------------------------------------------\n# $File$\n# dact:  file(1) magic for DACT compressed files\n#\n0\tlong\t\t0x444354C3\tDACT compressed data\n>4\tbyte\t\t>-1\t\t(version %i.\n>5\tbyte\t\t>-1\t\t$BS%i.\n>6\tbyte\t\t>-1\t\t$BS%i)\n>7\tlong\t\t>0\t\t$BS, original size: %i bytes\n>15\tlong\t\t>30\t\t$BS, block size: %i bytes\n\n#------------------------------------------------------------------------------\n# $File: database,v 1.42 2014/08/19 14:18:04 christos Exp $\n# database:  file(1) magic for various databases\n#\n# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)\n#\n#\n# GDBM magic numbers\n#  Will be maintained as part of the GDBM distribution in the future.\n#  <downsj@teeny.org>\n0\tbelong\t0x13579acd\tGNU dbm 1.x or ndbm database, big endian, 32-bit\n!:mime\tapplication/x-gdbm\n0\tbelong\t0x13579ace\tGNU dbm 1.x or ndbm database, big endian, old\n!:mime\tapplication/x-gdbm\n0\tbelong\t0x13579acf\tGNU dbm 1.x or ndbm database, big endian, 64-bit\n!:mime\tapplication/x-gdbm\n0\tlelong\t0x13579acd\tGNU dbm 1.x or ndbm database, little endian, 32-bit\n!:mime\tapplication/x-gdbm\n0\tlelong\t0x13579ace\tGNU dbm 1.x or ndbm database, little endian, old\n!:mime\tapplication/x-gdbm\n0\tlelong\t0x13579acf\tGNU dbm 1.x or ndbm database, little endian, 64-bit\n!:mime\tapplication/x-gdbm\n0\tstring\tGDBM\t\tGNU dbm 2.x database\n!:mime\tapplication/x-gdbm\n#\n# Berkeley DB\n#\n# Ian Darwin's file /etc/magic files: big/little-endian version.\n#\n# Hash 1.85/1.86 databases store metadata in network byte order.\n# Btree 1.85/1.86 databases store the metadata in host byte order.\n# Hash and Btree 2.X and later databases store the metadata in host byte order.\n\n0\tlong\t0x00061561\tBerkeley DB\n!:mime\tapplication/x-dbm\n>8\tbelong\t4321\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, native byte-order)\n>8\tbelong\t1234\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, little-endian)\n\n0\tbelong\t0x00061561\tBerkeley DB\n>8\tbelong\t4321\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, big-endian)\n>8\tbelong\t1234\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, native byte-order)\n\n0\tlong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tlong\t>0\t\t(Btree, version %d, native byte-order)\n0\tbelong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tbelong\t>0\t\t(Btree, version %d, big-endian)\n0\tlelong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tlelong\t>0\t\t(Btree, version %d, little-endian)\n\n12\tlong\t0x00061561\tBerkeley DB\n>16\tlong\t>0\t\t(Hash, version %d, native byte-order)\n12\tbelong\t0x00061561\tBerkeley DB\n>16\tbelong\t>0\t\t(Hash, version %d, big-endian)\n12\tlelong\t0x00061561\tBerkeley DB\n>16\tlelong\t>0\t\t(Hash, version %d, little-endian)\n\n12\tlong\t0x00053162\tBerkeley DB\n>16\tlong\t>0\t\t(Btree, version %d, native byte-order)\n12\tbelong\t0x00053162\tBerkeley DB\n>16\tbelong\t>0\t\t(Btree, version %d, big-endian)\n12\tlelong\t0x00053162\tBerkeley DB\n>16\tlelong\t>0\t\t(Btree, version %d, little-endian)\n\n12\tlong\t0x00042253\tBerkeley DB\n>16\tlong\t>0\t\t(Queue, version %d, native byte-order)\n12\tbelong\t0x00042253\tBerkeley DB\n>16\tbelong\t>0\t\t(Queue, version %d, big-endian)\n12\tlelong\t0x00042253\tBerkeley DB\n>16\tlelong\t>0\t\t(Queue, version %d, little-endian)\n\n# From Max Bowsher.\n12\tlong\t0x00040988\tBerkeley DB\n>16\tlong\t>0\t\t(Log, version %d, native byte-order)\n12\tbelong\t0x00040988\tBerkeley DB \n>16\tbelong\t>0\t\t(Log, version %d, big-endian)\n12\tlelong\t0x00040988\tBerkeley DB\n>16\tlelong\t>0\t\t(Log, version %d, little-endian)\n\n#\n#\n# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>\n0\tstring/b\tRRD\\0\t\tRRDTool DB\n>4\tstring/b\tx\t\tversion %s\n\n>>10\tshort\t\t!0\t\t16bit aligned\n>>>10\tbedouble\t8.642135e+130\tbig-endian\n>>>>18\tshort\t\tx\t\t32bit long (m68k)\n\n>>10\tshort\t\t0\n>>>12\tlong\t\t!0\t\t32bit aligned\n>>>>12\tbedouble\t8.642135e+130\tbig-endian\n>>>>>20 long\t\t0\t\t64bit long\n>>>>>20 long\t\t!0\t\t32bit long  \n>>>>12\tledouble\t8.642135e+130\tlittle-endian\n>>>>>24 long\t\t0\t\t64bit long\n>>>>>24 long\t\t!0\t\t32bit long (i386)\n>>>>12\tstring\t\t\\x43\\x2b\\x1f\\x5b\\x2f\\x25\\xc0\\xc7\tmiddle-endian\n>>>>>24 short\t\t!0\t\t32bit long (arm)\n\n>>8\tquad\t\t0\t\t64bit aligned\n>>>16\tbedouble\t8.642135e+130\tbig-endian\n>>>>24\tlong\t\t0\t\t64bit long (s390x)\n>>>>24\tlong\t\t!0\t\t32bit long (hppa/mips/ppc/s390/SPARC)\n>>>16\tledouble\t8.642135e+130\tlittle-endian\n>>>>28\tlong\t\t0\t\t64bit long (alpha/amd64/ia64)\n>>>>28\tlong\t\t!0\t\t32bit long (armel/mipsel)\n\n#----------------------------------------------------------------------\n# ROOT: file(1) magic for ROOT databases\n#\n0       string  root\\0  ROOT file\n>4      belong  x       Version %d\n>33     belong  x       (Compression: %d)\n\n# XXX: Weak magic.\n# Alex Ott <ott@jet.msk.su>\n## Paradox file formats\n#2\t  leshort\t0x0800\tParadox \n#>0x39\t  byte\t\t3\tv. 3.0 \n#>0x39\t  byte\t\t4\tv. 3.5 \n#>0x39\t  byte\t\t9\tv. 4.x \n#>0x39\t  byte\t\t10\tv. 5.x \n#>0x39\t  byte\t\t11\tv. 5.x \n#>0x39\t  byte\t\t12\tv. 7.x \n#>>0x04\t  byte\t\t0\tindexed .DB data file \n#>>0x04\t  byte\t\t1\tprimary index .PX file \n#>>0x04\t  byte\t\t2\tnon-indexed .DB data file \n#>>0x04\t  byte\t\t3\tnon-incrementing secondary index .Xnn file \n#>>0x04\t  byte\t\t4\tsecondary index .Ynn file \n#>>0x04\t  byte\t\t5\tincrementing secondary index .Xnn file \n#>>0x04\t  byte\t\t6\tnon-incrementing secondary index .XGn file \n#>>0x04\t  byte\t\t7\tsecondary index .YGn file \n#>>>0x04\t  byte\t\t8\tincrementing secondary index .XGn file \n\n## XBase database files\n# updated by Joerg Jenderek at Feb 2013\n# http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm\n# http://www.clicketyclick.dk/databases/xbase/format/dbf.html\n# http://home.f1.htw-berlin.de/scheibl/db/intern/dBase.htm\n# inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31\n0\tubelong&0x0000FFFF\t\t<0x00000C20\t\n# skip Infocom game Z-machine\n>2\t\tubyte\t\t\t>0\t\t\n# skip Androids *.xml\n>>3\t\tubyte\t\t\t>0\t\t\n>>>3\t\tubyte\t\t\t<32\t\t\n# 1 < version VV\n>>>>0\t\tubyte\t\t\t>1\t\t\n# skip HELP.CA3 by test for reserved byte ( NULL )\n>>>>>27\t\tubyte\t\t\t0\t\t\n# reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF)\n#>>>>>30\t\tubeshort     \t\tx\t\t30NULL?%x\n# possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL) \n>>>>>>24\tubelong&0xffFFFFff\t>0x01302000\t\n# .DBF or .MDX\n>>>>>>24\tubelong&0xffFFFFff\t<0x01302001\t\n# for Xbase Database file (*.DBF) reserved (NULL) for multi-user\n>>>>>>>24\tubelong&0xffFFFFff\t=0\t\t\n# test for 2 reserved NULL bytes,transaction and encryption byte flag\n>>>>>>>>12\tubelong&0xFFFFfEfE\t0\t\t\n# test for MDX flag\n>>>>>>>>>28\tubyte\t\t\tx\t\t\n>>>>>>>>>28\tubyte&0xf8\t\t0\t\t\n# header size >= 32\n>>>>>>>>>>8\tuleshort\t\t>31\t\t\n# skip PIC15736.PCX by test for language driver name or field name\n>>>>>>>>>>>32\tubyte\t\t\t>0\t\t\n#!:mime\tapplication/x-dbf; charset=unknown-8bit ??\n#!:mime\tapplication/x-dbase\n>>>>>>>>>>>>0\tuse\t\t\txbase-type\n# database file\n>>>>>>>>>>>>0\tubyte\t\t\tx\t\t\\b DBF\n>>>>>>>>>>>>4\tlelong\t\t\t0\t\t\\b, no records\n>>>>>>>>>>>>4\tlelong\t\t\t>0\t\t\\b, %d record\n# plural s appended\n>>>>>>>>>>>>>4\tlelong\t\t\t>1\t\t\\bs\n# http://www.clicketyclick.dk/databases/xbase/format/dbf_check.html#CHECK_DBF\n# 1 <= record size <= 4000 (dBase 3,4) or 32 * KB (=0x8000)\n>>>>>>>>>>>>10\tuleshort\t\tx\t\t* %d\n# file size = records * record size + header size\n>>>>>>>>>>>>1\tubyte\t\t\tx\t\t\\b, update-date\n>>>>>>>>>>>>1\tuse\t\t\txbase-date\n# http://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx\n#>>>>>>>>>>>>29\tubyte\t\t\t=0\t\t\\b, codepage ID=0x%x\n# 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ?\n>>>>>>>>>>>>29\tubyte\t\t\t>0\t\t\\b, codepage ID=0x%x\n#>>>>>>>>>>>>28\tubyte&0x01\t\t0\t\t\\b, no index file\n>>>>>>>>>>>>28\tubyte&0x01\t\t1\t\t\\b, with index file .MDX\n>>>>>>>>>>>>28\tubyte&0x02\t\t2\t\t\\b, with memo .FPT\n>>>>>>>>>>>>28\tubyte&0x04\t\t4\t\t\\b, DataBaseContainer\n# 1st record offset + 1 = header size\n>>>>>>>>>>>>8\tuleshort\t\t>0\t\t\n>>>>>>>>>>>>(8.s+1)\tubyte\t\t>0\t\t\n>>>>>>>>>>>>>8\t\tuleshort\t>0\t\t\\b, at offset %d\n>>>>>>>>>>>>>(8.s+1)\tubyte\t\t>0\t\t\n>>>>>>>>>>>>>>&-1\tstring\t\t>\\0\t\t1st record \"%s\"\n# for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserverd (NULL) \n>>>>>>>24\tubelong&0x0133f7ff\t>0\t\t\n# test for reserved NULL byte\n>>>>>>>>47\tubyte\t\t\t0\t\t\n# test for valid TAG key format (0x10 or 0)\n>>>>>>>>>559\tubyte&0xeF\t\t0\t\t\n# test MM <= 12\n>>>>>>>>>>45\tubeshort\t\t<0x0C20\t\t\n>>>>>>>>>>>45\tubyte\t\t\t>0\t\t\n>>>>>>>>>>>>46\tubyte\t\t\t<32\t\t\n>>>>>>>>>>>>>46\tubyte\t\t\t>0\t\t\n#!:mime\tapplication/x-mdx\n>>>>>>>>>>>>>>0\t\tuse\t\txbase-type\n>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\t\\b MDX\n>>>>>>>>>>>>>>1\t\tubyte\t\tx\t\t\\b, creation-date\n>>>>>>>>>>>>>>1\t\tuse\t\txbase-date\n>>>>>>>>>>>>>>44\tubyte\t\tx\t\t\\b, update-date\n>>>>>>>>>>>>>>44\tuse\t\txbase-date\n# No.of tags in use (1,2,5,12)\n>>>>>>>>>>>>>>28\tuleshort\tx\t\t\\b, %d\n# No. of entries in tag (0x30)\n>>>>>>>>>>>>>>25\tubyte\t\tx\t\t\\b/%d tags\n#  Length of tag\n>>>>>>>>>>>>>>26\tubyte\t\tx\t\t* %d\n# 1st tag name_\n>>>>>>>>>>>>>548\tstring\t\tx\t\t\\b, 1st tag \"%.11s\"\n# 2nd tag name\n#>>>>>>>>>>>>(26.b+548)\tstring\t\tx\t\t\\b, 2nd tag \"%.11s\"\n#\n#\t\tPrint the xBase names of different version variants \n0\tname\t\t\t\txbase-type\n>0\tubyte\t\t<2\t\t\n# 1 < version\n>0\tubyte\t\t>1\t\t\n>>0\tubyte\t\t0x02\t\tFoxBase\n# FoxBase+/dBaseIII+, no memo\n>>0\tubyte\t\t0x03\t\tFoxBase+/dBase III\n!:mime\tapplication/x-dbf\n# dBASE IV no memo file\n>>0\tubyte\t\t0x04\t\tdBase IV\n!:mime\tapplication/x-dbf\n# dBASE V no memo file\n>>0\tubyte\t\t0x05\t\tdBase V\n!:mime\tapplication/x-dbf\n>>0\tubyte\t\t0x30\t\tVisual FoxPro\n!:mime\tapplication/x-dbf\n>>0\tubyte\t\t0x31\t\tVisual FoxPro, autoincrement\n!:mime\tapplication/x-dbf\n# Visual FoxPro, with field type Varchar or Varbinary\n>>0\tubyte\t\t0x32\t\tVisual FoxPro, with field type Varchar\n!:mime\tapplication/x-dbf\n# dBASE IV SQL, no memo;dbv memo var size (Flagship)\n>>0\tubyte\t\t0x43\t\tdBase IV, with SQL table\n!:mime\tapplication/x-dbf\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0x62\t\tdBase IV, with SQL table\n#!:mime\tapplication/x-dbf\n# dBASE IV, with memo!!\n>>0\tubyte\t\t0x7b\t\tdBase IV, with memo\n!:mime\tapplication/x-dbf\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0x82\t\tdBase IV, with SQL system\n#!:mime\tapplication/x-dbf\n# FoxBase+/dBaseIII+ with memo .DBT!\n>>0\tubyte\t\t0x83\t\tFoxBase+/dBase III, with memo .DBT\n!:mime\tapplication/x-dbf\n# VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file\n>>0\tubyte\t\t0x87\t\tVISUAL OBJECTS, with memo file\n!:mime\tapplication/x-dbf\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0x8A\t\tFoxBase+/dBase III, with memo .DBT\n#!:mime\tapplication/x-dbf\n# dBASE IV with memo!\n>>0\tubyte\t\t0x8B\t\tdBase IV, with memo .DBT\n!:mime\tapplication/x-dbf\n# dBase IV with SQL Table,no memo?\n>>0\tubyte\t\t0x8E\t\tdBase IV, with SQL table\n!:mime\tapplication/x-dbf\n# .dbv and .dbt memo (Flagship)?\n>>0\tubyte\t\t0xB3\t\tFlagship\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0xCA\t\tdBase IV with memo .DBT\n#!:mime\tapplication/x-dbf\n# dBASE IV with SQL table, with memo .DBT\n>>0\tubyte\t\t0xCB\t\tdBase IV with SQL table, with memo .DBT\n!:mime\tapplication/x-dbf\n# HiPer-Six format;Clipper SIX, with SMT memo file\t\t\n>>0\tubyte\t\t0xE5\t\tClipper SIX with memo\n!:mime\tapplication/x-dbf\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0xF4\t\tdBase IV, with SQL table, with memo\n#!:mime\tapplication/x-dbf\n>>0\tubyte\t\t0xF5\t\tFoxPro with memo\n!:mime\tapplication/x-dbf\n# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx\n#>>0\tubyte\t\t0xFA\t\tFoxPro 2.x, with memo\n#!:mime\tapplication/x-dbf\n# unknown version (should not happen)\n>>0\tdefault\t\tx\t\txBase\n!:mime\tapplication/x-dbf\n>>>0\tubyte\t\tx\t\t(0x%x)\n# flags in version byte\n# DBT flag (with dBASE III memo .DBT)!!\n# >>0\tubyte&0x80\t>0\t\tDBT_FLAG=%x\n# memo flag ??\n# >>0\tubyte&0x08\t>0\t\tMEMO_FLAG=%x\n# SQL flag ??\n# >>0\tubyte&0x70\t>0\t\tSQL_FLAG=%x\n#\t\ttest and print the date of xBase .DBF .MDX\n0\tname\t\t\t\txbase-date\n# inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31\n>0\tubelong\t\tx\t\t\n>1\tubyte\t\t<13\t\t\n>>1\tubyte\t\t>0\t\t\n>>>2\tubyte\t\t>0\t\t\n>>>>2\tubyte\t\t<32\t\t\n>>>>>0\tubyte\t\tx\t\t\n# YY is interpreted as 20YY or 19YY\n>>>>>>0\tubyte\t\t<100\t\t\\b %.2d\n# YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY\n>>>>>>0\tubyte\t\t>99\t\t\\b %d\n>>>>>1\tubyte\t\tx\t\t\\b-%d\n>>>>>2\tubyte\t\tx\t\t\\b-%d\n\n#\tdBase memo files .DBT or .FPT\n# http://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx\n16\t\tubyte\t\t<4\t\t\n>16\t\tubyte\t\t!2\t\t\n>>16\t\tubyte\t\t!1\t\t\n# next free block index is positive\n>>>0\t\tulelong\t\t>0\t\t\n# skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size\n>>>>17\t\tubelong&0xFFfdFE00\t0x00000000\t\n# skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h\n>>>>>20\t\tubelong&0xFF01209B\t0x00000000\t\n# dBASE III\n>>>>>>16\tubyte\t\t3\t\t\n# dBASE III DBT\n>>>>>>>0\tuse\t\tdbase3-memo-print\n# dBASE III DBT without version, dBASE IV DBT , FoxPro FPT , or many ZIP , DBF garbage\n>>>>>>16\tubyte\t\t0\t\t\n# unusual dBASE III DBT like angest.dbt, dBASE IV DBT with block size 0 , FoxPro FPT ,  or garbage PCX DBF\n>>>>>>>20\tuleshort\t0\t\t\n# FoxPro FPT , unusual dBASE III DBT like biblio.dbt or garbage\n>>>>>>>>8\tulong\t\t=0\t\t\n>>>>>>>>>6\tubeshort\t>0\t\t\n# skip emacs.PIF\n>>>>>>>>>>4\tushort\t\t0\t\t\n>>>>>>>>>>>0\tuse\t\tfoxpro-memo-print\n# dBASE III DBT , garbage\n>>>>>>>>>6\tubeshort\t0\t\t\n# skip MM*DD*.bin by test for for reserved NULL byte\n>>>>>>>>>>510\tubeshort\t0\t\t\n# skip TK-DOS11.img image by looking for memo text\n>>>>>>>>>>>512\tubelong\t\t<0xfeffff03\t\n# skip EFI executables by looking for memo text\n>>>>>>>>>>>>512\tubelong\t\t>0x1F202020\t\n>>>>>>>>>>>>>513 ubyte\t\t>0\t\t\n# unusual dBASE III DBT like adressen.dbt\n>>>>>>>>>>>>>>0\tuse\t\tdbase3-memo-print\n# dBASE III DBT like angest.dbt, or garbage PCX DBF\n>>>>>>>>8\tubelong\t\t!0\t\t\n# skip PCX and some DBF by test for for reserved NULL bytes\n>>>>>>>>>510\tubeshort\t0\t\t\n# skip some DBF by test of invalid version\n>>>>>>>>>>0\tubyte\t\t>5\t\t\n>>>>>>>>>>>0\tubyte\t\t<48\t\t\n>>>>>>>>>>>>0\tuse\t\tdbase3-memo-print\n# dBASE IV DBT with positive block size\n>>>>>>>20\tuleshort\t>0\t\t\n>>>>>>>>0\tuse\t\tdbase4-memo-print\n\n#\t\tPrint the information of dBase III DBT memo file \n0\tname\t\t\t\tdbase3-memo-print\n>0\tubyte\t\t\tx\t\tdBase III DBT\n# instead 3 as version number 0 for unusual examples like biblio.dbt\n>16\tubyte\t\t\t!3\t\t\\b, version number %u\n# Number of next available block for appending data\n#>0\tlelong\t\t\t=0\t\t\\b, next free block index %u\n>0\tlelong\t\t\t!0\t\t\\b, next free block index %u\n# no positiv block length\n#>20\tuleshort\t\t=0\t\t\\b, block length %u\n>20\tuleshort\t\t!0\t\t\\b, block length %u\n# dBase III memo field terminated by \\032\\032\n>512\tstring\t\t\t>\\0\t\t\\b, 1st item \"%s\"\n#\t\tPrint the information of dBase IV DBT memo file \n0\tname\t\t\t\tdbase4-memo-print\n>0\t\tlelong\t\tx\t\tdBase IV DBT\n# 8 character shorted main name of coresponding dBASE IV DBF file\n>8\t\tubelong\t\t>0x20000000\t\n# skip unusual like for angest.dbt\n>>20\t\tuleshort\t>0\t\n>>>8\t\tstring\t\t>\\0\t\t\\b of %-.8s.DBF\n# value 0 implies 512 as size\n#>4\t\tulelong\t\t=0\t\t\\b, blocks size %u\n# size of blocks not reliable like 0x2020204C in angest.dbt\n>4\t\tulelong\t\t!0\t\t\n>>4\t\tulelong&0x0000003f\t0\t\\b, blocks size %u\n# dBase IV DBT with positive block length (found 512 , 1024)\n>20\t\tuleshort\t>0\t\t\\b, block length %u\n# next available block\n#>0\t\tlelong\t\t=0\t\t\\b, next free block index %u\n>0\t\tlelong\t\t!0\t\t\\b, next free block index %u\n>20\t\tuleshort\t>0\t\t\n>>(20.s)\tubelong\t\tx\t\t\n>>>&-4\t\tuse\t\tdbase4-memofield-print\n# unusual dBase IV DBT without block length (implies 512 as length)\n>20\t\tuleshort\t=0\t\t\n>>512\t\tubelong\t\tx\t\t\n>>>&-4\t\tuse\t\t\t\tdbase4-memofield-print\n#\t\tPrint the information of dBase IV memo field \n0\tname\t\t\tdbase4-memofield-print\n# free dBase IV memo field\n>0\t\tubelong\t\t!0xFFFF0800\t\n>>0\t\tlelong\t\tx\t\t\\b, next free block %u\n>>4\t\tlelong\t\tx\t\t\\b, next used block %u\n# used dBase IV memo field\n>0\t\tubelong\t\t=0xFFFF0800\t\n# length of memo field\n>>4\t\tlelong\t\tx\t\t\\b, field length %d\n>>>8\t\tstring\t\t>\\0\t\t\\b, 1st used item \"%s\"\n#\t\tPrint the information of FoxPro FPT memo file \n0\tname\t\t\t\tfoxpro-memo-print\n>0\t\tbelong\t\tx\t\tFoxPro FPT\n# Size of blocks for FoxPro ( 64,256 )\n>6\t\tubeshort\tx\t\t\\b, blocks size %u\n# next available block\n#>0\t\tbelong\t\t=0\t\t\\b, next free block index %u\n>0\t\tbelong\t\t!0\t\t\\b, next free block index %u\n# field type ( 0~picture, 1~memo, 2~object ) \n>512\t\tubelong\t\t<3\t\t\\b, field type %u\n# length of memo field\n>512\t\tubelong\t\t1\t\t\n>>516\t\tbelong\t\t>0\t\t\\b, field length %d\n>>>520\t\tstring\t\t>\\0\t\t\\b, 1st item \"%s\"\n\n# TODO: \n# DBASE index file *.NDX\n# DBASE Compound Index file *.CDX\n# dBASE IV Printer Driver *.PRF\n## End of XBase database stuff\n\n# MS Access database\n4\tstring\tStandard\\ Jet\\ DB\tMicrosoft Access Database\n!:mime\tapplication/x-msaccess\n4\tstring\tStandard\\ ACE\\ DB\tMicrosoft Access Database\n!:mime\tapplication/x-msaccess\n\n# TDB database from Samba et al - Martin Pool <mbp@samba.org>\n0\tstring\tTDB\\ file\t\tTDB database\n>32\tlelong\t0x2601196D\t\tversion 6, little-endian\n>>36\tlelong\tx\t\t\thash size %d bytes\n\n# SE Linux policy database\n0       lelong  0xf97cff8c      SE Linux policy\n>16     lelong  x               v%d\n>20     lelong  1      MLS\n>24     lelong  x       %d symbols\n>28     lelong  x       %d ocons\n\n# ICE authority file data (Wolfram Kleff)\n2\tstring\t\tICE\t\tICE authority data\n\n# X11 Xauthority file (Wolfram Kleff)\n10\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n11\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n12\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n13\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n14\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n15\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n16\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n17\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n18\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n\n# From: Maxime Henrion <mux@FreeBSD.org>\n# PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org>\n0\tstring\t\tPGDMP\t\tPostgreSQL custom database dump\n>5\tbyte\t\tx\t\t- v%d\n>6\tbyte\t\tx\t\t\\b.%d\n>5\tbeshort\t\t<0x101\t\t\\b-0\n>5\tbeshort\t\t>0x100\n>>7\tbyte\t\tx\t\t\\b-%d\n\n# Type: Advanced Data Format (ADF) database\n# URL:  http://www.grc.nasa.gov/WWW/cgns/adf/\n# From: Nicolas Chauvat <nicolas.chauvat@logilab.fr>\n0\tstring\t@(#)ADF\\ Database\tCGNS Advanced Data Format\n\n# Tokyo Cabinet magic data\n# http://tokyocabinet.sourceforge.net/index.html\n0\tstring\t\tToKyO\\ CaBiNeT\\n\tTokyo Cabinet\n>14\tstring\t\tx\t\t\t\\b (%s)\n>32\tbyte\t\t0\t\t\t\\b, Hash\n!:mime\tapplication/x-tokyocabinet-hash\n>32\tbyte\t\t1\t\t\t\\b, B+ tree\n!:mime\tapplication/x-tokyocabinet-btree\n>32\tbyte\t\t2\t\t\t\\b, Fixed-length\n!:mime\tapplication/x-tokyocabinet-fixed\n>32\tbyte\t\t3\t\t\t\\b, Table\n!:mime\tapplication/x-tokyocabinet-table\n>33\tbyte\t\t&1\t\t\t\\b, [open]\n>33\tbyte\t\t&2\t\t\t\\b, [fatal]\n>34\tbyte\t\tx\t\t\t\\b, apow=%d\n>35\tbyte\t\tx\t\t\t\\b, fpow=%d\n>36\tbyte\t\t&0x01\t\t\t\\b, [large]\n>36\tbyte\t\t&0x02\t\t\t\\b, [deflate]\n>36\tbyte\t\t&0x04\t\t\t\\b, [bzip]\n>36\tbyte\t\t&0x08\t\t\t\\b, [tcbs]\n>36\tbyte\t\t&0x10\t\t\t\\b, [excodec]\n>40\tlequad\t\tx\t\t\t\\b, bnum=%lld\n>48\tlequad\t\tx\t\t\t\\b, rnum=%lld\n>56\tlequad\t\tx\t\t\t\\b, fsiz=%lld\n\n# Type:\tQDBM Quick Database Manager\n# From:\tBenoit Sibaud <bsibaud@april.org>\n0\tstring\t\t\\\\[depot\\\\]\\n\\f\t\tQuick Database Manager, little endian\n0\tstring\t\t\\\\[DEPOT\\\\]\\n\\f\t\tQuick Database Manager, big endian\n\n# Type:\tTokyoCabinet database\n# URL:\thttp://tokyocabinet.sourceforge.net/\n# From:\tBenoit Sibaud <bsibaud@april.org>\n0\tstring\t\tToKyO\\ CaBiNeT\\n\tTokyoCabinet database\n>14\tstring\t\tx\t\t\t(version %s)\n\n# From:  Stephane Blondon http://www.yaal.fr\n# Database file for Zope (done by FileStorage)\n0\tstring\t\tFS21\tZope Object Database File Storage (data)\n# Cache file for the database of Zope (done by ClientStorage)\n0\tstring\t\tZEC3\tZope Object Database Client Cache File (data)\n\n# IDA (Interactive Disassembler) database\n0\tstring\t\tIDA1\tIDA (Interactive Disassembler) database\n\n#------------------------------------------------------------------------------\n# $File$\n# diamond:  file(1) magic for Diamond system\n#\n# ... diamond is a multi-media mail and electronic conferencing system....\n#\n# XXX - I think it was either renamed Slate, or replaced by Slate....\n#\n#\tThe full deal is too long...\n#0\tstring\t<list>\\n<protocol\\ bbn-multimedia-format>\tDiamond Multimedia Document\n0\tstring\t=<list>\\n<protocol\\ bbn-m\tDiamond Multimedia Document\n\n#------------------------------------------------------------------------------\n# $File: diff,v 1.13 2012/06/16 14:43:36 christos Exp $\n# diff:  file(1) magic for diff(1) output\n#\n0\tsearch/1\tdiff\\ \t\tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\t***\\ \t\tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\tOnly\\ in\\ \tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\tCommon\\ subdirectories:\\ \tdiff output text\n!:mime\ttext/x-diff\n\n0\tsearch/1\tIndex:\t\tRCS/CVS diff output text\n!:mime\ttext/x-diff\n\n# bsdiff:  file(1) magic for bsdiff(1) output\n0\tstring/b\t\tBSDIFF40\tbsdiff(1) patch file\n\n\n# unified diff\n0\tsearch/4096\t---\\ \n>&0\tsearch/1024 \\n\n>>&0\tsearch/1 +++\\ \n>>>&0\tsearch/1024 \\n\n>>>>&0\tsearch/1 @@\tunified diff output text\n!:mime\ttext/x-diff\n!:strength + 90\n\n# librsync -- the library for network deltas\n#\n# Copyright (C) 2001 by Martin Pool.  You may do whatever you want with\n# this file.\n#\n0\tbelong\t\t0x72730236\trdiff network-delta data\n\n0\tbelong\t\t0x72730136\trdiff network-delta signature data\n>4\tbelong\t\tx\t\t(block length=%d,\n>8\tbelong\t\tx\t\tsignature strength=%d)\n\n#------------------------------------------------------------------------------\n# $File: digital,v 1.10 2011/05/03 01:44:17 christos Exp $\n#  Digital UNIX - Info\n#\n0\tstring\t=!<arch>\\n________64E\tAlpha archive\n>22\tstring\tX\t\t\t-- out of date\n#\n\n0\tleshort\t\t0603\n>24\tleshort\t\t0410\t\tCOFF format alpha pure\n>24\tleshort\t\t0413\t\tCOFF format alpha demand paged\n>>22\tleshort&030000\t!020000\t\texecutable\n>>22\tleshort&020000\t!0\t\tdynamically linked\n>>16\tlelong\t\t!0\t\tnot stripped\n>>16\tlelong\t\t0\t\tstripped\n>>27\tbyte\t\tx\t\t- version %d\n>>26\tbyte\t\tx\t\t\\b.%d\n>>28\tbyte\t\tx\t\t\\b-%d\n>24\tleshort\t\t0407\t\tCOFF format alpha object\n>>22\tleshort&030000\t020000\t\tshared library\n>>27\tbyte\t\tx\t\t- version %d\n>>26\tbyte\t\tx\t\t\\b.%d\n>>28\tbyte\t\tx\t\t\\b-%d\n\n# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>\n#\n# The actual magic number is just \"Core\", followed by a 2-byte version\n# number; however, treating any file that begins with \"Core\" as a Digital\n# UNIX core dump file may produce too many false hits, so we include one\n# byte of the version number as well; DU 5.0 appears only to be up to\n# version 2.\n#\n0\tstring\t\tCore\\001\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n0\tstring\t\tCore\\002\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n#\n# The next is incomplete, we could tell more about this format,\n# but its not worth it.\n0\tleshort\t\t0x188\tAlpha compressed COFF\n0\tleshort\t\t0x18f\tAlpha u-code object\n#\n#\n# Some other interesting Digital formats,\n0\tstring\t\\377\\377\\177\t\tddis/ddif\n0\tstring\t\\377\\377\\174\t\tddis/dots archive\n0\tstring\t\\377\\377\\176\t\tddis/dtif table data\n0\tstring\t\\033c\\033\t\tLN03 output\n0\tlong\t04553207\t\tX image\n#\n0\tstring\t=!<PDF>!\\n\t\tprofiling data file\n#\n# Locale data tables (MIPS and Alpha).\n#\n0\tshort\t\t0x0501\t\tlocale data table\n>6\tshort\t\t0x24\t\tfor MIPS\n>6\tshort\t\t0x40\t\tfor Alpha\n\n#------------------------------------------------------------------------------\n# $File: dolby,v 1.6 2012/10/31 13:39:42 christos Exp $\n# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>\n# from http://www.atsc.org/standards/a_52a.pdf\n# corrections, additions, etc. are always welcome!\n#\n# syncword\n0\tbeshort\t\t0x0b77\tATSC A/52 aka AC-3 aka Dolby Digital stream,\n# Proposed audio/ac3 RFC/4184\n!:mime\taudio/vnd.dolby.dd-raw\n# fscod\n>4\tbyte&0xc0 = 0x00\t48 kHz,\n>4\tbyte&0xc0 = 0x40\t44.1 kHz,\n>4\tbyte&0xc0 = 0x80\t32 kHz,\n# is this one used for 96 kHz?\n>4\tbyte&0xc0 = 0xc0\treserved frequency,\n#\n>5\tbyte&0x07 = 0x00\t\\b, complete main (CM)\n>5\tbyte&0x07 = 0x01\t\\b, music and effects (ME)\n>5\tbyte&0x07 = 0x02\t\\b, visually impaired (VI)\n>5\tbyte&0x07 = 0x03\t\\b, hearing impaired (HI)\n>5\tbyte&0x07 = 0x04\t\\b, dialogue (D)\n>5\tbyte&0x07 = 0x05\t\\b, commentary (C)\n>5\tbyte&0x07 = 0x06\t\\b, emergency (E)\n>5\tbeshort&0x07e0  0x0720\t\\b, voiceover (VO) \n>5\tbeshort&0x07e0 >0x0720\t\\b, karaoke\n# acmod\n>6\tbyte&0xe0 = 0x00\t1+1 front,\n>>6\tbyte&0x10 = 0x10\tLFE on,\n>6\tbyte&0xe0 = 0x20\t1 front/0 rear,\n>>6\tbyte&0x10 = 0x10\tLFE on,\n>6\tbyte&0xe0 = 0x40\t2 front/0 rear,\n# dsurmod (for stereo only)\n>>6\tbyte&0x18 = 0x00\tDolby Surround not indicated\n>>6\tbyte&0x18 = 0x08\tnot Dolby Surround encoded\n>>6\tbyte&0x18 = 0x10\tDolby Surround encoded\n>>6\tbyte&0x18 = 0x18\treserved Dolby Surround mode\n>>6\tbyte&0x04 = 0x04\tLFE on,\n>6\tbyte&0xe0 = 0x60\t3 front/0 rear,\n>>6\tbyte&0x04 = 0x04\tLFE on,\n>6\tbyte&0xe0 = 0x80\t2 front/1 rear,\n>>6\tbyte&0x04 = 0x04\tLFE on,\n>6\tbyte&0xe0 = 0xa0\t3 front/1 rear,\n>>6\tbyte&0x01 = 0x01\tLFE on,\n>6\tbyte&0xe0 = 0xc0\t2 front/2 rear,\n>>6\tbyte&0x04 = 0x04\tLFE on,\n>6\tbyte&0xe0 = 0xe0\t3 front/2 rear,\n>>6\tbyte&0x01 = 0x01\tLFE on,\n#\n>4\tbyte&0x3e = 0x00\t\\b, 32 kbit/s\n>4\tbyte&0x3e = 0x02\t\\b, 40 kbit/s\n>4\tbyte&0x3e = 0x04\t\\b, 48 kbit/s\n>4\tbyte&0x3e = 0x06\t\\b, 56 kbit/s\n>4\tbyte&0x3e = 0x08\t\\b, 64 kbit/s\n>4\tbyte&0x3e = 0x0a\t\\b, 80 kbit/s\n>4\tbyte&0x3e = 0x0c\t\\b, 96 kbit/s\n>4\tbyte&0x3e = 0x0e\t\\b, 112 kbit/s\n>4\tbyte&0x3e = 0x10\t\\b, 128 kbit/s\n>4\tbyte&0x3e = 0x12\t\\b, 160 kbit/s\n>4\tbyte&0x3e = 0x14\t\\b, 192 kbit/s\n>4\tbyte&0x3e = 0x16\t\\b, 224 kbit/s\n>4\tbyte&0x3e = 0x18\t\\b, 256 kbit/s\n>4\tbyte&0x3e = 0x1a\t\\b, 320 kbit/s\n>4\tbyte&0x3e = 0x1c\t\\b, 384 kbit/s\n>4\tbyte&0x3e = 0x1e\t\\b, 448 kbit/s\n>4\tbyte&0x3e = 0x20\t\\b, 512 kbit/s\n>4\tbyte&0x3e = 0x22\t\\b, 576 kbit/s\n>4\tbyte&0x3e = 0x24\t\\b, 640 kbit/s\n\n#------------------------------------------------------------------------------\n# $File: dump,v 1.12 2012/11/01 04:26:40 christos Exp $\n# dump:  file(1) magic for dump file format--for new and old dump filesystems\n#\n# We specify both byte orders in order to recognize byte-swapped dumps.\n#\n0\tname\tnew-dump-be\n>4\tbedate\tx\t\tPrevious dump %s,\n>8\tbedate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %d,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n0\tname\told-dump-be\n#>4\tbedate\tx\t\tPrevious dump %s,\n#>8\tbedate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %d,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n0\tname\tufs2-dump-be\n>896\tbeqdate\tx\t\tPrevious dump %s,\n>904\tbeqdate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %d,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n24\tbelong\t60012\t\tnew-fs dump file (big endian), \n>0\tuse\tnew-dump-be\n\n24\tbelong\t60011\t\told-fs dump file (big endian), \n>0\tuse\told-dump-be\n\n24\tlelong\t60012\t\tnew-fs dump file (little endian), \n>0\tuse\t\\^new-dump-be\n\n24\tlelong\t60011\t\told-fs dump file (little endian), \n>0\tuse\t\\^old-dump-be\n\n\n24\tbelong\t0x19540119\tnew-fs dump file (ufs2, big endian), \n>0\tuse\tufs2-dump-be\n\n24\tlelong\t0x19540119\tnew-fs dump file (ufs2, little endian), \n>0\tuse\t\\^ufs2-dump-be\n\n18\tleshort\t60011\t\told-fs dump file (16-bit, assuming PDP-11 endianness),\n>2\tmedate\tx\t\tPrevious dump %s,\n>6\tmedate\tx\t\tThis dump %s,\n>10\tleshort\t>0\t\tVolume %d,\n>0\tleshort\t1\t\ttape header.\n>0\tleshort\t2\t\tbeginning of file record.\n>0\tleshort\t3\t\tmap of inodes on tape.\n>0\tleshort\t4\t\tcontinuation of file record.\n>0\tleshort\t5\t\tend of volume.\n>0\tleshort\t6\t\tmap of inodes deleted.\n>0\tleshort\t7\t\tend of medium (for floppy).\n\n#------------------------------------------------------------------------------\n# $File: dyadic,v 1.5 2010/09/20 18:55:20 rrt Exp $\n# Dyadic: file(1) magic for Dyalog APL.\n#\n# updated by Joerg Jenderek at Oct 2013\n# http://en.wikipedia.org/wiki/Dyalog_APL\n# http://www.dyalog.com/\n# .DXV Dyalog APL External Variable\n# .DIN Dyalog APL Input Table\n# .DOT Dyalog APL Output Table\n# .DFT Dyalog APL Format File\n0\tubeshort&0xFF60\t0xaa00\t\t\n# skip biblio.dbt\n>1\tbyte\t\t!4\t\t\n# real Dyalog APL have non zero version numbers like 7.3 or 13.4\n>>2\tubeshort\t>0x0000\t\tDyalog APL\n>>>1\tbyte\t\t0x00\t\taplcore\n#>>>1\tbyte\t\t0x00\t\tincomplete workspace\n# *.DCF Dyalog APL Component File\n>>>1\tbyte\t\t0x01\t\tcomponent file 32-bit non-journaled non-checksummed\n#>>>1\tbyte\t\t0x01\t\tcomponent file\n>>>1\tbyte\t\t0x02\t\texternal variable exclusive\n#>>>1\tbyte\t\t0x02\t\texternal variable\n# *.DWS Dyalog APL Workspace\n>>>1\tbyte\t\t0x03\t\tworkspace\n>>>>7\tbyte&0x28\t0x00\t\t32-bit\n>>>>7\tbyte&0x28\t0x20\t\t64-bit\n>>>>7\tbyte&0x0c\t0x00\t\tclassic\n>>>>7\tbyte&0x0c\t0x04\t\tunicode\n>>>>7\tbyte&0x88\t0x00\t\tbig-endian\n>>>>7\tbyte&0x88\t0x80\t\tlittle-endian\n>>>1\tbyte\t\t0x06\t\texternal variable shared\n# *.DSE Dyalog APL Session , *.DLF Dyalog APL Session Log File\n>>>1\tbyte\t\t0x07\t\tsession\n>>>1\tbyte\t\t0x08\t\tmapped file 32-bit\n>>>1\tbyte\t\t0x09\t\tcomponent file 64-bit non-journaled non-checksummed\n>>>1\tbyte\t\t0x0a\t\tmapped file 64-bit\n>>>1\tbyte\t\t0x0b\t\tcomponent file 32-bit level 1 journaled non-checksummed\n>>>1\tbyte\t\t0x0c\t\tcomponent file 64-bit level 1 journaled non-checksummed\n>>>1\tbyte\t\t0x0d\t\tcomponent file 32-bit level 1 journaled checksummed\n>>>1\tbyte\t\t0x0e\t\tcomponent file 64-bit level 1 journaled checksummed\n>>>1\tbyte\t\t0x0f\t\tcomponent file 32-bit level 2 journaled checksummed\n>>>1\tbyte\t\t0x10\t\tcomponent file 64-bit level 2 journaled checksummed\n>>>1\tbyte\t\t0x11\t\tcomponent file 32-bit level 3 journaled checksummed\n>>>1\tbyte\t\t0x12\t\tcomponent file 64-bit level 3 journaled checksummed\n>>>1\tbyte\t\t0x13\t\tcomponent file 32-bit non-journaled checksummed\n>>>1\tbyte\t\t0x14\t\tcomponent file 64-bit non-journaled checksummed\n>>>1\tbyte\t\t0x80\t\tDDB\n>>>2\tbyte\t\tx\t\tversion %d\n>>>3\tbyte\t\tx\t\t\\b.%d\n#>>>2\tbyte\t\tx\t\ttype %d\n#>>>3\tbyte\t\tx\t\tsubtype %d\n\n# *.DXF Dyalog APL Transfer File\n0\tshort\t\t0x6060\t\tDyalog APL transfer\n\n#------------------------------------------------------------------------------\n# $File$\n# ebml:  file(1) magic for various Extensible Binary Meta Language\n# http://www.matroska.org/technical/specs/index.html#track\n0\tbelong\t0x1a45dfa3\tEBML file\n>4\tsearch/b/100\t\\102\\202\n>>&1\tstring\tx\t\t\\b, creator %.8s\n\n#------------------------------------------------------------------------------\n# $File$\n# T602 editor documents \n# by David Necas <yeti@physics.muni.cz>\n0\tstring\t@CT\\ \tT602 document data,\n>4\tstring\t0\tKamenicky\n>4\tstring\t1\tCP 852\n>4\tstring\t2\tKOI8-CS\n>4\tstring\t>2\tunknown encoding\n\n# Vi IMproved Encrypted file \n# by David Necas <yeti@physics.muni.cz>\n0\tstring\tVimCrypt~\tVim encrypted file data\n# Vi IMproved Swap file\n# by Sven Wegener <swegener@gentoo.org>\n0\tstring\tb0VIM\\ \t\tVim swap file\n>&0\tstring\t>\\0\t\t\\b, version %s\n\n#------------------------------------------------------------------------------\n# $File: efi,v 1.4 2009/09/19 16:28:09 christos Exp $\n# efi:  file(1) magic for Universal EFI binaries\n\n0\tlelong\t0x0ef1fab9\n>4\tlelong\t1\t\tUniversal EFI binary with 1 architecture\n>>&0\tlelong\t7\t\t\\b, i386\n>>&0\tlelong\t0x01000007\t\\b, x86_64\n>4\tlelong\t2\t\tUniversal EFI binary with 2 architectures\n>>&0\tlelong\t7\t\t\\b, i386\n>>&0\tlelong\t0x01000007\t\\b, x86_64\n>>&20\tlelong\t7\t\t\\b, i386\n>>&20\tlelong\t0x01000007\t\\b, x86_64\n>4\tlelong\t>2\t\tUniversal EFI binary with %d architectures\n\n#------------------------------------------------------------------------------\n# $File: elf,v 1.67 2014/06/12 13:52:48 christos Exp $\n# elf:  file(1) magic for ELF executables\n#\n# We have to check the byte order flag to see what byte order all the\n# other stuff in the header is in.\n#\n# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?\n#\n# Created by: unknown\n# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support)\n# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support)\n# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium)\n# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures)\n\n0\tname\t\telf-le\n>16\tleshort\t\t0\t\tno file type,\n!:mime\tapplication/octet-stream\n>16\tleshort\t\t1\t\trelocatable,\n!:mime\tapplication/x-object\n>16\tleshort\t\t2\t\texecutable,\n!:mime\tapplication/x-executable\n>16\tleshort\t\t3\t\tshared object,\n!:mime\tapplication/x-sharedlib\n>16\tleshort\t\t4\t\tcore file\n!:mime\tapplication/x-coredump\n# Core file detection is not reliable.\n#>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n#>>>(0x38+0x10) lelong\t>0\t\t(signal %d),\n>16\tleshort\t\t&0xff00\t\tprocessor-specific,\n>18\tclear\t\tx\n>18\tleshort\t\t0\t\tno machine,\n>18\tleshort\t\t1\t\tAT&T WE32100,\n>18\tleshort\t\t2\t\tSPARC,\n>18\tleshort\t\t3\t\tIntel 80386,\n>18\tleshort\t\t4\t\tMotorola m68k,\n>>4\tbyte\t\t1\n>>>36\tlelong\t\t&0x01000000\t68000,\n>>>36\tlelong\t\t&0x00810000\tCPU32,\n>>>36\tlelong\t\t0\t\t68020,\n>18\tleshort\t\t5\t\tMotorola m88k,\n>18\tleshort\t\t6\t\tIntel 80486,\n>18\tleshort\t\t7\t\tIntel 80860,\n# The official e_machine number for MIPS is now #8, regardless of endianness.\n# The second number (#10) will be deprecated later. For now, we still\n# say something if #10 is encountered, but only gory details for #8.\n>18\tleshort\t\t8\t\tMIPS,\n>>4\tbyte\t\t1\n>>>36\tlelong\t\t&0x20\t\tN32\n>18\tleshort\t\t10\t\tMIPS,\n>>4\tbyte\t\t1\n>>>36\tlelong\t\t&0x20\t\tN32\n>18\tleshort\t\t8\n# only for 32-bit\n>>4\tbyte\t\t1\n>>>36  lelong&0xf0000000\t0x00000000\tMIPS-I\n>>>36  lelong&0xf0000000\t0x10000000\tMIPS-II\n>>>36  lelong&0xf0000000\t0x20000000\tMIPS-III\n>>>36  lelong&0xf0000000\t0x30000000\tMIPS-IV\n>>>36  lelong&0xf0000000\t0x40000000\tMIPS-V\n>>>36  lelong&0xf0000000\t0x50000000\tMIPS32\n>>>36  lelong&0xf0000000\t0x60000000\tMIPS64\n>>>36  lelong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>36  lelong&0xf0000000\t0x80000000\tMIPS64 rel2\n# only for 64-bit\n>>4\tbyte\t\t2\n>>>48  lelong&0xf0000000\t0x00000000\tMIPS-I\n>>>48  lelong&0xf0000000\t0x10000000\tMIPS-II\n>>>48  lelong&0xf0000000\t0x20000000\tMIPS-III\n>>>48  lelong&0xf0000000\t0x30000000\tMIPS-IV\n>>>48  lelong&0xf0000000\t0x40000000\tMIPS-V\n>>>48  lelong&0xf0000000\t0x50000000\tMIPS32\n>>>48  lelong&0xf0000000\t0x60000000\tMIPS64\n>>>48  lelong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>48  lelong&0xf0000000\t0x80000000\tMIPS64 rel2\n>18\tleshort\t\t9\t\tAmdahl,\n>18\tleshort\t\t10\t\tMIPS (deprecated),\n>18\tleshort\t\t11\t\tRS6000,\n>18\tleshort\t\t15\t\tPA-RISC,\n# only for 32-bit\n>>4\tbyte\t\t1\n>>>38\tleshort\t\t0x0214\t\t2.0\n>>>36\tleshort\t\t&0x0008\t\t(LP64)\n# only for 64-bit\n>>4\tbyte\t\t2\n>>>50\tleshort\t\t0x0214\t\t2.0\n>>>48\tleshort\t\t&0x0008\t\t(LP64)\n>18\tleshort\t\t16\t\tnCUBE,\n>18\tleshort\t\t17\t\tFujitsu VPP500,\n>18\tleshort\t\t18\t\tSPARC32PLUS,\n# only for 32-bit\n>>4\tbyte\t\t1\n>>>36\tlelong&0xffff00\t0x000100\tV8+ Required,\n>>>36\tlelong&0xffff00\t0x000200\tSun UltraSPARC1 Extensions Required,\n>>>36\tlelong&0xffff00\t0x000400\tHaL R1 Extensions Required,\n>>>36\tlelong&0xffff00\t0x000800\tSun UltraSPARC3 Extensions Required,\n>18\tleshort\t\t19\t\tIntel 80960,\n>18\tleshort\t\t20\t\tPowerPC or cisco 4500,\n>18\tleshort\t\t21\t\t64-bit PowerPC or cisco 7500,\n>18\tleshort\t\t22\t\tIBM S/390,\n>18\tleshort\t\t23\t\tCell SPU,\n>18\tleshort\t\t24\t\tcisco SVIP,\n>18\tleshort\t\t25\t\tcisco 7200,\n>18\tleshort\t\t36\t\tNEC V800 or cisco 12000,\n>18\tleshort\t\t37\t\tFujitsu FR20,\n>18\tleshort\t\t38\t\tTRW RH-32,\n>18\tleshort\t\t39\t\tMotorola RCE,\n>18\tleshort\t\t40\t\tARM,\n>>4\tbyte\t\t1\n>>>36\tlelong&0xff000000\t0x04000000\tEABI4\n>>>36\tlelong&0xff000000\t0x05000000\tEABI5\n>>>36\tlelong\t\t&0x00800000\tBE8\n>>>36\tlelong\t\t&0x00400000\tLE8\n>18\tleshort\t\t41\t\tAlpha,\n>18\tleshort\t\t42\t\tRenesas SH,\n>18\tleshort\t\t43\t\tSPARC V9,\n>>4\tbyte\t\t2\n>>>48\tlelong&0xffff00\t0x000200\tSun UltraSPARC1 Extensions Required,\n>>>48\tlelong&0xffff00\t0x000400\tHaL R1 Extensions Required,\n>>>48\tlelong&0xffff00\t0x000800\tSun UltraSPARC3 Extensions Required,\n>>>48\tlelong&0x3\t0\t\ttotal store ordering,\n>>>48\tlelong&0x3\t1\t\tpartial store ordering,\n>>>48\tlelong&0x3\t2\t\trelaxed memory ordering,\n>18\tleshort\t\t44\t\tSiemens Tricore Embedded Processor,\n>18\tleshort\t\t45\t\tArgonaut RISC Core, Argonaut Technologies Inc.,\n>18\tleshort\t\t46\t\tRenesas H8/300,\n>18\tleshort\t\t47\t\tRenesas H8/300H,\n>18\tleshort\t\t48\t\tRenesas H8S,\n>18\tleshort\t\t49\t\tRenesas H8/500,\n>18\tleshort\t\t50\t\tIA-64,\n>18\tleshort\t\t51\t\tStanford MIPS-X,\n>18\tleshort\t\t52\t\tMotorola Coldfire,\n>18\tleshort\t\t53\t\tMotorola M68HC12,\n>18\tleshort\t\t54\t\tFujitsu MMA,\n>18\tleshort\t\t55\t\tSiemens PCP,\n>18\tleshort\t\t56\t\tSony nCPU,\n>18\tleshort\t\t57\t\tDenso NDR1,\n>18\tleshort\t\t58\t\tStart*Core,\n>18\tleshort\t\t59\t\tToyota ME16,\n>18\tleshort\t\t60\t\tST100,\n>18\tleshort\t\t61\t\tTinyj emb.,\n>18\tleshort\t\t62\t\tx86-64,\n>18\tleshort\t\t63\t\tSony DSP,\n>18\tleshort\t\t64\t\tDEC PDP-10,\n>18\tleshort\t\t65\t\tDEC PDP-11,\n>18\tleshort\t\t66\t\tFX66,\n>18\tleshort\t\t67\t\tST9+ 8/16 bit,\n>18\tleshort\t\t68\t\tST7 8 bit,\n>18\tleshort\t\t69\t\tMC68HC16,\n>18\tleshort\t\t70\t\tMC68HC11,\n>18\tleshort\t\t71\t\tMC68HC08,\n>18\tleshort\t\t72\t\tMC68HC05,\n>18\tleshort\t\t73\t\tSGI SVx or Cray NV1,\n>18\tleshort\t\t74\t\tST19 8 bit,\n>18\tleshort\t\t75\t\tDigital VAX,\n>18\tleshort\t\t76\t\tAxis cris,\n>18\tleshort\t\t77\t\tInfineon 32-bit embedded,\n>18\tleshort\t\t78\t\tElement 14 64-bit DSP,\n>18\tleshort\t\t79\t\tLSI Logic 16-bit DSP,\n>18\tleshort\t\t80\t\tMMIX,\n>18\tleshort\t\t81\t\tHarvard machine-independent,\n>18\tleshort\t\t82\t\tSiTera Prism,\n>18\tleshort\t\t83\t\tAtmel AVR 8-bit,\n>18\tleshort\t\t84\t\tFujitsu FR30,\n>18\tleshort\t\t85\t\tMitsubishi D10V,\n>18\tleshort\t\t86\t\tMitsubishi D30V,\n>18\tleshort\t\t87\t\tNEC v850,\n>18\tleshort\t\t88\t\tRenesas M32R,\n>18\tleshort\t\t89\t\tMatsushita MN10300,\n>18\tleshort\t\t90\t\tMatsushita MN10200,\n>18\tleshort\t\t91\t\tpicoJava,\n>18\tleshort\t\t92\t\tOpenRISC,\n>18\tleshort\t\t93\t\tARC Cores Tangent-A5,\n>18\tleshort\t\t94\t\tTensilica Xtensa,\n>18\tleshort\t\t95\t\tAlphamosaic VideoCore,\n>18\tleshort\t\t96\t\tThompson Multimedia,\n>18\tleshort\t\t97\t\tNatSemi 32k,\n>18\tleshort\t\t98\t\tTenor Network TPC,\n>18\tleshort\t\t99\t\tTrebia SNP 1000,\n>18\tleshort\t\t100\t\tSTMicroelectronics ST200,\n>18\tleshort\t\t101\t\tUbicom IP2022,\n>18\tleshort\t\t102\t\tMAX Processor,\n>18\tleshort\t\t103\t\tNatSemi CompactRISC,\n>18\tleshort\t\t104\t\tFujitsu F2MC16,\n>18\tleshort\t\t105\t\tTI msp430,\n>18\tleshort\t\t106\t\tAnalog Devices Blackfin,\n>18\tleshort\t\t107\t\tS1C33 Family of Seiko Epson,\n>18\tleshort\t\t108\t\tSharp embedded,\n>18\tleshort\t\t109\t\tArca RISC,\n>18\tleshort\t\t110\t\tPKU-Unity Ltd.,\n>18\tleshort\t\t111\t\teXcess: 16/32/64-bit,\n>18\tleshort\t\t112\t\tIcera Deep Execution Processor,\n>18\tleshort\t\t113\t\tAltera Nios II,\n>18\tleshort\t\t114\t\tNatSemi CRX,\n>18\tleshort\t\t115\t\tMotorola XGATE,\n>18\tleshort\t\t116\t\tInfineon C16x/XC16x,\n>18\tleshort\t\t117\t\tRenesas M16C series,\n>18\tleshort\t\t118\t\tMicrochip dsPIC30F,\n>18\tleshort\t\t119\t\tFreescale RISC core,\n>18\tleshort\t\t120\t\tRenesas M32C series,\n>18\tleshort\t\t131\t\tAltium TSK3000 core,\n>18\tleshort\t\t132\t\tFreescale RS08,\n>18\tleshort\t\t134\t\tCyan Technology eCOG2,\n>18\tleshort\t\t135\t\tSunplus S+core7 RISC,\n>18\tleshort\t\t136\t\tNew Japan Radio (NJR) 24-bit DSP,\n>18\tleshort\t\t137\t\tBroadcom VideoCore III,\n>18\tleshort\t\t138\t\tLatticeMico32,\n>18\tleshort\t\t139\t\tSeiko Epson C17 family,\n>18\tleshort\t\t140\t\tTI TMS320C6000 DSP family,\n>18\tleshort\t\t141\t\tTI TMS320C2000 DSP family,\n>18\tleshort\t\t142\t\tTI TMS320C55x DSP family,\n>18\tleshort\t\t160\t\tSTMicroelectronics 64bit VLIW DSP,\n>18\tleshort\t\t161\t\tCypress M8C,\n>18\tleshort\t\t162\t\tRenesas R32C series,\n>18\tleshort\t\t163\t\tNXP TriMedia family,\n>18\tleshort\t\t164\t\tQUALCOMM DSP6,\n>18\tleshort\t\t165\t\tIntel 8051 and variants,\n>18\tleshort\t\t166\t\tSTMicroelectronics STxP7x family,\n>18\tleshort\t\t167\t\tAndes embedded RISC,\n>18\tleshort\t\t168\t\tCyan eCOG1X family,\n>18\tleshort\t\t169\t\tDallas MAXQ30,\n>18\tleshort\t\t170\t\tNew Japan Radio (NJR) 16-bit DSP,\n>18\tleshort\t\t171\t\tM2000 Reconfigurable RISC,\n>18\tleshort\t\t172\t\tCray NV2 vector architecture,\n>18\tleshort\t\t173\t\tRenesas RX family,\n>18\tleshort\t\t174\t\tMETA,\n>18\tleshort\t\t175\t\tMCST Elbrus,\n>18\tleshort\t\t176\t\tCyan Technology eCOG16 family,\n>18\tleshort\t\t177\t\tNatSemi CompactRISC,\n>18\tleshort\t\t178\t\tFreescale Extended Time Processing Unit,\n>18\tleshort\t\t179\t\tInfineon SLE9X,\n>18\tleshort\t\t180\t\tIntel L1OM,\n>18\tleshort\t\t181\t\tIntel K1OM,\n>18\tleshort\t\t183\t\tARM aarch64,\n>18\tleshort\t\t185\t\tAtmel 32-bit family,\n>18\tleshort\t\t186\t\tSTMicroeletronics STM8 8-bit,\n>18\tleshort\t\t187\t\tTilera TILE64,\n>18\tleshort\t\t188\t\tTilera TILEPro,\n>18\tleshort\t\t189\t\tXilinx MicroBlaze 32-bit RISC,\n>18\tleshort\t\t190\t\tNVIDIA CUDA architecture,\n>18\tleshort\t\t191\t\tTilera TILE-Gx,\n>18\tleshort\t\t197\t\tRenesas RL78 family,\n>18\tleshort\t\t199\t\tRenesas 78K0R,\n>18\tleshort\t\t200\t\tFreescale 56800EX,\n>18\tleshort\t\t201\t\tBeyond BA1,\n>18\tleshort\t\t202\t\tBeyond BA2,\n>18\tleshort\t\t203\t\tXMOS xCORE,\n>18\tleshort\t\t204\t\tMicrochip 8-bit PIC(r),\n>18\tleshort\t\t210\t\tKM211 KM32,\n>18\tleshort\t\t211\t\tKM211 KMX32,\n>18\tleshort\t\t212\t\tKM211 KMX16,\n>18\tleshort\t\t213\t\tKM211 KMX8,\n>18\tleshort\t\t214\t\tKM211 KVARC,\n>18\tleshort\t\t215\t\tPaneve CDP,\n>18\tleshort\t\t216\t\tCognitive Smart Memory,\n>18\tleshort\t\t217\t\tiCelero CoolEngine,\n>18\tleshort\t\t218\t\tNanoradio Optimized RISC,\n>18\tleshort\t\t243\t\tUCB RISC-V,\n>18\tleshort\t\t0x1057\t\tAVR (unofficial),\n>18\tleshort\t\t0x1059\t\tMSP430 (unofficial),\n>18\tleshort\t\t0x1223\t\tAdapteva Epiphany (unofficial),\n>18\tleshort\t\t0x2530\t\tMorpho MT (unofficial),\n>18\tleshort\t\t0x3330\t\tFR30 (unofficial),\n>18\tleshort\t\t0x3426\t\tOpenRISC (obsolete),\n>18\tleshort\t\t0x4688\t\tInfineon C166 (unofficial),\n>18\tleshort\t\t0x5441\t\tCygnus FRV (unofficial),\n>18\tleshort\t\t0x5aa5\t\tDLX (unofficial),\n>18\tleshort\t\t0x7650\t\tCygnus D10V (unofficial),\n>18\tleshort\t\t0x7676\t\tCygnus D30V (unofficial),\n>18\tleshort\t\t0x8217\t\tUbicom IP2xxx (unofficial),\n>18\tleshort\t\t0x8472\t\tOpenRISC (obsolete),\n>18\tleshort\t\t0x9025\t\tCygnus PowerPC (unofficial),\n>18\tleshort\t\t0x9026\t\tAlpha (unofficial),\n>18\tleshort\t\t0x9041\t\tCygnus M32R (unofficial),\n>18\tleshort\t\t0x9080\t\tCygnus V850 (unofficial),\n>18\tleshort\t\t0xa390\t\tIBM S/390 (obsolete),\n>18\tleshort\t\t0xabc7\t\tOld Xtensa (unofficial),\n>18\tleshort\t\t0xad45\t\txstormy16 (unofficial),\n>18\tleshort\t\t0xbaab\t\tOld MicroBlaze (unofficial),,\n>18\tleshort\t\t0xbeef\t\tCygnus MN10300 (unofficial),\n>18\tleshort\t\t0xdead\t\tCygnus MN10200 (unofficial),\n>18\tleshort\t\t0xf00d\t\tToshiba MeP (unofficial),\n>18\tleshort\t\t0xfeb0\t\tRenesas M32C (unofficial),\n>18\tleshort\t\t0xfeba\t\tVitesse IQ2000 (unofficial),\n>18\tleshort\t\t0xfebb\t\tNIOS (unofficial),\n>18\tleshort\t\t0xfeed\t\tMoxie (unofficial),\n>18\tdefault\t\tx\n>>18\tleshort\t\tx\t\t*unknown arch 0x%x*\n>20\tlelong\t\t0\t\tinvalid version\n>20\tlelong\t\t1\t\tversion 1\n\n0\tstring\t\t\\177ELF\t\tELF\n!:strength *2\n>4\tbyte\t\t0\t\tinvalid class\n>4\tbyte\t\t1\t\t32-bit\n>4\tbyte\t\t2\t\t64-bit\n>5\tbyte\t\t0\t\tinvalid byte order\n>5\tbyte\t\t1\t\tLSB\n>>0\tuse\t\telf-le\n>5\tbyte\t\t2\t\tMSB\n>>0\tuse\t\t\\^elf-le\n# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed\n# like proper ELF, but extracting the string had bad results.\n>4      byte            <0x80\n>>8\tstring\t\t>\\0\t\t(%s)\n>8\tstring\t\t\\0\n>>7\tbyte\t\t0\t\t(SYSV)\n>>7\tbyte\t\t1\t\t(HP-UX)\n>>7\tbyte\t\t2\t\t(NetBSD)\n>>7\tbyte\t\t3\t\t(GNU/Linux)\n>>7\tbyte\t\t4\t\t(GNU/Hurd)\n>>7\tbyte\t\t5\t\t(86Open)\n>>7\tbyte\t\t6\t\t(Solaris)\n>>7\tbyte\t\t7\t\t(Monterey)\n>>7\tbyte\t\t8\t\t(IRIX)\n>>7\tbyte\t\t9\t\t(FreeBSD)\n>>7\tbyte\t\t10\t\t(Tru64)\n>>7\tbyte\t\t11\t\t(Novell Modesto)\n>>7\tbyte\t\t12\t\t(OpenBSD)\n>8      string          \\2\n>>7     byte            13              (OpenVMS)\n>>7\tbyte\t\t97\t\t(ARM)\n>>7\tbyte\t\t255\t\t(embedded)\n\n#------------------------------------------------------------------------------\n# $File: encore,v 1.6 2009/09/19 16:28:09 christos Exp $\n# encore:  file(1) magic for Encore machines\n#\n# XXX - needs to have the byte order specified (NS32K was little-endian,\n# dunno whether they run the 88K in little-endian mode or not).\n#\n0\tshort\t\t0x154\t\tEncore\n>20\tshort\t\t0x107\t\texecutable\n>20\tshort\t\t0x108\t\tpure executable\n>20\tshort\t\t0x10b\t\tdemand-paged executable\n>20\tshort\t\t0x10f\t\tunsupported executable\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %d\n>22\tshort\t\t0\t\t-\n#>4\tdate\t\tx\t\tstamp %s\n0\tshort\t\t0x155\t\tEncore unsupported executable\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %d\n>22\tshort\t\t0\t\t-\n#>4\tdate\t\tx\t\tstamp %s\n\n#------------------------------------------------------------------------------\n# $File: epoc,v 1.8 2012/06/16 14:43:36 christos Exp $\n# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]\n# Stefan Praszalowicz <hpicollo@worldnet.fr> and Peter Breitenlohner <peb@mppmu.mpg.de>\n# Useful information for improving this file can be found at:\n# http://software.frodo.looijaard.name/psiconv/formats/Index.html\n#------------------------------------------------------------------------------\n0\tlelong\t\t0x10000037\tPsion Series 5\n>4\tlelong\t\t0x10000039\tfont file\n>4\tlelong\t\t0x1000003A\tprinter driver\n>4\tlelong\t\t0x1000003B\tclipboard\n>4\tlelong\t\t0x10000042\tmulti-bitmap image\n!:mime image/x-epoc-mbm\n>4\tlelong\t\t0x1000006A\tapplication information file\n>4\tlelong\t\t0x1000006D\n>>8\tlelong\t\t0x1000007D\tSketch image\n!:mime image/x-epoc-sketch\n>>8\tlelong\t\t0x1000007E\tvoice note\n>>8\tlelong\t\t0x1000007F\tWord file\n!:mime application/x-epoc-word\n>>8\tlelong\t\t0x10000085\tOPL program (TextEd)\n!:mime application/x-epoc-opl\n>>8\tlelong\t\t0x10000087\tComms settings\n>>8\tlelong\t\t0x10000088\tSheet file\n!:mime application/x-epoc-sheet\n>>8\tlelong\t\t0x100001C4\tEasyFax initialisation file\n>4\tlelong\t\t0x10000073\tOPO module\n!:mime application/x-epoc-opo\n>4\tlelong\t\t0x10000074\tOPL application\n!:mime application/x-epoc-app\n>4\tlelong\t\t0x1000008A\texported multi-bitmap image\n>4\tlelong\t\t0x1000016D\n>>8\tlelong\t\t0x10000087\tComms names\n\n0\tlelong\t\t0x10000041\tPsion Series 5 ROM multi-bitmap image\n\n0\tlelong\t\t0x10000050\tPsion Series 5\n>4\tlelong\t\t0x1000006D\tdatabase\n>>8\tlelong\t\t0x10000084\tAgenda file\n!:mime application/x-epoc-agenda\n>>8\tlelong\t\t0x10000086\tData file\n!:mime application/x-epoc-data\n>>8\tlelong\t\t0x10000CEA\tJotter file\n!:mime application/x-epoc-jotter\n>4\tlelong\t\t0x100000E4\tini file\n\n0\tlelong\t\t0x10000079\tPsion Series 5 binary:\n>4\tlelong\t\t0x00000000\tDLL\n>4\tlelong\t\t0x10000049\tcomms hardware library\n>4\tlelong\t\t0x1000004A\tcomms protocol library\n>4\tlelong\t\t0x1000005D\tOPX\n>4\tlelong\t\t0x1000006C\tapplication\n>4\tlelong\t\t0x1000008D\tDLL\n>4\tlelong\t\t0x100000AC\tlogical device driver\n>4\tlelong\t\t0x100000AD\tphysical device driver\n>4\tlelong\t\t0x100000E5\tfile transfer protocol\n>4\tlelong\t\t0x100000E5\tfile transfer protocol\n>4\tlelong\t\t0x10000140\tprinter definition\n>4\tlelong\t\t0x10000141\tprinter definition\n\n0\tlelong\t\t0x1000007A\tPsion Series 5 executable\n\n#------------------------------------------------------------------------------\n# $File: erlang,v 1.5 2009/09/19 16:28:09 christos Exp $\n# erlang:  file(1) magic for Erlang JAM and BEAM files\n# URL:  http://www.erlang.org/faq/x779.html#AEN812\n\n# OTP R3-R4\n0\tstring\t\\0177BEAM!\tOld Erlang BEAM file\n>6\tshort\t>0\t\t- version %d\n\n# OTP R5 and onwards\n0\tstring\tFOR1\n>8\tstring\tBEAM\t\tErlang BEAM file\n\n# 4.2 version may have a copyright notice!\n4\tstring\tTue\\ Jan\\ 22\\ 14:32:44\\ MET\\ 1991\tErlang JAM file - version 4.2\n79\tstring\tTue\\ Jan\\ 22\\ 14:32:44\\ MET\\ 1991\tErlang JAM file - version 4.2\n\n4\tstring\t1.0\\ Fri\\ Feb\\ 3\\ 09:55:56\\ MET\\ 1995\tErlang JAM file - version 4.3\n\n0\tbequad\t0x0000000000ABCDEF\tErlang DETS file\n\n#------------------------------------------------------------------------------\n# $File$\n# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)\n# Based on info from\n# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>\n0\tbelong\t9994\tESRI Shapefile\n>4\tbelong\t=0\n>8\tbelong\t=0\n>12\tbelong\t=0\n>16\tbelong\t=0\n>20\tbelong\t=0\n>28\tlelong\tx\tversion %d\n>24\tbelong\tx\tlength %d\n>32\tlelong\t=0\ttype Null Shape\n>32\tlelong\t=1\ttype Point\n>32\tlelong\t=3\ttype PolyLine\n>32\tlelong\t=5\ttype Polygon\n>32\tlelong\t=8\ttype MultiPoint\n>32\tlelong\t=11\ttype PointZ\n>32\tlelong\t=13\ttype PolyLineZ\n>32\tlelong\t=15\ttype PolygonZ\n>32\tlelong\t=18\ttype MultiPointZ\n>32\tlelong\t=21\ttype PointM\n>32\tlelong\t=23\ttype PolyLineM\n>32\tlelong\t=25\ttype PolygonM\n>32\tlelong\t=28\ttype MultiPointM\n>32\tlelong\t=31\ttype MultiPatch\n\n#------------------------------------------------------------------------------\n# $File$\n# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files\n# From Roger Leigh <roger@whinlatter.uklinux.net>\n0       string          FCS1.0          Flow Cytometry Standard (FCS) data, version 1.0\n0       string          FCS2.0          Flow Cytometry Standard (FCS) data, version 2.0\n0       string          FCS3.0          Flow Cytometry Standard (FCS) data, version 3.0\n\n#------------------------------------------------------------------------------\n# $File: filesystems,v 1.108 2015/01/01 17:43:47 christos Exp $\n# filesystems:  file(1) magic for different filesystems\n#\n0\tname\tpartid  \n>0\tubyte\t0x00\tUnused\n>0\tubyte\t0x01\t12-bit FAT\n>0\tubyte\t0x02\tXENIX /\n>0\tubyte\t0x03\tXENIX /usr\n>0\tubyte\t0x04\t16-bit FAT, less than 32M\n>0\tubyte\t0x05\textended partition\n>0\tubyte\t0x06\t16-bit FAT, more than 32M\n>0\tubyte\t0x07\tOS/2 HPFS, NTFS, QNX2, Adv. UNIX\n>0\tubyte\t0x08\tAIX or os, or etc.\n>0\tubyte\t0x09\tAIX boot partition or Coherent\n>0\tubyte\t0x0a\tO/2 boot manager or Coherent swap\n>0\tubyte\t0x0b\t32-bit FAT\n>0\tubyte\t0x0c\t32-bit FAT, LBA-mapped\n>0\tubyte\t0x0d\t7XXX, LBA-mapped\n>0\tubyte\t0x0e\t16-bit FAT, LBA-mapped\n>0\tubyte\t0x0f\textended partition, LBA-mapped\n>0\tubyte\t0x10\tOPUS\n>0\tubyte\t0x11 \tOS/2 DOS 12-bit FAT\n>0\tubyte\t0x12 \tCompaq diagnostics\n>0\tubyte\t0x14 \tOS/2 DOS 16-bit FAT <32M\n>0\tubyte\t0x16 \tOS/2 DOS 16-bit FAT >=32M\n>0\tubyte\t0x17 \tOS/2 hidden IFS\n>0\tubyte\t0x18 \tAST Windows swapfile\n>0\tubyte\t0x19 \tWillowtech Photon coS\n>0\tubyte\t0x1b \thidden win95 fat 32\n>0\tubyte\t0x1c \thidden win95 fat 32 lba\n>0\tubyte\t0x1d\thidden win95 fat 16 lba\n>0\tubyte\t0x20 \tWillowsoft OFS1\n>0\tubyte\t0x21 \treserved\n>0\tubyte\t0x23 \treserved\n>0\tubyte\t0x24\tNEC DOS\n>0\tubyte\t0x26 \treserved\n>0\tubyte\t0x31 \treserved\n>0\tubyte\t0x32\tAlien Internet Services NOS\n>0\tubyte\t0x33 \treserved\n>0\tubyte\t0x34 \treserved\n>0\tubyte\t0x35 \tJFS on OS2\n>0\tubyte\t0x36 \treserved\n>0\tubyte\t0x38 \tTheos\n>0\tubyte\t0x39 \tPlan 9, or Theos spanned\n>0\tubyte\t0x3a \tTheos ver 4 4gb partition\n>0\tubyte\t0x3b \tTheos ve 4 extended partition\n>0\tubyte\t0x3c \tPartitionMagic recovery\n>0\tubyte\t0x3d \tHidden Netware\n>0\tubyte\t0x40 \tVENIX 286 or LynxOS\n>0\tubyte\t0x41\tPReP\n>0\tubyte\t0x42\tlinux swap sharing DRDOS disk\n>0\tubyte\t0x43\tlinux sharing DRDOS disk\n>0\tubyte\t0x44\tGoBack change utility\n>0\tubyte\t0x45\tBoot US Boot manager\n>0\tubyte\t0x46\tEUMEL/Elan or Ergos 3\n>0\tubyte\t0x47\tEUMEL/Elan or Ergos 3\n>0\tubyte\t0x48\tEUMEL/Elan or Ergos 3\n>0\tubyte\t0x4a\tALFX/THIN filesystem for DOS\n>0\tubyte\t0x4c\tOberon partition\n>0\tubyte\t0x4d \tQNX4.x\n>0\tubyte\t0x4e \tQNX4.x 2nd part\n>0\tubyte\t0x4f \tQNX4.x 3rd part\n>0\tubyte\t0x50 \tDM (disk manager)\n>0\tubyte\t0x51 \tDM6 Aux1 (or Novell)\n>0\tubyte\t0x52 \tCP/M or Microport SysV/AT\n>0\tubyte\t0x53 \tDM6 Aux3\n>0\tubyte\t0x54\tDM6 DDO\n>0\tubyte\t0x55\tEZ-Drive (disk manager)\n>0\tubyte\t0x56\tGolden Bow (disk manager)\n>0\tubyte\t0x57\tDrive PRO\n>0\tubyte\t0x5c\tPriam Edisk (disk manager)\n>0\tubyte\t0x61\tSpeedStor\n>0\tubyte\t0x63\tGNU HURD or Mach or Sys V/386\n>0\tubyte\t0x64\tNovell Netware 2.xx or Speedstore\n>0\tubyte\t0x65\tNovell Netware 3.xx\n>0\tubyte\t0x66\tNovell 386 Netware\n>0\tubyte\t0x67\tNovell\n>0\tubyte\t0x68\tNovell\n>0\tubyte\t0x69\tNovell\n>0\tubyte\t0x70\tDiskSecure Multi-Boot\n>0\tubyte\t0x71\treserved\n>0\tubyte\t0x73\treserved\n>0\tubyte\t0x74\treserved\n>0\tubyte\t0x75\tPC/IX\n>0\tubyte\t0x76\treserved\n>0\tubyte\t0x77\tM2FS/M2CS partition\n>0\tubyte\t0x78\tXOSL boot loader filesystem\n>0\tubyte\t0x80\tMINIX until 1.4a\n>0\tubyte\t0x81\tMINIX since 1.4b\n>0\tubyte\t0x82\tLinux swap or Solaris\n>0\tubyte\t0x83\tLinux native\n>0\tubyte\t0x84\tOS/2 hidden C: drive\n>0\tubyte\t0x85\tLinux extended partition\n>0\tubyte\t0x86\tNT FAT volume set\n>0\tubyte\t0x87\tNTFS volume set or HPFS mirrored\n>0\tubyte\t0x8a\tLinux Kernel AiR-BOOT partition\n>0\tubyte\t0x8b\tLegacy Fault tolerant FAT32\n>0\tubyte\t0x8c\tLegacy Fault tolerant FAT32 ext\n>0\tubyte\t0x8d\tHidden free FDISK FAT12\n>0\tubyte\t0x8e\tLinux Logical Volume Manager\n>0\tubyte\t0x90\tHidden free FDISK FAT16\n>0\tubyte\t0x91\tHidden free FDISK DOS EXT\n>0\tubyte\t0x92\tHidden free FDISK FAT16 Big\n>0\tubyte\t0x93\tAmoeba filesystem\n>0\tubyte\t0x94\tAmoeba bad block table\n>0\tubyte\t0x95\tMIT EXOPC native partitions\n>0\tubyte\t0x97\tHidden free FDISK FAT32\n>0\tubyte\t0x98\tDatalight ROM-DOS Super-Boot\n>0\tubyte\t0x99\tMylex EISA SCSI\n>0\tubyte\t0x9a\tHidden free FDISK FAT16 LBA\n>0\tubyte\t0x9b\tHidden free FDISK EXT LBA\n>0\tubyte\t0x9f\tBSDI?\n>0\tubyte\t0xa0\tIBM Thinkpad hibernation\n>0\tubyte\t0xa1\tHP Volume expansion (SpeedStor)\n>0\tubyte\t0xa3\tHP Volume expansion (SpeedStor)\n>0\tubyte\t0xa4\tHP Volume expansion (SpeedStor)\n>0\tubyte\t0xa5\t386BSD partition type\n>0\tubyte\t0xa6\tOpenBSD partition type\n>0\tubyte\t0xa7\tNeXTSTEP 486\n>0\tubyte\t0xa8\tApple UFS\n>0\tubyte\t0xa9\tNetBSD partition type\n>0\tubyte\t0xaa\tOlivetty Fat12 1.44MB Service part\n>0\tubyte\t0xab\tApple Boot\n>0\tubyte\t0xae\tSHAG OS filesystem\n>0\tubyte\t0xaf\tApple HFS\n>0\tubyte\t0xb0\tBootStar Dummy\n>0\tubyte\t0xb1\treserved\n>0\tubyte\t0xb3\treserved\n>0\tubyte\t0xb4\treserved\n>0\tubyte\t0xb6\treserved\n>0\tubyte\t0xb7\tBSDI BSD/386 filesystem\n>0\tubyte\t0xb8\tBSDI BSD/386 swap\n>0\tubyte\t0xbb\tBoot Wizard Hidden\n>0\tubyte\t0xbe\tSolaris 8 partition type\n>0\tubyte\t0xbf\tSolaris partition type\n>0\tubyte\t0xc0 \tCTOS\n>0\tubyte\t0xc1 \tDRDOS/sec (FAT-12)\n>0\tubyte\t0xc2 \tHidden Linux\n>0\tubyte\t0xc3 \tHidden Linux swap\n>0\tubyte\t0xc4 \tDRDOS/sec (FAT-16, < 32M)\n>0\tubyte\t0xc5 \tDRDOS/sec (EXT)\n>0\tubyte\t0xc6 \tDRDOS/sec (FAT-16, >= 32M)\n>0\tubyte\t0xc7 \tSyrinx (Cyrnix?) or HPFS disabled\n>0\tubyte\t0xc8 \tReserved for DR-DOS 8.0+\n>0\tubyte\t0xc9 \tReserved for DR-DOS 8.0+\n>0\tubyte\t0xca \tReserved for DR-DOS 8.0+\n>0\tubyte\t0xcb \tDR-DOS 7.04+ Secured FAT32 CHS\n>0\tubyte\t0xcc \tDR-DOS 7.04+ Secured FAT32 LBA\n>0\tubyte\t0xcd\tCTOS Memdump\n>0\tubyte\t0xce \tDR-DOS 7.04+ FAT16X LBA\n>0\tubyte\t0xcf \tDR-DOS 7.04+ EXT LBA\n>0\tubyte\t0xd0 \tREAL/32 secure big partition\n>0\tubyte\t0xd1 \tOld Multiuser DOS FAT12\n>0\tubyte\t0xd4 \tOld Multiuser DOS FAT16 Small\n>0\tubyte\t0xd5 \tOld Multiuser DOS Extended\n>0\tubyte\t0xd6 \tOld Multiuser DOS FAT16 Big\n>0\tubyte\t0xd8 \tCP/M 86\n>0\tubyte\t0xdb \tCP/M or Concurrent CP/M\n>0\tubyte\t0xdd \tHidden CTOS Memdump\n>0\tubyte\t0xde \tDell PowerEdge Server utilities\n>0\tubyte\t0xdf \tDG/UX virtual disk manager\n>0\tubyte\t0xe0 \tSTMicroelectronics ST AVFS\n>0\tubyte\t0xe1 \tDOS access or SpeedStor 12-bit\n>0\tubyte\t0xe3 \tDOS R/O or Storage Dimensions\n>0\tubyte\t0xe4 \tSpeedStor 16-bit FAT < 1024 cyl.\n>0\tubyte\t0xe5\treserved\n>0\tubyte\t0xe6\treserved\n>0\tubyte\t0xeb \tBeOS\n>0\tubyte\t0xee\tGPT Protective MBR\n>0\tubyte\t0xef\tEFI system partition\n>0\tubyte\t0xf0 \tLinux PA-RISC boot loader\n>0\tubyte\t0xf1 \tSpeedStor or Storage Dimensions\n>0\tubyte\t0xf2 \tDOS 3.3+ Secondary\n>0\tubyte\t0xf3\treserved\n>0\tubyte\t0xf4\tSpeedStor large partition\n>0\tubyte\t0xf5\tPrologue multi-volumen partition\n>0\tubyte\t0xf6 \treserved\n>0\tubyte\t0xf9 \tpCache: ext2/ext3 persistent cache\n>0\tubyte\t0xfa \tBochs x86 emulator\n>0\tubyte\t0xfb \tVMware File System\n>0\tubyte\t0xfc \tVMware Swap\n>0\tubyte\t0xfd \tLinux RAID partition persistent sb\n>0\tubyte\t0xfe\tLANstep or IBM PS/2 IML\n>0\tubyte\t0xff \tXenix Bad Block Table\n\n0\tstring\t\\366\\366\\366\\366\tPC formatted floppy with no filesystem\n# Sun disk labels\n# From /usr/include/sun/dklabel.h:\n0774\tbeshort\t\t0xdabe\t\t\n# modified by Joerg Jenderek, because original test\n# succeeds for Cabinet archive dao360.dl_ with negative blocks\n>0770\tlong\t\t>0\t\tSun disk label\n>>0\tstring\t\tx\t\t'%s\n>>>31\tstring\t\t>\\0\t\t\\b%s\n>>>>63\tstring\t\t>\\0\t\t\\b%s\n>>>>>95\tstring\t\t>\\0\t\t\\b%s\n>>0\tstring\t\tx\t\t\\b'\n>>0734\tshort\t\t>0\t\t%d rpm,\n>>0736\tshort\t\t>0\t\t%d phys cys,\n>>0740\tshort\t\t>0\t\t%d alts/cyl,\n>>0746\tshort\t\t>0\t\t%d interleave,\n>>0750\tshort\t\t>0\t\t%d data cyls,\n>>0752\tshort\t\t>0\t\t%d alt cyls,\n>>0754\tshort\t\t>0\t\t%d heads/partition,\n>>0756\tshort\t\t>0\t\t%d sectors/track,\n>>0764\tlong\t\t>0\t\tstart cyl %d,\n>>0770\tlong\t\tx\t\t%d blocks\n# Is there a boot block written 1 sector in?\n>512    belong&077777777\t0600407\t\\b, boot block present\n\n# Joerg Jenderek: Smart Boot Manager backup file is 25 (MSDOS) or 41 (LINUX) byte header + first sectors of disk\n# (http://btmgr.sourceforge.net/docs/user-guide-3.html)\n0\t\tstring\tSBMBAKUP_\tSmart Boot Manager backup file\n>9\t\tstring\tx\t\t\\b, version %-5.5s\n>>14\t\tstring\t=_\t\t\n>>>15\t\tstring\tx\t\t%-.1s\n>>>>16\t\tstring\t=_\t\t\\b.\n>>>>>17\t\tstring\tx\t\t\\b%-.1s\n>>>>>>18\tstring\t=_\t\t\\b.\n>>>>>>>19\tstring\tx\t\t\\b%-.1s\n>>>22\t\tubyte\t0\t\t\n>>>>21\t\tubyte\tx\t\t\\b, from drive 0x%x\n>>>22\t\tubyte\t>0\t\t\n>>>>21\t\tstring\tx\t\t\\b, from drive %s\n>>>535\t\tsearch/17\t\\x55\\xAA\t\n>>>>&-512\tindirect\tx\t\\b; contains \n\n# updated by Joerg Jenderek at Nov 2012\n# DOS Emulator image is 128 byte, null right padded header + harddisc image\n0\tstring\tDOSEMU\\0\t\t\t\n>0x27E\tleshort\t0xAA55\t\t\t\n#offset is 128\n>>19\tubyte\t128\t\t\t\n>>>(19.b-1)\tubyte\t0x0\tDOS Emulator image\n>>>>7\tulelong\t>0\t\t\\b, %u heads\n>>>>11\tulelong\t>0\t\t\\b, %d sectors/track\n>>>>15\tulelong\t>0\t\t\\b, %d cylinders\n>>>>128\tindirect\tx\t\\b; contains \n\n# added by Joerg Jenderek at Nov 2012\n# http://www.thenakedpc.com/articles/v04/08/0408-05.html\n# Symantec (Peter Norton) Image.dat file consists of variable header, bootrecord, part of FAT and root directory data\n0\tstring\tPNCIHISK\\0\t\tNorton Utilities disc image data\n# real x86 boot sector with jump instruction\n>509\tsearch/1026\t\\x55\\xAA\\xeb\t\n>>&-1\tindirect\tx\t\t\\b; contains \n# http://file-extension.net/seeker/file_extension_dat\n0\tstring\tPNCIUNDO\t\tNorton Disk Doctor UnDo file\n#\n\n# DOS/MBR boot sector updated by Joerg Jenderek at Sep 2007,May 2011,2013\n# for any allowed sector sizes\n30\t\tsearch/481\t\\x55\\xAA\t\n# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)\n# DOS BPB information (70) and after DOS floppy (120) like in previous file version\n!:strength +65\n# for sector sizes < 512 Bytes\n>11\t\tuleshort\t<512\t\t\n>>(11.s-2)\tuleshort\t0xAA55\t\tDOS/MBR boot sector\n# for sector sizes with 512 or more Bytes\n>0x1FE\t\tleshort\t\t0xAA55\t\tDOS/MBR boot sector\n\n# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying\n# only for sector sizes with 512 or more Bytes\n0x1FE          leshort         0xAA55         \tDOS/MBR boot sector\n#\n# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version\n!:strength +65\n>2\t\tstring\t\tOSBS\t\tOS/BS MBR\n# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/\n# and http://en.wikipedia.org/wiki/Master_Boot_Record\n# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by \n# characteristic assembler instructions: xor ax,ax;mov ss,ax;mov sp,7c00\n>0\tsearch/2\t\\x33\\xc0\\x8e\\xd0\\xbc\\x00\\x7c\tMS-MBR\n# Microsoft Windows 95A and early ( http://thestarman.pcministry.com/asm/mbr/STDMBR.htm )\n# assembler instructions: mov si,sp;push ax;pop es;push ax;pop ds;sti;cld\n>>8\tubequad\t\t0x8bf45007501ffbfc\t\t\n# http://thestarman.pcministry.com/asm/mbr/200MBR.htm\n>>>0x16\tubyte\t\t0xF3\t\t\t\t\\b,DOS 2\n>>>>219\tregex\t\tAuthor\\ -\\ \t\t\tAuthor:\n# found \"David Litton\" , \"A Pehrsson  \"\n>>>>>&0\tstring\t\tx\t\t\t\t\"%s\"\n>>>0x16\tubyte\t\t0xF2\t\t\t\t\n# NEC MS-DOS 3.30 Rev. 3 . See http://thestarman.pcministry.com/asm/mbr/DOS33MBR.htm\n# assembler instructions: mov di,077c;cmp word ptrl[di],a55a;jnz\n>>>>0x22\tubequad\t0xbf7c07813d5aa575\t\t\\b,NEC 3.3\n# version MS-DOS 3.30 til MS-Windows 95A (WinVer=4.00.1111)\n>>>>0x22\tdefault\tx\t\t\t\t\\b,D0S version 3.3-7.0\n# error messages are printed by assembler instructions: mov si,06nn;...;int 10 (0xBEnn06;...)\n# where nn is string offset varying for different languages\n# \"Invalid partition table\"\t\t\t\tnn=0x8b for english version\n>>>>>(0x49.b)\tstring\t\tInvalid\\ partition\\ table\t\tenglish\n>>>>>(0x49.b)\tstring\t\tUng\\201ltige\\ Partitionstabelle\t\tgerman\n>>>>>(0x49.b)\tstring\t\tTable\\ de\\ partition\\ invalide\t\tfrench\n>>>>>(0x49.b)\tstring\t\tTabela\\ de\\ parti\\207ao\\ inv\\240lida\tportuguese\n>>>>>(0x49.b)\tstring\t\tTabla\\ de\\ partici\\242n\\ no\\ v\\240lida\tspanish\n>>>>>(0x49.b)\tstring\t\tTavola\\ delle\\ partizioni\\ non\\ valida\titalian\n>>>>>0x49\tubyte\t\t>0\t\t\tat offset 0x%x\n>>>>>>(0x49.b)\tstring\t\t>\\0\t\t\t\"%s\"\n# \"Error loading operating system\"\t\t\tnn=0xa3 for english version\n# \"Fehler beim Laden des Betriebssystems\"\t\tnn=0xa7 for german version\n# \"Erreur en chargeant syst\\212me d'exploitation\"\tnn=0xa7 for french version\n# \"Erro na inicializa\\207ao do sistema operacional\"\tnn=0xa7 for portuguese Brazilian version\n# \"Error al cargar sistema operativo\"\t\t\tnn=0xa8 for spanish version\n# \"Errore durante il caricamento del sistema operativo\"\tnn=0xae for italian version\n>>>>>0x74\tubyte\t\t>0\t\t\tat offset 0x%x\n>>>>>>(0x74.b)\tstring\t\t>\\0\t\t\t\"%s\"\n# \"Missing operating system\"\t\t\t\tnn=0xc2 for english version\n# \"Betriebssystem fehlt\"\t\t\t\tnn=0xcd for german version\n# \"Syst\\212me d'exploitation absent\"\t\t\tnn=0xd2 for french version\n# \"Sistema operacional nao encontrado\"\t\t\tnn=0xd4 for portuguese Brazilian version\n# \"Falta sistema operativo\"\t\t\t\tnn=0xca for spanish version\n# \"Sistema operativo mancante\"\t\t\t\tnn=0xe2 for italian version\n>>>>>0x79\tubyte\t\t>0\t\t\tat offset 0x%x\n>>>>>>(0x79.b)\tstring\t\t>\\0\t\t\t\"%s\"\n# Microsoft Windows 95B to XP (http://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)\n# assembler instructions: push ax;pop es;push  ax;pop ds;cld;mov si,7c1b\n>>8\tubequad\t\t0x5007501ffcbe1b7c\t\t\n# assembler instructions: rep;movsb;retf;mov si,07be;mov cl,04\n>>>24\t\tubequad\t0xf3a4cbbebe07b104\t\t9M\n# \"Invalid partition table\"\t\t\t\tnn=0x10F for english version\n# \"Ung\\201ltige Partitionstabelle\"\t\t\t\tnn=0x10F for german version\n# \"Table de partition erron\\202e\"\t\t\t\tnn=0x10F for french version\n# \"\\216\\257\\245\\340\\240\\346\\250\\256\\255\\255\\240\\357 \\341\\250\\341\\342\\245\\254\\240 \\255\\245 \\255\\240\\251\\244\\245\\255\\240\"\tnn=0x10F for russian version\n>>>>(0x3C.b+0x0FF)\tstring\tInvalid\\ partition\\ table\t\tenglish\n>>>>(0x3C.b+0x0FF)\tstring\tUng\\201ltige\\ Partitionstabelle\t\tgerman\n>>>>(0x3C.b+0x0FF)\tstring\tTable\\ de\\ partition\\ erron\\202e\tfrench\n>>>>(0x3C.b+0x0FF)\tstring\t\\215\\245\\257\\340\\240\\242\\250\\253\\354\\255\\240\\357\\ \\342\\240\\241\\253\\250\\346\\240\trussian\n>>>>0x3C\t\tubyte\tx\t\t\tat offset 0x%x+0xFF\n>>>>(0x3C.b+0x0FF)\tstring\t>\\0\t\t\t\"%s\"\n# \"Error loading operating system\"\t\t\tnn=0x127 for english version\n# \"Fehler beim Laden des Betriebssystems\"\t\tnn=0x12b for german version\n# \"Erreur lors du chargement du syst\\212me d'exploitation\"\tnn=0x12a for french version\n# \"\\216\\350\\250\\241\\252\\240 \\257\\340\\250 \\247\\240\\243\\340\\343\\247\\252\\245 \\256\\257\\245\\340\\240\\346\\250\\256\\255\\255\\256\\251 \\341\\250\\341\\342\\245\\254\\353\"\tnn=0x12d for russian version\n>>>>0xBD\t\tubyte\tx\t\t\tat offset 0x1%x\n>>>>(0xBD.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Missing operating system\"\t\t\t\tnn=0x146 for english version\n# \"Betriebssystem fehlt\"\t\t\t\tnn=0x151 for german version\n# \"Syst\\212me d'exploitation manquant\"\t\t\tnn=0x15e for french version\n# \"\\216\\257\\245\\340\\240\\346\\250\\256\\255\\255\\240\\357 \\341\\250\\341\\342\\245\\254\\240 \\255\\245 \\255\\240\\251\\244\\245\\255\\240\"\tnn=0x156 for russian version\n>>>>0xA9\t\tubyte\tx\t\t\tat offset 0x1%x\n>>>>(0xA9.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm\n# assembler instructions: rep;movsb;retf;mov BP,07be;mov cl,04\n>>>24\t\tubequad\t0xf3a4cbbdbe07b104\t\tXP\n# where xxyyzz are lower bits from offsets of error messages varying for different languages\n>>>>0x1B4\tubelong&0x00FFFFFF\t0x002c4463\tenglish\n>>>>0x1B4\tubelong&0x00FFFFFF\t0x002c486e\tgerman\n# \"Invalid partition table\"\t\t\t\txx=0x12C for english version\n# \"Ung\\201ltige Partitionstabelle\"\t\t\t\txx=0x12C for german version\n>>>>0x1b5\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b5.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Error loading operating system\"\t\t\tyy=0x144 for english version\n# \"Fehler beim Laden des Betriebssystems\"\t\tyy=0x148 for german version\n>>>>0x1b6\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b6.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Missing operating system\"\t\t\t\tzz=0x163 for english version\n# \"Betriebssystem nicht vorhanden\"\t\t\tzz=0x16e for german version\n>>>>0x1b7\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b7.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# Microsoft Windows Vista or 7\n# assembler instructions: ..;mov ds,ax;mov si,7c00;mov di,..00\n>>8\tubequad\t\t0xc08ed8be007cbf00\t\t\n# Microsoft Windows Vista (http://thestarman.pcministry.com/asm/mbr/VistaMBR.htm)\n# assembler instructions: jnz 0729;cmp ebx,\"TCPA\"\n>>>0xEC\t\tubequad\t0x753b6681fb544350\t\tVista\n# where xxyyzz are lower bits from offsets of error messages varying for different languages\n>>>>0x1B4\tubelong&0x00FFFFFF\t0x00627a99\tenglish\n#>>>>0x1B4\tubelong&0x00FFFFFF\t?\t\tgerman\n# \"Invalid partition table\"\t\t\t\txx=0x162 for english version\n# \"Ung\\201ltige Partitionstabelle\"\t\t\t\txx=0x1?? for german version\n>>>>0x1b5\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b5.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Error loading operating system\"\t\t\tyy=0x17a for english version\n# \"Fehler beim Laden des Betriebssystems\"\t\tyy= 0x1?? for german version\n>>>>0x1b6\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b6.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Missing operating system\"\t\t\t\tzz=0x199 for english version\n# \"Betriebssystem nicht vorhanden\"\t\t\tzz=0x1?? for german version\n>>>>0x1b7\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b7.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# Microsoft Windows 7 (http://thestarman.pcministry.com/asm/mbr/W7MBR.htm)\n# assembler instructions: cmp ebx,\"TCPA\";cmp\n>>>0xEC\t\tubequad\t0x6681fb5443504175\t\tWindows 7\n# where xxyyzz are lower bits from offsets of error messages varying for different languages\n>>>>0x1B4\tubelong&0x00FFFFFF\t0x00637b9a\tenglish\n#>>>>0x1B4\tubelong&0x00FFFFFF\t?\t\tgerman\n# \"Invalid partition table\"\t\t\t\txx=0x163 for english version\n# \"Ung\\201ltige Partitionstabelle\"\t\t\t\txx=0x1?? for german version\n>>>>0x1b5\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b5.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Error loading operating system\"\t\t\tyy=0x17b for english version\n# \"Fehler beim Laden des Betriebssystems\"\t\tyy=0x1?? for german version\n>>>>0x1b6\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b6.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# \"Missing operating system\"\t\t\t\tzz=0x19a for english version\n# \"Betriebssystem nicht vorhanden\"\t\t\tzz=0x1?? for german version\n>>>>0x1b7\tubyte\t\t>0\t\t\tat offset 0x1%x\n>>>>(0x1b7.b+0x100)\tstring\t>\\0\t\t\t\"%s\"\n# http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DiskSigs\n# http://en.wikipedia.org/wiki/MBR_disk_signature#ID\n>>0x1b8\tulelong\t\t>0\t\t\t\t\\b, disk signature 0x%-.4x\n# driveID/timestamp for Win 95B,98,98SE and ME. See http://thestarman.pcministry.com/asm/mbr/mystery.htm\n>>0xDA\tuleshort\t\t0\t\t\t\n>>>0xDC \tulelong\t\t>0\t\t\t\\b, created\n# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive\n>>>>0xDC\tubyte\t\tx\t\t\twith driveID 0x%x\n# hours, minutes and seconds \n>>>>0xDf\tubyte\t\tx\t\t\tat %x\n>>>>0xDe\tubyte\t\tx\t\t\t\\b:%x\n>>>>0xDd\tubyte\t\tx\t\t\t\\b:%x\n# special case for Microsoft MS-DOS 3.21 spanish\n# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov \n>0\tubequad\t\t0xfab830008ed0bc00\t\t\n# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov \n>>8\tubequad\t\t0x1fbfcb800008ed8\t\tMS-MBR,D0S version 3.21 spanish\n# Microsoft MBR IPL end\n\n# dr-dos with some upper-, lowercase variants\n>0x9D\tstring\tInvalid\\ partition\\ table$\t\n>>181\tstring\tNo\\ Operating\\ System$\t\t\n>>>201\tstring\tOperating\\ System\\ load\\ error$\t\\b, DR-DOS MBR, Version 7.01 to 7.03\n>0x9D\tstring\tInvalid\\ partition\\ table$\t\n>>181\tstring\tNo\\ operating\\ system$\t\t\n>>>201\tstring\tOperating\\ system\\ load\\ error$\t\\b, DR-DOS MBR, Version 7.01 to 7.03\n>342\tstring\tInvalid\\ partition\\ table$\t\n>>366\tstring\tNo\\ operating\\ system$\t\t\n>>>386\tstring\tOperating\\ system\\ load\\ error$\t\\b, DR-DOS MBR, version 7.01 to 7.03\n>295\tstring\tNEWLDR\\0\t\t\t\t\n>>302\tstring\tBad\\ PT\\ $\t\t\t\t\n>>>310\tstring\tNo\\ OS\\ $\t\t\t\t\n>>>>317\tstring\tOS\\ load\\ err$\t\t\t\t\n>>>>>329\tstring\tMoved\\ or\\ missing\\ IBMBIO.LDR\\n\\r\t\n>>>>>>358\tstring\tPress\\ any\\ key\\ to\\ continue.\\n\\r$\t\n>>>>>>>387\tstring\tCopyright\\ (c)\\ 1984,1998\t\n>>>>>>>>411\tstring\tCaldera\\ Inc.\\0\t\t\\b, DR-DOS MBR (IBMBIO.LDR)\n#\n# tests for different MS-DOS Master Boot Records (MBR) moved and merged\n#\n#>0x145\tstring\tDefault:\\ F\t\t\t\t\\b, FREE-DOS MBR\n#>0x14B\tstring\tDefault:\\ F\t\t\t\t\\b, FREE-DOS 1.0 MBR\n>0x145\tsearch/7\tDefault:\\ F\t\t\t\\b, FREE-DOS MBR\n#>>313\t\tstring\tF0\\ .\\ .\\ .\t\t\t\n#>>>322\t\tstring\tdisk\\ 1\t\t\t\t\n#>>>>382\tstring\tFAT3\t\t\t\t\n>64\tstring\tno\\ active\\ partition\\ found\t\n>>96\tstring\tread\\ error\\ while\\ reading\\ drive\t\\b, FREE-DOS Beta 0.9 MBR\n# Ranish Partition Manager http://www.ranish.com/part/\n>387\tsearch/4\t\\0\\ Error!\\r\t\t\t\n>>378\tsearch/7\tVirus! \t\t\t\t\n>>>397\tsearch/4\tBooting\\ \t\t\t\n>>>>408\tsearch/4\tHD1/\\0\t \t\t\t\\b, Ranish MBR (\n>>>>>416\tstring\tWriting\\ changes...\t\t\\b2.37\n>>>>>>438\tubyte\t\tx\t\t\t\\b,0x%x dots\n>>>>>>440\tubyte\t\t>0\t\t\t\\b,virus check\n>>>>>>441\tubyte\t\t>0\t\t\t\\b,partition %c\n#2.38,2.42,2.44\n>>>>>416\tstring\t!Writing\\ changes...\t\t\\b\n>>>>>>418\tubyte\t1\t\t\t\t\\bvirus check,\n>>>>>>419\tubyte\tx\t\t\t\t\\b0x%x seconds\n>>>>>>420\tubyte&0x0F\t>0\t\t\t\\b,partition\n>>>>>>>420\tubyte&0x0F\t<5\t\t\t\\b %x\n>>>>>>>420\tubyte&0x0F\t0Xf\t\t\t\\b ask\n>>>>>420\tubyte\t\tx\t\t\t\\b)\n#\n# SYSLINUX MBR moved\n# http://www.acronis.de/\n>362\tstring\tMBR\\ Error\\ \\0\\r\t\t\t\n>>376\tstring\tress\\ any\\ key\\ to\\ \t\t\t\n>>>392\tstring\tboot\\ from\\ floppy...\\0\t\t\t\\b, Acronis MBR\n# added by Joerg Jenderek\n# http://www.visopsys.org/\n# http://partitionlogic.org.uk/\n>309\tstring\tNo\\ bootable\\ partition\\ found\\r\t\n>>339\tstring\tI/O\\ Error\\ reading\\ boot\\ sector\\r\t\\b, Visopsys MBR\n>349\tstring\tNo\\ bootable\\ partition\\ found\\r\t\n>>379\tstring\tI/O\\ Error\\ reading\\ boot\\ sector\\r\t\\b, simple Visopsys MBR\n# bootloader, bootmanager\n>0x40\tstring\tSBML\t\t\t\t\n# label with 11 characters of FAT 12 bit filesystem\n>>43\tstring\tSMART\\ BTMGR\t\t\t\n>>>430\tstring\tSBMK\\ Bad!\\r\t\t\t\\b, Smart Boot Manager\n# OEM-ID not always \"SBM\"\n#>>>>3\tstrings\tSBM\t\t\t\t\n>>>>6\tstring\t>\\0                             \\b, version %s\n>382\tstring\tXOSLLOADXCF\t\t\t\\b, eXtended Operating System Loader\n>6\tstring\tLILO\t\t\t\t\\b, LInux i386 boot LOader\n>>120\tstring\tLILO\t\t\t\t\\b, version 22.3.4 SuSe\n>>172\tstring\tLILO\t\t\t\t\\b, version 22.5.8 Debian\n# updated by Joerg Jenderek at Oct 2008\n# variables according to grub-0.97/stage1/stage1.S or\n# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data\n# usual values are marked with comments to get only informations of strange GRUB loaders\n>342\t\tsearch/60\t\\0Geom\\0\t\n#>0\t\tulelong\t\tx\t\t%x=0x009048EB ,\t0x2a9048EB  0\n>>0x41\t\tubyte\t\t<2\t\t\n>>>0x3E\t\tubyte\t\t>2\t\t\\b; GRand Unified Bootloader\n# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 \n>>>>0x3E\tubyte\t\tx\t\t\\b, stage1 version 0x%x\n#If it is 0xFF, use a drive passed by BIOS\n>>>>0x40\tubyte\t\t<0xFF\t\t\\b, boot drive 0x%x\n# in most case 0,1,0x2e for GRUB 0.5.95\n>>>>0x41\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n>>>>0x42\tuleshort\t<0x8000\t\t\\b, stage2 address 0x%x\n#>>>>0x42\tuleshort\t=0x8000\t\t\\b, stage2 address 0x%x (usual)\n>>>>0x42\tuleshort\t>0x8000\t\t\\b, stage2 address 0x%x\n#>>>>0x44\tulelong\t\t=1\t\t\\b, 1st sector stage2 0x%x (default)\n>>>>0x44\tulelong\t\t>1\t\t\\b, 1st sector stage2 0x%x\n>>>>0x48\tuleshort\t<0x800\t\t\\b, stage2 segment 0x%x\n#>>>>0x48\tuleshort\t=0x800\t\t\\b, stage2 segment 0x%x (usual)\n>>>>0x48\tuleshort\t>0x800\t\t\\b, stage2 segment 0x%x\n>>>>402\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>394\tstring\tstage1\t\t\t\\b, GRUB version 0.5.95\n>>>>382\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>376\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.93 or 1.94\n>>>>383\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>377\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.94\n>>>>385\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>379\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.95 or 0.96\n>>>>391\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>385\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.97\n# unknown version\n>>>343\t\tstring\tGeom\\0Read\\0\\ Error\\0\t\n>>>>321\t\tstring\tLoading\\ stage1.5\t\\b, GRUB version x.y\n>>>380\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>374\t\tstring\tGRUB\\ \\0\t\t\\b, GRUB version n.m\n# SYSLINUX bootloader moved\n>395\tstring\tchksum\\0\\ ERROR!\\0\t\t\\b, Gujin bootloader\n# http://www.bcdwb.de/bcdw/index_e.htm\n>3\tstring\tBCDL\t\t\t\t\n>>498\tstring\tBCDL\\ \\ \\ \\ BIN\t\t\t\\b, Bootable CD Loader (1.50Z)\n# mbr partition table entries updated by Joerg Jenderek at Sep 2013\n# skip Norton Utilities disc image data\n>3\t\tstring\t\t!IHISK\t\t\n# skip Linux style boot sector starting with assember instructions mov 0x7c0,ax;\n>>0\t\tbelong\t\t!0xb8c0078e\t\t\n# not Linux kernel \n>>>514\t\tstring\t\t!HdrS\t\t\t\n# not BeOS\n>>>>422\t\tstring\t\t!Be\\ Boot\\ Loader\t\n>>>>>32769\tstring    CD001\n>>>>>>0\tuse cdrom\n# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr \n>>>>>0\t\tubelong&0xFD000000\t=0xE9000000\t\n# AdvanceMAME mbr\n>>>>>>(1.b+2)\tubequad\t\t0xfa31c08ed88ec08e\t\n>>>>>>>446\tuse\t\tpartition-table\n# mbr, Norton Utilities disc image data, or 2nd,etc. sector of x86 bootloader\n>>>>>0\t\tubelong&0xFD000000\t!0xE9000000\t\n# skip FSInfosector\n>>>>>>0\t\tstring\t\t!RRaA\t\t\n# skip 3rd sector of MS x86 bootloader with assember instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,\n# http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm\n>>>>>>>0\tubequad\t\t!0xfa660fb64610668b\t\n# skip 13rd sector of MS x86 bootloader\n>>>>>>>>0\tubequad\t\t!0x660fb64610668b4e\t\n# skip sector starting with DOS new line\n>>>>>>>>>0\tstring\t\t!\\r\\n\t\t\t\n# allowed active flag 0,80h-FFh\n>>>>>>>>>>446\tubyte\t\t0\t\t\t\n>>>>>>>>>>>446\tuse\t\tpartition-table\n>>>>>>>>>>446\tubyte\t\t>0x7F\t\t\t\n>>>>>>>>>>>446\tuse\t\tpartition-table\n# TODO: test for extended bootrecord (ebr) moved and merged with mbr partition table entries\n# mbr partition table entries end\n# http://www.acronis.de/\n#FAT label=ACRONIS\\ SZ\n#OEM-ID=BOOTWIZ0\n>442\tstring\tNon-system\\ disk,\\ \t\n>>459\tstring\tpress\\ any\\ key...\\x7\\0\t\t\\b, Acronis Startup Recovery Loader\n# updated by Joerg Jenderek at Nov 2012, Sep 2013\n# DOS names like F11.SYS or BOOTWIZ.SYS are 8 right space padded bytes+3 bytes\n# display 1 space\n>>>447\tubyte\tx\t\t\\b \n>>>477\tuse\tDOS-filename\n#\n>185\tstring\tFDBOOT\\ Version\\ \t\t\t\n>>204\tstring\t\\rNo\\ Systemdisk.\\ \t\t\t\n>>>220\tstring\tBooting\\ from\\ harddisk.\\n\\r\t\t\n>>>245\tstring\tCannot\\ load\\ from\\ harddisk.\\n\\r\t\n>>>>273 string\tInsert\\ Systemdisk\\ \t\t\t\n>>>>>291 string and\\ press\\ any\\ key.\\n\\r\t\t\\b, FDBOOT harddisk Bootloader\n>>>>>>200 string\t>\\0                             \\b, version %-3s\n>242\tstring\tBootsector\\ from\\ C.H.\\ Hochst\\204\t\n# http://freecode.com/projects/dosfstools\tdosfstools-n.m/src/mkdosfs.c\n# updated by Joerg Jenderek at Nov 2012. Use search directive with offset instead of string\n# skip name \"C.H. Hochstaetter\" partly because it is sometimes written without umlaut\n>242\tsearch/127\tBootsector\\ from\\ C.H.\\ Hochst\t\t\t\n>>278\tsearch/127\tNo\\ Systemdisk.\\ Booting\\ from\\ harddisk\t\n# followed by variants with point,CR-NL or NL-CR\n>>>208\tsearch/261\tCannot\\ load\\ from\\ harddisk.\t\t\t\n# followed by variants CR-NL or NL-CR\n>>>>236\tsearch/235\tInsert\\ Systemdisk\\ and\\ press\\ any\\ key.\t\n# followed by variants with point,CR-NL or NL-CR\n>>>>>180\tsearch/96\tDisk\\ formatted\\ with\\ WinImage\\ \t\\b, WinImage harddisk Bootloader\n# followed by string like \"6.50 (c) 1993-2004 Gilles Vollant\"\n>>>>>>&0\tstring\t\tx \t\t\t\t\t\\b, version %-4.4s\n>(1.b+2)\tubyte\t\t0xe\t\t\t\n>>(1.b+3)\tubyte\t\t0x1f\t\t\t\n>>>(1.b+4)\tubyte\t\t0xbe\t\t\t\n# message offset found at (1.b+5) is 0x77 for FAT32 or 0x5b for others\n>>>>(1.b+5)\tubyte&0xd3\t0x53\t\t\t\n>>>>>(1.b+6)\tubyte\t\t0x7c\t\t\t\n# assembler instructions: lodsb;and al,al;jz 0xb;push si;mov ah,\n>>>>>>(1.b+7)\tubyte\t\t0xac\t\t\t\n>>>>>>>(1.b+8)\tubyte\t\t0x22\t\t\t\n>>>>>>>>(1.b+9)\tubyte\t\t0xc0\t\t\t\n>>>>>>>>>(1.b+10)\tubyte\t0x74\t\t\t\n>>>>>>>>>>(1.b+11)\tubyte\t0x0b\t\t\t\n>>>>>>>>>>>(1.b+12)\tubyte\t0x56\t\t\t\n>>>>>>>>>>>>(1.b+13)\tubyte\t0xb4\t\t\t\\b, mkdosfs boot message display\n# FAT1X version\n>>>>>>>>>>>>>(1.b+5)\tubyte\t0x5b\t\t\t\n>>>>>>>>>>>>>>0x5b\tstring\t>\\0\t\t\t\"%-s\"\n# FAT32 version\n>>>>>>>>>>>>>(1.b+5)\tubyte\t0x77\t\t\t\n>>>>>>>>>>>>>>0x77\tstring\t>\\0\t\t\t\"%-s\"\n>214\tstring\tPlease\\ try\\ to\\ install\\ FreeDOS\\ \t\\b, DOS Emulator boot message display\n#>>244\tstring\tfrom\\ dosemu-freedos-*-bin.tgz\\r\t\n#>>>170\tstring\tSorry,\\ could\\ not\\ load\\ an\\ \t\t\n#>>>>195\tstring\toperating\\ system.\\r\\n\t\t\n#\n>103\tstring\tThis\\ is\\ not\\ a\\ bootable\\ disk.\\ \t\n>>132\tstring\tPlease\\ insert\\ a\\ bootable\\ \t\t\n>>>157\tstring\tfloppy\\ and\\r\\n\t\t\t\t\n>>>>169\tstring\tpress\\ any\\ key\\ to\\ try\\ again...\\r\t\\b, FREE-DOS message display\n#\n>66\tstring\tSolaris\\ Boot\\ Sector    \t\t\n>>99\tstring\tIncomplete\\ MDBoot\\ load.\t\t\n>>>89\tstring\tVersion \t\t\t\t\\b, Sun Solaris Bootloader\n>>>>97\tbyte\tx\t\t\t\t\tversion %c\n#\n>408\tstring\tOS/2\\ !!\\ SYS01475\\r\\0\t\t\t\n>>429\tstring\tOS/2\\ !!\\ SYS02025\\r\\0\t\t\t\n>>>450\tstring\tOS/2\\ !!\\ SYS02027\\r\\0\t\t\t\n>>>469\tstring\tOS2BOOT\\ \\ \\ \\ \t\t\t\t\\b, IBM OS/2 Warp bootloader\n#\n>409\tstring\tOS/2\\ !!\\ SYS01475\\r\\0\t\t\t\n>>430\tstring\tOS/2\\ !!\\ SYS02025\\r\\0\t\t\t\n>>>451\tstring\tOS/2\\ !!\\ SYS02027\\r\\0\t\t\t\n>>>470\tstring\tOS2BOOT\\ \\ \\ \\ \t\t\t\t\\b, IBM OS/2 Warp Bootloader\n>112\t\tstring\tThis\\ disk\\ is\\ not\\ bootable\\r\t\t\t\n>>142\t\tstring\tIf\\ you\\ wish\\ to\\ make\\ it\\ bootable\t\t\n>>>176\t\tstring\trun\\ the\\ DOS\\ program\\ SYS\\  \t\t\t\n>>>200\t\tstring\tafter\\ the\\r\t\t\t\t\t\n>>>>216\t\tstring\tsystem\\ has\\ been\\ loaded\\r\\n\t\t\t\n>>>>>242\tstring\tPlease\\ insert\\ a\\ DOS\\ diskette\\ \t\t\n>>>>>271\tstring\tinto\\r\\n\\ the\\ drive\\ and\\ \t\t\t\n>>>>>>292\tstring\tstrike\\ any\\ key...\\0\t\t\\b, IBM OS/2 Warp message display\n# XP\n>430\tstring\tNTLDR\\ is\\ missing\\xFF\\r\\n\t\t\n>>449\tstring\tDisk\\ error\\xFF\\r\\n\t\t\t\n>>>462\tstring\tPress\\ any\\ key\\ to\\ restart\\r\t\t\\b, Microsoft Windows XP Bootloader\n# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>430\tstring\tNTLDR\\ nicht\\ gefunden\\xFF\\r\\n\t\t\n>>453\tstring\tDatentr\\204gerfehler\\xFF\\r\\n\t\t\n>>>473\tstring\tNeustart\\ mit\\ beliebiger\\ Taste\\r\t\\b, Microsoft Windows XP Bootloader (german)\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n# offset variant\n>>>>379\tstring\t\\0\t\t\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n#\n>430\tstring\tNTLDR\\ fehlt\\xFF\\r\\n\t\t\t\n>>444\tstring\tDatentr\\204gerfehler\\xFF\\r\\n\t\t\n>>>464\tstring\tNeustart\\ mit\\ beliebiger\\ Taste\\r\t\\b, Microsoft Windows XP Bootloader (2.german)\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n# variant\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>430\tstring\tNTLDR\\ fehlt\\xFF\\r\\n\t\t\t\n>>444\tstring\tMedienfehler\\xFF\\r\\n\t\t\t\n>>>459\tstring\tNeustart:\\ Taste\\ dr\\201cken\\r\t\t\\b, Microsoft Windows XP Bootloader (3.german)\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n# variant\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n>430\tstring\tDatentr\\204ger\\ entfernen\\xFF\\r\\n\t\n>>454\tstring\tMedienfehler\\xFF\\r\\n\t\t\t\n>>>469\tstring\tNeustart:\\ Taste\\ dr\\201cken\\r\t\t\\b, Microsoft Windows XP Bootloader (4.german)\n>>>>379\t\tstring\t\t\\0\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n# variant\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n\n#>3\tstring\tNTFS\\ \\ \\ \\ \t\t\t\t\n>389\tstring\tFehler\\ beim\\ Lesen\\ \n>>407\tstring\tdes\\ Datentr\\204gers\n>>>426\tstring\tNTLDR\\ fehlt\t\t\t\t\n>>>>440\tstring\tNTLDR\\ ist\\ komprimiert\n>>>>>464 string\tNeustart\\ mit\\ Strg+Alt+Entf\\r\t\t\\b, Microsoft Windows XP Bootloader NTFS (german)\n#>3\tstring\tNTFS\\ \\ \\ \\ \t\t\t\t\n>313\tstring\tA\\ disk\\ read\\ error\\ occurred.\\r\n>>345\tstring\tA\\ kernel\\ file\\ is\\ missing\\ \t\n>>>370\tstring\tfrom\\ the\\ disk.\\r\t\t\n>>>>484\tstring\tNTLDR\\ is\\ compressed\t\t\n>>>>>429 string\tInsert\\ a\\ system\\ diskette\\ \t\n>>>>>>454 string and\\ restart\\r\\nthe\\ system.\\r\t\t\\b, Microsoft Windows XP Bootloader NTFS\n# DOS loader variants different languages,offsets\n>472\tubyte&0xDF\t>0\n>>389\tstring\tInvalid\\ system\\ disk\\xFF\\r\\n\t\t\n>>>411\tstring\tDisk\\ I/O\\ error\t\t\t\n>>>>428\tstring\tReplace\\ the\\ disk,\\ and\\ \t\t\n>>>>>455 string\tpress\\ any\\ key\t\t\t\t\\b, Microsoft Windows 98 Bootloader\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\t\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>479 string\t\tx \t\t\t\\b%-.1s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>390\tstring\tInvalid\\ system\\ disk\\xFF\\r\\n\t\t\n>>>412\tstring\tDisk\\ I/O\\ error\\xFF\\r\\n\t\t\n>>>>429\tstring\tReplace\\ the\\ disk,\\ and\\ \t\t\n>>>>>451 string\tthen\\ press\\ any\\ key\\r\t\t\t\\b, Microsoft Windows 98 Bootloader\n>>388\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>410\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>427\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>453 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (german)\n#WINBOOT.SYS only not spaces (0xDF)\n>>>>>>497\tubyte&0xDF\t>0\t\t\t\n>>>>>>>497\tstring\t\tx \t\t\t%-.5s\n>>>>>>>>502\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>502\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>>>504 string\t\tx \t\t\t\\b%-.1s\n>>>>>>505\tubyte&0xDF\t>0\t\t\t\n>>>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\tor\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>479 string\t\tx \t\t\t\\b%-.1s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>390\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>412\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>429\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>455 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (German)\n#WINBOOT.SYS only not spaces (0xDF)\n>>>>>>497\tubyte&0xDF\t>0\t\t\t\n>>>>>>>497\tstring\t\tx \t\t\t%-.7s\n>>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>505\tubyte&0xDF\t>0\t\t\t\n>>>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\tor\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.6s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>389\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>411\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>428\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>454 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (GERMAN)\n# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes\n>>>>>>472\tstring\t\tx \t\t\t%-.2s\n>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>479\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>>>490\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>490\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n>479\tubyte&0xDF\t>0\n>>416\tstring\tKein\\ System\\ oder\\ \t\t\t\n>>>433\tstring\tLaufwerksfehler\t\t\t\t\n>>>>450\tstring\tWechseln\\ und\\ Taste\\ dr\\201cken\t\\b, Microsoft DOS Bootloader (german)\n#IO.SYS\n>>>>>479\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>481\tubyte&0xDF\t>0\t\t\t\n>>>>>>>481\tstring\t\tx \t\t\t\\b%-.6s\n>>>>>487\tubyte&0xDF\t>0\t\t\t\n>>>>>>487\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>490\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>490\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>495\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>495\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>498\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>498\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>376\tsearch/41\tNon-System\\ disk\\ or\\ \t\t\n>>395\tsearch/41\tdisk\\ error\\r\t\t\t\n>>>407\tsearch/41\tReplace\\ and\\ \t\t\t\n>>>>419\tsearch/41\tpress\\ \t\t\t\t\\b,\n>>>>419\tsearch/41\tstrike\\ \t\t\t\\b, old\n>>>>426\tsearch/41\tany\\ key\\ when\\ ready\\r\t\tMS or PC-DOS bootloader\n#449\t\t\tDisk\\ Boot\\ failure\\r\t\tMS 3.21\n#466\t\t\tBoot\\ Failure\\r\t\t\tMS 3.30\n>>>>>468 search/18\t\\0\t\t\t\t\n#IO.SYS,IBMBIO.COM\n>>>>>>&0\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>&-20\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.4s\n>>>>>>>>>&-16\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>&8\tubyte&0xDF\t>0\t\t\t\\b.\n>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.3s\n#MSDOS.SYS,IBMDOS.COM\n>>>>>>&11\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>&-6\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>&-5\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>>&7\tubyte&0xDF\t>0\t\t\t\\b.\n>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.3s\n>441\tstring\tCannot\\ load\\ from\\ harddisk.\\n\\r\n>>469\tstring\tInsert\\ Systemdisk\\ \t\t\t\n>>>487\tstring\tand\\ press\\ any\\ key.\\n\\r\t\t\\b, MS (2.11) DOS bootloader\n#>43\tstring\t\\224R-LOADER\\ \\ SYS\t\t\t=label\t\t\t\t\t\n>54\tstring\tSYS\n>>324\tstring\tVASKK\n>>>495\tstring\tNEWLDR\\0\t\t\t\t\\b, DR-DOS Bootloader (LOADER.SYS)\n#\n>98\tstring\tPress\\ a\\ key\\ to\\ retry\\0\\r\t\t\n>>120\tstring\tCannot\\ find\\ file\\ \\0\\r\t\t\n>>>139\tstring\tDisk\\ read\\ error\\0\\r\t\t\t\n>>>>156\tstring\tLoading\\ ...\\0\t\t\t\t\\b, DR-DOS (3.41) Bootloader\n#DRBIOS.SYS\n>>>>>44\t\tubyte&0xDF\t>0\t\t\t\n>>>>>>44\tstring\t\tx\t\t\t\\b %-.6s\n>>>>>>>50\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>50\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>52\tubyte&0xDF\t>0\t\t\t\n>>>>>>>52\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>70\tstring\tIBMBIO\\ \\ COM\t\t\t\t\n>>472\tstring\tCannot\\ load\\ DOS!\\ \t\t\t\n>>>489\tstring\tAny\\ key\\ to\\ retry\t\t\t\\b, DR-DOS Bootloader\n>>471\tstring\tCannot\\ load\\ DOS\\ \t\t\t\n>>487\tstring\tpress\\ key\\ to\\ retry\t\t\t\\b, Open-DOS Bootloader\n#??\n>444\tstring\tKERNEL\\ \\ SYS\t\t\t\t\t\n>>314\tstring\tBOOT\\ error!\t\t\t\t\\b, FREE-DOS Bootloader\n>499\tstring\tKERNEL\\ \\ SYS\t\t\t\t\n>>305\tstring\tBOOT\\ err!\\0\t\t\t\t\\b, Free-DOS Bootloader\n>449\tstring\tKERNEL\\ \\ SYS\t\t\t\t\n>>319\tstring\tBOOT\\ error!\t\t\t\t\\b, FREE-DOS 0.5 Bootloader\n#\n>449\tstring\tLoading\\ FreeDOS\t\t\t\n>>0x1AF\t\tulelong\t\t>0\t\t\t\\b, FREE-DOS 0.95,1.0 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>331\tstring\tError!.0\t\t\t\t\\b, FREE-DOS 1.0 bootloader\n#\n>125\tstring\tLoading\\ FreeDOS...\\r\t\t\t\n>>311\tstring\tBOOT\\ error!\\r\t\t\t\t\\b, FREE-DOS bootloader\n>>>441\t\tubyte&0xDF\t>0\t\t\t\n>>>>441\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>447\tubyte&0xDF\t>0\t\t\t\n>>>>>>447\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>448\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>448\tstring\t\tx \t\t\t\\b%-.1s\n>>>>449\t\tubyte&0xDF\t>0\t\t\t\n>>>>>449\tstring\t\tx \t\t\t\\b.%-.3s\n>124\tstring\tFreeDOS\\0\t\t\t\t\n>>331\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS BETa 0.9 Bootloader\n# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>>333\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS BEta 0.9 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>>334\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS Beta 0.9 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>336\tstring\tError!\\ \t\t\t\t\n>>343\tstring\tHit\\ a\\ key\\ to\\ reboot.\t\t\\b, FREE-DOS Beta 0.9sr1 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n# added by Joerg Jenderek\n# http://www.visopsys.org/\n# http://partitionlogic.org.uk/\n# OEM-ID=Visopsys\n>478\t\tulelong\t0\t\t\t\t\t\n>>(1.b+326)\tstring\tI/O\\ Error\\ reading\\ \t\t\t\n>>>(1.b+344)\tstring\tVisopsys\\ loader\\r\t\t\t\n>>>>(1.b+361)\tstring\tPress\\ any\\ key\\ to\\ continue.\\r\t\\b, Visopsys loader\n# http://alexfru.chat.ru/epm.html#bootprog\n>494\tubyte\t>0x4D\t\t\t\t\t\n>>495\tstring\t>E\t\t\t\t\t\n>>>495\tstring\t<S\t\t\t\t\t\n#OEM-ID is not reliable\n>>>>3\tstring\tBootProg\t\t\t\t\n# It just looks for a program file name at the root directory\n# and loads corresponding file with following execution.\n# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes\n>>>>499\t\t\tubyte&0xDF\t>0\t\t\\b, COM/EXE Bootloader \n>>>>>499\t\tuse\t\tDOS-filename\n#If the boot sector fails to read any other sector,\n#it prints a very short message (\"RE\") to the screen and hangs the computer.\n#If the boot sector fails to find needed program in the root directory,\n#it also hangs with another message (\"NF\").\n>>>>>492\t\tstring\t\tRENF\t\t\\b, FAT (12 bit)\n>>>>>495\t\tstring\t\tRENF\t\t\\b, FAT (16 bit)\n#If the boot sector fails to read any other sector,\n#it prints a very short message (\"RE\") to the screen and hangs the computer.\n# x86 bootloader end\n\n# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO\n# and http://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector\n>0\t\tstring\t\tRRaA\t\t\n>>0x1E4\t\tstring\t\trrAa\t\t\\b, FSInfosector\n#>>0x1FC\tuleshort\t=0\t\tSHOULD BE ZERO\n>>>0x1E8\tulelong\t\t<0xffffffff\t\\b, %u free clusters\n>>>0x1EC\tulelong\t\t<0xffffffff\t\\b, last allocated cluster %u\n\n# updated by Joerg Jenderek at Sep 2007\n>3\tubyte\t0\t\t\t\n#no active flag\n>>446\tubyte\t0\t\t\t\n# partition 1 not empty\n>>>450\tubyte\t>0\t\t\t\n# partitions 3,4 empty\n>>>>482\t\tubyte\t0\t\t\t\n>>>>>498\tubyte\t0\t\t\t\n# partition 2 ID=0,5,15\n>>>>>>466\tubyte\t<0x10\t\t\t\n>>>>>>>466\tubyte\t0x05\t\t\t\\b, extended partition table\n>>>>>>>466\tubyte\t0x0F\t\t\t\\b, extended partition table (LBA)\n>>>>>>>466\tubyte\t0x0\t\t\t\\b, extended partition table (last)\n\n# DOS x86 sector separated and moved from \"DOS/MBR boot sector\" by Joerg Jenderek at May 2011\n\n>0x200\tlelong\t0x82564557\t\t\\b, BSD disklabel\n\n# by Joerg Jenderek at Apr 2013\n#\tPrint the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension\n#\tlike IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS\n0\tname\t\t\tDOS-filename\n# space=0x20 (00100000b) means empty \n>0\t\t\tubyte&0xDF\t>0\t\t\n>>0\t\t\tubyte\t\tx \t\t\\b%c\n>>>1\t\t\tubyte&0xDF\t>0\t\t\n>>>>1\t\t\tubyte\t\tx \t\t\\b%c\n>>>>>2\t\t\tubyte&0xDF\t>0\t\t\n>>>>>>2\t\t\tubyte\t\tx \t\t\\b%c\n>>>>>>>3\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>3\t\tubyte\t\tx \t\t\\b%c\n>>>>>>>>>4\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>4\t\tubyte\t\tx \t\t\\b%c\n>>>>>>>>>>>5\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>5\t\tubyte\t\tx \t\t\\b%c\n>>>>>>>>>>>>>6\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>6\t\tubyte\t\tx \t\t\\b%c\n>>>>>>>>>>>>>>>7\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>>7\tubyte\t\tx \t\t\\b%c\n# DOS filename extension\n>>8\t\t\tubyte&0xDF\t>0\t\t\\b.\n>>>8\t\t\tubyte\t\tx \t\t\\b%c\n>>>>9\t\t\tubyte&0xDF\t>0\t\t\n>>>>>9\t\t\tubyte\t\tx \t\t\\b%c\n>>>>>>10\t\tubyte&0xDF\t>0\t\t\n>>>>>>>10\t\tubyte\t\tx \t\t\\b%c\n#\tPrint 2 following DOS filenames from directory entry form\n#\tlike IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com\n0\tname\t\t\t2xDOS-filename\n# display 1 space\n>0\t\t\tubyte\t\tx\t\t\\b \n>0\t\t\tuse\t\tDOS-filename\n>11\t\t\tubyte\t\tx\t\t\\b+\n>11\t\t\tuse\t\tDOS-filename\n\n# http://en.wikipedia.org/wiki/Master_boot_record#PTE\n# display standard partition table\n0\tname\t\t\t\tpartition-table\n#>0\t\tubyte\t\tx\tPARTITION-TABLE\n# test and display 1st til 4th partition table entry\n>0\t\tuse\t\t\tpartition-entry-test\n>16\t\tuse\t\t\tpartition-entry-test\n>32\t\tuse\t\t\tpartition-entry-test\n>48\t\tuse\t\t\tpartition-entry-test\n#\t\ttest for entry of partition table\n0\tname\t\t\t\tpartition-entry-test\n# partition type ID > 0\n>4\t\tubyte\t\t>0\n# active flag 0\n>>0\t\tubyte\t\t0\t\n>>>0\t\tuse\t\tpartition-entry\n# active flag 0x80, 0x81, ... \n>>0\t\tubyte\t\t>0x7F\t\n>>>0\t\tuse\t\tpartition-entry\n#\t\tPrint entry of partition table\n0\tname\t\t\t\tpartition-entry\n# partition type ID > 0\n>4\t\tubyte\t\t>0\t\\b; partition\n>>64\t\tleshort\t\t0xAA55\t1\n>>48\t\tleshort\t\t0xAA55\t2\n>>32\t\tleshort\t\t0xAA55\t3\n>>16\t\tleshort\t\t0xAA55\t4\n>>4\t\tubyte\t\tx\t: ID=0x%x\n>>0\t\tubyte&0x80\t0x80\t\\b, active\n>>0\t\tubyte\t\t>0x80\t0x%x\n>>1\t\tubyte\t\tx\t\\b, start-CHS (\n>>1\t\tuse\t\tpartition-chs\n>>5\t\tubyte\t\tx\t\\b), end-CHS (\n>>5\t\tuse\t\tpartition-chs\n>>8\t\tulelong\t\tx\t\\b), startsector %u\n>>12\t\tulelong\t\tx\t\\b, %u sectors\n#\t\tPrint cylinder,head,sector (CHS) of partition entry\n0\tname\t\t\t\tpartition-chs\n# cylinder\n>1\t\tubyte\t\tx\t\\b0x\n>1\t\tubyte&0xC0\t0x40\t\\b1\n>1\t\tubyte&0xC0\t0x80\t\\b2\n>1\t\tubyte&0xC0\t0xC0\t\\b3\n>2\t\tubyte\t\tx\t\\b%x\n# head\n>0\t\tubyte\t\tx\t\\b,%u\n# sector\n>1\t\tubyte&0x3F\tx\t\\b,%u\n\n# FATX \n0\t\tstring\t\tFATX\t\tFATX filesystem data\n\n# romfs filesystems - Juan Cespedes <cespedes@debian.org>\n0\tstring\t\t-rom1fs-\tromfs filesystem, version 1\n>8\tbelong\tx\t\t\t%d bytes,\n>16\tstring\tx\t\t\tnamed %s.\n\n# netboot image - Juan Cespedes <cespedes@debian.org>\n0\tlelong\t\t0x1b031336L\tNetboot image,\n>4\tlelong&0xFFFFFF00\t0\n>>4\tlelong&0x100\t0x000\t\tmode 2\n>>4\tlelong&0x100\t0x100\t\tmode 3\n>4\tlelong&0xFFFFFF00\t!0\tunknown mode\n\n0x18b\tstring\tOS/2\tOS/2 Boot Manager\n\n# updated by Joerg Jenderek at Oct 2008 and Sep 2012\n# http://syslinux.zytor.com/iso.php\n# tested with versions 1.47,1.48,1.49,1.50,1.62,1.76,2.00,2.10;3.00,3.11,3.31,;3.70,3.71,3.73,3.75,3.80,3.82,3.84,3.86,4.01,4.03 and 4.05\n# assembler instructions: cli;jmp 0:7Cyy (yy=0x40,0x5e,0x6c,0x6e,0x77);nop;nop\n0\tulequad&0x909000007cc0eafa\t0x909000007c40eafa\t\n>631\tsearch/689\tISOLINUX\\ \tisolinux Loader\n>>&0\tstring\t\tx\t\t(version %-4.4s)\n# http://syslinux.zytor.com/pxe.php\n# assembler instructions: jmp 7C05\n0\tulelong\t0x007c05ea\t\tpxelinux loader (version 2.13 or older)\n# assembler instructions: pushfd;pushad\n0\tulelong\t0x60669c66\t\tpxelinux loader\n# assembler instructions: jmp 05\n0\tulelong\t0xc00005ea\t\tpxelinux loader (version 3.70 or newer)\n# http://syslinux.zytor.com/wiki/index.php/SYSLINUX\n0\tstring\tLDLINUX\\ SYS\\ \t\tSYSLINUX loader\n>12\tstring\tx\t\t\t(older version %-4.4s)\n0\tstring\t\\r\\nSYSLINUX\\ \t\tSYSLINUX loader\n>11\tstring\tx\t\t\t(version %-4.4s)\n# syslinux updated and separated from \"DOS/MBR boot sector\" by Joerg Jenderek at Sep 2012\n# assembler instructions: jmp yy (yy=0x3c,0x58);nop;\"SYSLINUX\"\n0\tulelong&0x80909bEB\t0x009018EB\t\n# OEM-ID not always \"SYSLINUX\"\n>434\tsearch/47\tBoot\\ failed\t\t\n# followed by \\r\\n\\0 or :\\ \n>>482\tsearch/132\t\\0LDLINUX\\ SYS\t\tSyslinux bootloader (version 2.13 or older)\n>>1\tubyte\t\t0x58\t\t\tSyslinux bootloader (version 3.0-3.9)\n>459\tsearch/30\tBoot\\ error\\r\\n\\0\t\n>>1\tubyte\t\t0x58\t\t\tSyslinux bootloader (version 3.10 or newer)\n# SYSLINUX MBR updated and separated from \"DOS/MBR boot sector\" by Joerg Jenderek at Sep 2012\n# assembler instructions: mov di,0600h;mov cx,0100h\n16\tsearch/4\t\\xbf\\x00\\x06\\xb9\\x00\\x01\t\t\n# to display SYSLINUX MBR (36) before old DOS/MBR boot sector one with partition table (strength=50+21)\n!:strength +36\n>94\tsearch/249\tMissing\\ operating\\ system\t\t\n# followed by \\r for versions older 3.35 , .\\r for versions newer 3.52 and point for other\n# skip Ranish MBR\n>>408\tsearch/4\tHD1/\\0\t \t\t\t\t\n>>408\tdefault\t\tx\t\t\t\t\t\n>>>250\tsearch/118\t\\0Operating\\ system\\ load\t\tSYSLINUX MBR\n# followed by \"ing \" or space\n>>>>292\tsearch/98\terror   \t\t\t\t\n>>>>>&0\tstring\t\t\\r\t\t    \t\t\t(version 3.35 or older)\n>>>>>&0\tstring\t\t.\\r\t\t\t\t\t(version 3.52 or newer)\n>>>>>&0\tdefault\t\tx\t\t\t\t\t(version 3.36-3.51 )\n>368\tsearch/106\t\\0Disk\\ error\\ on\\ boot\\r\\n\t\tSYSLINUX GPT-MBR\n>>156\tsearch/10\t\\0Boot\\ partition\\ not\\ found\\r\\n\t\n>>>270\tsearch/10\t\\0OS\\ not\\ bootable\\r\\n\t\t\t(version 3.86 or older)\n>>174\tsearch/10\t\\0Missing\\ OS\\r\\n\t\t\t\n>>>189\tsearch/10\t\\0Multiple\\ active\\ partitions\\r\\n\t(version 4.00 or newer)\n# SYSLINUX END\n\n# NetBSD mbr variants (master-boot-code version 1.22) added by Joerg Jenderek at Nov 2012\n# assembler instructions: xor ax,ax;mov\tax,ss;mov sp,0x7c00;mov\tax,\n0\tubequad\t\t0x31c08ed0bc007c8e\t\t\t\n# mbr_bootsel magic before partition table not reliable with small ipl fragments\n#>444\tuleshort\t0xb5e1\t\t\t\t\t\n>0004\tuleshort\tx\t\t\t\t\t\n# ERRorTeXT\n>>181\tsearch/166\t\tError\\ \\0\\r\\n\t\t\t\tNetBSD mbr\n# NT Drive Serial Number http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS\n>>>0x1B8\tubelong\t\t>0\t\t\t\t\t\\b,Serial 0x%-.8x\n# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx\n>>>0xbb\t\tsearch/71\t\\xcd\\x13\\x5a\\x52\\x52\t\t\t\\b,bootselector\n# BOOT_EXTENDED definitions contains assembler instructions: \n# xchg ecx,edx;addl ecx,edx;movw lba_info,si;movb 0x42,ah;pop dx;push dx;int 0x13\n>>>0x96\tsearch/1\t\\x66\\x87\\xca\\x66\\x01\\xca\\x66\\x89\\x16\\x3a\\x07\\xbe\\x32\\x07\\xb4\\x42\\x5a\\x52\\xcd\\x13\t\\b,boot extended\n# COM_PORT_VAL definitions contains assembler instructions: outb al,dx;add 5,dl;inb %dx;test 0x40,al\n>>>0x130\tsearch/55\t\\xee\\x80\\xc2\\x05\\xec\\xa8\\x40\t\t\\b,serial IO\n# not TERSE_ERROR\n>>>196\t\tsearch/106\tNo\\ active\\ partition\\0\t\t\t\n>>>>&0\t\tstring\t\tDisk\\ read\\ error\\0\t\t\t\n>>>>>&0\t\tstring\t\tNo\\ operating\\ system\\0\t\t\t\\b,verbose\n# not NO_CHS definitions contains assembler instructions: pop dx;push dx;movb $8,ah;int0x13\n>>>0x7d\t\tsearch/7\t\\x5a\\x52\\xb4\\x08\\xcd\\x13\t\t\\b,CHS\n# not NO_LBA_CHECK definitions contains assembler instructions: movw 0x55aa,bx;movb 0x41,ah;pop\tdx;push\tdx;int 0x13\n>>>0xa4\t\tsearch/84\t\\xbb\\xaa\\x55\\xb4\\x41\\x5a\\x52\\xcd\\x13\t\\b,LBA-check\n# assembler instructions: movw nametab,bx\n>>>0x26\t    search/21\t\\xBB\\x94\\x07\t\t\t\t\t\n# not NO_BANNER definitions contains assembler instructions: mov banner,si;call message_crlf\n>>>>&-9\tubequad&0xBE00f0E800febb94\t0xBE0000E80000bb94\t\t\n>>>>>181\tsearch/166\t\tError\\ \\0\t\t\t\n# \"a: disk\" , \"Fn: diskn\" or \"NetBSD MBR boot\"\n>>>>>>&3\tstring\t\t\tx\t\t\t\t\\b,\"%s\"\n>>>446\tuse\t\tpartition-table\n# Andrea Mazzoleni AdvanceCD mbr loader of http://advancemame.sourceforge.net/boot-readme.html\n# added by Joerg Jenderek at Nov 2012 for versions 1.3 - 1.4\n# assembler instructions: jmp short 0x58;nop;ASCII\n0\tubequad&0xeb58908000000000\t0xeb58900000000000\t\n# assembler instructions: cli;xor ax,ax;mov ds,ax;mov es,ax;mov ss,\n>(1.b+2)\tubequad\t\t\t0xfa31c08ed88ec08e\t\n# Error messages at end of code\n>>376\t\tstring\tNo\\ operating\\ system\\r\\n\\0\t\t\n>>>398\t\tstring\tDisk\\ error\\r\\n\\0FDD\\0HDD\\0\t\t\n>>>>419\t\tstring\t\\ EBIOS\\r\\n\\0\t\t\t\tAdvanceMAME mbr\n\n# Neil Turton mbr loader variant of http://www.chiark.greenend.org.uk/~neilt/mbr/ \n# added by Joerg Jenderek at Mar 2011 for versions 1.0.0 - 1.1.11\n# for 1st version assembler instructions:\tcld;xor ax,ax;mov DS,ax;MOV ES,AX;mov SI,\n# or  \t  \t  \t    \t\t\tcld;xor ax,ax;mov SS,ax;XOR SP,SP;mov DS,\n0\tulequad&0xcE1b40D48EC031FC\t0x8E0000D08EC031FC\t\n# pointer to the data starting with Neil Turton signature string\n>(0x1BC.s)\t\tstring\t\tNDTmbr\t\t\t\n>>&-14\t\t\tstring\t\t1234F\\0\t\t\tTurton mbr (\n# parameters also viewed by install-mbr --list\n>>>(0x1BC.s+7)\t\tubyte\t\tx\t\t\t\\b%u<=\n>>>(0x1BC.s+9)\t\tubyte\t\tx\t\t\t\\bVersion<=%u\n#>>>(0x1BC.s+8)\t\tubyte\t\tx\t\t\tasm_flag_%x\n>>>(0x1BC.s+8)\t\tubyte&1\t\t1\t\t\t\\b,Y2K-Fix\n# variant used by testdisk of http://www.cgsecurity.org/wiki/Menu_MBRCode\n>>>(0x1BC.s+8)\t\tubyte&2\t\t2\t\t\t\\b,TestDisk\n#0x1~1,..,0x8~4,0x10~F,0x80~A enabled\n#>>>(0x1BC.s+10)\t\tubyte\t\tx\t\t\t\\b,flags 0x%x\n#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot\n#>>>(0x1BC.s+11)\t\tubyte\t\tx\t\t\t\\b,cfg_def 0x%x\n# for older versions\n>>>(0x1BC.s+9)\t\tubyte\t\t<2\t\t\t\n#>>>>(0x1BC.s+12)\tubyte\t\t18\t\t\t\\b,%hhu/18 seconds\n>>>>(0x1BC.s+12)\tubyte\t\t!18\t\t\t\\b,%u/18 seconds\n# floppy A: or B:\n>>>>(0x1BC.s+13)\tubyte\t\t<2\t\t\t\\b,floppy 0x%x\n>>>>(0x1BC.s+13)\tubyte\t\t>1\t\t\t\n# 1st hard disc\n#>>>>>(0x1BC.s+13)\tubyte\t\t0x80\t\t\t\\b,drive 0x%x\n# not 1st hard disc\n>>>>>(0x1BC.s+13)\tubyte\t\t!0x80\t\t\t\\b,drive 0x%x\n# for version >= 2 maximal timeout can be 65534\n>>>(0x1BC.s+9)\t\tubyte\t\t>1\t\t\t\n#>>>>(0x1BC.s+12)\tuleshort\t18\t\t\t\\b,%u/18 seconds\n>>>>(0x1BC.s+12)\tuleshort\t!18\t\t\t\\b,%u/18 seconds\n# floppy A: or B:\n>>>>(0x1BC.s+14)\tubyte\t\t<2\t\t\t\\b,floppy 0x%x\n>>>>(0x1BC.s+14)\tubyte\t\t>1\t\t\t\n# 1st hard disc\n#>>>>>(0x1BC.s+14)\tubyte\t\t0x80\t\t\t\\b,drive 0x%x\n# not 1st hard disc\n>>>>>(0x1BC.s+14)\tubyte\t\t!0x80\t\t\t\\b,drive 0x%x\n>>>0\tubyte\t\tx\t\t\t\t\t\\b)\n\n# added by Joerg Jenderek\n# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or\n# grub-1.94/kern/i386/pc/startup.S\n# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data\n# usual values are marked with comments to get only informations of strange GRUB loaders\n0x200\tuleshort\t\t0x70EA\t\t\n# found only version 3.{1,2}\n>0x206\t\tubeshort\t>0x0300\t\t\n# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > \"00\"\n>>0x212 \tubyte\t\t>0x29\t\t\n>>>0x213 \tubyte\t\t>0x29\t\t\n# not iso9660_stage1_5\n#>>>0\tulelong&0x00BE5652\t0x00BE5652\t\n>>>>0x213 \tubyte\t\t>0x29\t\tGRand Unified Bootloader\n# config_file for stage1_5 is 0xffffffff + default \"/boot/grub/stage2\"\n>>>>0x217 \tubyte\t\t0xFF\t\tstage1_5\n>>>>0x217 \tubyte\t\t<0xFF\t\tstage2\n>>>>0x206\tubyte\t\tx\t\t\\b version %u\n>>>>0x207\tubyte\t\tx\t\t\\b.%u\n# module_size for 1.94\n>>>>0x208\tulelong\t\t<0xffffff\t\\b, installed partition %u\n#>>>>0x208\tulelong\t\t=0xffffff\t\\b, %lu (default)\n>>>>0x208\tulelong\t\t>0xffffff\t\\b, installed partition %u\n# GRUB 0.5.95 unofficial\n>>>>0x20C\tulelong&0x2E300000 0x2E300000\t\n# 0=stage2\t1=ffs\t2=e2fs\t3=fat\t4=minix\t5=reiserfs\n>>>>>0x20C\tubyte\t\tx\t\t\\b, identifier 0x%x\n#>>>>>0x20D\tubyte\t\t=0\t\t\\b, LBA flag 0x%x (default)\n>>>>>0x20D\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n# GRUB version as string\n>>>>>0x20E \tstring\t\t>\\0\t\t\\b, GRUB version %-s\n# for stage1_5 is 0xffffffff + config_file \"/boot/grub/stage2\" default\n>>>>>>0x215 \tulong\t\t0xffffffff\t\n>>>>>>>0x219 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n>>>>>>0x215 \tulong\t\t!0xffffffff\t\n>>>>>>>0x215 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n# newer GRUB versions\n>>>>0x20C\tulelong&0x2E300000 !0x2E300000\t\n##>>>>>0x20C\tulelong\t\t=0\t\t\\b, saved entry %d (usual)\n>>>>>0x20C\tulelong\t\t>0\t\t\\b, saved entry %d\n# for 1.94 contains kernel image size\n# for 0.93,0.94,0.96,0.97\n# 0=stage2\t1=ffs\t2=e2fs\t3=fat\t4=minix\t5=reiserfs\t6=vstafs\t7=jfs\t8=xfs\t9=iso9660\ta=ufs2\t\n>>>>>0x210\tubyte\t\tx\t\t\\b, identifier 0x%x\n# The flag for LBA forcing is in most cases 0\n#>>>>>0x211\tubyte\t\t=0\t\t\\b, LBA flag 0x%x (default)\n>>>>>0x211\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n# GRUB version as string\n>>>>>0x212 \tstring\t\t>\\0\t\t\\b, GRUB version %-s\n# for stage1_5 is 0xffffffff + config_file \"/boot/grub/stage2\" default\n>>>>>0x217 \tulong\t\t0xffffffff\t\n>>>>>>0x21b \tstring\t\t>\\0\t\t\\b, configuration file %-s\n>>>>>0x217 \tulong\t\t!0xffffffff\t\n>>>>>>0x217 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n\n# DOS x86 sector updated and separated from \"DOS/MBR boot sector\" by Joerg Jenderek at May 2011\n# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90\n# over BIOS parameter block (BPB)\n# http://thestarman.pcministry.com/asm/2bytejumps.htm#FWD\n# older drives may use Near JuMP instruction E9 xx xx\n# minimal short forward jump found 0x29 for bootloaders or 0x0\n# maximal short forward jump is 0x7f\n# OEM-ID is empty or contain readable bytes\n0\t\tulelong&0x804000E9\t0x000000E9\n!:strength\t+60\n# mtools-3.9.8/msdos.h\n# usual values are marked with comments to get only informations of strange FAT systems\n# valid sectorsize must be a power of 2 from 32 to 32768\n>11\t\tuleshort&0x001f\t0\t\n>>11\t\tuleshort\t<32769\t\t\n>>>11\t\tuleshort\t>31\t\t\n>>>>21\t\tubyte&0xf0\t0xF0\t\t\n>>>>>0\t\tubyte\t\t0xEB\t\tDOS/MBR boot sector\n>>>>>>1\t\tubyte\t\tx\t\t\\b, code offset 0x%x+2\n>>>>>0\t\tubyte\t\t0xE9\t\t\n>>>>>>1\t\tuleshort\tx\t\t\\b, code offset 0x%x+3\n>>>>>3\t\tstring\t\t>\\0\t\t\\b, OEM-ID \"%-.8s\"\n#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC\n>>>>>>8\t\tstring\t\tIHC\t\t\\b cached by Windows 9M\n>>>>>11\t\tuleshort\t>512\t\t\\b, Bytes/sector %u\n#>>>>>11\tuleshort\t=512\t\t\\b, Bytes/sector %u=512 (usual)\n>>>>>11\t\tuleshort\t<512\t\t\\b, Bytes/sector %u\n>>>>>13\t\tubyte\t\t>1\t\t\\b, sectors/cluster %u\n#>>>>>13\tubyte\t\t=1\t\t\\b, sectors/cluster %u (usual on Floppies)\n# for lazy FAT32 implementation like Transcend digital photo frame PF830\n>>>>>82\t\tstring/c\tfat32\t\t\n>>>>>>14\tuleshort\t!32\t\t\\b, reserved sectors %u\n#>>>>>>14\tuleshort\t=32\t\t\\b, reserved sectors %u (usual Fat32)\n>>>>>82\t\tstring/c\t!fat32\t\t\n>>>>>>14\tuleshort\t>1\t\t\\b, reserved sectors %u\n#>>>>>>14\tuleshort\t=1\t\t\\b, reserved sectors %u (usual FAT12,FAT16)\n#>>>>>>14\tuleshort\t0\t\t\\b, reserved sectors %u (usual NTFS)\n>>>>>16\t\tubyte\t\t>2\t\t\\b, FATs %u\n#>>>>>16\tubyte\t\t=2\t\t\\b, FATs %u (usual)\n>>>>>16\t\tubyte\t\t=1\t\t\\b, FAT  %u\n>>>>>16\t\tubyte\t\t>0\n>>>>>17\t\tuleshort\t>0\t\t\\b, root entries %u\n#>>>>>17\tuleshort\t=0\t\t\\b, root entries %hu=0 (usual Fat32)\n>>>>>19\t\tuleshort\t>0\t\t\\b, sectors %u (volumes <=32 MB) \n#>>>>>19\tuleshort\t=0\t\t\\b, sectors %hu=0 (usual Fat32)\n>>>>>21\t\tubyte\t\t>0xF0\t\t\\b, Media descriptor 0x%x\n#>>>>>21\tubyte\t\t=0xF0\t\t\\b, Media descriptor 0x%x (usual floppy)\n>>>>>21\t\tubyte\t\t<0xF0\t\t\\b, Media descriptor 0x%x\n>>>>>22\t\tuleshort\t>0\t\t\\b, sectors/FAT %u\n#>>>>>22\tuleshort\t=0\t\t\\b, sectors/FAT %hu=0 (usual Fat32)\n>>>>>24\t\tuleshort\tx\t\t\\b, sectors/track %u\n>>>>>26\t\tubyte\t\t>2\t\t\\b, heads %u\n#>>>>>26\tubyte\t\t=2\t\t\\b, heads %u (usual floppy)\n>>>>>26\t\tubyte\t\t=1\t\t\\b, heads %u\n# valid only for sector sizes with more then 32 Bytes\n>>>>>11\t\tuleshort\t>32\t\t\n# http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Extended_BIOS_Parameter_Block\n# skip for values 2,2Ah,70h,73h,DFh\n# and continue for extended boot signature values 0,28h,29h,80h\n>>>>>>38\tubyte&0x56\t=0\t\t\n>>>>>>>28\tulelong\t\t>0\t\t\\b, hidden sectors %u\n#>>>>>>>28\tulelong\t\t=0\t\t\\b, hidden sectors %u (usual floppy)\n>>>>>>>32\tulelong\t\t>0\t\t\\b, sectors %u (volumes > 32 MB) \n#>>>>>>>32\tulelong\t\t=0\t\t\\b, sectors %u (volumes > 32 MB)\n# FAT<32 bit specific \n>>>>>>>82\tstring/c\t!fat32\t\t\n#>>>>>>>>36\tubyte\t\t0x80\t\t\\b, physical drive 0x%x=0x80 (usual harddisk)\n#>>>>>>>>36\tubyte\t\t0\t\t\\b, physical drive 0x%x=0 (usual floppy)\n>>>>>>>>36\tubyte\t\t!0x80\t\t\n>>>>>>>>>36\tubyte\t\t!0\t\t\\b, physical drive 0x%x\n# VGA-copy CRC or\n# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too\n>>>>>>>>37\tubyte\t\t>0\t\t\\b, reserved 0x%x\n#>>>>>>>>37\tubyte\t\t=0\t\t\\b, reserved 0x%x\n# extended boot signatur value is 0x80 for NTFS, 0x28 or 0x29 for others\n>>>>>>>>38\tubyte\t\t!0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>>38\tubyte&0xFE\t=0x28\n>>>>>>>>>39\tulelong\t\tx\t\t\\b, serial number 0x%x\n>>>>>>>>38\tubyte\t\t=0x29\n>>>>>>>>>43\tstring\t\t<NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>>>43\tstring\t\t>NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>>>43\tstring\t\t=NO\\ NAME\t\\b, unlabeled\n# there exist some old floppies without word FAT at offset 54\n# a word like \"FATnm   \" is only a hint for a FAT size on nm-bits\n# Normally the number of clusters is calculated by the values of BPP.\n# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,\n# otherwise FAT is 16 bit.\n# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html\n>>>>>82\t\tstring/c\t!fat32\t\t\n>>>>>>54\tstring\t\tFAT12\t\t\\b, FAT (12 bit)\n>>>>>>54\tstring\t\tFAT16\t\t\\b, FAT (16 bit)\n>>>>>>54\tdefault\t\tx\t\t\n# determinate FAT bit size by media descriptor\n# small floppies implies FAT12\n>>>>>>>21\tubyte\t\t<0xF0\t\t\\b, FAT (12 bit by descriptor)\n# with media descriptor F0h floppy or maybe superfloppy with FAT16\n>>>>>>>21\tubyte\t\t=0xF0\t\t\n# superfloppy (many sectors) implies FAT16\n>>>>>>>>32\tulelong\t\t>0xFFFF\t\t\\b, FAT (16 bit by descriptor+sectors)\n# no superfloppy with media descriptor F0h implies FAT12\n>>>>>>>>32\tdefault\t\tx\t\t\\b, FAT (12 bit by descriptor+sectors)\n# with media descriptor F8h floppy or hard disc with FAT12 or FAT16\n>>>>>>>21\tubyte\t\t=0xF8\t\t\n# 360 KiB with media descriptor F8h, 9 sectors per track ,single sided floppy implies FAT12\n>>>>>>>>19\tubequad\t0xd002f80300090001\t\\b, FAT (12 bit by descriptor+geometry)\n# hard disc with FAT12 or FAT16\n>>>>>>>>19\tdefault\t\tx\t\t\\b, FAT (1Y bit by descriptor)\n# with media descriptor FAh floppy, RAM disc with FAT12 or FAT16 or Tandy hard disc\n>>>>>>>21\tubyte\t\t=0xFA\t\t\n# 320 KiB with media descriptor FAh, 8 sectors per track ,single sided floppy implies FAT12\n>>>>>>>>19\tubequad\t0x8002fa0200080001\t\\b, FAT (12 bit by descriptor+geometry)\n# RAM disc with FAT12 or FAT16 or Tandy hard disc\n>>>>>>>>19\tdefault\t\tx\t\t\\b, FAT (1Y bit by descriptor)\n# others are floppy\n>>>>>>>21\tdefault\t\tx\t\t\\b, FAT (12 bit by descriptor)\n# FAT32 bit specific\n>>>>>82\t\tstring/c\tfat32\t\t\\b, FAT (32 bit)\n>>>>>>36\tulelong\t\tx\t\t\\b, sectors/FAT %u\n# http://technet.microsoft.com/en-us/library/cc977221.aspx\n>>>>>>40\tuleshort\t>0\t\t\\b, extension flags 0x%x\n#>>>>>>40\tuleshort\t=0\t\t\\b, extension flags %hu\n>>>>>>42\tuleshort\t>0\t\t\\b, fsVersion %u\n#>>>>>>42\tuleshort\t=0\t\t\\b, fsVersion %u (usual)\n>>>>>>44\tulelong\t\t>2\t\t\\b, rootdir cluster %u\n#>>>>>>44\tulelong\t\t=2\t\t\\b, rootdir cluster %u\n#>>>>>>44\tulelong\t\t=1\t\t\\b, rootdir cluster %u\n>>>>>>48\tuleshort\t>1\t\t\\b, infoSector %u\n#>>>>>>48\tuleshort\t=1\t\t\\b, infoSector %u (usual)\n>>>>>>48\tuleshort\t<1\t\t\\b, infoSector %u\n# 0 or 0xFFFF instead of usual 6 means no backup sector\n>>>>>>50\tuleshort\t=0xFFFF\t\t\\b, no Backup boot sector\n>>>>>>50\tuleshort\t=0\t\t\\b, no Backup boot sector\n#>>>>>>50\tuleshort\t=6\t\t\\b, Backup boot sector %u (usual) \n>>>>>>50\tdefault\t\tx\t\t\n>>>>>>>50\tuleshort\tx\t\t\\b, Backup boot sector %u\n# corrected by Joerg Jenderek at Feb 2011 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO\n>>>>>>52\tulelong\t\t>0\t\t\\b, reserved1 0x%x\n>>>>>>56\tulelong\t\t>0\t\t\\b, reserved2 0x%x\n>>>>>>60\tulelong\t\t>0\t\t\\b, reserved3 0x%x\n# same structure as FAT1X \n#>>>>>>64\tubyte\t\t=0x80\t\t\\b, physical drive 0x%x=80 (usual harddisk)\n#>>>>>>64\tubyte\t\t=0\t\t\\b, physical drive 0x%x=0 (usual floppy)\n>>>>>>64\tubyte\t\t!0x80\t\t\n>>>>>>>64\tubyte\t\t>0\t\t\\b, physical drive 0x%x\n# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too\n>>>>>>65\tubyte\t\t>0\t\t\\b, reserved 0x%x\n>>>>>>66\tubyte\t\t!0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>66\tubyte\t\t=0x29\n>>>>>>>67\tulelong\t\tx\t\t\\b, serial number 0x%x\n>>>>>>>71\tstring\t\t<NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>71\tstring\t\t>NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>71\tstring\t\t=NO\\ NAME\t\\b, unlabeled\n# additional tests for floppy image added by Joerg Jenderek\n# no fixed disk \n>>>>>21\t\tubyte\t\t!0xF8\t\t\n# floppy media with 12 bit FAT\n>>>>>>54\tstring\t\t!FAT16\t\t\n# test for FAT after bootsector\n>>>>>>>(11.s)\tulelong&0x00ffffF0\t0x00ffffF0\t\\b, followed by FAT\n# floppy image\n!:mime application/x-ima\n# NTFS specific added by Joerg Jenderek at Mar 2011 according to http://thestarman.pcministry.com/asm/mbr/NTFSBR.htm\n# and http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/bios-parameter-block.html\n# 0 FATs\n>>>>>16\tubyte\t\t=0\t\t\n# 0 root entries\n>>>>>>17\tuleshort\t=0\t\t\n# 0 DOS sectors\n>>>>>>>19\tuleshort\t=0\t\t\n# 0 sectors/FAT\n# dos < 4.0 BootSector value found is 0x80\n#38\tubyte\t\t=0x80\t\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>>22\tuleshort\t=0\t\t\\b; NTFS\n>>>>>>>>>24\tuleshort\t>0\t\t\\b, sectors/track %u\n>>>>>>>>>36\tulelong\t\t!0x800080\t\\b, physical drive 0x%x\n>>>>>>>>>40\tulequad\t\t>0\t\t\\b, sectors %lld\n>>>>>>>>>48\tulequad\t\t>0\t\t\\b, $MFT start cluster %lld\n>>>>>>>>>56\tulequad\t\t>0\t\t\\b, $MFTMirror start cluster %lld\n# Values 0 to 127 represent MFT record sizes of 0 to 127 clusters.\n# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes. \n>>>>>>>>>64\tlelong\t\t<256\t\t\n>>>>>>>>>>64\tlelong\t\t<128\t\t\\b, clusters/RecordSegment %d\n>>>>>>>>>>64\tubyte\t\t>127\t\t\\b, bytes/RecordSegment 2^(-1*%i)\n# Values 0 to 127 represent index block sizes of 0 to 127 clusters.\n# Values 128 to 255 represent index block sizes of 2^(256-N) byte\n>>>>>>>>>68\tulelong\t\t<256\t\t\n>>>>>>>>>>68\tulelong\t\t<128\t\t\\b, clusters/index block %d\n#>>>>>>>>>>68\tulelong\t\t>127\t\t\\b, bytes/index block 2^(256-%d)\n>>>>>>>>>>68\tubyte\t\t>127\t\t\\b, bytes/index block 2^(-1*%i)\n>>>>>>>>>72\tulequad\t\tx\t\t\\b, serial number 0%llx\n>>>>>>>>>80\tulelong\t\t>0\t\t\\b, checksum 0x%x\n#>>>>>>>>>80\tulelong\t\t=0\t\t\\b, checksum 0x%x=0 (usual)\n>>>>>>>>>0x258\tulelong&0x00009090\t=0x00009090\t\n>>>>>>>>>>&-92\t\tindirect\tx\t\\b; contains \n# For 2nd NTFS sector added by Joerg Jenderek at Jan 2013\n# http://thestarman.pcministry.com/asm/mbr/NTFSbrHexEd.htm\n# unused assembler instructions JMP y2;NOP;NOP\n0x056\t\tulelong&0xFFFF0FFF\t0x909002EB\t\n# unicode loadername terminated by CTRL-D\n>(0.s*2)\tulelong&0xFFFFFF00\t0x00040000\t\t\n# loadernames are NTLDR,CMLDR,PELDR,$LDR$ or BOOTMGR\n>>0x002\t\tlestring16\tx\tMicrosoft Windows XP/VISTA bootloader %-5.5s\n>>0x12\t\tstring\t\t$\t\n>>>0x0c\t\tlestring16\tx\t\\b%-2.2s\n### DOS,NTFS boot sectors end\n\n9564\tlelong\t\t0x00011954\tUnix Fast File system [v1] (little-endian),\n>8404\tstring\t\tx\t\tlast mounted on %s,\n#>9504\tledate\t\tx\t\tlast checked at %s,\n>8224\tledate\t\tx\t\tlast written at %s,\n>8401\tbyte\t\tx\t\tclean flag %d,\n>8228\tlelong\t\tx\t\tnumber of blocks %d,\n>8232\tlelong\t\tx\t\tnumber of data blocks %d,\n>8236\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>8240\tlelong\t\tx\t\tblock size %d,\n>8244\tlelong\t\tx\t\tfragment size %d,\n>8252\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>8256\tlelong\t\tx\t\trotational delay %dms,\n>8260\tlelong\t\tx\t\tdisk rotational speed %drps,\n>8320\tlelong\t\t0\t\tTIME optimization\n>8320\tlelong\t\t1\t\tSPACE optimization\n\n42332\tlelong\t\t0x19540119\tUnix Fast File system [v2] (little-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tleqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tlequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tlequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tlelong\t\tx\t\tblock size %d,\n>&-1324\tlelong\t\tx\t\tfragment size %d,\n>&-180\tlelong\t\tx\t\taverage file size %d,\n>&-176\tlelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tlequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tlelong\t\tx\t\tpending inodes to free %d,\n>&-664\tlequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tlelong\t\t0\t\tTIME optimization\n>&-1248\tlelong\t\t1\t\tSPACE optimization\n\n66908\tlelong\t\t0x19540119\tUnix Fast File system [v2] (little-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tleqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tlequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tlequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tlelong\t\tx\t\tblock size %d,\n>&-1324\tlelong\t\tx\t\tfragment size %d,\n>&-180\tlelong\t\tx\t\taverage file size %d,\n>&-176\tlelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tlequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tlelong\t\tx\t\tpending inodes to free %d,\n>&-664\tlequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tlelong\t\t0\t\tTIME optimization\n>&-1248\tlelong\t\t1\t\tSPACE optimization\n\n9564\tbelong\t\t0x00011954\tUnix Fast File system [v1] (big-endian),\n>7168   belong\t\t0x4c41424c\tApple UFS Volume\n>>7186  string\t\tx\t\tnamed %s,\n>>7176  belong\t\tx\t\tvolume label version %d,\n>>7180  bedate\t\tx\t\tcreated on %s,\n>8404\tstring\t\tx\t\tlast mounted on %s,\n#>9504\tbedate\t\tx\t\tlast checked at %s,\n>8224\tbedate\t\tx\t\tlast written at %s,\n>8401\tbyte\t\tx\t\tclean flag %d,\n>8228\tbelong\t\tx\t\tnumber of blocks %d,\n>8232\tbelong\t\tx\t\tnumber of data blocks %d,\n>8236\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>8240\tbelong\t\tx\t\tblock size %d,\n>8244\tbelong\t\tx\t\tfragment size %d,\n>8252\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>8256\tbelong\t\tx\t\trotational delay %dms,\n>8260\tbelong\t\tx\t\tdisk rotational speed %drps,\n>8320\tbelong\t\t0\t\tTIME optimization\n>8320\tbelong\t\t1\t\tSPACE optimization\n\n42332\tbelong\t\t0x19540119\tUnix Fast File system [v2] (big-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tbeqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tbequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tbequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tbelong\t\tx\t\tblock size %d,\n>&-1324\tbelong\t\tx\t\tfragment size %d,\n>&-180\tbelong\t\tx\t\taverage file size %d,\n>&-176\tbelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tbequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tbelong\t\tx\t\tpending inodes to free %d,\n>&-664\tbequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tbelong\t\t0\t\tTIME optimization\n>&-1248\tbelong\t\t1\t\tSPACE optimization\n\n66908\tbelong\t\t0x19540119\tUnix Fast File system [v2] (big-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tbeqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tbequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tbequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tbelong\t\tx\t\tblock size %d,\n>&-1324\tbelong\t\tx\t\tfragment size %d,\n>&-180\tbelong\t\tx\t\taverage file size %d,\n>&-176\tbelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tbequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tbelong\t\tx\t\tpending inodes to free %d,\n>&-664\tbequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tbelong\t\t0\t\tTIME optimization\n>&-1248\tbelong\t\t1\t\tSPACE optimization\n\n# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>\n# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>\n# volume label and UUID Russell Coker\n# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/\n0x438   leshort         0xEF53          Linux\n>0x44c  lelong          x               rev %d\n>0x43e  leshort         x               \\b.%d\n# No journal?  ext2\n>0x45c  lelong          ^0x0000004      ext2 filesystem data\n>>0x43a leshort         ^0x0000001      (mounted or unclean)\n# Has a journal?  ext3 or ext4\n>0x45c  lelong          &0x0000004\n#  and small INCOMPAT?\n>>0x460 lelong          <0x0000040\n#   and small RO_COMPAT?\n>>>0x464 lelong         <0x0000008      ext3 filesystem data\n#   else large RO_COMPAT?\n>>>0x464 lelong         >0x0000007      ext4 filesystem data\n#  else large INCOMPAT?\n>>0x460\tlelong          >0x000003f      ext4 filesystem data\n>0x468\tbelong\t\tx\t\t\\b, UUID=%08x\n>0x46c\tbeshort\t\tx\t\t\\b-%04x\n>0x46e\tbeshort\t\tx\t\t\\b-%04x\n>0x470\tbeshort\t\tx\t\t\\b-%04x\n>0x472\tbelong\t\tx\t\t\\b-%08x\n>0x476\tbeshort\t\tx\t\t\\b%04x\n>0x478\tstring\t\t>0\t\t\\b, volume name \"%s\"\n# General flags for any ext* fs\n>0x460\tlelong          &0x0000004      (needs journal recovery)\n>0x43a\tleshort         &0x0000002      (errors)\n# INCOMPAT flags\n>0x460\tlelong          &0x0000001      (compressed)\n#>0x460\tlelong          &0x0000002      (filetype)\n#>0x460\tlelong          &0x0000010      (meta bg)\n>0x460\tlelong          &0x0000040      (extents)\n>0x460\tlelong          &0x0000080      (64bit)\n#>0x460\tlelong          &0x0000100      (mmp)\n#>0x460\tlelong          &0x0000200      (flex bg)\n# RO_INCOMPAT flags\n#>0x464\tlelong          &0x0000001      (sparse super)\n>0x464\tlelong          &0x0000002      (large files)\n>0x464\tlelong          &0x0000008      (huge files)\n#>0x464\tlelong          &0x0000010      (gdt checksum)\n#>0x464\tlelong          &0x0000020      (many subdirs)\n#>0x463\tlelong          &0x0000040      (extra isize)\n\n# Minix filesystems - Juan Cespedes <cespedes@debian.org>\n0x410\tleshort\t\t0x137f\n!:strength / 2\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V1, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x137f\n!:strength / 2\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V1 (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x138f\n!:strength / 2\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V1, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x138f\n!:strength / 2\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V1, 30 char names (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x2468\n>0x402\tbeshort\t\t< 100\n>>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V2, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x2468\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V2 (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n\n0x410\tleshort\t\t0x2478\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V2, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x2478\n>0x402\tbeshort\t\t< 100\n>0x402\tbeshort\t\t> -1\t\tMinix filesystem, V2, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x2478\n>0x402\tbeshort\t\t!0\t\tMinix filesystem, V2, 30 char names (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x4d5a\n>0x402\tbeshort\t\t!0\t\tMinix filesystem, V3, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n\n# SGI disk labels - Nathan Scott <nathans@debian.org>\n0\tbelong\t\t0x0BE5A941\tSGI disk label (volume header)\n\n# SGI XFS filesystem - Nathan Scott <nathans@debian.org>\n0\tbelong\t\t0x58465342\tSGI XFS filesystem data\n>0x4\tbelong\t\tx\t\t(blksz %d,\n>0x68\tbeshort\t\tx\t\tinosz %d,\n>0x64\tbeshort\t\t^0x2004\t\tv1 dirs)\n>0x64\tbeshort\t\t&0x2004\t\tv2 dirs)\n\n############################################################################\n# Minix-ST kernel floppy\n0x800\tbelong\t\t0x46fc2700\tAtari-ST Minix kernel image\n# http://en.wikipedia.org/wiki/BIOS_parameter_block\n# floppies with valid BPB and any instruction at beginning\n>19\tstring\t\t\\240\\005\\371\\005\\0\\011\\0\\2\\0\t\\b, 720k floppy\n>19\tstring\t\t\\320\\002\\370\\005\\0\\011\\0\\1\\0\t\\b, 360k floppy\n\n############################################################################\n# Hmmm, is this a better way of detecting _standard_ floppy images ?\n19\tstring\t\t\\320\\002\\360\\003\\0\\011\\0\\1\\0\tDOS floppy 360k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, DOS/MBR hard disk boot sector\n19\tstring\t\t\\240\\005\\371\\003\\0\\011\\0\\2\\0\tDOS floppy 720k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, DOS/MBR hard disk boot sector\n19\tstring\t\t\\100\\013\\360\\011\\0\\022\\0\\2\\0\tDOS floppy 1440k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, DOS/MBR hard disk boot sector\n\n19\tstring\t\t\\240\\005\\371\\005\\0\\011\\0\\2\\0\tDOS floppy 720k, IBM\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, DOS/MBR hard disk boot sector\n19\tstring\t\t\\100\\013\\371\\005\\0\\011\\0\\2\\0\tDOS floppy 1440k, mkdosfs\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, DOS/MBR hard disk boot sector\n\n19\tstring\t\t\\320\\002\\370\\005\\0\\011\\0\\1\\0\tAtari-ST floppy 360k\n19\tstring\t\t\\240\\005\\371\\005\\0\\011\\0\\2\\0\tAtari-ST floppy 720k\n#\t\t\t|       |   |     |     |\n#\t\t\t|       |   |     |     heads\n#\t\t\t|       |   |     sectors/track\n#\t\t\t|       |   sectors/FAT\n#\t\t\t|       media descriptor\n#\t\tBPB:\tsectors\n\n#  Valid media descriptor bytes for MS-DOS:\n#\n#     Byte   Capacity   Media Size and Type\n#     -------------------------------------------------\n#\n#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector\n#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector\n#     F9     720K       3.5-inch, 2-sided, 9-sector\n#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector\n#     FD     360K       5.25-inch, 2-sided, 9-sector\n#     FF     320K       5.25-inch, 2-sided, 8-sector\n#     FC     180K       5.25-inch, 1-sided, 9-sector\n#     FE     160K       5.25-inch, 1-sided, 8-sector\n#     FE     250K       8-inch, 1-sided, single-density\n#     FD     500K       8-inch, 2-sided, single-density\n#     FE     1.2 MB     8-inch, 2-sided, double-density\n#     F8     -----      Fixed disk \n#\n#     FC     xxxK       Apricot 70x1x9 boot disk.\n#\n# Originally a bitmap:\n#  xxxxxxx0\tNot two sided\n#  xxxxxxx1\tDouble sided\n#  xxxxxx0x\tNot 8 SPT\n#  xxxxxx1x\t8 SPT\n#  xxxxx0xx\tNot Removable drive\n#  xxxxx1xx\tRemovable drive\n#  11111xxx\tMust be one.\n#\n# But now it's rather random:\n#  111111xx\tLow density disk\n#        00\tSS, Not 8 SPT\n#        01\tDS, Not 8 SPT\n#        10\tSS, 8 SPT\n#        11\tDS, 8 SPT\n#\n#  11111001\tDouble density 3 1/2 floppy disk, high density 5 1/4\n#  11110000\tHigh density 3 1/2 floppy disk\n#  11111000\tHard disk any format\n#\n\n# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013\n# http://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions\n# Too Weak.\n#512\t\tubelong&0xE0ffff00\t0xE0ffff00\t\t\n# without valid Media descriptor in place of BPB, cases with are done at other places\n#>21\t\tubyte\t\t\t<0xE5\t\t\tfloppy with old FAT filesystem\n# but valid Media descriptor at begin of FAT\n#>>512\t\tubyte\t\t\t=0xed\t\t\t720k\n#>>512\t\tubyte\t\t\t=0xf0\t\t\t1440k\n#>>512\t\tubyte\t\t\t=0xf8\t\t\t720k\n#>>512\t\tubyte\t\t\t=0xf9\t\t\t1220k\n#>>512\t\tubyte\t\t\t=0xfa\t\t\t320k\n#>>512\t\tubyte\t\t\t=0xfb\t\t\t640k\n#>>512\t\tubyte\t\t\t=0xfc\t\t\t180k\n# look like an an old DOS directory entry\n#>>>0xA0E\tubequad\t\t\t0\t\t\t\n#>>>>0xA00\tubequad\t\t\t!0\t\t\t\n#!:mime application/x-ima\n#>>512\t\tubyte\t\t\t=0xfd\t\t\t\n# look for 2nd FAT at different location to distinguish between 360k and 500k\n#>>>0x600\tubelong&0xE0ffff00\t0xE0ffff00\t\t360k\n#>>>0x500\tubelong&0xE0ffff00\t0xE0ffff00\t\t500k\n#>>>0xA0E\tubequad\t\t\t0\t\t\t\n#!:mime application/x-ima\n#>>512\t\tubyte\t\t\t=0xfe\t\t\t\n#>>>0x400\tubelong&0xE0ffff00\t0xE0ffff00\t\t160k\n#>>>>0x60E\tubequad\t\t\t0\t\t\t\n#>>>>>0x600\tubequad\t\t\t!0\t\t\t\n#!:mime application/x-ima\n#>>>0xC00\tubelong&0xE0ffff00\t0xE0ffff00\t\t1200k\n#>>512\t\tubyte\t\t\t=0xff\t\t\t320k\n#>>>0x60E\tubequad\t\t\t0\t\t\t\n#>>>>0x600\tubequad\t\t\t!0\t\t\t\n#!:mime application/x-ima\n#>>512\t\tubyte\t\t\tx\t\t\t\\b, Media descriptor 0x%x\n# without x86 jump instruction\n#>>0\t\tulelong&0x804000E9\t!0x000000E9\t\t\n# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV \t\n#>>>0\tubequad\t\t\t\t0xfabce701b8c0078e\t\\b, MS-DOS 1.12 bootloader\n# IOSYS.COM+MSDOS.COM\n#>>>>0xc4\tuse\t\t\t2xDOS-filename\n#>>0\t\tulelong&0x804000E9\t=0x000000E9\t\n# only x86 short jump instruction found\n#>>>0\t\tubyte\t\t\t=0xEB\n#>>>>1\t\tubyte\t\t\tx\t\t\t\\b, code offset 0x%x+2\n# http://thestarman.pcministry.com/DOS/ibm100/Boot.htm\n# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0\t\t\n#>>>>(1.b+2)\tubequad\t\t\t0xfa8cc88ed8ba0000\t\\b, PC-DOS 1.0 bootloader \n# ibmbio.com+ibmdos.com\n#>>>>>0x176\tuse\t\t\tDOS-filename\n#>>>>>0x181\tubyte\t\t\tx\t\t\t\\b+\n#>>>>>0x182\tuse\t\t\tDOS-filename\n# http://thestarman.pcministry.com/DOS/ibm110/Boot.htm\n# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV\t\t\n#>>>>(1.b+2)\tubequad\t\t\t0xfa8cc88ed833d28e\t\\b, PC-DOS 1.1 bootloader \n# ibmbio.com+ibmdos.com\n#>>>>>0x18b\tuse\t\t\tDOS-filename\n#>>>>>0x196\tubyte\t\t\tx\t\t\t\\b+\n#>>>>>0x197\tuse\t\t\tDOS-filename\n# http://en.wikipedia.org/wiki/Zenith_Data_Systems\n# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6\t\t\n#>>>>(1.b+2)\tubequad\t\t\t0xbbc0078ed3bcc601\t\\b, Zenith Data Systems MS-DOS 1.25 bootloader\n# IO.SYS+MSDOS.SYS\n#>>>>>0x20\tuse\t\t\t2xDOS-filename\n# http://en.wikipedia.org/wiki/Corona_Data_Systems\n# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;\t\t\n#>>>>(1.b+2)\tubequad\t\t\t0x8cc88ed8fa8ed0bc\t\\b, MS-DOS 1.25 bootloader\n# IO.SYS+MSDOS.SYS\n#>>>>>0x69\tuse\t\t\t2xDOS-filename\n# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;\t\t\n#>>>>(1.b+2)\tubequad\t\t\t0xfa0e17bc007cb860\t\\b, MS-DOS 2.11 bootloader\n# defect IO.SYS+MSDOS.SYS ?\n#>>>>>0x162\tuse\t\t\t2xDOS-filename\n\n0\tname\t\t\t\tcdrom\n>38913\tstring   !NSR0      ISO 9660 CD-ROM filesystem data\n!:mime\tapplication/x-iso9660-image\n>38913\tstring    NSR0      UDF filesystem data\n!:mime\tapplication/x-iso9660-image\n>>38917\tstring    1         (version 1.0)\n>>38917\tstring    2         (version 1.5)\n>>38917\tstring    3         (version 2.0)\n>>38917\tbyte     >0x33      (unknown version, ID 0x%X)\n>>38917\tbyte     <0x31      (unknown version, ID 0x%X)\n>0x1FE\tleshort  0xAA55     (DOS/MBR boot sector)\n# \"application id\" which appears to be used as a volume label\n>32808\tstring/T  >\\0       '%s'\n>34816\tstring    \\000CD001\\001EL\\ TORITO\\ SPECIFICATION    (bootable)\n37633\tstring    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)\n!:mime\tapplication/x-iso9660-image\n32777\tstring    CDROM     High Sierra CD-ROM filesystem data\n\n# CDROM Filesystems\n# https://en.wikipedia.org/wiki/ISO_9660\n# Modified for UDF by gerardo.cacciari@gmail.com\n32769\tstring    CD001\n# mime line at that position does not work\n# to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51)\n!:strength -11\n# to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51)\n# does not work\n#!:strength +33\n>0\tuse cdrom\n\n# .cso files\n0    string    CISO\tCompressed ISO CD image\n\n# cramfs filesystem - russell@coker.com.au\n0       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian\n>4      lelong  x size %u\n>8      lelong  &1 version #2\n>8      lelong  &2 sorted_dirs\n>8      lelong  &4 hole_support\n>32     lelong  x CRC 0x%x,\n>36     lelong  x edition %u,\n>40     lelong  x %u blocks,\n>44     lelong  x %u files\n\n0       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian\n>4      belong  x size %u\n>8      belong  &1 version #2\n>8      belong  &2 sorted_dirs\n>8      belong  &4 hole_support\n>32     belong  x CRC 0x%x,\n>36     belong  x edition %u,\n>40     belong  x %u blocks,\n>44     belong  x %u files\n\n# reiserfs - russell@coker.com.au\n0x10034\t\tstring\tReIsErFs\tReiserFS V3.5\n0x10034\t\tstring\tReIsEr2Fs\tReiserFS V3.6\n0x10034\t\tstring\tReIsEr3Fs\tReiserFS V3.6.19\n>0x1002c \tleshort\tx\t\tblock size %d\n>0x10032\tleshort\t&2\t\t(mounted or unclean)\n>0x10000\tlelong\tx\t\tnum blocks %d\n>0x10040\tlelong\t1\t\ttea hash\n>0x10040\tlelong\t2\t\tyura hash\n>0x10040\tlelong\t3\t\tr5 hash\n\n# JFFS - russell@coker.com.au\n0\tlelong\t0x34383931\tLinux Journalled Flash File system, little endian\n0\tbelong\t0x34383931\tLinux Journalled Flash File system, big endian\n\n# EST flat binary format (which isn't, but anyway)\n# From: Mark Brown <broonie@sirena.org.uk>\n0\tstring\tESTFBINR\tEST flat binary\n\n# Aculab VoIP firmware\n# From: Mark Brown <broonie@sirena.org.uk>\n0\tstring\tVoIP\\ Startup\\ and\tAculab VoIP firmware\n>35\tstring\tx\tformat %s\n\n# From: Mark Brown <broonie@sirena.org.uk> [old]\n# From: Behan Webster <behanw@websterwood.com>\n0\tbelong\t0x27051956\tu-boot legacy uImage,\n>32\tstring\tx\t\t%s,\n>28\tbyte\t0\t\tInvalid os/\n>28\tbyte\t1\t\tOpenBSD/\n>28\tbyte\t2\t\tNetBSD/\n>28\tbyte\t3\t\tFreeBSD/\n>28\tbyte\t4\t\t4.4BSD/\n>28\tbyte\t5\t\tLinux/\n>28\tbyte\t6\t\tSVR4/\n>28\tbyte\t7\t\tEsix/\n>28\tbyte\t8\t\tSolaris/\n>28\tbyte\t9\t\tIrix/\n>28\tbyte\t10\t\tSCO/\n>28\tbyte\t11\t\tDell/\n>28\tbyte\t12\t\tNCR/\n>28\tbyte\t13\t\tLynxOS/\n>28\tbyte\t14\t\tVxWorks/\n>28\tbyte\t15\t\tpSOS/\n>28\tbyte\t16\t\tQNX/\n>28\tbyte\t17\t\tFirmware/\n>28\tbyte\t18\t\tRTEMS/\n>28\tbyte\t19\t\tARTOS/\n>28\tbyte\t20\t\tUnity OS/\n>28\tbyte\t21\t\tINTEGRITY/\n>29\tbyte\t0\t\t\\bInvalid CPU,\n>29\tbyte\t1\t\t\\bAlpha,\n>29\tbyte\t2\t\t\\bARM,\n>29\tbyte\t3\t\t\\bIntel x86,\n>29\tbyte\t4\t\t\\bIA64,\n>29\tbyte\t5\t\t\\bMIPS,\n>29\tbyte\t6\t\t\\bMIPS 64-bit,\n>29\tbyte\t7\t\t\\bPowerPC,\n>29\tbyte\t8\t\t\\bIBM S390,\n>29\tbyte\t9\t\t\\bSuperH,\n>29\tbyte\t10\t\t\\bSparc,\n>29\tbyte\t11\t\t\\bSparc 64-bit,\n>29\tbyte\t12\t\t\\bM68K,\n>29\tbyte\t13\t\t\\bNios-32,\n>29\tbyte\t14\t\t\\bMicroBlaze,\n>29\tbyte\t15\t\t\\bNios-II,\n>29\tbyte\t16\t\t\\bBlackfin,\n>29\tbyte\t17\t\t\\bAVR32,\n>29\tbyte\t18\t\t\\bSTMicroelectronics ST200,\n>30\tbyte\t0\t\tInvalid Image\n>30\tbyte\t1\t\tStandalone Program\n>30\tbyte\t2\t\tOS Kernel Image\n>30\tbyte\t3\t\tRAMDisk Image\n>30\tbyte\t4\t\tMulti-File Image\n>30\tbyte\t5\t\tFirmware Image\n>30\tbyte\t6\t\tScript File\n>30\tbyte\t7\t\tFilesystem Image (any type)\n>30\tbyte\t8\t\tBinary Flat Device Tree BLOB\n>31\tbyte\t0\t\t(Not compressed),\n>31\tbyte\t1\t\t(gzip),\n>31\tbyte\t2\t\t(bzip2),\n>31\tbyte\t3\t\t(lzma),\n>12\tbelong\tx\t\t%d bytes,\n>8\tbedate\tx\t\t%s,\n>16\tbelong\tx\t\tLoad Address: 0x%08X,\n>20\tbelong\tx\t\tEntry Point: 0x%08X,\n>4\tbelong\tx\t\tHeader CRC: 0x%08X,\n>24\tbelong\tx\t\tData CRC: 0x%08X\n\n# JFFS2 file system\n0\tleshort\t0x1984\t\tLinux old jffs2 filesystem data little endian\n0\tleshort\t0x1985\t\tLinux jffs2 filesystem data little endian\n\n# Squashfs\n0\tstring\tsqsh\tSquashfs filesystem, big endian,\n>28\tbeshort\tx\tversion %d.\n>30\tbeshort x\t\\b%d,\n>28\tbeshort <3\n>>8\tbelong\tx\t%d bytes,\n>28\tbeshort >2\n>>28 beshort <4\n>>>63\tbequad x\t%lld bytes,\n>>28 beshort >3\n>>>40\tbequad x\t%lld bytes,\n#>>67\tbelong\tx\t%d bytes,\n>4\tbelong\tx\t%d inodes,\n>28\tbeshort <2\n>>32\tbeshort\tx\tblocksize: %d bytes,\n>28\tbeshort >1\n>>28 beshort <4\n>>>51\tbelong\tx\tblocksize: %d bytes,\n>>28 beshort >3\n>>>12\tbelong\tx\tblocksize: %d bytes,\n>28 beshort <4\n>>39\tbedate\tx\tcreated: %s\n>28 beshort >3\n>>8\tbedate\tx\tcreated: %s\n0\tstring\thsqs\tSquashfs filesystem, little endian,\n>28\tleshort\tx\tversion %d.\n>30\tleshort\tx\t\\b%d,\n>28\tleshort <3\n>>8\tlelong\tx\t%d bytes,\n>28\tleshort >2\n>>28 leshort <4\n>>>63\tlequad x\t%lld bytes,\n>>28 leshort >3\n>>>40\tlequad x\t%lld bytes,\n#>>63\tlelong\tx\t%d bytes,\n>4\tlelong\tx\t%d inodes,\n>28\tleshort <2\n>>32\tleshort\tx\tblocksize: %d bytes,\n>28\tleshort >1\n>>28 leshort <4\n>>>51\tlelong\tx\tblocksize: %d bytes,\n>>28 leshort >3\n>>>12\tlelong\tx\tblocksize: %d bytes,\n>28 leshort <4\n>>39\tledate\tx\tcreated: %s\n>28 leshort >3\n>>8\tledate\tx\tcreated: %s\n\n# AFS Dump Magic\n# From: Ty Sarna <tsarna@sarna.org> \n0       string                  \\x01\\xb3\\xa1\\x13\\x22    AFS Dump\n>&0     belong                  x                       (v%d)\n>>&0    byte                    0x76\n>>>&0   belong                  x                       Vol %d,\n>>>>&0  byte                    0x6e\n>>>>>&0 string                  x                       %s\n>>>>>>&1        byte            0x74\n>>>>>>>&0       beshort         2\n>>>>>>>>&4      bedate          x                       on: %s\n>>>>>>>>&0      bedate          =0                      full dump\n>>>>>>>>&0      bedate          !0                      incremental since: %s\n\n#----------------------------------------------------------\n#delta ISO    Daniel Novotny (dnovotny@redhat.com)\n0\tstring  DISO\tDelta ISO data\n!:strength +50\n>4\tbelong  x\tversion %d\n\n# VMS backup savesets - gerardo.cacciari@gmail.com\n#\n4            string  \\x01\\x00\\x01\\x00\\x01\\x00\n>(0.s+16)    string  \\x01\\x01\n>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data\n>>>40        lelong  x          (block size %d,\n>>>49        string  >\\0        original name '%s',\n>>>2         short   1024       VAX generated)\n>>>2         short   2048       AXP generated)\n>>>2         short   4096       I64 generated)\n\n# Summary: Oracle Clustered Filesystem\n# Created by: Aaron Botsis <redhat@digitalmafia.org>\n8\tstring\t\tOracleCFS\tOracle Clustered Filesystem,\n>4\tlong\t\tx\t\trev %d\n>0\tlong\t\tx\t\t\\b.%d,\n>560\tstring\t\tx\t\tlabel: %.64s,\n>136\tstring\t\tx\t\tmountpoint: %.128s\n\n# Summary: Oracle ASM tagged volume\n# Created by: Aaron Botsis <redhat@digitalmafia.org>\n32\tstring\t\tORCLDISK\tOracle ASM Volume,\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n32\tstring\t\tORCLCLRD\tOracle ASM Volume (cleared),\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n\n# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org>\n8\tstring\t\tOracleCFS\tOracle Clustered Filesystem,\n>4\tlong\t\tx\t\trev %d\n>0\tlong\t\tx\t\t\\b.%d,\n>560\tstring\t\tx\t\tlabel: %.64s,\n>136\tstring\t\tx\t\tmountpoint: %.128s\n\n# Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org>\n32\tstring\t\tORCLDISK\tOracle ASM Volume,\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n32\tstring\t\tORCLCLRD\tOracle ASM Volume (cleared),\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n\n# Compaq/HP RILOE floppy image\n# From: Dirk Jagdmann <doj@cubic.org>\n0\tstring\tCPQRFBLO\tCompaq/HP RILOE floppy image\n\n#------------------------------------------------------------------------------\n# Files-11 On-Disk Structure (File system for various RSX-11 and VMS flavours).\n# These bits come from LBN 1 (home block) of ODS-1, ODS-2 and ODS-5 volumes,\n# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari@gmail.com\n#\n1008    string          DECFILE11       Files-11 On-Disk Structure\n>525    byte            x               (ODS-%d);\n>1017   string          A               RSX-11, VAX/VMS or OpenVMS VAX file system;\n>1017   string          B\n>>525   byte            2               VAX/VMS or OpenVMS file system;\n>>525   byte            5               OpenVMS Alpha or Itanium file system;\n>984    string          x               volume label is '%-12.12s'\n\n# From: Thomas Klausner <wiz@NetBSD.org>\n# http://filext.com/file-extension/DAA\n# describes the daa file format. The magic would be:\n0\tstring\t\tDAA\\x0\\x0\\x0\\x0\\x0\tPowerISO Direct-Access-Archive\n\n# From Albert Cahalan <acahalan@gmail.com>\n# really le32 operation,destination,payloadsize (but quite predictable)\n# 01 00 00 00 00 00 00 c0 00 02 00 00\n0\tstring\t\t\\1\\0\\0\\0\\0\\0\\0\\300\\0\\2\\0\\0\tMarvell Libertas firmware\n\n# From Eric Sandeen\n# GFS2\n0x10000         belong          0x01161970\n>0x10018        belong          0x0000051d      GFS1 Filesystem\n>>0x10024        belong          x               (blocksize %d,\n>>0x10060        string          >\\0             lockproto %s)\n>0x10018        belong          0x00000709      GFS2 Filesystem\n>>0x10024        belong          x               (blocksize %d,\n>>0x10060        string          >\\0             lockproto %s)\n\n# BTRFS\n0x10040         string          _BHRfS_M        BTRFS Filesystem\n>0x1012b        string          >\\0             (label \"%s\",\n>0x10090        lelong          x               sectorsize %d,\n>0x10094        lelong          x               nodesize %d,\n>0x10098        lelong          x               leafsize %d)\n\n\n# dvdisaster's .ecc\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t*dvdisaster*\tdvdisaster error correction file\n\n# xfs metadump image \n# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog\n# but can we do the << ?  For now it's always 512 (0x200) anyway.\n0\tstring XFSM\n>0x200\tstring XFSB\tXFS filesystem metadump image\n\n# Type:\tCROM filesystem\n# From:\tWerner Fink <werner@suse.de>\n0\tstring\tCROMFS\tCROMFS\n>6\tstring\t>\\0\t\\b version %2.2s,\n>8\tulequad\t>0\t\\b block data at %lld,\n>16\tulequad\t>0\t\\b fblock table at %lld,\n>24\tulequad\t>0\t\\b inode table at %lld,\n>32\tulequad\t>0\t\\b root at %lld,\n>40\tulelong\t>0\t\\b fblock size = %d,\n>44\tulelong\t>0\t\\b block size = %d,\n>48\tulequad\t>0\t\\b bytes = %lld\n\n# Type:\txfs metadump image\n# From:\tDaniel Novotny <dnovotny@redhat.com>\n# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog\n# but can we do the << ? For now it's always 512 (0x200) anyway.\n0\tstring\tXFSM\n>0x200\tstring\tXFSB\tXFS filesystem metadump image\n\n# Type:\tdelta ISO\n# From:\tDaniel Novotny <dnovotny@redhat.com>\n0\tstring\tDISO\tDelta ISO data,\n>4\tbelong\tx\tversion %d\n\n# JFS2 (Journaling File System) image. (Old JFS1 has superblock at 0x1000.)\n# See linux/fs/jfs/jfs_superblock.h for layout; see jfs_filsys.h for flags.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n0x8000\tstring\tJFS1\n# Because it's text-only magic, check a binary value (version) to be sure.\n# Should always be 2, but mkfs.jfs writes it as 1. Needs to be 2 or 1 to be\n# mountable.\n>&0\tlelong\t<3\tJFS2 filesystem image\n# Label is followed by a UUID; we have to limit string length to avoid\n# appending the UUID in the case of a 16-byte label.\n>>&144\tregex\t[\\x20-\\x7E]{1,16}\t(label \"%s\")\n>>&0\tlequad\tx\t\\b, %lld blocks\n>>&8\tlelong\tx\t\\b, blocksize %d\n>>&32\tlelong&0x00000006\t>0\t(dirty)\n>>&36\tlelong\t>0\t(compressed)\n\n# LFS\n0\tlelong\t0x070162\tLFS filesystem image\n>4\tlelong\t1\t\tversion 1,\n>>8\tlelong\tx\t\t\\b blocks %u,\n>>12\tlelong\tx\t\t\\b blocks per segment %u,\n>4\tlelong\t2\t\tversion 2,\n>>8\tlelong\tx\t\t\\b fragments %u,\n>>12\tlelong\tx\t\t\\b bytes per segment %u,\n>16\tlelong\tx\t\t\\b disk blocks %u,\n>20\tlelong\tx\t\t\\b block size %u,\n>24\tlelong\tx\t\t\\b fragment size %u,\n>28\tlelong\tx\t\t\\b fragments per block %u,\n>32\tlelong\tx\t\t\\b start for free list %u,\n>36\tlelong\tx\t\t\\b number of free blocks %d,\n>40\tlelong\tx\t\t\\b number of files %u,\n>44\tlelong\tx\t\t\\b blocks available for writing %d,\n>48\tlelong\tx\t\t\\b inodes in cache %d,\n>52\tlelong\tx\t\t\\b inode file disk address 0x%x,\n>56\tlelong\tx\t\t\\b inode file inode number %u,\n>60\tlelong\tx\t\t\\b address of last segment written 0x%x,\n>64\tlelong\tx\t\t\\b address of next segment to write 0x%x,\n>68\tlelong\tx\t\t\\b address of current segment written 0x%x\n\n0\tstring\ttd\\000\t\tfloppy image data (TeleDisk, compressed)\n0\tstring\tTD\\000\t\tfloppy image data (TeleDisk)\n\n0\tstring\tCQ\\024\t\tfloppy image data (CopyQM, \n>16\tleshort\tx\t\t%d sectors, \n>18\tleshort\tx\t\t%d heads.)\n\n0\tstring\tACT\\020Apricot\\020disk\\020image\\032\\004\tfloppy image data (ApriDisk)\n\n0\tbeshort\t0xAA58\t\tfloppy image data (IBM SaveDskF, old)\n0\tbeshort\t0xAA59\t\tfloppy image data (IBM SaveDskF)\n0\tbeshort\t0xAA5A\t\tfloppy image data (IBM SaveDskF, compressed)\n\n0\tstring\t\\074CPM_Disk\\076\tdisk image data (YAZE)\n\n# ReFS\n# Richard W.M. Jones <rjones@redhat.com>\n0\tstring\t\\0\\0\\0ReFS\\0\tReFS filesystem image\n\n# EFW encase image file format:\n# Gregoire Passault\n# http://www.forensicswiki.org/wiki/Encase_image_file_format\n0\tstring\tEVF\\x09\\x0d\\x0a\\xff\\x00\tEWF/Expert Witness/EnCase image file format\n\n# UBIfs\n# Linux kernel sources: fs/ubifs/ubifs-media.h\n0\tlelong\t0x06101831\n>0x16\tleshort\t0\t\tUBIfs image\n>0x08\tlequad\tx\t\t\\b, sequence number %llu\n>0x10\tleshort x\t\t\\b, length %u\n>0x04\tlelong\tx\t\t\\b, CRC 0x%08x\n\n0\tlelong\t0x23494255\n>0x04\tleshort\t<2\n>0x05\tstring\t\\0\\0\\0\n>0x1c\tstring\t\\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\n>0x04\tleshort\tx\t\tUBI image, version %u\n\n# NEC PC-88 2D disk image\n# From Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>\n0x20\t\tulelong&0xFFFFFEFF\t0x2A0\n>0x10\t\tstring\t\t\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\n>>0x280\t\tstring\t\t\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\n>>>0x1A\t\tubyte&0xEF\t\t0\n>>>>0x1B\tubyte&0x8F\t\t0\n>>>>>0x1B\tubyte&70\t\t<0x40\n>>>>>>0x1C\tulelong\t\t\t>0x21\n>>>>>>>0\tregex\t[[:print:]]*\tNEC PC-88 disk image, name=%s\n>>>>>>>>0x1B\tubyte\t0\t\t\\b, media=2D\n>>>>>>>>0x1B\tubyte\t0x10\t\t\\b, media=2DD\n>>>>>>>>0x1B\tubyte\t0x20\t\t\\b, media=2HD\n>>>>>>>>0x1B\tubyte\t0x30\t\t\\b, media=1D\n>>>>>>>>0x1B\tubyte\t0x40\t\t\\b, media=1DD\n>>>>>>>>0x1A\tubyte\t0x10\t\t\\b, write-protected\n\n#------------------------------------------------------------------------------\n# $File: flash,v 1.10 2014/03/06 16:07:24 christos Exp $\n# flash:\tfile(1) magic for Macromedia Flash file format\n#\n# See\n#\n#\thttp://www.macromedia.com/software/flash/open/\n#\thttp://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/\\\n#\ten/devnet/swf/pdf/swf-file-format-spec.pdf page 27\n#\n\n0   name        swf-details\n>0\tstring\t\tF\t\tMacromedia Flash data\n!:mime\tapplication/x-shockwave-flash\n>0\tstring\t\tC\t\tMacromedia Flash data (compressed)\n!:mime\tapplication/x-shockwave-flash\n>0\tstring\t\tZ\t\tMacromedia Flash data (lzma compressed)\n!:mime\tapplication/x-shockwave-flash\n>3   byte        x      \\b, version %d\n\n1   string      WS\n>4  lelong      !0\n>>3 byte        255 Suspicious\n>>>0    use     swf-details\n\n>>3 ubyte       <32\n>>>3 ubyte      !0\n>>>>0   use     swf-details\n\n# From: Cal Peake <cp@absolutedigital.net>\n0\tstring\t\tFLV\\x01\t\tMacromedia Flash Video\n!:mime\tvideo/x-flv\n\n#\n# Yosu Gomez\n0       string AGD2\\xbe\\xb8\\xbb\\xcd\\x00 Macromedia Freehand 7 Document\n0       string AGD3\\xbe\\xb8\\xbb\\xcc\\x00 Macromedia Freehand 8 Document\n# From Dave Wilson\n0\tstring AGD4\\xbe\\xb8\\xbb\\xcb\\x00\tMacromedia Freehand 9 Document\n\n#------------------------------------------------------------------------------\n# $File: fonts,v 1.26 2013/03/09 22:36:00 christos Exp $\n# fonts:  file(1) magic for font data\n#\n0\tsearch/1\tFONT\t\tASCII vfont text\n0\tshort\t\t0436\t\tBerkeley vfont data\n0\tshort\t\t017001\t\tbyte-swapped Berkeley vfont data\n\n# PostScript fonts (must precede \"printer\" entries), quinlan@yggdrasil.com\n0\tstring\t\t%!PS-AdobeFont-1.\tPostScript Type 1 font text\n>20\tstring\t\t>\\0\t\t\t(%s)\n6\tstring\t\t%!PS-AdobeFont-1.\tPostScript Type 1 font program data\n0\tstring\t\t%!FontType1\tPostScript Type 1 font program data\n6\tstring\t\t%!FontType1\tPostScript Type 1 font program data\n0\tstring\t\t%!PS-Adobe-3.0\\ Resource-Font\tPostScript Type 1 font text\n\n# X11 font files in SNF (Server Natural Format) format\n# updated by Joerg Jenderek at Feb 2013\n# http://computer-programming-forum.com/51-perl/8f22fb96d2e34bab.htm\n0\tbelong\t\t00000004\t\tX11 SNF font data, MSB first\n#>104\tbelong\t\t00000004\t\tX11 SNF font data, MSB first\n!:mime\tapplication/x-font-sfn\n# GRR: line below too general as it catches also Xbase index file t3-CHAR.NDX\n0\tlelong\t\t00000004\t\t\n>104\tlelong\t\t00000004\t\tX11 SNF font data, LSB first\n!:mime\tapplication/x-font-sfn\n\n# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/1\tSTARTFONT\\ \t\tX11 BDF font text\n\n# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)\n# PCF must come before SGI additions (\"MIPSEL MIPS-II COFF\" collides)\n0\tstring\t\t\\001fcp\t\t\tX11 Portable Compiled Font data\n>12\tbyte\t\t0x02\t\t\t\\b, LSB first\n>12\tbyte\t\t0x0a\t\t\t\\b, MSB first\n0\tstring\t\tD1.0\\015\t\tX11 Speedo font data\n\n#------------------------------------------------------------------------------\n# FIGlet fonts and controlfiles\n# From figmagic supplied with Figlet version 2.2\n# \"David E. O'Brien\" <obrien@FreeBSD.ORG>\n0\tstring\t\tflf\t\tFIGlet font\n>3\tstring\t\t>2a\t\tversion %-2.2s\n0\tstring\t\tflc\t\tFIGlet controlfile\n>3\tstring\t\t>2a\t\tversion %-2.2s\n\n# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)\n# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++\n0\tbelong\t\t0x14025919\tlibGrx font data,\n>8\tleshort\t\tx\t\t%dx\n>10\tleshort\t\tx\t\t\\b%d\n>40\tstring\t\tx\t\t%s\n# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)\n0\tbelong\t\t0xff464f4e\tDOS code page font data collection\n7\tbelong\t\t0x00454741\tDOS code page font data\n7\tbelong\t\t0x00564944\tDOS code page font data (from Linux?)\n4098\tstring\t\tDOSFONT\t\tDOSFONT2 encrypted font data\n\n# downloadable fonts for browser (prints type) anthon@mnt.org\n0\tstring\t\tPFR1\t\tPFR1 font\n>102\tstring\t\t>0\t\t\\b: %s\n\n# True Type fonts\n0\tstring\t\\000\\001\\000\\000\\000\tTrueType font data\n!:mime application/x-font-ttf\n\n0\tstring\t\t\\007\\001\\001\\000Copyright\\ (c)\\ 199\tAdobe Multiple Master font\n0\tstring\t\t\\012\\001\\001\\000Copyright\\ (c)\\ 199\tAdobe Multiple Master font\n\n# TrueType/OpenType font collections (.ttc)\n# http://www.microsoft.com/typography/otspec/otff.htm\n0\tstring\t\tttcf\t\tTrueType font collection data\n>4\tbelong\t\t0x00010000\t\\b, 1.0\n>>8\tbelong\t\t>0\t\t\\b, %d fonts\n>4\tbelong\t\t0x00020000\t\\b, 2.0\n>>8\tbelong\t\t>0\t\t\\b, %d fonts\n# 0x44454947 = 'DSIG'\n>>>16\tbelong\t\t0x44534947\t\\b, digitally signed\n\n# Opentype font data from Avi Bercovich\n0\tstring\t\tOTTO\t\tOpenType font data\n!:mime application/vnd.ms-opentype\n\n# Gurkan Sengun <gurkan@linuks.mine.nu>, www.linuks.mine.nu \n0\tstring\t\tSplineFontDB:\tSpline Font Database \n!:mime application/vnd.font-fontforge-sfd\n>14\tstring\t\tx\t\tversion %s\n\n# EOT\n34\tstring\t\tLP\t\tEmbedded OpenType (EOT)\n!:mime application/vnd.ms-fontobject\n\n# Web Open Font Format (.woff)\n# http://www.w3.org/TR/WOFF/\n0\tstring\t\twOFF\tWeb Open Font Format\n>4\tbelong\t\tx\t\\b, flavor %d\n>8\tbelong\t\tx\t\\b, length %d\n>20\tbeshort\t\tx\t\\b, version %d\n>22\tbeshort\t\tx\t\\b.%d\n\n#------------------------------------------------------------------------------\n# $File: fortran,v 1.7 2012/06/21 01:55:02 christos Exp $\n# FORTRAN source\n0\tregex/100l\t\\^[Cc][\\ \\t]\tFORTRAN program\n!:mime\ttext/x-fortran\n!:strength - 5\n\n#------------------------------------------------------------------------------\n# $File$\n# frame:  file(1) magic for FrameMaker files\n#\n# This stuff came on a FrameMaker demo tape, most of which is\n# copyright, but this file is \"published\" as witness the following:\n#\n# Note that this is the Framemaker Maker Interchange Format, not the\n# Normal format which would be application/vnd.framemaker.\n#\n0\tstring\t\t\\<MakerFile\tFrameMaker document\n!:mime\tapplication/x-mif\n>11\tstring\t\t5.5\t\t (5.5\n>11\tstring\t\t5.0\t\t (5.0\n>11\tstring\t\t4.0\t\t (4.0\n>11\tstring\t\t3.0\t\t (3.0\n>11\tstring\t\t2.0\t\t (2.0\n>11\tstring\t\t1.0\t\t (1.0\n>14\tbyte\t\tx\t\t  %c)\n0\tstring\t\t\\<MIFFile\tFrameMaker MIF (ASCII) file\n!:mime\tapplication/x-mif\n>9\tstring\t\t4.0\t\t (4.0)\n>9\tstring\t\t3.0\t\t (3.0)\n>9\tstring\t\t2.0\t\t (2.0)\n>9\tstring\t\t1.0\t\t (1.x)\n0\tsearch/1\t\\<MakerDictionary\tFrameMaker Dictionary text\n!:mime\tapplication/x-mif\n>17\tstring\t\t3.0\t\t (3.0)\n>17\tstring\t\t2.0\t\t (2.0)\n>17\tstring\t\t1.0\t\t (1.x)\n0\tstring\t\t\\<MakerScreenFont\tFrameMaker Font file\n!:mime\tapplication/x-mif\n>17\tstring\t\t1.01\t\t (%s)\n0\tstring\t\t\\<MML\t\tFrameMaker MML file\n!:mime\tapplication/x-mif\n0\tstring\t\t\\<BookFile\tFrameMaker Book file\n!:mime\tapplication/x-mif\n>10\tstring\t\t3.0\t\t (3.0\n>10\tstring\t\t2.0\t\t (2.0\n>10\tstring\t\t1.0\t\t (1.0\n>13\tbyte\t\tx\t\t  %c)\n# XXX - this book entry should be verified, if you find one, uncomment this\n#0\tstring\t\t\\<Book\\ \tFrameMaker Book (ASCII) file\n#!:mime\tapplication/x-mif\n#>6\tstring\t\t3.0\t\t (3.0)\n#>6\tstring\t\t2.0\t\t (2.0)\n#>6\tstring\t\t1.0\t\t (1.0)\n0\tstring\t\t\\<Maker\tIntermediate Print File\tFrameMaker IPL file\n!:mime\tapplication/x-mif\n\n#------------------------------------------------------------------------------\n# $File$\n# freebsd:  file(1) magic for FreeBSD objects\n#\n# All new-style FreeBSD magic numbers are in host byte order (i.e.,\n# little-endian on x86).\n#\n# XXX - this comes from the file \"freebsd\" in a recent FreeBSD version of\n# \"file\"; it, and the NetBSD stuff in \"netbsd\", appear to use different\n# schemes for distinguishing between executable images, shared libraries,\n# and object files.\n#\n# FreeBSD says:\n#\n#    Regardless of whether it's pure, demand-paged, or none of the\n#    above:\n#\n#\tif the entry point is < 4096, then it's a shared library if\n#\tthe \"has run-time loader information\" bit is set, and is\n#\tposition-independent if the \"is position-independent\" bit\n#\tis set;\n#\n#\tif the entry point is >= 4096 (or >4095, same thing), then it's\n#\tan executable, and is dynamically-linked if the \"has run-time\n#\tloader information\" bit is set.\n#\n# On x86, NetBSD says:\n#\n#    If it's neither pure nor demand-paged:\n#\n#\tif it has the \"has run-time loader information\" bit set, it's\n#\ta dynamically-linked executable;\n#\n#\tif it doesn't have that bit set, then:\n#\n#\t    if it has the \"is position-independent\" bit set, it's\n#\t    position-independent;\n#\n#\t    if the entry point is non-zero, it's an executable, otherwise\n#\t    it's an object file.\n#\n#    If it's pure:\n#\n#\tif it has the \"has run-time loader information\" bit set, it's\n#\ta dynamically-linked executable, otherwise it's just an\n#\texecutable.\n#\n#    If it's demand-paged:\n#\n#\tif it has the \"has run-time loader information\" bit set,\n#\tthen:\n#\n#\t    if the entry point is < 4096, it's a shared library;\n#\n#\t    if the entry point is = 4096 or > 4096 (i.e., >= 4096),\n#\t    it's a dynamically-linked executable);\n#\n#\tif it doesn't have the \"has run-time loader information\" bit\n#\tset, then it's just an executable.\n#\n# (On non-x86, NetBSD does much the same thing, except that it uses\n# 8192 on 68K - except for \"68k4k\", which is presumably \"68K with 4K\n# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's\n# had 8K pages; dunno about MIPS.)\n#\n# I suspect the two will differ only in perverse and uninteresting cases\n# (\"shared\" libraries that aren't demand-paged and whose pages probably\n# won't actually be shared, executables with entry points <4096).\n#\n# I leave it to those more familiar with FreeBSD and NetBSD to figure out\n# what the right answer is (although using \">4095\", FreeBSD-style, is\n# probably better than separately checking for \"=4096\" and \">4096\",\n# NetBSD-style).  (The old \"netbsd\" file analyzed FreeBSD demand paged\n# executables using the NetBSD technique.)\n#\n0\tlelong&0377777777\t041400407\tFreeBSD/i386\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400410\tFreeBSD/i386 pure\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400413\tFreeBSD/i386 demand paged\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400314\tFreeBSD/i386 compact demand paged\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n# XXX gross hack to identify core files\n# cores start with a struct tss; we take advantage of the following:\n# byte 7:     highest byte of the kernel stack pointer, always 0xfe\n#      8/9:   kernel (ring 0) ss value, always 0x0010\n#      10 - 27: ring 1 and 2 ss/esp, unused, thus always 0\n#      28:    low order byte of the current PTD entry, always 0 since the\n#             PTD is page-aligned\n#\n7\tstring\t\\357\\020\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tFreeBSD/i386 a.out core file\n>1039\tstring\t>\\0\tfrom '%s'\n\n# /var/run/ld.so.hints\n# What are you laughing about?\n0\tlelong\t\t\t011421044151\tld.so hints file (Little Endian\n>4\tlelong\t\t\t>0\t\t\\b, version %d)\n>4\tbelong\t\t\t<1\t\t\\b)\n0\tbelong\t\t\t011421044151\tld.so hints file (Big Endian\n>4\tbelong\t\t\t>0\t\t\\b, version %d)\n>4\tbelong\t\t\t<1\t\t\\b)\n\n#\n# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities\n#\n0\tstring\tSCRSHOT_\tscrshot(1) screenshot,\n>8\tbyte\tx\t\tversion %d,\n>9\tbyte\t2\t\t%d bytes in header,\n>>10\tbyte\tx\t\t%d chars wide by\n>>11\tbyte\tx\t\t%d chars high\n\n#------------------------------------------------------------------------------\n# $File: fsav,v 1.12 2013/03/23 14:15:30 christos Exp $\n# fsav:  file(1) magic for datafellows fsav virus definition files\n# Anthon van der Neut (anthon@mnt.org)\n\n# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}\n0\tbeshort\t\t0x1575\t\tfsav macro virus signatures\n>8\tleshort\t\t>0\t\t(%d-\n>11\tbyte\t\t>0\t\t\\b%02d-\n>10\tbyte\t\t>0\t\t\\b%02d)\n# ftp://ftp.f-prot.com/pub/sign.zip\n#10\tubyte\t\t<12\n#>9\tubyte\t\t<32\n#>>8\tubyte\t\t0x0a\n#>>>12\tubyte\t\t0x07\n#>>>>11\tuleshort\t>0\t\tfsav DOS/Windows virus signatures (%d-\n#>>>>10\tbyte\t\t0\t\t\\b01-\n#>>>>10\tbyte\t\t1\t\t\\b02-\n#>>>>10\tbyte\t\t2\t\t\\b03-\n#>>>>10\tbyte\t\t3\t\t\\b04-\n#>>>>10\tbyte\t\t4\t\t\\b05-\n#>>>>10\tbyte\t\t5\t\t\\b06-\n#>>>>10\tbyte\t\t6\t\t\\b07-\n#>>>>10\tbyte\t\t7\t\t\\b08-\n#>>>>10\tbyte\t\t8\t\t\\b09-\n#>>>>10\tbyte\t\t9\t\t\\b10-\n#>>>>10\tbyte\t\t10\t\t\\b11-\n#>>>>10\tbyte\t\t11\t\t\\b12-\n#>>>>9\tubyte\t\t>0\t\t\\b%02d)\n# ftp://ftp.f-prot.com/pub/sign2.zip\n#0\tubyte\t\t0x62\t\t\n#>1\tubyte\t\t0xF5\t\t\n#>>2\tubyte\t\t0x1\t\t\n#>>>3\tubyte\t\t0x1\t\t\n#>>>>4\tubyte\t\t0x0e\t\t\n#>>>>>13\t\tubyte\t>0\t\tfsav virus signatures\n#>>>>>>11\tubyte\tx\t\tsize 0x%02x\n#>>>>>>12\tubyte\tx\t\t\\b%02x\n#>>>>>>13\tubyte\tx\t\t\\b%02x bytes\n\n# Joerg Jenderek: joerg dot jenderek at web dot de\n# http://www.clamav.net/doc/latest/html/node45.html\n# .cvd files start with a 512 bytes colon separated header\n# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime\n# + gzipped tarball files\n0\tstring\t\tClamAV-VDB:\t\n>11\tstring\t\t>\\0\t\tClam AntiVirus database %-.23s\n>>34\tstring\t\t:\t\t\n>>>35\t\tstring\t\t!:\t\\b, version \n>>>>35\t\tstring\t\tx \t\\b%-.1s\n>>>>>36\t\tstring \t\t!:\t\n>>>>>>36\tstring\t\tx \t\\b%-.1s\n>>>>>>>37\tstring\t\t!:\t\n>>>>>>>>37\tstring\t\tx \t\\b%-.1s\n>>>>>>>>>38\tstring\t\t!:\t\n>>>>>>>>>>38\tstring\t\tx \t\\b%-.1s\n>512\tstring\t\t\\037\\213\t\\b, gzipped\n>769\tstring\t\tustar\\0\t\t\\b, tarred\n\n# Type: Grisoft AVG AntiVirus\n# From: David Newgas <david@newgas.net>\n0\tstring\tAVG7_ANTIVIRUS_VAULT_FILE\tAVG 7 Antivirus vault file data\n\n0\tstring\tX5O!P%@AP[4\\\\PZX54(P^)7CC)7}$EICAR\n>33\tstring\t-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\tEICAR virus test files\n\n#------------------------------------------------------------------------------\n# $File: mcrypt,v 1.5 2009/09/19 16:28:10 christos Exp $\n# fusecompress:   file(1) magic for fusecompress\n0\tstring\t\\037\\135\\211\tFuseCompress(ed) data\n>3\tbyte\t0x00\t(none format)\n>3\tbyte\t0x01\t(bz2 format)\n>3\tbyte\t0x02\t(gz format)\n>3\tbyte\t0x03\t(lzo format)\n>3\tbyte\t0x04\t(xor format)\n>3\tbyte\t>0x04\t(unknown format)\n>4\tlong\tx\tuncompressed size: %d\n\n#------------------------------------------------------------------------------\n# $File: games,v 1.13 2012/02/13 22:50:50 christos Exp $\n# games:  file(1) for games\n\n# Fabio Bonelli <fabiobonelli@libero.it>\n# Quake II - III data files\n0       string  IDP2        \tQuake II 3D Model file,\n>20     long    x               %u skin(s),\n>8      long    x               (%u x\n>12     long    x \t\t%u),\n>40     long    x               %u frame(s),\n>16     long    x               Frame size %u bytes,\n>24     long  \tx               %u vertices/frame,\n>28     long    x            \t%u texture coordinates,\n>32     long    x               %u triangles/frame\n\n0       string  IBSP            Quake\n>4      long    0x26            II Map file (BSP)\n>4      long    0x2E      \tIII Map file (BSP)\n\n0       string  IDS2            Quake II SP2 sprite file\n\n#---------------------------------------------------------------------------\n# Doom and Quake\n# submitted by Nicolas Patrois\n\n0       string  \\xcb\\x1dBoom\\xe6\\xff\\x03\\x01    Boom or linuxdoom demo\n# some doom lmp files don't match, I've got one beginning with \\x6d\\x02\\x01\\x01\n\n24      string  LxD\\ 203        Linuxdoom save\n>0      string  x       , name=%s\n>44     string  x       , world=%s\n\n# Quake\n\n0       string  PACK    Quake I or II world or extension\n>8\tlelong\t>0\t\\b, %d entries\n\n#0       string  -1\\x0a  Quake I demo\n#>30     string  x        version %.4s\n#>61     string  x        level %s       \n\n#0       string  5\\x0a   Quake I save\n\n# The levels\n\n# Quake 1\n\n0\tstring\t5\\x0aIntroduction             Quake I save: start Introduction\n0\tstring\t5\\x0athe_Slipgate_Complex     Quake I save: e1m1 The slipgate complex\n0\tstring\t5\\x0aCastle_of_the_Damned     Quake I save: e1m2 Castle of the damned\n0\tstring\t5\\x0athe_Necropolis           Quake I save: e1m3 The necropolis\n0\tstring\t5\\x0athe_Grisly_Grotto        Quake I save: e1m4 The grisly grotto\n0\tstring\t5\\x0aZiggurat_Vertigo         Quake I save: e1m8 Ziggurat vertigo (secret)\n0\tstring\t5\\x0aGloom_Keep               Quake I save: e1m5 Gloom keep\n0\tstring\t5\\x0aThe_Door_To_Chthon       Quake I save: e1m6 The door to Chthon\n0\tstring\t5\\x0aThe_House_of_Chthon      Quake I save: e1m7 The house of Chthon\n0\tstring\t5\\x0athe_Installation         Quake I save: e2m1 The installation\n0\tstring\t5\\x0athe_Ogre_Citadel         Quake I save: e2m2 The ogre citadel\n0\tstring\t5\\x0athe_Crypt_of_Decay       Quake I save: e2m3 The crypt of decay (dopefish lives!)\n0\tstring\t5\\x0aUnderearth               Quake I save: e2m7 Underearth (secret)\n0\tstring\t5\\x0athe_Ebon_Fortress        Quake I save: e2m4 The ebon fortress\n0\tstring\t5\\x0athe_Wizard's_Manse       Quake I save: e2m5 The wizard's manse\n0\tstring\t5\\x0athe_Dismal_Oubliette     Quake I save: e2m6 The dismal oubliette\n0\tstring\t5\\x0aTermination_Central      Quake I save: e3m1 Termination central\n0\tstring\t5\\x0aVaults_of_Zin            Quake I save: e3m2 Vaults of Zin\n0\tstring\t5\\x0athe_Tomb_of_Terror       Quake I save: e3m3 The tomb of terror\n0\tstring\t5\\x0aSatan's_Dark_Delight     Quake I save: e3m4 Satan's dark delight\n0\tstring\t5\\x0athe_Haunted_Halls        Quake I save: e3m7 The haunted halls (secret)\n0\tstring\t5\\x0aWind_Tunnels             Quake I save: e3m5 Wind tunnels\n0\tstring\t5\\x0aChambers_of_Torment      Quake I save: e3m6 Chambers of torment\n0\tstring\t5\\x0athe_Sewage_System        Quake I save: e4m1 The sewage system\n0\tstring\t5\\x0aThe_Tower_of_Despair     Quake I save: e4m2 The tower of despair\n0\tstring\t5\\x0aThe_Elder_God_Shrine     Quake I save: e4m3 The elder god shrine\n0\tstring\t5\\x0athe_Palace_of_Hate       Quake I save: e4m4 The palace of hate\n0\tstring\t5\\x0aHell's_Atrium            Quake I save: e4m5 Hell's atrium\n0\tstring\t5\\x0athe_Nameless_City        Quake I save: e4m8 The nameless city (secret)\n0\tstring\t5\\x0aThe_Pain_Maze            Quake I save: e4m6 The pain maze\n0\tstring\t5\\x0aAzure_Agony              Quake I save: e4m7 Azure agony\n0\tstring\t5\\x0aShub-Niggurath's_Pit     Quake I save: end Shub-Niggurath's pit\n\n# Quake DeathMatch levels\n\n0\tstring\t5\\x0aPlace_of_Two_Deaths\t Quake I save: dm1 Place of two deaths\n0\tstring\t5\\x0aClaustrophobopolis\t\t Quake I save: dm2 Claustrophobopolis\n0\tstring\t5\\x0aThe_Abandoned_Base\t\t Quake I save: dm3 The abandoned base\n0\tstring\t5\\x0aThe_Bad_Place\t\t Quake I save: dm4 The bad place\n0\tstring\t5\\x0aThe_Cistern\t\t Quake I save: dm5 The cistern\n0\tstring\t5\\x0aThe_Dark_Zone\t\t Quake I save: dm6 The dark zone\n\n# Scourge of Armagon\n\n0\tstring\t5\\x0aCommand_HQ               Quake I save: start Command HQ\n0\tstring\t5\\x0aThe_Pumping_Station      Quake I save: hip1m1 The pumping station\n0\tstring\t5\\x0aStorage_Facility         Quake I save: hip1m2 Storage facility\n0\tstring\t5\\x0aMilitary_Complex         Quake I save: hip1m5 Military complex (secret)\n0\tstring\t5\\x0athe_Lost_Mine            Quake I save: hip1m3 The lost mine\n0\tstring\t5\\x0aResearch_Facility        Quake I save: hip1m4 Research facility\n0\tstring\t5\\x0aAncient_Realms           Quake I save: hip2m1 Ancient realms\n0\tstring\t5\\x0aThe_Gremlin's_Domain     Quake I save: hip2m6 The gremlin's domain (secret)\n0\tstring\t5\\x0aThe_Black_Cathedral      Quake I save: hip2m2 The black cathedral\n0\tstring\t5\\x0aThe_Catacombs            Quake I save: hip2m3 The catacombs\n0\tstring\t5\\x0athe_Crypt__              Quake I save: hip2m4 The crypt\n0\tstring\t5\\x0aMortum's_Keep            Quake I save: hip2m5 Mortum's keep\n0\tstring\t5\\x0aTur_Torment              Quake I save: hip3m1 Tur torment\n0\tstring\t5\\x0aPandemonium              Quake I save: hip3m2 Pandemonium\n0\tstring\t5\\x0aLimbo                    Quake I save: hip3m3 Limbo\n0\tstring\t5\\x0athe_Edge_of_Oblivion     Quake I save: hipdm1 The edge of oblivion (secret)\n0\tstring\t5\\x0aThe_Gauntlet             Quake I save: hip3m4 The gauntlet\n0\tstring\t5\\x0aArmagon's_Lair           Quake I save: hipend Armagon's lair\n\n# Malice\n\n0\tstring\t5\\x0aThe_Academy      Quake I save: start The academy\n0\tstring\t5\\x0aThe_Lab          Quake I save: d1 The lab\n0\tstring\t5\\x0aArea_33          Quake I save: d1b Area 33\n0\tstring\t5\\x0aSECRET_MISSIONS  Quake I save: d3b Secret missions\n0\tstring\t5\\x0aThe_Hospital     Quake I save: d10 The hospital (secret)\n0\tstring\t5\\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)\n0\tstring\t5\\x0aBACK_2_MALICE    Quake I save: d4b Back to Malice\n0\tstring\t5\\x0aArea44           Quake I save: d1c Area 44\n0\tstring\t5\\x0aTakahiro_Towers  Quake I save: d2 Takahiro towers\n0\tstring\t5\\x0aA_Rat's_Life     Quake I save: d3 A rat's life\n0\tstring\t5\\x0aInto_The_Flood   Quake I save: d4 Into the flood\n0\tstring\t5\\x0aThe_Flood        Quake I save: d5 The flood\n0\tstring\t5\\x0aNuclear_Plant    Quake I save: d6 Nuclear plant\n0\tstring\t5\\x0aThe_Incinerator_Plant    Quake I save: d7 The incinerator plant\n0\tstring\t5\\x0aThe_Foundry              Quake I save: d7b The foundry\n0\tstring\t5\\x0aThe_Underwater_Base      Quake I save: d8 The underwater base\n0\tstring\t5\\x0aTakahiro_Base            Quake I save: d9 Takahiro base\n0\tstring\t5\\x0aTakahiro_Laboratories    Quake I save: d12 Takahiro laboratories\n0\tstring\t5\\x0aStayin'_Alive    Quake I save: d13 Stayin' alive\n0\tstring\t5\\x0aB.O.S.S._HQ      Quake I save: d14 B.O.S.S. HQ\n0\tstring\t5\\x0aSHOWDOWN!        Quake I save: d15 Showdown!\n\n# Malice DeathMatch levels\n\n0\tstring\t5\\x0aThe_Seventh_Precinct\t Quake I save: ddm1 The seventh precinct\n0\tstring\t5\\x0aSub_Station\t\t Quake I save: ddm2 Sub station\n0\tstring\t5\\x0aCrazy_Eights!\t\t Quake I save: ddm3 Crazy eights!\n0\tstring\t5\\x0aEast_Side_Invertationa\t Quake I save: ddm4 East side invertationa\n0\tstring\t5\\x0aSlaughterhouse\t\t Quake I save: ddm5 Slaughterhouse\n0\tstring\t5\\x0aDOMINO\t\t\t Quake I save: ddm6 Domino\n0\tstring\t5\\x0aSANDRA'S_LADDER\t\t Quake I save: ddm7 Sandra's ladder\n\n\n0\tstring\tMComprHD\tMAME CHD compressed hard disk image,\n>12\tbelong\tx\t\tversion %u\n\n# doom - submitted by Jon Dowland\n\n0\tstring\t=IWAD\t\tdoom main IWAD data\n>4\tlelong\tx\t\tcontaining %d lumps\n0\tstring\t=PWAD\t\tdoom patch PWAD data\n>4\tlelong\tx\t\tcontaining %d lumps\n\n# Build engine group files (Duke Nukem, Shadow Warrior, ...)\n# Extension: .grp\n# Created by: \"Ganael Laplanche\" <ganael.laplanche@martymac.org>\n0\tstring\tKenSilverman\tBuild engine group file\n>12\tlelong\tx\t\tcontaining %d files\n\n# Summary: Warcraft 3 save\n# Extension: .w3g\n# Created by: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t\tWarcraft\\ III\\ recorded\\ game\t%s\n\n\n# Summary: Warcraft 3 map\n# Extension: .w3m\n# Created by: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t\tHM3W\t\tWarcraft III map file\n\n\n# Summary: SGF Smart Game Format\n# Extension: .sgf\n# Reference: http://www.red-bean.com/sgf/\n# Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>\n# Modified by (1): Abel Cheung (regex, more game format)\n# FIXME: Some games don't have GM (game type)\n0\tregex\t\t\\\\(;.*GM\\\\[[0-9]{1,2}\\\\]\tSmart Game Format\n>2\tsearch/0x200/b\tGM[\n>>&0\tstring\t\t1]\t(Go)\n>>&0\tstring\t\t2]\t(Othello)\n>>&0\tstring\t\t3]\t(chess)\n>>&0\tstring\t\t4]\t(Gomoku+Renju)\n>>&0\tstring\t\t5]\t(Nine Men's Morris)\n>>&0\tstring\t\t6]\t(Backgammon)\n>>&0\tstring\t\t7]\t(Chinese chess)\n>>&0\tstring\t\t8]\t(Shogi)\n>>&0\tstring\t\t9]\t(Lines of Action)\n>>&0\tstring\t\t10]\t(Ataxx)\n>>&0\tstring\t\t11]\t(Hex)\n>>&0\tstring\t\t12]\t(Jungle)\n>>&0\tstring\t\t13]\t(Neutron)\n>>&0\tstring\t\t14]\t(Philosopher's Football)\n>>&0\tstring\t\t15]\t(Quadrature)\n>>&0\tstring\t\t16]\t(Trax)\n>>&0\tstring\t\t17]\t(Tantrix)\n>>&0\tstring\t\t18]\t(Amazons)\n>>&0\tstring\t\t19]\t(Octi)\n>>&0\tstring\t\t20]\t(Gess)\n>>&0\tstring\t\t21]\t(Twixt)\n>>&0\tstring\t\t22]\t(Zertz)\n>>&0\tstring\t\t23]\t(Plateau)\n>>&0\tstring\t\t24]\t(Yinsh)\n>>&0\tstring\t\t25]\t(Punct)\n>>&0\tstring\t\t26]\t(Gobblet)\n>>&0\tstring\t\t27]\t(hive)\n>>&0\tstring\t\t28]\t(Exxit)\n>>&0\tstring\t\t29]\t(Hnefatal)\n>>&0\tstring\t\t30]\t(Kuba)\n>>&0\tstring\t\t31]\t(Tripples)\n>>&0\tstring\t\t32]\t(Chase)\n>>&0\tstring\t\t33]\t(Tumbling Down)\n>>&0\tstring\t\t34]\t(Sahara)\n>>&0\tstring\t\t35]\t(Byte)\n>>&0\tstring\t\t36]\t(Focus)\n>>&0\tstring\t\t37]\t(Dvonn)\n>>&0\tstring\t\t38]\t(Tamsk)\n>>&0\tstring\t\t39]\t(Gipf)\n>>&0\tstring\t\t40]\t(Kropki)\n\n##############################################\n# NetImmerse/Gamebryo game engine entries\n\n# Summary: Gamebryo game engine file\n# Extension: .nif, .kf\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\tGamebryo\\ File\\ Format,\\ Version\\ \tGamebryo game engine file\n>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Summary: Gamebryo game engine file\n# Extension: .kfm\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\t;Gamebryo\\ KFM\\ File\\ Version\\ \t\tGamebryo game engine animation File\n>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Summary: NetImmerse game engine file\n# Extension .nif\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\tNetImmerse\\ File\\ Format,\\ Versio\t\t\n>&0\t\tstring\t\tn\\ \t\t\t\t\tNetImmerse game engine file\n>>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Type:\tSGF Smart Game Format\n# URL:\thttp://www.red-bean.com/sgf/\n# From:\tEduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>\n2\tregex/c\t\\\\(;.*GM\\\\[[0-9]{1,2}\\\\]\tSmart Game Format\n>2\tregex/c\tGM\\\\[1\\\\]\t\t\t- Go Game\n>2\tregex/c\tGM\\\\[6\\\\]\t\t\t- BackGammon Game\n>2\tregex/c\tGM\\\\[11\\\\]\t\t\t- Hex Game\n>2\tregex/c\tGM\\\\[18\\\\]\t\t\t- Amazons Game\n>2\tregex/c\tGM\\\\[19\\\\]\t\t\t- Octi Game\n>2\tregex/c\tGM\\\\[20\\\\]\t\t\t- Gess Game\n>2\tregex/c\tGM\\\\[21\\\\]\t\t\t- twix Game\n\n# Epic Games/Unreal Engine Package\n#\n0\tlelong\t\t0x9E2A83C1\tUnreal Engine Package,\n>4\tleshort\t\tx\t\tversion: %i\n>12\tlelong\t\t!0\t\t\\b, names: %i\n>28\tlelong\t\t!0\t\t\\b, imports: %i\n>20\tlelong\t\t!0\t\t\\b, exports: %i\n\n#------------------------------------------------------------------------------\n# $File$\n# gcc:  file(1) magic for GCC special files\n#\n0\tstring\t\tgpch\t\tGCC precompiled header\n\n# The version field is annoying.  It's 3 characters, not zero-terminated.\n>5\tbyte\t\tx\t\t\t(version %c\n>6\tbyte\t\tx\t\t\t\\b%c\n>7\tbyte\t\tx\t\t\t\\b%c)\n\n# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'\n>4\tbyte\t\t67\t\t\tfor C\n>4\tbyte\t\t111\t\t\tfor Objective C\n>4\tbyte\t\t43\t\t\tfor C++\n>4\tbyte\t\t79\t\t\tfor Objective C++\n\n#------------------------------------------------------------------------------\n# $File: geo,v 1.2 2013/01/02 15:27:53 christos Exp $\n# Geo- files from Kurt Schwehr <schwehr@ccom.unh.edu>\n\n######################################################################\n#\n# Acoustic Doppler Current Profilers (ADCP)\n#\n######################################################################\n\n0\tbeshort\t0x7f7f\tRDI Acoustic Doppler Current Profiler (ADCP)\n\n######################################################################\n#\n# Metadata\n#\n######################################################################\n\n0\tstring\tIdentification_Information\tFGDC ASCII metadata\n\n######################################################################\n#\n# Seimsic / Subbottom\n#\n######################################################################\n\n# Knudsen subbottom chirp profiler - Binary File Format: B9\n# KEB D409-03167 V1.75 Huffman\n0\tstring\tKEB\\ \tKnudsen seismic KEL binary (KEB) -\n>4\tregex\t[-A-Z0-9]*\tSoftware: %s\n>>&1\tregex\tV[0-9]*\\.[0-9]*\tversion %s\n\n######################################################################\n#\n# LIDAR - Laser altimetry or bathy\n#\n######################################################################\n\n\n# Caris LIDAR format for LADS comes as two parts... ascii location file and binary waveform data\n0\tstring\tHCA\tLADS Caris Ascii Format (CAF) bathymetric lidar\n>4\tregex [0-9]*\\.[0-9]*\tversion %s\n\n0\tstring\tHCB\tLADS Caris Binary Format (CBF) bathymetric lidar waveform data\n>3      byte    x\tversion %d .\n>4\tbyte\tx\t%d\n\n\n######################################################################\n#\n# MULTIBEAM SONARS http://www.ldeo.columbia.edu/res/pi/MB-System/formatdoc/\n#\n######################################################################\n\n# GeoAcoustics - GeoSwath Plus\n4\tbeshort\t0x2002\tGeoSwath RDF\n0\tstring\tStart:-\tGeoSwatch auf text file\n\n# Seabeam 2100 \n# mbsystem code mb41\n0\tstring SB2100\tSeaBeam 2100 multibeam sonar\n0\tstring SB2100DR\tSeaBeam 2100 DR multibeam sonar\n0\tstring SB2100PR SeaBeam 2100 PR multibeam sonar\n\n# This corresponds to MB-System format 94, L-3/ELAC/SeaBeam XSE vendor\n# format. It is the format of our upgraded SeaBeam 2112 on R/V KNORR.\n0    string $HSF    XSE multibeam\n\n# mb121 http://www.saic.com/maritime/gsf/\n8\tstring\tGSF-v\tSAIC generic sensor format (GSF) sonar data,\n>&0\tregex [0-9]*\\.[0-9]*\tversion %s\n\n# MGD77 - http://www.ngdc.noaa.gov/mgg/dat/geodas/docs/mgd77.htm\n# mb161\n9\tstring MGD77\tMGD77 Header, Marine Geophysical Data Exchange Format\n\n# MBSystem processing caches the mbinfo output\n1\tstring\tSwath\\ Data\\ File:\tmbsystem info cache\n\n# Caris John Hughes Clark format\n0\tstring\tHDCS\tCaris multibeam sonar related data\n1\tstring\tStart/Stop\\ parameter\\ header:\tCaris ASCII project summary\n\n######################################################################\n#\n# Visualization and 3D modeling\n#\n######################################################################\n\n# IVS - IVS3d.com Tagged Data Represetation\n0\tstring\t%%\\ TDR\\ 2.0\tIVS Fledermaus TDR file\n\n# http://www.ecma-international.org/publications/standards/Ecma-363.htm\n# 3D in PDFs\n0\tstring\tU3D\tECMA-363, Universal 3D\n\n######################################################################\n#\n# Support files\n#\n######################################################################\n\n# https://midas.psi.ch/elog/\n0\tstring\t$@MID@$\telog journal entry\n\n# Geospatial Designs http://www.geospatialdesigns.com/surfer6_format.htm\n0\tstring\t\tDSBB\tSurfer 6 binary grid file\n>4\tleshort\t\tx\t\\b, %d\n>6\tleshort\t\tx\t\\bx%d\n>8\tledouble\tx\t\\b, minx=%g\n>16\tledouble\tx\t\\b, maxx=%g\n>24\tledouble\tx\t\\b, miny=%g\n>32\tledouble\tx\t\\b, maxy=%g\n>40\tledouble\tx\t\\b, minz=%g\n>48\tledouble\tx\t\\b, maxz=%g\n\n\n#------------------------------------------------------------------------------\n# $File$\n# GEOS files (Vidar Madsen, vidar@gimp.org)\n# semi-commonly used in embedded and handheld systems.\n0\tbelong\t0xc745c153\tGEOS\n>40\tbyte\t1\texecutable\n>40\tbyte\t2\tVMFile\n>40\tbyte\t3\tbinary\n>40\tbyte\t4\tdirectory label\n>40\tbyte\t<1\tunknown\n>40\tbyte\t>4\tunknown\n>4\tstring\t>\\0\t\\b, name \"%s\"\n#>44\tshort\tx\t\\b, version %d\n#>46\tshort\tx\t\\b.%d\n#>48\tshort\tx\t\\b, rev %d\n#>50\tshort\tx\t\\b.%d\n#>52\tshort\tx\t\\b, proto %d\n#>54\tshort\tx\t\\br%d\n#>168\tstring\t>\\0\t\\b, copyright \"%s\"\n\n#------------------------------------------------------------------------------\n# $File: gimp,v 1.8 2013/12/21 14:29:45 christos Exp $\n# GIMP Gradient: file(1) magic for the GIMP's gradient data files (.ggr)\n# by Federico Mena <federico@nuclecu.unam.mx>\n\n0       string/t        GIMP\\ Gradient  GIMP gradient data\n\n# GIMP palette (.gpl)\n# From: Markus Heidelberg <markus.heidelberg@web.de>\n0       string/t        GIMP\\ Palette   GIMP palette data\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the XCF image format used in the GIMP (.xcf) developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n0\tstring\t\tgimp\\ xcf\tGIMP XCF image data,\n!:mime\timage/x-xcf\n>9\tstring\t\tfile\t\tversion 0,\n>9\tstring\t\tv\t\tversion\n>>10\tstring\t\t>\\0\t\t%s,\n>14\tbelong\t\tx\t\t%u x\n>18\tbelong\t\tx\t\t%u,\n>22     belong          0               RGB Color\n>22     belong          1               Greyscale\n>22     belong          2               Indexed Color\n>22\tbelong\t\t>2\t\tUnknown Image Type.\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the patterns used in the GIMP (.pat), developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n20      string          GPAT            GIMP pattern data,\n>24     string          x               %s\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the brushes used in the GIMP (.gbr), developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n20      string          GIMP            GIMP brush data\n\n# GIMP Curves File\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t#\\040GIMP\\040Curves\\040File\tGIMP curve file\n\n#------------------------------------------------------------------------------\n# $File: gnome,v 1.4 2014/04/28 12:04:50 christos Exp $\n# GNOME related files\n\n# Contributed by Josh Triplett\n# FIXME: Could be simplified if pstring supported two-byte counts\n0         string   GnomeKeyring\\n\\r\\0\\n GNOME keyring\n>&0       ubyte    0                    \\b, major version 0\n>>&0      ubyte    0                    \\b, minor version 0\n>>>&0     ubyte    0                    \\b, crypto type 0 (AES)\n>>>&0     ubyte    >0                   \\b, crypto type %u (unknown)\n>>>&1     ubyte    0                    \\b, hash type 0 (MD5)\n>>>&1     ubyte    >0                   \\b, hash type %u (unknown)\n>>>&2     ubelong  0xFFFFFFFF           \\b, name NULL\n>>>&2     ubelong  !0xFFFFFFFF\n>>>>&-4   ubelong  >255                 \\b, name too long for file's pstring type\n>>>>&-4   ubelong  <256\n>>>>>&-1  pstring  x                    \\b, name \"%s\"\n>>>>>>&0  ubeqdate x                    \\b, last modified %s\n>>>>>>&8  ubeqdate x                    \\b, created %s\n>>>>>>&16 ubelong  &1\n>>>>>>>&0 ubelong  x                    \\b, locked if idle for %u seconds\n>>>>>>&16 ubelong  ^1                   \\b, not locked if idle\n>>>>>>&24 ubelong  x                    \\b, hash iterations %u\n>>>>>>&28 ubequad  x                    \\b, salt %llu\n>>>>>>&52 ubelong  x                    \\b, %u item(s)\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n4\tstring\tgtktalog\t\tGNOME Catalogue (gtktalog)\n>13\tstring\t>\\0\t\t\tversion %s\n\n# Summary: GStreamer binary registry\n# Extension: .bin\n# Submitted by: Josh Triplett <josh@joshtriplett.org>\n0\tbelong\t0xc0def00d\t\tGStreamer binary registry\n>4\tstring\tx\t\t\t\\b, version %s\n\n# GVariant Database file\n# By Elan Ruusamae <glen@delfi.ee>\n# https://github.com/GNOME/gvdb/blob/master/gvdb-format.h\n# It's always \"GVariant\", it's byte swapped on incompatible archs\n# See https://github.com/GNOME/gvdb/blob/master/gvdb-builder.c\n# file_builder_serialise()\n# http://developer.gnome.org/glib/2.34/glib-GVariant.html#GVariant\n0\tstring\tGVariant\tGVariant Database file,\n# version is never filled. probably future extension\n>8\tlelong\tx\t\tversion %d\n# not sure are these usable, so commented out\n#>>16\tlelong\tx\t\tstart %d,\n#>>>20\tlelong\tx\t\tend %d\n\n# G-IR database made by gobject-introspect toolset,\n# http://live.gnome.org/GObjectIntrospection\n0\tstring\t\tGOBJ\\nMETADATA\\r\\n\\032\tG-IR binary database\n>16\tbyte\t\tx\t\t\t\\b, v%d\n>17\tbyte\t\tx\t\t\t\\b.%d\n>20\tleshort\t\tx\t\t\t\\b, %d entries\n>22\tleshort\t\tx\t\t\t\\b/%d local\n\n#------------------------------------------------------------------------------\n# $File: gnu,v 1.14 2012/10/03 23:38:12 christos Exp $\n# gnu:  file(1) magic for various GNU tools\n#\n# GNU nlsutils message catalog file format\n#\n# GNU message catalog (.mo and .gmo files)\n\n0\tstring\t\t\\336\\22\\4\\225\tGNU message catalog (little endian),\n>6\tleshort\t\tx\t\trevision %d.\n>4\tleshort\t\t>0\t\t\\b%d,\n>>8\tlelong\t\tx\t\t%d messages,\n>>36\tlelong\t\tx\t\t%d sysdep messages\n>4\tleshort\t\t=0\t\t\\b%d,\n>>8\tlelong\t\tx\t\t%d messages\n\n0\tstring\t\t\\225\\4\\22\\336\tGNU message catalog (big endian),\n>4\tbeshort\t\tx\t\trevision %d.\n>6\tbeshort\t\t>0\t\t\\b%d,\n>>8\tbelong\t\tx\t\t%d messages,\n>>36\tbelong\t\tx\t\t%d sysdep messages\n>6\tbeshort\t\t=0\t\t\\b%d,\n>>8\tbelong\t\tx\t\t%d messages\n\n\n# GnuPG\n# The format is very similar to pgp\n0\tstring          \\001gpg                 GPG key trust database\n>4\tbyte            x                       version %d\n# Note: magic.mime had 0x8501 for the next line instead of 0x8502\n0\tbeshort\t\t0x8502\t\t\tGPG encrypted data\n!:mime\ttext/PGP # encoding: data\n\n# This magic is not particularly good, as the keyrings don't have true\n# magic. Nevertheless, it covers many keyrings.\n0       beshort         0x9901                  GPG key public ring\n!:mime\tapplication/x-gnupg-keyring\n\n# Symmetric encryption\n0\tleshort\t\t0x0d8c\n>4\tleshort\t\t0x0203\n>>2\tleshort\t\t0x0204\t\tGPG symmetrically encrypted data (3DES cipher)\n>>2\tleshort\t\t0x0304\t\tGPG symmetrically encrypted data (CAST5 cipher)\n>>2\tleshort\t\t0x0404\t\tGPG symmetrically encrypted data (BLOWFISH cipher)\n>>2\tleshort\t\t0x0704\t\tGPG symmetrically encrypted data (AES cipher)\n>>2\tleshort\t\t0x0804\t\tGPG symmetrically encrypted data (AES192 cipher)\n>>2\tleshort\t\t0x0904\t\tGPG symmetrically encrypted data (AES256 cipher)\n>>2\tleshort\t\t0x0a04\t\tGPG symmetrically encrypted data (TWOFISH cipher)\n>>2\tleshort\t\t0x0b04\t\tGPG symmetrically encrypted data (CAMELLIA128 cipher)\n>>2\tleshort\t\t0x0c04\t\tGPG symmetrically encrypted data (CAMELLIA192 cipher)\n>>2\tleshort\t\t0x0d04\t\tGPG symmetrically encrypted data (CAMELLIA256 cipher)\n\n\n# GnuPG Keybox file\n# <http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=kbx/keybox-blob.c;hb=HEAD>\n# From: Philipp Hahn <hahn@univention.de>\n0\tbelong\t32\n>4\tbyte\t1\n>>8\tstring\tKBXf\tGPG keybox database\n>>>5\tbyte\t1\tversion %d\n>>>16\tbedate\tx\t\\b, created-at %s\n>>>20\tbedate\tx\t\\b, last-maintained %s\n\n\n# Gnumeric spreadsheet\n# This entry is only semi-helpful, as Gnumeric compresses its files, so\n# they will ordinarily reported as \"compressed\", but at least -z helps\n39      string          =<gmr:Workbook           Gnumeric spreadsheet\n\n# From: James Youngman <jay@gnu.org> \n# gnu find magic\n0\tstring\t\\0LOCATE\tGNU findutils locate database data\n>7\tstring\t>\\0\t\t\\b, format %s\n>7\tstring\t02\t\t\\b (frcode)\n\n# Files produced by GNU gettext\n0\tlong\t0xDE120495\t\tGNU-format message catalog data\n0\tlong\t0x950412DE\t\tGNU-format message catalog data\n\n# gettext message catalogue\n0\tregex\t\\^msgid\\ \t\tGNU gettext message catalogue text\n!:mime text/x-po\n\n#------------------------------------------------------------------------------\n# $File$\n# gnumeric:  file(1) magic for Gnumeric spreadsheet\n# This entry is only semi-helpful, as Gnumeric compresses its files, so\n# they will ordinarily reported as \"compressed\", but at least -z helps\n39\tstring\t=<gmr:Workbook\tGnumeric spreadsheet\n!:mime\tapplication/x-gnumeric\n\n#------------------------------------------------------------------------------\n# $File: gpt,v 1.2 2014/04/28 12:04:50 christos Exp $\n#\n# GPT Partition table patterns.\n# Author: Rogier Goossens (goossens.rogier@gmail.com)\n# Note that a GPT-formatted disk must contain an MBR as well.\n#\n\n# The initial segment (up to >>>>>>>>422) was copied from the X86\n# partition table code (aka MBR).\n# This is kept separate, so that MBR partitions are not reported as well.\n# (use -k if you do want them as well)\n\n# First, detect the MBR partiton table\n# If more than one GPT protective MBR partition exists, don't print anything\n# (the other MBR detection code will then just print the MBR partition table)\n0x1FE\t\t\tleshort\t\t0xAA55\n>3\t\t\tstring\t\t!MS\n>>3\t\t\tstring\t\t!SYSLINUX\n>>>3\t\t\tstring\t\t!MTOOL\n>>>>3\t\t\tstring\t\t!NEWLDR\n>>>>>5\t\t\tstring\t\t!DOS\n# not FAT (32 bit)\n>>>>>>82\t\tstring\t\t!FAT32\n#not Linux kernel\n>>>>>>>514\t\tstring\t\t!HdrS\n#not BeOS\n>>>>>>>>422\t\tstring\t\t!Be\\ Boot\\ Loader\n# GPT with protective MBR entry in partition 1 (only)\n>>>>>>>>>450\t\tubyte\t\t0xee\n>>>>>>>>>>466\t\tubyte\t\t!0xee\n>>>>>>>>>>>482\t\tubyte\t\t!0xee\n>>>>>>>>>>>>498\t\tubyte\t\t!0xee\n#>>>>>>>>>>>>>446\tuse\t\tgpt-mbr-partition\n>>>>>>>>>>>>>(454.l*8192)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>0\t\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>0\t\t\tubyte\t\tx\t\tof 8192 bytes\t\t\n>>>>>>>>>>>>>(454.l*8192)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>(454.l*4096)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 4096 bytes\n>>>>>>>>>>>>>>(454.l*4096)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>(454.l*2048)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 2048 bytes\n>>>>>>>>>>>>>>>(454.l*2048)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>(454.l*1024)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 1024 bytes\n>>>>>>>>>>>>>>>>(454.l*1024)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>>(454.l*512)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 512 bytes\n# GPT with protective MBR entry in partition 2 (only)\n>>>>>>>>>450\t\tubyte\t\t!0xee\n>>>>>>>>>>466\t\tubyte\t\t0xee\n>>>>>>>>>>>482\t\tubyte\t\t!0xee\n>>>>>>>>>>>>498\t\tubyte\t\t!0xee\n#>>>>>>>>>>>>>462\tuse\t\tgpt-mbr-partition\n>>>>>>>>>>>>>(470.l*8192)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>0\t\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>0\t\t\tubyte\t\tx\t\tof 8192 bytes\t\t\n>>>>>>>>>>>>>(470.l*8192)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>(470.l*4096)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 4096 bytes\n>>>>>>>>>>>>>>(470.l*4096)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>(470.l*2048)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 2048 bytes\n>>>>>>>>>>>>>>>(470.l*2048)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>(470.l*1024)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 1024 bytes\n>>>>>>>>>>>>>>>>(470.l*1024)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>>(470.l*512)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 512 bytes\n# GPT with protective MBR entry in partition 3 (only)\n>>>>>>>>>450\t\tubyte\t\t!0xee\n>>>>>>>>>>466\t\tubyte\t\t!0xee\n>>>>>>>>>>>482\t\tubyte\t\t0xee\n>>>>>>>>>>>>498\t\tubyte\t\t!0xee\n#>>>>>>>>>>>>>478\tuse\t\tgpt-mbr-partition\n>>>>>>>>>>>>>(486.l*8192)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>0\t\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>0\t\t\tubyte\t\tx\t\tof 8192 bytes\t\t\n>>>>>>>>>>>>>(486.l*8192)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>(486.l*4096)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 4096 bytes\n>>>>>>>>>>>>>>(486.l*4096)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>(486.l*2048)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 2048 bytes\n>>>>>>>>>>>>>>>(486.l*2048)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>(486.l*1024)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 1024 bytes\n>>>>>>>>>>>>>>>>(486.l*1024)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>>(486.l*512)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 512 bytes\n# GPT with protective MBR entry in partition 4 (only)\n>>>>>>>>>450\t\tubyte\t\t!0xee\n>>>>>>>>>>466\t\tubyte\t\t!0xee\n>>>>>>>>>>>482\t\tubyte\t\t!0xee\n>>>>>>>>>>>>498\t\tubyte\t\t0xee\n#>>>>>>>>>>>>>494\tuse\t\tgpt-mbr-partition\n>>>>>>>>>>>>>(502.l*8192)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>0\t\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>0\t\t\tubyte\t\tx\t\tof 8192 bytes\t\t\n>>>>>>>>>>>>>(502.l*8192)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>(502.l*4096)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 4096 bytes\n>>>>>>>>>>>>>>(502.l*4096)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>(502.l*2048)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 2048 bytes\n>>>>>>>>>>>>>>>(502.l*2048)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>(502.l*1024)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 1024 bytes\n>>>>>>>>>>>>>>>>(502.l*1024)\tstring\t\t!EFI\\ PART\n>>>>>>>>>>>>>>>>>(502.l*512)\tstring\t\tEFI\\ PART\tGPT partition table\n>>>>>>>>>>>>>>>>>>0\t\tuse\t\tgpt-mbr-type\n>>>>>>>>>>>>>>>>>>&-8\t\tuse\t\tgpt-table\n>>>>>>>>>>>>>>>>>>0\t\tubyte\t\tx\t\tof 512 bytes\n\n# The following code does GPT detection and processing, including\n# sector size detection.\n# It has to be duplicated above because the top-level pattern\n# (i.e. not called using 'use') must print *something* for file\n# to count it as a match. Text only printed in named patterns is\n# not counted, and causes file to continue, and try and match\n# other patterns.\n#\n# Unfortunately, when assuming sector sizes >=16k, if the sector size\n# happens to be 512 instead, we may find confusing data after the GPT\n# table...  If the GPT table has less than 128 entries, this may even\n# happen for assumed sector sizes as small as 4k\n# This could be solved by checking for the presence of the backup GPT\n# header as well, but that makes the logic extremely complex\n##0\t\tname\t\tgpt-mbr-partition\n##>(8.l*8192)\tstring\t\tEFI\\ PART\n##>>(8.l*8192)\tuse\t\tgpt-mbr-type\n##>>&-8\t\tuse\t\tgpt-table\n##>>0\t\tubyte\t\tx\t\tof 8192 bytes\t\t\n##>(8.l*8192)\tstring\t\t!EFI\\ PART\n##>>(8.l*4096)\tstring\t\tEFI\\ PART\tGPT partition table\n##>>>0\t\tuse\t\tgpt-mbr-type\n##>>>&-8\t\tuse\t\tgpt-table\n##>>>0\t\tubyte\t\tx\t\tof 4096 bytes\n##>>(8.l*4096)\tstring\t\t!EFI\\ PART\n##>>>(8.l*2048)\tstring\t\tEFI\\ PART\tGPT partition table\n##>>>>0\t\tuse\t\tgpt-mbr-type\n##>>>>&-8\t\tuse\t\tgpt-table\n##>>>>0\t\tubyte\t\tx\t\tof 2048 bytes\n##>>>(8.l*2048)\tstring\t\t!EFI\\ PART\n##>>>>(8.l*1024)\tstring\t\tEFI\\ PART\tGPT partition table\n##>>>>>0\t\tuse\t\tgpt-mbr-type\n##>>>>>&-8\tuse\t\tgpt-table\n##>>>>>0\t\tubyte\t\tx\t\tof 1024 bytes\n##>>>>(8.l*1024)\tstring\t\t!EFI\\ PART\n##>>>>>(8.l*512)\tstring\t\tEFI\\ PART\tGPT partition table\n##>>>>>>0\t\tuse\t\tgpt-mbr-type\n##>>>>>>&-8\tuse\t\tgpt-table\n##>>>>>>0\t\tubyte\t\tx\t\tof 512 bytes\n\n# Print details of MBR type for a GPT-disk\n# Calling code ensures that there is only one 0xee partition.\n0\t\tname\t\tgpt-mbr-type\n# GPT with protective MBR entry in partition 1\n>450\t\tubyte\t\t0xee\n>>454\t\tulelong\t\t1\n>>>462\t\tstring\t\t!\\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\t\\b (with hybrid MBR)\n>>454\t\tulelong\t\t!1\t\t\t\t\t\t\t\t\t\t\t\t\t\\b (nonstandard: not at LBA 1)\n# GPT with protective MBR entry in partition 2\n>466\t\tubyte\t\t0xee\n>>470\t\tulelong\t\t1\n>>>478\t\tstring\t\t\\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\n>>>>446\t\tstring\t\t!\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\t\t\t\t\t\\b (with hybrid MBR)\n>>>478\t\tstring\t\t!\\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\t\\b (with hybrid MBR)\n>>470\t\tulelong\t\t!1\t\t\t\t\t\t\t\t\t\\b (nonstandard: not at LBA 1)\n# GPT with protective MBR entry in partition 3\n>482\t\tubyte\t\t0xee\n>>486\t\tulelong\t\t1\n>>>494\t\tstring\t\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\n>>>>446\t\tstring\t\t!\\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\t\\b (with hybrid MBR)\n>>>494\t\tstring\t\t!\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\t\t\t\t\t\\b (with hybrid MBR)\n>>486\t\tulelong\t\t!1\t\t\t\t\t\t\t\t\t\\b (nonstandard: not at LBA 1)\n# GPT with protective MBR entry in partition 4\n>498\t\tubyte\t\t0xee\n>>502\t\tulelong\t\t1\t\t\n>>>446\t\tstring\t\t!\\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\t\\b (with hybrid MBR)\n>>502\t\tulelong\t\t!1\t\t\t\t\t\t\t\t\t\t\t\t\t\\b (nonstandard: not at LBA 1)\n\n# Print the information from a GPT partition table structure\n0\t\tname\t\tgpt-table\n>10\t\tuleshort\tx\t\t\\b, version %u\n>8\t\tuleshort\tx\t\t\\b.%u\n>56\t\tulelong\t\tx\t\t\\b, GUID: %08x\n>60\t\tuleshort\tx\t\t\\b-%04x\n>62\t\tuleshort\tx\t\t\\b-%04x\n>64\t\tubeshort\tx\t\t\\b-%04x\n>66\t\tubeshort\tx\t\t\\b-%04x\n>68\t\tubelong\t\tx\t\t\\b%08x\n#>80\t\tuleshort\tx\t\t\\b, %d partition entries\n>32\t\tulequad+1\tx\t\t\\b, disk size: %lld sectors\n\n# In case a GPT data-structure is at LBA 0, report it as well\n# This covers systems which are not GPT-aware, and which show\n# and allow access to the protective partition. This code will\n# detect the contents of such a partition.\n0\t\tstring\t\tEFI\\ PART\tGPT data structure (nonstandard: at LBA 0)\n>0\t\tuse\t\tgpt-table\n>0\t\tubyte\t\tx\t\t(sector size unknown)\n\n\n\n#------------------------------------------------------------------------------\n# $File$\n# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE\n#\n# ACE/gr binary\n0\tstring\t\\000\\000\\0001\\000\\000\\0000\\000\\000\\0000\\000\\000\\0002\\000\\000\\0000\\000\\000\\0000\\000\\000\\0003\t\told ACE/gr binary file\n>39\tbyte\t>0\t\t\t- version %c\n# ACE/gr ascii\n0\tstring\t#\\ xvgr\\ parameter\\ file\tACE/gr ascii file\n0\tstring\t#\\ xmgr\\ parameter\\ file\tACE/gr ascii file\n0\tstring\t#\\ ACE/gr\\ parameter\\ file\tACE/gr ascii file\n# Grace projects\n0\tstring\t#\\ Grace\\ project\\ file\t\tGrace project file\n>23\tstring\t@version\\  \t\t\t(version\n>>32\tbyte\t>0 \t\t\t\t%c\n>>33\tstring\t>\\0 \t\t\t\t\\b.%.2s\n>>35\tstring\t>\\0 \t\t\t\t\\b.%.2s)\n# ACE/gr fit description files\n0\tstring\t#\\ ACE/gr\\ fit\\ description\\ \tACE/gr fit description file\n# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE\n\n#------------------------------------------------------------------------------\n# $File: graphviz,v 1.7 2009/09/19 16:28:09 christos Exp $\n# graphviz:  file(1) magic for http://www.graphviz.org/\n\n# FIXME: These patterns match too generally. For example, the first\n# line matches a LaTeX file containing the word \"graph\" (with a {\n# following later) and the second line matches this file.\n#0\tregex/100l\t[\\r\\n\\t\\ ]*graph[\\r\\n\\t\\ ]+.*\\\\{\tgraphviz graph text\n#!:mime\ttext/vnd.graphviz\n#0\tregex/100l\t[\\r\\n\\t\\ ]*digraph[\\r\\n\\t\\ ]+.*\\\\{\tgraphviz digraph text\n#!:mime\ttext/vnd.graphviz\n\n#------------------------------------------------------------------------------\n# $File$\n# gringotts:  file(1) magic for Gringotts\n# http://devel.pluto.linux.it/projects/Gringotts/\n# author: Germano Rizzo <mano@pluto.linux.it>\n#GRG3????Y\n0\tstring\tGRG\t\tGringotts data file\n#file format 1\n>3\tstring\t\t1\t\tv.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9\n#file format 2\n>3\tstring\t\t2\t\tv.2, MCRYPT S2K, \n>>8\tbyte&0x70\t0x00\t\tRIJNDAEL-128 crypt,\n>>8\tbyte&0x70\t0x10\t\tSERPENT crypt,\n>>8\tbyte&0x70\t0x20\t\tTWOFISH crypt, \n>>8\tbyte&0x70\t0x30\t\tCAST-256 crypt,\n>>8\tbyte&0x70\t0x40\t\tSAFER+ crypt,\n>>8\tbyte&0x70\t0x50\t\tLOKI97 crypt,\n>>8\tbyte&0x70\t0x60\t\t3DES crypt,\n>>8\tbyte&0x70\t0x70\t\tRIJNDAEL-256 crypt,\n>>8\tbyte&0x08\t0x00\t\tSHA1 hash,\n>>8\tbyte&0x08\t0x08\t\tRIPEMD-160 hash,\n>>8\tbyte&0x04\t0x00\t\tZLib\n>>8\tbyte&0x04\t0x04\t\tBZip2\n>>8\tbyte&0x03\t0x00\t\tlvl.0\n>>8\tbyte&0x03\t0x01\t\tlvl.3\n>>8\tbyte&0x03\t0x02\t\tlvl.6\n>>8\tbyte&0x03\t0x03\t\tlvl.9\n#file format 3\n>3\tstring\t\t3\t\tv.3, OpenPGP S2K, \n>>8\tbyte&0x70\t0x00\t\tRIJNDAEL-128 crypt,\n>>8\tbyte&0x70\t0x10\t\tSERPENT crypt,\n>>8\tbyte&0x70\t0x20\t\tTWOFISH crypt, \n>>8\tbyte&0x70\t0x30\t\tCAST-256 crypt,\n>>8\tbyte&0x70\t0x40\t\tSAFER+ crypt,\n>>8\tbyte&0x70\t0x50\t\tLOKI97 crypt,\n>>8\tbyte&0x70\t0x60\t\t3DES crypt,\n>>8\tbyte&0x70\t0x70\t\tRIJNDAEL-256 crypt,\n>>8\tbyte&0x08\t0x00\t\tSHA1 hash,\n>>8\tbyte&0x08\t0x08\t\tRIPEMD-160 hash,\n>>8\tbyte&0x04\t0x00\t\tZLib\n>>8\tbyte&0x04\t0x04\t\tBZip2\n>>8\tbyte&0x03\t0x00\t\tlvl.0\n>>8\tbyte&0x03\t0x01\t\tlvl.3\n>>8\tbyte&0x03\t0x02\t\tlvl.6\n>>8\tbyte&0x03\t0x03\t\tlvl.9\n#file format >3\n>3\tstring\t\t>3\t\tv.%.1s (unknown details)\n\n#------------------------------------------------------------------------------\n# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $\n# Guile file magic from <dalepsmith@gmail.com>\n# http://www.gnu.org/s/guile/\n# http://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250\n\n0\tstring\tGOOF----\tGuile Object\n>8\tstring\tLE\t\t\\b, little endian\n>8\tstring\tBE\t\t\\b, big endian\n>11\tstring\t4\t\t\\b, 32bit\n>11\tstring\t8\t\t\\b, 64bit\n>13\tregex\t.\\..\t\t\\b, bytecode v%s\n\n#------------------------------------------------------------------------------\n# $File: hitachi-sh,v 1.5 2009/09/19 16:28:09 christos Exp $\n# hitach-sh: file(1) magic for Hitachi Super-H\n#\n# Super-H COFF\n#\n# below test line conflicts with 2nd NTFS filesystem sector \n0\tbeshort\t\t0x0500\t\tHitachi SH big-endian COFF\n# 2nd NTFS filesystem sector often starts with 0x05004e00 for unicode string 5 NTLDR\n#0\tubelong&0xFFFFNMPQ\t0x0500NMPQ     Hitachi SH big-endian COFF\n>18\tbeshort&0x0002\t=0x0000\t\tobject\n>18\tbeshort&0x0002\t=0x0002\t\texecutable\n>18\tbeshort&0x0008\t=0x0008\t\t\\b, stripped\n>18\tbeshort&0x0008\t=0x0000\t\t\\b, not stripped\n#\n0\tleshort\t\t0x0550\t\tHitachi SH little-endian COFF\n>18\tleshort&0x0002\t=0x0000\t\tobject\n>18\tleshort&0x0002\t=0x0002\t\texecutable\n>18\tleshort&0x0008\t=0x0008\t\t\\b, stripped\n>18\tleshort&0x0008\t=0x0000\t\t\\b, not stripped\n\n\n#------------------------------------------------------------------------------\n# $File: hp,v 1.23 2009/09/19 16:28:09 christos Exp $\n# hp:  file(1) magic for Hewlett Packard machines (see also \"printer\")\n#\n# XXX - somebody should figure out whether any byte order needs to be\n# applied to the \"TML\" stuff; I'm assuming the Apollo stuff is\n# big-endian as it was mostly 68K-based.\n#\n# I think the 500 series was the old stack-based machines, running a\n# UNIX environment atop the \"SUN kernel\"; dunno whether it was\n# big-endian or little-endian.\n#\n# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;\n# hp300 are 68020+68881 based; hp400 are also 68k.  The following basic\n# HP magic is useful for reference, but using \"long\" magic is a better\n# practice in order to avoid collisions.\n#\n# Guy Harris (guy@netapp.com): some additions to this list came from\n# HP-UX 10.0's \"/usr/include/sys/unistd.h\" (68030, 68040, PA-RISC 1.1,\n# 1.2, and 2.0).  The 1.2 and 2.0 stuff isn't in the HP-UX 10.0\n# \"/etc/magic\", though, except for the \"archive file relocatable library\"\n# stuff, and the 68030 and 68040 stuff isn't there at all - are they not\n# used in executables, or have they just not yet updated \"/etc/magic\"\n# completely?\n#\n# 0\tbeshort\t\t200\t\thp200 (68010) BSD binary\n# 0\tbeshort\t\t300\t\thp300 (68020+68881) BSD binary\n# 0\tbeshort\t\t0x20c\t\thp200/300 HP-UX binary\n# 0\tbeshort\t\t0x20d\t\thp400 (68030) HP-UX binary\n# 0\tbeshort\t\t0x20e\t\thp400 (68040?) HP-UX binary\n# 0\tbeshort\t\t0x20b\t\tPA-RISC1.0 HP-UX binary\n# 0\tbeshort\t\t0x210\t\tPA-RISC1.1 HP-UX binary\n# 0\tbeshort\t\t0x211\t\tPA-RISC1.2 HP-UX binary\n# 0\tbeshort\t\t0x214\t\tPA-RISC2.0 HP-UX binary\n\n#\n# The \"misc\" stuff needs a byte order; the archives look suspiciously\n# like the old 177545 archives (0xff65 = 0177545).\n#\n#### Old Apollo stuff\n0\tbeshort\t\t0627\t\tApollo m68k COFF executable\n>18\tbeshort\t\t^040000\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n0\tbeshort\t\t0624\t\tapollo a88k COFF executable\n>18\tbeshort\t\t^040000\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n0       long            01203604016     TML 0123 byte-order format\n0       long            01702407010     TML 1032 byte-order format\n0       long            01003405017     TML 2301 byte-order format\n0       long            01602007412     TML 3210 byte-order format\n#### PA-RISC 1.1\n0\tbelong \t\t0x02100106\tPA-RISC1.1 relocatable object\n0\tbelong \t\t0x02100107\tPA-RISC1.1 executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x02100108\tPA-RISC1.1 shared executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010b\tPA-RISC1.1 demand-load executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010e\tPA-RISC1.1 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010d\tPA-RISC1.1 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n#### PA-RISC 2.0\n0\tbelong\t\t0x02140106\tPA-RISC2.0 relocatable object\n\n0       belong\t\t0x02140107\tPA-RISC2.0 executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x02140108\tPA-RISC2.0 shared executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010b\tPA-RISC2.0 demand-load executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010e\tPA-RISC2.0 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010d\tPA-RISC2.0 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n#### 800\n0\tbelong \t\t0x020b0106\tPA-RISC1.0 relocatable object\n\n0\tbelong \t\t0x020b0107\tPA-RISC1.0 executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b0108\tPA-RISC1.0 shared executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010b\tPA-RISC1.0 demand-load executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010e\tPA-RISC1.0 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010d\tPA-RISC1.0 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong\t\t0x213c6172\tarchive file\n>68\tbelong \t\t0x020b0619\t- PA-RISC1.0 relocatable library\n>68\tbelong\t \t0x02100619\t- PA-RISC1.1 relocatable library\n>68\tbelong \t\t0x02110619\t- PA-RISC1.2 relocatable library\n>68\tbelong \t\t0x02140619\t- PA-RISC2.0 relocatable library\n\n#### 500\n0\tlong\t\t0x02080106\tHP s500 relocatable executable\n>16\tlong\t\t>0\t\t- version %d\n\n0\tlong\t\t0x02080107\tHP s500 executable\n>16\tlong\t\t>0\t\t- version %d\n\n0\tlong\t\t0x02080108\tHP s500 pure executable\n>16\tlong\t\t>0\t\t- version %d\n\n#### 200\n0\tbelong \t\t0x020c0108\tHP s200 pure executable\n>4\tbeshort\t\t>0\t\t- version %d\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c0107\tHP s200 executable\n>4\tbeshort\t\t>0\t\t- version %d\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010b\tHP s200 demand-load executable\n>4\tbeshort\t\t>0\t\t- version %d\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c0106\tHP s200 relocatable executable\n>4\tbeshort\t\t>0\t\t- version %d\n>6\tbeshort\t\t>0\t\t- highwater %d\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x20000000\tdebuggable\n>8\tbelong\t\t&0x10000000\tPIC\n\n0\tbelong \t\t0x020a0108\tHP s200 (2.x release) pure executable\n>4\tbeshort\t\t>0\t\t- version %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020a0107\tHP s200 (2.x release) executable\n>4\tbeshort\t\t>0\t\t- version %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010e\tHP s200 shared library\n>4\tbeshort\t\t>0\t\t- version %d\n>6\tbeshort\t\t>0\t\t- highwater %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010d\tHP s200 dynamic load library\n>4\tbeshort\t\t>0\t\t- version %d\n>6\tbeshort\t\t>0\t\t- highwater %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n#### MISC\n0\tlong\t\t0x0000ff65\tHP old archive\n0\tlong\t\t0x020aff65\tHP s200 old archive\n0\tlong\t\t0x020cff65\tHP s200 old archive\n0\tlong\t\t0x0208ff65\tHP s500 old archive\n\n0\tlong\t\t0x015821a6\tHP core file\n\n0\tlong\t\t0x4da7eee8\tHP-WINDOWS font\n>8\tbyte\t\t>0\t\t- version %d\n0\tstring\t\tBitmapfile\tHP Bitmapfile\n\n0\tstring\t\tIMGfile\tCIS \tcompimg HP Bitmapfile\n# XXX - see \"lif\"\n#0\tshort\t\t0x8000\t\tlif file\n0\tlong\t\t0x020c010c\tcompiled Lisp\n\n0\tstring\t\tmsgcat01\tHP NLS message catalog,\n>8\tlong\t\t>0\t\t%d messages\n\n# Summary: HP-48/49 calculator\n# Created by: phk@data.fls.dk\n# Modified by (1): AMAKAWA Shuhei <sa264@cam.ac.uk>\n# Modified by (2): Samuel Thibault <samuel.thibault@ens-lyon.org> (HP49 support)\n0\tstring\t\tHPHP\t\tHP\n>4\tstring\t\t48\t\t48 binary\n>4\tstring\t\t49\t\t49 binary\n>7\tbyte\t\t>64\t\t- Rev %c\n>8\tleshort\t\t0x2911\t\t(ADR)\n>8\tleshort\t\t0x2933\t\t(REAL)\n>8\tleshort\t\t0x2955\t\t(LREAL)\n>8\tleshort\t\t0x2977\t\t(COMPLX)\n>8\tleshort\t\t0x299d\t\t(LCOMPLX)\n>8\tleshort\t\t0x29bf\t\t(CHAR)\n>8\tleshort\t\t0x29e8\t\t(ARRAY)\n>8\tleshort\t\t0x2a0a\t\t(LNKARRAY)\n>8\tleshort\t\t0x2a2c\t\t(STRING)\n>8\tleshort\t\t0x2a4e\t\t(HXS)\n>8\tleshort\t\t0x2a74\t\t(LIST)\n>8\tleshort\t\t0x2a96\t\t(DIR)\n>8\tleshort\t\t0x2ab8\t\t(ALG)\n>8\tleshort\t\t0x2ada\t\t(UNIT)\n>8\tleshort\t\t0x2afc\t\t(TAGGED)\n>8\tleshort\t\t0x2b1e\t\t(GROB)\n>8\tleshort\t\t0x2b40\t\t(LIB)\n>8\tleshort\t\t0x2b62\t\t(BACKUP)\n>8\tleshort\t\t0x2b88\t\t(LIBDATA)\n>8\tleshort\t\t0x2d9d\t\t(PROG)\n>8\tleshort\t\t0x2dcc\t\t(CODE)\n>8\tleshort\t\t0x2e48\t\t(GNAME)\n>8\tleshort\t\t0x2e6d\t\t(LNAME)\n>8\tleshort\t\t0x2e92\t\t(XLIB)\n\n0\tstring\t\t%%HP:\t\tHP text\n>6\tstring\t\tT(0)\t\t- T(0)\n>6\tstring\t\tT(1)\t\t- T(1)\n>6\tstring\t\tT(2)\t\t- T(2)\n>6\tstring\t\tT(3)\t\t- T(3)\n>10\tstring\t\tA(D)\t\tA(D)\n>10\tstring\t\tA(R)\t\tA(R)\n>10\tstring\t\tA(G)\t\tA(G)\n>14\tstring\t\tF(.)\t\tF(.);\n>14\tstring\t\tF(,)\t\tF(,);\n\n\n# Summary: HP-38/39 calculator\n# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>\n0\tstring\t\tHP3\n>3\tstring\t\t8\t\tHP 38\n>3\tstring\t\t9\t\tHP 39\n>4\tstring\t\tBin\t\tbinary\n>4\tstring\t\tAsc\t\tASCII\n>7\tstring\t\tA\t\t(Directory List)\n>7\tstring\t\tB\t\t(Zaplet)\n>7\tstring\t\tC\t\t(Note)\n>7\tstring\t\tD\t\t(Program)\n>7\tstring\t\tE\t\t(Variable)\n>7\tstring\t\tF\t\t(List)\n>7\tstring\t\tG\t\t(Matrix)\n>7\tstring\t\tH\t\t(Library)\n>7\tstring\t\tI\t\t(Target List)\n>7\tstring\t\tJ\t\t(ASCII Vector specification)\n>7\tstring\t\tK\t\t(wildcard)\n\n# Summary: HP-38/39 calculator\n# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>\n0\tstring\t\tHP3\n>3\tstring\t\t8\t\tHP 38\n>3\tstring\t\t9\t\tHP 39\n>4\tstring\t\tBin\t\tbinary\n>4\tstring\t\tAsc\t\tASCII\n>7\tstring\t\tA\t\t(Directory List)\n>7\tstring\t\tB\t\t(Zaplet)\n>7\tstring\t\tC\t\t(Note)\n>7\tstring\t\tD\t\t(Program)\n>7\tstring\t\tE\t\t(Variable)\n>7\tstring\t\tF\t\t(List)\n>7\tstring\t\tG\t\t(Matrix)\n>7\tstring\t\tH\t\t(Library)\n>7\tstring\t\tI\t\t(Target List)\n>7\tstring\t\tJ\t\t(ASCII Vector specification)\n>7\tstring\t\tK\t\t(wildcard)\n\n# hpBSD magic numbers\n0\tbeshort\t\t200\t\thp200 (68010) BSD\n>2\tbeshort\t\t0407\t\timpure binary\n>2\tbeshort\t\t0410\t\tread-only binary\n>2\tbeshort\t\t0413\t\tdemand paged binary\n0\tbeshort\t\t300\t\thp300 (68020+68881) BSD\n>2\tbeshort\t\t0407\t\timpure binary\n>2\tbeshort\t\t0410\t\tread-only binary\n>2\tbeshort\t\t0413\t\tdemand paged binary\n#\n# From David Gero <dgero@nortelnetworks.com>\n# HP-UX 10.20 core file format from /usr/include/sys/core.h\n# Unfortunately, HP-UX uses corehead blocks without specifying the order\n# There are four we care about:\n#     CORE_KERNEL, which starts with the string \"HP-UX\"\n#     CORE_EXEC, which contains the name of the command\n#     CORE_PROC, which contains the signal number that caused the core dump\n#     CORE_FORMAT, which contains the version of the core file format (== 1)\n# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC\n# but we include all 6 variations of the order of the first 3, and\n# assume that PROC will always be last\n# Order 1: KERNEL, EXEC, FORMAT, PROC\n0x10\t\tstring\tHP-UX\n>0\t\tbelong\t2\n>>0xC\t\tbelong\t0x3C\n>>>0x4C\t\tbelong\t0x100\n>>>>0x58\tbelong\t0x44\n>>>>>0xA0\tbelong\t1\n>>>>>>0xAC\tbelong\t4\n>>>>>>>0xB0\tbelong\t1\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x90\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 2: KERNEL, FORMAT, EXEC, PROC\n>>>0x4C\t\tbelong\t1\n>>>>0x58\tbelong\t4\n>>>>>0x5C\tbelong\t1\n>>>>>>0x60\tbelong\t0x100\n>>>>>>>0x6C\tbelong\t0x44\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0xA4\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 3: FORMAT, KERNEL, EXEC, PROC\n0x24\t\tstring\tHP-UX\n>0\t\tbelong\t1\n>>0xC\t\tbelong\t4\n>>>0x10\t\tbelong\t1\n>>>>0x14\tbelong\t2\n>>>>>0x20\tbelong\t0x3C\n>>>>>>0x60\tbelong\t0x100\n>>>>>>>0x6C\tbelong\t0x44\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0xA4\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 4: EXEC, KERNEL, FORMAT, PROC\n0x64\t\tstring\tHP-UX\n>0\t\tbelong\t0x100\n>>0xC\t\tbelong\t0x44\n>>>0x54\t\tbelong\t2\n>>>>0x60\tbelong\t0x3C\n>>>>>0xA0\tbelong\t1\n>>>>>>0xAC\tbelong\t4\n>>>>>>>0xB0\tbelong\t1\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x44\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 5: FORMAT, EXEC, KERNEL, PROC\n0x78\t\tstring\tHP-UX\n>0\t\tbelong\t1\n>>0xC\t\tbelong\t4\n>>>0x10\t\tbelong\t1\n>>>>0x14\tbelong\t0x100\n>>>>>0x20\tbelong\t0x44\n>>>>>>0x68\tbelong\t2\n>>>>>>>0x74\tbelong\t0x3C\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x58\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 6: EXEC, FORMAT, KERNEL, PROC\n>0\t\tbelong\t0x100\n>>0xC\t\tbelong\t0x44\n>>>0x54\t\tbelong\t1\n>>>>0x60\tbelong\t4\n>>>>>0x64\tbelong\t1\n>>>>>>0x68\tbelong\t2\n>>>>>>>0x74\tbelong\t0x2C\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x44\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n\n\n\n#------------------------------------------------------------------------------\n# $File$\n# human68k:  file(1) magic for Human68k (X680x0 DOS) binary formats\n# Magic too short!\n#0\t\tstring\tHU\t\tHuman68k\n#>68\t\tstring\tLZX\t\tLZX compressed\n#>>72\t\tstring\t>\\0\t\t(version %s)\n#>(8.L+74)\tstring\tLZX\t\tLZX compressed\n#>>(8.L+78)\tstring\t>\\0\t\t(version %s)\n#>60\t\tbelong\t>0\t\tbinded\n#>(8.L+66)\tstring\t#HUPAIR\t\thupair\n#>0\t\tstring\tHU\t\tX executable\n#>(8.L+74)\tstring\t#LIBCV1\t\t- linked PD LIBC ver 1\n#>4\t\tbelong\t>0\t\t- base address 0x%x\n#>28\t\tbelong\t>0\t\tnot stripped\n#>32\t\tbelong\t>0\t\twith debug information\n#0\t\tbeshort\t0x601a\t\tHuman68k Z executable\n#0\t\tbeshort\t0x6000\t\tHuman68k object file\n#0\t\tbelong\t0xd1000000\tHuman68k ar binary archive\n#0\t\tbelong\t0xd1010000\tHuman68k ar ascii archive\n#0\t\tbeshort\t0x0068\t\tHuman68k lib archive\n#4\t\tstring\tLZX\t\tHuman68k LZX compressed\n#>8\t\tstring\t>\\0\t\t(version %s)\n#>4\t\tstring\tLZX\t\tR executable\n#2\t\tstring\t#HUPAIR\t\tHuman68k hupair R executable\n\n#------------------------------------------------------------------------------\n# $File: ibm370,v 1.8 2009/09/19 16:28:09 christos Exp $\n# ibm370:  file(1) magic for IBM 370 and compatibles.\n#\n# \"ibm370\" said that 0x15d == 0535 was \"ibm 370 pure executable\".\n# What the heck *is* \"USS/370\"?\n# AIX 4.1's \"/etc/magic\" has\n#\n#\t0\tshort\t\t0535\t\t370 sysV executable \n#\t>12\tlong\t\t>0\t\tnot stripped\n#\t>22\tshort\t\t>0\t\t- version %d\n#\t>30\tlong\t\t>0\t\t- 5.2 format\n#\t0\tshort\t\t0530\t\t370 sysV pure executable \n#\t>12\tlong\t\t>0\t\tnot stripped\n#\t>22\tshort\t\t>0\t\t- version %d\n#\t>30\tlong\t\t>0\t\t- 5.2 format\n#\n# instead of the \"USS/370\" versions of the same magic numbers.\n#\n0\tbeshort\t\t0537\t\t370 XA sysV executable \n>12\tbelong\t\t>0\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n>30\tbelong\t\t>0\t\t- 5.2 format\n0\tbeshort\t\t0532\t\t370 XA sysV pure executable \n>12\tbelong\t\t>0\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n>30\tbelong\t\t>0\t\t- 5.2 format\n0\tbeshort\t\t054001\t\t370 sysV pure executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t055001\t\t370 XA sysV pure executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t056401\t\t370 sysV executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t057401\t\t370 XA sysV executable\n>12\tbelong\t\t>0\t\tnot stripped\n0       beshort\t\t0531\t\tSVR2 executable (Amdahl-UTS)\n>12\tbelong\t\t>0\t\tnot stripped\n>24     belong\t\t>0\t\t- version %d\n0\tbeshort\t\t0534\t\tSVR2 pure executable (Amdahl-UTS)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %d\n0\tbeshort\t\t0530\t\tSVR2 pure executable (USS/370)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %d\n0\tbeshort\t\t0535\t\tSVR2 executable (USS/370)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %d\n\n#------------------------------------------------------------------------------\n# $File: ibm6000,v 1.11 2013/01/08 20:13:01 christos Exp $\n# ibm6000:  file(1) magic for RS/6000 and the RT PC.\n#\n0\tbeshort\t\t0x01df\t\texecutable (RISC System/6000 V3.1) or obj module\n>12\tbelong\t\t>0\t\tnot stripped\n# Breaks sun4 statically linked execs.\n#0      beshort\t\t0x0103\t\texecutable (RT Version 2) or obj module\n#>2\tbyte\t\t0x50\t\tpure\n#>28\tbelong\t\t>0\t\tnot stripped\n#>6\tbeshort\t\t>0\t\t- version %ld\n0\tbeshort\t\t0x0104\t\tshared library\n0\tbeshort\t\t0x0105\t\tctab data\n0\tbeshort\t\t0xfe04\t\tstructured file\n0\tstring\t\t0xabcdef\tAIX message catalog\n0\tbelong\t\t0x000001f9\tAIX compiled message catalog\n0\tstring\t\t\\<aiaff>\tarchive\n0\tstring\t\t\\<bigaf>\tarchive (big format)\n\n0\tbeshort\t\t0x01f7\t\t64-bit XCOFF executable or object module\n>20\tbelong\t\t0\t\tnot stripped\n# GRR: this test is still too general as it catches also many FATs of DOS filesystems\n4\tbelong\t\t&0x0feeddb0\t\n# real core dump could not be 32-bit and 64-bit together\n>7\tbyte&0x03\t!3\t\tAIX core file\n>>1\tbyte\t\t&0x01\t\tfulldump\n>>7\tbyte\t\t&0x01\t\t32-bit\n>>>0x6e0\tstring\t>\\0\t\t\\b, %s\n>>7\tbyte\t\t&0x02\t\t64-bit\n>>>0x524\tstring\t>\\0\t\t\\b, %s\n\n#------------------------------------------------------------------------------\n# $File$\n# icc:  file(1) magic for International Color Consortium file formats\n\n#\n# Color profiles as per the ICC's \"Image technology colour management -\n# Architecture, profile format, and data structure\" specification.\n# See\n#\n#\thttp://www.color.org/specification/ICC1v43_2010-12.pdf\n#\n# for Specification ICC.1:2010 (Profile version 4.3.0.0).\n#\n# Bytes 36 to 39 contain a generic profile file signature of \"acsp\";\n# bytes 40 to 43 \"may be used to identify the primary platform/operating\n# system framework for which the profile was created\".\n#\n# There are other fields that might be worth dumping as well.\n#\n\n# This appears to be what's used for Apple ColorSync profiles.\n# Instead of adding that, Apple just changed the generic \"acsp\" entry\n# to be for \"ColorSync ICC Color Profile\" rather than \"Kodak Color\n# Management System, ICC Profile\".\n# Yes, it's \"APPL\", not \"AAPL\"; see the spec.\n36\tstring\t\tacspAPPL\tColorSync ICC Profile\n!:mime\tapplication/vnd.iccprofile\n\n# Microsoft ICM color profile\n36\tstring\t\tacspMSFT\tMicrosoft ICM Color Profile\n!:mime\tapplication/vnd.iccprofile\n\n# Yes, that's a blank after \"SGI\".\n36\tstring\t\tacspSGI\\ \tSGI ICC Profile\n!:mime\tapplication/vnd.iccprofile\n\n# XXX - is this what's used for the Sun KCMS or not?  The standard file\n# uses just \"acsp\" for that, but Apple's file uses it for \"ColorSync\",\n# and there *is* an identified \"primary platform\" value of SUNW.\n36\tstring\t\tacspSUNW\tSun KCMS ICC Profile\n!:mime\tapplication/vnd.iccprofile\n\n# Any other profile.\n# XXX - should we use \"acsp\\0\\0\\0\\0\" for \"no primary platform\" profiles,\n# and use \"acsp\" for everything else and dump the \"primary platform\"\n# string in those cases?\n36\tstring\t\tacsp\t\tICC Profile\n!:mime\tapplication/vnd.iccprofile\n\n\n\n#------------------------------------------------------------------------------\n# $File: iff,v 1.12 2009/09/19 16:28:09 christos Exp $\n# iff:\tfile(1) magic for Interchange File Format (see also \"audio\" & \"images\")\n#\n# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic\n# Arts for file interchange.  It has also been used by Apple, SGI, and\n# especially Commodore-Amiga.\n#\n# IFF files begin with an 8 byte FORM header, followed by a 4 character\n# FORM type, which is followed by the first chunk in the FORM.\n\n0\tstring\t\tFORM\t\tIFF data\n#>4\tbelong\t\tx\t\t\\b, FORM is %d bytes long\n# audio formats\n>8\tstring\t\tAIFF\t\t\\b, AIFF audio\n!:mime\taudio/x-aiff\n>8\tstring\t\tAIFC\t\t\\b, AIFF-C compressed audio\n!:mime\taudio/x-aiff\n>8\tstring\t\t8SVX\t\t\\b, 8SVX 8-bit sampled sound voice\n!:mime\taudio/x-aiff\n>8\tstring\t\t16SV\t\t\\b, 16SV 16-bit sampled sound voice\n>8\tstring\t\tSAMP\t\t\\b, SAMP sampled audio\n>8\tstring\t\tMAUD\t\t\\b, MAUD MacroSystem audio\n>8\tstring\t\tSMUS\t\t\\b, SMUS simple music\n>8\tstring\t\tCMUS\t\t\\b, CMUS complex music\n# image formats\n>8\tstring\t\tILBMBMHD\t\\b, ILBM interleaved image\n>>20\tbeshort\t\tx\t\t\\b, %d x\n>>22\tbeshort\t\tx\t\t%d\n>8\tstring\t\tRGBN\t\t\\b, RGBN 12-bit RGB image\n>8\tstring\t\tRGB8\t\t\\b, RGB8 24-bit RGB image\n>8\tstring\t\tDEEP\t\t\\b, DEEP TVPaint/XiPaint image\n>8\tstring\t\tDR2D\t\t\\b, DR2D 2-D object\n>8\tstring\t\tTDDD\t\t\\b, TDDD 3-D rendering\n>8\tstring\t\tLWOB\t\t\\b, LWOB 3-D object\n>8\tstring\t\tLWO2\t\t\\b, LWO2 3-D object, v2\n>8\tstring\t\tLWLO\t\t\\b, LWLO 3-D layered object\n>8\tstring\t\tREAL\t\t\\b, REAL Real3D rendering\n>8\tstring\t\tMC4D\t\t\\b, MC4D MaxonCinema4D rendering\n>8\tstring\t\tANIM\t\t\\b, ANIM animation\n>8\tstring\t\tYAFA\t\t\\b, YAFA animation\n>8\tstring\t\tSSA\\ \t\t\\b, SSA super smooth animation\n>8\tstring\t\tACBM\t\t\\b, ACBM continuous image\n>8\tstring\t\tFAXX\t\t\\b, FAXX fax image\n# other formats\n>8\tstring\t\tFTXT\t\t\\b, FTXT formatted text\n>8\tstring\t\tCTLG\t\t\\b, CTLG message catalog\n>8\tstring\t\tPREF\t\t\\b, PREF preferences\n>8\tstring\t\tDTYP\t\t\\b, DTYP datatype description\n>8\tstring\t\tPTCH\t\t\\b, PTCH binary patch\n>8\tstring\t\tAMFF\t\t\\b, AMFF AmigaMetaFile format\n>8\tstring\t\tWZRD\t\t\\b, WZRD StormWIZARD resource\n>8\tstring\t\tDOC\\ \t\t\\b, DOC desktop publishing document\n>8\tstring\t\tWVQA \t\t\\b, Westwood Studios VQA Multimedia,\n>>24\tleshort\t\tx\t\t%d video frames,\n>>26\tleshort\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n>8\tstring\t\tMOVE\t\t\\b, Wing Commander III Video\n>>12\tstring\t\t_PC_\t\t\\b, PC version\n>>12\tstring\t\t3DO_\t\t\\b, 3DO version\n\n# These go at the end of the iff rules\n#\n# I don't see why these might collide with anything else.\n#\n# Interactive Fiction related formats\n#\n>8\tstring\t\tIFRS\t\t\\b, Blorb Interactive Fiction\n>>24\tstring\t\tExec\t\twith executable chunk\n>8\tstring          IFZS\t\t\\b, Z-machine or Glulx saved game file (Quetzal)\n\n#------------------------------------------------------------------------------\n# $File: images,v 1.105 2015/02/14 17:30:03 christos Exp $\n# images:  file(1) magic for image formats (see also \"iff\", and \"c-lang\" for\n# XPM bitmaps)\n#\n# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),\n# additions by janl@ifi.uio.no as well as others. Jan also suggested\n# merging several one- and two-line files into here.\n#\n# little magic: PCX (first byte is 0x0a)\n\n# Targa - matches `povray', `ppmtotga' and `xv' outputs\n# by Philippe De Muyter <phdm@macqel.be>\n# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11\n# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise\n# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs\n# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)\n# `tgatoppm' recognizes a superset (Index may be anything)\n1\tbelong&0xfff7ffff\t0x01010000\tTarga image data - Map\n!:strength + 2\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%d x\n>14\tleshort\t\t\t>0\t\t%d\n1\tbelong&0xfff7ffff\t0x00020000\tTarga image data - RGB\n!:strength + 2\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%d x\n>14\tleshort\t\t\t>0\t\t%d\n1\tbelong&0xfff7ffff\t0x00030000\tTarga image data - Mono\n!:strength + 2\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%d x\n>14\tleshort\t\t\t>0\t\t%d\n\n# PBMPLUS images\n# The next byte following the magic is always whitespace.\n# strength is changed to try these patterns before \"x86 boot sector\"\n0\tname\t\tnetpbm\n>3\tregex/s\t\t=[0-9]{1,50}\\ [0-9]{1,50}\tNetpbm PPM image data\n>>&0\tregex\t\t=[0-9]{1,50} \t\t\t\\b, size = %s x\n>>>&0\tregex\t\t=[0-9]{1,50}\t\t\t\\b %s\n\n0\tsearch/1\tP1\t\t\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, bitmap\n!:strength + 45\n!:mime\timage/x-portable-bitmap\n\n0\tsearch/1\tP2\t\t\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, greymap\n!:strength + 45\n!:mime\timage/x-portable-greymap\n\n0\tsearch/1\tP3\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, pixmap\n!:strength + 45\n!:mime\timage/x-portable-pixmap\n\n\n0\tstring\t\tP4\t\t\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, rawbits, bitmap\n!:strength + 45\n!:mime\timage/x-portable-bitmap\n\n0\tstring\t\tP5\t\t\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, rawbits, greymap\n!:strength + 45\n!:mime\timage/x-portable-greymap\n\n0\tstring\t\tP6\t\t\n>0\tuse\t\tnetpbm\n>>0\tstring\t\tx\t\\b, rawbits, pixmap\n!:strength + 45\n!:mime\timage/x-portable-pixmap\n\n0\tstring\t\tP7\t\tNetpbm PAM image file\n!:mime\timage/x-portable-pixmap\n\n# From: bryanh@giraffe-data.com (Bryan Henderson)\n0\tstring\t\t\\117\\072\tSolitaire Image Recorder format\n>4\tstring\t\t\\013\t\tMGI Type 11\n>4\tstring\t\t\\021\t\tMGI Type 17\n0\tstring\t\t.MDA\t\tMicroDesign data\n>21\tbyte\t\t48\t\tversion 2\n>21\tbyte\t\t51\t\tversion 3\n0\tstring\t\t.MDP\t\tMicroDesign page data\n>21\tbyte\t\t48\t\tversion 2\n>21\tbyte\t\t51\t\tversion 3\n\n# NIFF (Navy Interchange File Format, a modification of TIFF) images\n# [GRR:  this *must* go before TIFF]\n0\tstring\t\tIIN1\t\tNIFF image data\n!:mime\timage/x-niff\n\n# Canon RAW version 1 (CRW) files are a type of Canon Image File Format\n# (CIFF) file. These are apparently all little-endian.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html\n0\tstring\t\tII\\x1a\\0\\0\\0HEAPCCDR\tCanon CIFF raw image data\n!:mime\timage/x-canon-crw\n>16\tleshort\t\tx\t\\b, version %d.\n>14\tleshort\t\tx\t\\b%d\n\n# Canon RAW version 2 (CR2) files are a kind of TIFF with an extra magic\n# number. Put this above the TIFF test to make sure we detect them.\n# These are apparently all little-endian.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://libopenraw.freedesktop.org/wiki/Canon_CR2\n0\tstring\t\tII\\x2a\\0\\x10\\0\\0\\0CR\tCanon CR2 raw image data\n!:mime\timage/x-canon-cr2\n>10\tbyte\t\tx\t\\b, version %d.\n>11\tbyte\t\tx\t\\b%d\n\n# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)\n# The second word of TIFF files is the TIFF version number, 42, which has\n# never changed.  The TIFF specification recommends testing for it.\n0\tstring\t\tMM\\x00\\x2a\tTIFF image data, big-endian\n!:mime\timage/tiff\n>(4.L)\tuse\t\t\\^tiff_ifd\n0\tstring\t\tII\\x2a\\x00\tTIFF image data, little-endian\n!:mime\timage/tiff\n>(4.l)\tuse\t\ttiff_ifd\n\n0\tname\t\ttiff_ifd\n>0\tleshort\t\tx\t\t\\b, direntries=%d\n>2\tuse\t\ttiff_entry\n\n0\tname\t\ttiff_entry\n# NewSubFileType\n>0\tleshort\t\t0xfe\n>>12\tuse\t\ttiff_entry\n>0\tleshort\t\t0x100\n>>4\tlelong\t\t1\n>>>12\tuse\t\ttiff_entry\n>>>8\tleshort\t\tx\t\t\\b, width=%d\n>0\tleshort\t\t0x101\n>>4\tlelong\t\t1\n>>>8\tleshort\t\tx\t\t\\b, height=%d\n>>>12\tuse\t\ttiff_entry\n>0\tleshort\t\t0x102\n>>8\tleshort\t\tx\t\t\\b, bps=%d\n>>12\tuse\t\ttiff_entry\n>0\tleshort\t\t0x103\n>>4\tlelong\t\t1\t\t\\b, compression=\n>>>8\tleshort\t\t1\t\t\\bnone\n>>>8\tleshort\t\t2\t\t\\bhuffman\n>>>8\tleshort\t\t3\t\t\\bbi-level group 3\n>>>8\tleshort\t\t4\t\t\\bbi-level group 4\n>>>8\tleshort\t\t5\t\t\\bLZW\n>>>8\tleshort\t\t6\t\t\\bJPEG (old)\n>>>8\tleshort\t\t7\t\t\\bJPEG\n>>>8\tleshort\t\t8\t\t\\bdeflate\n>>>8\tleshort\t\t9\t\t\\bJBIG, ITU-T T.85\n>>>8\tleshort\t\t0xa\t\t\\bJBIG, ITU-T T.43\n>>>8\tleshort\t\t0x7ffe\t\t\\bNeXT RLE 2-bit\n>>>8\tleshort\t\t0x8005\t\t\\bPackBits (Macintosh RLE)\n>>>8\tleshort\t\t0x8029\t\t\\bThunderscan RLE\n>>>8\tleshort\t\t0x807f\t\t\\bRasterPadding (CT or MP)\n>>>8\tleshort\t\t0x8080\t\t\\bRLE (Line Work)\n>>>8\tleshort\t\t0x8081\t\t\\bRLE (High-Res Cont-Tone)\n>>>8\tleshort\t\t0x8082\t\t\\bRLE (Binary Line Work)\n>>>8\tleshort\t\t0x80b2\t\t\\bDeflate (PKZIP)\n>>>8\tleshort\t\t0x80b3\t\t\\bKodak DCS\n>>>8\tleshort\t\t0x8765\t\t\\bJBIG\n>>>8\tleshort\t\t0x8798\t\t\\bJPEG2000\n>>>8\tleshort\t\t0x8799\t\t\\bNikon NEF Compressed\n>>>8\tdefault\t\tx\t\n>>>>8\tleshort\t\tx\t\t\\b(unknown 0x%x)\n>>>12\tuse\t\ttiff_entry\n>0\tleshort\t\t0x106\t\t\\b, PhotometricIntepretation=\n>>8\tclear\t\tx\n>>8\tleshort\t\t0\t\t\\bWhiteIsZero\n>>8\tleshort\t\t1\t\t\\bBlackIsZero\n>>8\tleshort\t\t2\t\t\\bRGB\n>>8\tleshort\t\t3\t\t\\bRGB Palette\n>>8\tleshort\t\t4\t\t\\bTransparency Mask\n>>8\tleshort\t\t5\t\t\\bCMYK\n>>8\tleshort\t\t6\t\t\\bYCbCr\n>>8\tleshort\t\t8\t\t\\bCIELab\n>>8\tdefault\t\tx\n>>>8\tleshort\t\tx\t\t\\b(unknown=0x%x)\n>>12\tuse\t\ttiff_entry\n# FillOrder\n>0\tleshort\t\t0x10a\n>>4\tlelong\t\t1\n>>>12\tuse\t\ttiff_entry\n# DocumentName\n>0\tleshort\t\t0x10d\n>>(8.l)\tstring\t\tx\t\t\\b, name=%s\n>>>12\tuse\t\ttiff_entry\n# ImageDescription\n>0\tleshort\t\t0x10e\n>>(8.l)\tstring\t\tx\t\t\\b, description=%s\n>>>12\tuse\t\ttiff_entry\n# Make\n>0\tleshort\t\t0x10f\n>>(8.l)\tstring\t\tx\t\t\\b, manufacturer=%s\n>>>12\tuse\t\ttiff_entry\n# Model\n>0\tleshort\t\t0x110\n>>(8.l)\tstring\t\tx\t\t\\b, model=%s\n>>>12\tuse\t\ttiff_entry\n# StripOffsets\n>0\tleshort\t\t0x111\n>>12\tuse\t\ttiff_entry\n# Orientation\n>0\tleshort\t\t0x112\t\t\\b, orientation=\n>>8\tleshort\t\t1\t\t\\bupper-left\n>>8\tleshort\t\t3\t\t\\blower-right\n>>8\tleshort\t\t6\t\t\\bupper-right\n>>8\tleshort\t\t8\t\t\\blower-left\n>>8\tleshort\t\t9\t\t\\bundefined\n>>8\tdefault\t\tx\n>>>8\tleshort\t\tx\t\t\\b[*%d*]\n>>12\tuse\t\ttiff_entry\n# XResolution\n>0\tleshort\t\t0x11a\n>>8\tlelong\t\tx\t\t\\b, xresolution=%d\n>>12\tuse\t\ttiff_entry\n# YResolution\n>0\tleshort\t\t0x11b\n>>8\tlelong\t\tx\t\t\\b, yresolution=%d\n>>12\tuse\t\ttiff_entry\n# ResolutionUnit\n>0\tleshort\t\t0x128\n>>8\tleshort\t\tx\t\t\\b, resolutionunit=%d\n>>12\tuse\t\ttiff_entry\n# Software\n>0\tleshort\t\t0x131\n>>(8.l)\tstring\t\tx\t\t\\b, software=%s\n>>12\tuse\t\ttiff_entry\n# Datetime\n>0\tleshort\t\t0x132\n>>(8.l)\tstring\t\tx\t\t\\b, datetime=%s\n>>12\tuse\t\ttiff_entry\n# HostComputer\n>0\tleshort\t\t0x13c\n>>(8.l)\tstring\t\tx\t\t\\b, hostcomputer=%s\n>>12\tuse\t\ttiff_entry\n# WhitePoint\n>0\tleshort\t\t0x13e\n>>12\tuse\t\ttiff_entry\n# PrimaryChromaticities\n>0\tleshort\t\t0x13f\n>>12\tuse\t\ttiff_entry\n# YCbCrCoefficients\n>0\tleshort\t\t0x211\n>>12\tuse\t\ttiff_entry\n# YCbCrPositioning\n>0\tleshort\t\t0x213\n>>12\tuse\t\ttiff_entry\n# ReferenceBlackWhite\n>0\tleshort\t\t0x214\n>>12\tuse\t\ttiff_entry\n# Copyright\n>0\tleshort\t\t0x8298\n>>(8.l)\tstring\t\tx\t\t\\b, copyright=%s\n>>12\tuse\t\ttiff_entry\n# ExifOffset\n>0\tleshort\t\t0x8769\n>>12\tuse\t\ttiff_entry\n# GPS IFD\n>0\tleshort\t\t0x8825\t\t\\b, GPS-Data\n>>12\tuse\t\ttiff_entry\n\n#>0\tleshort\t\tx\t\t\\b, unknown=0x%x\n#>>12\tuse\t\ttiff_entry\n\n0\tstring\t\tMM\\x00\\x2b\tBig TIFF image data, big-endian\n!:mime\timage/tiff\n0\tstring\t\tII\\x2b\\x00\tBig TIFF image data, little-endian\n!:mime\timage/tiff\n\n# PNG [Portable Network Graphics, or \"PNG's Not GIF\"] images\n# (Greg Roelofs, newt@uchicago.edu)\n# (Albert Cahalan, acahalan@cs.uml.edu)\n#\n# 137 P N G \\r \\n ^Z \\n [4-byte length] H E A D [HEAD data] [HEAD crc] ...\n#\n0\tstring\t\t\\x89PNG\\x0d\\x0a\\x1a\\x0a\t\tPNG image data\n!:mime\timage/png\n>16\tbelong\t\tx\t\t\\b, %d x\n>20\tbelong\t\tx\t\t%d,\n>24\tbyte\t\tx\t\t%d-bit\n>25\tbyte\t\t0\t\tgrayscale,\n>25\tbyte\t\t2\t\t\\b/color RGB,\n>25\tbyte\t\t3\t\tcolormap,\n>25\tbyte\t\t4\t\tgray+alpha,\n>25\tbyte\t\t6\t\t\\b/color RGBA,\n#>26\tbyte\t\t0\t\tdeflate/32K,\n>28\tbyte\t\t0\t\tnon-interlaced\n>28\tbyte\t\t1\t\tinterlaced\n\n# possible GIF replacements; none yet released!\n# (Greg Roelofs, newt@uchicago.edu)\n#\n# GRR 950115:  this was mine (\"Zip GIF\"):\n0\tstring\t\tGIF94z\t\tZIF image (GIF+deflate alpha)\n!:mime\timage/x-unknown\n#\n# GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):\n#\t\t\t\t\t\n0\tstring\t\tFGF95a\t\tFGF image (GIF+deflate beta)\n!:mime\timage/x-unknown\n#\n# GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal\n# (best; not yet implemented):\n#\t\t\t\t\t\n0\tstring\t\tPBF\t\tPBF image (deflate compression)\n!:mime\timage/x-unknown\n\n# GIF\n0\tstring\t\tGIF8\t\tGIF image data\n!:mime\timage/gif\n!:apple\t8BIMGIFf\n>4\tstring\t\t7a\t\t\\b, version 8%s,\n>4\tstring\t\t9a\t\t\\b, version 8%s,\n>6\tleshort\t\t>0\t\t%d x\n>8\tleshort\t\t>0\t\t%d\n#>10\tbyte\t\t&0x80\t\tcolor mapped,\n#>10\tbyte&0x07\t=0x00\t\t2 colors\n#>10\tbyte&0x07\t=0x01\t\t4 colors\n#>10\tbyte&0x07\t=0x02\t\t8 colors\n#>10\tbyte&0x07\t=0x03\t\t16 colors\n#>10\tbyte&0x07\t=0x04\t\t32 colors\n#>10\tbyte&0x07\t=0x05\t\t64 colors\n#>10\tbyte&0x07\t=0x06\t\t128 colors\n#>10\tbyte&0x07\t=0x07\t\t256 colors\n\n# ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,\n# 1 plane, no encoding.\n0\tstring\t\t\\361\\0\\100\\273\tCMU window manager raster image data\n>4\tlelong\t\t>0\t\t%d x\n>8\tlelong\t\t>0\t\t%d,\n>12\tlelong\t\t>0\t\t%d-bit\n\n# Magick Image File Format\n0\tstring\t\tid=ImageMagick\tMIFF image data\n\n# Artisan\n0\tlong\t\t1123028772\tArtisan image data\n>4\tlong\t\t1\t\t\\b, rectangular 24-bit\n>4\tlong\t\t2\t\t\\b, rectangular 8-bit with colormap\n>4\tlong\t\t3\t\t\\b, rectangular 32-bit (24-bit with matte)\n\n# FIG (Facility for Interactive Generation of figures), an object-based format\n0\tsearch/1\t#FIG\t\tFIG image text\n>5\tstring\t\tx\t\t\\b, version %.3s\n\n# PHIGS\n0\tstring\t\tARF_BEGARF\t\tPHIGS clear text archive\n0\tstring\t\t@(#)SunPHIGS\t\tSunPHIGS\n# version number follows, in the form m.n\n>40\tstring\t\tSunBin\t\t\tbinary\n>32\tstring\t\tarchive\t\t\tarchive\n\n# GKS (Graphics Kernel System)\n0\tstring\t\tGKSM\t\tGKS Metafile\n>24\tstring\t\tSunGKS\t\t\\b, SunGKS\n\n# CGM image files\n0\tstring\t\tBEGMF\t\tclear text Computer Graphics Metafile\n\n# MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)\n0\tstring\tyz\tMGR bitmap, modern format, 8-bit aligned\n0\tstring\tzz\tMGR bitmap, old format, 1-bit deep, 16-bit aligned\n0\tstring\txz\tMGR bitmap, old format, 1-bit deep, 32-bit aligned\n0\tstring\tyx\tMGR bitmap, modern format, squeezed\n\n# Fuzzy Bitmap (FBM) images\n0\tstring\t\t%bitmap\\0\tFBM image data\n>30\tlong\t\t0x31\t\t\\b, mono\n>30\tlong\t\t0x33\t\t\\b, color\n\n# facsimile data\n1\tstring\t\tPC\\ Research,\\ Inc\tgroup 3 fax data\n>29\tbyte\t\t0\t\t\\b, normal resolution (204x98 DPI)\n>29\tbyte\t\t1\t\t\\b, fine resolution (204x196 DPI)\n# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>\n0\tstring\t\tSfff\t\tstructured fax file\n\n# From: Joerg Jenderek <joerg.jen.der.ek@gmx.net>\n# most files with the extension .EPA and some with .BMP\n0\tstring\t\t\\x11\\x06\tAward BIOS Logo, 136 x 84\n!:mime\timage/x-award-bioslogo\n0\tstring\t\t\\x11\\x09\tAward BIOS Logo, 136 x 126\n!:mime\timage/x-award-bioslogo\n#0\tstring\t\t\\x07\\x1f\tBIOS Logo corrupted?\n# http://www.blackfiveservices.co.uk/awbmtools.shtml\n# http://biosgfx.narod.ru/v3/\n# http://biosgfx.narod.ru/abr-2/\n0\tstring\t\tAWBM\t\t\n>4\tleshort\t\t<1981\t\tAward BIOS bitmap\n!:mime\timage/x-award-bmp\n# image width is a multiple of 4\n>>4\tleshort&0x0003\t0\t\t\n>>>4\t\tleshort\tx\t\t\\b, %d\n>>>6\t\tleshort\tx\t\tx %d\n>>4\tleshort&0x0003\t>0\t\t\\b,\n>>>4\tleshort&0x0003\t=1\t\t\n>>>>4\t\tleshort\tx\t\t%d+3\n>>>4\tleshort&0x0003\t=2\t\t\n>>>>4\t\tleshort\tx\t\t%d+2\n>>>4\tleshort&0x0003\t=3\t\t\n>>>>4\t\tleshort\tx\t\t%d+1\n>>>6\t\tleshort\tx\t\tx %d\n# at offset 8 starts imagedata followed by \"RGB \" marker\n\n# PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt@uchicago.edu)\n# http://en.wikipedia.org/wiki/BMP_file_format#DIB_header_.\\\n# 28bitmap_information_header.29\n0\tstring\t\tBM\n>14\tleshort\t\t12\t\tPC bitmap, OS/2 1.x format\n!:mime\timage/x-ms-bmp\n>>18\tleshort\t\tx\t\t\\b, %d x\n>>20\tleshort\t\tx\t\t%d\n>14\tleshort\t\t64\t\tPC bitmap, OS/2 2.x format\n!:mime\timage/x-ms-bmp\n>>18\tleshort\t\tx\t\t\\b, %d x\n>>20\tleshort\t\tx\t\t%d\n>14\tleshort\t\t40\t\tPC bitmap, Windows 3.x format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n>14\tleshort\t\t124\t\tPC bitmap, Windows 98/2000 and newer format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n>14\tleshort\t\t108\t\tPC bitmap, Windows 95/NT4 and newer format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n>14\tleshort\t\t128\t\tPC bitmap, Windows NT/2000 format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n# Too simple - MPi\n#0\tstring\t\tIC\t\tPC icon data\n#0\tstring\t\tPI\t\tPC pointer image data\n#0\tstring\t\tCI\t\tPC color icon data\n#0\tstring\t\tCP\t\tPC color pointer image data\n# Conflicts with other entries [BABYL]\n#0\tstring\t\tBA\t\tPC bitmap array data\n\n# XPM icons (Greg Roelofs, newt@uchicago.edu)\n0\tsearch/1\t/*\\ XPM\\ */\tX pixmap image text\n!:mime\timage/x-xpmi\n\n# Utah Raster Toolkit RLE images (janl@ifi.uio.no)\n0\tleshort\t\t0xcc52\t\tRLE image data,\n>6\tleshort\t\tx\t\t%d x\n>8\tleshort\t\tx\t\t%d\n>2\tleshort\t\t>0\t\t\\b, lower left corner: %d\n>4\tleshort\t\t>0\t\t\\b, lower right corner: %d\n>10\tbyte&0x1\t=0x1\t\t\\b, clear first\n>10\tbyte&0x2\t=0x2\t\t\\b, no background\n>10\tbyte&0x4\t=0x4\t\t\\b, alpha channel\n>10\tbyte&0x8\t=0x8\t\t\\b, comment\n>11\tbyte\t\t>0\t\t\\b, %d color channels\n>12\tbyte\t\t>0\t\t\\b, %d bits per pixel\n>13\tbyte\t\t>0\t\t\\b, %d color map channels\n\n# image file format (Robert Potter, potter@cs.rochester.edu)\n0\tstring\t\tImagefile\\ version-\tiff image data\n# this adds the whole header (inc. version number), informative but longish\n>10\tstring\t\t>\\0\t\t%s\n\n# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tbelong\t\t0x59a66a95\tSun raster image data\n>4\tbelong\t\t>0\t\t\\b, %d x\n>8\tbelong\t\t>0\t\t%d,\n>12\tbelong\t\t>0\t\t%d-bit,\n#>16\tbelong\t\t>0\t\t%d bytes long,\n>20\tbelong\t\t0\t\told format,\n#>20\tbelong\t\t1\t\tstandard,\n>20\tbelong\t\t2\t\tcompressed,\n>20\tbelong\t\t3\t\tRGB,\n>20\tbelong\t\t4\t\tTIFF,\n>20\tbelong\t\t5\t\tIFF,\n>20\tbelong\t\t0xffff\t\treserved for testing,\n>24\tbelong\t\t0\t\tno colormap\n>24\tbelong\t\t1\t\tRGB colormap\n>24\tbelong\t\t2\t\traw colormap\n#>28\tbelong\t\t>0\t\tcolormap is %d bytes long\n\n# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)\n#\n# See\n#\thttp://reality.sgi.com/grafica/sgiimage.html\n#\n0\tbeshort\t\t474\t\tSGI image data\n#>2\tbyte\t\t0\t\t\\b, verbatim\n>2\tbyte\t\t1\t\t\\b, RLE\n#>3\tbyte\t\t1\t\t\\b, normal precision\n>3\tbyte\t\t2\t\t\\b, high precision\n>4\tbeshort\t\tx\t\t\\b, %d-D\n>6\tbeshort\t\tx\t\t\\b, %d x\n>8\tbeshort\t\tx\t\t%d\n>10\tbeshort\t\tx\t\t\\b, %d channel\n>10\tbeshort\t\t!1\t\t\\bs\n>80\tstring\t\t>0\t\t\\b, \"%s\"\n\n0\tstring\t\tIT01\t\tFIT image data\n>4\tbelong\t\tx\t\t\\b, %d x\n>8\tbelong\t\tx\t\t%d x\n>12\tbelong\t\tx\t\t%d\n#\n0\tstring\t\tIT02\t\tFIT image data\n>4\tbelong\t\tx\t\t\\b, %d x\n>8\tbelong\t\tx\t\t%d x\n>12\tbelong\t\tx\t\t%d\n#\n2048\tstring\t\tPCD_IPI\t\tKodak Photo CD image pack file\n>0xe02\tbyte&0x03\t0x00\t\t, landscape mode\n>0xe02\tbyte&0x03\t0x01\t\t, portrait mode\n>0xe02\tbyte&0x03\t0x02\t\t, landscape mode\n>0xe02\tbyte&0x03\t0x03\t\t, portrait mode\n0\tstring\t\tPCD_OPA\t\tKodak Photo CD overview pack file\n\n# FITS format.  Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>\n# FITS is the Flexible Image Transport System, the de facto standard for\n# data and image transfer, storage, etc., for the astronomical community.\n# (FITS floating point formats are big-endian.)\n0\tstring\tSIMPLE\\ \\ =\tFITS image data\n>109\tstring\t8\t\t\\b, 8-bit, character or unsigned binary integer\n>108\tstring\t16\t\t\\b, 16-bit, two's complement binary integer\n>107\tstring\t\\ 32\t\t\\b, 32-bit, two's complement binary integer\n>107\tstring\t-32\t\t\\b, 32-bit, floating point, single precision\n>107\tstring\t-64\t\t\\b, 64-bit, floating point, double precision\n\n# other images\n0\tstring\tThis\\ is\\ a\\ BitMap\\ file\tLisp Machine bit-array-file\n\n# From SunOS 5.5.1 \"/etc/magic\" - appeared right before Sun raster image\n# stuff.\n#\n0\tbeshort\t\t0x1010\t\tPEX Binary Archive\n\n# DICOM medical imaging data\n128\tstring\tDICM\t\t\tDICOM medical imaging data\n!:mime\tapplication/dicom\n\n# XWD - X Window Dump file.\n#   As described in /usr/X11R6/include/X11/XWDFile.h\n#   used by the xwd program.\n#   Bradford Castalia, idaeim, 1/01\n#   updated by Adam Buchbinder, 2/09\n# The following assumes version 7 of the format; the first long is the length\n# of the header, which is at least 25 4-byte longs, and the one at offset 8\n# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,\n# which is a maximum of 32.\n0\tbelong\t>100\n>8\tbelong\t<3\n>>12\tbelong\t<33\n>>>4\tbelong\t7\t\t\tXWD X Window Dump image data\n!:mime\timage/x-xwindowdump\n>>>>100\tstring\t>\\0\t\t\t\\b, \"%s\"\n>>>>16\tbelong\tx\t\t\t\\b, %dx\n>>>>20\tbelong\tx\t\t\t\\b%dx\n>>>>12\tbelong\tx\t\t\t\\b%d\n\n# PDS - Planetary Data System\n#   These files use Parameter Value Language in the header section.\n#   Unfortunately, there is no certain magic, but the following\n#   strings have been found to be most likely.\n0\tstring\tNJPL1I00\t\tPDS (JPL) image data\n2\tstring\tNJPL1I\t\t\tPDS (JPL) image data\n0\tstring\tCCSD3ZF\t\t\tPDS (CCSD) image data\n2\tstring\tCCSD3Z\t\t\tPDS (CCSD) image data\n0\tstring\tPDS_\t\t\tPDS image data\n0\tstring\tLBLSIZE=\t\tPDS (VICAR) image data\n\n# pM8x: ATARI STAD compressed bitmap format\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001\n# p M 8 5/6 xx yy zz data...\n# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.\n# bytes either run horizontally (pM85) or vertically (pM86). yy is the\n# most frequent byte, xx and zz are runlength escape codes, where xx is\n# used for runs of yy.\n#\n0\tstring\tpM85\t\tAtari ST STAD bitmap image data (hor)\n>5\tbyte\t0x00\t\t(white background)\n>5\tbyte\t0xFF\t\t(black background)\n0\tstring\tpM86\t\tAtari ST STAD bitmap image data (vert)\n>5\tbyte\t0x00\t\t(white background)\n>5\tbyte\t0xFF\t\t(black background)\n\n# Gurkan Sengun <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n# http://www.atarimax.com/jindroush.atari.org/afmtatr.html\n0\tleshort\t0x0296\t\tAtari ATR image\n\n# XXX:\n# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other\n# magic.\n# SGI RICE image file <mpruett@sgi.com>\n#0\tbeshort\t0x5249\t\tRICE image\n#>2\tbeshort\tx\t\tv%d\n#>4\tbeshort\tx\t\t(%d x\n#>6\tbeshort\tx\t\t%d)\n#>8\tbeshort\t0\t\t8 bit\n#>8\tbeshort\t1\t\t10 bit\n#>8\tbeshort\t2\t\t12 bit\n#>8\tbeshort\t3\t\t13 bit\n#>10\tbeshort\t0\t\t4:2:2\n#>10\tbeshort\t1\t\t4:2:2:4\n#>10\tbeshort\t2\t\t4:4:4\n#>10\tbeshort\t3\t\t4:4:4:4\n#>12\tbeshort\t1\t\tRGB\n#>12\tbeshort\t2\t\tCCIR601\n#>12\tbeshort\t3\t\tRP175\n#>12\tbeshort\t4\t\tYUV\n\n# PCX image files\n# From: Dan Fandrich <dan@coneharvesters.com>\n# updated by Joerg Jenderek at Feb 2013 by http://de.wikipedia.org/wiki/PCX\n# http://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt\n# GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000\n# test for bytes 0x0a,version byte (0,2,3,4,5),compression byte flag(0,1), bit depth (>0) of PCX or T5.DBT,T6.DBT\n0\tubelong&0xffF8fe00\t0x0a000000\t\n# for PCX bit depth > 0 \n>3\tubyte\t\t>0\t\n# test for valid versions\n>>1\tubyte\t\t<6\t\n>>>1\tubyte\t\t!1\tPCX\n!:mime\timage/x-pcx\n#!:mime\timage/pcx\n>>>>1\tubyte\t\t0\tver. 2.5 image data\n>>>>1\tubyte\t\t2\tver. 2.8 image data, with palette\n>>>>1\tubyte\t\t3\tver. 2.8 image data, without palette\n>>>>1\tubyte\t\t4\tfor Windows image data\n>>>>1\tubyte\t\t5\tver. 3.0 image data\n>>>>4\tuleshort\tx\tbounding box [%d,\n>>>>6\tuleshort\tx\t%d] -\n>>>>8\tuleshort\tx\t[%d,\n>>>>10\tuleshort\tx\t%d],\n>>>>65\tubyte\t\t>1\t%d planes each of\n>>>>3\tubyte\t\tx\t%d-bit\n>>>>68\tbyte\t\t1\tcolour,\n>>>>68\tbyte\t\t2\tgrayscale,\n# this should not happen\n>>>>68\tdefault\t\tx\timage,\n>>>>12\tleshort\t\t>0\t%d x\n>>>>>14\tuleshort\tx\t%d dpi,\n>>>>2\tbyte\t\t0\tuncompressed\n>>>>2\tbyte\t\t1\tRLE compressed\n\n# Adobe Photoshop\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0\tstring\t\t8BPS Adobe Photoshop Image\n!:mime\timage/vnd.adobe.photoshop\n>4   beshort 2 (PSB)\n>18  belong  x \\b, %d x\n>14  belong  x %d,\n>24  beshort 0 bitmap\n>24  beshort 1 grayscale\n>>12 beshort 2 with alpha\n>24  beshort 2 indexed\n>24  beshort 3 RGB\n>>12 beshort 4 \\bA\n>24  beshort 4 CMYK\n>>12 beshort 5 \\bA\n>24  beshort 7 multichannel\n>24  beshort 8 duotone\n>24  beshort 9 lab\n>12  beshort > 1\n>>12  beshort x \\b, %dx\n>12  beshort 1 \\b,\n>22  beshort x %d-bit channel\n>12  beshort > 1 \\bs\n\n# XV thumbnail indicator (ThMO)\n0\tstring\t\tP7\\ 332\t\tXV thumbnail image data\n\n# NITF is defined by United States MIL-STD-2500A\n0\tstring\tNITF\tNational Imagery Transmission Format\n>25\tstring\t>\\0\tdated %.14s\n\n# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)\n# Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de>\n# See http://fileformats.archiveteam.org/wiki/GEM_Raster\n# For variations, also see:\n#    http://www.seasip.info/Gem/ff_img.html (Ventura) \n#    http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT)\n#    http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT)\n#    http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG)\n0       beshort     0x0001\n>2      beshort     0x0008      GEM Image data\n>>0     use gem_info\n>2      beshort     0x0009      GEM Image data (Ventura)\n>>0     use gem_info\n16      string      XIMG\\0      GEM XIMG Image data\n>0      use gem_info\n16      string      STTT\\0\\x10  GEM STTT Image data \n>0      use gem_info\n16      string      TIMG\\0      GEM TIMG Image data\n>0      use gem_info\n\n0   name        gem_info\n>12\tbeshort\t\tx\t\t%d x\n>14\tbeshort\t\tx\t\t%d,\n>4\tbeshort\t\tx\t\t%d planes,\n>8\tbeshort\t\tx\t\t%d x\n>10\tbeshort\t\tx\t\t%d pixelsize\n\n# GEM Metafile (Wolfram Kleff)\n0\tlelong\t\t0x0018FFFF\tGEM Metafile data\n>4\tleshort\t\tx\t\tversion %d\n\n#\n# SMJPEG. A custom Motion JPEG format used by Loki Entertainment\n# Software Torbjorn Andersson <d91tan@Update.UU.SE>.\n#\n0\tstring\t\\0\\nSMJPEG\tSMJPEG\n>8\tbelong\tx\t\t%d.x data\n# According to the specification you could find any number of _TXT\n# headers here, but I can't think of any way of handling that. None of\n# the SMJPEG files I tried it on used this feature. Even if such a\n# file is encountered the output should still be reasonable.\n>16\tstring\t_SND\t\t\\b,\n>>24\tbeshort\t>0\t\t%d Hz\n>>26\tbyte\t8\t\t8-bit\n>>26\tbyte\t16\t\t16-bit\n>>28\tstring\tNONE\t\tuncompressed\n# >>28\tstring\tAPCM\t\tADPCM compressed\n>>27\tbyte\t1\t\tmono\n>>28\tbyte\t2\t\tstereo\n# Help! Isn't there any way to avoid writing this part twice?\n>>32\tstring\t_VID\t\t\\b,\n# >>>48\tstring\tJFIF\t\tJPEG\n>>>40\tbelong\t>0\t\t%d frames\n>>>44\tbeshort\t>0\t\t(%d x\n>>>46\tbeshort\t>0\t\t%d)\n>16\tstring\t_VID\t\t\\b,\n# >>32\tstring\tJFIF\t\tJPEG\n>>24\tbelong\t>0\t\t%d frames\n>>28\tbeshort\t>0\t\t(%d x\n>>30\tbeshort\t>0\t\t%d)\n\n0\tstring\tPaint\\ Shop\\ Pro\\ Image\\ File\tPaint Shop Pro Image File\n\n# \"thumbnail file\" (icon)\n# descended from \"xv\", but in use by other applications as well (Wolfram Kleff)\n0       string          P7\\ 332         XV \"thumbnail file\" (icon) data\n\n# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)\n0       string          KiSS            KISS/GS\n>4      byte            16              color\n>>5     byte            x               %d bit\n>>8     leshort         x               %d colors\n>>10    leshort         x               %d groups\n>4      byte            32              cell\n>>5     byte            x               %d bit\n>>8     leshort         x               %d x\n>>10    leshort         x               %d\n>>12    leshort         x               +%d\n>>14    leshort         x               +%d\n\n# Webshots (www.webshots.com), by John Harrison\n0       string          C\\253\\221g\\230\\0\\0\\0 Webshots Desktop .wbz file\n\n# Hercules DASD image files\n# From Jan Jaeger <jj@septa.nl>\n0       string  CKD_P370        Hercules CKD DASD image file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n0       string  CKD_C370        Hercules compressed CKD DASD image file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n0       string  CKD_S370        Hercules CKD DASD shadow file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n# Squeak images and programs - etoffi@softhome.net\n0\tstring\t\t\\146\\031\\0\\0\tSqueak image data\n0\tsearch/1\t'From\\040Squeak\tSqueak program text\n\n# partimage: file(1) magic for PartImage files (experimental, incomplete)\n# Author: Hans-Joachim Baader <hjb@pro-linux.de>\n0\t\tstring\tPaRtImAgE-VoLuMe\tPartImage\n>0x0020\t\tstring\t0.6.1\t\tfile version %s\n>>0x0060\tlelong\t>-1\t\tvolume %d\n#>>0x0064 8 byte identifier\n#>>0x007c reserved\n>>0x0200\tstring\t>\\0\t\ttype %s\n>>0x1400\tstring\t>\\0\t\tdevice %s,\n>>0x1600\tstring\t>\\0\t\toriginal filename %s,\n# Some fields omitted\n>>0x2744\tlelong\t0\t\tnot compressed\n>>0x2744\tlelong\t1\t\tgzip compressed\n>>0x2744\tlelong\t2\t\tbzip2 compressed\n>>0x2744\tlelong\t>2\t\tcompressed with unknown algorithm\n>0x0020\t\tstring\t>0.6.1\t\tfile version %s\n>0x0020\t\tstring\t<0.6.1\t\tfile version %s\n\n# DCX is multi-page PCX, using a simple header of up to 1024\n# offsets for the respective PCX components.\n# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>\n0\tlelong\t987654321\tDCX multi-page PCX image data\n\n# Simon Walton <simonw@matteworld.com>\n# Kodak Cineon format for scanned negatives\n# http://www.kodak.com/US/en/motion/support/dlad/\n0\tlelong  0xd75f2a80\tCineon image data\n>200\tbelong  >0\t\t\\b, %d x\n>204\tbelong  >0\t\t%d\n\n\n# Bio-Rad .PIC is an image format used by microscope control systems\n# and related image processing software used by biologists.\n# From: Vebjorn Ljosa <vebjorn@ljosa.com>\n# BOOL values are two-byte integers; use them to rule out false positives.\n# http://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt\n# Samples: http://www.loci.wisc.edu/software/sample-data\n14\tleshort <2\n>62\tleshort <2\n>>54\tleshort 12345\t\tBio-Rad .PIC Image File\n>>>0\tleshort >0\t\t%d x\n>>>2\tleshort >0\t\t%d,\n>>>4\tleshort =1\t\t1 image in file\n>>>4\tleshort >1\t\t%d images in file\n\n# From Jan \"Yenya\" Kasprzak <kas@fi.muni.cz>\n# The description of *.mrw format can be found at\n# http://www.dalibor.cz/minolta/raw_file_format.htm\n0\tstring\t\\000MRM\t\t\tMinolta Dimage camera raw image data\n\n# Summary: DjVu image / document\n# Extension: .djvu\n# Reference: http://djvu.org/docs/DjVu3Spec.djvu\n# Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com>\n0\tstring\tAT&TFORM\n>12\tstring\tDJVM\t\tDjVu multiple page document\n!:mime\timage/vnd.djvu\n>12\tstring\tDJVU\t\tDjVu image or single page document\n!:mime\timage/vnd.djvu\n>12\tstring\tDJVI\t\tDjVu shared document\n!:mime\timage/vnd.djvu\n>12\tstring\tTHUM\t\tDjVu page thumbnails\n!:mime\timage/vnd.djvu\n\n# Originally by Marc Espie\n# Modified by Robert Minsk <robertminsk at yahoo.com>\n# http://www.openexr.com/openexrfilelayout.pdf\n0\tlelong\t\t20000630\tOpenEXR image data,\n!:mime image/x-exr\n>4\tlelong&0x000000ff x\t\tversion %d,\n>4\tlelong\t\t^0x00000200\tstorage: scanline\n>4\tlelong\t\t&0x00000200\tstorage: tiled\n>8\tsearch/0x1000\tcompression\\0\t\\b, compression:\n>>&16\tbyte\t\t0\t\tnone\n>>&16\tbyte\t\t1\t\trle\n>>&16\tbyte\t\t2\t\tzips\n>>&16\tbyte\t\t3\t\tzip\n>>&16\tbyte\t\t4\t\tpiz\n>>&16\tbyte\t\t5\t\tpxr24\n>>&16\tbyte\t\t6\t\tb44\n>>&16\tbyte\t\t7\t\tb44a\n>>&16\tbyte\t\t>7\t\tunknown\n>8\t search/0x1000\tdataWindow\\0\t\\b, dataWindow:\n>>&10\tlelong\t\tx\t\t(%d\n>>&14\tlelong\t\tx\t\t%d)-\n>>&18\tlelong\t\tx\t\t\\b(%d\n>>&22\tlelong\t\tx\t\t%d)\n>8\tsearch/0x1000\tdisplayWindow\\0\t\\b, displayWindow:\n>>&10\tlelong\t\tx\t\t(%d\n>>&14\tlelong\t\tx\t\t%d)-\n>>&18\tlelong\t\tx\t\t\\b(%d\n>>&22\tlelong\t\tx\t\t%d)\n>8\tsearch/0x1000\tlineOrder\\0\t \\b, lineOrder:\n>>&14\tbyte\t\t0\t\tincreasing y\n>>&14\tbyte\t\t1\t\tdecreasing y\n>>&14\tbyte\t\t2\t\trandom y\n>>&14\tbyte\t\t>2\t\tunknown\n\n# SMPTE Digital Picture Exchange Format, SMPTE DPX\n#\n# ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital\n# Moving-Picture Exchange (DPX), v1.0, 18 February 1994\n# Robert Minsk <robertminsk at yahoo.com>\n0\tstring\t\tSDPX\tDPX image data, big-endian,\n!:mime image/x-dpx\n>768\tbeshort\t\t<4\n>>772\tbelong\t\tx\t%dx\n>>776\tbelong\t\tx\t\\b%d,\n>768\tbeshort\t\t>3\n>>776\tbelong\t\tx\t%dx\n>>772\tbelong\t\tx\t\\b%d,\n>768\tbeshort\t\t0\tleft to right/top to bottom\n>768\tbeshort\t\t1\tright to left/top to bottom\n>768\tbeshort\t\t2\tleft to right/bottom to top\n>768\tbeshort\t\t3\tright to left/bottom to top\n>768\tbeshort\t\t4\ttop to bottom/left to right\n>768\tbeshort\t\t5\ttop to bottom/right to left\n>768\tleshort\t\t6\tbottom to top/left to right\n>768\tleshort\t\t7\tbottom to top/right to left\n\n# From: Tom Hilinski <tom.hilinski@comcast.net>\n# http://www.unidata.ucar.edu/packages/netcdf/\n0\tstring\tCDF\\001\t\t\tNetCDF Data Format data\n\n#-----------------------------------------------------------------------\n# Hierarchical Data Format, used to facilitate scientific data exchange\n# specifications at http://hdf.ncsa.uiuc.edu/\n0\tbelong\t0x0e031301\tHierarchical Data Format (version 4) data\n!:mime\tapplication/x-hdf\n0\tstring\t\\211HDF\\r\\n\\032\\n\tHierarchical Data Format (version 5) data\n!:mime\tapplication/x-hdf\n512\tstring\t\\211HDF\\r\\n\\032\\n\tHierarchical Data Format (version 5) with 512 bytes user block\n!:mime\tapplication/x-hdf\n1024\tstring\t\\211HDF\\r\\n\\032\\n\tHierarchical Data Format (version 5) with 1k user block\n!:mime\tapplication/x-hdf\n2048\tstring\t\\211HDF\\r\\n\\032\\n\tHierarchical Data Format (version 5) with 2k user block\n!:mime\tapplication/x-hdf\n4096\tstring\t\\211HDF\\r\\n\\032\\n\tHierarchical Data Format (version 5) with 4k user block\n!:mime\tapplication/x-hdf\n\n\n# From: Tobias Burnus <burnus@net-b.de>\n# Xara (for a while: Corel Xara) is a graphic package, see\n# http://www.xara.com/ for Windows and as GPL application for Linux\n0\tstring\tXARA\\243\\243\tXara graphics file\n\n# http://www.cartesianinc.com/Tech/\n0\tstring\tCPC\\262\t\tCartesian Perceptual Compression image\n!:mime\timage/x-cpi\n\n# From Albert Cahalan <acahalan@gmail.com>\n# puredigital used it for the CVS disposable camcorder\n#8       lelong  4       ZBM bitmap image data\n#>4      leshort x       %u x\n#>6      leshort x       %u\n\n# From Albert Cahalan <acahalan@gmail.com>\n# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons\n0       string C565     OLPC firmware icon image data\n>4      leshort x       %u x\n>6      leshort x       %u\n\n# Applied Images - Image files from Cytovision\n# Gustavo Junior Alves <gjalves@gjalves.com.br>\n0\tstring\t\\xce\\xda\\xde\\xfa\tCytovision Metaphases file\n0\tstring\t\\xed\\xad\\xef\\xac\tCytovision Karyotype file\n0\tstring\t\\x0b\\x00\\x03\\x00\tCytovision FISH Probe file\n0\tstring\t\\xed\\xfe\\xda\\xbe\tCytovision FLEX file\n0\tstring\t\\xed\\xab\\xed\\xfe\tCytovision FLEX file\n0\tstring\t\\xad\\xfd\\xea\\xad\tCytovision RATS file\n\n# Wavelet Scalar Quantization format used in gray-scale fingerprint images\n# From Tano M Fotang <mfotang@quanteq.com>\n0\tstring\t\\xff\\xa0\\xff\\xa8\\x00\tWavelet Scalar Quantization image data\n\n# Type:\t\tPCO B16 image files\n# URL:\t\thttp://www.pco.de/fileadmin/user_upload/db/download/MA_CWDCOPIE_0412b.pdf\n# From:\t\tFlorian Philipp <florian.philipp@binarywings.net>\n# Extension:\t.b16\n# Description:\tPixel image format produced by PCO Camware, typically used\n#\t\ttogether with PCO cameras.\n# Note:\t\tDifferent versions exist for e.g. 8 bit and 16 bit images.\n#\t\tDocumentation is incomplete.\n0\tstring/b\tPCO-\tPCO B16 image data\n>12\tlelong\t\tx\t\\b, %dx\n>16\tlelong\t\tx\t\\b%d\n>20\tlelong\t\t0\t\\b, short header\n>20\tlelong\t\t-1\t\\b, extended header\n>>24\tlelong\t\t0\t\\b, grayscale\n>>>36\tlelong\t\t0\tlinear LUT\n>>>36\tlelong\t\t1\tlogarithmic LUT\n>>>28\tlelong\t\tx\t[%d\n>>>32\tlelong\t\tx\t\\b,%d]\n>>24\tlelong\t\t1\t\\b, color\n>>>64\tlelong\t\t0\tlinear LUT\n>>>64\tlelong\t\t1\tlogarithmic LUT\n>>>40\tlelong\t\tx\tr[%d\n>>>44\tlelong\t\tx\t\\b,%d]\n>>>48\tlelong\t\tx\tg[%d\n>>>52\tlelong\t\tx\t\\b,%d]\n>>>56\tlelong\t\tx\tb[%d\n>>>60\tlelong\t\tx\t\\b,%d]\n\n# Polar Monitor Bitmap (.pmb) used as logo for Polar Electro watches\n# From: Markus Heidelberg <markus.heidelberg at web.de>\n0\tstring/t\t[BitmapInfo2]\tPolar Monitor Bitmap text\n!:mime\timage/x-polar-monitor-bitmap\n\n# From: Rick Richardson <rickrich@gmail.com>\n0\tstring\tGARMIN\\ BITMAP\\ 01\tGarmin Bitmap file\n\n# Type:\tUlead Photo Explorer5 (.pe5)\n# URL:\thttp://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)\n# From:\tSimon Horman <horms@debian.org>\n0\tstring\tIIO2H\t\t\tUlead Photo Explorer5\n\n# Type:\tX11 cursor\n# URL:\thttp://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup\n# From:\tMathias Brodala <info@noctus.net>\n0\tstring\tXcur\t\t\tX11 cursor\n\n# Type:\tOlympus ORF raw images.\n# URL:\thttp://libopenraw.freedesktop.org/wiki/Olympus_ORF\n# From:\tAdam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\t\tMMOR\t\tOlympus ORF raw image data, big-endian\n!:mime\timage/x-olympus-orf\n0\tstring\t\tIIRO\t\tOlympus ORF raw image data, little-endian\n!:mime\timage/x-olympus-orf\n0\tstring\t\tIIRS\t\tOlympus ORF raw image data, little-endian\n!:mime\timage/x-olympus-orf\n\n# Type: files used in modern AVCHD camcoders to store clip information\n# Extension: .cpi\n# From: Alexander Danilov <alexander.a.danilov@gmail.com>\n0\tstring\tHDMV0100\tAVCHD Clip Information\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/\n# Radiance HDR; usually has .pic or .hdr extension.\n0\tstring\t#?RADIANCE\\n\tRadiance HDR image data\n#!mime\timage/vnd.radiance\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf\n# Used by the pfstools packages. The regex matches for the image size could\n# probably use some work. The MIME type is made up; if there's one in\n# actual common use, it should replace the one below.\n0\tstring\tPFS1\\x0a\tPFS HDR image data\n#!mime\timage/x-pfs\n>1\tregex\t[0-9]*\\ \t\t\\b, %s\n>>1\tregex\t\\ [0-9]{4}\t\t\\bx%s\n\n# Type: Foveon X3F\n# URL:  http://www.photofo.com/downloads/x3f-raw-format.pdf\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# Note that the MIME type isn't defined anywhere that I can find; if\n# there's a canonical type for this format, it should replace this one.\n0\tstring\tFOVb\tFoveon X3F raw image data\n!:mime\timage/x-x3f\n>6\tleshort\tx\t\\b, version %d.\n>4\tleshort\tx\t\\b%d\n>28\tlelong\tx\t\\b, %dx\n>32\tlelong\tx\t\\b%d\n\n# Paint.NET file\n# From Adam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\tPDN3\tPaint.NET image data\n!:mime\timage/x-paintnet\n\n# Not really an image.\n# From: \"Tano M. Fotang\" <mfotang@quanteq.com>\n0\tstring\t\\x46\\x4d\\x52\\x00\tISO/IEC 19794-2 Format Minutiae Record (FMR)\n\n# doc: http://www.shikino.co.jp/eng/products/images/FLOWER.jpg.zip\n# example: http://www.shikino.co.jp/eng/products/images/FLOWER.wdp.zip\n90\tbequad\t\t0x574D50484F544F00\tJPEG-XR Image\n>98\tbyte&0x08\t=0x08\t\t\t\\b, hard tiling\n>99\tbyte&0x80\t=0x80\t\t\t\\b, tiling present\n>99\tbyte&0x40\t=0x40\t\t\t\\b, codestream present\n>99\tbyte&0x38\tx\t\t\t\\b, spatial xform=\n>99\tbyte&0x38\t0x00\t\t\t\\bTL\n>99\tbyte&0x38\t0x08\t\t\t\\bBL\n>99\tbyte&0x38\t0x10\t\t\t\\bTR\n>99\tbyte&0x38\t0x18\t\t\t\\bBR\n>99\tbyte&0x38\t0x20\t\t\t\\bBT\n>99\tbyte&0x38\t0x28\t\t\t\\bRB\n>99\tbyte&0x38\t0x30\t\t\t\\bLT\n>99\tbyte&0x38\t0x38\t\t\t\\bLB\n>100\tbyte&0x80\t=0x80\t\t\t\\b, short header\n>>102\tbeshort+1\tx\t\t\t\\b, %d\n>>104\tbeshort+1\tx\t\t\t\\bx%d\n>100\tbyte&0x80\t=0x00\t\t\t\\b, long header\n>>102\tbelong+1\tx\t\t\t\\b, %x\n>>106\tbelong+1\tx\t\t\t\\bx%x\n>101\tbeshort&0xf\tx\t\t\t\\b, bitdepth=\n>>101\tbeshort&0xf\t0x0\t\t\t\\b1-WHITE=1\n>>101\tbeshort&0xf\t0x1\t\t\t\\b8\n>>101\tbeshort&0xf\t0x2\t\t\t\\b16\n>>101\tbeshort&0xf\t0x3\t\t\t\\b16-SIGNED\n>>101\tbeshort&0xf\t0x4\t\t\t\\b16-FLOAT\n>>101\tbeshort&0xf\t0x5\t\t\t\\b(reserved 5)\n>>101\tbeshort&0xf\t0x6\t\t\t\\b32-SIGNED\n>>101\tbeshort&0xf\t0x7\t\t\t\\b32-FLOAT\n>>101\tbeshort&0xf\t0x8\t\t\t\\b5\n>>101\tbeshort&0xf\t0x9\t\t\t\\b10\n>>101\tbeshort&0xf\t0xa\t\t\t\\b5-6-5\n>>101\tbeshort&0xf\t0xb\t\t\t\\b(reserved %d)\n>>101\tbeshort&0xf\t0xc\t\t\t\\b(reserved %d)\n>>101\tbeshort&0xf\t0xd\t\t\t\\b(reserved %d)\n>>101\tbeshort&0xf\t0xe\t\t\t\\b(reserved %d)\n>>101\tbeshort&0xf\t0xf\t\t\t\\b1-BLACK=1\n>101\tbeshort&0xf0\tx\t\t\t\\b, colorfmt=\n>>101\tbeshort&0xf0\t0x00\t\t\t\\bYONLY\n>>101\tbeshort&0xf0\t0x10\t\t\t\\bYUV240\n>>101\tbeshort&0xf0\t0x20\t\t\t\\bYWV422\n>>101\tbeshort&0xf0\t0x30\t\t\t\\bYWV444\n>>101\tbeshort&0xf0\t0x40\t\t\t\\bCMYK\n>>101\tbeshort&0xf0\t0x50\t\t\t\\bCMYKDIRECT\n>>101\tbeshort&0xf0\t0x60\t\t\t\\bNCOMPONENT\n>>101\tbeshort&0xf0\t0x70\t\t\t\\bRGB\n>>101\tbeshort&0xf0\t0x80\t\t\t\\bRGBE\n>>101\tbeshort&0xf0\t>0x80\t\t\t\\b(reserved 0x%x)\n\n# From: Johan van der Knijff <johan.vanderknijff@kb.nl>\n#\n# BPG (Better Portable Graphics) format\n# http://bellard.org/bpg/\n# http://fileformats.archiveteam.org/wiki/BPG\n#\n0\tstring\t\\x42\\x50\\x47\\xFB\tBPG (Better Portable Graphics)\n!:mime  image/bpg\n\n#------------------------------------------------------------------------------\n# $File$\n# inform:  file(1) magic for Inform interactive fiction language\n\n# URL:  http://www.inform-fiction.org/\n# From: Reuben Thomas <rrt@sc3d.org>\n\n0\tsearch/100/cW\tconstant\\ story\t\tInform source text\n\n#------------------------------------------------------------------------------\n# $File: intel,v 1.11 2013/02/06 14:18:52 christos Exp $\n# intel:  file(1) magic for x86 Unix\n#\n# Various flavors of x86 UNIX executable/object (other than Xenix, which\n# is in \"microsoft\").  DOS is in \"msdos\"; the ambitious soul can do\n# Windows as well.\n#\n# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and\n# whatever comes next (HP-PA Hummingbird?).  OS/2 may also go elsewhere\n# as well, if, as, and when IBM makes it portable.\n#\n# The `versions' should be un-commented if they work for you.\n# (Was the problem just one of endianness?)\n#\n0\tleshort\t\t0502\t\tbasic-16 executable\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %d\n0\tleshort\t\t0503\t\tbasic-16 executable (TV)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %d\n0\tleshort\t\t0510\t\tx86 executable\n>12\tlelong\t\t>0\t\tnot stripped\n0\tleshort\t\t0511\t\tx86 executable (TV)\n>12\tlelong\t\t>0\t\tnot stripped\n0\tleshort\t\t=0512\t\tiAPX 286 executable small model (COFF)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %d\n0\tleshort\t\t=0522\t\tiAPX 286 executable large model (COFF)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %d\n# SGI labeled the next entry as \"iAPX 386 executable\" --Dan Quinlan\n0\tleshort\t\t=0514\t\t80386 COFF executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %d\n\n# rom: file(1) magic for BIOS ROM Extensions found in intel machines\n#      mapped into memory between 0xC0000 and 0xFFFFF\n# From Gurkan Sengun <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n0        beshort         0x55AA       BIOS (ia32) ROM Ext.\n>5       string          USB          USB\n>7       string          LDR          UNDI image\n>30      string          IBM          IBM comp. Video\n>26      string          Adaptec      Adaptec\n>28      string          Adaptec      Adaptec\n>42      string          PROMISE      Promise\n>2       byte            x            (%d*512)\n\n# Flash descriptors for Intel SPI flash roms.\n# From Dr. Jesus <j@hug.gs>\n0\tlelong\t\t0x0ff0a55a\tIntel serial flash for ICH/PCH ROM <= 5 or 3400 series A-step\n16\tlelong\t\t0x0ff0a55a\tIntel serial flash for PCH ROM\n\n#------------------------------------------------------------------------------\n# $File$\n# interleaf:  file(1) magic for InterLeaf TPS:\n#\n0\tstring\t\t=\\210OPS\tInterleaf saved data\n0\tstring\t\t=<!OPS\t\tInterleaf document text\n>5\tstring\t\t,\\ Version\\ =\t\\b, version\n>>17\tstring\t\t>\\0\t\t%.3s\n\n#------------------------------------------------------------------------------\n# $File$\n# island:  file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1\n# \"/etc/magic\":\n# From: guy@netapp.com (Guy Harris)\n#\n4\tstring\t\tpgscriptver\tIslandWrite document\n13\tstring\t\tDrawFile\tIslandDraw document\n\n\n#------------------------------------------------------------------------------\n# $File$\n# ispell:  file(1) magic for ispell\n#\n# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602.  This magic\n# will match 0x9600 through 0x9603 in *both* little endian and big endian.\n# (No other current magic entries collide.)\n#\n# Updated by Daniel Quinlan (quinlan@yggdrasil.com)\n#\n0\tleshort&0xFFFC\t0x9600\t\tlittle endian ispell\n>0\tbyte\t\t0\t\thash file (?),\n>0\tbyte\t\t1\t\t3.0 hash file,\n>0\tbyte\t\t2\t\t3.1 hash file,\n>0\tbyte\t\t3\t\thash file (?),\n>2\tleshort\t\t0x00\t\t8-bit, no capitalization, 26 flags\n>2\tleshort\t\t0x01\t\t7-bit, no capitalization, 26 flags\n>2\tleshort\t\t0x02\t\t8-bit, capitalization, 26 flags\n>2\tleshort\t\t0x03\t\t7-bit, capitalization, 26 flags\n>2\tleshort\t\t0x04\t\t8-bit, no capitalization, 52 flags\n>2\tleshort\t\t0x05\t\t7-bit, no capitalization, 52 flags\n>2\tleshort\t\t0x06\t\t8-bit, capitalization, 52 flags\n>2\tleshort\t\t0x07\t\t7-bit, capitalization, 52 flags\n>2\tleshort\t\t0x08\t\t8-bit, no capitalization, 128 flags\n>2\tleshort\t\t0x09\t\t7-bit, no capitalization, 128 flags\n>2\tleshort\t\t0x0A\t\t8-bit, capitalization, 128 flags\n>2\tleshort\t\t0x0B\t\t7-bit, capitalization, 128 flags\n>2\tleshort\t\t0x0C\t\t8-bit, no capitalization, 256 flags\n>2\tleshort\t\t0x0D\t\t7-bit, no capitalization, 256 flags\n>2\tleshort\t\t0x0E\t\t8-bit, capitalization, 256 flags\n>2\tleshort\t\t0x0F\t\t7-bit, capitalization, 256 flags\n>4\tleshort\t\t>0\t\tand %d string characters\n0\tbeshort&0xFFFC\t0x9600\t\tbig endian ispell\n>1\tbyte\t\t0\t\thash file (?),\n>1\tbyte\t\t1\t\t3.0 hash file,\n>1\tbyte\t\t2\t\t3.1 hash file,\n>1\tbyte\t\t3\t\thash file (?),\n>2\tbeshort\t\t0x00\t\t8-bit, no capitalization, 26 flags\n>2\tbeshort\t\t0x01\t\t7-bit, no capitalization, 26 flags\n>2\tbeshort\t\t0x02\t\t8-bit, capitalization, 26 flags\n>2\tbeshort\t\t0x03\t\t7-bit, capitalization, 26 flags\n>2\tbeshort\t\t0x04\t\t8-bit, no capitalization, 52 flags\n>2\tbeshort\t\t0x05\t\t7-bit, no capitalization, 52 flags\n>2\tbeshort\t\t0x06\t\t8-bit, capitalization, 52 flags\n>2\tbeshort\t\t0x07\t\t7-bit, capitalization, 52 flags\n>2\tbeshort\t\t0x08\t\t8-bit, no capitalization, 128 flags\n>2\tbeshort\t\t0x09\t\t7-bit, no capitalization, 128 flags\n>2\tbeshort\t\t0x0A\t\t8-bit, capitalization, 128 flags\n>2\tbeshort\t\t0x0B\t\t7-bit, capitalization, 128 flags\n>2\tbeshort\t\t0x0C\t\t8-bit, no capitalization, 256 flags\n>2\tbeshort\t\t0x0D\t\t7-bit, no capitalization, 256 flags\n>2\tbeshort\t\t0x0E\t\t8-bit, capitalization, 256 flags\n>2\tbeshort\t\t0x0F\t\t7-bit, capitalization, 256 flags\n>4\tbeshort\t\t>0\t\tand %d string characters\n# ispell 4.0 hash files  kromJx <kromJx@crosswinds.net>\n# Ispell 4.0\n0       string          ISPL            ispell\n>4      long            x               hash file version %d,\n>8      long            x               lexletters %d,\n>12     long            x               lexsize %d,\n>16     long            x               hashsize %d,\n>20     long            x               stblsize %d\n\n#------------------------------------------------------------------------------\n# $File: isz,v 1.2 2014/04/28 12:04:50 christos Exp $\n# ISO Zipped file format \n# http://www.ezbsystems.com/isz/iszspec.txt\n0\tstring\tIsZ!\tISO Zipped file\n>4\tbyte\tx\t\\b, header size %u\n>5\tbyte\tx\t\\b, version %u\n>8\tlelong\tx\t\\b, serial %u\n#12\tleshort\tx\t\\b, sector size %u\n#>16\tlelong\tx\t\\b, total sectors %u\n>17\tbyte\t>0\t\\b, password protected\n#>24\tlequad\tx\t\\b, segment size %llu\n#>32\tlelong\tx\t\\b, blocks %u\n#>36\tlelong\tx\t\\b, block size %u\n\n#------------------------------------------------------------\n# $File: java,v 1.15 2013/08/14 09:10:36 christos Exp $\n# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the\n# same magic number, 0xcafebabe, so they are both handled\n# in the entry called \"cafebabe\".\n#------------------------------------------------------------\n# Java serialization\n# From Martin Pool (m.pool@pharos.com.au)\n0\tbeshort\t\t0xaced\t\tJava serialization data\n>2\tbeshort\t\t>0x0004\t\t\\b, version %d\n\n0\tbelong\t\t0xfeedfeed\tJava KeyStore\n!:mime\tapplication/x-java-keystore\n0\tbelong\t\t0xcececece\tJava JCE KeyStore\n!:mime\tapplication/x-java-jce-keystore\n\n# Java source\n0\tregex\t^import.*;$\tJava source\n!:mime\ttext/x-java\n\n#------------------------------------------------------------------------------\n# $File: $\n# javascript:  magic for javascript and node.js scripts.\n#\n0\tsearch/1/w\t#!/bin/node\t\tNode.js script text executable\n!:mime application/javascript\n0\tsearch/1/w\t#!/usr/bin/node\t\tNode.js script text executable\n!:mime application/javascript\n0\tsearch/1/w\t#!/bin/nodejs\t\tNode.js script text executable\n!:mime application/javascript\n0\tsearch/1/w\t#!/usr/bin/nodejs\tNode.js script text executable\n!:mime application/javascript\n0\tsearch/1\t#!/usr/bin/env\\ node\tNode.js script text executable\n!:mime application/javascript\n0\tsearch/1\t#!/usr/bin/env\\ nodejs\tNode.js script text executable\n!:mime application/javascript\n\n#------------------------------------------------------------------------------\n# $File: jpeg,v 1.26 2015/01/02 22:40:27 christos Exp $\n# JPEG images\n# SunOS 5.5.1 had\n#\n#\t0\tstring\t\t\\377\\330\\377\\340\tJPEG file\n#\t0\tstring\t\t\\377\\330\\377\\356\tJPG file\n#\n# both of which turn into \"JPEG image data\" here.\n#\n0\tbeshort\t\t0xffd8\t\tJPEG image data\n!:mime\timage/jpeg\n!:apple\t8BIMJPEG\n!:strength *3\n>6\tstring\t\tJFIF\t\t\\b, JFIF standard\n# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06\n# in a vain attempt to add image size reporting for JFIF.  Note that these\n# tests are not fool-proof since some perfectly valid JPEGs are currently\n# impossible to specify in magic(4) format.\n# First, a little JFIF version info:\n>>11\tbyte\t\tx\t\t\\b %d.\n>>12\tbyte\t\tx\t\t\\b%02d\n# Next, the resolution or aspect ratio of the image:\n>>13\tbyte\t\t0\t\t\\b, aspect ratio\n>>13\tbyte\t\t1\t\t\\b, resolution (DPI)\n>>13\tbyte\t\t2\t\t\\b, resolution (DPCM)\n>>14\tbeshort\t\tx\t\t\\b, density %dx\n>>16\tbeshort\t\tx\t\t\\b%d\n>>4\tbeshort\t\tx\t\t\\b, segment length %d\n# Next, show thumbnail info, if it exists:\n>>18\tbyte\t\t!0\t\t\\b, thumbnail %dx\n>>>19\tbyte\t\tx\t\t\\b%d\n>6\tstring\t\tExif\t\t\\b, Exif standard: [\n>>12\tindirect/r\tx\n>>12\tstring\t\tx\t\t\\b]\n\n# Jump to the first segment\n>(4.S+4)\tuse\t\tjpeg_segment\n\n# This uses recursion...\n0\t\tname\t\tjpeg_segment\n>0\tbeshort\t\t0xFFFE\n# Recursion handled by FFE0\n#>>(2.S+2)\tuse\t\t\tjpeg_segment\n>>2\tpstring/HJ\tx\t\t\\b, comment: \"%s\"\n\n>0\tbeshort\t\t0xFFC0\n>>(2.S+2)\tuse\t\t\tjpeg_segment\n>>4\tbyte\t\tx\t\t\\b, baseline, precision %d\n>>7\tbeshort\t\tx\t\t\\b, %dx\n>>5\tbeshort\t\tx\t\t\\b%d\n>>9\tbyte\t\tx\t\t\\b, frames %d\n\n>0\tbeshort\t\t0xFFC1\t\t\n>>(2.S+2)\tuse\t\t\tjpeg_segment\n>>4\tbyte\t\tx\t\t\\b, extended sequential, precision %d\n>>7\tbeshort\t\tx\t\t\\b, %dx\n>>5\tbeshort\t\tx\t\t\\b%d\n>>9\tbyte\t\tx\t\t\\b, frames %d\n\n>0\tbeshort\t\t0xFFC2\t\t\n>>(2.S+2)\tuse\t\t\tjpeg_segment\n>>4\tbyte\t\tx\t\t\\b, progressive, precision %d\n>>7\tbeshort\t\tx\t\t\\b, %dx\n>>5\tbeshort\t\tx\t\t\\b%d\n>>9\tbyte\t\tx\t\t\\b, frames %d\n\n# Define Huffman Tables\n>0\tbeshort\t\t0xFFC4\n>>(2.S+2)\tuse\t\t\tjpeg_segment\n\n>0\tbeshort\t\t0xFFE1\t\t\n# Recursion handled by FFE0\n#>>(2.S+2)\tuse\t\t\tjpeg_segment\n>>4\tstring\t\tExif\t\t\\b, Exif Standard: [\n>>>10\tindirect/r\tx\t\t\n>>>10\tstring\t\tx\t\t\\b]\n\n# Application specific markers\n>0\tbeshort&0xFFE0\t=0xFFE0\n>>(2.S+2)\tuse\t\t\tjpeg_segment\n\n# DB: Define Quantization tables\n# DD: Define Restart interval [XXX: wrong here, it is 4 bytes]\n# D8: Start of image\n# D9: End of image\n# Dn: Restart\n>0\tbeshort&0xFFD0\t=0xFFD0\n>>0\tbeshort&0xFFE0\t!0xFFE0\n>>>(2.S+2)\tuse\t\t\tjpeg_segment\n\n#>0\tbeshort\t\tx\t\tunknown 0x%x\n#>>(2.S+2)\tuse\t\t\tjpeg_segment\n\n# HSI is Handmade Software's proprietary JPEG encoding scheme\n0\tstring\t\thsi1\t\tJPEG image data, HSI proprietary\n\n# From: David Santinoli <david@santinoli.com>\n0\tstring\t\t\\x00\\x00\\x00\\x0C\\x6A\\x50\\x20\\x20\\x0D\\x0A\\x87\\x0A\tJPEG 2000\n# From: Johan van der Knijff <johan.vanderknijff@kb.nl>\n# Added sub-entries for JP2, JPX, JPM and MJ2 formats; added mimetypes\n# https://github.com/bitsgalore/jp2kMagic\n#\n# Now read value of 'Brand' field, which yields a few possibilities:\n>20\tstring\t\t\\x6a\\x70\\x32\\x20\tPart 1 (JP2)\n!:mime\timage/jp2\n>20\tstring\t\t\\x6a\\x70\\x78\\x20\tPart 2 (JPX)\n!:mime\timage/jpx\n>20\tstring\t\t\\x6a\\x70\\x6d\\x20\tPart 6 (JPM)\n!:mime\timage/jpm\n>20\tstring\t\t\\x6d\\x6a\\x70\\x32\tPart 3 (MJ2)\n!:mime\tvideo/mj2\n\n# Type: JPEG 2000 codesream\n# From: Mathieu Malaterre <mathieu.malaterre@gmail.com>\n0\tbelong\t\t0xff4fff51\t\t\t\t\t\tJPEG 2000 codestream\n45\tbeshort\t\t0xff52\n\n#------------------------------------------------------------------------------\n# $File: karma,v 1.6 2009/09/19 16:28:10 christos Exp $\n# karma:  file(1) magic for Karma data files\n#\n# From <rgooch@atnf.csiro.au>\n\n0\tstring\t\tKarmaRHD Version\tKarma Data Structure Version\n>16\tbelong\t\tx\t\t%u\n\n#------------------------------------------------------------------------------\n# $File: kde,v 1.4 2009/09/19 16:28:10 christos Exp $\n# kde:  file(1) magic for KDE\n\n0\t\tstring/t\t[KDE\\ Desktop\\ Entry]\tKDE desktop entry\n!:mime\tapplication/x-kdelnk\n0\t\tstring/t\t#\\ KDE\\ Config\\ File\tKDE config file\n!:mime\tapplication/x-kdelnk\n0\t\tstring/t\t#\\ xmcd\txmcd database file for kscd\n!:mime\ttext/x-xmcd\n\n#------------------------------------------------------------------------------\n# $File: kml,v 1.3 2010/11/25 15:00:12 christos Exp $\n# keepass: file(1) magic for KeePass file\n#\n# Keepass Password Safe:\n#  * original one: http://keepass.info/\n#  * *nix port:    http://www.keepassx.org/\n#  * android port: http://code.google.com/p/keepassdroid/\n\n0\tlelong\t\t0x9AA2D903\tKeepass password database\n>4\tlelong\t\t0xB54BFB65\t1.x KDB\n>>48\tlelong\t\t>0\t\t\\b, %d groups\n>>52\tlelong\t\t>0\t\t\\b, %d entries\n>>8\tlelong&0x0f\t1\t\t\\b, SHA-256\n>>8\tlelong&0x0f\t2\t\t\\b, AES\n>>8\tlelong&0x0f\t4\t\t\\b, RC4\n>>8\tlelong&0x0f\t8\t\t\\b, Twofish\n>>120\tlelong\t\t>0\t\t\\b, %d key transformation rounds\n>4\tlelong\t\t0xB54BFB67\t2.x KDBX\n\n#------------------------------------------------------------------------------\n# $File: map,v 1.1 2014/06/03 18:22:25 christos Exp $\n# kerberos: MIT kerberos file binary formats\n#\n\n# This magic entry is for demonstration purposes and could be improved\n# if the following features were implemented in file:\n#\n# Strings inside [[ .. ]] in the descriptions have special meanings and\n# are not printed.\n#\n# \t- Provide some form of iteration in number of components\n#\t\t[[${counter}=%d]] in the description\n#\t\tthen append\n#\t\t[${counter}--] in the offset of the entries\n#\t- Provide a way to round the next offset\n#\t\tAdd [R:4] after the offset?\n#\t- Provide a way to have optional entries\n#\t\tXXX: Syntax:\n#\t- Provide a way to \"save\" entries to print them later.\n#\t\tif the description is [[${name}=%s]], then nothing is\n#\t\tprinted and a subsequent entry in the same magic file\n#\t\tcan refer to ${name}\n#\t- Provide a way to format strings as hex values\n#\n# http://www.gnu.org/software/shishi/manual/html_node/\\\n#\tThe-Keytab-Binary-File-Format.html\n#\n\n0\t\tname\t\tkeytab_entry\n#>0\t\tbeshort\t\tx\t\t\\b, size=%d\n#>2\t\tbeshort\t\tx\t\t\\b, components=%d\n>4\t\tpstring/H\tx\t\t\\b, realm=%s\n>>&0\t\tpstring/H\tx\t\t\\b, principal=%s/\n>>>&0\t\tpstring/H\tx\t\t\\b%s\n>>>>&0\t\tbelong\t\tx\t\t\\b, type=%d\n>>>>>&0\t\tbedate\t\tx\t\t\\b, date=%s\n>>>>>>&0\tbyte\t\tx\t\t\\b, kvno=%u\n#>>>>>>>&0\tpstring/H\tx\n#>>>>>>>>&0\tbelong\t\tx\t\n#>>>>>>>>>>&0\tuse\t\tkeytab_entry\n\n0\t\tbelong\t\t0x05020000\tKerberos Keytab file\n>4\t\tuse\t\tkeytab_entry\n\n#------------------------------------------------------------------------------\n# $File: kml,v 1.2 2009/09/19 16:28:10 christos Exp $\n# Type: Google KML, formerly Keyhole Markup Language\n# Future development of this format has been handed\n# over to the Open Geospatial Consortium.\n# http://www.opengeospatial.org/standards/kml/\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0 string/t    \\<?xml\n>20  search/400 \\ xmlns= \n>>&0 regex ['\"]http://earth.google.com/kml Google KML document\n!:mime application/vnd.google-earth.kml+xml\n>>>&1 string 2.0' \\b, version 2.0\n>>>&1 string 2.1' \\b, version 2.1\n>>>&1 string 2.2' \\b, version 2.2\n\n#------------------------------------------------------------------------------\n# Type: OpenGIS KML, formerly Keyhole Markup Language\n# This standard is maintained by the\n# Open Geospatial Consortium.\n# http://www.opengeospatial.org/standards/kml/\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n>>&0 regex ['\"]http://www.opengis.net/kml OpenGIS KML document\n!:mime application/vnd.google-earth.kml+xml\n>>>&1 string/t 2.2 \\b, version 2.2\n\n#------------------------------------------------------------------------------\n# Type: Google KML Archive (ZIP based) \n# http://code.google.com/apis/kml/documentation/kml_tut.html\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0 string    PK\\003\\004\n>4  byte    0x14\n>>30  string doc.kml Compressed Google KML Document, including resources.\n!:mime application/vnd.google-earth.kmz\n\n#------------------------------------------------------------------------------\n# $File$\n# DEC SRC Virtual Paper: Lectern files\n# Karl M. Hegbloom <karlheg@inetarena.com>\n0\tstring\tlect\tDEC SRC Virtual Paper Lectern file\n\n#------------------------------------------------------------------------------\n# $File$\n# lex:  file(1) magic for lex\n#\n#\tderived empirically, your offsets may vary!\n0\tsearch/100\tyyprevious\tC program text (from lex)\n>3\tsearch/1\t>\\0\t\t for %s\n# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tsearch/100\tgenerated\\ by\\ flex\tC program text (from flex)\n# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tsearch/1\t%{\t\tlex description text\n\n#------------------------------------------------------------------------------\n# $File$\n# lif:  file(1) magic for lif\n#\n# (Daniel Quinlan <quinlan@yggdrasil.com>)\n#\n0\tbeshort\t\t0x8000\t\tlif file\n\n#------------------------------------------------------------------------------\n# $File: linux,v 1.58 2014/08/04 06:21:30 christos Exp $\n# linux:  file(1) magic for Linux files\n#\n# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>\n# The following basic Linux magic is useful for reference, but using\n# \"long\" magic is a better practice in order to avoid collisions.\n#\n# 2\tleshort\t\t100\t\tLinux/i386\n# >0\tleshort\t\t0407\t\timpure executable (OMAGIC)\n# >0\tleshort\t\t0410\t\tpure executable (NMAGIC)\n# >0\tleshort\t\t0413\t\tdemand-paged executable (ZMAGIC)\n# >0\tleshort\t\t0314\t\tdemand-paged executable (QMAGIC)\n#\n0\tlelong\t\t0x00640107\tLinux/i386 impure executable (OMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x00640108\tLinux/i386 pure executable (NMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x0064010b\tLinux/i386 demand-paged executable (ZMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x006400cc\tLinux/i386 demand-paged executable (QMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n#\n0\tstring\t\t\\007\\001\\000\tLinux/i386 object file\n>20\tlelong\t\t>0x1020\t\t\\b, DLL library\n# Linux-8086 stuff:\n0\tstring\t\t\\01\\03\\020\\04\tLinux-8086 impure executable\n>28\tlong\t\t!0\t\tnot stripped\n0\tstring\t\t\\01\\03\\040\\04\tLinux-8086 executable\n>28\tlong\t\t!0\t\tnot stripped\n#\n0\tstring\t\t\\243\\206\\001\\0\tLinux-8086 object file\n#\n0\tstring\t\t\\01\\03\\020\\20\tMinix-386 impure executable\n>28\tlong\t\t!0\t\tnot stripped\n0\tstring\t\t\\01\\03\\040\\20\tMinix-386 executable\n>28\tlong\t\t!0\t\tnot stripped\n0\tstring\t\t\\01\\03\\04\\20\tMinix-386 NSYM/GNU executable\n>28\tlong\t\t!0\t\tnot stripped\n# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>\n216\tlelong\t\t0421\t\tLinux/i386 core file\n!:strength / 2\n>220\tstring\t\t>\\0\t\tof '%s'\n>200\tlelong\t\t>0\t\t(signal %d)\n#\n# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>\n# this can be overridden by the DOS executable (COM) entry\n2\tstring\t\tLILO\t\tLinux/i386 LILO boot/chain loader\n#\n# Linux make config build file, from Ole Aamot <oka@oka.no>\n# Updated by Ken Sharp\n28\tstring\t\tmake\\ config\t\tLinux make config build file (old)\n49\tsearch/70\tKernel\\ Configuration\tLinux make config build file\n\n#\n# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>\n# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>\n# See: http://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html\n0\tleshort\t\t0x0436\t\tLinux/i386 PC Screen Font v1 data,\n>2\tbyte&0x01\t0\t\t256 characters,\n>2\tbyte&0x01\t!0\t\t512 characters,\n>2\tbyte&0x02\t0\t\tno directory,\n>2\tbyte&0x02\t!0\t\tUnicode directory,\n>3\tbyte\t\t>0\t\t8x%d\n0\tstring\t\t\\x72\\xb5\\x4a\\x86\\x00\\x00 Linux/i386 PC Screen Font v2 data,\n>16\tlelong\t\tx\t\t%d characters,\n>12\tlelong&0x01\t0\t\tno directory,\n>12\tlelong&0x01\t!0\t\tUnicode directory,\n>24\tlelong\t\tx\t\t%d\n>28\tlelong\t\tx\t\t\\bx%d\n\n# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>\n4086\tstring\t\tSWAP-SPACE\tLinux/i386 swap file\n# From: Jeff Bailey <jbailey@ubuntu.com>\n# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey@ubuntu.com>\n4076\tstring\t\tSWAPSPACE2S1SUSPEND\tLinux/i386 swap file (new style) with SWSUSP1 image\n# From: James Hunt <james.hunt@ubuntu.com>\n4076    string          SWAPSPACE2LINHIB0001    Linux/i386 swap file (new style) (compressed hibernate)\n# according to man page of mkswap (8) March 1999\n# volume label and UUID Russell Coker\n# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/\n4086\tstring\t\tSWAPSPACE2\tLinux/i386 swap file (new style),\n>0x400\tlong\t\tx\t\tversion %d (4K pages),\n>0x404\tlong\t\tx\t\tsize %d pages,\n>1052\tstring\t\t\\0\t\tno label,\n>1052\tstring\t\t>\\0\t\tLABEL=%s,\n>0x40c\tbelong\t\tx\t\tUUID=%08x\n>0x410\tbeshort\t\tx\t\t\\b-%04x\n>0x412\tbeshort\t\tx\t\t\\b-%04x\n>0x414\tbeshort\t\tx\t\t\\b-%04x\n>0x416\tbelong\t\tx\t\t\\b-%08x\n>0x41a\tbeshort\t\tx\t\t\\b%04x\n# From Daniel Novotny <dnovotny@redhat.com>\n# swap file for PowerPC\n65526\tstring\t\tSWAPSPACE2\tLinux/ppc swap file\n16374\tstring\t\tSWAPSPACE2\tLinux/ia64 swap file\n#\n# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>\n# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>\n# and Nicolas Lichtmaier <nick@debian.org>\n# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29\n# Linux kernel boot images (i386 arch) (Wolfram Kleff)\n514\tstring\t\tHdrS\t\tLinux kernel\n!:strength + 55\n>510\tleshort\t\t0xAA55\t\tx86 boot executable\n>>518\tleshort\t\t>0x1ff\n>>>529\tbyte\t\t0\t\tzImage,\n>>>529\tbyte\t\t1\t\tbzImage,\n>>>526\tlelong\t\t>0\n>>>>(526.s+0x200) string\t>\\0\tversion %s,\n>>498\tleshort\t\t1\t\tRO-rootFS,\n>>498\tleshort\t\t0\t\tRW-rootFS,\n>>508\tleshort\t\t>0\t\troot_dev 0x%X,\n>>502\tleshort\t\t>0\t\tswap_dev 0x%X,\n>>504\tleshort\t\t>0\t\tRAMdisksize %u KB,\n>>506\tleshort\t\t0xFFFF\t\tNormal VGA\n>>506\tleshort\t\t0xFFFE\t\tExtended VGA\n>>506\tleshort\t\t0xFFFD\t\tPrompt for Videomode\n>>506\tleshort\t\t>0\t\tVideo mode %d\n# This also matches new kernels, which were caught above by \"HdrS\".\n0\t\tbelong\t0xb8c0078e\tLinux kernel\n>0x1e3\t\tstring\tLoading\t\tversion 1.3.79 or older\n>0x1e9\t\tstring\tLoading\t\tfrom prehistoric times\n\n# System.map files - Nicolas Lichtmaier <nick@debian.org>\n8\tsearch/1\t\\ A\\ _text\tLinux kernel symbol map text\n\n# LSM entries - Nicolas Lichtmaier <nick@debian.org>\n0\tsearch/1\tBegin3\tLinux Software Map entry text\n0\tsearch/1\tBegin4\tLinux Software Map entry text (new format)\n\n# From Matt Zimmerman, enhanced for v3 by Matthew Palmer\n0\tbelong\t0x4f4f4f4d\tUser-mode Linux COW file\n>4\tbelong\t<3\t\t\\b, version %d\n>>8\tstring\t>\\0\t\t\\b, backing file %s\n>4\tbelong\t>2\t\t\\b, version %d\n>>32\tstring\t>\\0\t\t\\b, backing file %s\n\n############################################################################\n# Linux kernel versions\n\n0\t\tstring\t\t\\xb8\\xc0\\x07\\x8e\\xd8\\xb8\\x00\\x90\tLinux\n>497\t\tleshort\t\t0\t\tx86 boot sector\n>>514\t\tbelong\t\t0x8e\tof a kernel from the dawn of time!\n>>514\t\tbelong\t\t0x908ed8b4\tversion 0.99-1.1.42\n>>514\t\tbelong\t\t0x908ed8b8\tfor memtest86\n\n>497\t\tleshort\t\t!0\t\tx86 kernel\n>>504\t\tleshort\t\t>0\t\tRAMdisksize=%u KB\n>>502\t\tleshort\t\t>0\t\tswap=0x%X\n>>508\t\tleshort\t\t>0\t\troot=0x%X\n>>>498\t\tleshort\t\t1\t\t\\b-ro\n>>>498\t\tleshort\t\t0\t\t\\b-rw\n>>506\t\tleshort\t\t0xFFFF\t\tvga=normal\n>>506\t\tleshort\t\t0xFFFE\t\tvga=extended\n>>506\t\tleshort\t\t0xFFFD\t\tvga=ask\n>>506\t\tleshort\t\t>0\t\tvga=%d\n>>514\t\tbelong\t\t0x908ed881\tversion 1.1.43-1.1.45\n>>514\t\tbelong\t\t0x15b281cd\n>>>0xa8e\tbelong\t\t0x55AA5a5a\tversion 1.1.46-1.2.13,1.3.0\n>>>0xa99\tbelong\t\t0x55AA5a5a\tversion 1.3.1,2\n>>>0xaa3\tbelong\t\t0x55AA5a5a\tversion 1.3.3-1.3.30\n>>>0xaa6\tbelong\t\t0x55AA5a5a\tversion 1.3.31-1.3.41\n>>>0xb2b\tbelong\t\t0x55AA5a5a\tversion 1.3.42-1.3.45\n>>>0xaf7\tbelong\t\t0x55AA5a5a\tversion 1.3.46-1.3.72\n>>514\t\tstring\t\tHdrS\n>>>518\t\tleshort\t\t>0x1FF\n>>>>529\t\tbyte\t\t0\t\t\\b, zImage\n>>>>529\t\tbyte\t\t1\t\t\\b, bzImage\n>>>>(526.s+0x200) string \t>\\0\t\t\\b, version %s\n\n# Linux boot sector thefts.\n0\t\tbelong\t\t0xb8c0078e\tLinux\n>0x1e6\t\tbelong\t\t0x454c4b53\tELKS Kernel\n>0x1e6\t\tbelong\t\t!0x454c4b53\tstyle boot sector\n\n############################################################################\n# Linux S390 kernel image\n# Created by: Jan Kaluza <jkaluza@redhat.com>\n8 string \\x02\\x00\\x00\\x18\\x60\\x00\\x00\\x50\\x02\\x00\\x00\\x68\\x60\\x00\\x00\\x50\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40 Linux S390\n>0x00010000 search/b/4096 \\x00\\x0a\\x00\\x00\\x8b\\xad\\xcc\\xcc\n# 64bit\n>>&0 string \\xc1\\x00\\xef\\xe3\\xf0\\x68\\x00\\x00 Z10 64bit kernel\n>>&0 string \\xc1\\x00\\xef\\xc3\\x00\\x00\\x00\\x00 Z9-109 64bit kernel\n>>&0 string \\xc0\\x00\\x20\\x00\\x00\\x00\\x00\\x00 Z990 64bit kernel\n>>&0 string \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 Z900 64bit kernel\n# 32bit\n>>&0 string \\x81\\x00\\xc8\\x80\\x00\\x00\\x00\\x00 Z10 32bit kernel\n>>&0 string \\x81\\x00\\xc8\\x80\\x00\\x00\\x00\\x00 Z9-109 32bit kernel\n>>&0 string \\x80\\x00\\x20\\x00\\x00\\x00\\x00\\x00 Z990 32bit kernel\n>>&0 string \\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00 Z900 32bit kernel\n\n# Linux ARM compressed kernel image\n# From: Kevin Cernekee <cernekee@gmail.com>\n36\tlelong\t0x016f2818\tLinux kernel ARM boot executable zImage (little-endian)\n36\tbelong\t0x016f2818\tLinux kernel ARM boot executable zImage (big-endian)\n\n############################################################################\n# Linux 8086 executable\n0\tlelong&0xFF0000FF 0xC30000E9\tLinux-Dev86 executable, headerless\n>5\tstring\t\t.\t\t\n>>4\tstring\t\t>\\0\t\t\\b, libc version %s\n\n0\tlelong&0xFF00FFFF 0x4000301\tLinux-8086 executable\n>2\tbyte&0x01\t!0\t\t\\b, unmapped zero page\n>2\tbyte&0x20\t0\t\t\\b, impure\n>2\tbyte&0x20\t!0\n>>2\tbyte&0x10\t!0\t\t\\b, A_EXEC\n>2\tbyte&0x02\t!0\t\t\\b, A_PAL\n>2\tbyte&0x04\t!0\t\t\\b, A_NSYM\n>2\tbyte&0x08\t!0\t\t\\b, A_STAND\n>2\tbyte&0x40\t!0\t\t\\b, A_PURE\n>2\tbyte&0x80\t!0\t\t\\b, A_TOVLY\n>28     long            !0              \\b, not stripped\n>37\tstring\t\t.\t\t\n>>36\tstring\t\t>\\0\t\t\\b, libc version %s\n\n# 0\tlelong&0xFF00FFFF 0x10000301\tld86 I80386 executable\n# 0\tlelong&0xFF00FFFF 0xB000301\tld86 M68K executable\n# 0\tlelong&0xFF00FFFF 0xC000301\tld86 NS16K executable\n# 0\tlelong&0xFF00FFFF 0x17000301\tld86 SPARC executable\n\n# SYSLINUX boot logo files (from 'ppmtolss16' sources)\n# http://www.syslinux.org/wiki/index.php/SYSLINUX#Display_graphic_from_filename:\n# file extension .lss .16\n0\tlelong\t=0x1413f33d\t\tSYSLINUX' LSS16 image data\n# syslinux-4.05/mime/image/x-lss16.xml\n!:mime image/x-lss16\n>4\tleshort\tx\t\t\t\\b, width %d\n>6\tleshort\tx\t\t\t\\b, height %d\n\n0\tstring\tOOOM\t\t\tUser-Mode-Linux's Copy-On-Write disk image\n>4\tbelong\tx\t\t\tversion %d\n\n# SE Linux policy database\n# From: Mike Frysinger <vapier@gentoo.org>\n0\tlelong\t0xf97cff8c\t\tSE Linux policy\n>16\tlelong\tx\t\t\tv%d\n>20\tlelong\t1\t\t\tMLS\n>24\tlelong\tx\t\t\t%d symbols\n>28\tlelong\tx\t\t\t%d ocons\n\n# Linux Logical Volume Manager (LVM) \n# Emmanuel VARAGNAT <emmanuel.varagnat@guzu.net>\n#\n# System ID, UUID and volume group name are 128 bytes long\n# but they should never be full and initialized with zeros...\n#\n# LVM1\n#\n0x0\tstring\tHM\\001\t\tLVM1 (Linux Logical Volume Manager), version 1\n>0x12c\tstring\t>\\0\t\t, System ID: %s\n\n0x0\tstring\tHM\\002\t\tLVM1 (Linux Logical Volume Manager), version 2\n>0x12c\tstring\t>\\0\t\t, System ID: %s\n\n#  LVM2\n#\n# It seems that the label header can be in one the four first sector\n# of the disk... (from _find_labeller in lib/label/label.c of LVM2)\n#\n# 0x200 seems to be the common case\n\n0x218           string  LVM2\\ 001      LVM2 PV (Linux Logical Volume Manager)\n# read the offset to add to the start of the header, and the header\n# start in 0x200\n>&(&-12.l-0x21) byte    x\n# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)\n>>&0x0          string  >\\x2f          \\b, UUID: %.6s\n>>&0x6          string  >\\x2f          \\b-%.4s\n>>&0xa          string  >\\x2f          \\b-%.4s\n>>&0xe          string  >\\x2f          \\b-%.4s\n>>&0x12         string  >\\x2f          \\b-%.4s\n>>&0x16         string  >\\x2f          \\b-%.4s\n>>&0x1a         string  >\\x2f          \\b-%.6s\n>>&0x20         lequad  x              \\b, size: %lld\n\n0x018           string  LVM2\\ 001      LVM2 PV (Linux Logical Volume Manager)\n>&(&-12.l-0x21) byte    x\n# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)\n>>&0x0          string  >\\x2f          \\b, UUID: %.6s\n>>&0x6          string  >\\x2f          \\b-%.4s\n>>&0xa          string  >\\x2f          \\b-%.4s\n>>&0xe          string  >\\x2f          \\b-%.4s\n>>&0x12         string  >\\x2f          \\b-%.4s\n>>&0x16         string  >\\x2f          \\b-%.4s\n>>&0x1a         string  >\\x2f          \\b-%.6s\n>>&0x20         lequad  x              \\b, size: %lld\n\n0x418           string  LVM2\\ 001      LVM2 PV (Linux Logical Volume Manager)\n>&(&-12.l-0x21) byte    x\n# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)\n>>&0x0          string  >\\x2f          \\b, UUID: %.6s\n>>&0x6          string  >\\x2f          \\b-%.4s\n>>&0xa          string  >\\x2f          \\b-%.4s\n>>&0xe          string  >\\x2f          \\b-%.4s\n>>&0x12         string  >\\x2f          \\b-%.4s\n>>&0x16         string  >\\x2f          \\b-%.4s\n>>&0x1a         string  >\\x2f          \\b-%.6s\n>>&0x20         lequad  x              \\b, size: %lld\n\n0x618           string  LVM2\\ 001      LVM2 PV (Linux Logical Volume Manager)\n>&(&-12.l-0x21) byte    x              \n# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)\n>>&0x0          string  >\\x2f          \\b, UUID: %.6s\n>>&0x6          string  >\\x2f          \\b-%.4s\n>>&0xa          string  >\\x2f          \\b-%.4s\n>>&0xe          string  >\\x2f          \\b-%.4s\n>>&0x12         string  >\\x2f          \\b-%.4s\n>>&0x16         string  >\\x2f          \\b-%.4s\n>>&0x1a         string  >\\x2f          \\b-%.6s\n>>&0x20         lequad  x              \\b, size: %lld\n\n# LVM snapshot\n# from Jason Farrel\n0\tstring\tSnAp\tLVM Snapshot (CopyOnWrite store)\n>4\tlelong\t!0\t- valid,\n>4\tlelong\t0\t- invalid,\n>8\tlelong\tx\tversion %d,\n>12\tlelong\tx\tchunk_size %d\n\n# SE Linux policy database\n0\tlelong\t0xf97cff8c\t\tSE Linux policy\n>16\tlelong\tx\t\t\tv%d\n>20\tlelong\t1\t\t\tMLS\n>24\tlelong\tx\t\t\t%d symbols\n>28\tlelong\tx\t\t\t%d ocons\n\n# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec\n# Anthon van der Neut (anthon@mnt.org)\n0\tstring\tLUKS\\xba\\xbe\tLUKS encrypted file,\n>6\tbeshort x\t\tver %d\n>8\tstring\tx\t\t[%s,\n>40\tstring\tx\t\t%s,\n>72\tstring\tx\t\t%s]\n>168\tstring\tx\t\tUUID: %s\n\n\n# Summary: Xen saved domain file\n# Created by: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\tLinuxGuestRecord\tXen saved domain\n>20\tsearch/256\t(name\t\t\t\n>>&1\tstring\t\tx\t\t\t(name %s)\n\n# Type: Xen, the virtual machine monitor\n# From: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\tLinuxGuestRecord\tXen saved domain\n#>2\tregex\t\t\\(name\\ [^)]*\\)\t\t%s\n>20\tsearch/256\t(name\t\t\t(name\n>>&1\tstring\t\tx\t\t\t%s...)\n\n# Systemd journald files\n# See http://www.freedesktop.org/wiki/Software/systemd/journal-files/.\n# From: Zbigniew Jedrzejewski-Szmek <zbyszek@in.waw.pl>\n\n# check magic\n0\tstring\tLPKSHHRH\n# check that state is one of known values\n>16\t\tubyte&252\t0\n# check that each half of three unique id128s is non-zero\n>>24\t\tubequad\t\t>0\n>>>32\t\tubequad\t\t>0\n>>>>40\t\tubequad\t\t>0\n>>>>>48\t\tubequad\t\t>0\n>>>>>>56\tubequad\t\t>0\n>>>>>>>64\tubequad\t\t>0\tJournal file\n!:mime application/octet-stream\n# provide more info\n>>>>>>>>184\tleqdate\t\t0\tempty\n>>>>>>>>16\tubyte\t\t0\t\\b, offline\n>>>>>>>>16\tubyte\t\t1\t\\b, online\n>>>>>>>>16\tubyte\t\t2\t\\b, archived\n>>>>>>>>8\tulelong&1\t1\t\\b, sealed\n>>>>>>>>12\tulelong&1\t1\t\\b, compressed\n\n# BCache backing and cache devices\n# From: Gabriel de Perthuis <g2p.code@gmail.com>\n0x1008\t\tlequad\t\t8\n>0x1018\t\tstring\t\t\\xc6\\x85\\x73\\xf6\\x4e\\x1a\\x45\\xca\\x82\\x65\\xf5\\x7f\\x48\\xba\\x6d\\x81\tBCache\n>>0x1010\tulequad\t\t0\tcache device\n>>0x1010\tulequad\t\t1\tbacking device\n>>0x1010\tulequad\t\t3\tcache device\n>>0x1010\tulequad\t\t4\tbacking device\n>>0x1048\tstring\t\t>0\t\\b, label \"%.32s\"\n>>0x1028\tubelong\t\tx\t\\b, uuid %08x\n>>0x102c\tubeshort\tx\t\\b-%04x\n>>0x102e\tubeshort\tx\t\\b-%04x\n>>0x1030\tubeshort\tx\t\\b-%04x\n>>0x1032\tubelong\t\tx\t\\b-%08x\n>>0x1036\tubeshort\tx\t\\b%04x\n>>0x1038\tubelong\t\tx\t\\b, set uuid %08x\n>>0x103c\tubeshort\tx\t\\b-%04x\n>>0x103e\tubeshort\tx\t\\b-%04x\n>>0x1040\tubeshort\tx\t\\b-%04x\n>>0x1042\tubelong\t\tx\t\\b-%08x\n>>0x1046\tubeshort\tx\t\\b%04x\n\n# Linux device tree:\n# File format description can be found in the Linux kernel sources at \n# Documentation/devicetree/booting-without-of.txt\n# From Christoph Biedl\n0\t\tbelong\t\t0xd00dfeed\n# structure and strings must be within blob\n>&(8.L)\t\tbyte\t\tx\n>>&(12.L)\tbyte\t\tx\n>>>20\t\tbelong\t\t>1\tDevice Tree Blob version %d\n>>>>4\t\tbelong\t\tx\t\\b, size=%d\n>>>>20\t\tbelong\t\t>1\n>>>>>28\t\tbelong\t\tx\t\\b, boot CPU=%d\n>>>>20\t\tbelong\t\t>2\n>>>>>32\t\tbelong\t\tx\t\\b, string block size=%d\n>>>>20\t\tbelong\t\t>16\n>>>>>36\t\tbelong\t\tx\t\\b, DT structure block size=%d\n\n# glibc locale archive as defined in glibc locale/locarchive.h\n0\t\tlelong\t\t0xde020109\tlocale archive\n>24\t\tlelong\t\tx\t\t%d strings\n\n# Summary:     Database file for mlocate\n# Description: A database file as used by mlocate, a fast implementation\n#              of locate/updatedb. It uses merging to reuse the existing\n#              database and avoid rereading most of the filesystem. It's\n#              the default version of locate on Arch Linux (and others).\n# File path:   /var/lib/mlocate/mlocate.db by default (but configurable)\n# Site:        https://fedorahosted.org/mlocate/\n# Format docs: http://linux.die.net/man/5/mlocate.db\n# Type: mlocate database file\n# URL:  https://fedorahosted.org/mlocate/\n# From: Wander Nauta <info@wandernauta.nl>\n0\t\tstring\t\t\\0mlocate\tmlocate database\n>12\t\tbyte\t\tx\t\t\\b, version %d\n>13\t\tbyte\t\t1\t\t\\b, require visibility\n>16\t\tstring\t\tx\t\t\\b, root %s\n\n#------------------------------------------------------------------------------\n# $File$\n# lisp:  file(1) magic for lisp programs\n#\n# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)\n\n# updated by Joerg Jenderek\n# GRR: This lot is too weak\n#0\tstring\t;;\t\t\t\n# windows INF files often begin with semicolon and use CRLF as line end\n# lisp files are mainly created on unix system with LF as line end\n#>2\tsearch/4096\t!\\r\t\tLisp/Scheme program text\n#>2\tsearch/4096\t\\r\t\tWindows INF file\n\n0\tsearch/4096\t(setq\\ \t\t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defvar\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defparam\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defun\\  \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(autoload\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(custom-set-variables\\ \tLisp/Scheme program text\n!:mime\ttext/x-lisp\n\n# Emacs 18 - this is always correct, but not very magical.\n0\tstring\t\\012(\t\t\tEmacs v18 byte-compiled Lisp data\n!:mime\tapplication/x-elc\n# Emacs 19+ - ver. recognition added by Ian Springer\n# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs\n# - Chris Chittleborough <cchittleborough@yahoo.com.au>\n0\tstring\t;ELC\t\n>4\tbyte\t>18\t\t\t\n>4\tbyte    <32\t\t\tEmacs/XEmacs v%d byte-compiled Lisp data\n!:mime\tapplication/x-elc\t\t\n\n# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>\n0\tstring\t(SYSTEM::VERSION\\040'\tCLISP byte-compiled Lisp program (pre 2004-03-27)\n0\tstring\t(|SYSTEM|::|VERSION|\\040'\tCLISP byte-compiled Lisp program text\n\n0\tlong\t0x70768BD2\t\tCLISP memory image data\n0\tlong\t0xD28B7670\t\tCLISP memory image data, other endian\n\n#.com and .bin for MIT scheme \n0\tstring\t\\372\\372\\372\\372\tMIT scheme (library?)\n\n# From: David Allouche <david@allouche.net>\n0\tsearch/1\t\\<TeXmacs|\tTeXmacs document text\n!:mime\ttext/texmacs\n\n#------------------------------------------------------------------------------\n# $File: llvm,v 1.7 2013/01/08 01:34:38 christos Exp $\n# llvm:  file(1) magic for LLVM byte-codes\n# URL:  http://llvm.org/docs/BitCodeFormat.html\n# From: Al Stone <ahs3@fc.hp.com>\n\n0\tstring\tllvm\tLLVM byte-codes, uncompressed\n0\tstring\tllvc0\tLLVM byte-codes, null compression\n0\tstring\tllvc1\tLLVM byte-codes, gzip compression\n0\tstring\tllvc2\tLLVM byte-codes, bzip2 compression\n\n0\tlelong\t0x0b17c0de\tLLVM bitcode, wrapper\n# Are these Mach-O ABI values?  They appear to be.\n>16\tlelong\t0x01000007\tx86_64\n>16\tlelong\t0x00000007\ti386\n>16\tlelong\t0x00000012\tppc\n>16\tlelong\t0x01000012\tppc64\n>16\tlelong \t0x0000000c\tarm\n\n0\tstring\tBC\\xc0\\xde\tLLVM IR bitcode\n\n#------------------------------------------------------------------------------\n# $File: lua,v 1.5 2009/09/19 16:28:10 christos Exp $\n# lua:  file(1) magic for Lua scripting language\n# URL:  http://www.lua.org/\n# From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>\n\n# Lua scripts\n0\tsearch/1/w\t#!\\ /usr/bin/lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1/w\t#!\\ /usr/local/bin/lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1\t#!/usr/bin/env\\ lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1\t#!\\ /usr/bin/env\\ lua\tLua script text executable\n!:mime\ttext/x-lua\n\n# Lua bytecode\n0\tstring\t\t\\033Lua\t\t\tLua bytecode,\n>4\tbyte\t\t0x50\t\t\tversion 5.0\n>4\tbyte\t\t0x51\t\t\tversion 5.1\n>4\tbyte\t\t0x52\t\t\tversion 5.2\n\n#------------------------------------------------------------------------------\n# $File$\n# luks:  file(1) magic for Linux Unified Key Setup\n# URL:\thttp://luks.endorphin.org/spec\n# From:\tAnthon van der Neut <anthon@mnt.org>\n\n0\tstring\t\tLUKS\\xba\\xbe\tLUKS encrypted file,\n>6\tbeshort\t\tx\t\tver %d\n>8\tstring\t\tx\t\t[%s,\n>40\tstring\t\tx\t\t%s,\n>72\tstring\t\tx\t\t%s]\n>168\tstring\t\tx\t\tUUID: %s\n#------------------------------------------------------------------------------\n# $File$\n# make:  file(1) magic for M4 scripts\n#\n0\tregex\t\\^dnl\\ \t\tM4 macro processor script text\n!:mime\ttext/x-m4\n\n#------------------------------------------------------------\n# $File: mach,v 1.18 2014/03/29 15:40:34 christos Exp $\n# Mach has two magic numbers, 0xcafebabe and 0xfeedface.\n# Unfortunately the first, cafebabe, is shared with\n# Java ByteCode, so they are both handled in the file \"cafebabe\".\n# The \"feedface\" ones are handled herein.\n#------------------------------------------------------------\n# if set, it's for the 64-bit version of the architecture\n# yes, this is separate from the low-order magic number bit\n# it's also separate from the \"64-bit libraries\" bit in the\n# upper 8 bits of the CPU subtype\n\n0\tname\tmach-o-cpu\n>0\tbelong&0x01000000\t0\n#\n# 32-bit ABIs.\n#\n#\t\t\t\t1\tvax\n>>0\tbelong&0x00ffffff\t1\n>>>4\t\tbelong&0x00ffffff\t0\tvax\n>>>4\t\tbelong&0x00ffffff\t1\tvax11/780\n>>>4\t\tbelong&0x00ffffff\t2\tvax11/785\n>>>4\t\tbelong&0x00ffffff\t3\tvax11/750\n>>>4\t\tbelong&0x00ffffff\t4\tvax11/730\n>>>4\t\tbelong&0x00ffffff\t5\tuvaxI\n>>>4\t\tbelong&0x00ffffff\t6\tuvaxII\n>>>4\t\tbelong&0x00ffffff\t7\tvax8200\n>>>4\t\tbelong&0x00ffffff\t8\tvax8500\n>>>4\t\tbelong&0x00ffffff\t9\tvax8600\n>>>4\t\tbelong&0x00ffffff\t10\tvax8650\n>>>4\t\tbelong&0x00ffffff\t11\tvax8800\n>>>4\t\tbelong&0x00ffffff\t12\tuvaxIII\n>>>4\t\tbelong&0x00ffffff\t>12\tvax subarchitecture=%d\n>>0\tbelong&0x00ffffff\t2\tromp\n>>0\tbelong&0x00ffffff\t3\tarchitecture=3\n>>0\tbelong&0x00ffffff\t4\tns32032\n>>0\tbelong&0x00ffffff\t5\tns32332\n>>0\tbelong&0x00ffffff\t6\tm68k\n#\t\t\t\t7\tx86\n>>0\tbelong&0x00ffffff\t7\n>>>4\tbelong&0x0000000f\t3\t\ti386\n>>>4\tbelong&0x0000000f\t4\t\ti486\n>>>>4\tbelong&0x00fffff0\t0\n>>>>4\tbelong&0x00fffff0\t0x80\t\t\\bsx\n>>>4\tbelong&0x0000000f\t5\t\ti586\n>>>4\tbelong&0x0000000f\t6\n>>>>4\tbelong&0x00fffff0\t0\t\tp6\n>>>>4\tbelong&0x00fffff0\t0x10\t\tpentium_pro\n>>>>4\tbelong&0x00fffff0\t0x20\t\tpentium_2_m0x20\n>>>>4\tbelong&0x00fffff0\t0x30\t\tpentium_2_m3\n>>>>4\tbelong&0x00fffff0\t0x40\t\tpentium_2_m0x40\n>>>>4\tbelong&0x00fffff0\t0x50\t\tpentium_2_m5\n>>>>4\tbelong&0x00fffff0\t>0x50\t\tpentium_2_m0x%x\n>>>4\tbelong&0x0000000f\t7\t\tceleron\n>>>>4\tbelong&0x00fffff0\t0x00\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x10\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x20\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x30\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x40\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x50\t\t\\b_m0x%x\n>>>>4\tbelong&0x00fffff0\t0x60\n>>>>4\tbelong&0x00fffff0\t0x70\t\t\\b_mobile\n>>>>4\tbelong&0x00fffff0\t>0x70\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t8\t\tpentium_3\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t0x10\t\t\\b_m\n>>>>4\tbelong&0x00fffff0\t0x20\t\t\\b_xeon\n>>>>4\tbelong&0x00fffff0\t>0x20\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t9\t\tpentiumM\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t>0x00\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t10\t\tpentium_4\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t0x10\t\t\\b_m\n>>>>4\tbelong&0x00fffff0\t>0x10\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t11\t\titanium\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t0x10\t\t\\b_2\n>>>>4\tbelong&0x00fffff0\t>0x10\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t12\t\txeon\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t0x10\t\t\\b_mp\n>>>>4\tbelong&0x00fffff0\t>0x10\t\t\\b_m0x%x\n>>>4\tbelong&0x0000000f\t>12\t\tia32 family=%d\n>>>>4\tbelong&0x00fffff0\t0x00\n>>>>4\tbelong&0x00fffff0\t>0x00\t\tmodel=%x\n>>0\tbelong&0x00ffffff\t8\tmips\n>>>4\t\tbelong&0x00ffffff\t1\tR2300\n>>>4\t\tbelong&0x00ffffff\t2\tR2600\n>>>4\t\tbelong&0x00ffffff\t3\tR2800\n>>>4\t\tbelong&0x00ffffff\t4\tR2000a\n>>>4\t\tbelong&0x00ffffff\t5\tR2000\n>>>4\t\tbelong&0x00ffffff\t6\tR3000a\n>>>4\t\tbelong&0x00ffffff\t7\tR3000\n>>>4\t\tbelong&0x00ffffff\t>7\tsubarchitecture=%d\n>>0\tbelong&0x00ffffff\t9\tns32532\n>>0\tbelong&0x00ffffff\t10\tmc98000\n>>0\tbelong&0x00ffffff\t11\thppa\n>>>4\t\tbelong&0x00ffffff\t0\t7100\n>>>4\t\tbelong&0x00ffffff\t1\t7100LC\n>>>4\t\tbelong&0x00ffffff\t>1\tsubarchitecture=%d\n>>0\tbelong&0x00ffffff\t12\tarm\n>>>4\t\tbelong&0x00ffffff\t0\n>>>4\t\tbelong&0x00ffffff\t1\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t2\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t3\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t4\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t5\t\\b_v4t\n>>>4\t\tbelong&0x00ffffff\t6\t\\b_v6\n>>>4\t\tbelong&0x00ffffff\t7\t\\b_v5tej\n>>>4\t\tbelong&0x00ffffff\t8\t\\b_xscale\n>>>4\t\tbelong&0x00ffffff\t9\t\\b_v7\n>>>4\t\tbelong&0x00ffffff\t10\t\\b_v7f\n>>>4\t\tbelong&0x00ffffff\t11\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t12\t\\b_v7k\n>>>4\t\tbelong&0x00ffffff\t>12\tsubarchitecture=%d\n#\t\t\t\t13\tm88k\n>>0\tbelong&0x00ffffff\t13\n>>>4\t\tbelong&0x00ffffff\t0\tmc88000\n>>>4\t\tbelong&0x00ffffff\t1\tmc88100\n>>>4\t\tbelong&0x00ffffff\t2\tmc88110\n>>>4\t\tbelong&0x00ffffff\t>2\tmc88000 subarchitecture=%d\n>>0\tbelong&0x00ffffff\t14\tSPARC\n>>0\tbelong&0x00ffffff\t15\ti860g\n>>0\tbelong&0x00ffffff\t16\talpha\n>>0\tbelong&0x00ffffff\t17\trs6000\n>>0\tbelong&0x00ffffff\t18\tppc\n>>>4\t\tbelong&0x00ffffff\t0\n>>>4\t\tbelong&0x00ffffff\t1\t\\b_601\n>>>4\t\tbelong&0x00ffffff\t2\t\\b_602\n>>>4\t\tbelong&0x00ffffff\t3\t\\b_603\n>>>4\t\tbelong&0x00ffffff\t4\t\\b_603e\n>>>4\t\tbelong&0x00ffffff\t5\t\\b_603ev\n>>>4\t\tbelong&0x00ffffff\t6\t\\b_604\n>>>4\t\tbelong&0x00ffffff\t7\t\\b_604e\n>>>4\t\tbelong&0x00ffffff\t8\t\\b_620\n>>>4\t\tbelong&0x00ffffff\t9\t\\b_650\n>>>4\t\tbelong&0x00ffffff\t10\t\\b_7400\n>>>4\t\tbelong&0x00ffffff\t11\t\\b_7450\n>>>4\t\tbelong&0x00ffffff\t100\t\\b_970\n>>>4\t\tbelong&0x00ffffff\t>100\tsubarchitecture=%d\n>>0\tbelong&0x00ffffff\t>18\tarchitecture=%d\n>0\tbelong&0x01000000\t0x01000000\n#\n# 64-bit ABIs.\n#\n>>0\tbelong&0x00ffffff\t0\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t1\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t2\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t3\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t4\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t5\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t6\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t7\tx86_64\n>>>4\t\tbelong&0x00ffffff\t0\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t1\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t2\tsubarchitecture=%d\n>>>4\t\tbelong&0x00ffffff\t3\n>>>4\t\tbelong&0x00ffffff\t4\t\\b_arch1\n>>>4\t\tbelong&0x00ffffff\t>4\tsubarchitecture=%d\n>>0\tbelong&0x00ffffff\t8\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t9\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t10\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t11\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t12\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t13\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t14\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t15\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t16\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t17\t64-bit architecture=%d\n>>0\tbelong&0x00ffffff\t18\tppc64\n>>>4\t\tbelong&0x00ffffff\t0\n>>>4\t\tbelong&0x00ffffff\t1\t\t\\b_601\n>>>4\t\tbelong&0x00ffffff\t2\t\t\\b_602\n>>>4\t\tbelong&0x00ffffff\t3\t\t\\b_603\n>>>4\t\tbelong&0x00ffffff\t4\t\t\\b_603e\n>>>4\t\tbelong&0x00ffffff\t5\t\t\\b_603ev\n>>>4\t\tbelong&0x00ffffff\t6\t\t\\b_604\n>>>4\t\tbelong&0x00ffffff\t7\t\t\\b_604e\n>>>4\t\tbelong&0x00ffffff\t8\t\t\\b_620\n>>>4\t\tbelong&0x00ffffff\t9\t\t\\b_650\n>>>4\t\tbelong&0x00ffffff\t10\t\t\\b_7400\n>>>4\t\tbelong&0x00ffffff\t11\t\t\\b_7450\n>>>4\t\tbelong&0x00ffffff\t100\t\t\\b_970\n>>>4\t\tbelong&0x00ffffff\t>100\t\tsubarchitecture=%d\n>>0\tbelong&0x00ffffff\t>18\t64-bit architecture=%d\n\n\n0\tname\t\tmach-o-be\n>0\tbyte\t\t0xcf\t\t64-bit\n>4\tuse\t\tmach-o-cpu\n>12\tbelong\t\t1\t\tobject\n>12\tbelong\t\t2\t\texecutable\n>12\tbelong\t\t3\t\tfixed virtual memory shared library\n>12\tbelong\t\t4\t\tcore\n>12\tbelong\t\t5\t\tpreload executable\n>12\tbelong\t\t6\t\tdynamically linked shared library\n>12\tbelong\t\t7\t\tdynamic linker\n>12\tbelong\t\t8\t\tbundle\n>12\tbelong\t\t9\t\tdynamically linked shared library stub\n>12\tbelong\t\t10\t\tdSYM companion file\n>12\tbelong\t\t11\t\tkext bundle\n>12\tbelong\t\t>11\n>>12\tbelong\t\tx\t\tfiletype=%d\n\n#\n0\tlelong&0xfffffffe\t0xfeedface\tMach-O\n!:strength +1\n>0\tuse\t\\^mach-o-be\n\n0\tbelong&0xfffffffe\t0xfeedface\tMach-O\n!:strength +1\n>0\tuse\tmach-o-be\n\n#------------------------------------------------------------------------------\n# $File: macintosh,v 1.24 2014/08/30 08:34:17 christos Exp $\n# macintosh description\n#\n# BinHex is the Macintosh ASCII-encoded file format (see also \"apple\")\n# Daniel Quinlan, quinlan@yggdrasil.com\n11\tstring\tmust\\ be\\ converted\\ with\\ BinHex\tBinHex binary text\n!:mime\tapplication/mac-binhex40\n>41\tstring\tx\t\t\t\t\t\\b, version %.3s\n\n# Stuffit archives are the de facto standard of compression for Macintosh\n# files obtained from most archives. (franklsm@tuns.ca)\n0\tstring\t\tSIT!\t\t\tStuffIt Archive (data)\n!:mime\tapplication/x-stuffit\n!:apple\tSIT!SIT!\n>2\tstring\t\tx\t\t\t: %s\n0\tstring\t\tSITD\t\t\tStuffIt Deluxe (data)\n>2\tstring\t\tx\t\t\t: %s\n0\tstring\t\tSeg\t\t\tStuffIt Deluxe Segment (data)\n>2\tstring\t\tx\t\t\t: %s\n\n# Newer StuffIt archives (grant@netbsd.org)\n0\tstring\t\tStuffIt\t\t\tStuffIt Archive\n!:mime\tapplication/x-stuffit\n!:apple\tSIT!SIT!\n#>162\tstring\t\t>0\t\t\t: %s\n\n# Macintosh Applications and Installation binaries (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tAPPL\t\t\tMacintosh Application (data)\n#>2\tstring\t\tx\t\t\t\\b: %s\n\n# Macintosh System files (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tzsys\t\t\tMacintosh System File (data)\n#0\tstring\t\tFNDR\t\t\tMacintosh Finder (data)\n#0\tstring\t\tlibr\t\t\tMacintosh Library (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tshlb\t\t\tMacintosh Shared Library (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tcdev\t\t\tMacintosh Control Panel (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tINIT\t\t\tMacintosh Extension (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tFFIL\t\t\tMacintosh Truetype Font (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tLWFN\t\t\tMacintosh Postscript Font (data)\n#>2\tstring\t\tx\t\t\t: %s\n\n# Additional Macintosh Files (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tPACT\t\t\tMacintosh Compact Pro Archive (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tttro\t\t\tMacintosh TeachText File (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tTEXT\t\t\tMacintosh TeachText File (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tPDF\t\t\tMacintosh PDF File (data)\n#>2\tstring\t\tx\t\t\t: %s\n\n# MacBinary format (Eric Fischer, enf@pobox.com)\n#\n# Unfortunately MacBinary doesn't really have a magic number prior\n# to the MacBinary III format.  The checksum is really the way to\n# do it, but the magic file format isn't up to the challenge.\n#\n# 0\tbyte\t\t0\n# 1\tbyte\t\t\t\t# filename length\n# 2\tstring\t\t\t\t# filename\n# 65    string\t\t\t\t# file type\n# 69\tstring\t\t\t\t# file creator\n# 73\tbyte\t\t\t\t# Finder flags\n# 74\tbyte\t\t0\n# 75\tbeshort\t\t\t\t# vertical posn in window\n# 77\tbeshort\t\t\t\t# horiz posn in window\n# 79\tbeshort\t\t\t\t# window or folder ID\n# 81    byte\t\t\t\t# protected?\n# 82\tbyte\t\t0\n# 83\tbelong\t\t\t\t# length of data segment\n# 87\tbelong\t\t\t\t# length of resource segment\n# 91\tbelong\t\t\t\t# file creation date\n# 95\tbelong\t\t\t\t# file modification date\n# 99\tbeshort\t\t\t\t# length of comment after resource\n# 101\tbyte\t\t\t\t# new Finder flags\n# 102\tstring\t\tmBIN\t\t# (only in MacBinary III)\n# 106\tbyte\t\t\t\t# char. code of file name\n# 107\tbyte\t\t\t\t# still more Finder flags\n# 116\tbelong\t\t\t\t# total file length\n# 120\tbeshort\t\t\t\t# length of add'l header\n# 122\tbyte\t\t129\t\t# for MacBinary II\n# 122\tbyte\t\t130\t\t# for MacBinary III\n# 123\tbyte\t\t129\t\t# minimum version that can read fmt\n# 124\tbeshort\t\t\t\t# checksum\n#\n# This attempts to use the version numbers as a magic number, requiring\n# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second\n# be 0x81.  This works for the files I have, but maybe not for everyone's.\n\n# Unfortunately, this magic is quite weak - MPi\n#122\tbeshort&0xFCFF\t0x8081\t\tMacintosh MacBinary data\n\n# MacBinary I doesn't have the version number field at all, but MacBinary II\n# has been in use since 1987 so I hope there aren't many really old files\n# floating around that this will miss.  The original spec calls for using\n# the nulls in 0, 74, and 82 as the magic number.\n#\n# Another possibility, that would also work for MacBinary I, is to use\n# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will\n# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,\n# and that 74 will be 0.  So something like\n# \n# 71 \tbelong&0x80804EFF 0x00000000 \tMacintosh MacBinary data\n# \n# >73\tbyte&0x01\t0x01\t\t\\b, inited\n# >73\tbyte&0x02\t0x02\t\t\\b, changed\n# >73\tbyte&0x04\t0x04\t\t\\b, busy\n# >73\tbyte&0x08\t0x08\t\t\\b, bozo\n# >73\tbyte&0x10\t0x10\t\t\\b, system\n# >73\tbyte&0x10\t0x20\t\t\\b, bundle\n# >73\tbyte&0x10\t0x40\t\t\\b, invisible\n# >73\tbyte&0x10\t0x80\t\t\\b, locked\n\n#>65\tstring\t\tx\t\t\\b, type \"%4.4s\"\n\n#>65\tstring\t\t8BIM\t\t(PhotoShop)\n#>65\tstring\t\tALB3\t\t(PageMaker 3)\n#>65\tstring\t\tALB4\t\t(PageMaker 4)\n#>65\tstring\t\tALT3\t\t(PageMaker 3)\n#>65\tstring\t\tAPPL\t\t(application)\n#>65\tstring\t\tAWWP\t\t(AppleWorks word processor)\n#>65\tstring\t\tCIRC\t\t(simulated circuit)\n#>65\tstring\t\tDRWG\t\t(MacDraw)\n#>65\tstring\t\tEPSF\t\t(Encapsulated PostScript)\n#>65\tstring\t\tFFIL\t\t(font suitcase)\n#>65\tstring\t\tFKEY\t\t(function key)\n#>65\tstring\t\tFNDR\t\t(Macintosh Finder)\n#>65\tstring\t\tGIFf\t\t(GIF image)\n#>65\tstring\t\tGzip\t\t(GNU gzip)\n#>65\tstring\t\tINIT\t\t(system extension)\n#>65\tstring\t\tLIB\\ \t\t(library)\n#>65\tstring\t\tLWFN\t\t(PostScript font)\n#>65\tstring\t\tMSBC\t\t(Microsoft BASIC)\n#>65\tstring\t\tPACT\t\t(Compact Pro archive)\n#>65\tstring\t\tPDF\\ \t\t(Portable Document Format)\n#>65\tstring\t\tPICT\t\t(picture)\n#>65\tstring\t\tPNTG\t\t(MacPaint picture)\n#>65\tstring\t\tPREF\t\t(preferences)\n#>65\tstring\t\tPROJ\t\t(Think C project)\n#>65\tstring\t\tQPRJ\t\t(Think Pascal project)\n#>65\tstring\t\tSCFL\t\t(Defender scores)\n#>65\tstring\t\tSCRN\t\t(startup screen)\n#>65\tstring\t\tSITD\t\t(StuffIt Deluxe)\n#>65\tstring\t\tSPn3\t\t(SuperPaint)\n#>65\tstring\t\tSTAK\t\t(HyperCard stack)\n#>65\tstring\t\tSeg\\ \t\t(StuffIt segment)\n#>65\tstring\t\tTARF\t\t(Unix tar archive)\n#>65\tstring\t\tTEXT\t\t(ASCII)\n#>65\tstring\t\tTIFF\t\t(TIFF image)\n#>65\tstring\t\tTOVF\t\t(Eudora table of contents)\n#>65\tstring\t\tWDBN\t\t(Microsoft Word word processor)\n#>65\tstring\t\tWORD\t\t(MacWrite word processor)\n#>65\tstring\t\tXLS\\ \t\t(Microsoft Excel)\n#>65\tstring\t\tZIVM\t\t(compress (.Z))\n#>65\tstring\t\tZSYS\t\t(Pre-System 7 system file)\n#>65\tstring\t\tacf3\t\t(Aldus FreeHand)\n#>65\tstring\t\tcdev\t\t(control panel)\n#>65\tstring\t\tdfil\t\t(Desk Accessory suitcase)\n#>65\tstring\t\tlibr\t\t(library)\n#>65\tstring\t\tnX^d\t\t(WriteNow word processor)\n#>65\tstring\t\tnX^w\t\t(WriteNow dictionary)\n#>65\tstring\t\trsrc\t\t(resource)\n#>65\tstring\t\tscbk\t\t(Scrapbook)\n#>65\tstring\t\tshlb\t\t(shared library)\n#>65\tstring\t\tttro\t\t(SimpleText read-only)\n#>65\tstring\t\tzsys\t\t(system file)\n\n#>69\tstring\t\tx\t\t\\b, creator \"%4.4s\"\n\n# Somewhere, Apple has a repository of registered Creator IDs.  These are\n# just the ones that I happened to have files from and was able to identify.\n\n#>69\tstring\t\t8BIM\t\t(Adobe Photoshop)\n#>69\tstring\t\tALD3\t\t(PageMaker 3)\n#>69\tstring\t\tALD4\t\t(PageMaker 4)\n#>69\tstring\t\tALFA\t\t(Alpha editor)\n#>69\tstring\t\tAPLS\t\t(Apple Scanner)\n#>69\tstring\t\tAPSC\t\t(Apple Scanner)\n#>69\tstring\t\tBRKL\t\t(Brickles)\n#>69\tstring\t\tBTFT\t\t(BitFont)\n#>69\tstring\t\tCCL2 \t\t(Common Lisp 2)\n#>69\tstring\t\tCCL\\ \t\t(Common Lisp)\n#>69\tstring\t\tCDmo\t\t(The Talking Moose)\n#>69\tstring\t\tCPCT\t\t(Compact Pro)\n#>69\tstring\t\tCSOm\t\t(Eudora)\n#>69\tstring\t\tDMOV\t\t(Font/DA Mover)\n#>69\tstring\t\tDSIM\t\t(DigSim)\n#>69\tstring\t\tEDIT\t\t(Macintosh Edit)\n#>69\tstring\t\tERIK\t\t(Macintosh Finder)\n#>69\tstring\t\tEXTR\t\t(self-extracting archive)\n#>69\tstring\t\tGzip\t\t(GNU gzip)\n#>69\tstring\t\tKAHL\t\t(Think C)\n#>69\tstring\t\tLWFU\t\t(LaserWriter Utility)\n#>69\tstring\t\tLZIV\t\t(compress)\n#>69\tstring\t\tMACA\t\t(MacWrite)\n#>69\tstring\t\tMACS\t\t(Macintosh operating system)\n#>69\tstring\t\tMAcK\t\t(MacKnowledge terminal emulator)\n#>69\tstring\t\tMLND\t\t(Defender)\n#>69\tstring\t\tMPNT\t\t(MacPaint)\n#>69\tstring\t\tMSBB\t\t(Microsoft BASIC (binary))\n#>69\tstring\t\tMSWD\t\t(Microsoft Word)\n#>69\tstring\t\tNCSA\t\t(NCSA Telnet)\n#>69\tstring\t\tPJMM\t\t(Think Pascal)\n#>69\tstring\t\tPSAL\t\t(Hunt the Wumpus)\n#>69\tstring\t\tPSI2\t\t(Apple File Exchange)\n#>69\tstring\t\tR*ch\t\t(BBEdit)\n#>69\tstring\t\tRMKR\t\t(Resource Maker)\n#>69\tstring\t\tRSED\t\t(Resource Editor)\n#>69\tstring\t\tRich\t\t(BBEdit)\n#>69\tstring\t\tSIT!\t\t(StuffIt)\n#>69\tstring\t\tSPNT\t\t(SuperPaint)\n#>69\tstring\t\tUnix\t\t(NeXT Mac filesystem)\n#>69\tstring\t\tVIM!\t\t(Vim editor)\n#>69\tstring\t\tWILD\t\t(HyperCard)\n#>69\tstring\t\tXCEL\t\t(Microsoft Excel)\n#>69\tstring\t\taCa2\t\t(Fontographer)\n#>69\tstring\t\taca3\t\t(Aldus FreeHand)\n#>69\tstring\t\tdosa\t\t(Macintosh MS-DOS file system)\n#>69\tstring\t\tmovr\t\t(Font/DA Mover)\n#>69\tstring\t\tnX^n\t\t(WriteNow)\n#>69\tstring\t\tpdos\t\t(Apple ProDOS file system)\n#>69\tstring\t\tscbk\t\t(Scrapbook)\n#>69\tstring\t\tttxt\t\t(SimpleText)\n#>69\tstring\t\tufox\t\t(Foreign File Access)\n\n# Just in case...\n\n102\tstring\t\tmBIN\t\tMacBinary III data with surprising version number\n\n# sas magic from Bruce Foster (bef@nwu.edu)\n#\n#0\tstring\t\tSAS\t\tSAS\n#>8\tstring\t\tx\t\t%s\n0\tstring\t\tSAS\t\tSAS\n>24\tstring\t\tDATA\t\tdata file\n>24\tstring\t\tCATALOG\t\tcatalog\n>24\tstring\t\tINDEX\t\tdata file index\n>24\tstring\t\tVIEW\t\tdata view\n# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)\n#\n0x54    string          SAS             SAS 7+\n>0x9C   string          DATA            data file\n>0x9C   string          CATALOG         catalog\n>0x9C   string          INDEX           data file index\n>0x9C   string          VIEW            data view\n\n# spss magic for SPSS system and portable files, \n#\t from Bruce Foster (bef@nwu.edu).\n\n0\tlong\t\t0xc1e2c3c9\tSPSS Portable File\n>40\tstring \t\tx\t\t%s\n\n0\tstring\t\t$FL2\t\tSPSS System File\n>24\tstring\t\tx\t\t%s\n\n0\tstring\t\t$FL3\t\tSPSS System File\n>24\tstring\t\tx\t\t%s\n\n# Macintosh filesystem data\n# From \"Tom N Harris\" <telliamed@mac.com>\n# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>\n# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these\n# entries depend on the data arithmetic added after v.35\n# There's also some Pascal strings in here, ditto...\n\n# The boot block signature, according to IM:Files, is \n# \"for HFS volumes, this field always contains the value 0x4C4B.\"\n# But if this is true for MFS or HFS+ volumes, I don't know.\n# Alternatively, the boot block is supposed to be zeroed if it's\n# unused, so a simply >0 should suffice.\n\n0x400\tbeshort\t\t\t0xD2D7\t\tMacintosh MFS data\n>0\tbeshort\t\t\t0x4C4B\t\t(bootable)\n>0x40a\tbeshort\t\t\t&0x8000\t\t(locked)\n>0x402\tbeldate-0x7C25B080\tx\t\tcreated: %s,\n>0x406\tbeldate-0x7C25B080\t>0\t\tlast backup: %s,\n>0x414\tbelong\t\t\tx\t\tblock size: %d,\n>0x412\tbeshort\t\t\tx\t\tnumber of blocks: %d,\n>0x424\tpstring\t\t\tx\t\tvolume name: %s\n\n# *.hfs updated by Joerg Jenderek\n# http://en.wikipedia.org/wiki/Hierarchical_File_System\n# \"BD\" gives many false positives\n0x400\tbeshort\t\t\t0x4244\t\t\n# ftp://ftp.mars.org/pub/hfs/hfsutils-3.2.6.tar.gz/hfsutils-3.2.6/libhfs/apple.h\n# first block of volume bit map (always 3)\n>0x40e\tubeshort\t\t0x0003\t\t\n# maximal length of volume name is 27\n>>0x424\t\tubyte\t\t\t<28\tMacintosh HFS data\n#!:mime\tapplication/octet-stream\n# these mime and apple types are not sure\n!:mime\tapplication/x-apple-diskimage\n#!:apple\thfsdINIT\n#!:apple\tMACSdisk\n>>>0\t\tbeshort\t\t\t0x4C4B\t(bootable)\n#>>>0\t\tbeshort\t\t\t0x0000\t(not bootable)\n>>>0x40a\tbeshort\t\t\t&0x8000\t(locked)\n>>>0x40a\tbeshort\t\t\t^0x0100\t(mounted)\n>>>0x40a\tbeshort\t\t\t&0x0200\t(spared blocks)\n>>>0x40a\tbeshort\t\t\t&0x0800\t(unclean)\n>>>0x47C\tbeshort\t\t\t0x482B\t(Embedded HFS+ Volume)\n# http://www.epochconverter.com/\n# 0x7C245F00 seconds\t~ 2082758400\t~ 01 Jan 2036 00:00:00\t~ 66 years to 1970\n# 0x7C25B080 seconds\t~ 2082844800\t~ 02 Jan 2036 00:00:00\n# construct not working\n#>>>0x402\tbeldate-0x7C25B080\tx\tcreated: %s,\n#>>>0x406\tbeldate-0x7C25B080\tx\tlast modified: %s,\n#>>>0x440\tbeldate-0x7C25B080\t>0\tlast backup: %s,\n# found block sizes 200h,1200h,2800h\n>>>0x414\tbelong\t\t\tx\tblock size: %d,\n>>>0x412\tbeshort\t\t\tx\tnumber of blocks: %d,\n>>>0x424\tpstring\t\t\tx\tvolume name: %s\n\n0x400\tbeshort\t\t\t0x482B\t\tMacintosh HFS Extended\n>&0\tbeshort\t\t\tx\t\tversion %d data\n>0\tbeshort\t\t\t0x4C4B\t\t(bootable)\n>0x404\tbelong\t\t\t^0x00000100\t(mounted)\n>&2\tbelong\t\t\t&0x00000200\t(spared blocks)\n>&2\tbelong\t\t\t&0x00000800\t(unclean)\n>&2\tbelong\t\t\t&0x00008000\t(locked)\n>&6\tstring\t\t\tx\t\tlast mounted by: '%.4s',\n# really, that should be treated as a belong and we print a string\n# based on the value. TN1150 only mentions '8.10' for \"MacOS 8.1\"\n>&14\tbeldate-0x7C25B080\tx\t\tcreated: %s,\n# only the creation date is local time, all other timestamps in HFS+ are UTC.\n>&18\tbedate-0x7C25B080\tx\t\tlast modified: %s,\n>&22\tbedate-0x7C25B080\t>0\t\tlast backup: %s,\n>&26\tbedate-0x7C25B080\t>0\t\tlast checked: %s,\n>&38\tbelong\t\t\tx\t\tblock size: %d,\n>&42\tbelong\t\t\tx\t\tnumber of blocks: %d,\n>&46\tbelong\t\t\tx\t\tfree blocks: %d\n\n## AFAIK, only the signature is different\n# same as Apple Partition Map\n# GRR: This magic is too weak, it is just \"TS\"\n#0x200\t\tbeshort\t\t0x5453\t\tApple Old Partition data\n#>0x2\t\tbeshort\t\tx\t\tblock size: %d,\n#>0x230\t\tstring\t\tx\t\tfirst type: %s,\n#>0x210\t\tstring\t\tx\t\tname: %s,\n#>0x254\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>0x400\t\tbeshort\t\t0x504D\t\t\n#>>0x430\t\tstring\t\tx\t\tsecond type: %s,\n#>>0x410\t\tstring\t\tx\t\tname: %s,\n#>>0x454\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>0x800\t\tbeshort\t\t0x504D\t\t\n#>>>0x830\tstring\t\tx\t\tthird type: %s,\n#>>>0x810\tstring\t\tx\t\tname: %s,\n#>>>0x854\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>>0xa00\tbeshort\t\t0x504D\t\t\n#>>>>0xa30\tstring\t\tx\t\tfourth type: %s,\n#>>>>0xa10\tstring\t\tx\t\tname: %s,\n#>>>>0xa54\tbelong\t\tx\t\tnumber of blocks: %d\n\n# From: Remi Mommsen <mommsen@slac.stanford.edu>\n0\t\tstring\t\tBOMStore\tMac OS X bill of materials (BOM) file\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://en.wikipedia.org/wiki/Datafork_TrueType\n# Derived from the 'fondu' and 'ufond' source code (fondu.sf.net). 'sfnt' is\n# TrueType; 'POST' is PostScript. 'FONT' and 'NFNT' sometimes appear, but I\n# don't know what they mean.\n0\tbelong\t0x100\n>(0x4.L+24)\tbeshort\tx\n>>&4\tbelong\t0x73666e74\tMac OSX datafork font, TrueType\n>>&4\tbelong\t0x464f4e54\tMac OSX datafork font, 'FONT'\n>>&4\tbelong\t0x4e464e54\tMac OSX datafork font, 'NFNT'\n>>&4\tbelong\t0x504f5354\tMac OSX datafork font, PostScript\n\n#------------------------------------------------------------------------------\n# $File: cups,v 1.2 2012/11/02 21:50:29 christos Exp $\n# MacOS files\n#\n\n0\tstring\t\tbook\\0\\0\\0\\0mark\\0\\0\\0\\0\tMacOS Alias file\n\n#------------------------------------------------------------------------------\n# $File: magic,v 1.9 2009/09/19 16:28:10 christos Exp $\n# magic:  file(1) magic for magic files\n#\n0\tstring/t\t\t#\\ Magic\tmagic text file for file(1) cmd\n0\tlelong\t\t0xF11E041C\tmagic binary file for file(1) cmd\n>4\tlelong\t\tx\t\t(version %d) (little endian)\n0\tbelong\t\t0xF11E041C\tmagic binary file for file(1) cmd\n>4\tbelong\t\tx\t\t(version %d) (big endian)\n#------------------------------------------------------------------------------\n# $File: mail.news,v 1.21 2012/06/21 01:44:52 christos Exp $\n# mail.news:  file(1) magic for mail and news\n#\n# Unfortunately, saved netnews also has From line added in some news software.\n#0\tstring\t\tFrom \t\tmail text\n0\tstring/t\t\tRelay-Version: \told news text\n!:mime\tmessage/rfc822\n0\tstring/t\t\t#!\\ rnews\tbatched news text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tN#!\\ rnews\tmailed, batched news text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tForward\\ to \tmail forwarding text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tPipe\\ to \tmail piping text\n!:mime\tmessage/rfc822\n0\tstring/tc\t\tdelivered-to:\tSMTP mail text\n!:mime\tmessage/rfc822\n0\tstring/tc\t\treturn-path:\tSMTP mail text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tPath:\t\tnews text\n!:mime\tmessage/news\n0\tstring/t\t\tXref:\t\tnews text\n!:mime\tmessage/news\n0\tstring/t\t\tFrom:\t\tnews or mail text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tArticle \tsaved news text\n!:mime\tmessage/news\n0\tstring/t\t\tBABYL\t\tEmacs RMAIL text\n0\tstring/t\t\tReceived:\tRFC 822 mail text\n!:mime\tmessage/rfc822\n0\tstring/t\t\tMIME-Version:\tMIME entity text\n#0\tstring/t\t\tContent-\tMIME entity text\n\n# TNEF files...\n0\tlelong\t\t0x223E9F78\tTransport Neutral Encapsulation Format\n!:mime\tapplication/vnd.ms-tnef\n\n# From: Kevin Sullivan <ksulliva@psc.edu>\n0\tstring\t\t*mbx*\t\tMBX mail folder\n\n# From: Simon Matter <simon.matter@invoca.ch>\n0\tstring\t\t\\241\\002\\213\\015skiplist\\ file\\0\\0\\0\tCyrus skiplist DB\n\n# JAM(mbp) Fidonet message area databases\n# JHR file\n0\tstring\tJAM\\0\t\t\tJAM message area header file\n>12\tleshort >0\t\t\t(%d messages)\n\n# Squish Fidonet message area databases\n# SQD file (requires at least one message in the area)\n# XXX: Weak magic\n#256\tleshort\t0xAFAE4453\t\tSquish message area data file\n#>4\tleshort\t>0\t\t\t(%d messages)\n\n#0\tstring\t\t\\<!--\\ MHonArc\t\ttext/html; x-type=mhonarc\n\n# Cyrus: file(1) magic for compiled Cyrus sieve scripts\n# URL: http://www.cyrusimap.org/docs/cyrus-imapd/2.4.6/internal/bytecode.php\n# URL: http://git.cyrusimap.org/cyrus-imapd/tree/sieve/bytecode.h?h=master\n# From: Philipp Hahn <hahn@univention.de>\n\n# Compiled Cyrus sieve script\n0       string CyrSBytecode     Cyrus sieve bytecode data,\n>12     belong =1       version 1, big-endian\n>12     lelong =1       version 1, little-endian\n>12     belong x        version %d, network-endian\n#------------------------------------------------------------------------------\n# $File$\n# make:  file(1) magic for makefiles\n#\n0\tregex\t\\^CFLAGS\tmakefile script text\n!:mime\ttext/x-makefile\n0\tregex\t\\^LDFLAGS\tmakefile script text\n!:mime\ttext/x-makefile\n0\tregex\t\\^all:\tmakefile script text\n!:mime\ttext/x-makefile\n0\tregex\t\\^.PRECIOUS\tmakefile script text\n!:mime\ttext/x-makefile\n\n0\tregex\t\\^SUBDIRS\tautomake makefile script text\n!:mime\ttext/x-makefile\n\n\n#------------------------------------------------------------------------------\n# $File: msdos,v 1.99 2014/06/03 01:40:24 christos Exp $\n# map:  file(1) magic for Map data\n#\n\n# Garmin .FIT files http://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml\n8\tstring\t.FIT\t\tFIT Map data\n>15\tbyte\t0\n>>35\tbelong\tx\t\t\\b, unit id %d\n# 20 years after unix epoch\n>>39\tlelong\tx\t\t\\b, serial %u\n>>43\tledate/631152000 x\t\\b, %s\n\n>>47\tleshort x\t\t\\b, manufacturer %d\n>>47\tleshort\t1\t\t\\b (garmin)\n>>49\tleshort x\t\t\\b, product %d\n>>53\tbyte\tx\t\t\\b, type %d\n>>53\tbyte\t1\t\t\\b (Device)\n>>53\tbyte\t2\t\t\\b (Settings)\n>>53\tbyte\t3\t\t\\b (Sports/Cycling)\n>>53\tbyte\t4\t\t\\b (Activity)\n>>53\tbyte\t8\t\t\\b (Elevations)\n>>53\tbyte\t10\t\t\\b (Totals)\n\n#------------------------------------------------------------------------------\n# $File: maple,v 1.6 2009/09/19 16:28:10 christos Exp $\n# maple:  file(1) magic for maple files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Maple V release 4, a multi-purpose math program\n#\n\n# maple library .lib\n0\tstring\t\\000MVR4\\nI\tMapleVr4 library\n\n# .ind\n# no magic for these :-(\n# they are compiled indexes for maple files\n\n# .hdb \n0\tstring\t\\000\\004\\000\\000\tMaple help database\n\n# .mhp\n# this has the form <PACKAGE=name>\n0\tstring\t\\<PACKAGE=\tMaple help file\n0\tstring\t\\<HELP\\ NAME=\tMaple help file\n0\tstring\t\\n\\<HELP\\ NAME=\tMaple help file with extra carriage return at start (yuck)\n#0\tstring\t#\\ Newton\tMaple help file, old style\n0\tstring\t#\\ daub\tMaple help file, old style\n#0\tstring\t#===========\tMaple help file, old style\n\n# .mws\n0\tstring\t\\000\\000\\001\\044\\000\\221\tMaple worksheet\n#this is anomalous\n0\tstring\tWriteNow\\000\\002\\000\\001\\000\\000\\000\\000\\100\\000\\000\\000\\000\\000\tMaple worksheet, but weird\n# this has the form {VERSION 2 3 \"IBM INTEL NT\" \"2.3\" }\\n\n# that is {VERSION major_version miunor_version computer_type version_string}\n0\tstring\t{VERSION\\ \tMaple worksheet\n>9\tstring\t>\\0\tversion %.1s.\n>>11\tstring\t>\\0\t%.1s\n\n# .mps\n0\tstring\t\\0\\0\\001$\tMaple something\n# from byte 4 it is either 'nul E' or 'soh R'\n# I think 'nul E' means a file that was saved as  a different name\n# a sort of revision marking\n# 'soh R' means new \n>4\tstring\t\\000\\105\tAn old revision\n>4\tstring\t\\001\\122\tThe latest save\n\n# .mpl\n# some of these are the same as .mps above\n#0000000 000 000 001 044 000 105 same as .mps\n#0000000 000 000 001 044 001 122 same as .mps\n\n0\tstring\t#\\n##\\ <SHAREFILE=\tMaple something\n0\tstring\t\\n#\\n##\\ <SHAREFILE=\tMaple something\n0\tstring\t##\\ <SHAREFILE=\tMaple something\n0\tstring\t#\\r##\\ <SHAREFILE=\tMaple something\n0\tstring\t\\r#\\r##\\ <SHAREFILE=\tMaple something\n0\tstring\t#\\ \\r##\\ <DESCRIBE>\tMaple something anomalous.\n#--------------------------------------------\n# marc21: file(1) magic for MARC 21 Format\n#\n# Kevin Ford (kefo@loc.gov)\n# \n# MARC21 formats are for the representation and communication\n# of bibliographic and related information in machine-readable\n# form.  For more info, see http://www.loc.gov/marc/\n\n\n# leader position 20-21 must be 45\n20\tstring\t45\t\n\n# leader starts with 5 digits, followed by codes specific to MARC format\n>0\tregex/1l\t(^[0-9]{5})[acdnp][^bhlnqsu-z]\tMARC21 Bibliographic\n!:mime\tapplication/marc\n>0\tregex/1l\t(^[0-9]{5})[acdnosx][z]\tMARC21 Authority\n!:mime\tapplication/marc\n>0\tregex/1l\t(^[0-9]{5})[cdn][uvxy]\tMARC21 Holdings\n!:mime\tapplication/marc\n0\tregex/1l\t(^[0-9]{5})[acdn][w]\tMARC21 Classification\n!:mime\tapplication/marc\n>0\tregex/1l\t(^[0-9]{5})[cdn][q]\tMARC21 Community\n!:mime\tapplication/marc\n\n# leader position 22-23, should be \"00\" but is it?\n>0\tregex/1l\t(^.{21})([^0]{2})\t(non-conforming)\n!:mime\tapplication/marc\n\n#------------------------------------------------------------------------------\n# $File$\n# mathcad:  file(1) magic for Mathcad documents\n# URL:\thttp://www.mathsoft.com/\n# From:\tJosh Triplett <josh@freedesktop.org>\n\n0\tstring\t.MCAD\\t\t\tMathcad document\n\n#------------------------------------------------------------------------------\n# $File$\n# mathematica:  file(1) magic for mathematica files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Mathematica a multi-purpose math program\n# versions 2.2 and 3.0\n\n#mathematica .mb\n0\tstring\t\\064\\024\\012\\000\\035\\000\\000\\000\tMathematica version 2 notebook\n0\tstring\t\\064\\024\\011\\000\\035\\000\\000\\000\tMathematica version 2 notebook\n\n# .ma\n# multiple possibilites:\n\n0\tstring\t(*^\\n\\n::[\\011frontEndVersion\\ =\\ \tMathematica notebook\n#>41\tstring\t>\\0\t%s\n\n#0\tstring\t(*^\\n\\n::[\\011palette\tMathematica notebook version 2.x\n\n#0\tstring\t(*^\\n\\n::[\\011Information\tMathematica notebook version 2.x\n#>675\tstring\t>\\0\t%s #doesn't work well\n\n# there may be 'cr' instread of 'nl' in some does this matter?\n\n# generic:\n0\tstring\t(*^\\r\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r\\n\\r\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\015\t\t\tMathematica notebook version 2.x\n0\tstring\t(*^\\n\\r\\n\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\n\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\n::[\\011\tMathematica notebook version 2.x\n\n\n# Mathematica .mx files\n\n#0\tstring\t(*This\\ is\\ a\\ Mathematica\\ binary\\ dump\\ file.\\ It\\ can\\ be\\ loaded\\ with\\ Get.*)\tMathematica binary file\n0\tstring\t(*This\\ is\\ a\\ Mathematica\\ binary\\ \tMathematica binary file\n#>71\tstring \\000\\010\\010\\010\\010\\000\\000\\000\\000\\000\\000\\010\\100\\010\\000\\000\\000\t\n# >71... is optional\n>88\tstring\t>\\0\tfrom %s\n\n\n# Mathematica files PBF:\n# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000\n0\tstring\tMMAPBF\\000\\001\\000\\000\\000\\203\\000\\001\\000\tMathematica PBF (fonts I think)\n\n# .ml files  These are menu resources I think\n# these start with \"[0-9][0-9][0-9]\\ A~[0-9][0-9][0-9]\\ \n# how to put that into a magic rule?\n4\tstring\t\\ A~\tMAthematica .ml file\n\n# .nb files\n#too long 0\tstring\t(***********************************************************************\\n\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ Mathematica-Compatible Notebook\tMathematica 3.0 notebook\n0\tstring\t(***********************\tMathematica 3.0 notebook\n\n# other (* matches it is a comment start in these langs\n# GRR: Too weak; also matches other languages e.g. ML\n#0\tstring\t(*\tMathematica, or Pascal, Modula-2 or 3 code text\n\n#########################\n# MatLab v5\n0       string  MATLAB  Matlab v5 mat-file\n>126    short   0x494d  (big endian)\n>>124   beshort x       version 0x%04x\n>126    short   0x4d49  (little endian)\n>>124   leshort x       version 0x%04x\n\n\n#------------------------------------------------------------------------------\n# $File: matroska,v 1.7 2012/08/26 10:06:15 christos Exp $\n# matroska:  file(1) magic for Matroska files\n#\n# See http://www.matroska.org/\n#\n\n# EBML id:\n0\t\tbelong\t\t0x1a45dfa3\n# DocType id:\n>4\t\tsearch/4096 \t\\x42\\x82\n# DocType contents:\n>>&1\t\tstring\t\twebm\t\tWebM\n!:mime  video/webm\n>>&1\t\tstring\t\tmatroska\tMatroska data\n!:mime  video/x-matroska\n\n#------------------------------------------------------------------------------\n# $File$\n# Mavroyanopoulos Nikos <nmav@hellug.gr>\n# mcrypt:   file(1) magic for mcrypt 2.2.x;\n0\tstring\t\t\\0m\\3\t\tmcrypt 2.5 encrypted data,\n>4\tstring\t\t>\\0\t\talgorithm: %s,\n>>&1\tleshort\t\t>0\t\tkeysize: %d bytes,\n>>>&0\tstring\t\t>\\0\t\tmode: %s,\n\n0\tstring\t\t\\0m\\2\t\tmcrypt 2.2 encrypted data,\n>3\tbyte\t\t0\t\talgorithm: blowfish-448,\n>3\tbyte\t\t1\t\talgorithm: DES,\n>3\tbyte\t\t2\t\talgorithm: 3DES,\n>3\tbyte\t\t3\t\talgorithm: 3-WAY,\n>3\tbyte\t\t4\t\talgorithm: GOST,\n>3\tbyte\t\t6\t\talgorithm: SAFER-SK64,\n>3\tbyte\t\t7\t\talgorithm: SAFER-SK128,\n>3\tbyte\t\t8\t\talgorithm: CAST-128,\n>3\tbyte\t\t9\t\talgorithm: xTEA,\n>3\tbyte\t\t10\t\talgorithm: TWOFISH-128,\n>3\tbyte\t\t11\t\talgorithm: RC2,\n>3\tbyte\t\t12\t\talgorithm: TWOFISH-192,\n>3\tbyte\t\t13\t\talgorithm: TWOFISH-256,\n>3\tbyte\t\t14\t\talgorithm: blowfish-128,\n>3\tbyte\t\t15\t\talgorithm: blowfish-192,\n>3\tbyte\t\t16\t\talgorithm: blowfish-256,\n>3\tbyte\t\t100\t\talgorithm: RC6,\n>3\tbyte\t\t101\t\talgorithm: IDEA,\n>4\tbyte\t\t0\t\tmode: CBC,\n>4\tbyte\t\t1\t\tmode: ECB,\n>4\tbyte\t\t2\t\tmode: CFB,\n>4\tbyte\t\t3\t\tmode: OFB,\n>4\tbyte\t\t4\t\tmode: nOFB,\n>5\tbyte\t\t0\t\tkeymode: 8bit\n>5\tbyte\t\t1\t\tkeymode: 4bit\n>5\tbyte\t\t2\t\tkeymode: SHA-1 hash\n>5\tbyte\t\t3\t\tkeymode: MD5 hash\n\n#------------------------------------------------------------------------------\n# $File$\n# mercurial:  file(1) magic for Mercurial changeset bundles\n# http://www.selenic.com/mercurial/wiki/\n#\n# Jesse Glick (jesse.glick@sun.com)\n#\n\n0\tstring\t\tHG10\t\tMercurial changeset bundle\n>4\tstring\t\tUN\t\t(uncompressed)\n>4\tstring\t\tGZ\t\t(gzip compressed)\n>4\tstring\t\tBZ\t\t(bzip2 compressed)\n\n#------------------------------------------------------------------------------\n# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $\n# metastore:  file(1) magic for metastore files\n# From: Thomas Wissen\n# see http://david.hardeman.nu/software.php#metastore\n0\tstring\t\tMeTaSt00r3\tMetastore data file, \n>10\tbequad\t\tx\t\tversion %0llx\n\n#------------------------------------------------------------------------------\n# $File: rinex,v 1.4 2011/05/03 01:44:17 christos Exp $\n# rinex:  file(1) magic for RINEX files\n# http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt\n# ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf\n# data for testing: ftp://cddis.gsfc.nasa.gov/pub/gps/data\n60\tstring\t\tRINEX\n>80\tsearch/256\tXXRINEXB\tRINEX Data, GEO SBAS Broadcast\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/broadcast\n>80\tsearch/256\tXXRINEXD\tRINEX Data, Observation (Hatanaka comp)\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/observation\n>80\tsearch/256\tXXRINEXC\tRINEX Data, Clock\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/clock\n>80\tsearch/256\tXXRINEXH\tRINEX Data, GEO SBAS Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXG\tRINEX Data, GLONASS Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXL\tRINEX Data, Galileo Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXM\tRINEX Data, Meteorological\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/meteorological\n>80\tsearch/256\tXXRINEXN\tRINEX Data, Navigation\t\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXO\tRINEX Data, Observation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/observation\n\n# https://en.wikipedia.org/wiki/GRIB\n0\tstring\tGRIB\n>7\tbyte\t=1\tGridded binary (GRIB) version 1\n>7\tbyte\t=2\tGridded binary (GRIB) version 2\n\n#------------------------------------------------------------------------------\n# $File: mime,v 1.5 2009/09/19 16:28:10 christos Exp $\n# mime:  file(1) magic for MIME encoded files\n#\n0\tstring/t\t\tContent-Type:\\ \n>14\tstring\t\t>\\0\t\t%s\n0\tstring/t\t\tContent-Type:\n>13\tstring\t\t>\\0\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: mips,v 1.9 2013/01/12 03:09:51 christos Exp $\n# mips:  file(1) magic for MIPS ECOFF and Ucode, as used in SGI IRIX\n# and DEC Ultrix\n#\n0\tbeshort\t0x0160\t\tMIPSEB ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %d\n>23\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x0162\t\tMIPSEL-BE ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x6001\t\tMIPSEB-LE ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x6201\t\tMIPSEL ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n# MIPS 2 additions\n#\n0\tbeshort\t0x0163\t\tMIPSEB MIPS-II ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %d\n>23\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x0166\t\tMIPSEL-BE MIPS-II ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %d\n>23\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x6301\t\tMIPSEB-LE MIPS-II ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x6601\t\tMIPSEL MIPS-II ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n# MIPS 3 additions\n#\n0\tbeshort\t0x0140\t\tMIPSEB MIPS-III ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %d\n>23\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x0142\t\tMIPSEL-BE MIPS-III ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %d\n>23\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x4001\t\tMIPSEB-LE MIPS-III ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x4201\t\tMIPSEL MIPS-III ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\\b.%d\n#\n0\tbeshort\t0x180\t\tMIPSEB Ucode\n0\tbeshort\t0x182\t\tMIPSEL-BE Ucode\n\n#------------------------------------------------------------------------------\n# $File$\n# mirage:  file(1) magic for Mirage executables\n#\n# XXX - byte order?\n#\n0\tlong\t31415\t\tMirage Assembler m.out executable\n\n#-----------------------------------------------------------------------------\n# $File: misctools,v 1.13 2013/01/16 13:53:10 christos Exp $\n# misctools:  file(1) magic for miscellaneous UNIX tools.\n#\n0\tsearch/1\t%%!!\t\t\tX-Post-It-Note text\n0\tstring/c\tBEGIN:VCALENDAR\t\tvCalendar calendar file\n!:mime\ttext/calendar\n0\tstring/c\tBEGIN:VCARD\t\tvCard visiting card\n!:mime\ttext/x-vcard\n\n# Summary: Libtool library file\n# Extension: .la\n# Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl>\n0\tsearch/80\t.la\\ -\\ a\\ libtool\\ library\\ file\tlibtool library file\n\n# Summary: Libtool object file\n# Extension: .lo\n# Submitted by: Abel Cheung <abelcheung@gmail.com>\n0\tsearch/80\t.lo\\ -\\ a\\ libtool\\ object\\ file\tlibtool object file\n\n# From: Daniel Novotny <dnovotny@redhat.com>\n0\tstring\t\tMDMP\\x93\\xA7\t\t\t\tMDMP crash report data\n\n# Summary: abook addressbook file\n# Submitted by: Mark Schreiber <mark7@alumni.cmu.edu>\n0\tstring\t#\\x20abook\\x20addressbook\\x20file abook address book\n!:mime application/x-abook-addressbook\n\n#------------------------------------------------------------------------------\n# $File$\n# mkid:  file(1) magic for mkid(1) databases\n#\n# ID is the binary tags database produced by mkid(1).\n#\n# XXX - byte order?\n#\n0\tstring\t\t\\311\\304\tID tags data\n>2\tshort\t\t>0\t\tversion %d\n\n#------------------------------------------------------------------------------\n# $File$\n# mlssa: file(1) magic for MLSSA datafiles\n#\n0\t\tlelong\t\t0xffffabcd\tMLSSA datafile,\n>4\t\tleshort\t\tx\t\talgorithm %d,\n>10\t\tlelong\t\tx\t\t%d samples\n\n#------------------------------------------------------------------------------\n# $File$\n# mmdf:  file(1) magic for MMDF mail files\n#\n0\tstring\t\\001\\001\\001\\001\tMMDF mailbox\n\n#------------------------------------------------------------------------------\n# $File: modem,v 1.5 2010/09/20 18:55:20 rrt Exp $\n# modem:  file(1) magic for modem programs\n#\n# From: Florian La Roche <florian@knorke.saar.de>\n1\tstring\t\tPC\\ Research,\\ Inc\tDigifax-G3-File\n>29\tbyte\t\t1\t\t\t\\b, fine resolution\n>29\tbyte\t\t0\t\t\t\\b, normal resolution\n\n0\tshort\t\t0x0100\t\traw G3 data, byte-padded\n0\tshort\t\t0x1400\t\traw G3 data\n#\n# Magic data for vgetty voice formats\n# (Martin Seine & Marc Eberhard)\n\n#\n# raw modem data version 1\n#\n0    string    RMD1      raw modem data\n>4   string    >\\0       (%s /\n>20  short     >0        compression type 0x%04x)\n\n#\n# portable voice format 1\n#\n0    string    PVF1\\n         portable voice format\n>5   string    >\\0       (binary %s)\n\n#\n# portable voice format 2\n#\n0    string    PVF2\\n         portable voice format\n>5   string >\\0          (ascii %s)\n\n# From: Bernd Nuernberger <bernd.nuernberger@web.de>\n# Brooktrout G3 fax data incl. 128 byte header\n# Common suffixes: 3??, BRK, BRT, BTR\n0\tleshort\t\t0x01bb\n>2\tleshort\t\t0x0100\t\tBrooktrout 301 fax image,\n>>9\tleshort\t\tx\t\t%d x\n>>0x2d\tleshort\t\tx\t\t%d\n>>6\tleshort\t\t200\t\t\\b, fine resolution\n>>6\tleshort\t\t100\t\t\\b, normal resolution\n>>11\tbyte\t\t1\t\t\\b, G3 compression\n>>11\tbyte\t\t2\t\t\\b, G32D compression\n\n#------------------------------------------------------------------------------\n# $File: motorola,v 1.10 2009/09/19 16:28:11 christos Exp $\n# motorola:  file(1) magic for Motorola 68K and 88K binaries\n#\n# 68K\n#\n0\tbeshort\t\t0520\t\tmc68k COFF\n>18\tbeshort\t\t^00000020\tobject\n>18\tbeshort\t\t&00000020\texecutable\n>12\tbelong\t\t>0\t\tnot stripped\n>168\tstring\t\t.lowmem\t\tApple toolbox\n>20\tbeshort\t\t0407\t\t(impure)\n>20\tbeshort\t\t0410\t\t(pure)\n>20\tbeshort\t\t0413\t\t(demand paged)\n>20\tbeshort\t\t0421\t\t(standalone)\n0\tbeshort\t\t0521\t\tmc68k executable (shared)\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t0522\t\tmc68k executable (shared demand paged)\n>12\tbelong\t\t>0\t\tnot stripped\n#\n# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)\n#\n0\tbeshort\t\t0554\t\t68K BCS executable\n#\n# 88K\n#\n# Motorola/88Open BCS\n#\n0\tbeshort\t\t0555\t\t88K BCS executable\n#\n# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>\n0   string      S0          Motorola S-Record; binary data in text format\n\n# ATARI ST relocatable PRG\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001\n# (according to Roland Waldi, Oct 21, 1987)\n# besides the magic 0x601a, the text segment size is checked to be\n# not larger than 1 MB (which is a lot on ST).\n# The additional 0x601b distinction I took from Doug Lee's magic.\n0\tbelong&0xFFFFFFF0\t0x601A0000\tAtari ST M68K contiguous executable\n>2\tbelong\t\t\tx\t\t(txt=%d,\n>6\tbelong\t\t\tx\t\tdat=%d,\n>10\tbelong\t\t\tx\t\tbss=%d,\n>14\tbelong\t\t\tx\t\tsym=%d)\n0\tbelong&0xFFFFFFF0\t0x601B0000\tAtari ST M68K non-contig executable\n>2\tbelong\t\t\tx\t\t(txt=%d,\n>6\tbelong\t\t\tx\t\tdat=%d,\n>10\tbelong\t\t\tx\t\tbss=%d,\n>14\tbelong\t\t\tx\t\tsym=%d)\n\n# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)\n0       beshort         0x601A          Atari 68xxx executable,\n>2      belong          x               text len %u,\n>6      belong          x               data len %u,\n>10     belong          x               BSS len %u,\n>14     belong          x               symboltab len %u,\n>18     belong          0\n>22     belong          &0x01           fastload flag,\n>22     belong          &0x02           may be loaded to alternate RAM,\n>22     belong          &0x04           malloc may be from alternate RAM,\n>22     belong          x               flags: 0x%X,\n>26     beshort         0               no relocation tab\n>26     beshort         !0              + relocation tab\n>30     string          SFX             [Self-Extracting LZH SFX archive]\n>38     string          SFX             [Self-Extracting LZH SFX archive]\n>44     string          ZIP!            [Self-Extracting ZIP SFX archive]\n\n0       beshort         0x0064          Atari 68xxx CPX file\n>8      beshort         x               (version %04x)\n\n#------------------------------------------------------------------------------\n# $File: mozilla,v 1.5 2015/01/24 15:48:42 christos Exp $\n# mozilla:  file(1) magic for Mozilla XUL fastload files \n# (XUL.mfasl and XPC.mfasl)\n# URL:\thttp://www.mozilla.org/\n# From:\tJosh Triplett <josh@freedesktop.org>\n\n0\tstring\tXPCOM\\nMozFASL\\r\\n\\x1A\t\tMozilla XUL fastload data\n0\tstring\tmozLz4a\t\t\t\tMozilla lz4 compressed bookmark data\n\n#------------------------------------------------------------------------------\n# $File: msdos,v 1.99 2014/06/03 01:40:24 christos Exp $\n# msdos:  file(1) magic for MS-DOS files\n#\n\n# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)\n# updated by Joerg Jenderek at Oct 2008,Apr 2011\n0\tstring/t\t@\t\t\t\n>1\tstring/cW\t\\ echo\\ off\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\techo\\ off\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\trem\t\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\tset\\ \t\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n\n\n# OS/2 batch files are REXX. the second regex is a bit generic, oh well\n# the matched commands seem to be common in REXX and uncommon elsewhere\n100\tsearch/0xffff   rxfuncadd\n>100\tregex/c =^[\\ \\t]{0,10}call[\\ \\t]{1,10}rxfunc\tOS/2 REXX batch file text\n100\tsearch/0xffff   say\n>100\tregex/c =^[\\ \\t]{0,10}say\\ ['\"]\t\t\tOS/2 REXX batch file text\n\n0\tleshort\t\t0x14c\tMS Windows COFF Intel 80386 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x166\tMS Windows COFF MIPS R4000 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x184\tMS Windows COFF Alpha object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x268\tMS Windows COFF Motorola 68000 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x1f0\tMS Windows COFF PowerPC object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x290\tMS Windows COFF PA-RISC object file\n#>4\tledate\t\tx\tstamp %s\n\n# Tests for various EXE types.\n#\n# Many of the compressed formats were extraced from IDARC 1.23 source code.\n#\n0\tstring/b\tMZ\n# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.\n>0x18\tleshort <0x40 MS-DOS executable\n!:mime\tapplication/x-dosexec\n# These traditional tests usually work but not always.  When test quality support is\n# implemented these can be turned on.\n#>>0x18\tleshort\t0x1c\t(Borland compiler)\n#>>0x18\tleshort\t0x1e\t(MS compiler)\n\n# If the relocation table is 0x40 or more bytes into the file, it's definitely\n# not a DOS EXE.\n>0x18  leshort >0x3f\n\n# Maybe it's a PE?\n>>(0x3c.l) string PE\\0\\0 PE\n!:mime\tapplication/x-dosexec\n>>>(0x3c.l+24)\tleshort\t\t0x010b\t\\b32 executable\n>>>(0x3c.l+24)\tleshort\t\t0x020b\t\\b32+ executable\n>>>(0x3c.l+24)\tleshort\t\t0x0107\tROM image\n>>>(0x3c.l+24)\tdefault\t\tx\tUnknown PE signature\n>>>>&0 \t\tleshort\t\tx\t0x%x\n>>>(0x3c.l+22)\tleshort&0x2000\t>0\t(DLL)\n>>>(0x3c.l+92)\tleshort\t\t1\t(native)\n>>>(0x3c.l+92)\tleshort\t\t2\t(GUI)\n>>>(0x3c.l+92)\tleshort\t\t3\t(console)\n>>>(0x3c.l+92)\tleshort\t\t7\t(POSIX)\n>>>(0x3c.l+92)\tleshort\t\t9\t(Windows CE)\n>>>(0x3c.l+92)\tleshort\t\t10\t(EFI application)\n>>>(0x3c.l+92)\tleshort\t\t11\t(EFI boot service driver)\n>>>(0x3c.l+92)\tleshort\t\t12\t(EFI runtime driver)\n>>>(0x3c.l+92)\tleshort\t\t13\t(EFI ROM)\n>>>(0x3c.l+92)\tleshort\t\t14\t(XBOX)\n>>>(0x3c.l+92)\tleshort\t\t15\t(Windows boot application)\n>>>(0x3c.l+92)\tdefault\t\tx\t(Unknown subsystem\n>>>>&0\t\tleshort\t\tx\t0x%x)\n>>>(0x3c.l+4)\tleshort\t\t0x14c\tIntel 80386\n>>>(0x3c.l+4)\tleshort\t\t0x166\tMIPS R4000\n>>>(0x3c.l+4)\tleshort\t\t0x168\tMIPS R10000\n>>>(0x3c.l+4)\tleshort\t\t0x184\tAlpha\n>>>(0x3c.l+4)\tleshort\t\t0x1a2\tHitachi SH3\n>>>(0x3c.l+4)\tleshort\t\t0x1a6\tHitachi SH4\n>>>(0x3c.l+4)\tleshort\t\t0x1c0\tARM\n>>>(0x3c.l+4)\tleshort\t\t0x1c2\tARM Thumb\n>>>(0x3c.l+4)\tleshort\t\t0x1c4\tARMv7 Thumb\n>>>(0x3c.l+4)\tleshort\t\t0x1f0\tPowerPC\n>>>(0x3c.l+4)\tleshort\t\t0x200\tIntel Itanium\n>>>(0x3c.l+4)\tleshort\t\t0x266\tMIPS16\n>>>(0x3c.l+4)\tleshort\t\t0x268\tMotorola 68000\n>>>(0x3c.l+4)\tleshort\t\t0x290\tPA-RISC\n>>>(0x3c.l+4)\tleshort\t\t0x366\tMIPSIV\n>>>(0x3c.l+4)\tleshort\t\t0x466\tMIPS16 with FPU\n>>>(0x3c.l+4)\tleshort\t\t0xebc\tEFI byte code\n>>>(0x3c.l+4)\tleshort\t\t0x8664\tx86-64\n>>>(0x3c.l+4)\tleshort\t\t0xc0ee\tMSIL\n>>>(0x3c.l+4)\tdefault\t\tx\tUnknown processor type\n>>>>&0\t\tleshort\t\tx\t0x%x\n>>>(0x3c.l+22)\tleshort&0x0200\t>0\t(stripped to external PDB)\n>>>(0x3c.l+22)\tleshort&0x1000\t>0\tsystem file\n>>>(0x3c.l+24)\tleshort\t\t0x010b\n>>>>(0x3c.l+232) lelong\t>0\tMono/.Net assembly\n>>>(0x3c.l+24)\tleshort\t\t0x020b\n>>>>(0x3c.l+248) lelong\t>0\tMono/.Net assembly\n\n# hooray, there's a DOS extender using the PE format, with a valid PE\n# executable inside (which just prints a message and exits if run in win)\n>>>(8.s*16)\t\tstring\t\t32STUB\t\\b, 32rtm DOS extender\n>>>(8.s*16)\t\tstring\t\t!32STUB\t\\b, for MS Windows\n>>>(0x3c.l+0xf8)\tstring\t\tUPX0 \\b, UPX compressed\n>>>(0x3c.l+0xf8)\tsearch/0x140\tPEC2 \\b, PECompact2 compressed\n>>>(0x3c.l+0xf8)\tsearch/0x140\tUPX2\n>>>>(&0x10.l+(-4))\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive (Info-Zip)\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.idata\n>>>>(&0xe.l+(-4))\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive (Info-Zip)\n>>>>(&0xe.l+(-4))\tstring\t\tZZ0 \\b, ZZip self-extracting archive\n>>>>(&0xe.l+(-4))\tstring\t\tZZ1 \\b, ZZip self-extracting archive\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.rsrc\n>>>>(&0x0f.l+(-4))\tstring\t\ta\\\\\\4\\5 \\b, WinHKI self-extracting archive\n>>>>(&0x0f.l+(-4))\tstring\t\tRar! \\b, RAR self-extracting archive\n>>>>(&0x0f.l+(-4))\tsearch/0x3000\tMSCF \\b, InstallShield self-extracting archive\n>>>>(&0x0f.l+(-4))\tsearch/32\tNullsoft \\b, Nullsoft Installer self-extracting archive\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.data\n>>>>(&0x0f.l)\t\tstring\t\tWEXTRACT \\b, MS CAB-Installer self-extracting archive\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.petite\\0 \\b, Petite compressed\n>>>>(0x3c.l+0xf7)\tbyte\t\tx\n>>>>>(&0x104.l+(-4))\tstring\t\t=!sfx! \\b, ACE self-extracting archive\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.WISE \\b, WISE installer self-extracting archive\n>>>(0x3c.l+0xf8)\tsearch/0x140\t.dz\\0\\0\\0 \\b, Dzip self-extracting archive\n>>>&(0x3c.l+0xf8)\tsearch/0x100\t_winzip_ \\b, ZIP self-extracting archive (WinZip)\n>>>&(0x3c.l+0xf8)\tsearch/0x100\tSharedD \\b, Microsoft Installer self-extracting archive\n>>>0x30\t\t\tstring\t\tInno \\b, InnoSetup self-extracting archive\n\n# Hmm, not a PE but the relocation table is too high for a traditional DOS exe,\n# must be one of the unusual subformats.\n>>(0x3c.l) string !PE\\0\\0 MS-DOS executable\n!:mime\tapplication/x-dosexec\n\n>>(0x3c.l)\t\tstring\t\tNE \\b, NE\n!:mime\tapplication/x-dosexec\n>>>(0x3c.l+0x36)\tbyte\t\t1 for OS/2 1.x\n>>>(0x3c.l+0x36)\tbyte\t\t2 for MS Windows 3.x\n>>>(0x3c.l+0x36)\tbyte\t\t3 for MS-DOS\n>>>(0x3c.l+0x36)\tbyte\t\t4 for Windows 386\n>>>(0x3c.l+0x36)\tbyte\t\t5 for Borland Operating System Services\n>>>(0x3c.l+0x36)\tdefault\t\tx\n>>>>(0x3c.l+0x36)\tbyte\t\tx (unknown OS %x)\n>>>(0x3c.l+0x36)\tbyte\t\t0x81 for MS-DOS, Phar Lap DOS extender\n>>>(0x3c.l+0x0c)\tleshort&0x8003\t0x8002 (DLL)\n>>>(0x3c.l+0x0c)\tleshort&0x8003\t0x8001 (driver)\n>>>&(&0x24.s-1)\t\tstring\t\tARJSFX \\b, ARJ self-extracting archive\n>>>(0x3c.l+0x70)\tsearch/0x80\tWinZip(R)\\ Self-Extractor \\b, ZIP self-extracting archive (WinZip)\n\n>>(0x3c.l)\t\tstring\t\tLX\\0\\0 \\b, LX\n!:mime\tapplication/x-dosexec\n>>>(0x3c.l+0x0a)\tleshort\t\t<1 (unknown OS)\n>>>(0x3c.l+0x0a)\tleshort\t\t1 for OS/2\n>>>(0x3c.l+0x0a)\tleshort\t\t2 for MS Windows\n>>>(0x3c.l+0x0a)\tleshort\t\t3 for DOS\n>>>(0x3c.l+0x0a)\tleshort\t\t>3 (unknown OS)\n>>>(0x3c.l+0x10)\tlelong&0x28000\t=0x8000 (DLL)\n>>>(0x3c.l+0x10)\tlelong&0x20000\t>0 (device driver)\n>>>(0x3c.l+0x10)\tlelong&0x300\t0x300 (GUI)\n>>>(0x3c.l+0x10)\tlelong&0x28300\t<0x300 (console)\n>>>(0x3c.l+0x08)\tleshort\t\t1 i80286\n>>>(0x3c.l+0x08)\tleshort\t\t2 i80386\n>>>(0x3c.l+0x08)\tleshort\t\t3 i80486\n>>>(8.s*16)\t\tstring\t\temx \\b, emx\n>>>>&1\t\t\tstring\t\tx %s\n>>>&(&0x54.l-3)\t\tstring\t\tarjsfx \\b, ARJ self-extracting archive\n\n# MS Windows system file, supposedly a collection of LE executables\n>>(0x3c.l)\t\tstring\t\tW3 \\b, W3 for MS Windows\n!:mime\tapplication/x-dosexec\n\n>>(0x3c.l)\t\tstring\t\tLE\\0\\0 \\b, LE executable\n!:mime\tapplication/x-dosexec\n>>>(0x3c.l+0x0a)\tleshort\t\t1\n# some DOS extenders use LE files with OS/2 header\n>>>>0x240\t\tsearch/0x100\tDOS/4G for MS-DOS, DOS4GW DOS extender\n>>>>0x240\t\tsearch/0x200\tWATCOM\\ C/C++ for MS-DOS, DOS4GW DOS extender\n>>>>0x440\t\tsearch/0x100\tCauseWay\\ DOS\\ Extender for MS-DOS, CauseWay DOS extender\n>>>>0x40\t\tsearch/0x40\tPMODE/W for MS-DOS, PMODE/W DOS extender\n>>>>0x40\t\tsearch/0x40\tSTUB/32A for MS-DOS, DOS/32A DOS extender (stub)\n>>>>0x40\t\tsearch/0x80\tSTUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)\n>>>>0x40\t\tsearch/0x80\tDOS/32A for MS-DOS, DOS/32A DOS extender (embedded)\n# this is a wild guess; hopefully it is a specific signature\n>>>>&0x24\t\tlelong\t\t<0x50\n>>>>>(&0x4c.l)\t\tstring\t\t\\xfc\\xb8WATCOM\n>>>>>>&0\t\tsearch/8\t3\\xdbf\\xb9 \\b, 32Lite compressed\n# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP\n#>>>>(0x3c.l+0x1c)\tlelong\t\t>0x10000 for OS/2\n# fails with DOS-Extenders.\n>>>(0x3c.l+0x0a)\tleshort\t\t2 for MS Windows\n>>>(0x3c.l+0x0a)\tleshort\t\t3 for DOS\n>>>(0x3c.l+0x0a)\tleshort\t\t4 for MS Windows (VxD)\n>>>(&0x7c.l+0x26)\tstring\t\tUPX \\b, UPX compressed\n>>>&(&0x54.l-3)\t\tstring\t\tUNACE \\b, ACE self-extracting archive\n\n# looks like ASCII, probably some embedded copyright message.\n# and definitely not NE/LE/LX/PE\n>>0x3c\t\tlelong\t>0x20000000\n>>>(4.s*512)\tleshort !0x014c \\b, MZ for MS-DOS\n!:mime\tapplication/x-dosexec\n# header data too small for extended executable\n>2\t\tlong\t!0\n>>0x18\t\tleshort <0x40\n>>>(4.s*512)\tleshort !0x014c\n\n>>>>&(2.s-514)\tstring\t!LE\n>>>>>&-2\tstring\t!BW \\b, MZ for MS-DOS\n!:mime\tapplication/x-dosexec\n>>>>&(2.s-514)\tstring\tLE \\b, LE\n>>>>>0x240\tsearch/0x100\tDOS/4G for MS-DOS, DOS4GW DOS extender\n# educated guess since indirection is still not capable enough for complex offset\n# calculations (next embedded executable would be at &(&2*512+&0-2)\n# I suspect there are only LE executables in these multi-exe files\n>>>>&(2.s-514)\tstring\tBW\n>>>>>0x240\tsearch/0x100\tDOS/4G\t\\b, LE for MS-DOS, DOS4GW DOS extender (embedded)\n>>>>>0x240\tsearch/0x100\t!DOS/4G\t\\b, BW collection for MS-DOS\n\n# This sequence skips to the first COFF segment, usually .text\n>(4.s*512)\tleshort\t\t0x014c \\b, COFF\n!:mime\tapplication/x-dosexec\n>>(8.s*16)\tstring\t\tgo32stub for MS-DOS, DJGPP go32 DOS extender\n>>(8.s*16)\tstring\t\temx\n>>>&1\t\tstring\t\tx for DOS, Win or OS/2, emx %s\n>>&(&0x42.l-3)\tbyte\t\tx \n>>>&0x26\tstring\t\tUPX \\b, UPX compressed\n# and yet another guess: small .text, and after large .data is unusal, could be 32lite\n>>&0x2c\t\tsearch/0xa0\t.text\n>>>&0x0b\tlelong\t\t<0x2000\n>>>>&0\t\tlelong\t\t>0x6000 \\b, 32lite compressed\n\n>(8.s*16) string $WdX \\b, WDos/X DOS extender\n\n# By now an executable type should have been printed out.  The executable\n# may be a self-uncompressing archive, so look for evidence of that and \n# print it out.  \n#\n# Some signatures below from Greg Roelofs, newt@uchicago.edu.\n#\n>0x35\tstring\t\\x8e\\xc0\\xb9\\x08\\x00\\xf3\\xa5\\x4a\\x75\\xeb\\x8e\\xc3\\x8e\\xd8\\x33\\xff\\xbe\\x30\\x00\\x05 \\b, aPack compressed\n>0xe7\tstring\tLH/2\\ \tSelf-Extract \\b, %s\n>0x1c\tstring\tUC2X\t\\b, UCEXE compressed\n>0x1c\tstring\tWWP\\ \t\\b, WWPACK compressed\n>0x1c\tstring\tRJSX \t\\b, ARJ self-extracting archive\n>0x1c\tstring\tdiet \t\\b, diet compressed\n>0x1c\tstring\tLZ09 \t\\b, LZEXE v0.90 compressed\n>0x1c\tstring\tLZ91 \t\\b, LZEXE v0.91 compressed\n>0x1c\tstring\ttz \t\\b, TinyProg compressed\n>0x1e\tstring\tCopyright\\ 1989-1990\\ PKWARE\\ Inc.\tSelf-extracting PKZIP archive\n!:mime\tapplication/zip\n# Yes, this really is \"Copr\", not \"Corp.\"\n>0x1e\tstring\tPKLITE\\ Copr.\tSelf-extracting PKZIP archive\n!:mime\tapplication/zip\n# winarj stores a message in the stub instead of the sig in the MZ header\n>0x20\tsearch/0xe0\taRJsfX \\b, ARJ self-extracting archive\n>0x20\tstring AIN\n>>0x23\tstring 2\t\\b, AIN 2.x compressed\n>>0x23\tstring <2\t\\b, AIN 1.x compressed\n>>0x23\tstring >2\t\\b, AIN 1.x compressed\n>0x24\tstring\tLHa's\\ SFX \\b, LHa self-extracting archive\n!:mime\tapplication/x-lha\n>0x24\tstring\tLHA's\\ SFX \\b, LHa self-extracting archive\n!:mime\tapplication/x-lha\n>0x24\tstring\t\\ $ARX \\b, ARX self-extracting archive\n>0x24\tstring\t\\ $LHarc \\b, LHarc self-extracting archive\n>0x20\tstring\tSFX\\ by\\ LARC \\b, LARC self-extracting archive\n>0x40\tstring aPKG \\b, aPackage self-extracting archive\n>0x64\tstring\tW\\ Collis\\0\\0 \\b, Compack compressed\n>0x7a\tstring\t\tWindows\\ self-extracting\\ ZIP\t\\b, ZIP self-extracting archive\n>>&0xf4 search/0x140 \\x0\\x40\\x1\\x0\n>>>(&0.l+(4)) string MSCF \\b, WinHKI CAB self-extracting archive\n>1638\tstring\t-lh5- \\b, LHa self-extracting archive v2.13S\n>0x17888 string Rar! \\b, RAR self-extracting archive\n\n# Skip to the end of the EXE.  This will usually work fine in the PE case\n# because the MZ image is hardcoded into the toolchain and almost certainly\n# won't match any of these signatures.\n>(4.s*512)\tlong\tx \n>>&(2.s-517)\tbyte\tx \n>>>&0\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive\n>>>&0\tstring\t\tRar! \\b, RAR self-extracting archive\n>>>&0\tstring\t\t=!\\x11 \\b, AIN 2.x self-extracting archive\n>>>&0\tstring\t\t=!\\x12 \\b, AIN 2.x self-extracting archive\n>>>&0\tstring\t\t=!\\x17 \\b, AIN 1.x self-extracting archive\n>>>&0\tstring\t\t=!\\x18 \\b, AIN 1.x self-extracting archive\n>>>&7\tsearch/400\t**ACE** \\b, ACE self-extracting archive\n>>>&0\tsearch/0x480\tUC2SFX\\ Header \\b, UC2 self-extracting archive\n\n# a few unknown ZIP sfxes, no idea if they are needed or if they are\n# already captured by the generic patterns above\n>(8.s*16)\tsearch/0x20\tPKSFX \\b, ZIP self-extracting archive (PKZIP)\n# TODO: how to add this? >FileSize-34 string Windows\\ Self-Installing\\ Executable \\b, ZIP self-extracting archive\n#\n\n# TELVOX Teleinformatica CODEC self-extractor for OS/2:\n>49801\tstring\t\\x79\\xff\\x80\\xff\\x76\\xff\t\\b, CODEC archive v3.21\n>>49824 leshort\t\t=1\t\t\t\\b, 1 file\n>>49824 leshort\t\t>1\t\t\t\\b, %u files\n\n# added by Joerg Jenderek of http://www.freedos.org/software/?prog=kc\n# and http://www.freedos.org/software/?prog=kpdos\n# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD\n0\tstring/b\tKCF\t\tFreeDOS KEYBoard Layout collection\n# only version=0x100 found\n>3\tuleshort\tx\t\t\\b, version 0x%x\n# length of string containing author,info and special characters\n>6\tubyte\t\t>0\t\t\n#>>6\tpstring\t\tx\t\t\\b, name=%s\n>>7\tstring\t\t>\\0\t\t\\b, author=%-.14s\n>>7\tsearch/254\t\\xff\t\t\\b, info=\n#>>>&0\tstring\t\tx\t\t\\b%-s\n>>>&0\tstring\t\tx\t\t\\b%-.15s\n# for FreeDOS *.KL files \n0\tstring/b\tKLF\t\tFreeDOS KEYBoard Layout file\n# only version=0x100 or 0x101 found\n>3\tuleshort\tx\t\t\\b, version 0x%x\n# stringlength\n>5\tubyte\t\t>0\t\t\n>>8\tstring\t\tx\t\t\\b, name=%-.2s\n0\tstring\t\\xffKEYB\\ \\ \\ \\0\\0\\0\\0\t\n>12\tstring\t\\0\\0\\0\\0`\\004\\360\tMS-DOS KEYBoard Layout file\n\n# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)\n# Uncommenting only the first two lines will cover about 2/3 of COM files,\n# but it isn't feasible to match all COM files since there must be at least\n# two dozen different one-byte \"magics\".\n# test too generic ?\n0\tbyte\t\t0xe9\t\tDOS executable (COM)\n>0x1FE leshort\t\t0xAA55\t\t\\b, boot code\n>6\tstring\t\tSFX\\ of\\ LHarc\t(%s)\n\n# DOS device driver updated by Joerg Jenderek at May 2011\n# http://maben.homeip.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009\n0\tulequad&0x07a0ffffffff\t\t0xffffffff\t\tDOS executable (\n>40\tsearch/7\t\t\tUPX!\t\t\t\\bUPX compressed \n# DOS device driver attributes\n>4\tuleshort&0x8000\t\t\t0x0000\t\t\t\\bblock device driver\n# character device\n>4\tuleshort&0x8000\t\t\t0x8000\t\t\t\\b\n>>4\tuleshort&0x0008\t\t\t0x0008\t\t\t\\bclock \n# fast video output by int 29h\n>>4\tuleshort&0x0010\t\t\t0x0010\t\t\t\\bfast \n# standard input/output device\n>>4\tuleshort&0x0003\t\t\t>0\t\t\t\\bstandard \n>>>4\tuleshort&0x0001\t\t\t0x0001\t\t\t\\binput\n>>>4\tuleshort&0x0003\t\t\t0x0003\t\t\t\\b/\n>>>4\tuleshort&0x0002\t\t\t0x0002\t\t\t\\boutput \n>>4\tuleshort&0x8000\t\t\t0x8000\t\t\t\\bcharacter device driver\n>0\tubyte\t\t\t\tx\t\t\t\n# upx compressed device driver has garbage instead of real in name field of header\n>>40\tsearch/7\t\t\tUPX!\t\t\t\n>>40\tdefault\t\t\t\tx\t\t\t\n# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped\n>>>12\t\tubyte\t\t\t>0x27\t\t\t\\b \n>>>>10\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>10\t\tubyte\t\t\t!0x2E\t\t\t\n>>>>>>10\tubyte\t\t\t!0x2A\t\t\t\\b%c\n>>>>11\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>11\t\tubyte\t\t\t!0x2E\t\t\t\\b%c\n>>>>12\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>12\t\tubyte\t\t\t!0x39\t\t\t\n>>>>>>12\tubyte\t\t\t!0x2E\t\t\t\\b%c\n>>>13\t\tubyte\t\t\t>0x20\t\t\t\n>>>>13\t\tubyte\t\t\t!0x2E\t\t\t\\b%c\n>>>>14\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>14\t\tubyte\t\t\t!0x2E\t\t\t\\b%c\n>>>>15\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>15\t\tubyte\t\t\t!0x2E\t\t\t\\b%c\n>>>>16\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>16\t\tubyte\t\t\t!0x2E\t\t\t\n>>>>>>16\tubyte\t\t\t<0xCB\t\t\t\\b%c\n>>>>17\t\tubyte\t\t\t>0x20\t\t\t\n>>>>>17\t\tubyte\t\t\t!0x2E\t\t\t\n>>>>>>17\tubyte\t\t\t<0x90\t\t\t\\b%c\n# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field\n>>>4\t\tuleshort&0x8000\t\t0x8000\t\t\t\n>>>>12\t\tubyte\t\t\t<0x2F\t\t\t\n# they have their real name at offset 22\n>>>>>22\t\tstring\t\t\t>\\0\t\t\t\\b%-.5s\n>4\tuleshort&0x8000\t\t\t0x0000\t\t\t\n# 32 bit sector addressing ( > 32 MB) for block devices\n>>4\tuleshort&0x0002\t\t\t0x0002\t\t\t\\b,32-bit sector-\n# support by driver functions 13h, 17h, 18h\n>4\tuleshort&0x0040\t\t\t0x0040\t\t\t\\b,IOCTL-\n# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh\n>4\tuleshort&0x0800\t\t\t0x0800\t\t\t\\b,close media-\n# output until busy support by int 10h for character device driver\n>4\tuleshort&0x8000\t\t\t0x8000\t\t\t\n>>4\tuleshort&0x2000\t\t\t0x2000\t\t\t\\b,until busy-\n# direct read/write support by driver functions 03h,0Ch\n>4\tuleshort&0x4000\t\t\t0x4000\t\t\t\\b,control strings-\n>4\tuleshort&0x8000\t\t\t0x8000\t\t\t\n>>4\tuleshort&0x6840\t\t\t>0\t\t\t\\bsupport\n>4\tuleshort&0x8000\t\t\t0x0000\t\t\t\n>>4\tuleshort&0x4842\t\t\t>0\t\t\t\\bsupport\n>0\tubyte\t\t\t\tx\t\t\t\\b)\n# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header \n# Too weak, matches files that only contain 0's\n#0\tulequad&0x000007a0ffffffed\t0x0000000000000000\tDOS-executable (\n#>4\tuleshort&0x8000\t\t\t0x8000\t\t\t\\bcharacter device driver\n#>>10\tstring\t\t\t\tx\t\t\t%-.8s\n#>4\tuleshort&0x4000\t\t\t0x4000\t\t\t\\b,control strings-support)\n\n# test too generic ?\n0\tbyte\t\t0x8c\t\tDOS executable (COM)\n# updated by Joerg Jenderek at Oct 2008\n0\tulelong\t\t0xffff10eb\tDR-DOS executable (COM)\n# byte 0xeb conflicts with \"sequent\" magic leshort 0xn2eb\n0\tubeshort&0xeb8d\t>0xeb00\t\t\n# DR-DOS STACKER.COM SCREATE.SYS missed\n>0\tbyte\t\t0xeb\n>>0x1FE leshort\t\t0xAA55\t\tDOS executable (COM), boot code\n>>85\tstring\t\tUPX\t\tDOS executable (COM), UPX compressed\n>>4\tstring\t\t\\ $ARX\t\tDOS executable (COM), ARX self-extracting archive\n>>4\tstring\t\t\\ $LHarc\tDOS executable (COM), LHarc self-extracting archive\n>>0x20e string\t\tSFX\\ by\\ LARC\tDOS executable (COM), LARC self-extracting archive\n# updated by Joerg Jenderek at Oct 2008\n#0\tbyte\t\t0xb8\t\tCOM executable\n0\tuleshort&0x80ff\t0x00b8\t\t\n# modified by Joerg Jenderek\n>1\tlelong\t\t!0x21cd4cff\tCOM executable for DOS\n# http://syslinux.zytor.com/comboot.php\n# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode\n# start with assembler instructions mov eax,21cd4cffh\n0\tuleshort&0xc0ff\t0xc0b8\t\t\n>1\tlelong\t\t0x21cd4cff\tCOM executable (32-bit COMBOOT)\n# syslinux:doc/comboot.txt\n# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov\n# eax,21cd4cfeh) as a magic number.\n0       string/b\t\\xb8\\xfe\\x4c\\xcd\\x21\tCOM executable (COM32R)\n# start with assembler instructions mov eax,21cd4cfeh\n0\tuleshort&0xc0ff\t0xc0b8\t\t\n>1\tlelong\t\t0x21cd4cfe\tCOM executable (32-bit COMBOOT, relocatable)\n0\tstring/b\t\\x81\\xfc\t\t\n>4\tstring\t\\x77\\x02\\xcd\\x20\\xb9\t\n>>36\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n252\tstring Must\\ have\\ DOS\\ version DR-DOS executable (COM)\n# added by Joerg Jenderek at Oct 2008\n# GRR search is not working\n#34\tsearch/2\tUPX!\t\tFREE-DOS executable (COM), UPX compressed\n34\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n35\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n# GRR search is not working\n#2\tsearch/28\t\\xcd\\x21\tCOM executable for MS-DOS\n#WHICHFAT.cOM\n2\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#DELTREE.cOM DELTREE2.cOM\n4\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM\n5\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#DELTMP.COm HASFAT32.cOM\n7\tstring\t\\xcd\\x21\t\t\n>0\tbyte\t!0xb8\t\t\tCOM executable for DOS\n#COMP.cOM MORE.COm\n10\tstring\t\\xcd\\x21\t\t\n>5\tstring\t!\\xcd\\x21\t\tCOM executable for DOS\n#comecho.com\n13\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#HELP.COm EDIT.coM\n18\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#NWRPLTRM.COm\n23\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#LOADFIX.cOm LOADFIX.cOm\n30\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#syslinux.com 3.11\n70\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n# many compressed/converted COMs start with a copy loop instead of a jump\n0x6\tsearch/0xa\t\\xfc\\x57\\xf3\\xa5\\xc3\tCOM executable for MS-DOS\n0x6\tsearch/0xa\t\\xfc\\x57\\xf3\\xa4\\xc3\tCOM executable for DOS\n>0x18\tsearch/0x10\t\\x50\\xa4\\xff\\xd5\\x73\t\\b, aPack compressed\n0x3c\tstring\t\tW\\ Collis\\0\\0\t\tCOM executable for MS-DOS, Compack compressed\n# FIXME: missing diet .com compression\n\n# miscellaneous formats\n0\tstring/b\tLZ\t\tMS-DOS executable (built-in)\n#0\tbyte\t\t0xf0\t\tMS-DOS program library data\n#\n\n# AAF files:\n# <stuartc@rd.bbc.co.uk> Stuart Cunningham\n0\tstring/b\t\\320\\317\\021\\340\\241\\261\\032\\341AAFB\\015\\000OM\\006\\016\\053\\064\\001\\001\\001\\377\t\t\tAAF legacy file using MS Structured Storage\n>30\tbyte\t9\t\t(512B sectors)\n>30\tbyte\t12\t\t(4kB sectors)\n0\tstring/b\t\\320\\317\\021\\340\\241\\261\\032\\341\\001\\002\\001\\015\\000\\002\\000\\000\\006\\016\\053\\064\\003\\002\\001\\001\t\t\tAAF file using MS Structured Storage\n>30\tbyte\t9\t\t(512B sectors)\n>30\tbyte\t12\t\t(4kB sectors)\n\n# Popular applications\n2080\tstring\tMicrosoft\\ Word\\ 6.0\\ Document\t%s\n!:mime\tapplication/msword\n2080\tstring\tDocumento\\ Microsoft\\ Word\\ 6 Spanish Microsoft Word 6 document data\n!:mime\tapplication/msword\n# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)\n2112\tstring\tMSWordDoc\t\t\tMicrosoft Word document data\n!:mime\tapplication/msword\n#\n0\tbelong\t0x31be0000\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n#\n0\tstring/b\tPO^Q`\t\t\t\tMicrosoft Word 6.0 Document\n!:mime\tapplication/msword\n#\n0\tstring/b\t\\376\\067\\0\\043\t\t\tMicrosoft Office Document\n!:mime\tapplication/msword\n0\tstring/b\t\\333\\245-\\0\\0\\0\t\t\tMicrosoft Office Document\n!:mime\tapplication/msword\n512\tstring/b\t\\354\\245\\301\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n#\n0\tstring/b\t\\xDB\\xA5\\x2D\\x00\t\tMicrosoft WinWord 2.0 Document\n!:mime application/msword\n#\n2080\tstring\tMicrosoft\\ Excel\\ 5.0\\ Worksheet\t%s\n!:mime\tapplication/vnd.ms-excel\n#\n0\tstring/b\t\\xDB\\xA5\\x2D\\x00\t\tMicrosoft WinWord 2.0 Document\n!:mime application/msword\n\n2080\tstring\tFoglio\\ di\\ lavoro\\ Microsoft\\ Exce\t%s\n!:mime\tapplication/vnd.ms-excel\n#\n# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)\n2114\tstring\tBiff5\t\tMicrosoft Excel 5.0 Worksheet\n!:mime\tapplication/vnd.ms-excel\n# Italian MS-Excel\n2121\tstring\tBiff5\t\tMicrosoft Excel 5.0 Worksheet\n!:mime\tapplication/vnd.ms-excel\n0\tstring/b\t\\x09\\x04\\x06\\x00\\x00\\x00\\x10\\x00\tMicrosoft Excel Worksheet\n!:mime\tapplication/vnd.ms-excel\n#\n0\tbelong\t0x00001a00\tLotus 1-2-3\n!:mime\tapplication/x-123\n>4\tbelong\t0x00100400\twk3 document data\n>4\tbelong\t0x02100400\twk4 document data\n>4\tbelong\t0x07800100\tfm3 or fmb document data\n>4\tbelong\t0x07800000\tfm3 or fmb document data\n#\n0\tbelong\t0x00000200\tLotus 1-2-3\n!:mime\tapplication/x-123\n>4\tbelong\t0x06040600\twk1 document data\n>4\tbelong\t0x06800200\tfmt document data\n0\tstring/b\t\tWordPro\\0\tLotus WordPro\n!:mime\tapplication/vnd.lotus-wordpro\n0\tstring/b\t\tWordPro\\r\\373\tLotus WordPro\n!:mime\tapplication/vnd.lotus-wordpro\n\n\n# Summary: Script used by InstallScield to uninstall applications\n# Extension: .isu\n# Submitted by: unknown\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)\n0\t\tstring\t\t\\x71\\xa8\\x00\\x00\\x01\\x02\n>12\t\tstring\t\tStirling\\ Technologies,\t\tInstallShield Uninstall Script\n\n# Winamp .avs\n#0\tstring\tNullsoft\\ AVS\\ Preset\\ \\060\\056\\061\\032 A plug in for Winamp ms-windows Freeware media player\n0\tstring/b\tNullsoft\\ AVS\\ Preset\\ \tWinamp plug in\n\n# Windows Metafont .WMF\n0\tstring/b\t\\327\\315\\306\\232\tms-windows metafont .wmf\n0\tstring/b\t\\002\\000\\011\\000\tms-windows metafont .wmf\n0\tstring/b\t\\001\\000\\011\\000\tms-windows metafont .wmf\n\n#tz3 files whatever that is (MS Works files)\n0\tstring/b\t\\003\\001\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n0\tstring/b\t\\003\\002\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n0\tstring/b\t\\003\\003\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n\n# PGP sig files .sig\n#0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127 065 to  \\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\065\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\066\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\067\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\070\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\071\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\225\\003\\005\\000\\062\\122\\207\\304\\100\\345\\042 PGP sig\n\n# windows zips files .dmf\n0\tstring/b\tMDIF\\032\\000\\010\\000\\000\\000\\372\\046\\100\\175\\001\\000\\001\\036\\001\\000 MS Windows special zipped file\n\n\n#ico files\n0\tstring/b\t\\102\\101\\050\\000\\000\\000\\056\\000\\000\\000\\000\\000\\000\\000\tIcon for MS Windows\n\n# Windows icons\n0   name    ico-dir\n# not entirely accurate, the number of icons is part of the header\n>0  byte    1   - 1 icon\n>0  ubyte   >1  - %d icons\n>2  byte    0   \\b, 256x\n>2  byte    !0  \\b, %dx\n>3  byte    0   \\b256\n>3  byte    !0  \\b%d\n>4  ubyte   !0  \\b, %d colors\n\n0   belong  0x00000100\n>9  byte    0\n>>0 byte    x           MS Windows icon resource\n!:mime\timage/x-icon\n>>4 use     ico-dir\n>9  ubyte   0xff\n>>0 byte    x           MS Windows icon resource\n!:mime\timage/x-icon\n>>4 use     ico-dir\n\n# Windows non-animated cursors\n0   name    cur-dir\n# not entirely accurate, the number of icons is part of the header\n>0  byte        1   - 1 icon\n>0  ubyte       >1  - %d icons\n>2  byte        0   \\b, 256x\n>2  byte        !0  \\b, %dx\n>3  byte        0   \\b256\n>3  byte        !0  \\b%d\n>6  uleshort    x   \\b, hotspot @%dx\n>8  uleshort    x   \\b%d\n\n0   belong  0x00000200\n>9  byte    0\n>>0 byte    x           MS Windows cursor resource\n!:mime image/x-cur\n>>4 use     cur-dir\n>9  ubyte   0xff\n>>0 byte    x           MS Windows cursor resource\n!:mime image/x-cur\n>>4 use     cur-dir\n\n# .chr files\n0\tstring/b\tPK\\010\\010BGI\tBorland font \n>4\tstring\t>\\0\t%s\n# then there is a copyright notice\n\n\n# .bgi files\n0\tstring/b\tpk\\010\\010BGI\tBorland device \n>4\tstring\t>\\0\t%s\n# then there is a copyright notice\n\n\n# Windows Recycle Bin record file (named INFO2)\n# By Abel Cheung (abelcheung AT gmail dot com)\n# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes\n# Since Vista uses another structure, INFO2 structure probably won't change\n# anymore. Detailed analysis in:\n# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf\n0\tlelong\t\t0x00000004\n>12\tlelong\t\t0x00000118\tWindows Recycle Bin INFO2 file (Win98 or below)\n\n0\tlelong\t\t0x00000005\n>12\tlelong\t\t0x00000320\tWindows Recycle Bin INFO2 file (Win2k - WinXP)\n\n\n##### put in Either Magic/font or Magic/news\n# Acroread or something\t files wrongly identified as G3\t .pfm\n# these have the form \\000 \\001 any? \\002 \\000 \\000\n# or \\000 \\001 any? \\022 \\000 \\000\n0\tbelong&0xffff00ff\t0x00010012\tPFM data\n>4\tstring\t\t\t\\000\\000\n>6\tstring\t\t\t>\\060\t\t- %s\n\n0\tbelong&0xffff00ff\t0x00010002\tPFM data\n>4\tstring\t\t\t\\000\\000\n>6\tstring\t\t\t>\\060\t\t- %s\n#0\tstring\t\\000\\001 pfm?\n#>3\tstring\t\\022\\000\\000Copyright\\\tyes\n#>3\tstring\t\\002\\000\\000Copyright\\\tyes\n#>3\tstring\t>\\0\toops, not a font file. Cancel that.\n#it clashes with ttf files so put it lower down.\n\n# From Doug Lee via a FreeBSD pr\n9\tstring\t\tGERBILDOC\tFirst Choice document\n9\tstring\t\tGERBILDB\tFirst Choice database\n9\tstring\t\tGERBILCLIP\tFirst Choice database\n0\tstring\t\tGERBIL\t\tFirst Choice device file\n9\tstring\t\tRABBITGRAPH\tRabbitGraph file\n0\tstring\t\tDCU1\t\tBorland Delphi .DCU file\n0\tstring\t\t=!<spell>\tMKS Spell hash list (old format)\n0\tstring\t\t=!<spell2>\tMKS Spell hash list\n# Too simple - MPi\n#0\tstring\t\tAH\t\tHalo(TM) bitmapped font file\n0\tlelong\t\t0x08086b70\tTurboC BGI file\n0\tlelong\t\t0x08084b50\tTurboC Font file\n\n# Debian#712046: The magic below identifies \"Delphi compiled form data\". \n# An additional source of information is available at:\n# http://www.woodmann.com/fravia/dafix_t1.htm\n0\tstring\t\tTPF0\n>4\tpstring\t\t>\\0\t\tDelphi compiled form '%s'\n\n# tests for DBase files moved, updated and merged to database\n\n0\tstring\t\tPMCC\t\tWindows 3.x .GRP file\n1\tstring\t\tRDC-meg\t\tMegaDots \n>8\tbyte\t\t>0x2F\t\tversion %c\n>9\tbyte\t\t>0x2F\t\t\\b.%c file\n0\tlelong\t\t0x4C\n>4\tlelong\t\t0x00021401\tWindows shortcut file\n\n# .PIF files added by Joerg Jenderek from http://smsoft.ru/en/pifdoc.htm\n# only for windows versions equal or greater 3.0\n0x171\tstring\tMICROSOFT\\ PIFEX\\0\tWindows Program Information File\n!:mime\tapplication/x-dosexec\n#>2\tstring\t \t>\\0\t\t\\b, Title:%.30s\n>0x24\tstring\t\t>\\0\t\t\\b for %.63s\n>0x65\tstring\t\t>\\0\t\t\\b, directory=%.64s\n>0xA5\tstring\t\t>\\0\t\t\\b, parameters=%.64s\n#>0x181\tleshort\tx\t\\b, offset %x\n#>0x183\tleshort\tx\t\\b, offsetdata %x\n#>0x185\tleshort\tx\t\\b, section length %x\n>0x187\tsearch/0xB55\tWINDOWS\\ VMM\\ 4.0\\0\t\n>>&0x5e\t\tubyte\t>0\t\t\t\n>>>&-1\t\tstring\t<PIFMGR.DLL\t\t\\b, icon=%s\n#>>>&-1\t\tstring\tPIFMGR.DLL\t\t\\b, icon=%s\n>>>&-1\t\tstring\t>PIFMGR.DLL\t\t\\b, icon=%s\n>>&0xF0\t\tubyte\t>0\t\t\t\n>>>&-1\t\tstring\t<Terminal\t\t\\b, font=%.32s\n#>>>&-1\t\tstring\t=Terminal\t\t\\b, font=%.32s\n>>>&-1\t\tstring\t>Terminal\t\t\\b, font=%.32s\n>>&0x110\tubyte\t>0\t\t\t\n>>>&-1\t\tstring\t<Lucida\\ Console\t\\b, TrueTypeFont=%.32s\n#>>>&-1\t\tstring\t=Lucida\\ Console\t\\b, TrueTypeFont=%.32s\n>>>&-1\t\tstring\t>Lucida\\ Console\t\\b, TrueTypeFont=%.32s\n#>0x187\tsearch/0xB55\tWINDOWS\\ 286\\ 3.0\\0\t\\b, Windows 3.X standard mode-style\n#>0x187\tsearch/0xB55\tWINDOWS\\ 386\\ 3.0\\0\t\\b, Windows 3.X enhanced mode-style\n>0x187\tsearch/0xB55\tWINDOWS\\ NT\\ \\ 3.1\\0\t\\b, Windows NT-style\n#>0x187\tsearch/0xB55\tWINDOWS\\ NT\\ \\ 4.0\\0\t\\b, Windows NT-style\n>0x187\tsearch/0xB55\tCONFIG\\ \\ SYS\\ 4.0\\0\t\\b +CONFIG.SYS\n#>>&06\t\tstring\tx\t\t\t\\b:%s\n>0x187\tsearch/0xB55\tAUTOEXECBAT\\ 4.0\\0\t\\b +AUTOEXEC.BAT\n#>>&06\t\tstring\tx\t\t\t\\b:%s\n\n# DOS EPS Binary File Header\n# From: Ed Sznyter <ews@Black.Market.NET>\n0\tbelong\t\t0xC5D0D3C6\tDOS EPS Binary File\n>4\tlong\t\t>0\t\tPostscript starts at byte %d\n>>8\tlong\t\t>0\t\tlength %d\n>>>12\tlong\t\t>0\t\tMetafile starts at byte %d\n>>>>16\tlong\t\t>0\t\tlength %d\n>>>20\tlong\t\t>0\t\tTIFF starts at byte %d\n>>>>24\tlong\t\t>0\t\tlength %d\n\n# TNEF magic From \"Joomy\" <joomy@se-ed.net> \n# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)\n0\tleshort\t\t0x223e9f78\tTNEF\n!:mime\tapplication/vnd.ms-tnef\n\n# Norton Guide (.NG , .HLP) files added by Joerg Jenderek from source NG2HTML.C\n# of http://www.davep.org/norton-guides/ng2h-105.tgz\n# http://en.wikipedia.org/wiki/Norton_Guides\n0\tstring\t\tNG\\0\\001\t\n# only value 0x100 found at offset 2\n>2\tulelong\t\t0x00000100\tNorton Guide\n# Title[40]\n>>8\tstring\t\t>\\0\t\t\"%-.40s\"\n#>>6\tuleshort\tx\t\t\\b, MenuCount=%u\n# szCredits[5][66]\n>>48\tstring\t\t>\\0\t\t\\b, %-.66s\n>>114\tstring\t\t>\\0\t\t%-.66s\n\n# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS \n# of http://www.4dos.info/\n# pointer,HelpID[8]=4DHnnnmm\n0\tulelong\t0x48443408\t\t4DOS help file\n>4\tstring\tx\t\t\t\\b, version %-4.4s\n\n# old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp\n0\tulequad\t0x3a000000024e4c\tMS Advisor help file\n\n# HtmlHelp files (.chm)\n0\tstring/b\tITSF\\003\\000\\000\\000\\x60\\000\\000\\000\\001\\000\\000\\000\tMS Windows HtmlHelp Data\n\n# GFA-BASIC (Wolfram Kleff)\n2\tstring/b\tGFA-BASIC3\tGFA-BASIC 3 data\n\n#------------------------------------------------------------------------------\n# From Stuart Caie <kyzer@4u.net> (developer of cabextract)\n# Microsoft Cabinet files\n0\tstring/b\tMSCF\\0\\0\\0\\0\tMicrosoft Cabinet archive data\n!:mime application/vnd.ms-cab-compressed\n>8\tlelong\t\tx\t\t\\b, %u bytes\n>28\tleshort\t\t1\t\t\\b, 1 file\n>28\tleshort\t\t>1\t\t\\b, %u files\n\n# InstallShield Cabinet files\n0\tstring/b\tISc(\t\tInstallShield Cabinet archive data\n>5\tbyte&0xf0\t=0x60\t\tversion 6,\n>5\tbyte&0xf0\t!0x60\t\tversion 4/5,\n>(12.l+40)\tlelong\tx\t\t%u files\n\n# Windows CE package files\n0\tstring/b\tMSCE\\0\\0\\0\\0\tMicrosoft WinCE install header\n>20\tlelong\t\t0\t\t\\b, architecture-independent\n>20\tlelong\t\t103\t\t\\b, Hitachi SH3\n>20\tlelong\t\t104\t\t\\b, Hitachi SH4\n>20\tlelong\t\t0xA11\t\t\\b, StrongARM\n>20\tlelong\t\t4000\t\t\\b, MIPS R4000\n>20\tlelong\t\t10003\t\t\\b, Hitachi SH3\n>20\tlelong\t\t10004\t\t\\b, Hitachi SH3E\n>20\tlelong\t\t10005\t\t\\b, Hitachi SH4\n>20\tlelong\t\t70001\t\t\\b, ARM 7TDMI\n>52\tleshort\t\t1\t\t\\b, 1 file\n>52\tleshort\t\t>1\t\t\\b, %u files\n>56\tleshort\t\t1\t\t\\b, 1 registry entry\n>56\tleshort\t\t>1\t\t\\b, %u registry entries\n\n\n# Windows Enhanced Metafile (EMF)\n# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp \n# for further information.\n0\tulelong 1\n>40\tstring\t\\ EMF\t\tWindows Enhanced Metafile (EMF) image data\n>>44\tulelong x\t\tversion 0x%x\n\n# from http://filext.com by Derek M Jones <derek@knosof.co.uk>\n# False positive with PPT (also currently this string is too long)\n#0\tstring/b\t\\xD0\\xCF\\x11\\xE0\\xA1\\xB1\\x1A\\xE1\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3E\\x00\\x03\\x00\\xFE\\xFF\\x09\\x00\\x06\tMicrosoft Installer\n0\tstring/b\t\\320\\317\\021\\340\\241\\261\\032\\341\tMicrosoft Office Document\n#>48\tbyte\t0x1B\t\t\t\t\tExcel Document\n#!:mime application/vnd.ms-excel\n>546\tstring\tbjbj\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n>546\tstring\tjbjb\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n0\tstring/b\t\\224\\246\\056\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n512\tstring\tR\\0o\\0o\\0t\\0\\ \\0E\\0n\\0t\\0r\\0y\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# Magic type for Dell's BIOS .hdr files\n# Dell's .hdr\n0\tstring/b $RBU\n>23\tstring Dell\t\t\t%s system BIOS\n>5\tbyte   2\n>>48\tbyte   x\t\t\tversion %d.\n>>49\tbyte   x\t\t\t\\b%d.\n>>50\tbyte   x\t\t\t\\b%d\n>5\tbyte   <2\n>>48\tstring x\t\t\tversion %.3s\n\n# Type: Microsoft DirectDraw Surface\n# URL:\thttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp\n# From: Morten Hustveit <morten@debian.org>\n0\tstring/b\tDDS\\040\\174\\000\\000\\000 Microsoft DirectDraw Surface (DDS),\n>16\tlelong\t>0\t\t\t%d x\n>12\tlelong\t>0\t\t\t%d,\n>84\tstring\tx\t\t\t%.4s\n\n# Type: Microsoft Document Imaging Format (.mdi)\n# URL:\thttp://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format\n# From: Daniele Sempione <scrows@oziosi.org>\n0\tshort\t0x5045\t\t\tMicrosoft Document Imaging Format\n\n# MS eBook format (.lit)\n0\tstring/b\tITOLITLS\t\tMicrosoft Reader eBook Data\n>8\tlelong\tx\t\t\t\\b, version %u\n!:mime\t\t\t\t\tapplication/x-ms-reader\n\n# Windows CE Binary Image Data Format\n# From: Dr. Jesus <j@hug.gs>\n0\tstring/b\tB000FF\\n\tWindows Embedded CE binary image\n\n# Windows Imaging (WIM) Image\n0\tstring/b\tMSWIM\\000\\000\\000\tWindows imaging (WIM) image\n\n# The second byte of these signatures is a file version; I don't know what, \n# if anything, produced files with version numbers 0-2.\n# From: John Elliott <johne@seasip.demon.co.uk>\n0\tstring\t\\xfc\\x03\\x00\tMallard BASIC program data (v1.11)\n0\tstring\t\\xfc\\x04\\x00\tMallard BASIC program data (v1.29+)\n0\tstring\t\\xfc\\x03\\x01\tMallard BASIC protected program data (v1.11)\n0\tstring\t\\xfc\\x04\\x01\tMallard BASIC protected program data (v1.29+)\n\n0\tstring\tMIOPEN\t\tMallard BASIC Jetsam data\n0\tstring\tJetsam0\t\tMallard BASIC Jetsam index data\n\n\n#------------------------------------------------------------------------------\n# $File: msooxml,v 1.4 2014/01/06 18:16:24 rrt Exp $\n# msooxml:  file(1) magic for Microsoft Office XML\n# From: Ralf Brown <ralf.brown@gmail.com>\n\n# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP\n#   archive.  The first member file is normally \"[Content_Types].xml\".\n#   but some libreoffice generated files put this later. Perhaps skip\n#   the \"[Content_Types].xml\" test?\n# Since MSOOXML doesn't have anything like the uncompressed \"mimetype\"\n#   file of ePub or OpenDocument, we'll have to scan for a filename\n#   which can distinguish between the three types\n\n# start by checking for ZIP local file header signature\n0\t\tstring\t\tPK\\003\\004\n!:strength +10\n# make sure the first file is correct\n>0x1E\t\tregex\t\t\\\\[Content_Types\\\\]\\\\.xml|_rels/\\\\.rels\n# skip to the second local file header\n# since some documents include a 520-byte extra field following the file\n# header, we need to scan for the next header\n>>(18.l+49)\tsearch/2000\tPK\\003\\004\n# now skip to the *third* local file header; again, we need to scan due to a\n# 520-byte extra field following the file header\n>>>&26\t\tsearch/1000\tPK\\003\\004\n# and check the subdirectory name to determine which type of OOXML\n# file we have.  Correct the mimetype with the registered ones:\n# http://technet.microsoft.com/en-us/library/cc179224.aspx\n>>>>&26\t\tstring\t\tword/\t\tMicrosoft Word 2007+\n!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document\n>>>>&26\t\tstring\t\tppt/\t\tMicrosoft PowerPoint 2007+\n!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation\n>>>>&26\t\tstring\t\txl/\t\tMicrosoft Excel 2007+\n!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n>>>>&26\t\tdefault\t\tx\t\tMicrosoft OOXML\n\n#------------------------------------------------------------------------------\n# $File$\n# msvc:  file(1) magic for msvc\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Microsoft visual C\n# \n# I have version 1.0\n\n# .aps\n0\tstring\tHWB\\000\\377\\001\\000\\000\\000\tMicrosoft Visual C .APS file\n\n# .ide\n#too long 0\tstring\t\\102\\157\\162\\154\\141\\156\\144\\040\\103\\053\\053\\040\\120\\162\\157\\152\\145\\143\\164\\040\\106\\151\\154\\145\\012\\000\\032\\000\\002\\000\\262\\000\\272\\276\\372\\316\tMSVC .ide\n0\tstring\t\\102\\157\\162\\154\\141\\156\\144\\040\\103\\053\\053\\040\\120\\162\\157\tMSVC .ide\n\n# .res\n0\tstring\t\\000\\000\\000\\000\\040\\000\\000\\000\\377\tMSVC .res\n0\tstring\t\\377\\003\\000\\377\\001\\000\\020\\020\\350\tMSVC .res\n0\tstring\t\\377\\003\\000\\377\\001\\000\\060\\020\\350\tMSVC .res\n\n#.lib\n0\tstring\t\\360\\015\\000\\000\tMicrosoft Visual C library\n0\tstring\t\\360\\075\\000\\000\tMicrosoft Visual C library\n0\tstring\t\\360\\175\\000\\000\tMicrosoft Visual C library\n\n#.pch\n0\tstring\tDTJPCH0\\000\\022\\103\\006\\200\tMicrosoft Visual C .pch\n\n# .pdb\n# too long 0\tstring\tMicrosoft\\ C/C++\\ program\\ database\\ \n0\tstring\tMicrosoft\\ C/C++\\ \tMSVC program database\n>18\tstring\tprogram\\ database\\ \t\n>33\tstring\t>\\0\tver %s\n\n#.sbr\n0\tstring\t\\000\\002\\000\\007\\000\tMSVC .sbr\n>5\tstring \t>\\0\t%s\n\n#.bsc\n0\tstring\t\\002\\000\\002\\001\tMSVC .bsc\n\n#.wsp\n0\tstring\t1.00\\ .0000.0000\\000\\003\tMSVC .wsp version 1.0000.0000\n# these seem to start with the version and contain menus\n\n#------------------------------------------------------------------------------\n# msx:  file(1) magic for the MSX Home Computer\n# v1.1\n# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>\n\n############## MSX Music file formats ##############\n\n# Gigamix MGSDRV music file\n0\tstring\t\tMGS\tMSX Gigamix MGSDRV3 music file, \n>6\tubeshort\t0x0D0A\n>>3\tbyte\t\tx\t\\bv%c\n>>4\tbyte\t\tx\t\\b.%c\n>>5\tbyte\t\tx\t\\b%c\n>>8\tstring\t\t>\\0\t\\b, title: %s\n\n1\tstring\t\tmgs2\\ \tMSX Gigamix MGSDRV2 music file\n>6\tuleshort\t0x80\n>>0x2E\tuleshort\t0\n>>>0x30\tstring\t\t>\\0\t\\b, title: %s\n\n# KSS music file\n0\tstring\t\tKSCC\tKSS music file v1.03\n>0xE\tbyte\t\t0\n>>0xF\tbyte&0x02\t0\t\\b, soundchips: AY-3-8910, SCC(+)\n>>0xF\tbyte&0x02\t2\t\\b, soundchip(s): SN76489\n>>>0xF\tbyte&0x04\t4\tstereo\n>>0xF\tbyte&0x01\t1\t\\b, YM2413\n>>0xF\tbyte&0x08\t8\t\\b, Y8950\n\n0\tstring\t\tKSSX\tKSS music file v1.20\n>0xE\tbyte&0xEF\t0\n>>0xF\tbyte&0x40\t0x00\t\\b, 60Hz\n>>0xF\tbyte&0x40\t0x40\t\\b, 50Hz\n>>0xF\tbyte&0x02\t0\t\\b, soundchips: AY-3-8910, SCC(+)\n>>0xF\tbyte&0x02\t0x02\t\\b, soundchips: SN76489\n>>>0xF\tbyte&0x04\t0x04\tstereo\n>>0xF\tbyte&0x01\t0x01\t\\b, \n>>>0xF\tbyte&0x18\t0x00\t\\bYM2413\n>>>0xF\tbyte&0x18\t0x08\t\\bYM2413, Y8950\n>>>0xF\tbyte&0x18\t0x18\t\\bYM2413+Y8950 pseudostereo\n>>0xF\tbyte&0x18\t0x10\t\\b, Majyutsushi DAC\n\n# Moonblaster for Moonsound\n0\tstring\t\tMBMS\n>4\tbyte\t\t0x10\tMSX Moonblaster for MoonSound music\n\n# Music Player K-kaz\n0\tstring\t\tMPK\tMSX Music Player K-kaz song\n>6\tubeshort\t0x0D0A\n>>3\tbyte\t\tx\tv%c\n>>4\tbyte\t\tx\t\\b.%c\n>>5\tbyte\t\tx\t\\b%c\n\n# I don't know why these don't work\n#0\tsearch/0xFFFF\t\\r\\n.FM9\n#>0\tsearch/0xFFFF\t\\r\\n#FORMAT\tMSX Music Player K-kaz source MML file\n#0\tsearch/0xFFFF\t\\r\\nFM1\\ \\=\n#>0\tsearch/0xFFFF\t\\r\\nPSG1\\=\n#>>0\tsearch/0xFFFF\t\\r\\nSCC1\\=\t\tMSX MuSiCa MML source file\n\n# OPX Music file\n0x35\tbeshort\t\t0x0d0a\n>0x7B\tbeshort\t\t0x0d0a\n>>0x7D\tbyte\t\t0x1a\n>>>0x87\tuleshort\t0\t\tMSX OPX Music file\n>>>>0x86\tbyte\t\t0\t\tv1.5\n>>>>>0\tstring\t\t>\\32\t\t\\b, title: %s\n>>>>0x86\tbyte\t\t1\t\tv2.4\n>>>>>0\tstring\t\t>\\32\t\t\\b, title: %s\n\n# SCMD music file\n0x8B\tstring\t\tSCMD\n>0xCE\tuleshort\t0\tMSX SCMD Music file\n#>>-2\tuleshort\t0x6a71\t; The file must end with this value. How to code this here?\n>>0x8F\tstring\t\t>\\0\t\t\\b, title: %s\n\n0\tsearch/0xFFFF\t\\r\\n@title\n>&0\tsearch/0xFFFF\t\\r\\n@m=[\tMSX SCMD source MML file\n\n\n############## MSX image file formats ##############\n\n# MSX raw VRAM dump\n0\tubyte\t\t0xFE\n>1\tuleshort\t0\n>>5\tuleshort\t0\n>>>3\tuleshort\t0x37FF\t\tMSX SC2/GRP raw image\n>>>3\tuleshort\t0x6A00\t\tMSX Graph Saurus SR5 raw image\n>>>3\tuleshort\t>0x769E\n>>>>3\tuleshort\t<0x8000\t\tMSX GE5/GE6 raw image\n>>>>>3\tuleshort\t0x7FFF\t\t\\b, with sprite patterns\n>>>3\tuleshort\t0xD3FF\t\tMSX screen 7-12 raw image\n>>>3\tuleshort\t0xD400\t\tMSX Graph Saurus SR7/SR8/SRS raw image\n\n# Graph Saurus compressed images\n0\tubyte\t\t0xFD\n>1\tuleshort\t0\n>>5\tuleshort\t0\n>>>3\tuleshort\t>0x013D\t\tMSX Graph Saurus compressed image\n\n# Maki-chan Graphic format\n0\tstring\t\tMAKI02\\ \\ \tMaki-chan image,\n>8\tbyte\t\tx\t\tsystem ID: %c\n>9\tbyte\t\tx\t\t\\b%c\n>10\tbyte\t\tx\t\t\\b%c\n>11\tbyte\t\tx\t\t\\b%c,\n>13\tsearch/0x200\t\\x1A\n# >>&3\tubyte\t\t0\t\t, video mode: PC-98 400 lines, 16 analog colors\n# >>&3\tubyte\t\t1\t\t, video mode: MSX SC7, 16 analog colors\n# >>&3\tubyte\t\t2\t\t, video mode: VM-98 400 lines, 8 analog colors\n# >>&3\tubyte\t\t3\t\t, video mode: PC-88 analog, 200 lines, 8 analog colors\n# >>&3\tubyte\t\t4\t\t, video mode: 400 lines, 16 digital colors\n# >>&3\tubyte\t\t5\t\t, video mode: 200 lines, 16 digital colors\n# >>&3\tubyte\t\t6\t\t, video mode: old PC-98 digital 400 lines, 8 colors\n# >>&3\tubyte\t\t7\t\t, video mode: PC-88 400 lines, 8 digital colors\n>>&8\tuleshort+1\tx\t\t%dx\n>>&10\tuleshort+1\tx\t\t\\b%d,\n>>&3\tubyte&0x82\t0x80\t\t256 colors\n>>&3\tubyte&0x82\t0x00\t\t16 colors\n>>&3\tubyte&0x82\t0x01\t\t8 colors\n>>&3\tubyte&0x04\t4\t\tdigital\n>>&3\tubyte&0x04\t0\t\tanalog\n>>&3\tubyte&0x01\t1\t\t\\b, 2:1 dot aspect ratio\n\n# Japanese PIC file\n0\tstring\t\tPIC\\x1A\n>4\tlelong\t\t0\t\tJapanese PIC image file\n\n# MSX G9B image file\n0\tstring\t\tG9B\n>1\tuleshort\t11\n>>3\tuleshort\t>10\n>>>5\tubyte\t\t>0\t\tMSX G9B image, depth=%d\n>>>>8\tuleshort\tx\t\t\\b, %dx\n>>>>10\tuleshort\tx\t\t\\b%d\n>>>>5\tubyte\t\t<9\n>>>>>6\tubyte\t\t0\n>>>>>>7\tubyte\t\tx\t\t\\b, codec=%d RGB color palettes\n>>>>>6\tubyte\t\t64\t\t\\b, codec=RGB fixed color\n>>>>>6\tubyte\t\t128\t\t\\b, codec=YJK\n>>>>>6\tubyte\t\t192\t\t\\b, codec=YUV\n>>>>5\tubyte\t\t>8\t\tcodec=RGB fixed color\n>>>>12\tubyte\t\t0\t\t\\b, raw\n>>>>12\tubyte\t\t1\t\t\\b, bitbuster compression\n\n############## Other MSX file formats ##############\n\n# MSX ROMs\n0\tstring\t\tAB\n>2\tuleshort\t0x0010\t\t\tMSX ROM\n>>2\tuleshort\tx\t\t\t\\b, init=0x%4x\n>>4\tuleshort\t>0\t\t\t\\b, stat=0x%4x\n>>6\tuleshort\t>0\t\t\t\\b, dev=0x%4x\n>>8\tuleshort\t>0\t\t\t\\b, bas=0x%4x\n>2\tuleshort\t0x4010\t\t\tMSX ROM\n>>2\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>4\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>6\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>8\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n>2\tuleshort\t0x8010\t\t\tMSX ROM\n>>2\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>4\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>6\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>8\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n\n0\tstring\t\tAB\n#>2\tstring\t\t5JSuperLAYDOCK\t\tMSX Super Laydock ROM\n#>3\tstring\t\t@HYDLIDE3MSX\t\tMSX Hydlide-3 ROM\n#>3\tstring\t\t@3\\x80IA862\t\tGolvellius MSX1 ROM\n>2\tuleshort\t>10\n>>10\tstring\t\t\\0\\0\\0\\0\\0\\0\t\tMSX ROM\n>>>0x10\tstring\t\tYZ\\0\\0\\0\\0\t\tKonami Game Master 2 MSX ROM\n>>>0x10\tstring\t\tCD\t\t\t\\b, Konami RC-\n>>>>0x12\tubyte\t\tx\t\t\t\\b%d\n>>>>0x13\tubyte/16\tx\t\t\t\\b%d\n>>>>0x13\tubyte&0xF\tx\t\t\t\\b%d\n>>>0x10\tstring\t\tEF\t\t\t\\b, Konami RC-\n>>>>0x12\tubyte\t\tx\t\t\t\\b%d\n>>>>0x13\tubyte/16\tx\t\t\t\\b%d\n>>>>0x13\tubyte&0xF\tx\t\t\t\\b%d\n>>>2\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>>4\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>>6\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>>8\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n>2\tuleshort\t0\n>>4\tuleshort\t0\n>>>6\tuleshort\t0\n>>>>8\tuleshort\t>0\t\t\tMSX BASIC program in ROM, bas=0x%04x\n\n0x4000\tstring\t\tAB\n>0x4002\tuleshort\t>0x4010\n>>0x400A\tstring\t\t\\0\\0\\0\\0\\0\\0\tMSX MegaROM with nonstandard page order\n>>0x4002\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>0x4004\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>0x4006\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>0x4008\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n\n0x8000\tstring\t\tAB\n>0x8002\tuleshort\t>0x4010\n>>0x800A\tstring\t\t\\0\\0\\0\\0\\0\\0\tMSX MegaROM with nonstandard page order\n>>0x8002\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>0x8004\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>0x8006\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>0x8008\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n\n\n0x3C000\tstring\t\tAB\n>0x3C008\tstring\t\t\\0\\0\\0\\0\\0\\0\\0\\0\tMSX MegaROM with nonstandard page order\n>>0x3C002\tuleshort\tx\t\t\t\\b, init=0x%04x\n>>0x3C004\tuleshort\t>0\t\t\t\\b, stat=0x%04x\n>>0x3C006\tuleshort\t>0\t\t\t\\b, dev=0x%04x\n>>0x3C008\tuleshort\t>0\t\t\t\\b, bas=0x%04x\n\n# MSX BIN file\n#0\tbyte\t\t0xFE\n#>1\tuleshort\t>0x8000\n#>>3\tuleshort\t>0x8004\n#>>>5\tuleshort\t>0x8000\t\t\tMSX BIN file\n\n# MSX-BASIC file\n0\tbyte\t\t0xFF\n>3\tuleshort\t0x000A\n>>1\tuleshort\t>0x8000\t\t\tMSX-BASIC program\n\n# MSX .CAS file\n0\tstring\t\\x1F\\xA6\\xDE\\xBA\\xCC\\x13\\x7D\\x74\tMSX cassette archive\n\n# Mega-Assembler file\n0\tbyte\t\t0xFE\n>1\tuleshort\t0x0001\n>>5\tuleshort\t0xffff\n>>>6\tbyte\t\t0x0A\t\tMSX Mega-Assembler source\n\n# Execrom Patchfile\n0\tstring\t\tExecROM\\ patchfile\\x1A\tMSX ExecROM patchfile\n>0x12\tubyte/16\tx\t\tv%d\n>0x12\tubyte&0xF\tx\t\t\\b.%d\n>0x13\tubyte\t\tx\t\t\\b, contains %d patches\n\n# Konami's King's Valley-2 custom stage (ELG file)\n4\tuleshort\t0x0900\n>0xF\tbyte\t\t1\n>>0x14\tbyte\t\t0\n>>>0x1E\tstring\t\t\\ \\ \\ \n>>>>0x23\tbyte\t1\n>>>>>0x25\tbyte\t0\n>>>>>>0x15\tstring\t>\\x30\n>>>>>>>0x15\tstring\t<\\x5A\t\tKonami King's Valley-2 custom stage, title: \"%-8.8s\"\n>>>>>>>>0x1D\tbyte\t<32\t\\b, theme: %d\n\n# Metal Gear 1 savegame\n#0x4F\tstring\t\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\n#>>0x60\tstring\t\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\n#>>>0x7B\tstring\t\\0x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\tMetal Gear 1 savegame\n\n# ------------------------------------------------------------------------\n# $File$\n# mup: file(1) magic for Mup (Music Publisher) input file.\n#\n# From: Abel Cheung <abel (@) oaka.org>\n#\n# NOTE: This header is mainly proposed in the Arkkra mailing list,\n# and is not a mandatory header because of old mup input file\n# compatibility. Noteedit also use mup format, but is not forcing\n# user to use any header as well.\n#\n0\t\tsearch/1\t//!Mup\t\tMup music publication program input text\n>6\t\tstring\t\t-Arkkra\t\t(Arkkra)\n>>13\t\tstring\t\t-\t\t\n>>>16\t\tstring\t\t.\t\t\n>>>>14\t\tstring\t\tx\t\t\\b, need V%.4s\n>>>15\t\tstring\t\t.\t\t\n>>>>14\t\tstring\t\tx\t\t\\b, need V%.3s\n>6\t\tstring\t\t-\t\t\n>>9\t\tstring\t\t.\t\t\n>>>7\t\tstring\t\tx\t\t\\b, need V%.4s\n>>8\t\tstring\t\t.\t\t\n>>>7\t\tstring\t\tx\t\t\\b, need V%.3s\n#------------------------------------------------------------------------------\n# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $\n# music:  file (1) magic for music formats\n\n# BWW format used by Bagpipe Music Writer Gold by Robert MacNeil Musicworks\n# and Bagpipe Writer by Doug Wickstrom\n#\n0\tstring\t\tBagpipe\t\tBagpipe\n>8\tstring\t\tReader\t\tReader\n>>15\tstring\t\t>\\0\t\t(version %.3s)\n>8\tstring\t\tMusic\\ Writer\tMusic Writer\n>>20\tstring\t\t:\n>>>21\tstring\t\t>\\0\t\t(version %.3s)\n>>21\tstring\t\tGold\t\tGold\n>>>25\tstring\t\t:\n>>>>26\tstring\t\t>\\0\t\t(version %.3s)\n\n\n#-----------------------------------------------------------------------------\n# $File: natinst,v 1.5 2013/02/06 14:18:52 christos Exp $\n# natinst:  file(1) magic for National Instruments Code Files\n\n#\n# From <egamez@fcfm.buap.mx> Enrique Gamez-Flores\n# version 1\n# Many formats still missing, we use, for the moment LabVIEW\n# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing\n#\n0       string          RSRC            National Instruments,\n# Check if it's a LabVIEW File\n>8      string          LV              LabVIEW File,\n# Check which kind of file it is\n>>10    string          SB              Code Resource File, data\n>>10    string          IN              Virtual Instrument Program, data\n>>10    string          AR              VI Library, data\n# This is for Menu Libraries\n>8      string          LMNULBVW        Portable File Names, data\n# This is for General Resources\n>8      string          rsc             Resources File, data\n# This is for VXI Package\n0       string          VMAP            National Instruments, VXI File, data\n\n#------------------------------------------------------------------------------\n# $File: ncr,v 1.7 2009/09/19 16:28:11 christos Exp $\n# ncr:  file(1) magic for NCR Tower objects\n#\n# contributed by\n# Michael R. Wayne  ***  TMC & Associates  ***  INTERNET: wayne@ford-vax.arpa\n# uucp: {philabs | pyramid} !fmsrl7!wayne   OR   wayne@fmsrl7.UUCP\n#\n0\tbeshort\t\t000610\tTower/XP rel 2 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000615\tTower/XP rel 2 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000620\tTower/XP rel 3 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000625\tTower/XP rel 3 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000630\tTower32/600/400 68020 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000640\tTower32/800 68020\n>18\t   beshort\t\t&020000\tw/68881 object\n>18\t   beshort\t\t&040000\tcompatible object\n>18\t   beshort\t\t&060000\tobject\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0413\tpure executable\n>12\t   belong\t\t>0\tnot stripped\n>22\t   beshort\t\t>0\t- version %d\n0\tbeshort\t\t000645\tTower32/800 68010\n>18\t   beshort\t\t&040000\tcompatible object\n>18\t   beshort\t\t&060000 object\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0413\tpure executable\n>12\t   belong\t\t>0\tnot stripped\n>22\t   beshort\t\t>0\t- version %d\n\n#------------------------------------------------------------\n# $File: java,v 1.12 2009/09/19 16:28:10 christos Exp $\n\n# From: Mikhail Gusarov <dottedmag@dottedmag.net>\n# NekoVM (http://nekovm.org/) bytecode\n0\tstring\t\tNEKO\tNekoVM bytecode\n>4\tlelong\t\tx\t(%d global symbols,\n>8\tlelong\t\tx\t%d global fields,\n>12\tlelong\t\tx\t%d bytecode ops)\n!:mime\tapplication/x-nekovm-bytecode\n\n\n#------------------------------------------------------------------------------\n# $File: netbsd,v 1.21 2014/03/29 15:40:34 christos Exp $\n# netbsd:  file(1) magic for NetBSD objects\n#\n# All new-style magic numbers are in network byte order.\n# The old-style magic numbers are indistinguishable from the same magic\n# numbers used in other systems, and are handled, for all those systems,\n# in aout.\n#\n\n0\tbelong&0377777777\t041400413\ta.out NetBSD/i386 demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400410\ta.out NetBSD/i386 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400407\ta.out NetBSD/i386\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400507\ta.out NetBSD/i386 core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t041600413\ta.out NetBSD/m68k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600410\ta.out NetBSD/m68k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600407\ta.out NetBSD/m68k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600507\ta.out NetBSD/m68k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042000413\ta.out NetBSD/m68k4k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<4096\t\tshared library\n>>20\tbelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000410\ta.out NetBSD/m68k4k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000407\ta.out NetBSD/m68k4k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000507\ta.out NetBSD/m68k4k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042200413\ta.out NetBSD/ns32532 demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200410\ta.out NetBSD/ns32532 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200407\ta.out NetBSD/ns32532\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200507\ta.out NetBSD/ns32532 core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t045200507\ta.out NetBSD/powerpc core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n\n0\tbelong&0377777777\t042400413\ta.out NetBSD/SPARC demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400410\ta.out NetBSD/SPARC pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400407\ta.out NetBSD/SPARC\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400507\ta.out NetBSD/SPARC core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042600413\ta.out NetBSD/pmax demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600410\ta.out NetBSD/pmax pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600407\ta.out NetBSD/pmax\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600507\ta.out NetBSD/pmax core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043000413\ta.out NetBSD/vax 1k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000410\ta.out NetBSD/vax 1k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000407\ta.out NetBSD/vax 1k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000507\ta.out NetBSD/vax 1k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t045400413\ta.out NetBSD/vax 4k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400410\ta.out NetBSD/vax 4k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400407\ta.out NetBSD/vax 4k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400507\ta.out NetBSD/vax 4k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n# NetBSD/alpha does not support (and has never supported) a.out objects,\n# so no rules are provided for them.  NetBSD/alpha ELF objects are \n# dealt with in \"elf\".\n0\tlelong\t\t0x00070185\t\tECOFF NetBSD/alpha binary\n>10\tleshort\t\t0x0001\t\t\tnot stripped\n>10\tleshort\t\t0x0000\t\t\tstripped\n0\tbelong&0377777777\t043200507\ta.out NetBSD/alpha core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043400413\ta.out NetBSD/mips demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400410\ta.out NetBSD/mips pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400407\ta.out NetBSD/mips\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400507\ta.out NetBSD/mips core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043600413\ta.out NetBSD/arm32 demand paged\n>0\tbyte\t\t\t&0x80\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043600410\ta.out NetBSD/arm32 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043600407\ta.out NetBSD/arm32\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n# NetBSD/arm26 has always used ELF objects, but it shares a core file\n# format with NetBSD/arm32.\n0\tbelong&0377777777\t043600507\ta.out NetBSD/arm core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n# Kernel core dump format\n0\tbelong&0x0000ffff 0x00008fca\tNetBSD kernel core file\n>0\tbelong&0x03ff0000 0x00000000\t\\b, Unknown\n>0\tbelong&0x03ff0000 0x00010000\t\\b, sun 68010/68020\n>0\tbelong&0x03ff0000 0x00020000\t\\b, sun 68020\n>0\tbelong&0x03ff0000 0x00640000\t\\b, 386 PC\n>0\tbelong&0x03ff0000 0x00860000\t\\b, i386 BSD\n>0\tbelong&0x03ff0000 0x00870000\t\\b, m68k BSD (8K pages)\n>0\tbelong&0x03ff0000 0x00880000\t\\b, m68k BSD (4K pages)\n>0\tbelong&0x03ff0000 0x00890000\t\\b, ns32532 BSD\n>0\tbelong&0x03ff0000 0x008a0000\t\\b, SPARC/32 BSD\n>0\tbelong&0x03ff0000 0x008b0000\t\\b, pmax BSD\n>0\tbelong&0x03ff0000 0x008c0000\t\\b, vax BSD (1K pages)\n>0\tbelong&0x03ff0000 0x008d0000\t\\b, alpha BSD\n>0\tbelong&0x03ff0000 0x008e0000\t\\b, mips BSD (Big Endian)\n>0\tbelong&0x03ff0000 0x008f0000\t\\b, arm6 BSD\n>0\tbelong&0x03ff0000 0x00900000\t\\b, m68k BSD (2K pages)\n>0\tbelong&0x03ff0000 0x00910000\t\\b, sh3 BSD\n>0\tbelong&0x03ff0000 0x00950000\t\\b, ppc BSD (Big Endian)\n>0\tbelong&0x03ff0000 0x00960000\t\\b, vax BSD (4K pages)\n>0\tbelong&0x03ff0000 0x00970000\t\\b, mips1 BSD\n>0\tbelong&0x03ff0000 0x00980000\t\\b, mips2 BSD\n>0\tbelong&0x03ff0000 0x00990000\t\\b, m88k BSD\n>0\tbelong&0x03ff0000 0x00920000\t\\b, parisc BSD\n>0\tbelong&0x03ff0000 0x009b0000\t\\b, sh5/64 BSD\n>0\tbelong&0x03ff0000 0x009c0000\t\\b, SPARC/64 BSD\n>0\tbelong&0x03ff0000 0x009d0000\t\\b, amd64 BSD\n>0\tbelong&0x03ff0000 0x009e0000\t\\b, sh5/32 BSD\n>0\tbelong&0x03ff0000 0x009f0000\t\\b, ia64 BSD\n>0\tbelong&0x03ff0000 0x00b70000\t\\b, aarch64 BSD\n>0\tbelong&0x03ff0000 0x00b80000\t\\b, or1k BSD\n>0\tbelong&0x03ff0000 0x00b90000\t\\b, Risk-V BSD\n>0\tbelong&0x03ff0000 0x00c80000\t\\b, hp200 BSD\n>0\tbelong&0x03ff0000 0x012c0000\t\\b, hp300 BSD\n>0\tbelong&0x03ff0000 0x020b0000\t\\b, hp800 HP-UX\n>0\tbelong&0x03ff0000 0x020c0000\t\\b, hp200/hp300 HP-UX\n>0\tbelong&0xfc000000 0x04000000\t\\b, CPU\n>0\tbelong&0xfc000000 0x08000000\t\\b, DATA\n>0\tbelong&0xfc000000 0x10000000\t\\b, STACK\n>4\tleshort\tx\t\t\t\\b, (headersize = %d\n>6\tleshort\tx\t\t\t\\b, segmentsize = %d\n>6\tlelong\tx\t\t\t\\b, segments = %d)\n\n#------------------------------------------------------------------------------\n# $File$\n# netscape:  file(1) magic for Netscape files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# version 3 and 4 I think\n#\n\n# Netscape Address book  .nab\n0\tstring \\000\\017\\102\\104\\000\\000\\000\\000\\000\\000\\001\\000\\000\\000\\000\\002\\000\\000\\000\\002\\000\\000\\004\\000 Netscape Address book\n\n# Netscape Communicator address book\n0   string   \\000\\017\\102\\111 Netscape Communicator address book\n\n# .snm Caches\n0\tstring\t\t#\\ Netscape\\ folder\\ cache\tNetscape folder cache\n0\tstring\t\\000\\036\\204\\220\\000\tNetscape folder cache\n# .n2p \n# Net 2 Phone \n#0\tstring\t123\\130\\071\\066\\061\\071\\071\\071\\060\\070\\061\\060\\061\\063\\060\n0\tstring\tSX961999\tNet2phone\n\n#\n#This is files ending in .art, FIXME add more rules\n0       string          JG\\004\\016\\0\\0\\0\\0      ART\n\n#------------------------------------------------------------------------------\n# $File$\n# netware:  file(1) magic for NetWare Loadable Modules (NLMs)\n# From: Mads Martin Joergensen <mmj@suse.de>\n\n0\tstring\tNetWare\\ Loadable\\ Module\tNetWare Loadable Module\n\n#------------------------------------------------------------------------------\n# $File$\n# news:  file(1) magic for SunOS NeWS fonts (not \"news\" as in \"netnews\")\n#\n0\tstring\t\tStartFontMetrics\tASCII font metrics\n0\tstring\t\tStartFont\tASCII font bits\n0\tbelong\t\t0x137A2944\tNeWS bitmap font\n0\tbelong\t\t0x137A2947\tNeWS font family\n0\tbelong\t\t0x137A2950\tscalable OpenFont binary\n0\tbelong\t\t0x137A2951\tencrypted scalable OpenFont binary\n8\tbelong\t\t0x137A2B45\tX11/NeWS bitmap font\n8\tbelong\t\t0x137A2B48\tX11/NeWS font family\n\n#------------------------------------------------------------------------------\n# $File: nitpicker,v 1.5 2014/04/28 12:04:50 christos Exp $\n# nitpicker:  file(1) magic for Flowfiles.\n# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de\n0\tstring\tNPFF\tNItpicker Flow File \n>4\tbyte\tx\tV%d.\n>5\tbyte\tx\t%d\n>6\tbedate\tx\tstarted: %s\n>10\tbedate\tx\tstopped: %s\n>14\tbelong\tx\tBytes: %u\n>18\tbelong\tx\tBytes1: %u\n>22\tbelong\tx\tFlows: %u\n>26\tbelong\tx\tPkts: %u\n\n#------------------------------------------------------------------------------\n# $File: oasis,v 1.1 2011/03/15 02:09:38 christos Exp $\n# OASIS\n# Summary: OASIS stream file\n# Long description: Open Artwork System Interchange Standard\n# File extension: .oas\n# Full name:\tBen Cowley (bcowley@broadcom.com)\n#\t\tPhilip Dixon (pdixon@broadcom.com)\n# Reference: http://www.wrcad.com/oasis/oasis-3626-042303-draft.pdf\n#\t\t(see page 3)\n0\tstring\t%SEMI-OASIS\\r\\n\t\tOASIS Stream file\n\n#------------------------------------------------------------------------------\n# $File: ocaml,v 1.4 2009/09/19 16:28:11 christos Exp $\n# ocaml: file(1) magic for Objective Caml files.\n0\tstring\tCaml1999\tOCaml\n>8\tstring\tX\t\texec file\n>8\tstring\tI\t\tinterface file (.cmi)\n>8\tstring\tO\t\tobject file (.cmo)\n>8\tstring\tA\t\tlibrary file (.cma)\n>8\tstring\tY\t\tnative object file (.cmx)\n>8\tstring\tZ\t\tnative library file (.cmxa)\n>8\tstring\tM\t\tabstract syntax tree implementation file\n>8\tstring\tN\t\tabstract syntax tree interface file\n>9\tstring\t>\\0\t\t(Version %3.3s)\n\n#------------------------------------------------------------------------------\n# $File$\n# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>\n0\tstring\t\tOctave-1-L\tOctave binary data (little endian)\n0\tstring\t\tOctave-1-B\tOctave binary data (big endian)\n\n#------------------------------------------------------------------------------\n# $File$\n# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured\n# storage (http://en.wikipedia.org/wiki/Structured_Storage)\n# Additional tests for OLE 2 Compound Documents should be under this recipe.\n\n0   string  \\320\\317\\021\\340\\241\\261\\032\\341      OLE 2 Compound Document\n# - Microstation V8 DGN files (www.bentley.com)\n#   Last update on 10/23/2006 by Lester Hightower\n> 0x480  string  D\\000g\\000n\\000~\\000H                : Microstation V8 DGN\n# - Visio documents\n#   Last update on 10/23/2006 by Lester Hightower\n> 0x480  string  V\\000i\\000s\\000i\\000o\\000D\\000o\\000c : Visio Document\n\n#------------------------------------------------------------------------------\n# $File$\n# olf:  file(1) magic for OLF executables\n#\n# We have to check the byte order flag to see what byte order all the\n# other stuff in the header is in.\n#\n# MIPS R3000 may also be for MIPS R2000.\n# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?\n#\n# Created by Erik Theisen <etheisen@openbsd.org>\n# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tstring\t\t\\177OLF\t\tOLF\n>4\tbyte\t\t0\t\tinvalid class\n>4\tbyte\t\t1\t\t32-bit\n>4\tbyte\t\t2\t\t64-bit\n>7\tbyte\t\t0\t\tinvalid os\n>7\tbyte\t\t1\t\tOpenBSD\n>7\tbyte\t\t2\t\tNetBSD\n>7\tbyte\t\t3\t\tFreeBSD\n>7\tbyte\t\t4\t\t4.4BSD\n>7\tbyte\t\t5\t\tLinux\n>7\tbyte\t\t6\t\tSVR4\n>7\tbyte\t\t7\t\tesix\n>7\tbyte\t\t8\t\tSolaris\n>7\tbyte\t\t9\t\tIrix\n>7\tbyte\t\t10\t\tSCO\n>7\tbyte\t\t11\t\tDell\n>7\tbyte\t\t12\t\tNCR\n>5\tbyte\t\t0\t\tinvalid byte order\n>5\tbyte\t\t1\t\tLSB\n>>16\tleshort\t\t0\t\tno file type,\n>>16\tleshort\t\t1\t\trelocatable,\n>>16\tleshort\t\t2\t\texecutable,\n>>16\tleshort\t\t3\t\tshared object,\n# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>\n# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>\n>>16\tleshort\t\t4\t\tcore file\n>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n>>>(0x38+0x10) lelong\t>0\t\t(signal %d),\n>>16\tleshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tleshort\t\t0\t\tno machine,\n>>18\tleshort\t\t1\t\tAT&T WE32100 - invalid byte order,\n>>18\tleshort\t\t2\t\tSPARC - invalid byte order,\n>>18\tleshort\t\t3\t\tIntel 80386,\n>>18\tleshort\t\t4\t\tMotorola 68000 - invalid byte order,\n>>18\tleshort\t\t5\t\tMotorola 88000 - invalid byte order,\n>>18\tleshort\t\t6\t\tIntel 80486,\n>>18\tleshort\t\t7\t\tIntel 80860,\n>>18\tleshort\t\t8\t\tMIPS R3000_BE - invalid byte order,\n>>18\tleshort\t\t9\t\tAmdahl - invalid byte order,\n>>18\tleshort\t\t10\t\tMIPS R3000_LE,\n>>18\tleshort\t\t11\t\tRS6000 - invalid byte order,\n>>18\tleshort\t\t15\t\tPA-RISC - invalid byte order,\n>>18\tleshort\t\t16\t\tnCUBE,\n>>18\tleshort\t\t17\t\tVPP500,\n>>18\tleshort\t\t18\t\tSPARC32PLUS,\n>>18\tleshort\t\t20\t\tPowerPC,\n>>18\tleshort\t\t0x9026\t\tAlpha,\n>>20\tlelong\t\t0\t\tinvalid version\n>>20\tlelong\t\t1\t\tversion 1\n>>36\tlelong\t\t1\t\tMathCoPro/FPU/MAU Required\n>8\tstring\t\t>\\0\t\t(%s)\n>5\tbyte\t\t2\t\tMSB\n>>16\tbeshort\t\t0\t\tno file type,\n>>16\tbeshort\t\t1\t\trelocatable,\n>>16\tbeshort\t\t2\t\texecutable,\n>>16\tbeshort\t\t3\t\tshared object,\n>>16\tbeshort\t\t4\t\tcore file,\n>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n>>>(0x38+0x10) belong\t>0\t\t(signal %d),\n>>16\tbeshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tbeshort\t\t0\t\tno machine,\n>>18\tbeshort\t\t1\t\tAT&T WE32100,\n>>18\tbeshort\t\t2\t\tSPARC,\n>>18\tbeshort\t\t3\t\tIntel 80386 - invalid byte order,\n>>18\tbeshort\t\t4\t\tMotorola 68000,\n>>18\tbeshort\t\t5\t\tMotorola 88000,\n>>18\tbeshort\t\t6\t\tIntel 80486 - invalid byte order,\n>>18\tbeshort\t\t7\t\tIntel 80860,\n>>18\tbeshort\t\t8\t\tMIPS R3000_BE,\n>>18\tbeshort\t\t9\t\tAmdahl,\n>>18\tbeshort\t\t10\t\tMIPS R3000_LE - invalid byte order,\n>>18\tbeshort\t\t11\t\tRS6000,\n>>18\tbeshort\t\t15\t\tPA-RISC,\n>>18\tbeshort\t\t16\t\tnCUBE,\n>>18\tbeshort\t\t17\t\tVPP500,\n>>18\tbeshort\t\t18\t\tSPARC32PLUS,\n>>18\tbeshort\t\t20\t\tPowerPC or cisco 4500,\n>>18\tbeshort\t\t21\t\tcisco 7500,\n>>18\tbeshort\t\t24\t\tcisco SVIP,\n>>18\tbeshort\t\t25\t\tcisco 7200,\n>>18\tbeshort\t\t36\t\tcisco 12000,\n>>18\tbeshort\t\t0x9026\t\tAlpha,\n>>20\tbelong\t\t0\t\tinvalid version\n>>20\tbelong\t\t1\t\tversion 1\n>>36\tbelong\t\t1\t\tMathCoPro/FPU/MAU Required\n\n#------------------------------------------------------------------------------\n# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $\n# os2:  file(1) magic for OS/2 files\n#\n\n# Provided 1998/08/22 by\n# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>\n1\tsearch/1\tInternetShortcut\tMS Windows 95 Internet shortcut text\n>17\tsearch/100\tURL= \t\t\t(URL=<\n>>&0\tstring\t\tx\t\t\t\\b%s>)\n\n# OS/2 URL objects\n# Provided 1998/08/22 by\n# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>\n#0\tstring\thttp:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(WWW) <http:%s>\n#0\tstring\tmailto:\t\t\tOS/2 URL object text\n#>7\tstring\t>\\\t\t\t(email) <%s>\n#0\tstring\tnews:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(Usenet) <%s>\n#0\tstring\tftp:\t\t\tOS/2 URL object text\n#>4\tstring\t>\\\t\t\t(FTP) <ftp:%s>\n#0\tstring\tfile:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(Local file) <%s>\n\n# >>>>> OS/2 INF/HLP <<<<<  (source: Daniel Dissett ddissett@netcom.com)\n# Carl Hauser (chauser.parc@xerox.com) and \n# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)\n# list the following header format in inf02a.doc:\n#\n#  int16 ID;           // ID magic word (5348h = \"HS\")\n#  int8  unknown1;     // unknown purpose, could be third letter of ID\n#  int8  flags;        // probably a flag word...\n#                      //  bit 0: set if INF style file\n#                      //  bit 4: set if HLP style file\n#                      // patching this byte allows reading HLP files\n#                      // using the VIEW command, while help files \n#                      // seem to work with INF settings here as well.\n#  int16 hdrsize;      // total size of header\n#  int16 unknown2;     // unknown purpose\n# \n0   string  HSP\\x01\\x9b\\x00 OS/2 INF\n>107 string >0                      (%s)\n0   string  HSP\\x10\\x9b\\x00     OS/2 HLP\n>107 string >0                      (%s)\n\n# OS/2 INI (this is a guess)\n0  string   \\xff\\xff\\xff\\xff\\x14\\0\\0\\0  OS/2 INI\n\n#------------------------------------------------------------------------------\n# $File$\n# os400:  file(1) magic for IBM OS/400 files\n#\n# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com\n# In spite of its quite variable format (due to internal memory page\n# length differences between CISC and RISC versions of the OS) the\n# SAVF structure hasn't suitable offsets to identify the catalog\n# header in the first descriptor where there are some useful infos,\n# so we must search in a somewhat large area for a particular string\n# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore\n# descriptor space) preceded by a two byte constant.\n#\n1090\t search/7393\t\\x19\\xDB\\xD8\\xE2\\xD9\\xC4\\xE2\\xE2\\xD7\\xC3 IBM OS/400 save file data\n>&212\t byte\t\t0x01\t\t\t \\b, created with SAVOBJ\n>&212\t byte\t\t0x02\t\t\t \\b, created with SAVLIB\n>&212\t byte\t\t0x07\t\t\t \\b, created with SAVCFG\n>&212\t byte\t\t0x08\t\t\t \\b, created with SAVSECDTA\n>&212\t byte\t\t0x0A\t\t\t \\b, created with SAVSECDTA\n>&212\t byte\t\t0x0B\t\t\t \\b, created with SAVDLO\n>&212\t byte\t\t0x0D\t\t\t \\b, created with SAVLICPGM\n>&212\t byte\t\t0x11\t\t\t \\b, created with SAVCHGOBJ\n>&213\t byte\t\t0x44\t\t\t \\b, at least V5R4 to open\n>&213\t byte\t\t0x43\t\t\t \\b, at least V5R3 to open\n>&213\t byte\t\t0x42\t\t\t \\b, at least V5R2 to open\n>&213\t byte\t\t0x41\t\t\t \\b, at least V5R1 to open\n>&213\t byte\t\t0x40\t\t\t \\b, at least V4R5 to open\n>&213\t byte\t\t0x3F\t\t\t \\b, at least V4R4 to open\n>&213\t byte\t\t0x3E\t\t\t \\b, at least V4R3 to open\n>&213\t byte\t\t0x3C\t\t\t \\b, at least V4R2 to open\n>&213\t byte\t\t0x3D\t\t\t \\b, at least V4R1M4 to open\n>&213\t byte\t\t0x3B\t\t\t \\b, at least V4R1 to open\n>&213\t byte\t\t0x3A\t\t\t \\b, at least V3R7 to open\n>&213\t byte\t\t0x35\t\t\t \\b, at least V3R6 to open\n>&213\t byte\t\t0x36\t\t\t \\b, at least V3R2 to open\n>&213\t byte\t\t0x34\t\t\t \\b, at least V3R1 to open\n>&213\t byte\t\t0x31\t\t\t \\b, at least V3R0M5 to open\n>&213\t byte\t\t0x30\t\t\t \\b, at least V2R3 to open\n\n#------------------------------------------------------------------------------\n# $File: os9,v 1.6 2009/09/19 16:28:11 christos Exp $\n#\n# Copyright (c) 1996 Ignatios Souvatzis. 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\n# are met:\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  \n# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n#\n#\n# OS9/6809 module descriptions:\n#\n0\tbeshort\t\t0x87CD\tOS9/6809 module:\n#\n>6\tbyte&0x0f\t0x00\tnon-executable\n>6\tbyte&0x0f\t0x01\tmachine language\n>6\tbyte&0x0f\t0x02\tBASIC I-code\n>6\tbyte&0x0f\t0x03\tPascal P-code\n>6\tbyte&0x0f\t0x04\tC I-code\n>6\tbyte&0x0f\t0x05\tCOBOL I-code\n>6\tbyte&0x0f\t0x06\tFortran I-code\n#\n>6\tbyte&0xf0\t0x10\tprogram executable\n>6\tbyte&0xf0\t0x20\tsubroutine\n>6\tbyte&0xf0\t0x30\tmulti-module\n>6\tbyte&0xf0\t0x40\tdata module\n#\n>6\tbyte&0xf0\t0xC0\tsystem module\n>6\tbyte&0xf0\t0xD0\tfile manager\n>6\tbyte&0xf0\t0xE0\tdevice driver\n>6\tbyte&0xf0\t0xF0\tdevice descriptor\n#\n# OS9/m68k stuff (to be continued)\n#\n0\tbeshort\t\t0x4AFC\tOS9/68K module:\n#\n# attr\n>0x14\tbyte&0x80\t0x80\tre-entrant\n>0x14\tbyte&0x40\t0x40\tghost\n>0x14\tbyte&0x20\t0x20\tsystem-state\n#\n# lang:\n#\n>0x13\tbyte\t\t1\tmachine language\n>0x13\tbyte\t\t2\tBASIC I-code\n>0x13\tbyte\t\t3\tPascal P-code\n>0x13\tbyte\t\t4\tC I-code\n>0x13\tbyte\t\t5\tCOBOL I-code\n>0x13\tbyte\t\t6\tFortran I-code\n#\n#\n# type:\n#\n>0x12\tbyte\t\t1\tprogram executable\n>0x12\tbyte\t\t2\tsubroutine\n>0x12\tbyte\t\t3\tmulti-module\n>0x12\tbyte\t\t4\tdata module\n>0x12\tbyte\t\t11\ttrap library\n>0x12\tbyte\t\t12\tsystem module\n>0x12\tbyte\t\t13\tfile manager\n>0x12\tbyte\t\t14\tdevice driver\n>0x12\tbyte\t\t15\tdevice descriptor\n\n#------------------------------------------------------------------------------\n# $File$\n#\n# Mach magic number info\n#\n0\tlong\t\t0xefbe\tOSF/Rose object\n# I386 magic number info\n#\n0\tshort\t\t0565\ti386 COFF object\n\n#------------------------------------------------------------------------------\n# $File: palm,v 1.12 2014/03/28 19:11:40 christos Exp $\n# palm:\t file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks\n#\n# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>\n\n# These are weak, byte 59 is not guaranteed to be 0 and there are\n# 8 character identifiers at byte 60, one I found for appl is BIGb.\n# What are the possibilities and where is this documented?\n\n# The common header format for PalmOS .pdb/.prc files is\n# {\n#         char            name[ 32 ];\n#         Word            attributes;\n#         Word            version;\n#         DWord           creationDate;\n#         DWord           modificationDate;\n#         DWord           lastBackupDate;\n#         DWord           modificationNumber;\n#         DWord           appInfoID;\n#         DWord           sortInfoID;\n#         char            type[4];\n#         char            creator[4];\n#         DWord           uniqueIDSeed;\n#         RecordListType  recordList;\n# };\n#\n# Datestamps are unsigned seconds since the MacOS epoch (Jan 1, 1904),\n# or Unix/POSIX time + 2082844800.\n\n0\t\tname\t\taportisdoc\n# date is supposed to be big-endian seconds since 1 Jan 1904, but many\n# files contain the timestamp in little-endian or a completely\n# nonsensical value...\n#>36\t\tbedate-2082844800\t>0\t\\b, created %s\n# compression: 1=uncomp, 2=orig, 0x4448=HuffDic\n>(78.L)\t\tbeshort\t\t=1\t\t\\b, uncompressed\n# compressed\n>(78.L)\t\tbeshort\t\t>1\n>>(78.L+4)\tbelong\t\tx\t\t\\b, %d bytes uncompressed\n\n# appl\n#60\t\tstring\t\tappl\t\tPalmOS application\n#>0\t\tstring\t\t>\\0\t\t\"%s\"\n\n# HACK\n#60\t\tstring\t\tHACK\t\tHackMaster hack\n#>0\t\tstring\t\t>\\0\t\t\"%s\"\n\n# iSiloX e-book\n60\t\tstring\t\tSDocSilX\tiSiloX E-book\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n\n# Mobipocket (www.mobipocket.com), donated by Carl Witty\n# expanded by Ralf Brown\n60\t\tstring\t \tBOOKMOBI\tMobipocket E-book\n# MobiPocket stores a full title, pointed at by the belong at offset\n# 0x54 in its header at (78.L), with length given by the belong at\n# offset 0x58.\n# there's no guarantee that the title string is null-terminated, but\n# we currently can't specify a variable-length string where the length\n# field is not at the start of the string; in practice, the data\n# following the string always seems to start with a zero byte\n>(78.L)\t\tbelong\t\tx\n>>&(&0x50.L-4)\tstring\t\t>\\0\t\t\"%s\"\n>0\t\tuse\t\taportisdoc\n>>(78.L+0x68)\tbelong\t\t>0\t\t\\b, version %d\n>>(78.L+0x1C)\tbelong\t\t!0\t\t\\b, codepage %d\n>>(78.L+0x0C)\tbeshort\t \t>0\t\t\\b, encrypted (type %d)\n\n# AportisDoc/PalmDOC\n60\t\tstring\t\tTEXtREAd\tAportisDoc/PalmDOC E-book\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n>0\t\tuse\t\taportisdoc\n\n# Variety of PalmOS document types\n# Michael-John Turner <mj@debian.org>\n# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType\n60\tstring\t\t\tBVokBDIC\tBDicty PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDB99DBOS\tDB PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tvIMGView\tFireViewer/ImageViewer PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tPmDBPmDB\tHanDBase PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tInfoINDB\tInfoView PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tToGoToGo\tiSilo PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tJfDbJBas\tJFile PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tJfDbJFil\tJFile Pro PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDATALSdb\tList PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tMdb1Mdb1\tMobileDB PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tPNRdPPrs\tPeanutPress PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDataPlkr\tPlucker PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDataSprd\tQuickSheet PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tSM01SMem\tSuperMemo PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tTEXtTlDc\tTealDoc PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tInfoTlIf\tTealInfo PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDataTlMl\tTealMeal PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tDataTlPt\tTealPaint PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tdataTDBP\tThinkDB PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tTdatTide\tTides PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n60\tstring\t\t\tToRaTRPW\tTomeRaider PalmOS document\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n\n# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)\n# For version 1.xx zTXTs, outputs version and numbers of bookmarks and\n#   annotations.\n# For other versions, just outputs version.\n#\n60\t\tstring\t\tzTXT\t\tA GutenPalm zTXT e-book\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n>(0x4E.L)\tbyte\t\t0\n>>(0x4E.L+1)\tbyte\t\tx\t\t(v0.%02d)\n>(0x4E.L)\tbyte\t\t1\n>>(0x4E.L+1)\tbyte\t\tx\t\t(v1.%02d)\n>>>(0x4E.L+10)\tbeshort\t\t>0\n>>>>(0x4E.L+10) beshort\t\t<2\t\t- 1 bookmark\n>>>>(0x4E.L+10) beshort\t\t>1\t\t- %d bookmarks\n>>>(0x4E.L+14)\tbeshort\t\t>0\n>>>>(0x4E.L+14) beshort\t\t<2\t\t- 1 annotation\n>>>>(0x4E.L+14) beshort\t\t>1\t\t- %d annotations\n>(0x4E.L)\tbyte\t\t>1\t\t(v%d.\n>>(0x4E.L+1)\tbyte\t\tx\t\t%02d)\n\n# Palm OS .prc file types\n60\t\tstring\t\tlibr\n# flags, only bit 0 or bit 6\n# http://en.wikipedia.org/wiki/PRC_%28Palm_OS%29\n# http://web.mit.edu/tytso/www/pilot/prc-format.html\n>0x20\t\tbeshort&0xffbe\t0\n>>0\t\tstring\t\t>\\0\t\tPalm OS dynamic library data \"%s\"\n60\t\tstring\t\tptch\t\tPalm OS operating system patch data\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n\n# Mobipocket (www.mobipocket.com), donated by Carl Witty\n60\tstring\t\t\tBOOKMOBI\tMobipocket E-book\n>0\tstring\t\t\t>\\0\t\t\"%s\"\n\n#------------------------------------------------------------------------------\n# $File$\n#\n# Parix COFF executables\n# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>\n#\n0\tbeshort&0xfff\t0xACE\tPARIX\n>0\tbyte&0xf0\t0x80\tT800\n>0\tbyte&0xf0\t0x90\tT9000\n>19\tbyte&0x02\t0x02\texecutable\n>19\tbyte&0x02\t0x00\tobject\n>19\tbyte&0x0c\t0x00\tnot stripped\n#------------------------------------------------------------------------------\n# $File$\n# parrot: file(1) magic for Parrot Virtual Machine\n# URL:\thttp://www.lua.org/\n# From: Lubomir Rintel <lkundrak@v3.sk>\n\n# Compiled Parrot byte code\n0\tstring\t\\376PBC\\r\\n\\032\\n\tParrot bytecode\n>64\tbyte\tx\t\t\t%d.\n>72\tbyte\tx\t\t\t\\b%d,\n>8\tbyte\t>0\t\t\t%d byte words,\n>16\tbyte\t0\t\t\tlittle-endian,\n>16\tbyte\t1\t\t\tbig-endian,\n>32\tbyte\t0\t\t\tIEEE-754 8 byte double floats,\n>32\tbyte\t1\t\t\tx86 12 byte long double floats,\n>32\tbyte\t2\t\t\tIEEE-754 16 byte long double floats,\n>32\tbyte\t3\t\t\tMIPS 16 byte long double floats,\n>32\tbyte\t4\t\t\tAIX 16 byte long double floats,\n>32\tbyte\t5\t\t\t4-byte floats,\n>40\tbyte\tx\t\t\tParrot %d.\n>48\tbyte\tx\t\t\t\\b%d.\n>56\tbyte\tx\t\t\t\\b%d\n#------------------------------------------------------------------------------\n# $File: pascal,v 1.1 2011/12/08 12:12:46 rrt Exp $\n# pascal:  file(1) magic for Pascal source\n#\n0\tsearch/8192\t(input,\t\tPascal source text\n!:mime\ttext/x-pascal\n#0\tregex\t\t\\^program\tPascal source text\n#!:mime\ttext/x-pascal\n#0\tregex           \t\\^record\t\tPascal source text\n#!:mime\ttext/x-pascal\n\n#------------------------------------------------------------------------------\n# $File: cubemap,v 1.1 2012/06/06 13:03:20 christos Exp $\n# file(1) magic(5) data for OpenStreetMap\n\n# OpenStreetMap Protocolbuffer Binary Format (.osm.pbf)\n# http://wiki.openstreetmap.org/wiki/PBF_Format\n# From: Markus Heidelberg <markus.heidelberg@web.de>\n0\tbelong\t\t0x0000000D\n>4\tbeshort\t\t0x0A09\n>>6\tstring\t\tOSMHeader\tOpenStreetMap Protocolbuffer Binary Format\n\n#------------------------------------------------------------------------------\n# $File$\n# pbm:  file(1) magic for Portable Bitmap files\n#\n# XXX - byte order?\n#\n0\tshort\t0x2a17\t\"compact bitmap\" format (Poskanzer)\n\n#------------------------------------------------------------------------------\n# $File: pdf,v 1.7 2013/08/22 07:47:26 christos Exp $\n# pdf:  file(1) magic for Portable Document Format\n#\n\n0\tstring\t\t%PDF-\t\tPDF document\n!:mime\tapplication/pdf\n>5\tbyte\t\tx\t\t\\b, version %c\n>7\tbyte\t\tx\t\t\\b.%c\n\n0\tstring\t\t\\012%PDF-\tPDF document\n!:mime\tapplication/pdf\n>6\tbyte\t\tx\t\t\\b, version %c\n>8\tbyte\t\tx\t\t\\b.%c\n\n# From: Nick Schmalenberger <nick@schmalenberger.us>\n# Forms Data Format\n0       string          %FDF-           FDF document\n!:mime application/vnd.fdf\n>5      byte            x               \\b, version %c\n>7      byte            x               \\b.%c\n\n#------------------------------------------------------------------------------\n# $File: pdp,v 1.9 2013/04/19 20:11:43 christos Exp $\n# pdp:  file(1) magic for PDP-11 executable/object and APL workspace\n#\n0\tlelong\t\t0101555\t\tPDP-11 single precision APL workspace\n0\tlelong\t\t0101554\t\tPDP-11 double precision APL workspace\n#\n# PDP-11 a.out\n#\n0\tleshort\t\t0407\t\tPDP-11 executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %d\n\n# updated by Joerg Jenderek at Mar 2013\n# GRR: line below too general as it catches also Windows precompiled setup information *.PNF\n0\tleshort\t\t0401\t\t\n# skip *.PNF with WinDirPathOffset 58h \n>68\tulelong\t\t!0x00000058\tPDP-11 UNIX/RT ldp\n# skip *.PNF with high byte of InfVersionDatumCount zero\n#>>15\tbyte\t\t!0\t\tPDP-11 UNIX/RT ldp\n0\tleshort\t\t0405\t\tPDP-11 old overlay\n\n0\tleshort\t\t0410\t\tPDP-11 pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %d\n\n0\tleshort\t\t0411\t\tPDP-11 separate I&D executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %d\n\n0\tleshort\t\t0437\t\tPDP-11 kernel overlay\n\n# These last three are derived from 2.11BSD file(1)\n0\tleshort\t\t0413\t\tPDP-11 demand-paged pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0430\t\tPDP-11 overlaid pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0431\t\tPDP-11 overlaid separate executable\n>8\tleshort\t\t>0\t\tnot stripped\n#------------------------------------------------------------------------------\n# $File: perl,v 1.22 2014/04/28 12:04:35 christos Exp $\n# perl:  file(1) magic for Larry Wall's perl language.\n#\n# The `eval' lines recognizes an outrageously clever hack.\n# Keith Waclena <keith@cerberus.uchicago.edu>\n# Send additions to <perl5-porters@perl.org>\n0\tsearch/1\teval\\ \"exec\\ /bin/perl\t\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ \"exec\\ /usr/bin/perl\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ \"exec\\ /usr/local/bin/perl\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ '(exit\\ $?0)'\\ &&\\ eval\\ 'exec\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1\t#!/usr/bin/env\\ perl\tPerl script text executable\n!:mime\ttext/x-perl\n0\tsearch/1\t#!\\ /usr/bin/env\\ perl\tPerl script text executable\n!:mime\ttext/x-perl\n0\tsearch/1\t#!\n>0\tregex\t\\^#!.*/bin/perl([[:space:]].*)*$\tPerl script text executable\n!:mime\ttext/x-perl\n\n# by Dmitry V. Levin and Alexey Tourbin\n# check the first line\n0\tsearch/1\tpackage\n>0\tregex\t\t\\^package[\\ \\t]+[0-9A-Za-z_:]+\\ *;\tPerl5 module source text\n!:strength + 10\n# not 'p', check other lines\n0\tsearch/1\t!p\n>0\tregex\t\t\\^package[\\ \\t]+[0-9A-Za-z_:]+\\ *;\n>>0\tregex\t\t\\^1\\ *;|\\^(use|sub|my)\\ .*[(;{=]\tPerl5 module source text\n!:strength + 10\n\n# Perl POD documents\n# From: Tom Hukins <tom@eborcom.com>\n0\tsearch/1/W\t\\=pod\\n\t\tPerl POD document text\n0\tsearch/1/W\t\\n\\=pod\\n\tPerl POD document text\n0\tsearch/1/W\t\\=head1\\ \tPerl POD document text\n0\tsearch/1/W\t\\n\\=head1\\ \tPerl POD document text\n0\tsearch/1/W\t\\=head2\\ \tPerl POD document text\n0\tsearch/1/W\t\\n\\=head2\\ \tPerl POD document text\n0\tsearch/1/W\t\\=encoding\\ \tPerl POD document text\n0\tsearch/1/W\t\\n\\=encoding\\ \tPerl POD document text\n\n\n# Perl Storable data files.\n0\tstring\tperl-store\tperl Storable (v0.6) data\n>4\tbyte\t>0\t(net-order %d)\n>>4\tbyte\t&01\t(network-ordered)\n>>4\tbyte\t=3\t(major 1)\n>>4\tbyte\t=2\t(major 1)\n\n0\tstring\tpst0\tperl Storable (v0.7) data\n>4\tbyte\t>0\n>>4\tbyte\t&01\t(network-ordered)\n>>4\tbyte\t=5\t(major 2)\n>>4\tbyte\t=4\t(major 2)\n>>5\tbyte\t>0\t(minor %d)\n\n# This is Debian #742949 by Zefram <zefram@fysh.org>:\n# -----------------------------------------------------------\n# The Perl module Hash::SharedMem\n# <https://metacpan.org/release/Hash-SharedMem> defines a file format\n# for a key/value store.  Details of the file format are in the \"DESIGN\"\n# file in the module distribution.  Magic:\n0\tbequad\t=0xa58afd185cbf5af7\tHash::SharedMem master file, big-endian\n>8\tbequad\t<0x1000000\n>>15\tbyte\t>2\t\\b, line size 2^%d byte\n>>14\tbyte\t>2\t\\b, page size 2^%d byte\n>>13\tbyte\t&1\n>>>13\tbyte\t>1\t\\b, max fanout %d\n0\tlequad\t=0xa58afd185cbf5af7\tHash::SharedMem master file, little-endian\n>8\tlequad\t<0x1000000\n>>8\tbyte\t>2\t\\b, line size 2^%d byte\n>>9\tbyte\t>2\t\\b, page size 2^%d byte\n>>10\tbyte\t&1\n>>>10\tbyte\t>1\t\\b, max fanout %d\n0\tbequad\t=0xc693dac5ed5e47c2\tHash::SharedMem data file, big-endian\n>8\tbequad\t<0x1000000\n>>15\tbyte\t>2\t\\b, line size 2^%d byte\n>>14\tbyte\t>2\t\\b, page size 2^%d byte\n>>13\tbyte\t&1\n>>>13\tbyte\t>1\t\\b, max fanout %d\n0\tlequad\t=0xc693dac5ed5e47c2\tHash::SharedMem data file, little-endian\n>8\tlequad\t<0x1000000\n>>8\tbyte\t>2\t\\b, line size 2^%d byte\n>>9\tbyte\t>2\t\\b, page size 2^%d byte\n>>10\tbyte\t&1\n>>>10\tbyte\t>1\t\\b, max fanout %d\n\n#------------------------------------------------------------------------------\n# $File: matroska,v 1.8 2013/02/08 17:25:16 christos Exp $\n# pgf: file(1) magic for Progressive Graphics File (PGF)\n#\n# <http://www.libpgf.org/uploads/media/PGF_Details_01.pdf>\n# 2013 by Philipp Hahn <pmhahn debian org>\n0 string PGF Progressive Graphics image data,\n!:mime image/x-pgf\n>3\tstring\t2\tversion %s,\n>3\tstring\t4\tversion %s,\n>3\tstring\t5\tversion %s,\n>3\tstring\t6\tversion %s,\n#\tPGFPreHeader\n#>>4\tlelong\tx\theader size %d,\n#\tPGFHeader\n>>8\tlelong\tx\t%d x\n>>12\tlelong\tx\t%d,\n>>16\tbyte\tx\t%d levels,\n>>17\tbyte\tx\tcompression level %d,\n>>18\tbyte\tx\t%d bpp,\n>>19\tbyte\tx\t%d channels,\n>>20\tclear\tx\n>>20\tbyte\t0\tbitmap,\n>>20\tbyte\t1\tgray scale,\n>>20\tbyte\t2\tindexed color,\n>>20\tbyte\t3\tRGB color,\n>>20\tbyte\t4\tCYMK color,\n>>20\tbyte\t5\tHSL color,\n>>20\tbyte\t6\tHSB color,\n>>20\tbyte\t7\tmulti-channel,\n>>20\tbyte\t8\tduo tone,\n>>20\tbyte\t9\tLAB color,\n>>20\tbyte\t10\tgray scale 16,\n>>20\tbyte\t11\tRGB color 48,\n>>20\tbyte\t12\tLAB color 48,\n>>20\tbyte\t13\tCYMK color 64,\n>>20\tbyte\t14\tdeep multi-channel,\n>>20\tbyte\t15\tduo tone 16,\n>>20\tbyte\t17\tRGBA color,\n>>20\tbyte\t18\tgray scale 32,\n>>20\tbyte\t19\tRGB color 12,\n>>20\tbyte\t20\tRGB color 16,\n>>20\tbyte\t255\tunknown format,\n>>20\tdefault\tx\tformat \n>>>20\tbyte\tx\t\\b %d,\n>>21\tbyte\tx\t%d bpc\n#\tPGFPostHeader\n#\tLevel-Sizes\n#>>(4.l+4)\tlelong x level 0 size: %d\n#>>(4.l+8)\tlelong x level 1 size: %d\n#>>(4.l+12)\tlelong x level 2 size: %d\n\n#------------------------------------------------------------------------------\n# $File: pgp,v 1.10 2014/10/14 16:50:37 christos Exp $\n# pgp:  file(1) magic for Pretty Good Privacy\n# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html\n#\n0       beshort         0x9900                  PGP key public ring\n!:mime\tapplication/x-pgp-keyring\n0       beshort         0x9501                  PGP key security ring\n!:mime\tapplication/x-pgp-keyring\n0       beshort         0x9500                  PGP key security ring\n!:mime\tapplication/x-pgp-keyring\n0\tbeshort\t\t0xa600\t\t\tPGP encrypted data\n#!:mime\tapplication/pgp-encrypted\n#0\tstring\t\t-----BEGIN\\040PGP\ttext/PGP armored data\n!:mime\ttext/PGP # encoding: armored data\n#>15\tstring\tPUBLIC\\040KEY\\040BLOCK-\tpublic key block\n#>15\tstring\tMESSAGE-\t\tmessage\n#>15\tstring\tSIGNED\\040MESSAGE-\tsigned message\n#>15\tstring\tPGP\\040SIGNATURE-\tsignature\n\n2\tstring\t---BEGIN\\ PGP\\ PUBLIC\\ KEY\\ BLOCK-\tPGP public key block\n!:mime\tapplication/pgp-keys\n>10\tsearch/100\t\\n\\n\n>>&0\tuse\t\tpgp\n0\tstring\t-----BEGIN\\040PGP\\40MESSAGE-\t\tPGP message\n!:mime\tapplication/pgp\n>10\tsearch/100\t\\n\\n\n>>&0\tuse\t\tpgp\n0\tstring\t-----BEGIN\\040PGP\\40SIGNATURE-\t\tPGP signature\n!:mime\tapplication/pgp-signature\n>10\tsearch/100\t\\n\\n\n>>&0\tuse\t\tpgp\n\n# Decode the type of the packet based on it's base64 encoding.\n# Idea from Mark Martinec\n# The specification is in RFC 4880, section 4.2 and 4.3:\n# http://tools.ietf.org/html/rfc4880#section-4.2\n\n0\tname\t\tpgp\n>0\tbyte\t\t0x67\t\tReserved (old)\n>0\tbyte\t\t0x68\t\tPublic-Key Encrypted Session Key (old)\n>0\tbyte\t\t0x69\t\tSignature (old)\n>0\tbyte\t\t0x6a\t\tSymmetric-Key Encrypted Session Key (old)\n>0\tbyte\t\t0x6b\t\tOne-Pass Signature (old)\n>0\tbyte\t\t0x6c\t\tSecret-Key (old)\n>0\tbyte\t\t0x6d\t\tPublic-Key (old)\n>0\tbyte\t\t0x6e\t\tSecret-Subkey (old)\n>0\tbyte\t\t0x6f\t\tCompressed Data (old)\n>0\tbyte\t\t0x70\t\tSymmetrically Encrypted Data (old)\n>0\tbyte\t\t0x71\t\tMarker (old)\n>0\tbyte\t\t0x72\t\tLiteral Data (old)\n>0\tbyte\t\t0x73\t\tTrust (old)\n>0\tbyte\t\t0x74\t\tUser ID (old)\n>0\tbyte\t\t0x75\t\tPublic-Subkey (old)\n>0\tbyte\t\t0x76\t\tUnused (old)\n>0\tbyte\t\t0x77\n>>1\tbyte&0xc0\t0x00\t\tReserved\n>>1\tbyte&0xc0\t0x40\t\tPublic-Key Encrypted Session Key\n>>1\tbyte&0xc0\t0x80\t\tSignature\n>>1\tbyte&0xc0\t0xc0\t\tSymmetric-Key Encrypted Session Key\n>0\tbyte\t\t0x78\n>>1\tbyte&0xc0\t0x00\t\tOne-Pass Signature\n>>1\tbyte&0xc0\t0x40\t\tSecret-Key\n>>1\tbyte&0xc0\t0x80\t\tPublic-Key\n>>1\tbyte&0xc0\t0xc0\t\tSecret-Subkey\n>0\tbyte\t\t0x79\n>>1\tbyte&0xc0\t0x00\t\tCompressed Data\n>>1\tbyte&0xc0\t0x40\t\tSymmetrically Encrypted Data\n>>1\tbyte&0xc0\t0x80\t\tMarker\n>>1\tbyte&0xc0\t0xc0\t\tLiteral Data\n>0\tbyte\t\t0x7a\n>>1\tbyte&0xc0\t0x00\t\tTrust\n>>1\tbyte&0xc0\t0x40\t\tUser ID\n>>1\tbyte&0xc0\t0x80\t\tPublic-Subkey\n>>1\tbyte&0xc0\t0xc0\t\tUnused [z%x]\n>0\tbyte\t\t0x30\n>>1\tbyte&0xc0\t0x00\t\tUnused [0%x]\n>>1\tbyte&0xc0\t0x40\t\tUser Attribute\n>>1\tbyte&0xc0\t0x80\t\tSym. Encrypted and Integrity Protected Data \n>>1\tbyte&0xc0\t0xc0\t\tModification Detection Code\n\n# magic signatures to detect PGP crypto material (from stef)\n# detects and extracts metadata from:\n#  - symmetric encrypted packet header\n#  - RSA (e=65537) secret (sub-)keys\n\n# 1024b RSA encrypted data\n\n0\tstring\t\\x84\\x8c\\x03\t\tPGP RSA encrypted session key -\n>3\tlelong\tx\t\t\tkeyid: %X\n>7\tlelong\tx\t\t\t%X\n>11\tbyte\t0x01\t\t\tRSA (Encrypt or Sign) 1024b\n>11\tbyte\t0x02\t\t\tRSA Encrypt-Only 1024b\n>12\tstring\t\\x04\\x00\n>12\tstring\t\\x03\\xff\n>12\tstring\t\\x03\\xfe\n>12\tstring\t\\x03\\xfd\n>12\tstring\t\\x03\\xfc\n>12\tstring\t\\x03\\xfb\n>12\tstring\t\\x03\\xfa\n>12\tstring\t\\x03\\xf9\n>142\tbyte\t0xd2\t\t\t.\n\n# 2048b RSA encrypted data\n\n0\tstring\t\\x85\\x01\\x0c\\x03\tPGP RSA encrypted session key -\n>4\tlelong\tx\t\t\tkeyid: %X\n>8\tlelong\tx\t\t\t%X\n>12\tbyte\t0x01\t\t\tRSA (Encrypt or Sign) 2048b\n>12\tbyte\t0x02\t\t\tRSA Encrypt-Only 2048b\n>13\tstring\t\\x08\\x00\n>13\tstring\t\\x07\\xff\n>13\tstring\t\\x07\\xfe\n>13\tstring\t\\x07\\xfd\n>13\tstring\t\\x07\\xfc\n>13\tstring\t\\x07\\xfb\n>13\tstring\t\\x07\\xfa\n>13\tstring\t\\x07\\xf9\n>271\tbyte\t0xd2\t\t\t.\n\n# 3072b RSA encrypted data\n\n0\tstring\t\\x85\\x01\\x8c\\x03\tPGP RSA encrypted session key -\n>4\tlelong\tx\t\t\tkeyid: %X\n>8\tlelong\tx\t\t\t%X\n>12\tbyte\t0x01\t\t\tRSA (Encrypt or Sign) 3072b\n>12\tbyte\t0x02\t\t\tRSA Encrypt-Only 3072b\n>13\tstring\t\\x0c\\x00\n>13\tstring\t\\x0b\\xff\n>13\tstring\t\\x0b\\xfe\n>13\tstring\t\\x0b\\xfd\n>13\tstring\t\\x0b\\xfc\n>13\tstring\t\\x0b\\xfb\n>13\tstring\t\\x0b\\xfa\n>13\tstring\t\\x0b\\xf9\n>399\tbyte\t0xd2\t\t\t.\n\n# 3072b RSA encrypted data\n\n0\tstring\t\\x85\\x02\\x0c\\x03\tPGP RSA encrypted session key -\n>4\tlelong\tx\t\t\tkeyid: %X\n>8\tlelong\tx\t\t\t%X\n>12\tbyte\t0x01\t\t\tRSA (Encrypt or Sign) 4096b\n>12\tbyte\t0x02\t\t\tRSA Encrypt-Only 4096b\n>13\tstring\t\\x10\\x00\n>13\tstring\t\\x0f\\xff\n>13\tstring\t\\x0f\\xfe\n>13\tstring\t\\x0f\\xfd\n>13\tstring\t\\x0f\\xfc\n>13\tstring\t\\x0f\\xfb\n>13\tstring\t\\x0f\\xfa\n>13\tstring\t\\x0f\\xf9\n>527\tbyte\t0xd2\t\t\t.\n\n# 4096b RSA encrypted data\n\n0\tstring\t\\x85\\x04\\x0c\\x03\tPGP RSA encrypted session key -\n>4\tlelong\tx\t\t\tkeyid: %X\n>8\tlelong\tx\t\t\t%X\n>12\tbyte\t0x01\t\t\tRSA (Encrypt or Sign) 8129b\n>12\tbyte\t0x02\t\t\tRSA Encrypt-Only 8129b\n>13\tstring\t\\x20\\x00\n>13\tstring\t\\x1f\\xff\n>13\tstring\t\\x1f\\xfe\n>13\tstring\t\\x1f\\xfd\n>13\tstring\t\\x1f\\xfc\n>13\tstring\t\\x1f\\xfb\n>13\tstring\t\\x1f\\xfa\n>13\tstring\t\\x1f\\xf9\n>1039\tbyte\t0xd2\t\t\t.\n\n# crypto algo mapper\n\n0\tname\tcrypto\n>0\tbyte\t0x00\t\t\tPlaintext or unencrypted data\n>0\tbyte\t0x01\t\t\tIDEA\n>0\tbyte\t0x02\t\t\tTripleDES\n>0\tbyte\t0x03\t\t\tCAST5 (128 bit key)\n>0\tbyte\t0x04\t\t\tBlowfish (128 bit key, 16 rounds)\n>0\tbyte\t0x07\t\t\tAES with 128-bit key\n>0\tbyte\t0x08\t\t\tAES with 192-bit key\n>0\tbyte\t0x09\t\t\tAES with 256-bit key\n>0\tbyte\t0x0a\t\t\tTwofish with 256-bit key\n\n# hash algo mapper\n\n0\tname\thash\n>0\tbyte\t0x01\t\t\tMD5\n>0\tbyte\t0x02\t\t\tSHA-1\n>0\tbyte\t0x03\t\t\tRIPE-MD/160\n>0\tbyte\t0x08\t\t\tSHA256\n>0\tbyte\t0x09\t\t\tSHA384\n>0\tbyte\t0x0a\t\t\tSHA512\n>0\tbyte\t0x0b\t\t\tSHA224\n\n# pgp symmetric encrypted data\n\n0\tbyte\t0x8c\t\t\tPGP symmetric key encrypted data -\n>1\tbyte\t0x0d\n>1\tbyte\t0x0c\n>2\tbyte\t0x04\n>3\tuse\tcrypto\n>4\tbyte\t0x01\t\t\tsalted -\n>>5\tuse\thash\n>>14\tbyte\t0xd2\t\t\t.\n>>14\tbyte\t0xc9\t\t\t.\n>4\tbyte\t0x03\t\t\tsalted & iterated -\n>>5\tuse\thash\n>>15\tbyte\t0xd2\t\t\t.\n>>15\tbyte\t0xc9\t\t\t.\n\n# encrypted keymaterial needs s2k & can be checksummed/hashed\n\n0\tname\tchkcrypto\n>0\tuse\tcrypto\n>1\tbyte\t0x00\t\t\tSimple S2K\n>1\tbyte\t0x01\t\t\tSalted S2K\n>1\tbyte\t0x03\t\t\tSalted&Iterated S2K\n>2\tuse\thash\n\n# all PGP keys start with this prolog\n# containing version, creation date, and purpose\n\n0\tname\tkeyprolog\n>0\tbyte\t0x04\n>1\tbeldate\tx\t\t\tcreated on %s -\n>5\tbyte\t0x01\t\t\tRSA (Encrypt or Sign)\n>5\tbyte\t0x02\t\t\tRSA Encrypt-Only\n\n# end of secret keys known signature\n# contains e=65537 and the prolog to\n# the encrypted parameters\n\n0\tname\tkeyend\n>0\tstring\t\\x00\\x11\\x01\\x00\\x01\te=65537\n>5\tuse\tcrypto\n>5\tbyte\t0xff\t\t\tchecksummed\n>>6\tuse\tchkcrypto\n>5\tbyte\t0xfe\t\t\thashed\n>>6\tuse\tchkcrypto\n\n# PGP secret keys contain also the public parts\n# these vary by bitsize of the key\n\n0\tname\tx1024\n>0\tuse\tkeyprolog\n>6\tstring\t\\x03\\xfe\n>6\tstring\t\\x03\\xff\n>6\tstring\t\\x04\\x00\n>136\tuse\tkeyend\n\n0\tname\tx2048\n>0\tuse\tkeyprolog\n>6\tstring\t\\x80\\x00\n>6\tstring\t\\x07\\xfe\n>6\tstring\t\\x07\\xff\n>264\tuse\tkeyend\n\n0\tname\tx3072\n>0\tuse\tkeyprolog\n>6\tstring\t\\x0b\\xfe\n>6\tstring\t\\x0b\\xff\n>6\tstring\t\\x0c\\x00\n>392\tuse\tkeyend\n\n0\tname\tx4096\n>0\tuse\tkeyprolog\n>6\tstring\t\\x10\\x00\n>6\tstring\t\\x0f\\xfe\n>6\tstring\t\\x0f\\xff\n>520\tuse\tkeyend\n\n# \\x00|\\x1f[\\xfe\\xff]).{1024})'\n0\tname\tx8192\n>0\tuse\tkeyprolog\n>6\tstring\t\\x20\\x00\n>6\tstring\t\\x1f\\xfe\n>6\tstring\t\\x1f\\xff\n>1032\tuse\tkeyend\n\n# depending on the size of the pkt\n# we branch into the proper key size\n# signatures defined as x{keysize}\n\n>0\tname\tpgpkey\n>0\tstring\t\\x01\\xd8\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xeb\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xfb\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xfd\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xf3\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xee\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xfe\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x01\\xf4\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x0d\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x03\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x05\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x15\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x00\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x10\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x04\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x06\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x02\\x16\t1024b\n>>2\tuse\tx1024\n>0\tstring\t\\x03\\x98\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xab\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xbb\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xbd\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xcd\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xb3\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xc3\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xc5\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xd5\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xae\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xbe\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xc0\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xd0\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xb4\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xc4\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xc6\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x03\\xd6\t2048b\n>>2\tuse\tx2048\n>0\tstring\t\\x05X\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05k\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05{\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05}\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x8d\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05s\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x83\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x85\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x95\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05n\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x7e\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x80\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x90\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05t\t\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x84\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x86\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x05\\x96\t3072b\n>>2\tuse\tx3072\n>0\tstring\t\\x07[\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07\\x18\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07+\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07;\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07=\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07M\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x073\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07C\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07E\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07U\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07.\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07>\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07@\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07P\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x074\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07D\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07F\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x07V\t\t4096b\n>>2\tuse\tx4096\n>0\tstring\t\\x0e[\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e\\x18\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e+\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e;\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e=\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eM\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e3\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eC\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eE\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eU\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e.\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e>\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e@\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eP\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0e4\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eD\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eF\t\t8192b\n>>2\tuse\tx8192\n>0\tstring\t\\x0eV\t\t8192b\n>>2\tuse\tx8192\n\n# PGP RSA (e=65537) secret (sub-)key header\n\n0\tbyte\t0x95\t\t\tPGP\tSecret Key -\n>1\tuse\tpgpkey\n0\tbyte\t0x97\t\t\tPGP\tSecret Sub-key -\n>1\tuse\tpgpkey\n0\tbyte\t0x9d\t\t\tPGP\tSecret Sub-key -\n>1\tuse\tpgpkey\n\n#------------------------------------------------------------------------------\n# $File$\n# pkgadd:  file(1) magic for SysV R4 PKG Datastreams\n#\n0       string          #\\ PaCkAgE\\ DaTaStReAm  pkg Datastream (SVR4)\n!:mime\tapplication/x-svr4-package\n\n#------------------------------------------------------------------------------\n# $File$\n# plan9:  file(1) magic for AT&T Bell Labs' Plan 9 executables\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n#\n0\tbelong\t\t0x00000107\tPlan 9 executable, Motorola 68k\n0\tbelong\t\t0x000001EB\tPlan 9 executable, Intel 386\n0\tbelong\t\t0x00000247\tPlan 9 executable, Intel 960\n0\tbelong\t\t0x000002AB\tPlan 9 executable, SPARC\n0\tbelong\t\t0x00000407\tPlan 9 executable, MIPS R3000\n0\tbelong\t\t0x0000048B\tPlan 9 executable, AT&T DSP 3210\n0\tbelong\t\t0x00000517\tPlan 9 executable, MIPS R4000 BE\n0\tbelong\t\t0x000005AB\tPlan 9 executable, AMD 29000\n0\tbelong\t\t0x00000647\tPlan 9 executable, ARM 7-something\n0\tbelong\t\t0x000006EB\tPlan 9 executable, PowerPC\n0\tbelong\t\t0x00000797\tPlan 9 executable, MIPS R4000 LE\n0\tbelong\t\t0x0000084B\tPlan 9 executable, DEC Alpha\n\n#------------------------------------------------------------------------------\n# $File$\n# plus5:  file(1) magic for Plus Five's UNIX MUMPS\n#\n# XXX - byte order?  Paging Hokey....\n#\n0\tshort\t\t0x259\t\tmumps avl global\n>2\tbyte\t\t>0\t\t(V%d)\n>6\tbyte\t\t>0\t\twith %d byte name\n>7\tbyte\t\t>0\t\tand %d byte data cells\n0\tshort\t\t0x25a\t\tmumps blt global\n>2\tbyte\t\t>0\t\t(V%d)\n>8\tshort\t\t>0\t\t- %d byte blocks\n>15\tbyte\t\t0x00\t\t- P/D format\n>15\tbyte\t\t0x01\t\t- P/K/D format\n>15\tbyte\t\t0x02\t\t- K/D format\n>15\tbyte\t\t>0x02\t\t- Bad Flags\n\n#------------------------------------------------------------------------------\n# $File: printer,v 1.25 2011/05/20 23:31:46 christos Exp $\n# printer:  file(1) magic for printer-formatted files\n#\n\n# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)\n0\tstring\t\t%!\t\tPostScript document text\n!:mime\tapplication/postscript\n!:apple\tASPSTEXT\n>2\tstring\t\tPS-Adobe-\tconforming\n>>11\tstring\t\t>\\0\t\tDSC level %.3s\n>>>15\tstring\t\tEPS\t\t\\b, type %s\n>>>15\tstring\t\tQuery\t\t\\b, type %s\n>>>15\tstring\t\tExitServer\t\\b, type %s\n>>>15   search/1000\t\t%%LanguageLevel:\\ \n>>>>&0\tstring\t\t>\\0\t\t\\b, Level %s\n# Some PCs have the annoying habit of adding a ^D as a document separator\n0\tstring\t\t\\004%!\t\tPostScript document text\n!:mime\tapplication/postscript\n!:apple\tASPSTEXT\n>3\tstring\t\tPS-Adobe-\tconforming\n>>12\tstring\t\t>\\0\t\tDSC level %.3s\n>>>16\tstring\t\tEPS\t\t\\b, type %s\n>>>16\tstring\t\tQuery\t\t\\b, type %s\n>>>16\tstring\t\tExitServer\t\\b, type %s\n>>>16   search/1000\t\t%%LanguageLevel:\\ \n>>>>&0\tstring\t\t>\\0\t\t\\b, Level %s\n0\tstring\t\t\\033%-12345X%!PS\tPostScript document\n\n# DOS EPS Binary File Header\n# From: Ed Sznyter <ews@Black.Market.NET>\n0       belong          0xC5D0D3C6      DOS EPS Binary File\n>4      long            >0              Postscript starts at byte %d\n>>8     long            >0              length %d\n>>>12   long            >0              Metafile starts at byte %d\n>>>>16  long            >0              length %d\n>>>20   long            >0              TIFF starts at byte %d\n>>>>24  long            >0              length %d\n\n# Summary: Adobe's PostScript Printer Description File\n# Extension: .ppd\n# Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8\n# Submitted by: Yves Arrouye <arrouye@marin.fdn.fr>\n#\n0\tstring\t\t*PPD-Adobe:\\x20\tPPD file\n>&0\tstring\t\tx\t\t\\b, version %s\n\n# HP Printer Job Language\n0\tstring\t\t\\033%-12345X@PJL\tHP Printer Job Language data\n# HP Printer Job Language\n# The header found on Win95 HP plot files is the \"Silliest Thing possible\" \n# (TM)\n# Every driver puts the language at some random position, with random case\n# (LANGUAGE and Language)\n# For example the LaserJet 5L driver puts the \"PJL ENTER LANGUAGE\" in line 10\n# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>\n# \n0\tstring\t\t\\033%-12345X@PJL\tHP Printer Job Language data\n>&0\tstring\t\t>\\0\t\t\t%s\t\t\t\n>>&0\tstring\t\t>\\0\t\t\t%s\t\t\t\n>>>&0\tstring\t\t>\\0\t\t\t%s\t\t\n>>>>&0\tstring\t\t>\\0\t\t\t%s\t\t\n#>15\tstring\t\t\\ ENTER\\ LANGUAGE\\ =\n#>31\tstring\t\tPostScript\t\tPostScript\n\n# From: Stefan Thurner <thurners@nicsys.de>\n0\tstring\t\t\\033%-12345X@PJL\n>&0\tsearch/10000\t%!\t\t\tPJL encapsulated PostScript document text\n\n# Rick Richardson <rickrich@gmail.com>\n\n# For Fuji-Xerox Printers - HBPL stands for Host Based Printer Language\n# For Oki Data Printers - HIPERC\n# For Konica Minolta Printers - LAVAFLOW\n# For Samsung Printers - QPDL\n# For HP Printers - ZJS stands for Zenographics ZJStream\n0\tstring\t\t\\033%-12345X@PJL\tHP Printer Job Language data\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE=HBPL\t- HBPL\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE=HIPERC\t- Oki Data HIPERC\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE=LAVAFLOW\t- Konica Minolta LAVAFLOW\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE=QPDL\t- Samsung QPDL\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE\\ =\\ QPDL\t- Samsung QPDL\n>0\tsearch/10000\t@PJL\\ ENTER\\ LANGUAGE=ZJS\t- HP ZJS\n\n\n# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)\n0\tstring\t\t\\033E\\033\tHP PCL printer data\n>3\tstring\t\t\\&l0A\t\t- default page size\n>3\tstring\t\t\\&l1A\t\t- US executive page size\n>3\tstring\t\t\\&l2A\t\t- US letter page size\n>3\tstring\t\t\\&l3A\t\t- US legal page size\n>3\tstring\t\t\\&l26A\t\t- A4 page size\n>3\tstring\t\t\\&l80A\t\t- Monarch envelope size\n>3\tstring\t\t\\&l81A\t\t- No. 10 envelope size\n>3\tstring\t\t\\&l90A\t\t- Intl. DL envelope size\n>3\tstring\t\t\\&l91A\t\t- Intl. C5 envelope size\n>3\tstring\t\t\\&l100A\t\t- Intl. B5 envelope size\n>3\tstring\t\t\\&l-81A\t\t- No. 10 envelope size (landscape)\n>3\tstring\t\t\\&l-90A\t\t- Intl. DL envelope size (landscape)\n\n# IMAGEN printer-ready files:\n0\tstring\t@document(\t\tImagen printer\n# this only works if \"language xxx\" is first item in Imagen header.\n>10\tstring\tlanguage\\ impress\t(imPRESS data)\n>10\tstring\tlanguage\\ daisy\t\t(daisywheel text)\n>10\tstring\tlanguage\\ diablo\t(daisywheel text)\n>10\tstring\tlanguage\\ printer\t(line printer emulation)\n>10\tstring\tlanguage\\ tektronix\t(Tektronix 4014 emulation)\n# Add any other languages that your Imagen uses - remember\n# to keep the word `text' if the file is human-readable.\n# [GRR 950115:  missing \"postscript\" or \"ultrascript\" (whatever it was called)]\n#\n# Now magic for IMAGEN font files...\n0\tstring\t\tRast\t\tRST-format raster font data\n>45\tstring\t\t>0\t\tface %s\n# From Jukka Ukkonen\n0\tstring\t\t\\033[K\\002\\0\\0\\017\\033(a\\001\\0\\001\\033(g\tCanon Bubble Jet BJC formatted data\n\n# From <mike@flyn.org>\n# These are the /etc/magic entries to decode data sent to an Epson printer.\n0       string          \\x1B\\x40\\x1B\\x28\\x52\\x08\\x00\\x00REMOTE1P        Epson Stylus Color 460 data\n\n\n#------------------------------------------------------------------------------\n# zenographics:  file(1) magic for Zenographics ZjStream printer data\n# Rick Richardson <rickrich@gmail.com>\n0\tstring\t\tJZJZ\n>0x12\tstring\t\tZZ\t\tZenographics ZjStream printer data (big-endian)\n0\tstring\t\tZJZJ\n>0x12\tstring\t\tZZ\t\tZenographics ZjStream printer data (little-endian)\n\n\n#------------------------------------------------------------------------------\n# Oak Technologies printer stream\n# Rick Richardson <rickrich@gmail.com>\n0       string          OAK\n>0x07\tbyte\t\t0\n>0x0b\tbyte\t\t0\tOak Technologies printer stream\n\n# This would otherwise be recognized as PostScript - nick@debian.org\n0\tstring\t\t%!VMF \t\tSunClock's Vector Map Format data\n\n#------------------------------------------------------------------------------\n# HP LaserJet 1000 series downloadable firmware file\n0\tstring\t\\xbe\\xefABCDEFGH\tHP LaserJet 1000 series downloadable firmware   \n\n# From: Paolo <oopla@users.sf.net>\n# Epson ESC/Page, ESC/PageColor \n0\tstring\t\\x1b\\x01@EJL\tEpson ESC/Page language printer data\n\n#------------------------------------------------------------------------------\n# $File$\n# project:  file(1) magic for Project management\n# \n# Magic strings for ftnchek project files. Alexander Mai\n0\tstring\tFTNCHEK_\\ P\tproject file for ftnchek\n>10\tstring\t1\t\tversion 2.7\n>10\tstring\t2\t\tversion 2.8 to 2.10\n>10\tstring\t3\t\tversion 2.11 or later\n\n#------------------------------------------------------------------------------\n# $File$\n# psdbms:  file(1) magic for psdatabase\n#\n0\tbelong&0xff00ffff\t0x56000000\tps database\n>1\tstring\t>\\0\tversion %s\n>4\tstring\t>\\0\tfrom kernel %s\n\n#------------------------------------------------------------------------------\n# $File$\n# pulsar:  file(1) magic for Pulsar POP3 daemon binary files\n#\n# http://pulsar.sourceforge.net\n# mailto:rok.papez@lugos.si\n#\n\n0\tbelong\t0x1ee7f11e\tPulsar POP3 daemon mailbox cache file.\n>4\tubelong\tx\t\tVersion: %d.\n>8\tubelong\tx\t\t\\b%d\n\n\n#------------------------------------------------------------------------------\n# $File: vax,v 1.7 2009/09/19 16:28:13 christos Exp $\n# pwsafe: file(1) magic for passwordsafe file\n#\n# Password Safe\n# http://passwordsafe.sourceforge.net/\n# file format specs\n# http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV3.txt\n# V2 http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV2.txt\n# V1 http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/notes.txt\n# V2 and V1 have no easy identifier that I can find\n# .psafe3\n0\tstring\tPWS3\tPassword Safe V3 database\n\n#------------------------------------------------------------------------------\n# $File$\n# pyramid:  file(1) magic for Pyramids\n#\n# XXX - byte order?\n#\n0\tlong\t\t0x50900107\tPyramid 90x family executable\n0\tlong\t\t0x50900108\tPyramid 90x family pure executable\n>16\tlong\t\t>0\t\tnot stripped\n0\tlong\t\t0x5090010b\tPyramid 90x family demand paged pure executable\n>16\tlong\t\t>0\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: python,v 1.25 2014/05/06 16:08:32 christos Exp $\n# python:  file(1) magic for python\n#\n# Outlook puts \"\"\" too for urgent messages\n# From: David Necas <yeti@physics.muni.cz>\n# often the module starts with a multiline string\n0\tstring/t\t\"\"\"\tPython script text executable\n# MAGIC as specified in Python/import.c (1.5 to 2.7a0 and 3.1a0, assuming\n# that Py_UnicodeFlag is off for Python 2)\n# 20121  ( YEAR - 1995 ) + MONTH  + DAY (little endian followed by \"\\r\\n\"\n0\tbelong\t\t0x994e0d0a\tpython 1.5/1.6 byte-compiled\n0\tbelong\t\t0x87c60d0a\tpython 2.0 byte-compiled\n0\tbelong\t\t0x2aeb0d0a\tpython 2.1 byte-compiled\n0\tbelong\t\t0x2ded0d0a\tpython 2.2 byte-compiled\n0\tbelong\t\t0x3bf20d0a\tpython 2.3 byte-compiled\n0\tbelong\t\t0x6df20d0a\tpython 2.4 byte-compiled\n0\tbelong\t\t0xb3f20d0a\tpython 2.5 byte-compiled\n0\tbelong\t\t0xd1f20d0a\tpython 2.6 byte-compiled\n0\tbelong\t\t0x03f30d0a\tpython 2.7 byte-compiled\n0\tbelong\t\t0x3b0c0d0a\tpython 3.0 byte-compiled\n0\tbelong\t\t0x4f0c0d0a\tpython 3.1 byte-compiled\n0\tbelong\t\t0x6c0c0d0a\tpython 3.2 byte-compiled\n0\tbelong\t\t0x9e0c0d0a\tpython 3.3 byte-compiled\n0\tbelong\t\t0xee0c0d0a\tpython 3.4 byte-compiled\n\n0\tsearch/1/w\t#!\\ /usr/bin/python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1/w\t#!\\ /usr/local/bin/python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1\t#!/usr/bin/env\\ python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1\t#!\\ /usr/bin/env\\ python\tPython script text executable\n!:mime text/x-python\n\n\n# from module.submodule import func1, func2\n0\tregex\t\\^from\\\\s+(\\\\w|\\\\.)+\\\\s+import.*$\tPython script text executable\n!:mime text/x-python\n\n# def __init__ (self, ...):\n0\tsearch/4096\tdef\\ __init__\n>&0\tsearch/64 self\tPython script text executable\n!:mime text/x-python\n\n# comments\n#0\tsearch/4096\t'''\n#>&0\tregex\t.*'''$\tPython script text executable\n#!:mime text/x-python\n\n#0\tsearch/4096\t\"\"\"\n#>&0\tregex\t.*\"\"\"$\tPython script text executable\n#!:mime text/x-python\n\n# try:\n# except: or finally:\n# block\n0\tsearch/4096\ttry:\n>&0\tregex\t\\^\\\\s*except.*:\tPython script text executable\n!:mime text/x-python\n>&0\tsearch/4096\tfinally:\tPython script text executable\n!:mime text/x-python\n\n# def name(args, args):\n0\tregex\t \\^(\\ |\\\\t){0,50}def\\ {1,50}[a-zA-Z]{1,100}\n>&0\tregex\t\\ {0,50}\\\\(([a-zA-Z]|,|\\ ){1,255}\\\\):$ Python script text executable\n!:mime text/x-python\n\n#------------------------------------------------------------------------------\n# $File: qt,v 1.1 2014/12/12 16:48:39 christos Exp $\n# qt:  file(1) magic for Qt\n\n# http://doc.qt.io/qt-5/resources.html\n0\tstring\t\t\\<!DOCTYPE\\040RCC\\>\tQt Resource Collection file\n\n# https://qt.gitorious.org/qt/qtbase/source/\\\n# 5367fa356233da4c0f28172a8f817791525f5457:\\\n# src/tools/rcc/rcc.cpp#L840\n0\tstring\t\tqres\\0\\0\t\tQt Binary Resource file\n0\tsearch/1024\tThe\\040Resource\\040Compiler\\040for\\040Qt\tQt C-code resource file\n\n# https://qt.gitorious.org/qt/qtbase/source/\\\n# 5367fa356233da4c0f28172a8f817791525f5457:\\\n# src/corelib/kernel/qtranslator.cpp#L62\n0\tstring\t\t\\x3c\\xb8\\x64\\x18\\xca\\xef\\x9c\\x95\n>8\tstring\t\t\\xcd\\x21\\x1c\\xbf\\x60\\xa1\\xbd\\xdd\tQt Translation file\n\n#------------------------------------------------------------------------------\n# $File: revision,v 1.8 2010/11/25 15:00:12 christos Exp $\n# file(1) magic for revision control files\n# From Hendrik Scholz <hendrik@scholz.net>\n0\tstring/t\t/1\\ :pserver:\tcvs password text file\n\n# Conary changesets\n# From: Jonathan Smith <smithj@rpath.com>\n0\tbelong\t0xea3f81bb\tConary changeset data\n\n# Type: Git bundles (git-bundle)\n# From: Josh Triplett <josh@freedesktop.org>\n0\tstring\t#\\ v2\\ git\\ bundle\\n\tGit bundle\n\n# Type: Git pack\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However,\n# those have a little-endian offset immediately following the magic 'PACK',\n# the first byte of which is never 0, while the first byte of the Git pack\n# version, since it's a tiny number stored in big-endian format, is always 0.\n0\tstring\tPACK\\0\t\tGit pack\n>4\tbelong\t>0\t\t\\b, version %d\n>>8\tbelong\t>0\t\t\\b, %d objects\n\n# Type: Git pack index\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\t\\377tOc\t\tGit pack index\n>4\tbelong\t=2\t\t\\b, version 2\n\n# Type: Git index file\n# From: Frederic Briare <fbriere@fbriere.net>\n0\tstring\tDIRC\t\tGit index\n>4\tbelong\t>0\t\t\\b, version %d\n>>8\tbelong\t>0\t\t\\b, %d entries\n\n# Type:\tMercurial bundles\n# From:\tSeo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>\n0\tstring\tHG10\t\tMercurial bundle,\n>4\tstring\tUN\t\tuncompressed\n>4\tstring\tBZ\t\tbzip2 compressed\n\n# Type:\tSubversion (SVN) dumps\n# From:\tUwe Zeisberger <zeisberg@informatik.uni-freiburg.de>\n0\tstring\tSVN-fs-dump-format-version:\tSubversion dumpfile\n>28\tstring\t>\\0\t\t\t\t(version: %s)\n\n# Type:\tBazaar revision bundles and merge requests\n# URL:\thttp://www.bazaar-vcs.org/\n# From:\tJelmer Vernooij <jelmer@samba.org>\n0\tstring\t#\\ Bazaar\\ revision\\ bundle\\ v Bazaar Bundle\n0\tstring\t#\\ Bazaar\\ merge\\ directive\\ format Bazaar merge directive\n\n#------------------------------------------------------------------------------\n# $File: riff,v 1.30 2014/09/23 17:02:12 christos Exp $\n# riff:  file(1) magic for RIFF format\n# See\n#\n#\thttp://www.seanet.com/users/matts/riffmci/riffmci.htm\n#\n\n# audio format tag. Assume limits: max 1024 bit, 128 channels, 1 MHz\n0   name    riff-wave\n>0\tleshort\t\t1\t\t\\b, Microsoft PCM\n>>14\tleshort\t\t>0\n>>>14\tleshort\t\t<1024\t\\b, %d bit\n>0\tleshort\t\t2\t\t\\b, Microsoft ADPCM\n>0\tleshort\t\t6\t\t\\b, ITU G.711 A-law\n>0\tleshort\t\t7\t\t\\b, ITU G.711 mu-law\n>0\tleshort\t\t8\t\t\\b, Microsoft DTS\n>0\tleshort\t\t17\t\t\\b, IMA ADPCM\n>0\tleshort\t\t20\t\t\\b, ITU G.723 ADPCM (Yamaha)\n>0\tleshort\t\t49\t\t\\b, GSM 6.10\n>0\tleshort\t\t64\t\t\\b, ITU G.721 ADPCM\n>0\tleshort\t\t80\t\t\\b, MPEG\n>0\tleshort\t\t85\t\t\\b, MPEG Layer 3\n>0\tleshort\t\t0x2001\t\t\\b, DTS\n>2\tleshort\t\t=1\t\t\\b, mono\n>2\tleshort\t\t=2\t\t\\b, stereo\n>2\tleshort\t\t>2\n>>2\tleshort\t\t<128\t\\b, %d channels\n>4\tlelong\t\t>0\n>>4\tlelong\t\t<1000000\t%d Hz\n\n# try to find \"fmt \"\n0   name    riff-walk\n>0  string  fmt\\x20\n>>4 lelong  <0x80\n>>>8 use    riff-wave\n>0  string  LIST\n>>&(4.l+4)  use riff-walk\n>0  string  DISP\n>>&(4.l+4)  use riff-walk\n>0  string  bext\n>>&(4.l+4)  use riff-walk\n>0  string  Fake\n>>&(4.l+4)  use riff-walk\n>0  string  fact\n>>&(4.l+4)  use riff-walk\n>0  string  VP8\n>>11\t\tbyte\t\t0x9d\n>>>12\t\tbyte\t\t0x01\n>>>>13\t\tbyte\t\t0x2a\t\\b, VP8 encoding\n>>>>>14\t\tleshort&0x3fff\tx\t\\b, %d\n>>>>>16\t\tleshort&0x3fff\tx\t\\bx%d, Scaling:\n>>>>>14\t\tleshort&0xc000\t0x0000\t\\b [none]\n>>>>>14\t\tleshort&0xc000\t0x1000\t\\b [5/4]\n>>>>>14\t\tleshort&0xc000\t0x2000\t\\b [5/3]\n>>>>>14\t\tleshort&0xc000\t0x3000\t\\b [2]\n>>>>>14\t\tleshort&0xc000\t0x0000\t\\bx[none]\n>>>>>14\t\tleshort&0xc000\t0x1000\t\\bx[5/4]\n>>>>>14\t\tleshort&0xc000\t0x2000\t\\bx[5/3]\n>>>>>14\t\tleshort&0xc000\t0x3000\t\\bx[2]\n>>>>>15\t\tbyte&0x80\t=0x00\t\\b, YUV color\n>>>>>15\t\tbyte&0x80\t=0x80\t\\b, bad color specification\n>>>>>15\t\tbyte&0x40\t=0x40\t\\b, no clamping required\n>>>>>15\t\tbyte&0x40\t=0x00\t\\b, decoders should clamp\n#>0  string  x\t\twe got %s\n#>>&(4.l+4)  use riff-walk\n\n# AVI section extended by Patrik Radman <patrik+file-magic@iki.fi>\n#\n0\tstring\t\tRIFF\t\tRIFF (little-endian) data\n# RIFF Palette format\n>8\tstring\t\tPAL\t\t\\b, palette\n>>16\tleshort\t\tx\t\t\\b, version %d\n>>18\tleshort\t\tx\t\t\\b, %d entries\n# RIFF Device Independent Bitmap format\n>8\tstring\t\tRDIB\t\t\\b, device-independent bitmap\n>>16\tstring\t\tBM\t\t\n>>>30\tleshort\t\t12\t\t\\b, OS/2 1.x format\n>>>>34\tleshort\t\tx\t\t\\b, %d x\n>>>>36\tleshort\t\tx\t\t%d\n>>>30\tleshort\t\t64\t\t\\b, OS/2 2.x format\n>>>>34\tleshort\t\tx\t\t\\b, %d x\n>>>>36\tleshort\t\tx\t\t%d\n>>>30\tleshort\t\t40\t\t\\b, Windows 3.x format\n>>>>34\tlelong\t\tx\t\t\\b, %d x\n>>>>38\tlelong\t\tx\t\t%d x\n>>>>44\tleshort\t\tx\t\t%d\n# RIFF MIDI format\n>8\tstring\t\tRMID\t\t\\b, MIDI\n# RIFF Multimedia Movie File format\n>8\tstring\t\tRMMP\t\t\\b, multimedia movie\n# RIFF wrapper for MP3\n>8\tstring\t\tRMP3\t\t\\b, MPEG Layer 3 audio\n# Microsoft WAVE format (*.wav)\n>8\tstring\t\tWAVE\t\t\\b, WAVE audio\n!:mime\taudio/x-wav\n>>12    string  >\\0\n>>>12   use     riff-walk\n# Corel Draw Picture\n>8\tstring\t\tCDRA\t\t\\b, Corel Draw Picture\n!:mime\timage/x-coreldraw\n>8\tstring\t\tCDR6\t\t\\b, Corel Draw Picture, version 6\n!:mime\timage/x-coreldraw\n>8\tstring\t\tNUNDROOT\t\\b, Steinberg CuBase\n# AVI == Audio Video Interleave\n>8\tstring\t\tAVI\\040\t\t\\b, AVI\n!:mime\tvideo/x-msvideo\n>>12    string          LIST\n>>>20   string          hdrlavih\n>>>>&36 lelong          x               \\b, %u x\n>>>>&40 lelong          x               %u,\n>>>>&4  lelong          >1000000        <1 fps,\n>>>>&4  lelong          1000000         1.00 fps,\n>>>>&4  lelong          500000          2.00 fps,\n>>>>&4  lelong          333333          3.00 fps,\n>>>>&4  lelong          250000          4.00 fps,\n>>>>&4  lelong          200000          5.00 fps,\n>>>>&4  lelong          166667          6.00 fps,\n>>>>&4  lelong          142857          7.00 fps,\n>>>>&4  lelong          125000          8.00 fps,\n>>>>&4  lelong          111111          9.00 fps,\n>>>>&4  lelong          100000          10.00 fps,\n# ]9.9,10.1[\n>>>>&4  lelong          <101010\n>>>>>&-4        lelong  >99010\n>>>>>>&-4       lelong  !100000         ~10 fps,\n>>>>&4  lelong          83333           12.00 fps,\n# ]11.9,12.1[\n>>>>&4  lelong          <84034\n>>>>>&-4        lelong  >82645\n>>>>>>&-4       lelong  !83333          ~12 fps,\n>>>>&4  lelong          66667           15.00 fps,\n# ]14.9,15.1[\n>>>>&4  lelong          <67114\n>>>>>&-4        lelong  >66225\n>>>>>>&-4       lelong  !66667          ~15 fps,\n>>>>&4  lelong          50000           20.00 fps,\n>>>>&4  lelong          41708           23.98 fps,\n>>>>&4  lelong          41667           24.00 fps,\n# ]23.9,24.1[\n>>>>&4  lelong          <41841\n>>>>>&-4        lelong  >41494\n>>>>>>&-4       lelong  !41708\n>>>>>>>&-4      lelong  !41667          ~24 fps,\n>>>>&4  lelong          40000           25.00 fps,\n# ]24.9,25.1[\n>>>>&4  lelong          <40161\n>>>>>&-4        lelong  >39841\n>>>>>>&-4       lelong  !40000          ~25 fps,\n>>>>&4  lelong          33367           29.97 fps,\n>>>>&4  lelong          33333           30.00 fps,\n# ]29.9,30.1[\n>>>>&4  lelong          <33445\n>>>>>&-4        lelong  >33223\n>>>>>>&-4       lelong  !33367\n>>>>>>>&-4      lelong  !33333          ~30 fps,\n>>>>&4  lelong          <32224          >30 fps,\n##>>>>&4  lelong          x               (%lu)\n##>>>>&20 lelong          x               %lu frames,\n# Note: The tests below assume that the AVI has 1 or 2 streams,\n#       \"vids\" optionally followed by \"auds\".\n#       (Should cover 99.9% of all AVIs.)\n# assuming avih length = 56\n>>>88   string  LIST\n>>>>96  string  strlstrh\n>>>>>108        string  vids    video:\n>>>>>>&0        lelong  0               uncompressed\n# skip past vids strh\n>>>>>>(104.l+108)       string  strf\n>>>>>>>(104.l+132)      lelong          1       RLE 8bpp\n>>>>>>>(104.l+132)      string/c        cvid    Cinepak\n>>>>>>>(104.l+132)      string/c        i263    Intel I.263\n>>>>>>>(104.l+132)      string/c        iv32    Indeo 3.2\n>>>>>>>(104.l+132)      string/c        iv41    Indeo 4.1\n>>>>>>>(104.l+132)      string/c        iv50    Indeo 5.0\n>>>>>>>(104.l+132)      string/c        mp42    Microsoft MPEG-4 v2\n>>>>>>>(104.l+132)      string/c        mp43    Microsoft MPEG-4 v3\n>>>>>>>(104.l+132)      string/c        fmp4    FFMpeg MPEG-4\n>>>>>>>(104.l+132)      string/c        mjpg    Motion JPEG\n>>>>>>>(104.l+132)      string/c        div3    DivX 3\n>>>>>>>>112             string/c        div3    Low-Motion\n>>>>>>>>112             string/c        div4    Fast-Motion\n>>>>>>>(104.l+132)      string/c        divx    DivX 4\n>>>>>>>(104.l+132)      string/c        dx50    DivX 5\n>>>>>>>(104.l+132)      string/c        xvid    XviD\n>>>>>>>(104.l+132)\tstring/c\th264\tH.264\n>>>>>>>(104.l+132)      string/c        wmv3    Windows Media Video 9\n>>>>>>>(104.l+132)      string/c        h264    X.264 or H.264\n>>>>>>>(104.l+132)      lelong  0\n##>>>>>>>(104.l+132)      string  x       (%.4s)\n# skip past first (video) LIST\n>>>>(92.l+96)   string  LIST\n>>>>>(92.l+104) string  strlstrh\n>>>>>>(92.l+116)        string          auds    \\b, audio:\n# auds strh length = 56:\n>>>>>>>(92.l+172)       string          strf\n>>>>>>>>(92.l+180)      leshort 0x0001  uncompressed PCM\n>>>>>>>>(92.l+180)      leshort 0x0002  ADPCM\n>>>>>>>>(92.l+180)      leshort 0x0006  aLaw\n>>>>>>>>(92.l+180)      leshort 0x0007  uLaw\n>>>>>>>>(92.l+180)      leshort 0x0050  MPEG-1 Layer 1 or 2\n>>>>>>>>(92.l+180)      leshort 0x0055  MPEG-1 Layer 3\n>>>>>>>>(92.l+180)      leshort 0x2000  Dolby AC3\n>>>>>>>>(92.l+180)      leshort 0x0161  DivX\n##>>>>>>>>(92.l+180)      leshort x       (0x%.4x)\n>>>>>>>>(92.l+182)      leshort 1       (mono,\n>>>>>>>>(92.l+182)      leshort 2       (stereo,\n>>>>>>>>(92.l+182)      leshort >2      (%d channels,\n>>>>>>>>(92.l+184)      lelong  x       %d Hz)\n# auds strh length = 64:\n>>>>>>>(92.l+180)       string          strf\n>>>>>>>>(92.l+188)      leshort 0x0001  uncompressed PCM\n>>>>>>>>(92.l+188)      leshort 0x0002  ADPCM\n>>>>>>>>(92.l+188)      leshort 0x0055  MPEG-1 Layer 3\n>>>>>>>>(92.l+188)      leshort 0x2000  Dolby AC3\n>>>>>>>>(92.l+188)      leshort 0x0161  DivX\n##>>>>>>>>(92.l+188)      leshort x       (0x%.4x)\n>>>>>>>>(92.l+190)      leshort 1       (mono,\n>>>>>>>>(92.l+190)      leshort 2       (stereo,\n>>>>>>>>(92.l+190)      leshort >2      (%d channels,\n>>>>>>>>(92.l+192)      lelong  x       %d Hz)\n# Animated Cursor format\n>8\tstring\t\tACON\t\t\\b, animated cursor\n# SoundFont 2 <mpruett@sgi.com>\n>8\tstring\t\tsfbk\t\tSoundFont/Bank\n# MPEG-1 wrapped in a RIFF, apparently\n>8      string          CDXA            \\b, wrapped MPEG-1 (CDXA)\n>8\tstring\t\t4XMV\t\t\\b, 4X Movie file \n# AMV-type AVI file: http://wiki.multimedia.cx/index.php?title=AMV\n>8\tstring\t\tAMV\\040\t\t\\b, AMV \n>8      string          WEBP            \\b, Web/P image\n!:mime\timage/webp\n>>12\tuse\t\triff-walk\n\n#\n# XXX - some of the below may only appear in little-endian form.\n#\n# Also \"MV93\" appears to be for one form of Macromedia Director\n# files, and \"GDMF\" appears to be another multimedia format.\n#\n0\tstring\t\tRIFX\t\tRIFF (big-endian) data\n# RIFF Palette format\n>8\tstring\t\tPAL\t\t\\b, palette\n>>16\tbeshort\t\tx\t\t\\b, version %d\n>>18\tbeshort\t\tx\t\t\\b, %d entries\n# RIFF Device Independent Bitmap format\n>8\tstring\t\tRDIB\t\t\\b, device-independent bitmap\n>>16\tstring\t\tBM\t\t\n>>>30\tbeshort\t\t12\t\t\\b, OS/2 1.x format\n>>>>34\tbeshort\t\tx\t\t\\b, %d x\n>>>>36\tbeshort\t\tx\t\t%d\n>>>30\tbeshort\t\t64\t\t\\b, OS/2 2.x format\n>>>>34\tbeshort\t\tx\t\t\\b, %d x\n>>>>36\tbeshort\t\tx\t\t%d\n>>>30\tbeshort\t\t40\t\t\\b, Windows 3.x format\n>>>>34\tbelong\t\tx\t\t\\b, %d x\n>>>>38\tbelong\t\tx\t\t%d x\n>>>>44\tbeshort\t\tx\t\t%d\n# RIFF MIDI format\n>8\tstring\t\tRMID\t\t\\b, MIDI\n# RIFF Multimedia Movie File format\n>8\tstring\t\tRMMP\t\t\\b, multimedia movie\n# Microsoft WAVE format (*.wav)\n>8\tstring\t\tWAVE\t\t\\b, WAVE audio\n>>20\tleshort\t\t1\t\t\\b, Microsoft PCM\n>>>34\tleshort\t\t>0\t\t\\b, %d bit\n>>22\tbeshort\t\t=1\t\t\\b, mono\n>>22\tbeshort\t\t=2\t\t\\b, stereo\n>>22\tbeshort\t\t>2\t\t\\b, %d channels\n>>24\tbelong\t\t>0\t\t%d Hz\n# Corel Draw Picture\n>8\tstring\t\tCDRA\t\t\\b, Corel Draw Picture\n>8\tstring\t\tCDR6\t\t\\b, Corel Draw Picture, version 6\n# AVI == Audio Video Interleave\n>8\tstring\t\tAVI\\040\t\t\\b, AVI\n# Animated Cursor format\n>8\tstring\t\tACON\t\t\\b, animated cursor\n# Notation Interchange File Format (big-endian only)\n>8\tstring\t\tNIFF\t\t\\b, Notation Interchange File Format\n# SoundFont 2 <mpruett@sgi.com>\n>8\tstring\t\tsfbk\t\tSoundFont/Bank\n\n#------------------------------------------------------------------------------\n# Sony Wave64\n# see http://www.vcs.de/fileadmin/user_upload/MBS/PDF/Whitepaper/Informations_about_Sony_Wave64.pdf\n# 128 bit RIFF-GUID { 66666972-912E-11CF-A5D6-28DB04C10000 } in little-endian \n0\tstring\triff\\x2E\\x91\\xCF\\x11\\xA5\\xD6\\x28\\xDB\\x04\\xC1\\x00\\x00\t\tSony Wave64 RIFF data\n# 128 bit + total file size (64 bits) so 24 bytes\n# then WAVE-GUID { 65766177-ACF3-11D3-8CD1-00C04F8EDB8A }\n>24\tstring\t\twave\\xF3\\xAC\\xD3\\x11\\x8C\\xD1\\x00\\xC0\\x4F\\x8E\\xDB\\x8A\t\t\\b, WAVE 64 audio\n!:mime\taudio/x-w64\n# FMT-GUID { 20746D66-ACF3-11D3-8CD1-00C04F8EDB8A }\n>>40\tsearch/256\tfmt\\x20\\xF3\\xAC\\xD3\\x11\\x8C\\xD1\\x00\\xC0\\x4F\\x8E\\xDB\\x8A\t\t\\b\n>>>&10\tleshort\t\t=1\t\t\\b, mono\n>>>&10\tleshort\t\t=2\t\t\\b, stereo\n>>>&10\tleshort\t\t>2\t\t\\b, %d channels\n>>>&12\tlelong\t\t>0\t\t%d Hz\n\n#------------------------------------------------------------------------------\n# MBWF/RF64\n# see EBU TECH 3306 http://tech.ebu.ch/docs/tech/tech3306-2009.pdf\n0\tstring\tRF64\\xff\\xff\\xff\\xffWAVEds64\t\tMBWF/RF64 audio\n!:mime\taudio/x-wav\n>40\tsearch/256\tfmt\\x20\t\t\\b\n>>&6\tleshort\t\t=1\t\t\\b, mono\n>>&6\tleshort\t\t=2\t\t\\b, stereo\n>>&6\tleshort\t\t>2\t\t\\b, %d channels\n>>&8\tlelong\t\t>0\t\t%d Hz\n\n#------------------------------------------------------------------------------\n# $File: rinex,v 1.3 2011/04/04 21:12:03 christos Exp $\n# rinex:  file(1) magic for RINEX files\n# http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt\n# ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf\n# data for testing: ftp://cddis.gsfc.nasa.gov/pub/gps/data\n60\tstring\t\tRINEX\n>80\tsearch/256\tXXRINEXB\tRINEX Data, GEO SBAS Broadcast\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/broadcast\n>80\tsearch/256\tXXRINEXD\tRINEX Data, Observation (Hatanaka comp)\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/observation\n>80\tsearch/256\tXXRINEXC\tRINEX Data, Clock\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/clock\n>80\tsearch/256\tXXRINEXH\tRINEX Data, GEO SBAS Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXG\tRINEX Data, GLONASS Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXL\tRINEX Data, Galileo Navigation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXM\tRINEX Data, Meteorological\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/meteorological\n>80\tsearch/256\tXXRINEXN\tRINEX Data, Navigation\t\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/navigation\n>80\tsearch/256\tXXRINEXO\tRINEX Data, Observation\n>>&32\tstring\t\tx\t\t\\b, date %15.15s\n>>5\tstring\t\tx\t\t\\b, version %6.6s\n!:mime\trinex/observation\n\n#------------------------------------------------------------------------------\n# $File: rpm,v 1.11 2011/06/14 12:47:41 christos Exp $\n#\n# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt@redhat.com)\n#\n0\tbelong\t\t0xedabeedb\tRPM\n!:mime\tapplication/x-rpm\n>4\tbyte\t\tx\t\tv%d\n>5\tbyte\t\tx\t\t\\b.%d\n>6\tbeshort\t\t1\t\tsrc\n>6\tbeshort\t\t0\t\tbin\n>>8\tbeshort\t\t1\t\ti386/x86_64\n>>8\tbeshort\t\t2\t\tAlpha/Sparc64\n>>8\tbeshort\t\t3\t\tSparc\n>>8\tbeshort\t\t4\t\tMIPS\n>>8\tbeshort\t\t5\t\tPowerPC\n>>8\tbeshort\t\t6\t\t68000\n>>8\tbeshort\t\t7\t\tSGI\n>>8\tbeshort\t\t8\t\tRS6000\n>>8\tbeshort\t\t9\t\tIA64\n>>8\tbeshort\t\t10\t\tSparc64\n>>8\tbeshort\t\t11\t\tMIPSel\n>>8\tbeshort\t\t12\t\tARM\n>>8\tbeshort\t\t13\t\tMiNT\n>>8\tbeshort\t\t14\t\tS/390\n>>8\tbeshort\t\t15\t\tS/390x\n>>8\tbeshort\t\t16\t\tPowerPC64\n>>8\tbeshort\t\t17\t\tSuperH\n>>8\tbeshort\t\t18\t\tXtensa\n>>8\tbeshort\t\t255\t\tnoarch\n\n#delta RPM    Daniel Novotny (dnovotny@redhat.com)\n0\tstring\t\tdrpm\t\tDelta RPM\n!:mime  application/x-rpm\n>12\tstring \tx\t%s\n>>8\tbeshort\t\t11\t\tMIPSel\n>>8\tbeshort\t\t12\t\tARM\n>>8\tbeshort\t\t13\t\tMiNT\n>>8\tbeshort\t\t14\t\tS/390\n>>8\tbeshort\t\t15\t\tS/390x\n>>8\tbeshort\t\t16\t\tPowerPC64\n>>8\tbeshort\t\t17\t\tSuperH\n>>8\tbeshort\t\t18\t\tXtensa\n>>10\tstring\t\tx\t\t%s\n\n#------------------------------------------------------------------------------\n# $File$\n# rtf:\tfile(1) magic for Rich Text Format (RTF)\n#\n# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk\n#\n0\tstring\t\t{\\\\rtf\t\tRich Text Format data,\n!:mime\ttext/rtf\n>5\tstring\t\t1\t\tversion 1,\n>>6\tstring\t\t\\\\ansi\t\tANSI\n>>6\tstring\t\t\\\\mac\t\tApple Macintosh\n>>6\tstring\t\t\\\\pc\t\tIBM PC, code page 437\n>>6\tstring\t\t\\\\pca\t\tIBM PS/2, code page 850\n>>6\tdefault\t\tx\t\tunknown character set\n>5\tdefault\t\tx\t\tunknown version\n\n#------------------------------------------------------------------------------\n# $File: ruby,v 1.4 2010/07/08 20:24:13 christos Exp $\n# ruby:  file(1) magic for Ruby scripting language\n# URL:  http://www.ruby-lang.org/\n# From: Reuben Thomas <rrt@sc3d.org>\n\n# Ruby scripts\n0\tsearch/1/w\t#!\\ /usr/bin/ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1/w\t#!\\ /usr/local/bin/ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1\t#!/usr/bin/env\\ ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1\t#!\\ /usr/bin/env\\ ruby\tRuby script text executable\n!:mime text/x-ruby\n\n# What looks like ruby, but does not have a shebang\n# (modules and such)\n# From: Lubomir Rintel <lkundrak@v3.sk>\n0\tregex\t\t\\^[\\ \\t]*require[\\ \\t]'[A-Za-z_/]+'\n>0\tregex\t\tinclude\\ [A-Z]|def\\ [a-z]|\\ do$\n>>0\tregex\t\t\\^[\\ \\t]*end([\\ \\t]*[;#].*)?$\t\tRuby script text\n!:mime\ttext/x-ruby\n0\tregex\t\t\\^[\\ \\t]*(class|module)[\\ \\t][A-Z]\n>0\tregex\t\t(modul|includ)e\\ [A-Z]|def\\ [a-z]\n>>0\tregex\t\t\\^[\\ \\t]*end([\\ \\t]*[;#].*)?$\t\tRuby module source text\n!:mime\ttext/x-ruby\n\n#------------------------------------------------------------------------------\n# $File$\n# sc:  file(1) magic for \"sc\" spreadsheet\n#\n38\tstring\t\tSpreadsheet\tsc spreadsheet file\n!:mime\tapplication/x-sc\n\n#------------------------------------------------------------------------------\n# $File$\n# sccs:  file(1) magic for SCCS archives\n#\n# SCCS archive structure:\n# \\001h01207\n# \\001s 00276/00000/00000\n# \\001d D 1.1 87/09/23 08:09:20 ian 1 0\n# \\001c date and time created 87/09/23 08:09:20 by ian\n# \\001e\n# \\001u\n# \\001U\n# ... etc.\n# Now '\\001h' happens to be the same as the 3B20's a.out magic number (0550).\n# *Sigh*. And these both came from various parts of the USG.\n# Maybe we should just switch everybody from SCCS to RCS!\n# Further, you can't just say '\\001h0', because the five-digit number\n# is a checksum that could (presumably) have any leading digit,\n# and we don't have regular expression matching yet. \n# Hence the following official kludge:\n8\tstring\t\t\\001s\\ \t\t\tSCCS archive data\n\n#------------------------------------------------------------------------------\n# $File: scientific,v 1.8 2014/01/06 17:46:23 rrt Exp $\n# scientific:  file(1) magic for scientific formats \n#\n# From: Joe Krahn <krahn@niehs.nih.gov>\n\n########################################################\n# CCP4 data and plot files:\n0\tstring\t\tMTZ\\040\t\tMTZ reflection file\n\n92\tstring\t\tPLOT%%84\tPlot84 plotting file\n>52\tbyte\t\t1\t\t, Little-endian\n>55\tbyte\t\t1\t\t, Big-endian\n\n########################################################\n# Electron density MAP/MASK formats\n\n0\tstring\t\tEZD_MAP\tNEWEZD Electron Density Map\n109\tstring\t\tMAP\\040(  Old EZD Electron Density Map\n\n0\tstring/c\t:-)\\040Origin\tBRIX Electron Density Map\n>170\tstring\t\t>0\t, Sigma:%.12s\n#>4\tstring\t\t>0\t%.178s\n#>4\taddr\t\tx\t%.178s\n\n7\tstring\t\t18\\040!NTITLE\tXPLOR ASCII Electron Density Map\n9\tstring\t\t\\040!NTITLE\\012\\040REMARK\tCNS ASCII electron density map\n\n208\tstring\t\tMAP\\040\tCCP4 Electron Density Map\n# Assumes same stamp for float and double (normal case)\n>212\tbyte\t\t17\t\\b, Big-endian\n>212\tbyte\t\t34\t\\b, VAX format\n>212\tbyte\t\t68\t\\b, Little-endian\n>212\tbyte\t\t85\t\\b, Convex native\n\n############################################################\n# X-Ray Area Detector images\n0\tstring\tR-AXIS4\\ \\ \\ \tR-Axis Area Detector Image:\n>796\tlelong\t<20\t\tLittle-endian, IP #%d,\n>>768\tlelong\t>0\t\tSize=%dx\n>>772\tlelong\t>0\t\t\\b%d\n>796\tbelong\t<20\t\tBig-endian, IP #%d,\n>>768\tbelong\t>0\t\tSize=%dx\n>>772\tbelong\t>0\t\t\\b%d\n\n0\tstring\tRAXIS\\ \\ \\ \\ \\ \tR-Axis Area Detector Image, Win32:\n>796\tlelong\t<20\t\tLittle-endian, IP #%d,\n>>768\tlelong\t>0\t\tSize=%dx\n>>772\tlelong\t>0\t\t\\b%d\n>796\tbelong\t<20\t\tBig-endian, IP #%d,\n>>768\tbelong\t>0\t\tSize=%dx\n>>772\tbelong\t>0\t\t\\b%d\n\n\n1028\tstring\tMMX\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\tMAR Area Detector Image,\n>1072\tulong\t>1\t\tCompressed(%d),\n>1100\tulong\t>1\t\t%d headers,\n>1104\tulong\t>0\t\t%d x\n>1108\tulong\t>0\t\t%d,\n>1120\tulong\t>0\t\t%d bits/pixel\n\n# Type: GEDCOM genealogical (family history) data\n# From: Giuseppe Bilotta\n0       search/1/c\t0\\ HEAD         GEDCOM genealogy text\n>&0     search\t\t1\\ GEDC\n>>&0    search\t\t2\\ VERS         version\n>>>&1   string\t\t>\\0\t\t%s\n# From: Phil Endecott <phil05@chezphil.org>\n0\tstring\t\\000\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\t\tGEDCOM data\n0\tstring\t\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\\000\t\tGEDCOM data\n0\tstring\t\\376\\377\\000\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\tGEDCOM data\n0\tstring\t\\377\\376\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\\000\tGEDCOM data\n\n# PDB: Protein Data Bank files\n# Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n# http://www.wwpdb.org/documentation/format32/sect2.html\n# http://www.ch.ic.ac.uk/chemime/\n#\n# The PDB file format is fixed-field, 80 columns. From the spec:\n#\n# COLS        DATA\n#  1 -  6      \"HEADER\"\n#  11 - 50     String(40)\n#  51 - 59     Date\n#  63 - 66     IDcode\n#\n# Thus, positions 7-10, 60-62 and 67-80 are spaces. The Date must be in the\n# format DD-MMM-YY, e.g., 01-JAN-70, and the IDcode consists of numbers and\n# uppercase letters. However, examples have been seen without the date string,\n# e.g., the example on the chemime site.\n0\tstring\tHEADER\\ \\ \\ \\ \n>&0\tregex/1l\t\\^.{40}\n>>&0\tregex/1l\t[0-9]{2}-[A-Z]{3}-[0-9]{2}\\ {3}\n>>>&0\tregex/1ls\t[A-Z0-9]{4}.{14}$\n>>>>&0\tregex/1l\t[A-Z0-9]{4}\tProtein Data Bank data, ID Code %s\n!:mime\tchemical/x-pdb\n>>>>0\tregex/1l\t[0-9]{2}-[A-Z]{3}-[0-9]{2}\t\\b, %s\n\n# Type:\tGDSII Stream file\n0\tbelong\t0x00060002\tGDSII Stream file\n>4\tbyte\t0x00\n>>5\tbyte\tx\t\tversion %d.0\n>4\tbyte\t>0x00\t\tversion %d\n>>5\tbyte\tx\t\t\\b.%d\n\n#------------------------------------------------------------------------------\n# $File$\n0\tsearch/1\t\t-----BEGIN\\ CERTIFICATE------\tRFC1421 Security Certificate text\n0\tsearch/1\t\t-----BEGIN\\ NEW\\ CERTIFICATE\tRFC1421 Security Certificate Signing Request text\n0\tbelong\t0xedfeedfe\tSun 'jks' Java Keystore File data\n# Type:\tSE Linux policy modules *.pp reference policy\n#\tfor Fedora 5 to 9, RHEL5, and Debian Etch and Lenny.\n# URL:\thttp://doc.coker.com.au/computers/selinux-magic\n# From:\tRussell Coker <russell@coker.com.au>\n\n0\t\tlelong\t0xf97cff8f\tSE Linux modular policy\n>4\t\tlelong\tx\t\tversion %d,\n>8\t\tlelong\tx\t\t%d sections,\n>>(12.l)\tlelong\t0xf97cff8d\n>>>(12.l+27)\tlelong\tx\t\tmod version %d,\n>>>(12.l+31)\tlelong\t0\t\tNot MLS,\n>>>(12.l+31)\tlelong\t1\t\tMLS,\n>>>(12.l+23)\tlelong\t2\n>>>>(12.l+47)\tstring\t>\\0\t\tmodule name %s\n>>>(12.l+23)\tlelong\t1\t\tbase\n\n1\tstring\tpolicy_module(\tSE Linux policy module source\n2\tstring\tpolicy_module(\tSE Linux policy module source\n\n0\tstring\t##\\ <summary>\tSE Linux policy interface source\n\n#0\tsearch\tgen_context(\tSE Linux policy file contexts\n\n#0\tsearch\tgen_sens(\tSE Linux policy MLS constraints source\n\n#------------------------------------------------------------------------------\n# $File$\n# sendmail:  file(1) magic for sendmail config files\n#\n# XXX - byte order?\n#\n0\tbyte\t046\t  Sendmail frozen configuration \n>16\tstring\t>\\0\t  - version %s\n0\tshort\t0x271c\t  Sendmail frozen configuration\n>16\tstring\t>\\0\t  - version %s\n\n#------------------------------------------------------------------------------\n# sendmail:  file(1) magic for sendmail m4(1) files\n#\n# From Hendrik Scholz <hendrik@scholz.net>\n# i.e. files in /usr/share/sendmail/cf/\n#\n0   string  divert(-1)\\n    sendmail m4 text file\n\n\n#------------------------------------------------------------------------------\n# $File: sequent,v 1.11 2014/06/02 19:27:54 christos Exp $\n# sequent:  file(1) magic for Sequent machines\n#\n# Sequent information updated by Don Dwiggins <atsun!dwiggins>.\n# For Sequent's multiprocessor systems (incomplete).\n0\tlelong\t0x00ea        \tBALANCE NS32000 .o\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %d\n0\tlelong\t0x10ea        \tBALANCE NS32000 executable (0 @ 0)\n>16\tlelong  >0            \tnot stripped\n>124\tlelong\t>0\t\tversion %d\n0\tlelong\t0x20ea        \tBALANCE NS32000 executable (invalid @ 0)\n>16\tlelong  >0            \tnot stripped\n>124\tlelong\t>0\t\tversion %d\n0\tlelong\t0x30ea        \tBALANCE NS32000 standalone executable\n>16\tlelong  >0          \tnot stripped\n>124\tlelong\t>0\t\tversion %d\n#\n# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.\n# Symmetry magic nums will not be reached if DOS COM comes before them;\n# byte 0xeb is matched before these get a chance.\n0\tleshort\t0x12eb\t\tSYMMETRY i386 .o\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %d\n0\tleshort\t0x22eb\t\tSYMMETRY i386 executable (0 @ 0)\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %d\n0\tleshort\t0x32eb\t\tSYMMETRY i386 executable (invalid @ 0)\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %d\n# http://en.wikipedia.org/wiki/Sequent_Computer_Systems\n# below test line conflicts with MS-DOS 2.11 floppies and Acronis loader\n#0\tleshort\t0x42eb\t\tSYMMETRY i386 standalone executable\n0\tleshort\t0x42eb\t\t\n# skip unlike negative version\n>124\tlelong\t>-1\t\t\n# assuming version 28867614 is very low probable\n>>124\tlelong\t!28867614\tSYMMETRY i386 standalone executable\n>>>16\tlelong\t>0\t\tnot stripped\n>>>124\tlelong\t>0\t\tversion %d\n\n#------------------------------------------------------------------------------\n# $File: sereal,v 1.2 2014/11/11 20:10:49 christos Exp $\n# sereal: file(1) magic the Sereal binary serialization format\n#\n# From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n#\n# See the specification of the format at\n# https://github.com/Sereal/Sereal/blob/master/sereal_spec.pod#document-header-format\n#\n# I'd have liked to do the byte&0xF0 matching against 0, 1, 2 ... by\n# doing (byte&0xF0)>>4 here, but unfortunately that's not\n# supported. So when we print out a message about an unknown format\n# we'll print out e.g. 0x30 instead of the more human-readable\n# 0x30>>4.\n#\n# See https://github.com/Sereal/Sereal/commit/35372ae01d in the\n# Sereal.git repository for test Sereal data.\n0\tname\t\tsereal\n>4\tbyte&0x0F\tx\t\t(version %d,\n>4\tbyte&0xF0\t0x00\t\tuncompressed)\n>4\tbyte&0xF0\t0x10\t\tcompressed with non-incremental Snappy)\n>4\tbyte&0xF0\t0x20\t\tcompressed with incremental Snappy)\n>4\tbyte&0xF0\t>0x20\t\tunknown subformat, flag: %d>>4)\n\n0\tstring/b\t\\=srl\t\tSereal data packet\n!:mime application/sereal\n>&0\tuse\t\tsereal\n0\tstring/b\t\\=\\xF3rl\tSereal data packet\n!:mime application/sereal\n>&0\tuse\t\tsereal\n0\tstring/b\t\\=\\xC3\\xB3rl\tSereal data packet, UTF-8 encoded\n!:mime application/sereal\n>&0\tuse\t\tsereal\n\n\n#------------------------------------------------------------------------------\n# $File: sgi,v 1.20 2014/03/10 00:53:38 christos Exp $\n# sgi:  file(1) magic for Silicon Graphics operating systems and applications\n#\n# Executable images are handled either in aout (for old-style a.out\n# files for 68K; they are indistinguishable from other big-endian 32-bit\n# a.out files) or in mips (for MIPS ECOFF and Ucode files)\n#\n\n# kbd file definitions\n0\tstring\tkbd!map\t\tkbd map file\n>8\tbyte\t>0\t\tVer %d:\n>10\tshort\t>0\t\twith %d table(s)\n\n0\tbeshort\t0x8765\t\tdisk quotas file\n\n0\tbeshort\t0x0506\t\tIRIS Showcase file\n>2\tbyte\t0x49\t\t-\n>3\tbyte\tx\t\t- version %d\n0\tbeshort\t0x0226\t\tIRIS Showcase template\n>2\tbyte\t0x63\t\t-\n>3\tbyte\tx\t\t- version %d\n0\tbelong\t0x5343464d\tIRIS Showcase file\n>4\tbyte\tx\t\t- version %d\n0\tbelong\t0x5443464d\tIRIS Showcase template\n>4\tbyte\tx\t\t- version %d\n0\tbelong\t0xdeadbabe\tIRIX Parallel Arena\n>8\tbelong\t>0\t\t- version %d\n\n# core files\n#\n# 32bit core file\n0\tbelong\t0xdeadadb0\tIRIX core dump\n>4\tbelong\t1\t\tof\n>16\tstring\t>\\0\t\t'%s'\n# 64bit core file\n0\tbelong\t0xdeadad40\tIRIX 64-bit core dump\n>4\tbelong\t1\t\tof\n>16\tstring\t>\\0\t\t'%s'\n# N32bit core file\n0       belong\t0xbabec0bb\tIRIX N32 core dump\n>4      belong\t1               of\n>16     string\t>\\0             '%s'\n# New style crash dump file\n0\tstring\t\\x43\\x72\\x73\\x68\\x44\\x75\\x6d\\x70\tIRIX vmcore dump of\n>36\tstring\t>\\0\t\t\t\t\t'%s'\n\n# Trusted IRIX info\n0\tstring\tSGIAUDIT\tSGI Audit file\n>8\tbyte\tx\t\t- version %d\n>9\tbyte\tx\t\t\\b.%d\n#\n0\tstring\tWNGZWZSC\tWingz compiled script\n0\tstring\tWNGZWZSS\tWingz spreadsheet\n0\tstring\tWNGZWZHP\tWingz help file\n#\n0\tstring\t#Inventor V\tIRIS Inventor 1.0 file\n0\tstring\t#Inventor V2\tOpen Inventor 2.0 file\n# GLF is OpenGL stream encoding\n0\tstring\tglfHeadMagic();\t\tGLF_TEXT\n4\tbelong\t0x7d000000\t\tGLF_BINARY_LSB_FIRST\n!:strength -30\n4\tbelong\t0x0000007d\t\tGLF_BINARY_MSB_FIRST\n!:strength -30\n# GLS is OpenGL stream encoding; GLS is the successor of GLF\n0\tstring\tglsBeginGLS(\t\tGLS_TEXT\n4\tbelong\t0x10000000\t\tGLS_BINARY_LSB_FIRST\n!:strength -30\n4\tbelong\t0x00000010\t\tGLS_BINARY_MSB_FIRST\n!:strength -30\n\n#\n#\n# Performance Co-Pilot file types\n0\tstring\tPmNs\t\t\t\tPCP compiled namespace (V.0)\n0\tstring\tPmN\t\t\t\tPCP compiled namespace\n>3\tstring\t>\\0\t\t\t\t(V.%1.1s)\n#3\tlelong\t0x84500526\t\t\tPCP archive\n3\tbelong\t0x84500526\t\t\tPCP archive\n>7\tbyte\tx\t\t\t\t(V.%d)\n#>20\tlelong\t-2\t\t\t\ttemporal index\n#>20\tlelong\t-1\t\t\t\tmetadata\n#>20\tlelong\t0\t\t\t\tlog volume #0\n#>20\tlelong\t>0\t\t\t\tlog volume #%d\n>20\tbelong\t-2\t\t\t\ttemporal index\n>20\tbelong\t-1\t\t\t\tmetadata\n>20\tbelong\t0\t\t\t\tlog volume #0\n>20\tbelong\t>0\t\t\t\tlog volume #%d\n>24\tstring\t>\\0\t\t\t\thost: %s\n0\tstring\tPCPFolio\t\t\tPCP\n>9\tstring\tVersion:\t\t\tArchive Folio\n>18\tstring\t>\\0\t\t\t\t(V.%s)\n0\tstring\t#pmchart\t\t\tPCP pmchart view\n>9\tstring\tVersion\n>17\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\t#kmchart\t\t\tPCP kmchart view\n>9\tstring\tVersion\n>17\tstring\t>\\0\t\t\t\t(V.%s)\n0\tstring\tpmview\t\t\t\tPCP pmview config\n>7\tstring\tVersion\n>15\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\t#pmlogger\t\t\tPCP pmlogger config\n>10\tstring\tVersion\n>18\tstring\t>\\0\t\t\t\t(V%1.1s)\n0\tstring\t#pmdahotproc\t\t\tPCP pmdahotproc config\n>13\tstring\tVersion\n>21\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\tPcPh\t\t\t\tPCP Help\n>4\tstring\t1\t\t\t\tIndex\n>4\tstring\t2\t\t\t\tText\n>5\tstring\t>\\0\t\t\t\t(V.%1.1s)\n0\tstring\t#pmieconf-rules\t\t\tPCP pmieconf rules\n>16\tstring\t>\\0\t\t\t\t(V.%1.1s)\n3\tstring\tpmieconf-pmie\t\t\tPCP pmie config\n>17\tstring\t>\\0\t\t\t\t(V.%1.1s)\n\n# SpeedShop data files\n0\tlelong\t0x13130303\t\t\tSpeedShop data file\n\n# mdbm files\n0\tlelong\t0x01023962\t\t\tmdbm file, version 0 (obsolete)\n0\tstring\tmdbm\t\t\t\tmdbm file,\n>5\tbyte\tx\t\t\t\tversion %d,\n>6\tbyte\tx\t\t\t\t2^%d pages,\n>7\tbyte\tx\t\t\t\tpagesize 2^%d,\n>17\tbyte\tx\t\t\t\thash %d,\n>11\tbyte\tx\t\t\t\tdataformat %d\n\n# Alias Maya files\n0\tstring/t\t//Maya\\040ASCII\tAlias Maya Ascii File,\n>13\tstring\t>\\0\tversion %s\n8\tstring\tMAYAFOR4\tAlias Maya Binary File,\n>32\tstring\t>\\0\tversion %s scene\n8\tstring\tMayaFOR4\tAlias Maya Binary File,\n>32\tstring\t>\\0\tversion %s scene\n8\tstring\tCIMG\t\tAlias Maya Image File\n8\tstring\tDEEP\t\tAlias Maya Image File\n#------------------------------------------------------------------------------\n# $File: sgml,v 1.29 2012/08/26 10:25:41 christos Exp $\n# Type:\tSVG Vectorial Graphics\n# From:\tNoel Torres <tecnico@ejerciciosresueltos.com>\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096\t\\<svg\t\t\tSVG Scalable Vector Graphics image\n!:mime\timage/svg+xml\n>>19\tsearch/4096\t\\<gnc-v2\t\tGnuCash file\n!:mime\tapplication/x-gnucash\n\n# Sitemap file\n0\tstring/t\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096\t\\<urlset\t\tXML Sitemap document text\n!:mime\tapplication/xml-sitemap\n\n# OpenStreetMap XML (.osm)\n# http://wiki.openstreetmap.org/wiki/OSM_XML\n# From: Markus Heidelberg <markus.heidelberg@web.de>\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096\t\\<osm\t\t\tOpenStreetMap XML data\n\n# xhtml\n0\tstring/t\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<!doctype\\ html\tXHTML document text\n!:mime\ttext/html\n0\tstring/t\t\t\\<?xml\\ version='\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<!doctype\\ html\tXHTML document text\n!:mime\ttext/html\n0\tstring/t\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<html\tbroken XHTML document text\n!:mime\ttext/html\n\n#------------------------------------------------------------------------------\n# sgml:  file(1) magic for Standard Generalized Markup Language\n# HyperText Markup Language (HTML) is an SGML document type,\n# from Daniel Quinlan (quinlan@yggdrasil.com)\n# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)\n0\tsearch/4096/cWt\t\\<!doctype\\ html\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<head\t\t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<title\t\t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<html\t\t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<script \t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<style \t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<table\t\t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n0\tsearch/4096/cwt\t\\<a\\ href=\t\tHTML document text\n!:mime\ttext/html\n!:strength + 5\n\n# Extensible markup language (XML), a subset of SGML\n# from Marc Prud'hommeaux (marc@apocalypse.org)\n0\tsearch/1/cwt\t\\<?xml\t\t\tXML document text\n!:mime\tapplication/xml\n!:strength + 5\n0\tstring/t\t\t\\<?xml\\ version\\ \"\tXML\n!:mime\tapplication/xml\n!:strength + 5\n0\tstring/t\t\t\\<?xml\\ version=\"\tXML\n!:mime\tapplication/xml\n!:strength + 5\n>15\tstring/t\t>\\0\t\t\t%.3s document text\n>>23\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n>>24\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n0\tstring\t\t\\<?xml\\ version='\tXML\n!:mime\tapplication/xml\n!:strength + 5\n>15\tstring/t\t>\\0\t\t\t%.3s document text\n>>23\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n>>24\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n0\tsearch/1/wbt\t\\<?xml\t\t\tXML document text\n!:mime\tapplication/xml\n!:strength - 10\n0\tsearch/1/wt\t\\<?XML\t\t\tbroken XML document text\n!:mime\tapplication/xml\n!:strength - 10\n\n\n# SGML, mostly from rph@sq\n0\tsearch/4096/cwt\t\\<!doctype\t\texported SGML document text\n0\tsearch/4096/cwt\t\\<!subdoc\t\texported SGML subdocument text\n0\tsearch/4096/cwt\t\\<!--\t\t\texported SGML document text\n!:strength - 10\n\n# Web browser cookie files\n# (Mozilla, Galeon, Netscape 4, Konqueror..)\n# Ulf Harnhammar <ulfh@update.uu.se>\n0\tsearch/1\t#\\ HTTP\\ Cookie\\ File\tWeb browser cookie text\n0\tsearch/1\t#\\ Netscape\\ HTTP\\ Cookie\\ File\tNetscape cookie text\n0\tsearch/1\t#\\ KDE\\ Cookie\\ File\tKonqueror cookie text\n\n#------------------------------------------------------------------------\n# $File: sharc,v 1.6 2009/09/19 16:28:12 christos Exp $\n# file(1) magic for sharc files\n#\n# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by \n# FutureGroove Music (dsp@futuregroove.de)\n\n#------------------------------------------------------------------------\n#0\tstring\t\t\tDraw\t\tRiscOS Drawfile\n#0\tstring\t\t\tPACK\t\tRiscOS PackdDir archive\n\n#------------------------------------------------------------------------\n# SHARC DSP stuff (based on the FGM SHARC DSP SDK)\n\n#0\tstring\t\t\t=!\t\tAssembler source\n#0\tstring\t\t\tAnalog\t\tADi asm listing file\n0\tstring\t\t\t.SYSTEM\t\tSHARC architecture file\n0\tstring\t\t\t.system\t\tSHARC architecture file\n\n0\tleshort\t\t\t0x521C\t\tSHARC COFF binary\n>2\tleshort\t\t\t>1\t\t, %d sections\n>>12\tlelong\t\t\t>0\t\t, not stripped\n\n#------------------------------------------------------------------------------\n# $File$\n# sinclair:  file(1) sinclair QL\n\n# additions to /etc/magic by Thomas M. Ott (ThMO)\n\n# Sinclair QL floppy disk formats (ThMO)\n0\tstring\t=QL5\t\tQL disk dump data,\n>3\tstring\t=A\t\t720 KB,\n>3\tstring\t=B\t\t1.44 MB,\n>3\tstring\t=C\t\t3.2 MB,\n>4\tstring\t>\\0\t\tlabel:%.10s\n\n# Sinclair QL OS dump (ThMO)\n# (NOTE: if `file' would be able to use indirect references in a endian format\n#\t differing from the natural host format, this could be written more\n#\t reliably and faster...)\n#\n# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more\n# than the first 8K of a file... #-(\n#\n#0\t\tbelong\t=0x30000\n#>49124\t\tbelong\t<47104\n#>>49128\t\tbelong\t<47104\n#>>>49132\tbelong\t<47104\n#>>>>49136\tbelong\t<47104\tQL OS dump data,\n#>>>>>49148\tstring\t>\\0\ttype %.3s,\n#>>>>>49142\tstring\t>\\0\tversion %.4s\n\n# Sinclair QL firmware executables (ThMO)\n0\tstring\tNqNqNq`\\004\tQL firmware executable (BCPL)\n\n# Sinclair QL libraries (was ThMO)\n0\tbeshort\t0xFB01\t\tQDOS object\n>2\tpstring\tx\t\t'%s'\n\n# Sinclair QL executables (was ThMO)\n4\tbelong\t0x4AFB\t\tQDOS executable\n>9\tpstring\tx\t\t'%s'\n\n# Sinclair QL ROM (ThMO)\n0\tbelong\t=0x4AFB0001\tQL plugin-ROM data,\n>9\tpstring\t=\\0\t\tun-named\n>9\tpstring\t>\\0\t\tnamed: %s\n# Type: SiSU Markup Language\n# URL:  http://www.sisudoc.org/\n# From: Ralph Amissah <ralph.amissah@gmail.com>\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t]+insert\tSiSU text insert\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%[\\ \\t]+SiSU[\\ \\t]+master\tSiSU text master\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t]+text\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t][0-9.]+\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%*[\\ \\t]*sisu-[0-9.]+\t\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n#------------------------------------------------------------------------------\n# $File$\n# Sketch Drawings: http://sketch.sourceforge.net/ \n# From: Edwin Mons <e@ik.nu>\n0\tsearch/1\t##Sketch\tSketch document text\n\n#-----------------------------------------------\n# $File$\n# GNU Smalltalk image, starting at version 1.6.2\n# From: catull_us@yahoo.com\n#\n0\tstring\tGSTIm\\0\\0\tGNU SmallTalk\n# little-endian\n>7\tbyte&1\t=0\t\tLE image version\n>>10\tbyte\tx\t\t%d.\n>>9\tbyte\tx\t\t\\b%d.\n>>8\tbyte\tx\t\t\\b%d\n#>>12\tlelong\tx\t\t, data: %ld\n#>>16\tlelong\tx\t\t, table: %ld\n#>>20\tlelong\tx\t\t, memory: %ld\n# big-endian\n>7\tbyte&1\t=1\t\tBE image version\n>>8\tbyte\tx\t\t%d.\n>>9\tbyte\tx\t\t\\b%d.\n>>10\tbyte\tx\t\t\\b%d\n#>>12\tbelong\tx\t\t, data: %ld\n#>>16\tbelong\tx\t\t, table: %ld\n#>>20\tbelong\tx\t\t, memory: %ld\n\n\n\n#------------------------------------------------------------------------------\n# $File$\n# smile:  file(1) magic for Smile serialization\n#\n# The Smile serialization format uses a 4-byte header:\n#\n#   Constant byte #0: 0x3A (ASCII ':')\n#   Constant byte #1: 0x29 (ASCII ')')\n#   Constant byte #2: 0x0A (ASCII linefeed, '\\n')\n#   Variable byte #3, consisting of bits:\n#     Bits 4-7 (4 MSB): 4-bit version number\n#     Bits 3: Reserved\n#     Bit 2 (mask 0x04): Whether raw binary (unescaped 8-bit) values may be present in content\n#     Bit 1 (mask 0x02): Whether shared String value checking was enabled during encoding, default false\n#     Bit 0 (mask 0x01): Whether shared property name checking was enabled during encoding, default true\n#\n# Reference: http://wiki.fasterxml.com/SmileFormatSpec\n# Created by: Pierre-Alexandre Meyer <pierre@mouraf.org>\n\n# Detection\n0\tstring\t\t:)\\n\tSmile binary data\n\n# Versioning\n>3\tbyte&0xF0\tx\t\tversion %d:\n\n# Properties\n>3\tbyte&0x04\t0x04\t\tbinary raw,\n>3\tbyte&0x04\t0x00\t\tbinary encoded,\n>3\tbyte&0x02\t0x02\t\tshared String values enabled,\n>3\tbyte&0x02\t0x00\t\tshared String values disabled,\n>3\tbyte&0x01\t0x01\t\tshared field names enabled\n>3\tbyte&0x01\t0x00\t\tshared field names disabled\n\n\n#------------------------------------------------------------------------------\n# $File: sniffer,v 1.18 2011/08/08 08:49:27 christos Exp $\n# sniffer:  file(1) magic for packet capture files\n#\n# From: guy@alum.mit.edu (Guy Harris)\n#\n\n#\n# Microsoft Network Monitor 1.x capture files.\n#\n0\tstring\t\tRTSS\t\tNetMon capture file\n>5\tbyte\t\tx\t\t- version %d\n>4\tbyte\t\tx\t\t\\b.%d\n>6\tleshort\t\t0\t\t(Unknown)\n>6\tleshort\t\t1\t\t(Ethernet)\n>6\tleshort\t\t2\t\t(Token Ring)\n>6\tleshort\t\t3\t\t(FDDI)\n>6\tleshort\t\t4\t\t(ATM)\n>6\tleshort\t\t>4\t\t(type %d)\n\n#\n# Microsoft Network Monitor 2.x capture files.\n#\n0\tstring\t\tGMBU\t\tNetMon capture file\n>5\tbyte\t\tx\t\t- version %d\n>4\tbyte\t\tx\t\t\\b.%d\n>6\tleshort\t\t0\t\t(Unknown)\n>6\tleshort\t\t1\t\t(Ethernet)\n>6\tleshort\t\t2\t\t(Token Ring)\n>6\tleshort\t\t3\t\t(FDDI)\n>6\tleshort\t\t4\t\t(ATM)\n>6\tleshort\t\t5\t\t(IP-over-IEEE 1394)\n>6\tleshort\t\t6\t\t(802.11)\n>6\tleshort\t\t7\t\t(Raw IP)\n>6\tleshort\t\t8\t\t(Raw IP)\n>6\tleshort\t\t9\t\t(Raw IP)\n>6\tleshort\t\t>9\t\t(type %d)\n\n#\n# Network General Sniffer capture files.\n# Sorry, make that \"Network Associates Sniffer capture files.\"\n# Sorry, make that \"Network General old DOS Sniffer capture files.\"\n#\n0\tstring\t\tTRSNIFF\\ data\\ \\ \\ \\ \\032\tSniffer capture file\n>33\tbyte\t\t2\t\t(compressed)\n>23\tleshort\t\tx\t\t- version %d\n>25\tleshort\t\tx\t\t\\b.%d\n>32\tbyte\t\t0\t\t(Token Ring)\n>32\tbyte\t\t1\t\t(Ethernet)\n>32\tbyte\t\t2\t\t(ARCNET)\n>32\tbyte\t\t3\t\t(StarLAN)\n>32\tbyte\t\t4\t\t(PC Network broadband)\n>32\tbyte\t\t5\t\t(LocalTalk)\n>32\tbyte\t\t6\t\t(Znet)\n>32\tbyte\t\t7\t\t(Internetwork Analyzer)\n>32\tbyte\t\t9\t\t(FDDI)\n>32\tbyte\t\t10\t\t(ATM)\n\n#\n# Cinco Networks NetXRay capture files.\n# Sorry, make that \"Network General Sniffer Basic capture files.\"\n# Sorry, make that \"Network Associates Sniffer Basic capture files.\"\n# Sorry, make that \"Network Associates Sniffer Basic, and Windows\n# Sniffer Pro\", capture files.\"\n# Sorry, make that \"Network General Sniffer capture files.\"\n# Sorry, make that \"NetScout Sniffer capture files.\"\n#\n0\tstring\t\tXCP\\0\t\tNetXRay capture file\n>4\tstring\t\t>\\0\t\t- version %s\n>44\tleshort\t\t0\t\t(Ethernet)\n>44\tleshort\t\t1\t\t(Token Ring)\n>44\tleshort\t\t2\t\t(FDDI)\n>44\tleshort\t\t3\t\t(WAN)\n>44\tleshort\t\t8\t\t(ATM)\n>44\tleshort\t\t9\t\t(802.11)\n\n#\n# \"libpcap\" capture files.\n# (We call them \"tcpdump capture file(s)\" for now, as \"tcpdump\" is\n# the main program that uses that format, but there are other programs\n# that use \"libpcap\", or that use the same capture file format.)\n#\n0\tname\t\tpcap-be\n>4\tbeshort\t\tx\t\t- version %d\n>6\tbeshort\t\tx\t\t\\b.%d\n>20\tbelong\t\t0\t\t(No link-layer encapsulation\n>20\tbelong\t\t1\t\t(Ethernet\n>20\tbelong\t\t2\t\t(3Mb Ethernet\n>20\tbelong\t\t3\t\t(AX.25\n>20\tbelong\t\t4\t\t(ProNET\n>20\tbelong\t\t5\t\t(CHAOS\n>20\tbelong\t\t6\t\t(Token Ring\n>20\tbelong\t\t7\t\t(BSD ARCNET\n>20\tbelong\t\t8\t\t(SLIP\n>20\tbelong\t\t9\t\t(PPP\n>20\tbelong\t\t10\t\t(FDDI\n>20\tbelong\t\t11\t\t(RFC 1483 ATM\n>20\tbelong\t\t12\t\t(raw IP\n>20\tbelong\t\t13\t\t(BSD/OS SLIP\n>20\tbelong\t\t14\t\t(BSD/OS PPP\n>20\tbelong\t\t19\t\t(Linux ATM Classical IP\n>20\tbelong\t\t50\t\t(PPP or Cisco HDLC\n>20\tbelong\t\t51\t\t(PPP-over-Ethernet\n>20\tbelong\t\t99\t\t(Symantec Enterprise Firewall\n>20\tbelong\t\t100\t\t(RFC 1483 ATM\n>20\tbelong\t\t101\t\t(raw IP\n>20\tbelong\t\t102\t\t(BSD/OS SLIP\n>20\tbelong\t\t103\t\t(BSD/OS PPP\n>20\tbelong\t\t104\t\t(BSD/OS Cisco HDLC\n>20\tbelong\t\t105\t\t(802.11\n>20\tbelong\t\t106\t\t(Linux Classical IP over ATM\n>20\tbelong\t\t107\t\t(Frame Relay\n>20\tbelong\t\t108\t\t(OpenBSD loopback\n>20\tbelong\t\t109\t\t(OpenBSD IPsec encrypted\n>20\tbelong\t\t112\t\t(Cisco HDLC\n>20\tbelong\t\t113\t\t(Linux \"cooked\"\n>20\tbelong\t\t114\t\t(LocalTalk\n>20\tbelong\t\t117\t\t(OpenBSD PFLOG\n>20\tbelong\t\t119\t\t(802.11 with Prism header\n>20\tbelong\t\t122\t\t(RFC 2625 IP over Fibre Channel\n>20\tbelong\t\t123\t\t(SunATM\n>20\tbelong\t\t127\t\t(802.11 with radiotap header\n>20\tbelong\t\t129\t\t(Linux ARCNET\n>20\tbelong\t\t138\t\t(Apple IP over IEEE 1394\n>20\tbelong\t\t139\t\t(MTP2 with pseudo-header\n>20\tbelong\t\t140\t\t(MTP2\n>20\tbelong\t\t141\t\t(MTP3\n>20\tbelong\t\t142\t\t(SCCP\n>20\tbelong\t\t143\t\t(DOCSIS\n>20\tbelong\t\t144\t\t(IrDA\n>20\tbelong\t\t147\t\t(Private use 0\n>20\tbelong\t\t148\t\t(Private use 1\n>20\tbelong\t\t149\t\t(Private use 2\n>20\tbelong\t\t150\t\t(Private use 3\n>20\tbelong\t\t151\t\t(Private use 4\n>20\tbelong\t\t152\t\t(Private use 5\n>20\tbelong\t\t153\t\t(Private use 6\n>20\tbelong\t\t154\t\t(Private use 7\n>20\tbelong\t\t155\t\t(Private use 8\n>20\tbelong\t\t156\t\t(Private use 9\n>20\tbelong\t\t157\t\t(Private use 10\n>20\tbelong\t\t158\t\t(Private use 11\n>20\tbelong\t\t159\t\t(Private use 12\n>20\tbelong\t\t160\t\t(Private use 13\n>20\tbelong\t\t161\t\t(Private use 14\n>20\tbelong\t\t162\t\t(Private use 15\n>20\tbelong\t\t163\t\t(802.11 with AVS header\n>20\tbelong\t\t165\t\t(BACnet MS/TP\n>20\tbelong\t\t166\t\t(PPPD\n>20\tbelong\t\t169\t\t(GPRS LLC\n>20\tbelong\t\t177\t\t(Linux LAPD\n>20\tbelong\t\t187\t\t(Bluetooth HCI H4\n>20\tbelong\t\t189\t\t(Linux USB\n>20\tbelong\t\t192\t\t(PPI\n>20\tbelong\t\t195\t\t(802.15.4\n>20\tbelong\t\t196\t\t(SITA\n>20\tbelong\t\t197\t\t(Endace ERF\n>20\tbelong\t\t201\t\t(Bluetooth HCI H4 with pseudo-header\n>20\tbelong\t\t202\t\t(AX.25 with KISS header\n>20\tbelong\t\t203\t\t(LAPD\n>20\tbelong\t\t204\t\t(PPP with direction pseudo-header\n>20\tbelong\t\t205\t\t(Cisco HDLC with direction pseudo-header\n>20\tbelong\t\t206\t\t(Frame Relay with direction pseudo-header\n>20\tbelong\t\t209\t\t(Linux IPMB\n>20\tbelong\t\t215\t\t(802.15.4 with non-ASK PHY header\n>20\tbelong\t\t220\t\t(Memory-mapped Linux USB\n>20\tbelong\t\t224\t\t(Fibre Channel FC-2\n>20\tbelong\t\t225\t\t(Fibre Channel FC-2 with frame delimiters\n>20\tbelong\t\t226\t\t(Solaris IPNET\n>20\tbelong\t\t227\t\t(SocketCAN\n>20\tbelong\t\t228\t\t(Raw IPv4\n>20\tbelong\t\t229\t\t(Raw IPv6\n>20\tbelong\t\t230\t\t(802.15.4 without FCS\n>20\tbelong\t\t231\t\t(D-Bus messages\n>20\tbelong\t\t235\t\t(DVB-CI\n>20\tbelong\t\t236\t\t(MUX27010\n>20\tbelong\t\t237\t\t(STANAG 5066 D_PDUs\n>20\tbelong\t\t239\t\t(Linux netlink NFLOG messages\n>20\tbelong\t\t240\t\t(Hilscher netAnalyzer\n>20\tbelong\t\t241\t\t(Hilscher netAnalyzer with delimiters\n>20\tbelong\t\t242\t\t(IP-over-Infiniband\n>20\tbelong\t\t243\t\t(MPEG-2 Transport Stream packets\n>20\tbelong\t\t244\t\t(ng4t ng40\n>20\tbelong\t\t245\t\t(NFC LLCP\n>20\tbelong\t\t247\t\t(Infiniband\n>20\tbelong\t\t248\t\t(SCTP\n>16\tbelong\t\tx\t\t\\b, capture length %d)\n\n0\tubelong\t\t0xa1b2c3d4\ttcpdump capture file (big-endian)\n!:mime\tapplication/vnd.tcpdump.pcap\n>0\tuse\tpcap-be\n0\tulelong\t\t0xa1b2c3d4\ttcpdump capture file (little-endian)\n!:mime\tapplication/vnd.tcpdump.pcap\n>0\tuse\t\\^pcap-be\n\n#\n# \"libpcap\"-with-Alexey-Kuznetsov's-patches capture files.\n# (We call them \"tcpdump capture file(s)\" for now, as \"tcpdump\" is\n# the main program that uses that format, but there are other programs\n# that use \"libpcap\", or that use the same capture file format.)\n#\n0\tubelong\t\t0xa1b2cd34\textended tcpdump capture file (big-endian)\n>0\tuse\tpcap-be\n0\tulelong\t\t0xa1b2cd34\textended tcpdump capture file (little-endian)\n>0\tuse\t\\^pcap-be\n\n#\n# \"pcap-ng\" capture files.\n# http://www.winpcap.org/ntar/draft/PCAP-DumpFileFormat.html\n# Pcap-ng files can contain multiple sections. Printing the endianness,\n# snaplen, or other information from the first SHB may be misleading.\n#\n0\tubelong\t\t0x0a0d0d0a\n>8\tubelong\t\t0x1a2b3c4d\tpcap-ng capture file\n>>12\tbeshort\t\tx\t\t- version %d\n>>14\tbeshort\t\tx\t\t\\b.%d\n0\tulelong\t\t0x0a0d0d0a\n>8\tulelong\t\t0x1a2b3c4d\tpcap-ng capture file\n>>12\tleshort\t\tx\t\t- version %d\n>>14\tleshort\t\tx\t\t\\b.%d\n\n#\n# AIX \"iptrace\" capture files.\n#\n0\tstring\t\tiptrace\\ 1.0\t\"iptrace\" capture file\n0\tstring\t\tiptrace\\ 2.0\t\"iptrace\" capture file\n\n#\n# Novell LANalyzer capture files.\n#\n0\tleshort\t\t0x1001\t\tLANalyzer capture file\n0\tleshort\t\t0x1007\t\tLANalyzer capture file\n\n#\n# HP-UX \"nettl\" capture files.\n#\n0\tstring\t\t\\x54\\x52\\x00\\x64\\x00\t\"nettl\" capture file\n\n#\n# RADCOM WAN/LAN Analyzer capture files.\n#\n0\tstring\t\t\\x42\\xd2\\x00\\x34\\x12\\x66\\x22\\x88\tRADCOM WAN/LAN Analyzer capture file\n\n#\n# NetStumbler log files.  Not really packets, per se, but about as\n# close as you can get.  These are log files from NetStumbler, a\n# Windows program, that scans for 802.11b networks.\n#\n0\tstring\t\tNetS\t\tNetStumbler log file\n>8\tlelong\t\tx\t\t\\b, %d stations found\n\n#\n# *Peek tagged capture files.\n#\n0\tstring\t\t\\177ver\t\tEtherPeek/AiroPeek/OmniPeek capture file\n\n#\n# Visual Networks traffic capture files.\n#\n0\tstring\t\t\\x05VNF\t\tVisual Networks traffic capture file\n\n#\n# Network Instruments Observer capture files.\n#\n0\tstring\t\tObserverPktBuffe\tNetwork Instruments Observer capture file\n\n#\n# Files from Accellent Group's 5View products.\n#\n0\tstring\t\t\\xaa\\xaa\\xaa\\xaa\t5View capture file\n\n#------------------------------------------------------------------------------\n# $File$\n# softquad:  file(1) magic for SoftQuad Publishing Software\n#\n# Author/Editor and RulesBuilder\n#\n# XXX - byte order?\n#\n0\tstring\t\t\\<!SQ\\ DTD>\tCompiled SGML rules file\n>9\tstring\t\t>\\0\t\t Type %s\n0\tstring\t\t\\<!SQ\\ A/E>\tA/E SGML Document binary\n>9\tstring\t\t>\\0\t\t Type %s\n0\tstring\t\t\\<!SQ\\ STS>\tA/E SGML binary styles file\n>9\tstring\t\t>\\0\t\t Type %s\n0\tshort\t\t0xc0de\t\tCompiled PSI (v1) data\n0\tshort\t\t0xc0da\t\tCompiled PSI (v2) data\n>3\tstring\t\t>\\0\t\t(%s)\n# Binary sqtroff font/desc files...\n0\tshort\t\t0125252\t\tSoftQuad DESC or font file binary\n>2\tshort\t\t>0\t\t- version %d\n# Bitmaps...\n0\tsearch/1\tSQ\\ BITMAP1\tSoftQuad Raster Format text\n#0\tstring\t\tSQ\\ BITMAP2\tSoftQuad Raster Format data\n# sqtroff intermediate language (replacement for ditroff int. lang.)\n0\tstring\t\tX\\ \t\tSoftQuad troff Context intermediate\n>2\tstring\t\t495\t\tfor AT&T 495 laser printer\n>2\tstring\t\thp\t\tfor Hewlett-Packard LaserJet\n>2\tstring\t\timpr\t\tfor IMAGEN imPRESS\n>2\tstring\t\tps\t\tfor PostScript\n\n# From: Michael Piefel <piefel@debian.org>\n# sqtroff intermediate language (replacement for ditroff int. lang.)\n0\tstring\t\tX\\ 495\t\tSoftQuad troff Context intermediate for AT&T 495 laser printer\n0\tstring\t\tX\\ hp\t\tSoftQuad troff Context intermediate for HP LaserJet\n0\tstring\t\tX\\ impr\t\tSoftQuad troff Context intermediate for IMAGEN imPRESS\n0\tstring\t\tX\\ ps\t\tSoftQuad troff Context intermediate for PostScript\n\n#------------------------------------------------------------------------------\n# $File$\n# spec:  file(1) magic for SPEC raw results (*.raw, *.rsf)\n#\n# Cloyce D. Spradling <cloyce@headgear.org>\n\n0\tstring\tspec\t\t\tSPEC\n>4\tstring\t.cpu\t\t\tCPU\n>>8\tstring\t<:\t\t\t\\b%.4s\n>>12\tstring\t.\t\t\traw result text\n\n17\tstring\tversion=SPECjbb\t\tSPECjbb\n>32\tstring\t<:\t\t\t\\b%.4s\n>>37\tstring\t<:\t\t\tv%.4s raw result text\n\n0\tstring\tBEGIN\\040SPECWEB\tSPECweb\n>13\tstring\t<:\t\t\t\\b%.2s\n>>15\tstring\t_SSL\t\t\t\\b_SSL\n>>>20\tstring\t<:\t\t\tv%.4s raw result text\n>>16\tstring\t<:\t\t\tv%.4s raw result text\n\n#------------------------------------------------------------------------------\n# $File: spectrum,v 1.6 2009/09/19 16:28:12 christos Exp $\n# spectrum:  file(1) magic for Spectrum emulator files.\n#\n# John Elliott <jce@seasip.demon.co.uk>\n\n#\n# Spectrum +3DOS header\n#\n0       string          PLUS3DOS\\032    Spectrum +3 data\n>15     byte            0               - BASIC program\n>15     byte            1               - number array\n>15     byte            2               - character array\n>15     byte            3               - memory block\n>>16    belong          0x001B0040      (screen)\n>15     byte            4               - Tasword document\n>15     string          TAPEFILE        - ZXT tapefile\n#\n# Tape file. This assumes the .TAP starts with a Spectrum-format header,\n# which nearly all will.\n#\n# Update: Sanity-check string contents to be printable.\n#  -Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n0       string          \\023\\000\\000\n>4      string          >\\0\n>>4     string          <\\177           Spectrum .TAP data \"%-10.10s\"\n>>>3    byte            0               - BASIC program\n>>>3    byte            1               - number array\n>>>3    byte            2               - character array\n>>>3    byte            3               - memory block\n>>>>14  belong          0x001B0040      (screen)\n\n# The following three blocks are from pak21-spectrum@srcf.ucam.org\n# TZX tape images\n0      string          ZXTape!\\x1a     Spectrum .TZX data\n>8     byte            x               version %d\n>9     byte            x               \\b.%d\n\n# RZX input recording files\n0      string          RZX!            Spectrum .RZX data\n>4     byte            x               version %d\n>5     byte            x               \\b.%d\n\n# Floppy disk images\n0      string          MV\\ -\\ CPCEMU\\ Disk-Fil Amstrad/Spectrum .DSK data\n0      string          MV\\ -\\ CPC\\ format\\ Dis Amstrad/Spectrum DU54 .DSK data\n0      string          EXTENDED\\ CPC\\ DSK\\ Fil Amstrad/Spectrum Extended .DSK data\n0      string          SINCLAIR        Spectrum .SCL Betadisk image\n\n# Hard disk images\n0      string          RS-IDE\\x1a      Spectrum .HDF hard disk image\n>7     byte            x               \\b, version 0x%02x\n\n#------------------------------------------------------------------------------\n# $File: sql,v 1.14 2014/04/28 12:04:50 christos Exp $\n# sql:  file(1) magic for SQL files\n#\n# From: \"Marty Leisner\" <mleisner@eng.mc.xerox.com>\n# Recognize some MySQL files.\n# Elan Ruusamae <glen@delfi.ee>, added MariaDB signatures\n# from https://bazaar.launchpad.net/~maria-captains/maria/5.5/view/head:/support-files/magic\n#\n0\tbeshort\t\t\t0xfe01\t\tMySQL table definition file\n>2\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0700\tMySQL MyISAM index file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0800\tMySQL MyISAM compressed data file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0900\tMySQL Maria index file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0A00\tMySQL Maria compressed data file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0500\tMySQL ISAM index file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0600\tMySQL ISAM compressed data file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tstring\t\t\t\\376bin\t\tMySQL replication log\n0\tbelong&0xffffff00\t0xfefe0b00\n>4\tstring\t\t\tMARIALOG\tMySQL Maria transaction log file\n>>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0c00\n>4\tstring\t\t\tMACF\t\tMySQL Maria control file\n>>3\tbyte\t\t\tx\t\tVersion %d\n\n#------------------------------------------------------------------------------\n# iRiver H Series database file \n# From Ken Guest <ken@linux.ie>\n# As observed from iRivNavi.iDB and unencoded firmware\n#\n0   string\t\tiRivDB\tiRiver Database file\n>11  string\t>\\0\tVersion %s\n>39  string\t\tiHP-100\t[H Series]\n\n#------------------------------------------------------------------------------\n# SQLite database files\n# Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg\n#\n# Version 1 used GDBM internally; its files cannot be distinguished\n# from other GDBM files.\n#\n# Version 2 used this format:\n0\tstring\t**\\ This\\ file\\ contains\\ an\\ SQLite  SQLite 2.x database\n\n# Version 3 of SQLite allows applications to embed their own \"user version\"\n# number in the database at offset 60.  Later, SQLite added an \"application id\"\n# at offset 68 that is preferred over \"user version\" for indicating the\n# associated application.\n#\n0   string  SQLite\\ format\\ 3\n>60 belong  =0x5f4d544e  Monotone source repository - SQLite3 database\n>68 belong  =0x0f055112  Fossil checkout - SQLite3 database\n>68 belong  =0x0f055113  Fossil global configuration - SQLite3 database\n>68 belong  =0x0f055111  Fossil repository - SQLite3 database\n>68 belong  =0x42654462  Bentley Systems BeSQLite Database - SQLite3 database\n>68 belong  =0x42654c6e  Bentley Systems Localization File - SQLite3 database\n>68 belong  =0x47504b47  OGC GeoPackage file - SQLite3 database\n>68 default x            SQLite 3.x database\n>>68 belong  !0          \\b, application id %u\n>>60 belong  !0          \\b, user version %d\n\n# SQLite Write-Ahead Log from SQLite version >= 3.7.0\n# http://www.sqlite.org/fileformat.html#walformat\n0\tbelong&0xfffffffe\t0x377f0682\tSQLite Write-Ahead Log,\n>4\tbelong\tx\tversion %d\n\n# SQLite Rollback Journal\n# http://www.sqlite.org/fileformat.html#rollbackjournal\n0\tstring\t\\xd9\\xd5\\x05\\xf9\\x20\\xa1\\x63\\xd7\tSQLite Rollback Journal\n\n# Panasonic channel list database svl.bin or svl.db added by Joerg Jenderek\n# http://www.ullrich.es/job/service-menue/panasonic/panasonic-sendersortierung-sat-am-pc/\n# pceditor_V2003.jar\n0\tstring\t\tPSDB\\0\t\t\tPanasonic channel list database\n>126\tstring\t\tSQLite\\ format\\ 3\t\n>>&-15\tindirect\tx\t\t\t\\b; contains \n# Type:\tOpenSSH key files\n# From:\tNicolas Collignon <tsointsoin@gmail.com>\n\n0\tstring\tSSH\\ PRIVATE\\ KEY\tOpenSSH RSA1 private key,\n>28\tstring\t>\\0\t\t\tversion %s\n0\tstring\t-----BEGIN\\ OPENSSH\\ PRIVATE\\ KEY-----\tOpenSSH private key\n\n0\tstring\tssh-dss\\ \t\tOpenSSH DSA public key\n0\tstring\tssh-rsa\\ \t\tOpenSSH RSA public key\n0\tstring\tecdsa-sha2-nistp256\tOpenSSH ECDSA public key\n0\tstring\tecdsa-sha2-nistp384\tOpenSSH ECDSA public key\n0\tstring\tecdsa-sha2-nistp521\tOpenSSH ECDSA public key\n0\tstring\tssh-ed25519\t\tOpenSSH ED25519 public key\n# Type: OpenSSL certificates/key files\n# From: Nicolas Collignon <tsointsoin@gmail.com>\n\n0\tstring\t-----BEGIN\\ CERTIFICATE-----\tPEM certificate\n0\tstring\t-----BEGIN\\ CERTIFICATE\\ REQ\tPEM certificate request\n0\tstring\t-----BEGIN\\ RSA\\ PRIVATE\tPEM RSA private key\n0\tstring\t-----BEGIN\\ DSA\\ PRIVATE\tPEM DSA private key\n0\tstring\t-----BEGIN\\ EC\\ PRIVATE\tPEM EC private key\n\n#------------------------------------------------------------------------------\n# $File: sun,v 1.26 2014/03/29 15:40:34 christos Exp $\n# sun:  file(1) magic for Sun machines\n#\n# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x\n# releases.  (5.x uses ELF.)  Entries for executables without an\n# architecture type, used before the 68020-based Sun-3's came out,\n# are in aout, as they're indistinguishable from other big-endian\n# 32-bit a.out files.\n#\n0\tbelong&077777777\t0600413\t\ta.out SunOS SPARC demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0600410\t\ta.out SunOS SPARC pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0600407\t\ta.out SunOS SPARC\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400413\t\ta.out SunOS mc68020 demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400410\t\ta.out SunOS mc68020 pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400407\t\ta.out SunOS mc68020\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200413\t\ta.out SunOS mc68010 demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200410\t\ta.out SunOS mc68010 pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200407\t\ta.out SunOS mc68010\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n#\n# Core files.  \"SPARC 4.x BCP\" means \"core file from a SunOS 4.x SPARC\n# binary executed in compatibility mode under SunOS 5.x\".\n#\n0\tbelong\t\t0x080456\tSunOS core file\n>4\tbelong\t\t432\t\t(SPARC)\n>>132\tstring\t\t>\\0\t\tfrom '%s'\n>>116\tbelong\t\t=3\t\t(quit)\n>>116\tbelong\t\t=4\t\t(illegal instruction)\n>>116\tbelong\t\t=5\t\t(trace trap)\n>>116\tbelong\t\t=6\t\t(abort)\n>>116\tbelong\t\t=7\t\t(emulator trap)\n>>116\tbelong\t\t=8\t\t(arithmetic exception)\n>>116\tbelong\t\t=9\t\t(kill)\n>>116\tbelong\t\t=10\t\t(bus error)\n>>116\tbelong\t\t=11\t\t(segmentation violation)\n>>116\tbelong\t\t=12\t\t(bad argument to system call)\n>>116\tbelong\t\t=29\t\t(resource lost)\n>>120\tbelong\t\tx\t\t(T=%dK,\n>>124\tbelong\t\tx\t\tD=%dK,\n>>128\tbelong\t\tx\t\tS=%dK)\n>4\tbelong\t\t826\t\t(68K)\n>>128\tstring\t\t>\\0\t\tfrom '%s'\n>4\tbelong\t\t456\t\t(SPARC 4.x BCP)\n>>152\tstring\t\t>\\0\t\tfrom '%s'\n# Sun SunPC\n0\tlong\t\t0xfa33c08e\tSunPC 4.0 Hard Disk\n0\tstring\t\t#SUNPC_CONFIG\tSunPC 4.0 Properties Values\n# Sun snoop (see RFC 1761, which describes the capture file format,\n# RFC 3827, which describes some additional datalink types, and\n# http://www.iana.org/assignments/snoop-datalink-types/snoop-datalink-types.xml,\n# which is the IANA registry of Snoop datalink types)\n#\n0\tstring\t\tsnoop\t\tSnoop capture file\n>8\tbelong\t\t>0\t\t- version %d\n>12\tbelong\t\t0\t\t(IEEE 802.3)\n>12\tbelong\t\t1\t\t(IEEE 802.4)\n>12\tbelong\t\t2\t\t(IEEE 802.5)\n>12\tbelong\t\t3\t\t(IEEE 802.6)\n>12\tbelong\t\t4\t\t(Ethernet)\n>12\tbelong\t\t5\t\t(HDLC)\n>12\tbelong\t\t6\t\t(Character synchronous)\n>12\tbelong\t\t7\t\t(IBM channel-to-channel adapter)\n>12\tbelong\t\t8\t\t(FDDI)\n>12\tbelong\t\t9\t\t(Other)\n>12\tbelong\t\t10\t\t(type %d)\n>12\tbelong\t\t11\t\t(type %d)\n>12\tbelong\t\t12\t\t(type %d)\n>12\tbelong\t\t13\t\t(type %d)\n>12\tbelong\t\t14\t\t(type %d)\n>12\tbelong\t\t15\t\t(type %d)\n>12\tbelong\t\t16\t\t(Fibre Channel)\n>12\tbelong\t\t17\t\t(ATM)\n>12\tbelong\t\t18\t\t(ATM Classical IP)\n>12\tbelong\t\t19\t\t(type %d)\n>12\tbelong\t\t20\t\t(type %d)\n>12\tbelong\t\t21\t\t(type %d)\n>12\tbelong\t\t22\t\t(type %d)\n>12\tbelong\t\t23\t\t(type %d)\n>12\tbelong\t\t24\t\t(type %d)\n>12\tbelong\t\t25\t\t(type %d)\n>12\tbelong\t\t26\t\t(IP over Infiniband)\n>12\tbelong\t\t>26\t\t(type %d)\n\n#---------------------------------------------------------------------------\n# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a\n# lead Sun/Cobalt developer) who agrees that they are good and worthy of\n# inclusion.\n\n# Boot ROM images for Sun/Cobalt Linux server appliances\n0       string  Cobalt\\ Networks\\ Inc.\\nFirmware\\ v     Paged COBALT boot rom\n>38     string x        V%.4s\n\n# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code\n# at the very end where file(1) can't get it.\n0       string CRfs     COBALT boot rom data (Flat boot rom or file system)\n\n#------------------------------------------------------------------------------\n# msx:  file(1) magic for the SymbOS operating system\n# http://www.symbos.de\n# Fabio R. Schmidlin <frs@pop.com.br>\n\n# SymbOS EXE file\n0x30\tstring\t\tSymExe\t\tSymbOS executable\n>0x36\tubyte\t\tx\t\tv%c\n>0x37\tubyte\t\tx\t\t\\b.%c\n>0xF\tstring\t\tx\t\t\\b, name: %s\n\n# SymbOS DOX document\n0\tstring\t\tINFOq\\0\t\tSymbOS DOX document\n\n# Symbos driver\n0\tstring\t\tSMD1\t\tSymbOS driver\n>19\tbyte\t\tx\t\t\\b, name: %c\n>20\tbyte\t\tx\t\t\\b%c\n>21\tbyte\t\tx\t\t\\b%c\n>22\tbyte\t\tx\t\t\\b%c\n>23\tbyte\t\tx\t\t\\b%c\n>24\tbyte\t\tx\t\t\\b%c\n>25\tbyte\t\tx\t\t\\b%c\n>26\tbyte\t\tx\t\t\\b%c\n>27\tbyte\t\tx\t\t\\b%c\n>28\tbyte\t\tx\t\t\\b%c\n>29\tbyte\t\tx\t\t\\b%c\n>30\tbyte\t\tx\t\t\\b%c\n>31\tbyte\t\tx\t\t\\b%c\n\n# Symbos video\n0\tstring\t\tSymVid\t\tSymbOS video\n>6\tubyte\t\tx\t\tv%c\n>7\tubyte\t\tx\t\t\\b.%c\n\n# Soundtrakker 128 ST2 music\n0\tbyte\t\t0\n>0xC\tstring\t\t\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x40\\x00\tSoundtrakker 128 ST2 music,\n>>1\tstring\t\tx\t\tname: %s\n\n\n\n#------------------------------------------------------------------------\n# $File: sysex,v 1.7 2013/09/16 15:12:42 christos Exp $\n# sysex: file(1) magic for MIDI sysex files\n#\n# GRR: original 1 byte test at offset was too general as it catches also many FATs of DOS filesystems\n# where real SYStem EXclusive messages at offset 1 are limited to seven bits\n# http://en.wikipedia.org/wiki/MIDI\n0\tubeshort&0xFF80\t\t0xF000\t\tSysEx File -\n\n# North American Group\n>1\tbyte\t\t\t0x01\t\tSequential\n>1\tbyte\t\t\t0x02\t\tIDP\n>1\tbyte\t\t\t0x03\t\tOctavePlateau\n>1\tbyte\t\t\t0x04\t\tMoog\n>1\tbyte\t\t\t0x05\t\tPassport\n>1\tbyte\t\t\t0x06\t\tLexicon\n>1\tbyte\t\t\t0x07\t\tKurzweil/Future Retro\n>>3\tbyte\t\t\t0x77\t\t777\n>>4\tbyte\t\t\t0x00\t\tBank\n>>4\tbyte\t\t\t0x01\t\tSong\n>>5\tbyte\t\t\t0x0f\t\t16\n>>5\tbyte\t\t\t0x0e\t\t15\n>>5\tbyte\t\t\t0x0d\t\t14\n>>5\tbyte\t\t\t0x0c\t\t13\n>>5\tbyte\t\t\t0x0b\t\t12\n>>5\tbyte\t\t\t0x0a\t\t11\n>>5\tbyte\t\t\t0x09\t\t10\n>>5\tbyte\t\t\t0x08\t\t9\n>>5\tbyte\t\t\t0x07\t\t8\n>>5\tbyte\t\t\t0x06\t\t7\n>>5\tbyte\t\t\t0x05\t\t6\n>>5\tbyte\t\t\t0x04\t\t5\n>>5\tbyte\t\t\t0x03\t\t4\n>>5\tbyte\t\t\t0x02\t\t3\n>>5\tbyte\t\t\t0x01\t\t2\n>>5\tbyte\t\t\t0x00\t\t1\n>>5\tbyte\t\t\t0x10\t\t(ALL)\n>>2\tbyte\t\t\tx\t\t\t\\b, Channel %d\n>1\tbyte\t\t\t0x08\t\tFender\n>1\tbyte\t\t\t0x09\t\tGulbransen\n>1\tbyte\t\t\t0x0a\t\tAKG\n>1\tbyte\t\t\t0x0b\t\tVoyce\n>1\tbyte\t\t\t0x0c\t\tWaveframe\n>1\tbyte\t\t\t0x0d\t\tADA\n>1\tbyte\t\t\t0x0e\t\tGarfield\n>1\tbyte\t\t\t0x0f\t\tEnsoniq\n>1\tbyte\t\t\t0x10\t\tOberheim\n>>2\tbyte\t\t\t0x06\t\tMatrix 6 series\n>>3\tbyte\t\t\t0x0A\t\tDump (All)\n>>3\tbyte\t\t\t0x01\t\tDump (Bank)\n>>4 belong\t\t\t0x0002040E\t\tMatrix 1000\n>>>11 byte\t\t\t<2\t\t\tUser bank %d\n>>>11 byte\t\t\t>1\t\t\tPreset bank %d\n>1\tbyte\t\t\t0x11\t\tApple\n>1\tbyte\t\t\t0x12\t\tGreyMatter\n>1\tbyte\t\t\t0x14\t\tPalmTree\n>1\tbyte\t\t\t0x15\t\tJLCooper\n>1\tbyte\t\t\t0x16\t\tLowrey\n>1\tbyte\t\t\t0x17\t\tAdamsSmith\n>1\tbyte\t\t\t0x18\t\tE-mu\n>1\tbyte\t\t\t0x19\t\tHarmony\n>1\tbyte\t\t\t0x1a\t\tART\n>1\tbyte\t\t\t0x1b\t\tBaldwin\n>1\tbyte\t\t\t0x1c\t\tEventide\n>1\tbyte\t\t\t0x1d\t\tInventronics\n>1\tbyte\t\t\t0x1f\t\tClarity\n\n# European Group\n>1\tbyte\t\t\t0x21\t\tSIEL\n>1\tbyte\t\t\t0x22\t\tSynthaxe\n>1\tbyte\t\t\t0x24\t\tHohner\n>1\tbyte\t\t\t0x25\t\tTwister\n>1\tbyte\t\t\t0x26\t\tSolton\n>1\tbyte\t\t\t0x27\t\tJellinghaus\n>1\tbyte\t\t\t0x28\t\tSouthworth\n>1\tbyte\t\t\t0x29\t\tPPG\n>1\tbyte\t\t\t0x2a\t\tJEN\n>1\tbyte\t\t\t0x2b\t\tSSL\n>1\tbyte\t\t\t0x2c\t\tAudioVertrieb\n\n>1\tbyte\t\t\t0x2f\t\tELKA\n>>3\tbyte\t\t\t0x09\t\tEK-44\n\n>1\tbyte\t\t\t0x30\t\tDynacord\n>1\tbyte\t\t\t0x31\t\tJomox\n>1\tbyte\t\t\t0x33\t\tClavia\n>1\tbyte\t\t\t0x39\t\tSoundcraft\n# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs\n>1\tbyte\t\t\t0x3e\t\tWaldorf\n>>2\tbyte\t\t\t0x00\t\tmicroWave\n>>2\tbyte\t\t\t0x0E\t\tmicrowave2 / XT\n>>2\tbyte\t\t\t0x0F\t\tQ / Q+\n>>3\tbyte\t\t\t=0\t\t\t(default id)\n>>3 byte\t\t\t>0\t\t\t(\n>>>3 byte\t\t\t<0x7F\t\t\\bdevice %d)\n>>>3 byte\t\t\t=0x7F\t\t\\bbroadcast id)\n>>3\tbyte\t\t\t0x7f\t\tMicrowave I\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Inquiry)\n>>>4\tbyte\t\t\t0x70\t\tBOOT (Sound Reserved)\n>>>4\tbyte\t\t\t0x01\t\tMULR (Multi Request)\n>>>4\tbyte\t\t\t0x11\t\tMULD (Multi Dump)\n>>>4\tbyte\t\t\t0x21\t\tMULP (Multi Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tMULQ (Multi Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Multi Reserved)\n>>>4\tbyte\t\t\t0x02\t\tDRMR (Drum Map Request)\n>>>4\tbyte\t\t\t0x12\t\tDRMD (Drum Map Dump)\n>>>4\tbyte\t\t\t0x22\t\tDRMP (Drum Map Parameter Change)\n>>>4\tbyte\t\t\t0x32\t\tDRMQ (Drum Map Parameter Inquiry)\n>>>4\tbyte\t\t\t0x72\t\tBIN (Drum Map Reserved)\n>>>4\tbyte\t\t\t0x03\t\tPATR (Sequencer Pattern Request)\n>>>4\tbyte\t\t\t0x13\t\tPATD (Sequencer Pattern Dump)\n>>>4\tbyte\t\t\t0x23\t\tPATP (Sequencer Pattern Parameter Change)\n>>>4\tbyte\t\t\t0x33\t\tPATQ (Sequencer Pattern Parameter Inquiry)\n>>>4\tbyte\t\t\t0x73\t\tAFM (Sequencer Pattern Reserved)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x07\t\tMODR (Mode Parameter Request)\n>>>4\tbyte\t\t\t0x17\t\tMODD (Mode Parameter Dump)\n>>>4\tbyte\t\t\t0x27\t\tMODP (Mode Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x37\t\tMODQ (Mode Parameter Parameter Inquiry)\n>>2\tbyte\t\t\t0x10\t\tmicroQ\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Inquiry)\n>>>4\tbyte\t\t\t0x70\t\t(Sound Reserved)\n>>>4\tbyte\t\t\t0x01\t\tMULR (Multi Request)\n>>>4\tbyte\t\t\t0x11\t\tMULD (Multi Dump)\n>>>4\tbyte\t\t\t0x21\t\tMULP (Multi Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tMULQ (Multi Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Multi Reserved)\n>>>4\tbyte\t\t\t0x02\t\tDRMR (Drum Map Request)\n>>>4\tbyte\t\t\t0x12\t\tDRMD (Drum Map Dump)\n>>>4\tbyte\t\t\t0x22\t\tDRMP (Drum Map Parameter Change)\n>>>4\tbyte\t\t\t0x32\t\tDRMQ (Drum Map Parameter Inquiry)\n>>>4\tbyte\t\t\t0x72\t\tBIN (Drum Map Reserved)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>2\tbyte\t\t\t0x11\t\trackAttack\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Parameter Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Parameter Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x01\t\tPRGR (Program Parameter Request)\n>>>4\tbyte\t\t\t0x11\t\tPRGD (Program Parameter Dump)\n>>>4\tbyte\t\t\t0x21\t\tPRGP (Program Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tPRGQ (Program Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Program Parameter Reserved)\n>>>4\tbyte\t\t\t0x03\t\tPATR (Pattern Parameter Request)\n>>>4\tbyte\t\t\t0x13\t\tPATD (Pattern Parameter Dump)\n>>>4\tbyte\t\t\t0x23\t\tPATP (Pattern Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x33\t\tPATQ (Pattern Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x05\t\tEFXR (FX Parameter Request)\n>>>4\tbyte\t\t\t0x15\t\tEFXD (FX Parameter Dump)\n>>>4\tbyte\t\t\t0x25\t\tEFXP (FX Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x35\t\tEFXQ (FX Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x07\t\tMODR (Mode Command Request)\n>>>4\tbyte\t\t\t0x17\t\tMODD (Mode Command Dump)\n>>>4\tbyte\t\t\t0x27\t\tMODP (Mode Command Parameter Change)\n>>>4\tbyte\t\t\t0x37\t\tMODQ (Mode Command Parameter Inquiry)\n>>2\tbyte\t\t\t0x03\t\tWave\n>>>4\tbyte\t\t\t0x00\t\tSBPR (Soundprogram)\n>>>4\tbyte\t\t\t0x01\t\tSAPR (Performance)\n>>>4\tbyte\t\t\t0x02\t\tSWAVE (Wave)\n>>>4\tbyte\t\t\t0x03\t\tSWTBL (Wave control table)\n>>>4\tbyte\t\t\t0x04\t\tSVT (Velocity Curve)\n>>>4\tbyte\t\t\t0x05\t\tSTT (Tuning Table)\n>>>4\tbyte\t\t\t0x06\t\tSGLB (Global Parameters)\n>>>4\tbyte\t\t\t0x07\t\tSARRMAP (Performance Program Change Map)\n>>>4\tbyte\t\t\t0x08\t\tSBPRMAP (Sound Program Change Map)\n>>>4\tbyte\t\t\t0x09\t\tSBPRPAR (Sound Parameter)\n>>>4\tbyte\t\t\t0x0A\t\tSARRPAR (Performance Parameter)\n>>>4\tbyte\t\t\t0x0B\t\tSINSPAR (Instrument/External Parameter)\n>>>4\tbyte\t\t\t0x0F\t\tSBULK (Bulk Switch on/off)\n\n# Japanese Group\n>1\tbyte\t\t\t0x40\t\tKawai\n>>3\tbyte\t\t\t0x20\t\tK1\n>>3\tbyte\t\t\t0x22\t\tK4\n\n>1\tbyte\t\t\t0x41\t\tRoland\n>>3\tbyte\t\t\t0x14\t\tD-50\n>>3\tbyte\t\t\t0x2b\t\tU-220\n>>3\tbyte\t\t\t0x02\t\tTR-707\n\n>1\tbyte\t\t\t0x42\t\tKorg\n>>3\tbyte\t\t\t0x19\t\tM1\n\n>1\tbyte\t\t\t0x43\t\tYamaha\n>1\tbyte\t\t\t0x44\t\tCasio\n>1\tbyte\t\t\t0x46\t\tKamiya\n>1\tbyte\t\t\t0x47\t\tAkai\n>1\tbyte\t\t\t0x48\t\tVictor\n>1\tbyte\t\t\t0x49\t\tMesosha\n>1\tbyte\t\t\t0x4b\t\tFujitsu\n>1\tbyte\t\t\t0x4c\t\tSony\n>1\tbyte\t\t\t0x4e\t\tTeac\n>1\tbyte\t\t\t0x50\t\tMatsushita\n>1\tbyte\t\t\t0x51\t\tFostex\n>1\tbyte\t\t\t0x52\t\tZoom\n>1\tbyte\t\t\t0x54\t\tMatsushita\n>1\tbyte\t\t\t0x57\t\tAcoustic tech. lab.\n# http://www.midi.org/techspecs/manid.php\n>1\tbelong&0xffffff00\t0x00007400\tTa Horng\n>1\tbelong&0xffffff00\t0x00007500\te-Tek\n>1\tbelong&0xffffff00\t0x00007600\tE-Voice\n>1\tbelong&0xffffff00\t0x00007700\tMidisoft\n>1\tbelong&0xffffff00\t0x00007800\tQ-Sound\n>1\tbelong&0xffffff00\t0x00007900\tWestrex\n>1\tbelong&0xffffff00\t0x00007a00\tNvidia*\n>1\tbelong&0xffffff00\t0x00007b00\tESS\n>1\tbelong&0xffffff00\t0x00007c00\tMediatrix\n>1\tbelong&0xffffff00\t0x00007d00\tBrooktree\n>1\tbelong&0xffffff00\t0x00007e00\tOtari\n>1\tbelong&0xffffff00\t0x00007f00\tKey Electronics\n>1\tbelong&0xffffff00\t0x00010000\tShure\n>1\tbelong&0xffffff00\t0x00010100\tAuraSound\n>1\tbelong&0xffffff00\t0x00010200\tCrystal\n>1\tbelong&0xffffff00\t0x00010300\tRockwell\n>1\tbelong&0xffffff00\t0x00010400\tSilicon Graphics\n>1\tbelong&0xffffff00\t0x00010500\tMidiman\n>1\tbelong&0xffffff00\t0x00010600\tPreSonus\n>1\tbelong&0xffffff00\t0x00010800\tTopaz\n>1\tbelong&0xffffff00\t0x00010900\tCast Lightning\n>1\tbelong&0xffffff00\t0x00010a00\tMicrosoft\n>1\tbelong&0xffffff00\t0x00010b00\tSonic Foundry\n>1\tbelong&0xffffff00\t0x00010c00\tLine 6\n>1\tbelong&0xffffff00\t0x00010d00\tBeatnik Inc.\n>1\tbelong&0xffffff00\t0x00010e00\tVan Koerving\n>1\tbelong&0xffffff00\t0x00010f00\tAltech Systems\n>1\tbelong&0xffffff00\t0x00011000\tS & S Research\n>1\tbelong&0xffffff00\t0x00011100\tVLSI Technology\n>1\tbelong&0xffffff00\t0x00011200\tChromatic\n>1\tbelong&0xffffff00\t0x00011300\tSapphire\n>1\tbelong&0xffffff00\t0x00011400\tIDRC\n>1\tbelong&0xffffff00\t0x00011500\tJustonic Tuning\n>1\tbelong&0xffffff00\t0x00011600\tTorComp\n>1\tbelong&0xffffff00\t0x00011700\tNewtek Inc.\n>1\tbelong&0xffffff00\t0x00011800\tSound Sculpture\n>1\tbelong&0xffffff00\t0x00011900\tWalker Technical\n>1\tbelong&0xffffff00\t0x00011a00\tDigital Harmony\n>1\tbelong&0xffffff00\t0x00011b00\tInVision\n>1\tbelong&0xffffff00\t0x00011c00\tT-Square\n>1\tbelong&0xffffff00\t0x00011d00\tNemesys\n>1\tbelong&0xffffff00\t0x00011e00\tDBX\n>1\tbelong&0xffffff00\t0x00011f00\tSyndyne\n>1\tbelong&0xffffff00\t0x00012000\tBitheadz\t\n>1\tbelong&0xffffff00\t0x00012100\tCakewalk\n>1\tbelong&0xffffff00\t0x00012200\tStaccato\n>1\tbelong&0xffffff00\t0x00012300\tNational Semicon.\n>1\tbelong&0xffffff00\t0x00012400\tBoom Theory\n>1\tbelong&0xffffff00\t0x00012500\tVirtual DSP Corp\n>1\tbelong&0xffffff00\t0x00012600\tAntares\n>1\tbelong&0xffffff00\t0x00012700\tAngel Software\n>1\tbelong&0xffffff00\t0x00012800\tSt Louis Music\n>1\tbelong&0xffffff00\t0x00012900\tLyrrus dba G-VOX\n>1\tbelong&0xffffff00\t0x00012a00\tAshley Audio\n>1\tbelong&0xffffff00\t0x00012b00\tVari-Lite\n>1\tbelong&0xffffff00\t0x00012c00\tSummit Audio\n>1\tbelong&0xffffff00\t0x00012d00\tAureal Semicon.\n>1\tbelong&0xffffff00\t0x00012e00\tSeaSound\n>1\tbelong&0xffffff00\t0x00012f00\tU.S. Robotics\n>1\tbelong&0xffffff00\t0x00013000\tAurisis\n>1\tbelong&0xffffff00\t0x00013100\tNearfield Multimedia\n>1\tbelong&0xffffff00\t0x00013200\tFM7 Inc.\n>1\tbelong&0xffffff00\t0x00013300\tSwivel Systems\n>1\tbelong&0xffffff00\t0x00013400\tHyperactive\n>1\tbelong&0xffffff00\t0x00013500\tMidiLite\n>1\tbelong&0xffffff00\t0x00013600\tRadical\n>1\tbelong&0xffffff00\t0x00013700\tRoger Linn\n>1\tbelong&0xffffff00\t0x00013800\tHelicon\n>1\tbelong&0xffffff00\t0x00013900\tEvent\n>1\tbelong&0xffffff00\t0x00013a00\tSonic Network\n>1\tbelong&0xffffff00\t0x00013b00\tRealtime Music\n>1\tbelong&0xffffff00\t0x00013c00\tApogee Digital\n\n>1\tbelong&0xffffff00\t0x00202b00\tMedeli Electronics\n>1\tbelong&0xffffff00\t0x00202c00\tCharlie Lab\n>1\tbelong&0xffffff00\t0x00202d00\tBlue Chip Music\n>1\tbelong&0xffffff00\t0x00202e00\tBEE OH Corp\n>1\tbelong&0xffffff00\t0x00202f00\tLG Semicon America\n>1\tbelong&0xffffff00\t0x00203000\tTESI\n>1\tbelong&0xffffff00\t0x00203100\tEMAGIC\n>1\tbelong&0xffffff00\t0x00203200\tBehringer\n>1\tbelong&0xffffff00\t0x00203300\tAccess Music\n>1\tbelong&0xffffff00\t0x00203400\tSynoptic\n>1\tbelong&0xffffff00\t0x00203500\tHanmesoft Corp\n>1\tbelong&0xffffff00\t0x00203600\tTerratec\n>1\tbelong&0xffffff00\t0x00203700\tProel SpA\n>1\tbelong&0xffffff00\t0x00203800\tIBK MIDI\n>1\tbelong&0xffffff00\t0x00203900\tIRCAM\n>1\tbelong&0xffffff00\t0x00203a00\tPropellerhead Software\n>1\tbelong&0xffffff00\t0x00203b00\tRed Sound Systems\n>1\tbelong&0xffffff00\t0x00203c00\tElectron ESI AB\n>1\tbelong&0xffffff00\t0x00203d00\tSintefex Audio\n>1\tbelong&0xffffff00\t0x00203e00\tMusic and More\n>1\tbelong&0xffffff00\t0x00203f00\tAmsaro\n>1\tbelong&0xffffff00\t0x00204000\tCDS Advanced Technology\n>1\tbelong&0xffffff00\t0x00204100\tTouched by Sound\n>1\tbelong&0xffffff00\t0x00204200\tDSP Arts\n>1\tbelong&0xffffff00\t0x00204300\tPhil Rees Music\n>1\tbelong&0xffffff00\t0x00204400\tStamer Musikanlagen GmbH\n>1\tbelong&0xffffff00\t0x00204500\tSoundart\n>1\tbelong&0xffffff00\t0x00204600\tC-Mexx Software\n>1\tbelong&0xffffff00\t0x00204700\tKlavis Tech.\n>1\tbelong&0xffffff00\t0x00204800\tNoteheads AB\n\n0\tstring\t\t\tT707\t\tRoland TR-707 Data\n#------------------------------------------------------------------------------\n# file:  file(1) magic for Tcl scripting language\n# URL:  http://www.tcl.tk/\n# From: gustaf neumann\n\n# Tcl scripts\n0\tsearch/1/w\t#!\\ /usr/bin/tcl\tTcl script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1/w\t#!\\ /usr/local/bin/tcl\tTcl script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1\t#!/usr/bin/env\\ tcl\tTcl script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1\t#!\\ /usr/bin/env\\ tcl\tTcl script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1/w\t#!\\ /usr/bin/wish\tTcl/Tk script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1/w\t#!\\ /usr/local/bin/wish\tTcl/Tk script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1\t#!/usr/bin/env\\ wish\tTcl/Tk script text executable\n!:mime\ttext/x-tcl\n0\tsearch/1\t#!\\ /usr/bin/env\\ wish\tTcl/Tk script text executable\n!:mime\ttext/x-tcl\n\n# check the first line\n0\tsearch/1\tpackage\\ req\n>0\tregex\t\t\\^package[\\ \\t]+req\tTcl script\n# not 'p', check other lines\n0\tsearch/1\t!p\n>0\tregex\t\t\\^package[\\ \\t]+req\tTcl script\n\n#------------------------------------------------------------------------------\n# $File$\n# teapot:  file(1) magic for \"teapot\" spreadsheet\n#\n0       string          #!teapot\\012xdr      teapot work sheet (XDR format)\n\n#------------------------------------------------------------------------------\n# $File$\n# terminfo:  file(1) magic for terminfo\n#\n# XXX - byte order for screen images?\n#\n0\tstring\t\t\\032\\001\tCompiled terminfo entry\n0\tshort\t\t0433\t\tCurses screen image\n0\tshort\t\t0434\t\tCurses screen image\n\n#------------------------------------------------------------------------------\n# $File: tex,v 1.19 2013/09/17 17:39:16 christos Exp $\n# tex:  file(1) magic for TeX files\n#\n# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)\n#\n# From <conklin@talisman.kaleida.com>\n\n# Although we may know the offset of certain text fields in TeX DVI\n# and font files, we can't use them reliably because they are not\n# zero terminated. [but we do anyway, christos]\n0\tstring\t\t\\367\\002\tTeX DVI file\n!:mime\tapplication/x-dvi\n>16\tstring\t\t>\\0\t\t(%s)\n0\tstring\t\t\\367\\203\tTeX generic font data\n0\tstring\t\t\\367\\131\tTeX packed font data\n>3\tstring\t\t>\\0\t\t(%s)\n0\tstring\t\t\\367\\312\tTeX virtual font data\n0\tsearch/1\tThis\\ is\\ TeX,\tTeX transcript text\n0\tsearch/1\tThis\\ is\\ METAFONT,\tMETAFONT transcript text\n\n# There is no way to detect TeX Font Metric (*.tfm) files without\n# breaking them apart and reading the data.  The following patterns\n# match most *.tfm files generated by METAFONT or afm2tfm.\n2\tstring\t\t\\000\\021\tTeX font metric data\n!:mime\tapplication/x-tex-tfm\n>33\tstring\t\t>\\0\t\t(%s)\n2\tstring\t\t\\000\\022\tTeX font metric data\n!:mime\tapplication/x-tex-tfm\n>33\tstring\t\t>\\0\t\t(%s)\n\n# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/1\t\\\\input\\ texinfo\tTexinfo source text\n!:mime\ttext/x-texinfo\n0\tsearch/1\tThis\\ is\\ Info\\ file\tGNU Info text\n!:mime\ttext/x-info\n\n# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/4096\t\\\\input\t\tTeX document text\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t\\\\begin\t\tLaTeX document text\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t\\\\section\tLaTeX document text\n!:mime\ttext/x-tex\n!:strength + 18\n0\tsearch/4096\t\\\\setlength\tLaTeX document text\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t\\\\documentstyle\tLaTeX document text\n!:mime\ttext/x-tex\n!:strength + 18\n0\tsearch/4096\t\\\\chapter\tLaTeX document text\n!:mime\ttext/x-tex\n!:strength + 18\n0\tsearch/4096\t\\\\documentclass\tLaTeX 2e document text\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t\\\\relax\t\tLaTeX auxiliary file\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t\\\\contentsline\tLaTeX table of contents\n!:mime\ttext/x-tex\n!:strength + 15\n0\tsearch/4096\t%\\ -*-latex-*-\tLaTeX document text\n!:mime\ttext/x-tex\n\n# Tex document, from Hendrik Scholz <hendrik@scholz.net>\n0   \tsearch/1\t\\\\ifx\t\tTeX document text\n\n# Index and glossary files\n0\tsearch/4096\t\\\\indexentry\tLaTeX raw index file\n0\tsearch/4096\t\\\\begin{theindex}\tLaTeX sorted index\n0\tsearch/4096\t\\\\glossaryentry\tLaTeX raw glossary\n0\tsearch/4096\t\\\\begin{theglossary}\tLaTeX sorted glossary\n0\tsearch/4096\tThis\\ is\\ makeindex\tMakeindex log file\n\n# End of TeX\n\n#------------------------------------------------------------------------------\n# file(1) magic for BibTex text files\n# From Hendrik Scholz <hendrik@scholz.net>\n\n0\tsearch/1/c\t@article{\tBibTeX text file\n0\tsearch/1/c\t@book{\t\tBibTeX text file\n0\tsearch/1/c\t@inbook{\tBibTeX text file\n0\tsearch/1/c\t@incollection{\tBibTeX text file\n0\tsearch/1/c\t@inproceedings{\tBibTeX text file\n0\tsearch/1/c\t@manual{\tBibTeX text file\n0\tsearch/1/c\t@misc{\t\tBibTeX text file\n0\tsearch/1/c\t@preamble{\tBibTeX text file\n0\tsearch/1/c\t@phdthesis{\tBibTeX text file\n0\tsearch/1/c\t@techreport{\tBibTeX text file\n0\tsearch/1/c\t@unpublished{\tBibTeX text file\n\n73\tsearch/1\t%%%\\ \\ \t\tBibTeX-file{ BibTex text file (with full header)\n\n73\tsearch/1\t%%%\\ \\ @BibTeX-style-file{   BibTeX style text file (with full header)\n\n0\tsearch/1\t%\\ BibTeX\\ standard\\ bibliography\\ \tBibTeX standard bibliography style text file\n\n0\tsearch/1\t%\\ BibTeX\\ `\tBibTeX custom bibliography style text file\n\n0\tsearch/1\t@c\\ @mapfile{\tTeX font aliases text file\n\n0\tstring\t\t#LyX\t\tLyX document text\n\n# ConTeXt documents\n#\thttp://wiki.contextgarden.net/\n0\tsearch/4096\t\\\\setupcolors[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\definecolor[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupinteraction[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\useURL[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setuppapersize[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setuplayout[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupfooter[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupfootertexts[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setuppagenumbering[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupbodyfont[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setuphead[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupitemize[\t\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupwhitespace[\tConTeXt document text\n!:strength + 15\n0\tsearch/4096\t\\\\setupindenting[\tConTeXt document text\n!:strength + 15\n\n#------------------------------------------------------------------------------\n# $File: tgif,v 1.6 2010/09/20 18:55:20 rrt Exp $\n# file(1) magic for tgif(1) files\n# From Hendrik Scholz <hendrik@scholz.net>\n0\tstring\t%TGIF\\ \t\t\tTgif file version\n>6\tstring\tx\t\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: ti-8x,v 1.6 2009/09/19 16:28:12 christos Exp $\n# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.\n#\n# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).\n#\n# Update: Romain Lievin (roms@lpg.ticalc.org).\n#\n# NOTE: This list is not complete.\n# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the\n# program/group magic numbers in here because I cannot find any.\n0\t\tstring\t\t**TI80**\tTI-80 Graphing Calculator File.\n0\t\tstring\t\t**TI81**\tTI-81 Graphing Calculator File.\n#\n# Magic Numbers for the TI-73\n#\n0\t\tstring\t\t**TI73**\tTI-73 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(equation)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(assembly program)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0C\t\t(complex number)\n>0x00003B\tbyte\t\t0x0F\t\t(window settings)\n>0x00003B\tbyte\t\t0x10\t\t(zoom)\n>0x00003B\tbyte\t\t0x11\t\t(table setup)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n\n# Magic Numbers for the TI-82\n#\n0\t\tstring\t\t**TI82**\tTI-82 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(Y-variable)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(protected prgm)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0B\t\t(window settings)\n>0x00003B\tbyte\t\t0x0C\t\t(window settings)\n>0x00003B\tbyte\t\t0x0D\t\t(table setup)\n>0x00003B\tbyte\t\t0x0E\t\t(screenshot)\n>0x00003B\tbyte\t\t0x0F\t\t(backup)\n#\n# Magic Numbers for the TI-83\n#\n0\t\tstring\t\t**TI83**\tTI-83 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(Y-variable)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(protected prgm)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0B\t\t(window settings)\n>0x00003B\tbyte\t\t0x0C\t\t(window settings)\n>0x00003B\tbyte\t\t0x0D\t\t(table setup)\n>0x00003B\tbyte\t\t0x0E\t\t(screenshot)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n#\n# Magic Numbers for the TI-83+\n#\n0\t\tstring\t\t**TI83F*\tTI-83+ Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(equation)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(assembly program)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0C\t\t(complex number)\n>0x00003B\tbyte\t\t0x0F\t\t(window settings)\n>0x00003B\tbyte\t\t0x10\t\t(zoom)\n>0x00003B\tbyte\t\t0x11\t\t(table setup)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n>0x00003B\tbyte\t\t0x15\t\t(application variable)\n>0x00003B\tbyte\t\t0x17\t\t(group of variable)\n\n#\n# Magic Numbers for the TI-85\n#\n0\t\tstring\t\t**TI85**\tTI-85 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(complex number)\n>0x00003B\tbyte\t\t0x02\t\t(real vector)\n>0x00003B\tbyte\t\t0x03\t\t(complex vector)\n>0x00003B\tbyte\t\t0x04\t\t(real list)\n>0x00003B\tbyte\t\t0x05\t\t(complex list)\n>0x00003B\tbyte\t\t0x06\t\t(real matrix)\n>0x00003B\tbyte\t\t0x07\t\t(complex matrix)\n>0x00003B\tbyte\t\t0x08\t\t(real constant)\n>0x00003B\tbyte\t\t0x09\t\t(complex constant)\n>0x00003B\tbyte\t\t0x0A\t\t(equation)\n>0x00003B\tbyte\t\t0x0C\t\t(string)\n>0x00003B\tbyte\t\t0x0D\t\t(function GDB)\n>0x00003B\tbyte\t\t0x0E\t\t(polar GDB)\n>0x00003B\tbyte\t\t0x0F\t\t(parametric GDB)\n>0x00003B\tbyte\t\t0x10\t\t(diffeq GDB)\n>0x00003B\tbyte\t\t0x11\t\t(picture)\n>0x00003B\tbyte\t\t0x12\t\t(program)\n>0x00003B\tbyte\t\t0x13\t\t(range)\n>0x00003B\tbyte\t\t0x17\t\t(window settings)\n>0x00003B\tbyte\t\t0x18\t\t(window settings)\n>0x00003B\tbyte\t\t0x19\t\t(window settings)\n>0x00003B\tbyte\t\t0x1A\t\t(window settings)\n>0x00003B\tbyte\t\t0x1B\t\t(zoom)\n>0x00003B\tbyte\t\t0x1D\t\t(backup)\n>0x00003B\tbyte\t\t0x1E\t\t(unknown)\n>0x00003B\tbyte\t\t0x2A\t\t(equation)\n>0x000032\tstring\t\tZS4\t\t- ZShell Version 4 File.\n>0x000032\tstring\t\tZS3\t\t- ZShell Version 3 File.\n#\n# Magic Numbers for the TI-86\n#\n0\t\tstring\t\t**TI86**\tTI-86 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(complex number)\n>0x00003B\tbyte\t\t0x02\t\t(real vector)\n>0x00003B\tbyte\t\t0x03\t\t(complex vector)\n>0x00003B\tbyte\t\t0x04\t\t(real list)\n>0x00003B\tbyte\t\t0x05\t\t(complex list)\n>0x00003B\tbyte\t\t0x06\t\t(real matrix)\n>0x00003B\tbyte\t\t0x07\t\t(complex matrix)\n>0x00003B\tbyte\t\t0x08\t\t(real constant)\n>0x00003B\tbyte\t\t0x09\t\t(complex constant)\n>0x00003B\tbyte\t\t0x0A\t\t(equation)\n>0x00003B\tbyte\t\t0x0C\t\t(string)\n>0x00003B\tbyte\t\t0x0D\t\t(function GDB)\n>0x00003B\tbyte\t\t0x0E\t\t(polar GDB)\n>0x00003B\tbyte\t\t0x0F\t\t(parametric GDB)\n>0x00003B\tbyte\t\t0x10\t\t(diffeq GDB)\n>0x00003B\tbyte\t\t0x11\t\t(picture)\n>0x00003B\tbyte\t\t0x12\t\t(program)\n>0x00003B\tbyte\t\t0x13\t\t(range)\n>0x00003B\tbyte\t\t0x17\t\t(window settings)\n>0x00003B\tbyte\t\t0x18\t\t(window settings)\n>0x00003B\tbyte\t\t0x19\t\t(window settings)\n>0x00003B\tbyte\t\t0x1A\t\t(window settings)\n>0x00003B\tbyte\t\t0x1B\t\t(zoom)\n>0x00003B\tbyte\t\t0x1D\t\t(backup)\n>0x00003B\tbyte\t\t0x1E\t\t(unknown)\n>0x00003B\tbyte\t\t0x2A\t\t(equation)\n#\n# Magic Numbers for the TI-89\n#\n0\t\tstring\t\t**TI89**\tTI-89 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1C\t\t(zipped)\n>0x000048\tbyte\t\t0x21\t\t(assembler)\n#\n# Magic Numbers for the TI-92\n#\n0\t\tstring\t\t**TI92**\tTI-92 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1D\t\t(backup)\n#\n# Magic Numbers for the TI-92+/V200\n#\n0\t\tstring\t\t**TI92P*\tTI-92+/V200 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1C\t\t(zipped)\n>0x000048\tbyte\t\t0x21\t\t(assembler)\n#\n# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades\n#\n0x0000016\tstring\t\tAdvanced\tTI-XX Graphing Calculator (FLASH)\n0\t\tstring\t\t**TIFL**\tTI-XX Graphing Calculator (FLASH)\n>8\t\tbyte\t\t>0\t\t- Revision %d\n>>9 \t\tbyte\t\tx\t\t\\b.%d,\n>12\t\tbyte\t\t>0\t\tRevision date %02x\n>>13\t\tbyte\t\tx\t\t\\b/%02x\n>>14\t\tbeshort\t\tx\t\t\\b/%04x,\n>17\t\tstring\t\t>/0\t\tname: '%s',\n>48\t\tbyte\t\t0x74\t\tdevice: TI-73,\n>48\t\tbyte\t\t0x73\t\tdevice: TI-83+,\n>48\t\tbyte\t\t0x98\t\tdevice: TI-89,\n>48\t\tbyte\t\t0x88\t\tdevice: TI-92+,\n>49\t\tbyte\t\t0x23\t\ttype: OS upgrade,\n>49\t\tbyte\t\t0x24\t\ttype: application,\n>49\t\tbyte\t\t0x25\t\ttype: certificate,\n>49\t\tbyte\t\t0x3e\t\ttype: license,\n>74\t\tlelong\t\t>0\t\tsize: %d bytes\n\n# VTi & TiEmu skins (TI Graphing Calculators).\n# From: Romain Lievin (roms@lpg.ticalc.org).\n# Magic Numbers for the VTi skins\n0               string          VTI\t\tVirtual TI skin\n>3\t\tstring\t\tv\t\t- Version\n>>4\t\tbyte\t\t>0\t\t\\b %c\n>>6\t\tbyte\t\tx\t\t\\b.%c\n# Magic Numbers for the TiEmu skins\n0\t\tstring\t\tTiEmu\t\tTiEmu skin\n>6              string          v               - Version\n>>7             byte            >0              \\b %c\n>>9             byte            x               \\b.%c\n>>10\t\tbyte\t\tx\t\t\\b%c\n\n#------------------------------------------------------------------------------\n# $File$\n# timezone:  file(1) magic for timezone data\n#\n# from Daniel Quinlan (quinlan@yggdrasil.com)\n# this should work on Linux, SunOS, and maybe others\n# Added new official magic number for recent versions of the Olson code\n0\tstring\tTZif\ttimezone data\n>4\tbyte\t0\t\\b, old version\n>4\tbyte\t>0\t\\b, version %c\n>20\tbelong\t0\t\\b, no gmt time flags\n>20\tbelong\t1\t\\b, 1 gmt time flag\n>20\tbelong\t>1\t\\b, %d gmt time flags\n>24\tbelong\t0\t\\b, no std time flags\n>20\tbelong\t1\t\\b, 1 std time flag\n>24\tbelong\t>1\t\\b, %d std time flags\n>28\tbelong\t0\t\\b, no leap seconds\n>28\tbelong\t1\t\\b, 1 leap second\n>28\tbelong  >1\t\\b, %d leap seconds\n>32\tbelong\t0\t\\b, no transition times\n>32\tbelong\t1\t\\b, 1 transition time\n>32\tbelong  >1\t\\b, %d transition times\n>36\tbelong\t0\t\\b, no abbreviation chars\n>36\tbelong\t1\t\\b, 1 abbreviation char\n>36\tbelong\t>1\t\\b, %d abbreviation chars\n0\tstring\t\\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\\0\told timezone data\n0\tstring\t\\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\\2\\0\told timezone data\n0\tstring  \\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\\3\\0\told timezone data\n0\tstring\t\\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\\4\\0\told timezone data\n0\tstring\t\\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\\5\\0\told timezone data\n0\tstring\t\\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\\6\\0\told timezone data\n\n#------------------------------------------------------------------------------\n# $File: troff,v 1.10 2009/09/19 16:28:12 christos Exp $\n# troff:  file(1) magic for *roff\n#\n# updated by Daniel Quinlan (quinlan@yggdrasil.com)\n\n# troff input\n0\tsearch/1\t.\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'.\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'''\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tregex/20l\t\\^\\\\.[A-Za-z0-9][A-Za-z0-9][\\ \\t]\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tregex/20l\t\\^\\\\.[A-Za-z0-9][A-Za-z0-9]$\ttroff or preprocessor input text\n!:mime\ttext/troff\n\n# ditroff intermediate output text\n0\tsearch/1\tx\\ T\t\tditroff output text\n>4\tsearch/1\tcat\t\tfor the C/A/T phototypesetter\n>4\tsearch/1\tps\t\tfor PostScript\n>4\tsearch/1\tdvi\t\tfor DVI\n>4\tsearch/1\tascii\t\tfor ASCII\n>4\tsearch/1\tlj4\t\tfor LaserJet 4\n>4\tsearch/1\tlatin1\t\tfor ISO 8859-1 (Latin 1)\n>4\tsearch/1\tX75\t\tfor xditview at 75dpi\n>>7\tsearch/1\t-12\t\t(12pt)\n>4\tsearch/1\tX100\t\tfor xditview at 100dpi\n>>8\tsearch/1\t-12\t\t(12pt)\n\n# output data formats\n0\tstring\t\t\\100\\357\tvery old (C/A/T) troff output data\n\n#------------------------------------------------------------------------------\n# $File$\n# tuxedo:\tfile(1) magic for BEA TUXEDO data files\n#\n# from Ian Springer <ispringer@hotmail.com>\n#\n0\tstring\t\t\\0\\0\\1\\236\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tBEA TUXEDO DES mask data\n\n#------------------------------------------------------------------------------\n# $File$\n# typeset:  file(1) magic for other typesetting\n#\n0\tstring\t\tInterpress/Xerox\tXerox InterPress data\n>16\tstring\t\t/\t\t\t(version\n>>17\tstring\t\t>\\0\t\t\t%s)\n\n#------------------------------------------------------------------------------\n# $File: unicode,v 1.5 2009/09/19 16:28:13 christos Exp $\n# Unicode:  BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp>\n# GRR: These types should be recognised in file_ascmagic so these\n# encodings can be treated by text patterns.\n# Missing types are already dealt with internally.\n#\n0\tstring\t+/v8\t\t\tUnicode text, UTF-7\n0\tstring\t+/v9\t\t\tUnicode text, UTF-7\n0\tstring\t+/v+\t\t\tUnicode text, UTF-7\n0\tstring\t+/v/\t\t\tUnicode text, UTF-7\n0\tstring\t\\335\\163\\146\\163\tUnicode text, UTF-8-EBCDIC\n0\tstring\t\\000\\000\\376\\377\tUnicode text, UTF-32, big-endian\n0\tstring\t\\377\\376\\000\\000\tUnicode text, UTF-32, little-endian\n0\tstring\t\\016\\376\\377\t\tUnicode text, SCSU (Standard Compression Scheme for Unicode)\n\n#------------------------------------------------------------------------------\n# $File: unknown,v 1.7 2009/09/19 16:28:13 christos Exp $\n# unknown:  file(1) magic for unknown machines\n#\n# 0x107 is 0407, 0x108 is 0410, and 0x109 is 0411; those are all PDP-11\n# (executable, pure, and split I&D, respectively), but the PDP-11 version\n# doesn't have the \"version %ld\", which may be a bogus COFFism (I don't\n# think there was ever COFF for the PDP-11).\n#\n# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a\n# long, as it would be on a VAX.  In any case, that could collide with\n# VAX demand-paged files, as the magic number is little-endian on those\n# binaries, so the first 16 bits of the file would contain 0x10B.\n#\n# Therefore, those entries are commented out.\n#\n# 0x10C is 0414 and 0x10E is 0416; those *are* unknown.\n#\n#0\tshort\t\t0x107\t\tunknown machine executable\n#>8\tshort\t\t>0\t\tnot stripped\n#>15\tbyte\t\t>0\t\t- version %ld\n#0\tshort\t\t0x108\t\tunknown pure executable\n#>8\tshort\t\t>0\t\tnot stripped\n#>15\tbyte\t\t>0\t\t- version %ld\n#0\tshort\t\t0x109\t\tPDP-11 separate I&D\n#>8\tshort\t\t>0\t\tnot stripped\n#>15\tbyte\t\t>0\t\t- version %ld\n#0\tshort\t\t0x10b\t\tunknown pure executable\n#>8\tshort\t\t>0\t\tnot stripped\n#>15\tbyte\t\t>0\t\t- version %ld\n0\tlong\t\t0x10c\t\tunknown demand paged pure executable\n>16\tlong\t\t>0\t\tnot stripped\n0\tlong\t\t0x10e\t\tunknown readable demand paged pure executable\n\n#------------------------------------------------------------------------------\n# $File: uterus,v 1.2 2014/04/28 12:04:50 christos Exp $\n# file(1) magic for uterus files\n# http://freecode.com/projects/uterus\n#\n0\tstring\t\tUTE+\tuterus file\n>4\tstring\t\tv\t\\b, version\n>5\tbyte\t\tx\t%c\n>6\tstring\t\t.\t\\b.\n>7\tbyte\t\tx\t\\b%c\n>8\tstring\t\t\\<\\>\t\\b, big-endian\n>>16\tbelong\t\t>0\t\\b, slut size %u\n>8\tstring\t\t\\>\\<\t\\b, litte-endian\n>>16\tlelong\t\t>0\t\\b, slut size %u\n>10\tbyte\t\t&8\t\\b, compressed\n\n#------------------------------------------------------------------------------\n# $File$\n# uuencode:  file(1) magic for ASCII-encoded files\n#\n\n# GRR:  the first line of xxencoded files is identical to that in uuencoded\n# files, but the first character in most subsequent lines is 'h' instead of\n# 'M'.  (xxencoding uses lowercase letters in place of most of uuencode's\n# punctuation and survives BITNET gateways better.)  If regular expressions\n# were supported, this entry could possibly be split into two with\n# \"begin\\040\\.\\*\\012M\" or \"begin\\040\\.\\*\\012h\" (where \\. and \\* are REs).\n0\tsearch/1\tbegin\\ \t\tuuencoded or xxencoded text\n\n# btoa(1) is an alternative to uuencode that requires less space.\n0\tsearch/1\txbtoa\\ Begin\tbtoa'd text\n\n# ship(1) is another, much cooler alternative to uuencode.\n# Greg Roelofs, newt@uchicago.edu\n0\tsearch/1\t$\\012ship\tship'd binary text\n\n# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)\n# Greg Roelofs, newt@uchicago.edu\n0\tsearch/1\tDecode\\ the\\ following\\ with\\ bdeco\tbencoded News text\n\n# BinHex is the Macintosh ASCII-encoded file format (see also \"apple\")\n# Daniel Quinlan, quinlan@yggdrasil.com\n11\tsearch/1\tmust\\ be\\ converted\\ with\\ BinHex\tBinHex binary text\n>41\tsearch/1\tx\t\t\t\t\t\\b, version %.3s\n\n# GRR: handle BASE64\n\n#------------------------------------------------------------------------------\n# $File: varied.out,v 1.22 2010/07/02 00:06:27 christos Exp $\n# varied.out:  file(1) magic for various USG systems\n#\n#\tHerewith many of the object file formats used by USG systems.\n#\tMost have been moved to files for a particular processor,\n#\tand deleted if they duplicate other entries.\n#\n0\tshort\t\t0610\t\tPerkin-Elmer executable\n# AMD 29K\n0\tbeshort\t\t0572\t\tamd 29k coff noprebar executable\n0\tbeshort\t\t01572\t\tamd 29k coff prebar executable\n0\tbeshort\t\t0160007\t\tamd 29k coff archive\n# Cray\n6\tbeshort\t\t0407\t\tunicos (cray) executable\n# Ultrix 4.3\n596\tstring\t\t\\130\\337\\377\\377\tUltrix core file\n>600\tstring\t\t>\\0\t\tfrom '%s'\n# BeOS and MAcOS PEF executables\n# From: hplus@zilker.net (Jon Watte)\n0\tstring\t\tJoy!peffpwpc\theader for PowerPC PEF executable\n#\n# ava assembler/linker Uros Platise <uros.platise@ijs.si>\n0       string          avaobj  AVR assembler object code\n>7      string          >\\0     version '%s'\n# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>\n0\tstring\t\tgmon\t\tGNU prof performance data\n>4\tlong\t\tx\t\t- version %d\n# From: Dave Pearson <davep@davep.org>\n# Harbour <URL:http://harbour-project.org/> HRB files.\n0\tstring\t\t\\xc0HRB\t\tHarbour HRB file\n>4\tleshort\t\tx\t\tversion %d\n# Harbour HBV files\n0\tstring\t\t\\xc0HBV\t\tHarbour variable dump file\n>4\tleshort\t\tx\t\tversion %d\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n# 0\tstring\t\texec \t\tBugOS executable\n# 0\tstring\t\tpack\t\tBugOS archive\n\n# From: Jason Spence <jspence@lightconsulting.com>\n# Generated by the \"examples\" in STM's ST40 devkit, and derived code.\n0\tlelong\t\t0x13a9f17e\tST40 component image format\n>4\tstring\t\t>\\0\t\t\\b, name '%s'\n\n#------------------------------------------------------------------------------\n# $File: varied.script,v 1.9 2011/12/16 16:32:48 rrt Exp $\n# varied.script:  file(1) magic for various interpreter scripts\n\n0\tstring/t\t\t#!\\ /\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script text executable\n!:strength / 2\n\n0\tstring/b\t\t#!\\ /\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script executable (binary data)\n!:strength / 2\n\n0\tstring/t\t\t#!\\t/\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script text executable\n!:strength / 2\n\n0\tstring/b\t\t#!\\t/\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script executable (binary data)\n!:strength / 2\n\n0\tstring/t\t\t#!/\t\t\ta\n>2\tstring\t\t>\\0\t\t\t%s script text executable\n!:strength / 2\n\n0\tstring/b\t\t#!/\t\t\ta\n>2\tstring\t\t>\\0\t\t\t%s script executable (binary data)\n!:strength / 2\n\n0\tstring/t\t\t#!\\ \t\t\tscript text executable\n>3\tstring\t\t>\\0\t\t\tfor %s\n!:strength / 3\n\n0\tstring/b\t\t#!\\ \t\t\tscript executable\n>3\tstring\t\t>\\0\t\t\tfor %s (binary data)\n!:strength / 3\n\n# using env\n0\tstring/t\t#!/usr/bin/env\t\ta\n>15\tstring/t\t>\\0\t\t\t%s script text executable\n!:strength / 10\n\n0\tstring/b\t#!/usr/bin/env\t\ta\n>15\tstring/b\t>\\0\t\t\t%s script executable (binary data)\n!:strength / 10\n\n0\tstring/t\t#!\\ /usr/bin/env\ta\n>16\tstring/t\t>\\0\t\t\t%s script text executable\n!:strength / 10\n\n0\tstring/b\t#!\\ /usr/bin/env\ta\n>16\tstring/b\t>\\0\t\t\t%s script executable (binary data)\n!:strength / 10\n\n# From: arno <arenevier@fdn.fr>\n# mozilla xpconnect typelib\n# see http://www.mozilla.org/scriptable/typelib_file.html\n0\tstring \t\tXPCOM\\nTypeLib\\r\\n\\032\t\tXPConnect Typelib\n>0x10  byte        x       version %d\n>>0x11 byte        x      \\b.%d\n\n#------------------------------------------------------------------------------\n# $File: vax,v 1.8 2013/01/09 22:37:24 christos Exp $\n# vax:  file(1) magic for VAX executable/object and APL workspace\n#\n0\tlelong\t\t0101557\t\tVAX single precision APL workspace\n0\tlelong\t\t0101556\t\tVAX double precision APL workspace\n\n#\n# VAX a.out (BSD; others collide with 386 and other 32-bit little-endian\n# executables, and are handled in aout)\n#\n0\tlelong\t\t0420\t\ta.out VAX demand paged (first page unmapped) pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n\n#\n# VAX COFF\n#\n# The `versions' were commented out, but have been un-commented out.\n# (Was the problem just one of endianness?)\n#\n0\tleshort\t\t0570\t\tVAX COFF executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %d\n0\tleshort\t\t0575\t\tVAX COFF pure executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %d\n\n#------------------------------------------------------------------------------\n# $File$\n# vicar:  file(1) magic for VICAR files.\n#\n# From: Ossama Othman <othman@astrosun.tn.cornell.edu\n# VICAR is JPL's in-house spacecraft image processing program\n# VICAR image\n0\tstring\tLBLSIZE=\tVICAR image data\n>32\tstring\tBYTE\t\t\\b, 8 bits  = VAX byte\n>32\tstring\tHALF\t\t\\b, 16 bits = VAX word     = Fortran INTEGER*2\n>32\tstring\tFULL\t\t\\b, 32 bits = VAX longword = Fortran INTEGER*4\n>32\tstring\tREAL\t\t\\b, 32 bits = VAX longword = Fortran REAL*4\n>32\tstring\tDOUB\t\t\\b, 64 bits = VAX quadword = Fortran REAL*8\n>32\tstring\tCOMPLEX\t\t\\b, 64 bits = VAX quadword = Fortran COMPLEX*8\n# VICAR label file\n43\tstring\tSFDU_LABEL\tVICAR label file\n\n#------------------------------------------------------------------------------\n# $File: virtual,v 1.5 2014/04/30 21:41:02 christos Exp $\n# From: James Nobis <quel@quelrod.net>\n# Microsoft hard disk images for:\n# Virtual Server\n# Virtual PC\n# http://technet.microsoft.com/en-us/virtualserver/bb676673.aspx\n# .vhd\n0\tstring\tconectix\tMicrosoft Disk Image, Virtual Server or Virtual PC\n\n# libvirt\n# From: Philipp Hahn <hahn@univention.de>\n0\tstring\tLibvirtQemudSave\tLibvirt QEMU Suspend Image\n>0x10\tlelong\tx\t\\b, version %u\n>0x14\tlelong\tx\t\\b, XML length %u\n>0x18\tlelong\t1\t\\b, running\n>0x1c\tlelong\t1\t\\b, compressed\n\n0\tstring\tLibvirtQemudPart\tLibvirt QEMU partial Suspend Image\n# From: Alex Beregszaszi <alex@fsn.hu>\n0\tstring/b\tCOWD\t\tVMWare3\n>4\tbyte\t3\t\tdisk image\n>>32\tlelong\tx\t\t(%d/\n>>36\tlelong\tx\t\t\\b%d/\n>>40\tlelong\tx\t\t\\b%d)\n>4\tbyte\t2\t\tundoable disk image\n>>32\tstring\t>\\0\t\t(%s)\n\n0\tstring/b\tVMDK\t\t VMware4 disk image\n0\tstring/b\tKDMV\t\t VMware4 disk image\n\n#--------------------------------------------------------------------\n# Qemu Emulator Images\n# Lines written by Friedrich Schwittay (f.schwittay@yousable.de)\n# Updated by Adam Buchbinder (adam.buchbinder@gmail.com)\n# Made by reading sources, reading documentation, and doing trial and error\n# on existing QCOW files\n0\tstring/b\tQFI\\xFB\tQEMU QCOW Image\n\n# Uncomment the following line to display Magic (only used for debugging\n# this magic number)\n#>0\tstring/b\tx\t, Magic: %s\n\n# There are currently 2 Versions: \"1\" and \"2\".\n# http://www.gnome.org/~markmc/qcow-image-format-version-1.html\n>4\tbelong\t1\t(v1)\n\n# Using the existence of the Backing File Offset to determine whether\n# to read Backing File Information\n>>12\tbelong\t >0\t \\b, has backing file (\n# Note that this isn't a null-terminated string; the length is actually\n# (16.L). Assuming a null-terminated string happens to work usually, but it\n# may spew junk until it reaches a \\0 in some cases.\n>>>(12.L)\t string >\\0\t\\bpath %s\n\n# Modification time of the Backing File\n# Really useful if you want to know if your backing\n# file is still usable together with this image\n>>>>20\tbedate >0\t\\b, mtime %s)\n>>>>20\tdefault x\t\\b)\n\n# Size is stored in bytes in a big-endian u64.\n>>24\tbequad\tx\t \\b, %lld bytes\n\n# 1 for AES encryption, 0 for none.\n>>36\tbelong\t1\t\\b, AES-encrypted\n\n# http://www.gnome.org/~markmc/qcow-image-format.html\n>4\tbelong\t2\t(v2)\n# Using the existence of the Backing File Offset to determine whether\n# to read Backing File Information\n>>8\tbequad  >0\t \\b, has backing file\n# Note that this isn't a null-terminated string; the length is actually\n# (16.L). Assuming a null-terminated string happens to work usually, but it\n# may spew junk until it reaches a \\0 in some cases. Also, since there's no\n# .Q modifier, we just use the bottom four bytes as an offset. Note that if\n# the file is over 4G, and the backing file path is stored after the first 4G,\n# the wrong filename will be printed. (This should be (8.Q), when that syntax\n# is introduced.)\n>>>(12.L)\t string >\\0\t(path %s)\n>>24\tbequad\tx\t\\b, %lld bytes\n>>32\tbelong\t1\t\\b, AES-encrypted\n\n>4\tbelong\t3\t(v3)\n# Using the existence of the Backing File Offset to determine whether\n# to read Backing File Information\n>>8\tbequad  >0\t \\b, has backing file\n# Note that this isn't a null-terminated string; the length is actually\n# (16.L). Assuming a null-terminated string happens to work usually, but it\n# may spew junk until it reaches a \\0 in some cases. Also, since there's no\n# .Q modifier, we just use the bottom four bytes as an offset. Note that if\n# the file is over 4G, and the backing file path is stored after the first 4G,\n# the wrong filename will be printed. (This should be (8.Q), when that syntax\n# is introduced.)\n>>>(12.L)\t string >\\0\t(path %s)\n>>24\tbequad\tx\t\\b, %lld bytes\n>>32\tbelong\t1\t\\b, AES-encrypted\n\n>4\tdefault x\t(unknown version)\n\n0\tstring/b\tQEVM\t\tQEMU suspend to disk image\n\n# QEMU QED Image\n# http://wiki.qemu.org/Features/QED/Specification\n0\tstring/b\tQED\\0\t\tQEMU QED Image\n\n# VDI Image\n# Sun xVM VirtualBox Disk Image\n# From: Richard W.M. Jones <rich@annexia.org>\n# VirtualBox Disk Image\n0x40\tulelong\t\t0xbeda107f\tVirtualBox Disk Image\n>0x44\tuleshort\t>0\t\t\\b, major %u\n>0x46\tuleshort\t>0\t\t\\b, minor %u\n>0\tstring\t\t>\\0\t\t(%s)\n>368\tlequad\t\tx\t\t \\b, %lld bytes\n\n0\tstring/b\tBochs\\ Virtual\\ HD\\ Image\tBochs disk image,\n>32\tstring\tx\t\t\t\ttype %s,\n>48\tstring\tx\t\t\t\tsubtype %s\n\n0\tlelong\t0x02468ace\t\t\tBochs Sparse disk image\n\n\n#------------------------------------------------------------------------------\n# $File$\n# Virtutech Compressed Random Access File Format\n#\n# From <gustav@virtutech.com>\n0      string          \\211\\277\\036\\203        Virtutech CRAFF\n>4     belong          x               v%d\n>20    belong          0               uncompressed\n>20    belong          1               bzipp2ed\n>20    belong          2               gzipped\n>24    belong          0               not clean\n\n#------------------------------------------------------------------------------\n# $File$\n# visx:  file(1) magic for Visx format files\n#\n0\tshort\t\t0x5555\t\tVISX image file\n>2\tbyte\t\t0\t\t(zero)\n>2\tbyte\t\t1\t\t(unsigned char)\n>2\tbyte\t\t2\t\t(short integer)\n>2\tbyte\t\t3\t\t(float 32)\n>2\tbyte\t\t4\t\t(float 64)\n>2\tbyte\t\t5\t\t(signed char)\n>2\tbyte\t\t6\t\t(bit-plane)\n>2\tbyte\t\t7\t\t(classes)\n>2\tbyte\t\t8\t\t(statistics)\n>2\tbyte\t\t10\t\t(ascii text)\n>2\tbyte\t\t15\t\t(image segments)\n>2\tbyte\t\t100\t\t(image set)\n>2\tbyte\t\t101\t\t(unsigned char vector)\n>2\tbyte\t\t102\t\t(short integer vector)\n>2\tbyte\t\t103\t\t(float 32 vector)\n>2\tbyte\t\t104\t\t(float 64 vector)\n>2\tbyte\t\t105\t\t(signed char vector)\n>2\tbyte\t\t106\t\t(bit plane vector)\n>2\tbyte\t\t121\t\t(feature vector)\n>2\tbyte\t\t122\t\t(feature vector library)\n>2\tbyte\t\t124\t\t(chain code)\n>2\tbyte\t\t126\t\t(bit vector)\n>2\tbyte\t\t130\t\t(graph)\n>2\tbyte\t\t131\t\t(adjacency graph)\n>2\tbyte\t\t132\t\t(adjacency graph library)\n>2\tstring\t\t.VISIX\t\t(ascii text)\n\n#------------------------------------------------------------------------------\n# $File: vms,v 1.8 2014/08/17 12:58:54 christos Exp $\n# vms:  file(1) magic for VMS executables (experimental)\n#\n# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)\n\n# GRR 950122:  I'm just guessing on these, based on inspection of the headers\n# of three executables each for Alpha and VAX architectures.  The VAX files\n# all had headers similar to this:\n#\n#   00000  b0 00 30 00 44 00 60 00  00 00 00 00 30 32 30 35  ..0.D.`.....0205\n#   00010  01 01 00 00 ff ff ff ff  ff ff ff ff 00 00 00 00  ................\n#\n0\tstring\t\\xb0\\0\\x30\\0\tVMS VAX executable\n>44032\tstring\tPK\\003\\004\t\\b, Info-ZIP SFX archive v5.12 w/decryption\n#\n# The AXP files all looked like this, except that the byte at offset 0x22\n# was 06 in some of them and 07 in others:\n#\n#   00000  03 00 00 00 00 00 00 00  ec 02 00 00 10 01 00 00  ................\n#   00010  68 00 00 00 98 00 00 00  b8 00 00 00 00 00 00 00  h...............\n#   00020  00 00 07 00 00 00 00 00  00 00 00 00 00 00 00 00  ................\n#   00030  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  ................\n#   00040  00 00 00 00 ff ff ff ff  ff ff ff ff 02 00 00 00  ................\n#\n# GRR this test is still too general as it catches example adressen.dbt\n0\tbelong\t0x03000000\t\n>8\tubelong\t0xec020000\tVMS Alpha executable\n>>75264\tstring\tPK\\003\\004\t\\b, Info-ZIP SFX archive v5.12 w/decryption\n\n#------------------------------------------------------------------------------\n# $File$\n# VMware specific files (deducted from version 1.1 and log file entries)\n# Anthon van der Neut (anthon@mnt.org)\n0\tbelong\t0x4d52564e\tVMware nvram \n\n#------------------------------------------------------------------------------\n# $File: vorbis,v 1.20 2014/09/23 16:35:08 christos Exp $\n# vorbis:  file(1) magic for Ogg/Vorbis files\n#\n# From Felix von Leitner <leitner@fefe.de>\n# Extended by Beni Cherniavsky <cben@crosswinds.net>\n# Further extended by Greg Wooledge <greg@wooledge.org>\n#\n# Most (everything but the number of channels and bitrate) is commented\n# out with `##' as it's not interesting to the average user.  The most\n# probable things advanced users would want to uncomment are probably\n# the number of comments and the encoder version.\n#\n# FIXME: The first match has been made a search, so that it can skip\n# over prepended ID3 tags. This will work for MIME type detection, but\n# won't work for detecting other properties of the file (they all need\n# to be made relative to the search). In any case, if the file has ID3\n# tags, the ID3 information will be printed, not the Ogg information,\n# so until that's fixed, this doesn't matter.\n# FIXME[2]: Disable the above for now, since search assumes text mode.\n#\n# --- Ogg Framing ---\n#0\t\tsearch/1000\tOggS\t\tOgg data\n0\t\tstring\tOggS\t\tOgg data\n>4\t\tbyte\t\t!0\t\tUNKNOWN REVISION %u\n##>4\t\tbyte\t\t0\t\trevision 0\n>4\t\tbyte\t\t0\n##>>14\t\tlelong\t\tx\t\t(Serial %lX)\n# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)\n>>28\t\tstring\t\t\\x7fFLAC\t\\b, FLAC audio\n# non-Vorbis content: Theora\n!:mime\t\taudio/ogg\n>>28\t\tstring\t\t\\x80theora\t\\b, Theora video\n!:mime\t\tvideo/ogg\n# non-Vorbis content: Kate\n>>28\t\tstring\t\t\\x80kate\\0\\0\\0\\0\t\\b, Kate (Karaoke and Text)\n!:mime\t\tapplication/ogg\n>>>37\t\tubyte\t\tx\t\tv%u\n>>>38\t\tubyte\t\tx\t\t\\b.%u,\n>>>40\t\tbyte\t\t0\t\tutf8 encoding,\n>>>40\t\tbyte\t\t!0\t\tunknown character encoding,\n>>>60\t\tstring\t\t>\\0\t\tlanguage %s,\n>>>60\t\tstring\t\t\\0\t\tno language set,\n>>>76\t\tstring\t\t>\\0\t\tcategory %s\n>>>76\t\tstring\t\t\\0\t\tno category set\n# non-Vorbis content: Skeleton\n>>28\t\tstring\t\tfishead\\0\t\\b, Skeleton\n!:mime\t\tvideo/ogg\n>>>36\t\tleshort\t\tx\t\tv%u\n>>>40\t\tleshort\t\tx\t\t\\b.%u\n# non-Vorbis content: Speex\n>>28\t\tstring\t\tSpeex\\ \\ \\ \t\\b, Speex audio\n!:mime\t\taudio/ogg\n# non-Vorbis content: OGM\n>>28\t\tstring\t\t\\x01video\\0\\0\\0\t\\b, OGM video\n!:mime\t\tvideo/ogg\n>>>37\t\tstring/c\tdiv3\t\t(DivX 3)\n>>>37\t\tstring/c\tdivx\t\t(DivX 4)\n>>>37\t\tstring/c\tdx50\t\t(DivX 5)\n>>>37\t\tstring/c\txvid\t\t(XviD)\n# --- First vorbis packet - general header ---\n>>28\t\tstring\t\t\\x01vorbis\t\\b, Vorbis audio,\n!:mime\t\taudio/ogg\n>>>35\t\tlelong\t\t!0\t\tUNKNOWN VERSION %u,\n##>>>35\t\tlelong\t\t0\t\tversion 0,\n>>>35\t\tlelong\t\t0\n>>>>39\t\tubyte\t\t1\t\tmono,\n>>>>39\t\tubyte\t\t2\t\tstereo,\n>>>>39\t\tubyte\t\t>2\t\t%u channels,\n>>>>40\t\tlelong\t\tx\t\t%u Hz\n# Minimal, nominal and maximal bitrates specified when encoding\n>>>>48\t\tstring\t\t<\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\t\\b,\n# The above tests if at least one of these is specified:\n>>>>>52\t\tlelong\t\t!-1\n# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields\n# instead of -1.\n# Vorbis 1.0 uses 0 instead of -1.\n>>>>>>52\tlelong\t\t!0\n>>>>>>>52\tlelong\t\t!-1000\n>>>>>>>>52\tlelong\t\tx\t\t<%u\n>>>>>48\t\tlelong\t\t!-1\n>>>>>>48\tlelong\t\tx\t\t~%u\n>>>>>44\t\tlelong\t\t!-1\n>>>>>>44\tlelong\t\t!-1000\n>>>>>>>44\tlelong\t\t!0\n>>>>>>>>44\tlelong\t\tx\t\t>%u\n>>>>>48\t\tstring\t\t<\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\tbps\n# -- Second vorbis header packet - the comments\n# A kludge to read the vendor string.  It's a counted string, not a\n# zero-terminated one, so file(1) can't read it in a generic way.\n# libVorbis is the only one existing currently, so I detect specifically\n# it.  The interesting value is the cvs date (8 digits decimal).\n# Post-RC1 Ogg files have the second header packet (and thus the version)\n# in a different place, so we must use an indirect offset.\n>>>(84.b+85)\t\tstring\t\t\\x03vorbis\n>>>>(84.b+96)\t\tstring/c\tXiphophorus\\ libVorbis\\ I\t\\b, created by: Xiphophorus libVorbis I\n>>>>>(84.b+120)\t\tstring\t\t>00000000\t\n# Map to beta version numbers:\n>>>>>>(84.b+120)\tstring\t\t<20000508\t(<beta1, prepublic)\n>>>>>>(84.b+120)\tstring\t\t20000508\t(1.0 beta 1 or beta 2)\n>>>>>>(84.b+120)\tstring\t\t>20000508\n>>>>>>>(84.b+120)\tstring\t\t<20001031\t(beta2-3)\n>>>>>>(84.b+120)\tstring\t\t20001031\t(1.0 beta 3)\n>>>>>>(84.b+120)\tstring\t\t>20001031\n>>>>>>>(84.b+120)\tstring\t\t<20010225\t(beta3-4)\n>>>>>>(84.b+120)\tstring\t\t20010225\t(1.0 beta 4)\n>>>>>>(84.b+120)\tstring\t\t>20010225\n>>>>>>>(84.b+120)\tstring\t\t<20010615\t(beta4-RC1)\n>>>>>>(84.b+120)\tstring\t\t20010615\t(1.0 RC1)\n>>>>>>(84.b+120)\tstring\t\t20010813\t(1.0 RC2)\n>>>>>>(84.b+120)\tstring\t\t20010816\t(RC2 - Garf tuned v1)\n>>>>>>(84.b+120)\tstring\t\t20011014\t(RC2 - Garf tuned v2)\n>>>>>>(84.b+120)\tstring\t\t20011217\t(1.0 RC3)\n>>>>>>(84.b+120)\tstring\t\t20011231\t(1.0 RC3)\n# Some pre-1.0 CVS snapshots still had \"Xiphphorus\"...\n>>>>>>(84.b+120)\tstring\t\t>20011231\t(pre-1.0 CVS)\n# For the 1.0 release, Xiphophorus is replaced by Xiph.Org\n>>>>(84.b+96)\t\tstring/c\tXiph.Org\\ libVorbis\\ I\t\\b, created by: Xiph.Org libVorbis I\n>>>>>(84.b+117)\t\tstring\t\t>00000000\t\n>>>>>>(84.b+117)\tstring\t\t<20020717\t(pre-1.0 CVS)\n>>>>>>(84.b+117)\tstring\t\t20020717\t(1.0)\n>>>>>>(84.b+117)\tstring\t\t20030909\t(1.0.1)\n>>>>>>(84.b+117)\tstring\t\t20040629\t(1.1.0 RC1)\n\n#------------------------------------------------------------------------------\n# $File$\n# VXL: file(1) magic for VXL binary IO data files\n#\n# from Ian Scott <scottim@sf.net>\n#\n# VXL is a collection of C++ libraries for Computer Vision.\n# See the vsl chapter in the VXL Book for more info\n# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html\n# http:/vxl.sf.net\n\n2\tlelong\t0x472b2c4e\tVXL data file,\n>0\tleshort\t>0\t\tschema version no %d\n\n#------------------------------------------------------------------------------\n# $File: warc,v 1.2 2009/09/19 16:28:13 christos Exp $\n# warc:  file(1) magic for WARC files\n\n0\tstring\tWARC/\tWARC Archive\n>5\tstring\tx\tversion %.4s\n!:mime application/warc\n\n#------------------------------------------------------------------------------\n# Arc File Format from Internet Archive\n# see http://www.archive.org/web/researcher/ArcFileFormat.php\n0      string          filedesc://     Internet Archive File\n!:mime application/x-ia-arc\n>11    search/256      \\x0A    \\b\n>>&0   ubyte   >0      \\b version %c\n\n#------------------------------------------------------------------------------\n# weak:  file(1) magic for very weak magic entries, disabled by default\n#\n# These entries are so weak that they might interfere identification of\n# other formats. Example include:\n# - Only identify for 1 or 2 bytes\n# - Match against very wide range of values\n# - Match against generic word in some spoken languages (e.g. English)\n\n# Summary: Computer Graphics Metafile\n# Extension: .cgm\n#0\tbeshort&0xffe0\t0x0020\t\tbinary Computer Graphics Metafile\n#0\tbeshort\t\t0x3020\t\tcharacter Computer Graphics Metafile\n\n#0\tstring\t\t=!!\t\tBennet Yee's \"face\" format\n\n#------------------------------------------------------------------------------\n# $File: windows,v 1.9 2014/09/23 23:42:44 christos Exp $\n# windows:  file(1) magic for Microsoft Windows\n#\n# This file is mainly reserved for files where programs\n# using them are run almost always on MS Windows 3.x or\n# above, or files only used exclusively in Windows OS,\n# where there is no better category to allocate for.\n# For example, even though WinZIP almost run on Windows\n# only, it is better to treat them as \"archive\" instead.\n# For format usable in DOS, such as generic executable\n# format, please specify under \"msdos\" file.\n#\n\n\n# Summary: Outlook Express DBX file\n# Extension: .dbx\n# Created by: Christophe Monniez\n0\tstring\t\\xCF\\xAD\\x12\\xFE\tMS Outlook Express DBX file\n>4\tbyte\t=0xC5\t\t\t\\b, message database\n>4\tbyte\t=0xC6\t\t\t\\b, folder database\n>4\tbyte\t=0xC7\t\t\t\\b, account information\n>4\tbyte\t=0x30\t\t\t\\b, offline database\n\n\n# Summary: Windows crash dump\n# Extension: .dmp\n# Created by: Andreas Schuster (http://computer.forensikblog.de/)\n# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html\n# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)\n0\tstring\t\tPAGE\t\t\n>4\tstring\t\tDUMP\t\tMS Windows 32bit crash dump\n>>0x05c\tbyte            0\t\t\\b, no PAE\n>>0x05c\tbyte            1\t\t\\b, PAE\n>>0xf88\tlelong\t\t1\t\t\\b, full dump\n>>0xf88\tlelong\t\t2\t\t\\b, kernel dump\n>>0xf88\tlelong\t\t3\t\t\\b, small dump\n>>0x068\tlelong\t\tx\t\t\\b, %d pages\n>4\tstring\t\tDU64\t\tMS Windows 64bit crash dump\n>>0xf98\tlelong\t\t1\t\t\\b, full dump\n>>0xf98\tlelong\t\t2\t\t\\b, kernel dump\n>>0xf98\tlelong\t\t3\t\t\\b, small dump\n>>0x090\tlequad\t\tx\t\t\\b, %lld pages\n\n\n# Summary: Vista Event Log\n# Extension: .evtx\n# Created by: Andreas Schuster (http://computer.forensikblog.de/)\n# Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html\n0\tstring\t\tElfFile\\0\tMS Windows Vista Event Log\n>0x2a\tleshort\t\tx\t\t\\b, %d chunks\n>>0x10\tlelong\t\tx\t\t\\b (no. %d in use)\n>0x18\tlelong\t\t>1\t\t\\b, next record no. %d\n>0x18\tlelong\t\t=1\t\t\\b, empty\n>0x78\tlelong\t\t&1\t\t\\b, DIRTY\n>0x78\tlelong\t\t&2\t\t\\b, FULL\n\n\n# Summary: Windows 3.1 group files\n# Extension: .grp\n# Created by: unknown\n0\tstring\t\t\\120\\115\\103\\103\tMS Windows 3.1 group files\n\n\n# Summary: Old format help files\n# Extension: .hlp\n# Created by: Dirk Jagdmann <doj@cubic.org>\n0\tlelong\t\t0x00035f3f\t\tMS Windows 3.x help file\n\n\n# Summary: Hyper terminal\n# Extension: .ht\n# Created by: unknown\n0\tstring\t\tHyperTerminal\\ \n>15\tstring\t\t1.0\\ --\\ HyperTerminal\\ data\\ file\tMS Windows HyperTerminal profile\n\n# http://ithreats.files.wordpress.com/2009/05/\\\n# lnk_the_windows_shortcut_file_format.pdf\n# Summary: Windows shortcut\n# Extension: .lnk\n# Created by: unknown\n# 'L' + GUUID\n0\tstring\t\t\\114\\0\\0\\0\\001\\024\\002\\0\\0\\0\\0\\0\\300\\0\\0\\0\\0\\0\\0\\106\tMS Windows shortcut\n>20\tlelong&1\t1\t\\b, Item id list present\n>20\tlelong&2\t2\t\\b, Points to a file or directory\n>20\tlelong&4\t4\t\\b, Has Description string\n>20\tlelong&8\t8\t\\b, Has Relative path\n>20\tlelong&16\t16\t\\b, Has Working directory\n>20\tlelong&32\t32\t\\b, Has command line arguments\n>20\tlelong&64\t64\t\\b, Icon\n>>56\tlelong\t\t\t\\b number=%d\n>24\tlelong&1\t1\t\\b, Read-Only\n>24\tlelong&2\t2\t\\b, Hidden\n>24\tlelong&4\t4\t\\b, System\n>24\tlelong&8\t8\t\\b, Volume Label\n>24\tlelong&16\t16\t\\b, Directory\n>24\tlelong&32\t32\t\\b, Archive\n>24\tlelong&64\t64\t\\b, Encrypted\n>24\tlelong&128\t128\t\\b, Normal\n>24\tlelong&256\t256\t\\b, Temporary\n>24\tlelong&512\t512\t\\b, Sparse\n>24\tlelong&1024\t1024\t\\b, Reparse point\n>24\tlelong&2048\t2048\t\\b, Compressed\n>24\tlelong&4096\t4096\t\\b, Offline\n>28\tleqwdate\tx\t\\b, ctime=%s\n>36\tleqwdate\tx\t\\b, mtime=%s\n>44\tleqwdate\tx\t\\b, atime=%s\n>52\tlelong\t\tx\t\\b, length=%u, window=\n>60\tlelong&1\t1\t\\bhide\n>60\tlelong&2\t2\t\\bnormal\n>60\tlelong&4\t4\t\\bshowminimized\n>60\tlelong&8\t8\t\\bshowmaximized\n>60\tlelong&16\t16\t\\bshownoactivate\n>60\tlelong&32\t32\t\\bminimize\n>60\tlelong&64\t64\t\\bshowminnoactive\n>60\tlelong&128\t128\t\\bshowna\n>60\tlelong&256\t256\t\\brestore\n>60\tlelong&512\t512\t\\bshowdefault\n#>20\tlelong&1\t0\n#>>20\tlelong&2\t2\n#>>>(72.l-64)\tpstring/h\tx\t\\b [%s]\n#>20\tlelong&1\t1\n#>>20\tlelong&2\t2\n#>>>(72.s)\tleshort\tx\n#>>>&75\tpstring/h\tx\t\\b [%s]\n\n# Summary: Outlook Personal Folders\n# Created by: unknown\n0\tlelong\t\t0x4E444221\tMicrosoft Outlook email folder\n>10\tleshort\t\t0x0e\t\t(<=2002)\n>10\tleshort\t\t0x17\t\t(>=2003)\n\n\n# Summary: Windows help cache\n# Created by: unknown\n0\tstring\t\t\\164\\146\\115\\122\\012\\000\\000\\000\\001\\000\\000\\000\tMS Windows help cache\n\n\n# Summary: IE cache file\n# Created by: Christophe Monniez\n0\tstring\tClient\\ UrlCache\\ MMF \tInternet Explorer cache file\n>20\tstring\t>\\0\t\t\tversion %s\n\n\n# Summary: Registry files\n# Created by: unknown\n# Modified by (1): Joerg Jenderek\n0\tstring\t\tregf\t\tMS Windows registry file, NT/2000 or above\n0\tstring\t\tCREG\t\tMS Windows 95/98/ME registry file\n0\tstring\t\tSHCC3\t\tMS Windows 3.1 registry file\n\n\n# Summary: Windows Registry text\n# Extension: .reg\n# Submitted by: Abel Cheung <abelcheung@gmail.com>\n0\tstring\t\tREGEDIT4\\r\\n\\r\\n\tWindows Registry text (Win95 or above)\n0\tstring\t\tWindows\\ Registry\\ Editor\\ \n>&0\tstring\t\tVersion\\ 5.00\\r\\n\\r\\n\tWindows Registry text (Win2K or above)\n\n# Windows *.INF *.INI files updated by Joerg Jenderek at Apr 2013\n# empty ,comment , section\n# PR/383: remove unicode BOM because it is not portable across regex impls\n0\tregex/s\t\t\\\\`(\\\\r\\\\n|;|[[])\n# left bracket in section line\n>&0\tsearch/8192\t[\t\t\t\t\t\t\n# http://en.wikipedia.org/wiki/Autorun.inf\n# http://msdn.microsoft.com/en-us/library/windows/desktop/cc144200.aspx\n>>&0\tregex/c\t\t\\^(autorun)]\\r\\n\t\t\t\t\n>>>&0\tubyte\t\t=0x5b\t\t\t\t\t\tINItialization configuration\n!:mime application/x-wine-extension-ini\n# From: Pal Tamas <folti@balabit.hu>\n# Autorun File\n>>>&0\tubyte\t\t!0x5b\t\t\t\t\t\tMicrosoft Windows Autorun file\n!:mime application/x-setupscript\n# http://msdn.microsoft.com/en-us/library/windows/hardware/ff549520(v=vs.85).aspx\n# version strings ASCII coded case-independent for Windows setup information script file\n>>&0\tregex/c\t\t\\^(version|strings)]\t\t\t\tWindows setup INFormation\n!:mime\tapplication/x-setupscript\n#!:mime application/inf\n#!:mime application/x-wine-extension-inf\n>>&0\tregex/c\t\t\\^(WinsockCRCList|OEMCPL)]\t\t\tWindows setup INFormation\n!:mime\ttext/inf\n# http://www.winfaq.de/faq_html/Content/tip2500/onlinefaq.php?h=tip2653.htm\n# http://msdn.microsoft.com/en-us/library/windows/desktop/cc144102.aspx\n# .ShellClassInfo DeleteOnCopy LocalizedFileNames ASCII coded case-independent\n>>&0\tregex/c\t\\^(\\.ShellClassInfo|DeleteOnCopy|LocalizedFileNames)]\tWindows desktop.ini\n!:mime application/x-wine-extension-ini\n#!:mime text/plain\n# http://support.microsoft.com/kb/84709/\n>>&0\tregex/c\t\t\\^(don't\\ load)]\t\t\t\tWindows CONTROL.INI\n!:mime application/x-wine-extension-ini\n>>&0\tregex/c\t\t\\^(ndishlp\\\\$|protman\\\\$|NETBEUI\\\\$)]\t\tWindows PROTOCOL.INI\n!:mime application/x-wine-extension-ini\n# http://technet.microsoft.com/en-us/library/cc722567.aspx\n# http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0137.htm\n>>&0\tregex/c\t\t\\^(windows|Compatibility|embedding)]\t\tWindows WIN.INI\n!:mime application/x-wine-extension-ini\n# http://en.wikipedia.org/wiki/SYSTEM.INI\n>>&0\tregex/c\t\t\\^(boot|386enh|drivers)]\t\t\tWindows SYSTEM.INI\n!:mime application/x-wine-extension-ini\n# http://www.mdgx.com/newtip6.htm\n>>&0\tregex/c\t\t\\^(SafeList)]\t\t\t\t\tWindows IOS.INI\n!:mime application/x-wine-extension-ini\n# http://en.wikipedia.org/wiki/NTLDR\tWindows Boot Loader information\n>>&0\tregex/c\t\t\\^(boot\\x20loader)]\t\t\t\tWindows boot.ini\n!:mime application/x-wine-extension-ini\n>>>&0\tubyte\t\tx\t\t\t\t\t\t\n# http://en.wikipedia.org/wiki/CONFIG.SYS\n>>&0\tregex/c\t\t\\^(menu)]\\r\\n\t\t\t\t\tMS-DOS CONFIG.SYS\n# http://support.microsoft.com/kb/118579/\n>>&0\tregex/c\t\t\\^(Paths)]\\r\\n\t\t\t\t\tMS-DOS MSDOS.SYS\n# VERS string unicoded case-independent\n>>&0\tubequad&0xFFdfFFdfFFdfFFdf\t0x0056004500520053\t\t\n# ION] string unicoded case-independent\n>>>&0\tubequad&0xFFdfFFdfFFdfFFff\t0x0049004f004e005d\t\tWindows setup INFormation \n!:mime application/x-setupscript\n# STRI string unicoded case-independent\n>>&0\tubequad&0xFFdfFFdfFFdfFFdf\t0x0053005400520049\t\t\n# NGS] string unicoded case-independent\n>>>&0\tubequad&0xFFdfFFdfFFdfFFff\t0x004e00470053005D\t\tWindows setup INFormation \n!:mime application/x-setupscript\n# unknown keyword after opening bracket\n>>&0\tdefault\t\t\t\tx\t\t\t\t\n>>>&0\tsearch/8192\t\t\t[\t\t\t\t\n# version Strings FileIdentification\n>>>>&0\tstring/c\t\t\tversion\t\t\t\tWindows setup INFormation \n!:mime application/x-setupscript\n# VERS string unicoded case-independent\n>>>>&0\tubequad&0xFFdfFFdfFFdfFFdf\t0x0056004500520053\t\t\n# ION] string unicoded case-independent\n>>>>>&0\tubequad&0xFFdfFFdfFFdfFFff\t0x0049004f004e005d\t\tWindows setup INFormation \n!:mime application/x-setupscript\n# http://en.wikipedia.org/wiki/Initialization_file\tWindows Initialization File or other\n#>>>>&0\tdefault\t\t\t\tx\t\t\t\tGeneric INItialization configuration\n#!:mime application/x-wine-extension-ini\n\n# Windows Precompiled INF files *.PNF added by Joerg Jenderek at Mar 2013 of _PNF_HEADER inf.h\n# http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm\n# GRR: line below too general as it catches also PDP-11 UNIX/RT ldp\n0\t\tleshort&0xFeFe\t0x0000\t\t\n# test for unused null bits in PNF_FLAGs\n>4\tulelong&0xFCffFe00\t0x00000000\t\n# only found 58h for Offset of WinDirPath immediately after _PNF_HEADER structure\n>>68\t\tulelong\t\t>0x57\t\t\n# test for zero high byte of InfValueBlockSize, followed by WinDirPath like\n# C:\\WINDOWS (ASCII 0x433a5c.. , unicode 0x43003a005c..) or X:\\MININT\n>>>(68.l-1)\tubelong&0xffE0C519\t=0x00400018\tWindows Precompiled iNF\n!:mime\tapplication/x-pnf\n# currently only found Major Version=1 and Minor Version=1\n#>>>>0\t\tuleshort\t=0x0101\t\t\n#>>>>>1\t\tubyte\t\tx\t\t\\b, version %u\n#>>>>>0\t\tubyte\t\tx\t\t\\b.%u\n>>>>0\t\tuleshort\t!0x0101\t\t\n>>>>>1\t\tubyte\t\tx\t\t\\b, version %u\n>>>>>0\t\tubyte\t\tx\t\t\\b.%u\n# 1 ,2 (windows 98 SE)\n#>>>>2\t\tuleshort\t=2\t\t\\b, InfStyle %u\n>>>>2\t\tuleshort\t!2\t\t\\b, InfStyle %u\n#\tPNF_FLAG_IS_UNICODE\t\t0x00000001\n#\tPNF_FLAG_HAS_STRINGS\t\t0x00000002\n#\tPNF_FLAG_SRCPATH_IS_URL\t\t0x00000004\n#\tPNF_FLAG_HAS_VOLATILE_DIRIDS\t0x00000008\n#\tPNF_FLAG_INF_VERIFIED\t\t0x00000010\n#\tPNF_FLAG_INF_DIGITALLY_SIGNED\t0x00000020\n#\t??\t\t\t\t0x00000100\n#\t??\t\t\t\t0x01000000\n#\t??\t\t\t\t0x02000000\n>>>>4\tulelong&0x00000001\t0x00000001\t\\b, unicoded\n>>>>4\tulelong&0x00000020\t0x00000020\t\\b, digitally signed\n#>>>>8\t\tulelong\t\tx\t\t\\b, InfSubstValueListOffset 0x%x\n# many 0, 1 lmouusb.PNF, 2 linkfx10.PNF , f webfdr16.PNF\n#>>>>12\t\tuleshort\tx\t\t\\b, InfSubstValueCount 0x%x\n# only < 9 found\n#>>>>14\t\tuleshort\tx\t\t\\b, InfVersionDatumCount 0x%x\n# only found values lower 0x0000ffff\n#>>>>16\t\tulelong\t\tx\t\t\\b, InfVersionDataSize 0x%x\n# only found positive values lower 0x00ffFFff for InfVersionDataOffset\n>>>>20\t\tulelong\t\tx\t\t\\b, at 0x%x\n>>>>4\tulelong&0x00000001\t=0x00000001\t\n# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature    \n>>>>>(20.l)\tlestring16\tx\t\t\"%s\"\n>>>>4\tulelong&0x00000001\t!0x00000001\t\n>>>>>(20.l)\tstring\t\tx\t\t\"%s\"\n# FILETIME is number of 100-nanosecond intervals since 1 January 1601\n#>>>>24\t\tulequad\t\tx\t\t\\b, InfVersionLastWriteTime %16.16llx\n# only found values lower 0x00ffFFff\n#>>>>32\t\tulelong\t\tx\t\t\\b, StringTableBlockOffset 0x%x\n#>>>>36\t\tulelong\t\tx\t\t\\b, StringTableBlockSize 0x%x\n#>>>>40\t\tulelong\t\tx\t\t\\b, InfSectionCount 0x%x\n#>>>>44\t\tulelong\t\tx\t\t\\b, InfSectionBlockOffset 0x%x\n#>>>>48\t\tulelong\t\tx\t\t\\b, InfSectionBlockSize 0x%x\n#>>>>52\t\tulelong\t\tx\t\t\\b, InfLineBlockOffset 0x%x\n#>>>>56\t\tulelong\t\tx\t\t\\b, InfLineBlockSize 0x%x\n#>>>>60\t\tulelong\t\tx\t\t\\b, InfValueBlockOffset 0x%x\n#>>>>64\t\tulelong\t\tx\t\t\\b, InfValueBlockSize 0x%x\n# WinDirPathOffset\n#>>>>68\t\tulelong\t\tx\t\t\\b, at 0x%x\n>>>>68\t\tulelong\t\t>0x57\t\t\n>>>>>4\tulelong&0x00000001\t=0x00000001\t\n>>>>>>(68.l)\tubequad\t\t=0x43003a005c005700\t\t\t\n# normally unicoded C:\\Windows\n#>>>>>>>(68.l)\tlestring16\tx\t\t\\b, WinDirPath \"%s\"\n>>>>>>(68.l)\tubequad\t\t!0x43003a005c005700\t\t\t\n>>>>>>>(68.l)\tlestring16\tx\t\t\\b, WinDirPath \"%s\"\n>>>>>4\tulelong&0x00000001\t!0x00000001\t\n# normally ASCII C:\\WINDOWS\n#>>>>>>(68.l)\tstring\t\t=C:\\\\WINDOWS\t\\b, WinDirPath \"%s\"\n>>>>>>(68.l)\tstring\t\t!C:\\\\WINDOWS\t\\b, WinDirPath \"%s\"\n# found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF \n#>>>>72\t\tulelong\t\t>0\t\t\\b, at 0x%x\n>>>>72\t\tulelong\t\t>0\t\t\\b,\n>>>>>4\tulelong&0x00000001\t=0x00000001\t\n>>>>>>(72.l)\tlestring16\tx\t\tOsLoaderPath \"%s\"\n>>>>>4\tulelong&0x00000001\t!0x00000001\t\n# seldom C:\\ instead empty\n>>>>>>(72.l)\tstring\t\tx\t\tOsLoaderPath \"%s\"\n# 1fdh\n#>>>>76\t\tuleshort\tx\t\t\\b, StringTableHashBucketCount 0x%x\n>>>>78\t\tuleshort\t!0x407\t\t\\b, LanguageId %x\n# only 407h found\n#>>>>78\t\tuleshort\t=0x407\t\t\\b, LanguageId %x\n# InfSourcePathOffset often 0\n#>>>>80\t\tulelong\t\t>0\t\t\\b, at 0x%x\n>>>>80\t\tulelong\t\t>0\t\t\\b,\n>>>>>4\tulelong&0x00000001\t=0x00000001\t\n>>>>>>(80.l)\tlestring16\tx\t\tSourcePath \"%s\"\n>>>>>4\tulelong&0x00000001\t!0x00000001\t\n>>>>>>(80.l)\tstring\t\t>\\0\t\tSourcePath \"%s\"\n# OriginalInfNameOffset often 0\n#>>>>84\t\tulelong\t\t>0\t\t\\b, at 0x%x\n>>>>84\t\tulelong\t\t>0\t\t\\b,\n>>>>>4\tulelong&0x00000001\t=0x00000001\t\n>>>>>>(84.l)\tlestring16\tx\t\tInfName \"%s\"\n>>>>>4\tulelong&0x00000001\t!0x00000001\t\n>>>>>>(84.l)\tstring\t\t>\\0\t\tInfName \"%s\"\n\n\n#------------------------------------------------------------------------------\n# $File$\n# wireless-regdb:        file(1) magic for CRDA wireless-regdb file format\n#\n0\tstring\tRGDB\tCRDA wireless regulatory database file\n>4\tbelong\t19\t(Version 1)\n\n#------------------------------------------------------------------------------\n# $File: wordprocessors,v 1.17 2013/02/06 14:18:52 christos Exp $\n# wordprocessors:  file(1) magic fo word processors.\n#\n####### PWP file format used on Smith Corona Personal Word Processors:\n2\tstring\t\\040\\040\\040\\040\\040\\040\\040\\040\\040\\040\\040ML4D\\040'92\tSmith Corona PWP\n>24\tbyte\t2\t\\b, single spaced\n>24\tbyte\t3\t\\b, 1.5 spaced\n>24\tbyte\t4\t\\b, double spaced\n>25\tbyte\t0x42\t\\b, letter\n>25\tbyte\t0x54\t\\b, legal\n>26\tbyte\t0x46\t\\b, A4\n\n#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE\n0\tstring\t\\377WPC\\020\\000\\000\\000\\022\\012\\001\\001\\000\\000\\000\\000\t(WP) loadable file\n>15\tbyte\t0\tOptimized for Intel\n>15\tbyte\t1\tOptimized for Non-Intel\n1\tstring\tWPC\t(Corel/WP)\n>8\tshort\t257\tWordPerfect macro\n>8\tshort\t258\tWordPerfect help file\n>8\tshort\t259\tWordPerfect keyboard file\n>8\tshort\t266\tWordPerfect document\n>8\tshort\t267\tWordPerfect dictionary\n>8\tshort\t268\tWordPerfect thesaurus\n>8\tshort\t269\tWordPerfect block\n>8\tshort\t270\tWordPerfect rectangular block\n>8\tshort\t271\tWordPerfect column block\n>8\tshort\t272\tWordPerfect printer data\n>8\tshort\t275\tWordPerfect printer data\n>8\tshort\t276\tWordPerfect driver resource data\n>8\tshort\t279\tWordPerfect hyphenation code\n>8\tshort\t280\tWordPerfect hyphenation data\n>8\tshort\t281\tWordPerfect macro resource data\n>8\tshort\t283\tWordPerfect hyphenation lex\n>8\tshort\t285\tWordPerfect wordlist\n>8\tshort\t286\tWordPerfect equation resource data\n>8\tshort\t289\tWordPerfect spell rules\n>8\tshort\t290\tWordPerfect dictionary rules\n>8\tshort\t295\tWordPerfect spell rules (Microlytics)\n>8\tshort\t299\tWordPerfect settings file\n>8\tshort\t301\tWordPerfect 4.2 document\n>8\tshort\t325\tWordPerfect dialog file\n>8\tshort\t332\tWordPerfect button bar\n>8\tshort\t513\tShell macro\n>8\tshort\t522\tShell definition\n>8\tshort\t769\tNotebook macro\n>8\tshort\t770\tNotebook help file\n>8\tshort\t771\tNotebook keyboard file\n>8\tshort\t778\tNotebook definition\n>8\tshort\t1026\tCalculator help file\n>8\tshort \t1538\tCalendar help file\n>8\tshort \t1546\tCalendar data file\n>8\tshort\t1793\tEditor macro\n>8\tshort\t1794\tEditor help file\n>8\tshort\t1795\tEditor keyboard file\n>8\tshort\t1817\tEditor macro resource file\n>8\tshort \t2049\tMacro editor macro\n>8\tshort \t2050\tMacro editor help file\n>8\tshort\t2051\tMacro editor keyboard file\n>8\tshort\t2305\tPlanPerfect macro\n>8\tshort\t2306\tPlanPerfect help file\n>8\tshort\t2307\tPlanPerfect keyboard file\n>8\tshort\t2314\tPlanPerfect worksheet\n>8\tshort\t2319\tPlanPerfect printer definition\n>8\tshort\t2322\tPlanPerfect graphic definition\n>8\tshort\t2323\tPlanPerfect data\n>8\tshort\t2324\tPlanPerfect temporary printer\n>8\tshort\t2329\tPlanPerfect macro resource data\n>8\tbyte\t11\tMail\n>8\tshort\t2818\thelp file\n>8\tshort\t2821\tdistribution list\n>8\tshort\t2826\tout box\n>8\tshort\t2827\tin box\n>8\tshort\t2836\tusers archived mailbox\n>8\tshort\t2837\tarchived message database\n>8\tshort\t2838\tarchived attachments\n>8\tshort\t3083\tPrinter temporary file\n>8\tshort\t3330\tScheduler help file\n>8\tshort\t3338\tScheduler in file\n>8\tshort\t3339\tScheduler out file\n>8\tshort\t3594\tGroupWise settings file\n>8\tshort\t3601\tGroupWise directory services\n>8\tshort\t3627\tGroupWise settings file\n>8\tshort\t4362\tTerminal resource data\n>8\tshort\t4363\tTerminal resource data\n>8\tshort\t4395\tTerminal resource data\n>8\tshort\t4619\tGUI loadable text\n>8\tshort\t4620\tgraphics resource data\n>8\tshort\t4621\tprinter settings file\n>8\tshort\t4622\tport definition file\n>8\tshort\t4623\tprint queue parameters\n>8\tshort\t4624\tcompressed file\n>8\tshort\t5130\tNetwork service msg file\n>8\tshort\t5131\tNetwork service msg file\n>8\tshort\t5132\tAsync gateway login msg\n>8\tshort\t5134\tGroupWise message file\n>8\tshort\t7956\tGroupWise admin domain database\n>8\tshort\t7957\tGroupWise admin host database\n>8\tshort\t7959\tGroupWise admin remote host database\n>8\tshort\t7960\tGroupWise admin ADS deferment data file\n>8\tshort\t8458\tIntelliTAG (SGML) compiled DTD\n>8\tlong\t18219264\tWordPerfect graphic image (1.0)\n>8\tlong\t18219520\tWordPerfect graphic image (2.0)\n#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE\n\n# Hangul (Korean) Word Processor File\n0\tstring\tHWP\\ Document\\ File\tHangul (Korean) Word Processor File 3.0\n# From: Won-Kyu Park <wkpark@kldp.org>\n512\tstring\t\tR\\0o\\0o\\0t\\0\tHangul (Korean) Word Processor File 2000\n!:mime\tapplication/x-hwp\n\n# CosmicBook, from Benoit Rouits\n0       string  CSBK    Ted Neslson's CosmicBook hypertext file\n\n2       string  EYWR    AmigaWriter file\n\n# chi:  file(1) magic for ChiWriter files\n0       string          \\\\1cw\\          ChiWriter file\n>5      string          >\\0             version %s\n0       string          \\\\1cw           ChiWriter file\n\n# Quark Express from http://www.garykessler.net/library/file_sigs.html\n2\tstring\tIIXPR3\t\t\tIntel Quark Express Document (English)\n2\tstring\tIIXPRa\t\t\tIntel Quark Express Document (Korean)\n2\tstring\tMMXPR3\t\t\tMotorola Quark Express Document (English)\n!:mime\tapplication/x-quark-xpress-3\n2\tstring\tMMXPRa\t\t\tMotorola Quark Express Document (Korean)\n\n# adobe indesign (document, whatever...) from querkan\n0\tbelong\t0x0606edf5\t\tAdobe InDesign\n>16\tstring\tDOCUMENT\t\tDocument\n\n#------------------------------------------------------------------------------\n# ichitaro456: file(1) magic for Just System Word Processor Ichitaro\n#\n# Contributor kenzo-:\n# Reversed-engineered JS Ichitaro magic numbers\n#\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x14\tJust System Word Processor Ichitaro v4\n!:mime\tapplication/x-ichitaro4\n>144\tstring\tJDASH\t\tapplication/x-ichitaro4\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x15\tJust System Word Processor Ichitaro v5\n!:mime\tapplication/x-ichitaro5\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x16\tJust System Word Processor Ichitaro v6\n!:mime\tapplication/x-ichitaro6\n\n# Type: Freemind mindmap documents\n# From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk>\n0\tstring/w\t\\<map\\ version\tFreemind document\n!:mime\tapplication/x-freemind\n\n# Type: Freeplane mindmap documents\n# From: Felix Natter <fnatter@gmx.net>\n0       string/w        \\<map\\ version=\"freeplane  Freeplane document\n!:mime  application/x-freeplane\n\n# Type:        Scribus\n# From:        Werner Fink <werner@suse.de>\n0\tstring\t\\<SCRIBUSUTF8\\ Version\t\tScribus Document\n0\tstring\t\\<SCRIBUSUTF8NEW\\ Version\tScribus Document\n!:mime\tapplication/x-scribus\n\n# help files .hlp compiled from html and used by gfxboot added by Joerg Jenderek\n# markups page=0x04,label=0x12, followed by strings like \"opt\" or \"main\" and title=0x14\n0\tulelong&0x8080FFFF\t0x00001204\tgfxboot compiled html help file\n\n#------------------------------------------------------------------------------\n# $File: wsdl,v 1.2 2013/02/05 15:20:47 christos Exp $\n# wsdl: PHP WSDL Cache, http://www.php.net/manual/en/book.soap.php\n# Cache format extracted from source:\n# http://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_sdl.c?revision=HEAD&view=markup\n# Requires file >= 5.05, see http://mx.gw.com/pipermail/file/2010/000683.html\n# By Elan Ruusamae <glen@delfi.ee>, Patryk Zawadzki <patrys@pld-linux.org>, 2010-2011\n0\t\tstring\t\twsdl\t\tPHP WSDL cache,\n>4\t\tbyte\t\tx\t\tversion 0x%02x\n>6\t\tledate\t\tx\t\t\\b, created %s\n\n# uri\n>10\t\tlelong\t\t<0x7fffffff\n>>10\t\tpstring/l\tx\t\t\\b, uri: \"%s\"\n\n# source\n>>>&0\t\tlelong\t\t<0x7fffffff\n>>>>&-4\t\tpstring/l\tx\t\t\\b, source: \"%s\"\n\n# target_ns\n>>>>>&0\t\tlelong\t\t<0x7fffffff\n>>>>>>&-4\tpstring/l\tx\t\t\\b, target_ns: \"%s\"\n\n#------------------------------------------------------------------------------\n# $File: xdelta,v 1.4 2009/09/19 16:28:13 christos Exp $\n# file(1) magic(5) data for xdelta  Josh MacDonald <jmacd@CS.Berkeley.EDU>\n#\n0\tstring\t%XDELTA%\tXDelta binary patch file 0.14\n0\tstring\t%XDZ000%\tXDelta binary patch file 0.18\n0\tstring\t%XDZ001%\tXDelta binary patch file 0.20\n0\tstring\t%XDZ002%\tXDelta binary patch file 1.0\n0\tstring\t%XDZ003%\tXDelta binary patch file 1.0.4\n0\tstring\t%XDZ004%\tXDelta binary patch file 1.1\n\n0\tstring \\xD6\\xC3\\xC4\\x00\tVCDIFF binary diff\n\n#------------------------------------------------------------------------------\n# $File$\n# xenix:  file(1) magic for Microsoft Xenix\n#\n# \"Middle model\" stuff, and \"Xenix 8086 relocatable or 80286 small\n# model\" lifted from \"magic.xenix\", with comment \"derived empirically;\n# treat as folklore until proven\"\n#\n# \"small model\", \"large model\", \"huge model\" stuff lifted from XXX\n#\n# XXX - \"x.out\" collides with PDP-11 archives\n#\n0\tstring\t\tcore\t\tcore file (Xenix)\n0\tbyte\t\t0x80\t\t8086 relocatable (Microsoft)\n0\tleshort\t\t0xff65\t\tx.out\n>2\tstring\t\t__.SYMDEF\t randomized\n>0\tbyte\t\tx\t\tarchive\n0\tleshort\t\t0x206\t\tMicrosoft a.out\n>8\tleshort\t\t1\t\tMiddle model\n>0x1e\tleshort\t\t&0x10\t\toverlay\n>0x1e\tleshort\t\t&0x2\t\tseparate\n>0x1e\tleshort\t\t&0x4\t\tpure\n>0x1e\tleshort\t\t&0x800\t\tsegmented\n>0x1e\tleshort\t\t&0x400\t\tstandalone\n>0x1e\tleshort\t\t&0x8\t\tfixed-stack\n>0x1c\tbyte\t\t&0x80\t\tbyte-swapped\n>0x1c\tbyte\t\t&0x40\t\tword-swapped\n>0x10\tlelong\t\t>0\t\tnot-stripped\n>0x1e\tleshort\t\t^0xc000\t\tpre-SysV\n>0x1e\tleshort\t\t&0x4000\t\tV2.3\n>0x1e\tleshort\t\t&0x8000\t\tV3.0\n>0x1c\tbyte\t\t&0x4\t\t86\n>0x1c\tbyte\t\t&0xb\t\t186\n>0x1c\tbyte\t\t&0x9\t\t286\n>0x1c\tbyte\t\t&0xa\t\t386\n>0x1f\tbyte\t\t<0x040\t\tsmall model\n>0x1f\tbyte\t\t=0x048\t\tlarge model\t\n>0x1f\tbyte\t\t=0x049\t\thuge model \n>0x1e\tleshort\t\t&0x1\t\texecutable\n>0x1e\tleshort\t\t^0x1\t\tobject file\n>0x1e\tleshort\t\t&0x40\t\tLarge Text\n>0x1e\tleshort\t\t&0x20\t\tLarge Data\n>0x1e\tleshort\t\t&0x120\t\tHuge Objects Enabled\n>0x10\tlelong\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0x140\t\told Microsoft 8086 x.out\n>0x3\tbyte\t\t&0x4\t\tseparate\n>0x3\tbyte\t\t&0x2\t\tpure\n>0\tbyte\t\t&0x1\t\texecutable\n>0\tbyte\t\t^0x1\t\trelocatable\n>0x14\tlelong\t\t>0\t\tnot stripped\n\n0\tlelong\t\t0x206\t\tb.out\n>0x1e\tleshort\t\t&0x10\t\toverlay\n>0x1e\tleshort\t\t&0x2\t\tseparate\n>0x1e\tleshort\t\t&0x4\t\tpure\n>0x1e\tleshort\t\t&0x800\t\tsegmented\n>0x1e\tleshort\t\t&0x400\t\tstandalone\n>0x1e\tleshort\t\t&0x1\t\texecutable\n>0x1e\tleshort\t\t^0x1\t\tobject file\n>0x1e\tleshort\t\t&0x4000\t\tV2.3\n>0x1e\tleshort\t\t&0x8000\t\tV3.0\n>0x1c\tbyte\t\t&0x4\t\t86\n>0x1c\tbyte\t\t&0xb\t\t186\n>0x1c\tbyte\t\t&0x9\t\t286\n>0x1c\tbyte\t\t&0x29\t\t286\n>0x1c\tbyte\t\t&0xa\t\t386\n>0x1e\tleshort\t\t&0x4\t\tLarge Text\n>0x1e\tleshort\t\t&0x2\t\tLarge Data\n>0x1e\tleshort\t\t&0x102\t\tHuge Objects Enabled\n\n0\tleshort\t\t0x580\t\tXENIX 8086 relocatable or 80286 small model\n\n#------------------------------------------------------------------------------\n# $File: xilinx,v 1.6 2013/11/19 23:15:13 christos Exp $\n# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.\n# Xilinx-Magic@RevRagnarok.com\n# Got the info from FPGA-FAQ 0026\n#\n# Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth, \n# fixes at least reading of bitfiles from Spartan 2, 3, 6. \n# http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm\n#\n# First there is the sync header and its length\n0\tbeshort 0x0009\n>2 \tbelong\t=0x0ff00ff0\n>>&0\tbelong  =0x0ff00ff0\n>>>&0\tbyte    =0x00\n>>>&1   beshort =0x0001\n>>>&3\tstring\ta\tXilinx BIT data\n# Next is a Pascal-style string with the NCD name. We want to capture that.\n>>>>&0\t   pstring/H\tx\t- from %s\n# And then 'b'\n>>>>>&1    string b\n# Then the model / part number: \n>>>>>>&0   pstring/H    x       - for %s\n# Then 'c'\n>>>>>>>&1 string c\n# Then the build-date\n>>>>>>>>&0 pstring/H    x       - built %s\n# Then 'd'\n>>>>>>>>>&1   string d\n# Then the build-time\n>>>>>>>>>>&0  pstring/H x        \\b(%s)\n# Then 'e'\n>>>>>>>>>>>&1  string e\n# And length of data\n>>>>>>>>>>>>&0 belong x          - data length 0x%x\n\n# Raw bitstream files\n0      long    0xffffffff      \n>&0    belong  0xaa995566      Xilinx RAW bitstream (.BIN)\n\n#------------------------------------------------------------------------------\n# $File$\n# xo65 object files\n# From: \"Ullrich von Bassewitz\" <uz@cc65.org>\n#\n0\tstring\t\t\\x55\\x7A\\x6E\\x61\txo65 object,\n>4\tleshort\t\tx\t\t\tversion %d,\n>6\tleshort&0x0001 =0x0001\t\t\twith debug info\n>6\tleshort&0x0001 =0x0000\t\t\tno debug info\n\n# xo65 library files\n0\tstring\t\t\\x6E\\x61\\x55\\x7A\txo65 library,\n>4\tleshort\t\tx\t\t\tversion %d\n\n# o65 object files\n0\tstring\t\t\\x01\\x00\\x6F\\x36\\x35\to65\n>6\tleshort&0x1000\t=0x0000\t\t\texecutable,\n>6\tleshort&0x1000\t=0x1000\t\t\tobject,\n>5\tbyte\t\tx\t\t\tversion %d,\n>6\tleshort&0x8000\t=0x8000\t\t\t65816,\n>6\tleshort&0x8000\t=0x0000\t\t\t6502,\n>6\tleshort&0x2000\t=0x2000\t\t\t32 bit,\n>6\tleshort&0x2000\t=0x0000\t\t\t16 bit,\n>6\tleshort&0x4000\t=0x4000\t\t\tpage reloc,\n>6\tleshort&0x4000\t=0x0000\t\t\tbyte reloc,\n>6\tleshort&0x0003\t=0x0000\t\t\talignment 1\n>6\tleshort&0x0003\t=0x0001\t\t\talignment 2\n>6\tleshort&0x0003\t=0x0002\t\t\talignment 4\n>6\tleshort&0x0003\t=0x0003\t\t\talignment 256\n\n#------------------------------------------------------------------------------\n# $File: xwindows,v 1.8 2013/02/08 17:25:57 christos Exp $\n# xwindows:  file(1) magic for various X/Window system file formats.\n\n# Compiled X Keymap \n# XKM (compiled X keymap) files (including version and byte ordering)\n1\tstring\tmkx\t\t\t\tCompiled XKB Keymap: lsb,\n>0\tbyte\t>0\t\t\t\tversion %d\n>0\tbyte\t=0\t\t\t\tobsolete\n0\tstring\txkm\t\t\t\tCompiled XKB Keymap: msb,\n>3\tbyte\t>0\t\t\t\tversion %d\n>3\tbyte\t=0\t\t\t\tobsolete\n\n# xfsdump archive\n0\tstring\txFSdump0\t\t\txfsdump archive\n>8\tbelong\tx\t(version %d)\n\n# Jaleo XFS files\n0\tlong\t395726\t\t\t\tJaleo XFS file\n>4\tlong\tx\t\t\t\t- version %d\n>8\tlong\tx\t\t\t\t- [%d -\n>20\tlong\tx\t\t\t\t\\b%dx\n>24\tlong\tx\t\t\t\t\\b%dx\n>28\tlong\t1008\t\t\t\t\\bYUV422]\n>28\tlong\t1000\t\t\t\t\\bRGB24]\n\n# Xcursor data\n# X11 mouse cursor format defined in libXcursor, see\n# http://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html\n# http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h\n0\tstring\t\tXcur\t\tXcursor data\n!:mime\timage/x-xcursor\n>10\tleshort\t\tx\t\tversion %d\n>>8\tleshort\t\tx\t\t\\b.%d\n#------------------------------------------------------------------------------\n# zfs:\tfile(1) magic for ZFS dumps\n#\n# From <rea-fbsd@codelabs.ru>\n# ZFS dump header has the following structure (as per zfs_ioctl.h\n# in FreeBSD with drr_type is set to DRR_BEGIN)\n#\n#   enum {\n#\tDRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,\n#\tDRR_WRITE, DRR_FREE, DRR_END,\n#   } drr_type;\n#   uint32_t drr_pad;\n#   uint64_t drr_magic;\n#   uint64_t drr_version;\n#   uint64_t drr_creation_time;\n#   dmu_objset_type_t drr_type;\n#   uint32_t drr_pad;\n#   uint64_t drr_toguid;\n#   uint64_t drr_fromguid;\n#   char drr_toname[MAXNAMELEN];\n#\n# Backup magic is 0x00000002f5bacbac (quad word)\n# The drr_type is defined as\n#   typedef enum dmu_objset_type {\n#\t  DMU_OST_NONE,\n#\t  DMU_OST_META,\n#\t  DMU_OST_ZFS,\n#\t  DMU_OST_ZVOL,\n#\t  DMU_OST_OTHER,\t\t  /* For testing only! */\n#\t  DMU_OST_ANY,\t\t\t  /* Be careful! */\n#\t  DMU_OST_NUMTYPES\n#  } dmu_objset_type_t;\n#\n# Almost all uint64_t fields are printed as the 32-bit ones (with high\n# 32 bits zeroed), because there is no simple way to print them as the\n# full 64-bit values.\n\n# Big-endian values\n8\tstring\t\\000\\000\\000\\002\\365\\272\\313\\254 ZFS shapshot (big-endian machine),\n>20\tbelong\tx\tversion %u,\n>32\tbelong\t0\ttype: NONE,\n>32\tbelong\t1\ttype: META,\n>32\tbelong\t2\ttype: ZFS,\n>32\tbelong\t3\ttype: ZVOL,\n>32\tbelong\t4\ttype: OTHER,\n>32\tbelong\t5\ttype: ANY,\n>32\tbelong\t>5\ttype: UNKNOWN (%u),\n>40\tbyte\tx\tdestination GUID: %02X\n>41\tbyte\tx\t%02X\n>42\tbyte\tx\t%02X\n>43\tbyte\tx\t%02X\n>44\tbyte\tx\t%02X\n>45\tbyte\tx\t%02X\n>46\tbyte\tx\t%02X\n>47\tbyte\tx\t%02X,\n>48\tulong\t>0\n>>52\tulong\t>0\n>>>48\tbyte\tx\tsource GUID: %02X\n>>>49\tbyte\tx\t%02X\n>>>50\tbyte\tx\t%02X\n>>>51\tbyte\tx\t%02X\n>>>52\tbyte\tx\t%02X\n>>>53\tbyte\tx\t%02X\n>>>54\tbyte\tx\t%02X\n>>>55\tbyte\tx\t%02X,\n>56\tstring\t>\\0\tname: '%s'\n\n# Little-endian values\n8\tstring\t\\254\\313\\272\\365\\002\\000\\000\\000\tZFS shapshot (little-endian machine),\n>16\tlelong\tx\tversion %u,\n>32\tlelong\t0\ttype: NONE,\n>32\tlelong\t1\ttype: META,\n>32\tlelong\t2\ttype: ZFS,\n>32\tlelong\t3\ttype: ZVOL,\n>32\tlelong\t4\ttype: OTHER,\n>32\tlelong\t5\ttype: ANY,\n>32\tlelong\t>5\ttype: UNKNOWN (%u),\n>47\tbyte\tx\tdestination GUID: %02X\n>46\tbyte\tx\t%02X\n>45\tbyte\tx\t%02X\n>44\tbyte\tx\t%02X\n>43\tbyte\tx\t%02X\n>42\tbyte\tx\t%02X\n>41\tbyte\tx\t%02X\n>40\tbyte\tx\t%02X,\n>48\tulong\t>0\n>>52\tulong\t>0\n>>>55\tbyte\tx\tsource GUID: %02X\n>>>54\tbyte\tx\t%02X\n>>>53\tbyte\tx\t%02X\n>>>52\tbyte\tx\t%02X\n>>>51\tbyte\tx\t%02X\n>>>50\tbyte\tx\t%02X\n>>>49\tbyte\tx\t%02X\n>>>48\tbyte\tx\t%02X,\n>56\tstring\t>\\0\tname: '%s'\n\n#------------------------------------------------------------------------------\n# $File$\n# zilog:  file(1) magic for Zilog Z8000.\n#\n# Was it big-endian or little-endian?  My Product Specification doesn't\n# say.\n#\n0\tlong\t\t0xe807\t\tobject file (z8000 a.out)\n0\tlong\t\t0xe808\t\tpure object file (z8000 a.out)\n0\tlong\t\t0xe809\t\tseparate object file (z8000 a.out)\n0\tlong\t\t0xe805\t\toverlay object file (z8000 a.out)\n\n#------------------------------------------------------------------------------\n# $File$\n# zyxel:  file(1) magic for ZyXEL modems\n#\n# From <rob@pe1chl.ampr.org>\n# These are the /etc/magic entries to decode datafiles as used for the\n# ZyXEL U-1496E DATA/FAX/VOICE modems.  (This header conforms to a\n# ZyXEL-defined standard)\n\n0\tstring\t\tZyXEL\\002\tZyXEL voice data\n>10\tbyte\t\t0\t\t- CELP encoding\n>10\tbyte&0x0B\t1\t\t- ADPCM2 encoding\n>10\tbyte&0x0B\t2\t\t- ADPCM3 encoding\n>10\tbyte&0x0B\t3\t\t- ADPCM4 encoding\n>10\tbyte&0x0B\t8\t\t- New ADPCM3 encoding\n>10\tbyte&0x04\t4\t\twith resync\n"
  },
  {
    "path": "test/File/_files/magic.lte.5.3.10.mime",
    "content": "# Magic file\n\n#JPEG\n4       string/B        jP              JPEG 2000 image\n\n## GIF\n0       string          GIF8            GIF image data\n\n# TIFF\n0       string          MM\\x00\\x2a      TIFF image data, big-endian\n0       string          II\\x2a\\x00      TIFF image data, little-endian\n\n"
  },
  {
    "path": "test/File/_files/magic.mime",
    "content": "\n#------------------------------------------------------------------------------\n# $File: acorn,v 1.5 2009/09/19 16:28:07 christos Exp $\n# acorn:  file(1) magic for files found on Acorn systems\n#\n\n# RISC OS Chunk File Format\n# From RISC OS Programmer's Reference Manual, Appendix D\n# We guess the file type from the type of the first chunk.\n0\tlelong\t\t0xc3cbc6c5\tRISC OS Chunk data\n>12\tstring\t\tOBJ_\t\t\\b, AOF object\n>12\tstring\t\tLIB_\t\t\\b, ALF library\n\n# RISC OS AIF, contains \"SWI OS_Exit\" at offset 16.\n16\tlelong\t\t0xef000011\tRISC OS AIF executable\n\n# RISC OS Draw files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring \t\tDraw\t\tRISC OS Draw file data\n\n# RISC OS new format font files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring\t\tFONT\\0\t\tRISC OS outline font data,\n>5\tbyte\t\tx\t\tversion %d\n0\tstring\t\tFONT\\1\t\tRISC OS 1bpp font data,\n>5\tbyte\t\tx\t\tversion %d\n0\tstring\t\tFONT\\4\t\tRISC OS 4bpp font data\n>5\tbyte\t\tx\t\tversion %d\n\n# RISC OS Music files\n# From RISC OS Programmer's Reference Manual, Appendix E\n0\tstring\t\tMaestro\\r\tRISC OS music file\n>8\tbyte\t\tx\t\tversion %d\n\n>8\tbyte\t\tx\t\ttype %d\n\n# Digital Symphony data files\n# From: Bernard Jungen (bern8817@euphonynet.be)\n0\t\tstring\t\\x02\\x01\\x13\\x13\\x13\\x01\\x0d\\x10\tDigital Symphony sound sample (RISC OS),\n>8\t\tbyte\tx\tversion %d,\n>9\t\tpstring\tx\tnamed \"%s\",\n>(9.b+19)\tbyte\t=0\t8-bit logarithmic\n>(9.b+19)\tbyte\t=1\tLZW-compressed linear\n>(9.b+19)\tbyte\t=2\t8-bit linear signed\n>(9.b+19)\tbyte\t=3\t16-bit linear signed\n>(9.b+19)\tbyte\t=4\tSigmaDelta-compressed linear\n>(9.b+19)\tbyte\t=5\tSigmaDelta-compressed logarithmic\n>(9.b+19)\tbyte\t>5\tunknown format\n\n0\tstring\t\\x02\\x01\\x13\\x13\\x14\\x12\\x01\\x0b\tDigital Symphony song (RISC OS),\n>8\tbyte\tx\tversion %d,\n>9\tbyte\t=1\t1 voice,\n>9\tbyte\t!1\t%d voices,\n>10\tleshort\t=1\t1 track,\n>10\tleshort\t!1\t%d tracks,\n>12\tleshort\t=1\t1 pattern\n>12\tleshort\t!1\t%d patterns\n\n0\tstring\t\\x02\\x01\\x13\\x13\\x10\\x14\\x12\\x0e\n>9\tbyte\t=0\tDigital Symphony sequence (RISC OS),\n>>8\tbyte\tx\tversion %d,\n>>10\tbyte\t=1\t1 line,\n>>10\tbyte\t!1\t%d lines,\n>>11\tleshort\t=1\t1 position\n>>11\tleshort\t!1\t%d positions\n>9\tbyte\t=1\tDigital Symphony pattern data (RISC OS),\n>>8\tbyte\tx\tversion %d,\n>>10\tleshort\t=1\t1 pattern\n>>10\tleshort\t!1\t%d patterns\n\n#------------------------------------------------------------------------------\n# $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $\n# adi: file(1) magic for ADi's objects\n# From Gregory McGarry <g.mcgarry@ieee.org>\n#\n0\tleshort\t\t0x521c\t\tCOFF DSP21k\n>18\tlelong\t\t&02\t\texecutable,\n>18\tlelong\t\t^02\n>>18\tlelong\t\t&01\t\tstatic object,\n>>18\tlelong\t\t^01\t\trelocatable object,\n>18\tlelong\t\t&010\t\tstripped\n>18\tlelong\t\t^010\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: adventure,v 1.10 2009/09/19 16:28:07 christos Exp $\n# adventure: file(1) magic for Adventure game files\n#\n# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>\n# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998\n# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002\n#\n# ALAN\n# I assume there are other, lower versions, but these are the only ones I\n# saw in the archive.\n0\tbeshort\t0x0206\tALAN game data\n>2\tbyte\t<10\tversion 2.6%d\n\n\n# Infocom (see z-machine)\n#------------------------------------------------------------------------------\n# Z-machine:  file(1) magic for Z-machine binaries.\n#\n# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n# The first byte is the Z-machine revision; it is always between 1 and 8. We\n# had false matches (for instance, inbig5.ocp from the Omega TeX extension as\n# well as an occasional MP3 file), so we sanity-check the version number.\n#\n# It might be possible to sanity-check the release number as well, as it seems\n# (at least in classic Infocom games) to always be a relatively small number,\n# always under 150 or so, but as this isn't rigorous, we'll wait on that until\n# it becomes clear that it's needed.\n#\n0\tubyte\t\t\t>0\n>0\tubyte\t\t\t<9\n>>16\tbelong&0xfe00f0f0\t0x3030\tInfocom game data\n>>>0\tubyte\t\t\tx\t(Z-machine %d,\n>>>>2\tubeshort\t\tx\tRelease %d /\n>>>>18\tstring\t\t\t>\\0\tSerial %.6s)\n\n#------------------------------------------------------------------------------\n# Glulx:  file(1) magic for Glulx binaries.\n#\n# I haven't checked for false matches yet.\n#\n0\tstring\t\t\tGlul\tGlulx game data\n>4\tbeshort\t\t\tx\t(Version %d\n>>6\tbyte\t\t\tx\t\\b.%d\n>>8\tbyte\t\t\tx\t\\b.%d)\n>36\tstring\t\t\tInfo\tCompiled by Inform\n\n\n\n# For Quetzal and blorb magic see iff\n\n\n# TADS (Text Adventure Development System)\n#  All files are machine-independent (games compile to byte-code) and are tagged\n#  with a version string of the form \"V2.<digit>.<digit>\\0\" (but TADS 3 is\n#  on the way).\n#  Game files start with \"TADS2 bin\\n\\r\\032\\0\" then the compiler version.\n0\tstring\tTADS2\\ bin\tTADS\n>9\tbelong  !0x0A0D1A00\tgame data, CORRUPTED\n>9\tbelong\t 0x0A0D1A00\n>>13\tstring\t>\\0\t\t%s game data\n#  Resource files start with \"TADS2 rsc\\n\\r\\032\\0\" then the compiler version.\n0\tstring\tTADS2\\ rsc\tTADS\n>9\tbelong  !0x0A0D1A00\tresource data, CORRUPTED\n>9\tbelong\t 0x0A0D1A00\n>>13\tstring\t>\\0\t\t%s resource data\n#  Some saved game files start with \"TADS2 save/g\\n\\r\\032\\0\", a little-endian\n#  2-byte length N, the N-char name of the game file *without* a NUL (darn!),\n# \"TADS2 save\\n\\r\\032\\0\" and the interpreter version. \n0\tstring\tTADS2\\ save/g\tTADS\n>12\tbelong\t!0x0A0D1A00\tsaved game data, CORRUPTED\n>12\tbelong\t 0x0A0D1A00\n>>(16.s+32) string >\\0\t\t%s saved game data\n#  Other saved game files start with \"TADS2 save\\n\\r\\032\\0\" and the interpreter\n#  version.\n0\tstring\tTADS2\\ save\tTADS\n>10\tbelong\t!0x0A0D1A00\tsaved game data, CORRUPTED\n>10\tbelong\t 0x0A0D1A00\n>>14\tstring\t>\\0\t\t%s saved game data\n\n# Danny Milosavljevic <danny.milo@gmx.net>\n# this are adrift (adventure game standard) game files, extension .taf\n# depending on version magic continues with 0x93453E6139FA (V 4.0)\n# 0x9445376139FA (V 3.90)\n# 0x9445366139FA (V 3.80)\n# this is from source (http://www.adrift.co/) and I have some taf\n# files, and checked them.\n#0\tbelong\t0x3C423FC9\n#>4\tbelong\t0x6A87C2CF\tAdrift game file\n#!:mime\tapplication/x-adrift\n\n#------------------------------------------------------------------------------\n# $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $\n# allegro:  file(1) magic for Allegro datafiles\n# Toby Deshane <hac@shoelace.digivill.net>\n#\n0 belong 0x736C6821   Allegro datafile (packed)\n0 belong 0x736C682E   Allegro datafile (not packed/autodetect)\n0 belong 0x736C682B   Allegro datafile (appended exe data)\n\n#------------------------------------------------------------------------------\n# $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $\n# alliant:  file(1) magic for Alliant FX series a.out files\n#\n# If the FX series is the one that had a processor with a 68K-derived\n# instruction set, the \"short\" should probably become \"beshort\" and the\n# \"long\" should probably become \"belong\".\n# If it's the i860-based one, they should probably become either the\n# big-endian or little-endian versions, depending on the mode they ran\n# the 860 in....\n#\n0\tshort\t\t0420\t\t0420 Alliant virtual executable\n>2\tshort\t\t&0x0020\t\tcommon library\n>16\tlong\t\t>0\t\tnot stripped\n0\tshort\t\t0421\t\t0421 Alliant compact executable\n>2\tshort\t\t&0x0020\t\tcommon library\n>16\tlong\t\t>0\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: alpha,v 1.7 2009/09/19 16:28:07 christos Exp $\n# alpha architecture description\n#\n\n0\tleshort\t\t0603\t\tCOFF format alpha\n>22\tleshort&030000\t!020000\t\texecutable\n>24\tleshort\t\t0410\t\tpure\n>24\tleshort\t\t0413\t\tpaged\n>22\tleshort&020000\t!0\t\tdynamically linked\n>16\tlelong\t\t!0\t\tnot stripped\n>16\tlelong\t\t0\t\tstripped\n>22\tleshort&030000\t020000\t\tshared library\n>24\tleshort\t\t0407\t\tobject\n>27\tbyte\t\tx\t\t- version %d\n>26\tbyte\t\tx\t\t\b.%d\n>28\tbyte\t\tx\t\t\b-%d\n\n# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>\n#\n# The actual magic number is just \"Core\", followed by a 2-byte version\n# number; however, treating any file that begins with \"Core\" as a Digital\n# UNIX core dump file may produce too many false hits, so we include one\n# byte of the version number as well; DU 5.0 appears only to be up to\n# version 2.\n#\n0\tstring\t\tCore\\001\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n0\tstring\t\tCore\\002\tAlpha COFF format core dump (Digital UNIX)\n>24\tstring\t\t>\\0\t\t\\b, from '%s'\n\n\n#------------------------------------------------------------------------------\n# $File: amanda,v 1.5 2009/09/19 16:28:07 christos Exp $\n# amanda:  file(1) magic for amanda file format\n#\n0\tstring\tAMANDA:\\ \t\tAMANDA \n>8\tstring\tTAPESTART\\ DATE\t\ttape header file,\n>>23\tstring\tX\n>>>25\tstring\t>\\ \t\t\tUnused %s\n>>23\tstring\t>\\ \t\t\tDATE %s\n>8\tstring\tFILE\\ \t\t\tdump file,\n>>13\tstring\t>\\ \t\t\tDATE %s\n\n#------------------------------------------------------------------------------\n# $File: amigaos,v 1.14 2009/09/19 16:28:07 christos Exp $\n# amigaos:  file(1) magic for AmigaOS binary formats:\n\n#\n# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)\n#\n0\tbelong\t\t0x000003fa\tAmigaOS shared library\n0\tbelong\t\t0x000003f3\tAmigaOS loadseg()ble executable/binary\n0\tbelong\t\t0x000003e7\tAmigaOS object/library data\n#\n0\tbeshort\t\t0xe310\t\tAmiga Workbench\n>2\tbeshort\t\t1\t\t\n>>48\tbyte\t\t1\t\tdisk icon\n>>48\tbyte\t\t2\t\tdrawer icon\n>>48\tbyte\t\t3\t\ttool icon\n>>48\tbyte\t\t4\t\tproject icon\n>>48\tbyte\t\t5\t\tgarbage icon\n>>48\tbyte\t\t6\t\tdevice icon\n>>48\tbyte\t\t7\t\tkickstart icon\n>>48\tbyte\t\t8\t\tworkbench application icon\n>2\tbeshort\t\t>1\t\ticon, vers. %d\n#\n# various sound formats from the Amiga\n# G=F6tz Waschk <waschk@informatik.uni-rostock.de>\n#\n0\tstring\t\tFC14\t\tFuture Composer 1.4 Module sound file\n0\tstring\t\tSMOD\t\tFuture Composer 1.3 Module sound file\n0\tstring\t\tAON4artofnoise\tArt Of Noise Module sound file\n1\tstring\t\tMUGICIAN/SOFTEYES Mugician Module sound file\n58\tstring\t\tSIDMON\\ II\\ -\\ THE\tSidmon 2.0 Module sound file\n0\tstring\t\tSynth4.0\tSynthesis Module sound file\n0\tstring\t\tARP.\t\tThe Holy Noise Module sound file\n0\tstring\t\tBeEp\\0\t\tJamCracker Module sound file\n0\tstring\t\tCOSO\\0\t\tHippel-COSO Module sound file\n# Too simple (short, pure ASCII, deep), MPi\n#26\tstring\t\tV.3\t\tBrian Postma's Soundmon Module sound file v3\n#26\tstring\t\tBPSM\t\tBrian Postma's Soundmon Module sound file v3\n#26\tstring\t\tV.2\t\tBrian Postma's Soundmon Module sound file v2\n\n# The following are from: \"Stefan A. Haubenthal\" <polluks@web.de>\n0\tbeshort\t\t0x0f00\t\tAmigaOS bitmap font\n0\tbeshort\t\t0x0f03\t\tAmigaOS outline font\n0\tbelong\t\t0x80001001\tAmigaOS outline tag\n0\tstring\t\t##\\ version\tcatalog translation\n0\tstring\t\tEMOD\\0\t\tAmiga E module\n8\tstring\t\tECXM\\0\t\tECX module\n0\tstring/c\t@database\tAmigaGuide file\n\n# Amiga disk types\n# \n0\tstring\t\tRDSK\t\tRigid Disk Block\n>160\tstring\t\tx\t\ton %.24s\n0\tstring\t\tDOS\\0\t\tAmiga DOS disk\n0\tstring\t\tDOS\\1\t\tAmiga FFS disk\n0\tstring\t\tDOS\\2\t\tAmiga Inter DOS disk\n0\tstring\t\tDOS\\3\t\tAmiga Inter FFS disk\n0\tstring\t\tDOS\\4\t\tAmiga Fastdir DOS disk\n0\tstring\t\tDOS\\5\t\tAmiga Fastdir FFS disk\n0\tstring\t\tKICK\t\tKickstart disk\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n0\tstring\t\tLZX\t\tLZX compressed archive (Amiga)\n\n\n#------------------------------------------------------------------------------\n# $File: animation,v 1.39 2009/09/27 19:02:12 christos Exp $\n# animation:  file(1) magic for animation/movie formats\n#\n# animation formats\n# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)\n# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)\n\n# SGI and Apple formats\n0\tstring\t\tMOVI\t\tSilicon Graphics movie file\n!:mime\tvideo/x-sgi-movie\n4       string          moov            Apple QuickTime\n!:mime\tvideo/quicktime\n>12     string          mvhd            \\b movie (fast start)\n>12     string          mdra            \\b URL\n>12     string          cmov            \\b movie (fast start, compressed header)\n>12     string          rmra            \\b multiple URLs\n4       string          mdat            Apple QuickTime movie (unoptimized)\n!:mime\tvideo/quicktime\n#4       string          wide            Apple QuickTime movie (unoptimized)\n#!:mime\tvideo/quicktime\n#4       string          skip            Apple QuickTime movie (modified)\n#!:mime\tvideo/quicktime\n#4       string          free            Apple QuickTime movie (modified)\n#!:mime\tvideo/quicktime\n4       string          idsc            Apple QuickTime image (fast start)\n!:mime\timage/x-quicktime\n#4       string          idat            Apple QuickTime image (unoptimized)\n#!:mime\timage/x-quicktime\n4       string          pckg            Apple QuickTime compressed archive\n!:mime\tapplication/x-quicktime-player\n4\tstring/W\tjP\t\tJPEG 2000 image\n!:mime\timage/jp2\n4\tstring\t\tftyp\t\tISO Media\n>8\tstring\t\tisom\t\t\\b, MPEG v4 system, version 1\n!:mime\tvideo/mp4\n>8\tstring\t\tiso2\t\t\\b, MPEG v4 system, part 12 revision\n>8\tstring\t\tmp41\t\t\\b, MPEG v4 system, version 1\n!:mime\tvideo/mp4\n>8\tstring\t\tmp42\t\t\\b, MPEG v4 system, version 2\n!:mime\tvideo/mp4\n>8\tstring\t\tmp7t\t\t\\b, MPEG v4 system, MPEG v7 XML\n>8\tstring\t\tmp7b\t\t\\b, MPEG v4 system, MPEG v7 binary XML\n>8\tstring/W\tjp2\t\t\\b, JPEG 2000\n!:mime\timage/jp2\n>8\tstring\t\t3gp\t\t\\b, MPEG v4 system, 3GPP\n!:mime\tvideo/3gpp\n>>11\tbyte\t\t4\t\t\\b v4 (H.263/AMR GSM 6.10)\n>>11\tbyte\t\t5\t\t\\b v5 (H.263/AMR GSM 6.10)\n>>11\tbyte\t\t6\t\t\\b v6 (ITU H.264/AMR GSM 6.10)\n>8\tstring\t\tmmp4\t\t\\b, MPEG v4 system, 3GPP Mobile\n!:mime\tvideo/mp4\n>8\tstring\t\tavc1\t\t\\b, MPEG v4 system, 3GPP JVT AVC\n!:mime\tvideo/3gpp\n>8\tstring/W\tM4A\t\t\\b, MPEG v4 system, iTunes AAC-LC\n!:mime\taudio/mp4\n>8\tstring/W\tM4V\t\t\\b, MPEG v4 system, iTunes AVC-LC\n!:mime\tvideo/mp4\n>8\tstring/W\tM4P\t\t\\b, MPEG v4 system, iTunes AES encrypted\n>8\tstring/W\tM4B\t\t\\b, MPEG v4 system, iTunes bookmarked\n>8\tstring/W\tqt\t\t\\b, Apple QuickTime movie\n!:mime\tvideo/quicktime\n\n# MPEG sequences\n# Scans for all common MPEG header start codes\n0\t belong\t\t    0x00000001     \n>4\t byte&0x1F\t    0x07\t   JVT NAL sequence, H.264 video\n>>5      byte               66             \\b, baseline\n>>5      byte               77             \\b, main\n>>5      byte               88             \\b, extended\n>>7      byte               x              \\b @ L %u\n0        belong&0xFFFFFF00  0x00000100     \n>3       byte               0xBA           MPEG sequence\n!:mime  video/mpeg\n>>4      byte               &0x40          \\b, v2, program multiplex\n>>4      byte               ^0x40          \\b, v1, system multiplex\n>3       byte               0xBB           MPEG sequence, v1/2, multiplex (missing pack header)\n>3       byte&0x1F          0x07           MPEG sequence, H.264 video\n>>4      byte               66             \\b, baseline\n>>4      byte               77             \\b, main\n>>4      byte               88             \\b, extended\n>>6      byte               x              \\b @ L %u\n>3       byte               0xB0           MPEG sequence, v4\n!:mime  video/mpeg4-generic\n>>5      belong             0x000001B5\n>>>9     byte               &0x80\n>>>>10   byte&0xF0          16             \\b, video\n>>>>10   byte&0xF0          32             \\b, still texture\n>>>>10   byte&0xF0          48             \\b, mesh\n>>>>10   byte&0xF0          64             \\b, face\n>>>9     byte&0xF8          8              \\b, video\n>>>9     byte&0xF8          16             \\b, still texture\n>>>9     byte&0xF8          24             \\b, mesh\n>>>9     byte&0xF8          32             \\b, face\n>>4      byte               1              \\b, simple @ L1\n>>4      byte               2              \\b, simple @ L2\n>>4      byte               3              \\b, simple @ L3\n>>4      byte               4              \\b, simple @ L0\n>>4      byte               17             \\b, simple scalable @ L1\n>>4      byte               18             \\b, simple scalable @ L2\n>>4      byte               33             \\b, core @ L1\n>>4      byte               34             \\b, core @ L2\n>>4      byte               50             \\b, main @ L2\n>>4      byte               51             \\b, main @ L3\n>>4      byte               53             \\b, main @ L4\n>>4      byte               66             \\b, n-bit @ L2\n>>4      byte               81             \\b, scalable texture @ L1\n>>4      byte               97             \\b, simple face animation @ L1\n>>4      byte               98             \\b, simple face animation @ L2\n>>4      byte               99             \\b, simple face basic animation @ L1\n>>4      byte               100            \\b, simple face basic animation @ L2\n>>4      byte               113            \\b, basic animation text @ L1\n>>4      byte               114            \\b, basic animation text @ L2\n>>4      byte               129            \\b, hybrid @ L1\n>>4      byte               130            \\b, hybrid @ L2\n>>4      byte               145            \\b, advanced RT simple @ L!\n>>4      byte               146            \\b, advanced RT simple @ L2\n>>4      byte               147            \\b, advanced RT simple @ L3\n>>4      byte               148            \\b, advanced RT simple @ L4\n>>4      byte               161            \\b, core scalable @ L1\n>>4      byte               162            \\b, core scalable @ L2\n>>4      byte               163            \\b, core scalable @ L3\n>>4      byte               177            \\b, advanced coding efficiency @ L1\n>>4      byte               178            \\b, advanced coding efficiency @ L2\n>>4      byte               179            \\b, advanced coding efficiency @ L3\n>>4      byte               180            \\b, advanced coding efficiency @ L4\n>>4      byte               193            \\b, advanced core @ L1\n>>4      byte               194            \\b, advanced core @ L2\n>>4      byte               209            \\b, advanced scalable texture @ L1\n>>4      byte               210            \\b, advanced scalable texture @ L2\n>>4      byte               211            \\b, advanced scalable texture @ L3\n>>4      byte               225            \\b, simple studio @ L1\n>>4      byte               226            \\b, simple studio @ L2\n>>4      byte               227            \\b, simple studio @ L3\n>>4      byte               228            \\b, simple studio @ L4\n>>4      byte               229            \\b, core studio @ L1\n>>4      byte               230            \\b, core studio @ L2\n>>4      byte               231            \\b, core studio @ L3\n>>4      byte               232            \\b, core studio @ L4\n>>4      byte               240            \\b, advanced simple @ L0\n>>4      byte               241            \\b, advanced simple @ L1\n>>4      byte               242            \\b, advanced simple @ L2\n>>4      byte               243            \\b, advanced simple @ L3\n>>4      byte               244            \\b, advanced simple @ L4\n>>4      byte               245            \\b, advanced simple @ L5\n>>4      byte               247            \\b, advanced simple @ L3b\n>>4      byte               248            \\b, FGS @ L0\n>>4      byte               249            \\b, FGS @ L1\n>>4      byte               250            \\b, FGS @ L2\n>>4      byte               251            \\b, FGS @ L3\n>>4      byte               252            \\b, FGS @ L4\n>>4      byte               253            \\b, FGS @ L5\n>3       byte               0xB5           MPEG sequence, v4\n>>4      byte               &0x80\n>>>5     byte&0xF0          16             \\b, video (missing profile header)\n>>>5     byte&0xF0          32             \\b, still texture (missing profile header)\n>>>5     byte&0xF0          48             \\b, mesh (missing profile header)\n>>>5     byte&0xF0          64             \\b, face (missing profile header)\n>>4      byte&0xF8          8              \\b, video (missing profile header)\n>>4      byte&0xF8          16             \\b, still texture (missing profile header)\n>>4      byte&0xF8          24             \\b, mesh (missing profile header)\n>>4      byte&0xF8          32             \\b, face (missing profile header)\n>3       byte               0xB3           MPEG sequence\n>>12     belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>12     belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>12     belong             0x000001B5     \\b, v2,\n>>>16    byte&0x0F          1              \\b HP\n>>>16    byte&0x0F          2              \\b Spt\n>>>16    byte&0x0F          3              \\b SNR\n>>>16    byte&0x0F          4              \\b MP\n>>>16    byte&0x0F          5              \\b SP\n>>>17    byte&0xF0          64             \\b@HL\n>>>17    byte&0xF0          96             \\b@H-14\n>>>17    byte&0xF0          128            \\b@ML\n>>>17    byte&0xF0          160            \\b@LL\n>>>17    byte               &0x08          \\b progressive\n>>>17    byte               ^0x08          \\b interlaced\n>>>17    byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>17    byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>17    byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>11     byte               &0x02\n>>>75    byte               &0x01\n>>>>140  belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>>>140  belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>>>140  belong             0x000001B5     \\b, v2,\n>>>>>144 byte&0x0F          1              \\b HP\n>>>>>144 byte&0x0F          2              \\b Spt\n>>>>>144 byte&0x0F          3              \\b SNR\n>>>>>144 byte&0x0F          4              \\b MP\n>>>>>144 byte&0x0F          5              \\b SP\n>>>>>145 byte&0xF0          64             \\b@HL\n>>>>>145 byte&0xF0          96             \\b@H-14\n>>>>>145 byte&0xF0          128            \\b@ML\n>>>>>145 byte&0xF0          160            \\b@LL\n>>>>>145 byte               &0x08          \\b progressive\n>>>>>145 byte               ^0x08          \\b interlaced\n>>>>>145 byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>>>145 byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>>>145 byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>76    belong             0x000001B8     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>76    belong             0x000001B2     \\b, v1, progressive Y'CbCr 4:2:0 video\n>>76    belong             0x000001B5     \\b, v2,\n>>>80   byte&0x0F          1              \\b HP\n>>>80   byte&0x0F          2              \\b Spt\n>>>80   byte&0x0F          3              \\b SNR\n>>>80   byte&0x0F          4              \\b MP\n>>>80   byte&0x0F          5              \\b SP\n>>>81   byte&0xF0          64             \\b@HL\n>>>81   byte&0xF0          96             \\b@H-14\n>>>81   byte&0xF0          128            \\b@ML\n>>>81   byte&0xF0          160            \\b@LL\n>>>81   byte               &0x08          \\b progressive\n>>>81   byte               ^0x08          \\b interlaced\n>>>81   byte&0x06          2              \\b Y'CbCr 4:2:0 video\n>>>81   byte&0x06          4              \\b Y'CbCr 4:2:2 video\n>>>81   byte&0x06          6              \\b Y'CbCr 4:4:4 video\n>>4      belong&0xFFFFFF00  0x78043800     \\b, HD-TV 1920P\n>>>7     byte&0xF0          0x10           \\b, 16:9\n>>4      belong&0xFFFFFF00  0x50002D00     \\b, SD-TV 1280I\n>>>7     byte&0xF0          0x10           \\b, 16:9\n>>4      belong&0xFFFFFF00  0x30024000     \\b, PAL Capture\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      beshort&0xFFF0     0x2C00         \\b, 4CIF\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC\n>>>5     beshort&0x0FFF     0x0240         \\b PAL\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>>7     byte&0xF0          0x80           \\b, PAL 4:3\n>>>7     byte&0xF0          0xC0           \\b, NTSC 4:3\n>>4      belong&0xFFFFFF00  0x2801E000     \\b, LD-TV 640P\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x1400F000     \\b, 320x240\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x0F00A000     \\b, 240x160\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      belong&0xFFFFFF00  0x0A007800     \\b, 160x120\n>>>7     byte&0xF0          0x10           \\b, 4:3\n>>4      beshort&0xFFF0     0x1600         \\b, CIF\n>>>5     beshort&0x0FFF     0x00F0         \\b NTSC\n>>>5     beshort&0x0FFF     0x0120         \\b PAL\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>>7     byte&0xF0          0x80           \\b, PAL 4:3\n>>>7     byte&0xF0          0xC0           \\b, NTSC 4:3\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>>7    byte&0xF0          0x20           \\b, 4:3\n>>>>7    byte&0xF0          0x30           \\b, 16:9\n>>>>7    byte&0xF0          0x40           \\b, 11:5\n>>4      beshort&0xFFF0     0x2D00         \\b, CCIR/ITU\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC 525\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>4      beshort&0xFFF0     0x1E00         \\b, SVCD\n>>>5     beshort&0x0FFF     0x01E0         \\b NTSC 525\n>>>5     beshort&0x0FFF     0x0240         \\b PAL 625\n>>>7     byte&0xF0          0x20           \\b, 4:3\n>>>7     byte&0xF0          0x30           \\b, 16:9\n>>>7     byte&0xF0          0x40           \\b, 11:5\n>>7      byte&0x0F          1              \\b, 23.976 fps\n>>7      byte&0x0F          2              \\b, 24 fps\n>>7      byte&0x0F          3              \\b, 25 fps\n>>7      byte&0x0F          4              \\b, 29.97 fps\n>>7      byte&0x0F          5              \\b, 30 fps\n>>7      byte&0x0F          6              \\b, 50 fps\n>>7      byte&0x0F          7              \\b, 59.94 fps\n>>7      byte&0x0F          8              \\b, 60 fps\n>>11     byte               &0x04          \\b, Constrained\n\n# MPEG ADTS Audio (*.mpx/mxa/aac)\n# from dreesen@math.fu-berlin.de\n# modified to fully support MPEG ADTS\n\n# MP3, M1A\n# modified by Joerg Jenderek\n# GRR the original test are too common for many DOS files\n# so don't accept as MP3 until we've tested the rate\n0       beshort&0xFFFE  0xFFFA\n# rates\n>2      byte&0xF0       0x10           MPEG ADTS, layer III, v1,  32 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x20           MPEG ADTS, layer III, v1,  40 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x30           MPEG ADTS, layer III, v1,  48 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x40           MPEG ADTS, layer III, v1,  56 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x50           MPEG ADTS, layer III, v1,  64 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x60           MPEG ADTS, layer III, v1,  80 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x70           MPEG ADTS, layer III, v1,  96 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x80           MPEG ADTS, layer III, v1, 112 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0x90           MPEG ADTS, layer III, v1, 128 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xA0           MPEG ADTS, layer III, v1, 160 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xB0           MPEG ADTS, layer III, v1, 192 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xC0           MPEG ADTS, layer III, v1, 224 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xD0           MPEG ADTS, layer III, v1, 256 kbps\n!:mime\taudio/mpeg\n>2      byte&0xF0       0xE0           MPEG ADTS, layer III, v1, 320 kbps\n!:mime\taudio/mpeg\n# timing\n>2      byte&0x0C       0x00           \\b, 44.1 kHz\n>2      byte&0x0C       0x04           \\b, 48 kHz\n>2      byte&0x0C       0x08           \\b, 32 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP2, M1A\n0       beshort&0xFFFE  0xFFFC         MPEG ADTS, layer II, v1\n!:mime\taudio/mpeg\n# rates\n>2      byte&0xF0       0x10           \\b,  32 kbps\n>2      byte&0xF0       0x20           \\b,  48 kbps\n>2      byte&0xF0       0x30           \\b,  56 kbps\n>2      byte&0xF0       0x40           \\b,  64 kbps\n>2      byte&0xF0       0x50           \\b,  80 kbps\n>2      byte&0xF0       0x60           \\b,  96 kbps\n>2      byte&0xF0       0x70           \\b, 112 kbps\n>2      byte&0xF0       0x80           \\b, 128 kbps\n>2      byte&0xF0       0x90           \\b, 160 kbps\n>2      byte&0xF0       0xA0           \\b, 192 kbps\n>2      byte&0xF0       0xB0           \\b, 224 kbps\n>2      byte&0xF0       0xC0           \\b, 256 kbps\n>2      byte&0xF0       0xD0           \\b, 320 kbps\n>2      byte&0xF0       0xE0           \\b, 384 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 44.1 kHz\n>2      byte&0x0C       0x04           \\b, 48 kHz\n>2      byte&0x0C       0x08           \\b, 32 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MPA, M1A\n# updated by Joerg Jenderek\n# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448\n# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)\n# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries\n#0\tbeshort&0xFFFE\t\t0xFFFE\t\n#>2\tubyte&0xF0\t>0x0F\t\t\n#>>2\tubyte&0xF0\t<0xE1\t\tMPEG ADTS, layer I, v1\n## rate\n#>>>2      byte&0xF0       0x10           \\b,  32 kbps\n#>>>2      byte&0xF0       0x20           \\b,  64 kbps\n#>>>2      byte&0xF0       0x30           \\b,  96 kbps\n#>>>2      byte&0xF0       0x40           \\b, 128 kbps\n#>>>2      byte&0xF0       0x50           \\b, 160 kbps\n#>>>2      byte&0xF0       0x60           \\b, 192 kbps\n#>>>2      byte&0xF0       0x70           \\b, 224 kbps\n#>>>2      byte&0xF0       0x80           \\b, 256 kbps\n#>>>2      byte&0xF0       0x90           \\b, 288 kbps\n#>>>2      byte&0xF0       0xA0           \\b, 320 kbps\n#>>>2      byte&0xF0       0xB0           \\b, 352 kbps\n#>>>2      byte&0xF0       0xC0           \\b, 384 kbps\n#>>>2      byte&0xF0       0xD0           \\b, 416 kbps\n#>>>2      byte&0xF0       0xE0           \\b, 448 kbps\n## timing\n#>>>2      byte&0x0C       0x00           \\b, 44.1 kHz\n#>>>2      byte&0x0C       0x04           \\b, 48 kHz\n#>>>2      byte&0x0C       0x08           \\b, 32 kHz\n## channels/options\n#>>>3      byte&0xC0       0x00           \\b, Stereo\n#>>>3      byte&0xC0       0x40           \\b, JntStereo\n#>>>3      byte&0xC0       0x80           \\b, 2x Monaural\n#>>>3      byte&0xC0       0xC0           \\b, Monaural\n##>1     byte            ^0x01          \\b, Data Verify\n##>2     byte            &0x02          \\b, Packet Pad\n##>2     byte            &0x01          \\b, Custom Flag\n##>3     byte            &0x08          \\b, Copyrighted\n##>3     byte            &0x04          \\b, Original Source\n##>3     byte&0x03       1              \\b, NR: 50/15 ms\n##>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP3, M2A\n0       beshort&0xFFFE  0xFFF2         MPEG ADTS, layer III, v2\n!:mime\taudio/mpeg\n# rate\n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps\n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP2, M2A\n0       beshort&0xFFFE  0xFFF4         MPEG ADTS, layer II, v2\n# rate \n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps \n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MPA, M2A\n0       beshort&0xFFFE  0xFFF6         MPEG ADTS, layer I, v2\n!:mime\taudio/mpeg\n# rate\n>2      byte&0xF0       0x10           \\b,  32 kbps\n>2      byte&0xF0       0x20           \\b,  48 kbps\n>2      byte&0xF0       0x30           \\b,  56 kbps\n>2      byte&0xF0       0x40           \\b,  64 kbps\n>2      byte&0xF0       0x50           \\b,  80 kbps\n>2      byte&0xF0       0x60           \\b,  96 kbps\n>2      byte&0xF0       0x70           \\b, 112 kbps\n>2      byte&0xF0       0x80           \\b, 128 kbps\n>2      byte&0xF0       0x90           \\b, 144 kbps\n>2      byte&0xF0       0xA0           \\b, 160 kbps\n>2      byte&0xF0       0xB0           \\b, 176 kbps\n>2      byte&0xF0       0xC0           \\b, 192 kbps\n>2      byte&0xF0       0xD0           \\b, 224 kbps\n>2      byte&0xF0       0xE0           \\b, 256 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 22.05 kHz\n>2      byte&0x0C       0x04           \\b, 24 kHz\n>2      byte&0x0C       0x08           \\b, 16 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# MP3, M25A\n0       beshort&0xFFFE  0xFFE2         MPEG ADTS, layer III,  v2.5\n!:mime\taudio/mpeg\n# rate  \n>2      byte&0xF0       0x10           \\b,   8 kbps\n>2      byte&0xF0       0x20           \\b,  16 kbps\n>2      byte&0xF0       0x30           \\b,  24 kbps\n>2      byte&0xF0       0x40           \\b,  32 kbps\n>2      byte&0xF0       0x50           \\b,  40 kbps\n>2      byte&0xF0       0x60           \\b,  48 kbps\n>2      byte&0xF0       0x70           \\b,  56 kbps\n>2      byte&0xF0       0x80           \\b,  64 kbps\n>2      byte&0xF0       0x90           \\b,  80 kbps\n>2      byte&0xF0       0xA0           \\b,  96 kbps\n>2      byte&0xF0       0xB0           \\b, 112 kbps\n>2      byte&0xF0       0xC0           \\b, 128 kbps\n>2      byte&0xF0       0xD0           \\b, 144 kbps\n>2      byte&0xF0       0xE0           \\b, 160 kbps\n# timing\n>2      byte&0x0C       0x00           \\b, 11.025 kHz\n>2      byte&0x0C       0x04           \\b, 12 kHz\n>2      byte&0x0C       0x08           \\b, 8 kHz\n# channels/options\n>3      byte&0xC0       0x00           \\b, Stereo\n>3      byte&0xC0       0x40           \\b, JntStereo\n>3      byte&0xC0       0x80           \\b, 2x Monaural\n>3      byte&0xC0       0xC0           \\b, Monaural\n#>1     byte            ^0x01          \\b, Data Verify\n#>2     byte            &0x02          \\b, Packet Pad\n#>2     byte            &0x01          \\b, Custom Flag\n#>3     byte            &0x08          \\b, Copyrighted\n#>3     byte            &0x04          \\b, Original Source\n#>3     byte&0x03       1              \\b, NR: 50/15 ms\n#>3     byte&0x03       3              \\b, NR: CCIT J.17\n\n# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio\n\n# Stored AAC streams (instead of the MP4 format)\n0       string          ADIF           MPEG ADIF, AAC\n!:mime\taudio/x-hx-aac-adif\n>4      byte            &0x80\n>>13    byte            &0x10          \\b, VBR\n>>13    byte            ^0x10          \\b, CBR\n>>16    byte&0x1E       0x02           \\b, single stream\n>>16    byte&0x1E       0x04           \\b, 2 streams\n>>16    byte&0x1E       0x06           \\b, 3 streams\n>>16    byte            &0x08          \\b, 4 or more streams\n>>16    byte            &0x10          \\b, 8 or more streams\n>>4    byte            &0x80          \\b, Copyrighted\n>>13   byte            &0x40          \\b, Original Source\n>>13   byte            &0x20          \\b, Home Flag\n>4      byte            ^0x80\n>>4     byte            &0x10          \\b, VBR\n>>4     byte            ^0x10          \\b, CBR\n>>7     byte&0x1E       0x02           \\b, single stream\n>>7     byte&0x1E       0x04           \\b, 2 streams\n>>7     byte&0x1E       0x06           \\b, 3 streams\n>>7     byte            &0x08          \\b, 4 or more streams\n>>7     byte            &0x10          \\b, 8 or more streams\n>>4    byte            &0x40          \\b, Original Stream(s)\n>>4    byte            &0x20          \\b, Home Source\n\n# Live or stored single AAC stream (used with MPEG-2 systems)\n0       beshort&0xFFF6  0xFFF0         MPEG ADTS, AAC\n!:mime\taudio/x-hx-aac-adts\n>1      byte            &0x08          \\b, v2\n>1      byte            ^0x08          \\b, v4\n# profile\n>>2     byte            &0xC0          \\b LTP\n>2      byte&0xc0       0x00           \\b Main\n>2      byte&0xc0       0x40           \\b LC\n>2      byte&0xc0       0x80           \\b SSR\n# timing\n>2      byte&0x3c       0x00           \\b, 96 kHz\n>2      byte&0x3c       0x04           \\b, 88.2 kHz\n>2      byte&0x3c       0x08           \\b, 64 kHz\n>2      byte&0x3c       0x0c           \\b, 48 kHz\n>2      byte&0x3c       0x10           \\b, 44.1 kHz\n>2      byte&0x3c       0x14           \\b, 32 kHz\n>2      byte&0x3c       0x18           \\b, 24 kHz\n>2      byte&0x3c       0x1c           \\b, 22.05 kHz\n>2      byte&0x3c       0x20           \\b, 16 kHz\n>2      byte&0x3c       0x24           \\b, 12 kHz\n>2      byte&0x3c       0x28           \\b, 11.025 kHz\n>2      byte&0x3c       0x2c           \\b, 8 kHz\n# channels\n>2      beshort&0x01c0  0x0040         \\b, monaural\n>2      beshort&0x01c0  0x0080         \\b, stereo\n>2      beshort&0x01c0  0x00c0         \\b, stereo + center\n>2      beshort&0x01c0  0x0100         \\b, stereo+center+LFE\n>2      beshort&0x01c0  0x0140         \\b, surround\n>2      beshort&0x01c0  0x0180         \\b, surround + LFE\n>2      beshort         &0x01C0        \\b, surround + side\n#>1     byte            ^0x01           \\b, Data Verify\n#>2     byte            &0x02           \\b, Custom Flag\n#>3     byte            &0x20           \\b, Original Stream\n#>3     byte            &0x10           \\b, Home Source\n#>3     byte            &0x08           \\b, Copyrighted\n\n# Live MPEG-4 audio streams (instead of RTP FlexMux)\n0       beshort&0xFFE0  0x56E0         MPEG-4 LOAS\n!:mime\taudio/x-mp4a-latm\n#>1     beshort&0x1FFF  x              \\b, %u byte packet\n>3      byte&0xE0       0x40\n>>4     byte&0x3C       0x04           \\b, single stream\n>>4     byte&0x3C       0x08           \\b, 2 streams\n>>4     byte&0x3C       0x0C           \\b, 3 streams\n>>4     byte            &0x08          \\b, 4 or more streams\n>>4     byte            &0x20          \\b, 8 or more streams\n>3      byte&0xC0       0\n>>4     byte&0x78       0x08           \\b, single stream\n>>4     byte&0x78       0x10           \\b, 2 streams\n>>4     byte&0x78       0x18           \\b, 3 streams\n>>4     byte            &0x20          \\b, 4 or more streams\n>>4     byte            &0x40          \\b, 8 or more streams\n# This magic isn't strong enough (matches plausible ISO-8859-1 text)\n#0       beshort         0x4DE1         MPEG-4 LO-EP audio stream\n#!:mime\taudio/x-mp4a-latm\n\n# Summary: FLI animation format\n# Created by: Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)\n4\tleshort\t\t0xAF11\n# standard FLI always has 320x200 resolution and 8 bit color\n>8\tleshort\t\t320\n>>10\tleshort\t\t200\n>>>12\tleshort\t\t8\t\t\tFLI animation, 320x200x8\n!:mime\tvideo/x-fli\n>>>>6\tleshort\t\tx\t\t\t\\b, %d frames\n# frame speed is multiple of 1/70s\n>>>>16\tleshort\t\tx\t\t\t\\b, %d/70s per frame\n\n# Summary: FLC animation format\n# Created by: Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)\n4\tleshort\t\t0xAF12\n# standard FLC always use 8 bit color\n>12\tleshort\t\t8\t\t\tFLC animation\n!:mime\tvideo/x-flc\n>>8\tleshort\t\tx\t\t\t\\b, %d\n>>10\tleshort\t\tx\t\t\t\\bx%dx8\n>>6\tuleshort\tx\t\t\t\\b, %d frames\n>>16\tuleshort\tx\t\t\t\\b, %dms per frame\n\n# DL animation format\n# XXX - collision with most `mips' magic\n#\n# I couldn't find a real magic number for these, however, this\n# -appears- to work.  Note that it might catch other files, too, so be\n# careful!\n#\n# Note that title and author appear in the two 20-byte chunks\n# at decimal offsets 2 and 22, respectively, but they are XOR'ed with\n# 255 (hex FF)!  The DL format is really bad.\n#\n#0\tbyte\t1\tDL version 1, medium format (160x100, 4 images/screen)\n#!:mime\tvideo/x-unknown\n#>42\tbyte\tx\t- %d screens,\n#>43\tbyte\tx\t%d commands\n#0\tbyte\t2\tDL version 2\n#!:mime\tvideo/x-unknown\n#>1\tbyte\t1\t- large format (320x200,1 image/screen),\n#>1\tbyte\t2\t- medium format (160x100,4 images/screen),\n#>1\tbyte\t>2\t- unknown format,\n#>42\tbyte\tx\t%d screens,\n#>43\tbyte\tx\t%d commands\n# Based on empirical evidence, DL version 3 have several nulls following the\n# \\003.  Most of them start with non-null values at hex offset 0x34 or so.\n#0\tstring\t\\3\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tDL version 3\n\n# iso 13818 transport stream\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)\n# (the following is a little bit restrictive and works fine for a stream\n#  that starts with PAT properly. it won't work for stream data, that is\n#  cut from an input device data right in the middle, but this shouldn't\n#  disturb)\n# syncbyte      8 bit\t0x47\n# error_ind     1 bit\t-\n# payload_start 1 bit\t1\n# priority      1 bit\t-\n# PID          13 bit\t0x0000\n# scrambling    2 bit\t-\n# adaptfld_ctrl 2 bit\t1 or 3\n# conti_count   4 bit\t0\n0\tbelong&0xFF5FFF1F\t0x47400010\tMPEG transport stream data\n>188\tbyte\t\t\t!0x47\t\tCORRUPTED\n\n# DIF digital video file format <mpruett@sgi.com>\n0\tbelong&0xffffff00\t0x1f070000      DIF\n>4\tbyte\t\t\t&0x01\t\t(DVCPRO) movie file\n>4\tbyte\t\t\t^0x01\t\t(DV) movie file\n>3\tbyte\t\t\t&0x80\t\t(PAL)\n>3\tbyte\t\t\t^0x80\t\t(NTSC)\n\n# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>\n0\tbelong\t\t\t0x3026b275\tMicrosoft ASF\n!:mime  video/x-ms-asf\n\n# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>\n0\tstring\t\t\t\\x8aMNG\t\tMNG video data,\n!:mime\tvideo/x-mng\n>4\tbelong\t\t\t!0x0d0a1a0a\tCORRUPTED,\n>4\tbelong\t\t\t0x0d0a1a0a\n>>16    belong\tx\t\t\t\t%ld x\n>>20    belong\tx\t\t\t\t%ld\n\n# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>\n0\tstring\t\t\t\\x8bJNG\t\tJNG video data,\n!:mime\tvideo/x-jng\n>4\tbelong\t\t\t!0x0d0a1a0a\tCORRUPTED,\n>4\tbelong\t\t\t0x0d0a1a0a\n>>16    belong\tx\t\t\t\t%ld x\n>>20    belong\tx\t\t\t\t%ld\n\n# Vivo video (Wolfram Kleff)\n3\tstring\t\t\\x0D\\x0AVersion:Vivo\tVivo video data\n\n# VRML (Virtual Reality Modelling Language)\n0       string/w        #VRML\\ V1.0\\ ascii\tVRML 1 file\n!:mime\tmodel/vrml\n0\tstring/w\t#VRML\\ V2.0\\ utf8\tISO/IEC 14772 VRML 97 file\n!:mime\tmodel/vrml\n\n# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]\n# From Michel Briand <michelbriand@free.fr>\n0\tstring\t\t\\<?xml\\ version=\"\n!:strength +1\n>20\tsearch/1000/cw  \\<!DOCTYPE\\ X3D\t\tX3D (Extensible 3D) model xml text\n!:mime model/x3d\n\n#---------------------------------------------------------------------------\n# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube\n# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03\n#\n0\tstring\t\tHVQM4\t\t%s\n>6\tstring\t\t>\\0\t\tv%s\n>0\tbyte\t\tx\t\tGameCube movie,\n>0x34\tubeshort\tx\t\t%d x\n>0x36\tubeshort\tx\t\t%d,\n>0x26\tubeshort\tx\t\t%dÂµs,\n>0x42\tubeshort\t0\t\tno audio\n>0x42\tubeshort\t>0\t\t%dHz audio\n\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n0\tstring\t\tDVDVIDEO-VTS\tVideo title set,\n>0x21\tbyte\t\tx\t\tv%x\n0\tstring\t\tDVDVIDEO-VMG\tVideo manager,\n>0x21\tbyte\t\tx\t\tv%x\n\n# From: Behan Webster <behanw@websterwood.com>\n# NuppelVideo used by Mythtv (*.nuv)\n# Note: there are two identical stanzas here differing only in the\n# initial string matched. It used to be done with a regex, but we're\n# trying to get rid of those.\n0\tstring\t\tNuppelVideo\tMythTV NuppelVideo\n>12\tstring\t\tx\t\tv%s\n>20\tlelong\t\tx\t\t(%d\n>24\tlelong\t\tx\t\t\\bx%d),\n>36\tstring\t\tP\t\t\\bprogressive,\n>36\tstring\t\tI\t\t\\binterlaced,\n>40\tledouble\tx\t\t\\baspect:%.2f,\n>48\tledouble\tx\t\t\\bfps:%.2f\n0\tstring\t\tMythTV\t\tMythTV NuppelVideo\n>12\tstring\t\tx\t\tv%s\n>20\tlelong\t\tx\t\t(%d\n>24\tlelong\t\tx\t\t\\bx%d),\n>36\tstring\t\tP\t\t\\bprogressive,\n>36\tstring\t\tI\t\t\\binterlaced,\n>40\tledouble\tx\t\t\\baspect:%.2f,\n>48\tledouble\tx\t\t\\bfps:%.2f\n\n#\t\t\t\t\t\tMPEG file\n# MPEG sequences\n# FIXME: This section is from the old magic.mime file and needs integrating with the rest\n0       belong             0x000001BA\n>4      byte               &0x40\n!:mime\tvideo/mp2p\n>4      byte               ^0x40\n!:mime\tvideo/mpeg\n0       belong             0x000001BB\n!:mime\tvideo/mpeg\n0       belong             0x000001B0\n!:mime\tvideo/mp4v-es\n0       belong             0x000001B5\n!:mime\tvideo/mp4v-es\n0       belong             0x000001B3\n!:mime\tvideo/mpv\n0       belong&0xFF5FFF1F  0x47400010\n!:mime\tvideo/mp2t\n0       belong             0x00000001\n>4      byte&0x1F\t   0x07\n!:mime\tvideo/h264\n\n# Type: Bink Video\n# URL:  http://wiki.multimedia.cx/index.php?title=3DBink_Container\n# From: <hoehle@users.sourceforge.net>  2008-07-18\n0\tstring\t\tBIK\tBink Video\n>3\tregex\t\t=[a-z]\trev.%s\n#>4\tulelong\t\tx\tsize %d\n>20\tulelong\t\tx\t\\b, %d\n>24\tulelong\t\tx\t\\bx%d\n>8\tulelong\t\tx\t\\b, %d frames\n>32\tulelong\t\tx\tat rate %d/\n>28\tulelong\t\t>1\t\\b%d\n>40\tulelong\t\t=0\t\\b, no audio\n>40\tulelong\t\t!0\t\\b, %d audio track\n>>40\tulelong\t\t!1\t\\bs\n# follow properties of the first audio track only\n>>48\tuleshort\tx\t%dHz\n>>51\tbyte&0x20\t0\tmono\n>>51\tbyte&0x20\t!0\tstereo\n#>>51\tbyte&0x10\t0\tFFT\n#>>51\tbyte&0x10\t!0\tDCT\n\n# Type:\tNUT Container\n# URL:\thttp://wiki.multimedia.cx/index.php?title=NUT\n# From:\tAdam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\tnut/multimedia\\ container\\0\tNUT multimedia container\n\n#------------------------------------------------------------------------------\n# $File: apl,v 1.6 2009/09/19 16:28:07 christos Exp $\n# apl:  file(1) magic for APL (see also \"pdp\" and \"vax\" for other APL\n#       workspaces)\n#\n0\tlong\t\t0100554\t\tAPL workspace (Ken's original?)\n\n#------------------------------------------------------------------------------\n# $File: apple,v 1.23 2009/09/19 16:28:08 christos Exp $\n# apple:  file(1) magic for Apple file formats\n#\n0\tsearch/1\tFiLeStArTfIlEsTaRt\tbinscii (apple ][) text\n0\tstring\t\t\\x0aGL\t\t\tBinary II (apple ][) data\n0\tstring\t\t\\x76\\xff\t\tSqueezed (apple ][) data\n0\tstring\t\tNuFile\t\t\tNuFile archive (apple ][) data\n0\tstring\t\tN\\xf5F\\xe9l\\xe5\t\tNuFile archive (apple ][) data\n0\tbelong\t\t0x00051600\t\tAppleSingle encoded Macintosh file\n0\tbelong\t\t0x00051607\t\tAppleDouble encoded Macintosh file\n\n# Type: Apple Emulator 2IMG format\n# From: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\t2IMG\tApple ][ 2IMG Disk Image\n>4\tstring\t\tXGS!\t\\b, XGS\n>4\tstring\t\tCTKG\t\\b, Catakig\n>4\tstring\t\tShIm\t\\b, Sheppy's ImageMaker\n>4\tstring\t\tWOOF\t\\b, Sweet 16\n>4\tstring\t\tB2TR\t\\b, Bernie ][ the Rescue\n>4\tstring\t\t!nfc\t\\b, ASIMOV2\n>4\tstring\t\tx\t\\b, Unknown Format\n>0xc\tbyte\t\t00\t\\b, DOS 3.3 sector order\n>>0x10\tbyte\t\t00\t\\b, Volume 254\n>>0x10\tbyte&0x7f\tx\t\\b, Volume %u\n>0xc\tbyte\t\t01\t\\b, ProDOS sector order\n>>0x14\tshort\t\tx\t\\b, %u Blocks\n>0xc\tbyte\t\t02\t\\b, NIB data\n\n# magic for Newton PDA package formats\n# from Ruda Moura <ruda@helllabs.org>\n0\tstring\tpackage0\tNewton package, NOS 1.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n>12\tbelong\t&0x04000000\tRelocation,\n>12\tbelong\t&0x02000000\tUseFasterCompression,\n>16\tbelong\tx\t\tversion %d\n\n0\tstring\tpackage1\tNewton package, NOS 2.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n>12\tbelong\t&0x04000000\tRelocation,\n>12\tbelong\t&0x02000000\tUseFasterCompression,\n>16\tbelong\tx\t\tversion %d\n\n0\tstring\tpackage4\tNewton package,\n>8\tbyte\t8\t\tNOS 1.x,\n>8\tbyte\t9\t\tNOS 2.x,\n>12\tbelong\t&0x80000000\tAutoRemove,\n>12\tbelong\t&0x40000000\tCopyProtect,\n>12\tbelong\t&0x10000000\tNoCompression,\n\n# The following entries for the Apple II are for files that have\n# been transferred as raw binary data from an Apple, without having\n# been encapsulated by any of the above archivers.\n#\n# In general, Apple II formats are hard to identify because Apple DOS\n# and especially Apple ProDOS have strong typing in the file system and\n# therefore programmers never felt much need to include type information\n# in the files themselves.\n#\n# Eric Fischer <enf@pobox.com>\n\n# AppleWorks word processor:\n#\n# This matches the standard tab stops for an AppleWorks file, but if\n# a file has a tab stop set in the first four columns this will fail.\n#\n# The \"O\" is really the magic number, but that's so common that it's\n# necessary to check the tab stops that follow it to avoid false positives.\n\n4       string          O====   AppleWorks word processor data\n>85     byte&0x01       >0      \\b, zoomed\n>90     byte&0x01       >0      \\b, paginated\n>92     byte&0x01       >0      \\b, with mail merge\n#>91    byte            x       \\b, left margin %d\n\n# AppleWorks database:\n#\n# This isn't really a magic number, but it's the closest thing to one\n# that I could find.  The 1 and 2 really mean \"order in which you defined\n# categories\" and \"left to right, top to bottom,\" respectively; the D and R\n# mean that the cursor should move either down or right when you press Return.\n\n#30\tstring\t\t\\x01D\tAppleWorks database data\n#30\tstring\t\t\\x02D\tAppleWorks database data\n#30\tstring\t\t\\x01R\tAppleWorks database data\n#30\tstring\t\t\\x02R\tAppleWorks database data\n\n# AppleWorks spreadsheet:\n#\n# Likewise, this isn't really meant as a magic number.  The R or C means\n# row- or column-order recalculation; the A or M means automatic or manual\n# recalculation.\n\n#131\tstring\t\tRA\tAppleWorks spreadsheet data\n#131\tstring\t\tRM\tAppleWorks spreadsheet data\n#131\tstring\t\tCA\tAppleWorks spreadsheet data\n#131\tstring\t\tCM\tAppleWorks spreadsheet data\n\n# Applesoft BASIC:\n#\n# This is incredibly sloppy, but will be true if the program was\n# written at its usual memory location of 2048 and its first line\n# number is less than 256.  Yuck.\n\n0       belong&0xff00ff 0x80000 Applesoft BASIC program data\n#>2     leshort         x       \\b, first line number %d\n\n# ORCA/EZ assembler:\n# \n# This will not identify ORCA/M source files, since those have\n# some sort of date code instead of the two zero bytes at 6 and 7\n# XXX Conflicts with ELF\n#4       belong&0xff00ffff       0x01000000      ORCA/EZ assembler source data\n#>5      byte                    x               \\b, build number %d\n\n# Broderbund Fantavision\n#\n# I don't know what these values really mean, but they seem to recur.\n# Will they cause too many conflicts?\n\n# Probably :-)\n#2\tbelong&0xFF00FF\t\t0x040008\tFantavision movie data\n\n# Some attempts at images.\n#\n# These are actually just bit-for-bit dumps of the frame buffer, so\n# there's really no reasonably way to distinguish them except for their\n# address (if preserved) -- 8192 or 16384 -- and their length -- 8192\n# or, occasionally, 8184.\n#\n# Nevertheless this will manage to catch a lot of images that happen\n# to have a solid-colored line at the bottom of the screen.\n\n# GRR: Magic too weak\n#8144\tstring\t\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\tApple II image with white background\n#8144\tstring\t\\x55\\x2A\\x55\\x2A\\x55\\x2A\\x55\\x2A\tApple II image with purple background\n#8144\tstring\t\\x2A\\x55\\x2A\\x55\\x2A\\x55\\x2A\\x55\tApple II image with green background\n#8144\tstring\t\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\tApple II image with blue background\n#8144\tstring\t\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\\xAA\\xD5\tApple II image with orange background\n\n# Beagle Bros. Apple Mechanic fonts\n\n0\tbelong&0xFF00FFFF\t0x6400D000\tApple Mechanic font\n\n# Apple Universal Disk Image Format (UDIF) - dmg files.\n# From Johan Gade.\n# These entries are disabled for now until we fix the following issues.\n#\n# Note there might be some problems with the \"VAX COFF executable\" \n# entry. Note this entry should be placed before the mac filesystem section, \n# particularly the \"Apple Partition data\" entry.\n#\n# The intended meaning of these tests is, that the file is only of the \n# specified type if both of the lines are correct - i.e. if the first\n# line matches and the second doesn't then it is not of that type.\n#\n#0\tlong\t0x7801730d\n#>4\tlong\t0x62626060\tUDIF read-only zlib-compressed image (UDZO)\n#\n# Note that this entry is recognized correctly by the \"Apple Partition \n# data\" entry - however since this entry is more specific - this\n# information seems to be more useful.\n#0\tlong\t0x45520200\n#>0x410\tstring\tdisk\\ image\tUDIF read/write image (UDRW)\n\n# From: Toby Peterson <toby@apple.com>\n0\tstring\tbplist00\tApple binary property list\n\n# Apple binary property list (bplist)\n#  Assumes version bytes are hex.\n#  Provides content hints for version 0 files. Assumes that the root\n#  object is the first object (true for CoreFoundation implementation).\n# From: David Remahl <dremahl@apple.com>\n0\t\tstring\tbplist\n>6\t\tbyte\tx\t\\bCoreFoundation binary property list data, version 0x%c\n>>7\t\tbyte\tx\t\\b%c\n>6\t\tstring\t\t00\t\t\\b\n>>8\t\tbyte&0xF0\t0x00\t\\b\n>>>8\tbyte&0x0F\t0x00\t\\b, root type: null\n>>>8\tbyte&0x0F\t0x08\t\\b, root type: false boolean\n>>>8\tbyte&0x0F\t0x09\t\\b, root type: true boolean\n>>8\t\tbyte&0xF0\t0x10\t\\b, root type: integer\n>>8\t\tbyte&0xF0\t0x20\t\\b, root type: real\n>>8\t\tbyte&0xF0\t0x30\t\\b, root type: date\n>>8\t\tbyte&0xF0\t0x40    \\b, root type: data\n>>8\t\tbyte&0xF0\t0x50\t\\b, root type: ascii string\n>>8\t\tbyte&0xF0\t0x60\t\\b, root type: unicode string\n>>8\t\tbyte&0xF0\t0x80\t\\b, root type: uid (CORRUPT)\n>>8\t\tbyte&0xF0\t0xa0\t\\b, root type: array\n>>8\t\tbyte&0xF0\t0xd0\t\\b, root type: dictionary\n\n# Apple/NeXT typedstream data\n#  Serialization format used by NeXT and Apple for various\n#  purposes in YellowStep/Cocoa, including some nib files.\n# From: David Remahl <dremahl@apple.com>\n2\t\tstring\t\ttypedstream\tNeXT/Apple typedstream data, big endian\n>0\t\tbyte\t\tx\t\t\\b, version %hhd\n>0\t\tbyte\t\t<5\t\t\\b\n>>13\tbyte\t\t0x81\t\\b\n>>>14\tubeshort\tx\t\t\\b, system %hd\n2\t\tstring\t\tstreamtyped NeXT/Apple typedstream data, little endian\n>0\t\tbyte\t\tx\t\t\\b, version %hhd\n>0\t\tbyte\t\t<5\t\t\\b\n>>13\tbyte\t\t0x81\t\\b\n>>>14\tuleshort\tx\t\t\\b, system %hd\n\n#------------------------------------------------------------------------------\n# CAF: Apple CoreAudio File Format\n#\n# Container format for high-end audio purposes.\n# From: David Remahl <dremahl@apple.com>\n#\n0\tstring\t\tcaff\t\tCoreAudio Format audio file\n>4\tbeshort\t\t<10\t\tversion %d\n>6\tbeshort\t\tx\n\n\n#------------------------------------------------------------------------------\n# Keychain database files\n0\tstring\t\tkych\t\tMac OS X Keychain File\n\n#------------------------------------------------------------------------------\n# Code Signing related file types\n0\tbelong\t\t0xfade0c00\tMac OS X Code Requirement\n>8\tbelong\t\t1\t\t\t(opExpr)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0c01\tMac OS X Code Requirement Set\n>8\tbelong\t\t>1\t\t\tcontaining %d items\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0c02\tMac OS X Code Directory\n>8\tbelong\t\tx\t\t\tversion %x\n>12\tbelong\t\t>0\t\t\tflags 0x%x\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0cc0\tMac OS X Detached Code Signature (non-executable)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n0\tbelong\t\t0xfade0cc1\tMac OS X Detached Code Signature\n>8\tbelong\t\t>1\t\t\t(%d elements)\n>4\tbelong\t\tx\t\t\t- %d bytes\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# .vdi\n4\tstring innotek\\ VirtualBox\\ Disk\\ Image %s\n\n#------------------------------------------------------------------------------\n# $File: applix,v 1.5 2009/09/19 16:28:08 christos Exp $\n# applix:  file(1) magic for Applixware\n# From: Peter Soos <sp@osb.hu>\n#\n0\tstring\t\t*BEGIN\t\tApplixware\n>7\tstring\t\tWORDS\t\t\tWords Document\n>7\tstring\t\tGRAPHICS\t\tGraphic\n>7\tstring\t\tRASTER\t\t\tBitmap\n>7\tstring\t\tSPREADSHEETS\t\tSpreadsheet\n>7\tstring\t\tMACRO\t\t\tMacro\n>7\tstring\t\tBUILDER\t\t\tBuilder Object\n\n#------------------------------------------------------------------------------\n# $File: archive,v 1.55 2009/12/04 15:00:47 christos Exp $\n# archive:  file(1) magic for archive formats (see also \"msdos\" for self-\n#           extracting compressed archives)\n#\n# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.\n# pre-POSIX \"tar\" archives are handled in the C code.\n\n# POSIX tar archives\n257\tstring\t\tustar\\0\t\tPOSIX tar archive\n!:mime\tapplication/x-tar # encoding: posix\n257\tstring\t\tustar\\040\\040\\0\tGNU tar archive\n!:mime\tapplication/x-tar # encoding: gnu\n\n# cpio archives\n#\n# Yes, the top two \"cpio archive\" formats *are* supposed to just be \"short\".\n# The idea is to indicate archives produced on machines with the same\n# byte order as the machine running \"file\" with \"cpio archive\", and\n# to indicate archives produced on machines with the opposite byte order\n# from the machine running \"file\" with \"byte-swapped cpio archive\".\n#\n# The SVR4 \"cpio(4)\" hints that there are additional formats, but they\n# are defined as \"short\"s; I think all the new formats are\n# character-header formats and thus are strings, not numbers.\n0\tshort\t\t070707\t\tcpio archive\n!:mime\tapplication/x-cpio\n0\tshort\t\t0143561\t\tbyte-swapped cpio archive\n!:mime\tapplication/x-cpio # encoding: swapped\n0\tstring\t\t070707\t\tASCII cpio archive (pre-SVR4 or odc)\n0\tstring\t\t070701\t\tASCII cpio archive (SVR4 with no CRC)\n0\tstring\t\t070702\t\tASCII cpio archive (SVR4 with CRC)\n\n# Debian package (needs to go before regular portable archives)\n#\n0\tstring\t\t=!<arch>\\ndebian\n!:mime\tapplication/x-debian-package\n>8\tstring\t\tdebian-split\tpart of multipart Debian package\n>8\tstring\t\tdebian-binary\tDebian binary package\n>8\tstring\t\t!debian\n>68\tstring\t\t>\\0\t\t(format %s)\n# These next two lines do not work, because a bzip2 Debian archive\n# still uses gzip for the control.tar (first in the archive).  Only\n# data.tar varies, and the location of its filename varies too.\n# file/libmagic does not current have support for ascii-string based\n# (offsets) as of 2005-09-15.\n#>81\tstring\t\tbz2\t\t\\b, uses bzip2 compression\n#>84\tstring\t\tgz\t\t\\b, uses gzip compression\n#>136\tledate\t\tx\t\tcreated: %s\n\n# other archives\n0\tlong\t\t0177555\t\tvery old archive\n0\tshort\t\t0177555\t\tvery old PDP-11 archive\n0\tlong\t\t0177545\t\told archive\n0\tshort\t\t0177545\t\told PDP-11 archive\n0\tlong\t\t0100554\t\tapl workspace\n0\tstring\t\t=<ar>\t\tarchive\n!:mime\tapplication/x-archive\n\n# MIPS archive (needs to go before regular portable archives)\n#\n0\tstring\t=!<arch>\\n__________E\tMIPS archive\n>20\tstring\tU\t\t\twith MIPS Ucode members\n>21\tstring\tL\t\t\twith MIPSEL members\n>21\tstring\tB\t\t\twith MIPSEB members\n>19\tstring\tL\t\t\tand an EL hash table\n>19\tstring\tB\t\t\tand an EB hash table\n>22\tstring\tX\t\t\t-- out of date\n\n0\tsearch/1\t-h-\t\tSoftware Tools format archive text\n\n#\n# XXX - why are there multiple <ar> thingies?  Note that 0x213c6172 is\n# \"!<ar\", so, for new-style (4.xBSD/SVR2andup) archives, we have:\n#\n# 0\tstring\t\t=!<arch>\t\tcurrent ar archive\n# 0\tlong\t\t0x213c6172\tarchive file\n#\n# and for SVR1 archives, we have:\n#\n# 0\tstring\t\t\\<ar>\t\tSystem V Release 1 ar archive\n# 0\tstring\t\t=<ar>\t\tarchive\n#\n# XXX - did Aegis really store shared libraries, breakpointed modules,\n# and absolute code program modules in the same format as new-style\n# \"ar\" archives?\n#\n0\tstring\t\t=!<arch>\t\tcurrent ar archive\n!:mime\tapplication/x-archive\n>8\tstring\t\t__.SYMDEF\trandom library\n>0\tbelong\t\t=65538\t\t- pre SR9.5\n>0\tbelong\t\t=65539\t\t- post SR9.5\n>0\tbeshort\t\t2\t\t- object archive\n>0\tbeshort\t\t3\t\t- shared library module\n>0\tbeshort\t\t4\t\t- debug break-pointed module\n>0\tbeshort\t\t5\t\t- absolute code program module\n0\tstring\t\t\\<ar>\t\tSystem V Release 1 ar archive\n0\tstring\t\t=<ar>\t\tarchive\n#\n# XXX - from \"vax\", which appears to collect a bunch of byte-swapped\n# thingies, to help you recognize VAX files on big-endian machines;\n# with \"leshort\", \"lelong\", and \"string\", that's no longer necessary....\n#\n0\tbelong\t\t0x65ff0000\tVAX 3.0 archive\n0\tbelong\t\t0x3c61723e\tVAX 5.0 archive\n#\n0\tlong\t\t0x213c6172\tarchive file\n0\tlelong\t\t0177555\t\tvery old VAX archive\n0\tleshort\t\t0177555\t\tvery old PDP-11 archive\n#\n# XXX - \"pdp\" claims that 0177545 can have an __.SYMDEF member and thus\n# be a random library (it said 0xff65 rather than 0177545).\n#\n0\tlelong\t\t0177545\t\told VAX archive\n>8\tstring\t\t__.SYMDEF\trandom library\n0\tleshort\t\t0177545\t\told PDP-11 archive\n>8\tstring\t\t__.SYMDEF\trandom library\n#\n# From \"pdp\" (but why a 4-byte quantity?)\n#\n0\tlelong\t\t0x39bed\t\tPDP-11 old archive\n0\tlelong\t\t0x39bee\t\tPDP-11 4.0 archive\n\n# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)\n#\n# The first byte is the magic (0x1a), byte 2 is the compression type for\n# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS\n# filename of the first file (null terminated).  Since some types collide\n# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),\n# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.\n0\tlelong&0x8080ffff\t0x0000081a\tARC archive data, dynamic LZW\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000091a\tARC archive data, squashed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000021a\tARC archive data, uncompressed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000031a\tARC archive data, packed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000041a\tARC archive data, squeezed\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000061a\tARC archive data, crunched\n!:mime\tapplication/x-arc\n# [JW] stuff taken from idarc, obviously ARC successors:\n0\tlelong&0x8080ffff\t0x00000a1a\tPAK archive data\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000141a\tARC+ archive data\n!:mime\tapplication/x-arc\n0\tlelong&0x8080ffff\t0x0000481a\tHYP archive data\n!:mime\tapplication/x-arc\n\n# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)\n# I can't create either SPARK or ArcFS archives so I have not tested this stuff\n# [GRR:  the original entries collide with ARC, above; replaced with combined\n#  version (not tested)]\n#0\tbyte\t\t0x1a\t\tRISC OS archive (spark format)\n0\tstring\t\t\\032archive\tRISC OS archive (ArcFS format)\n0       string          Archive\\000     RISC OS archive (ArcFS format)\n\n# All these were taken from idarc, many could not be verified. Unfortunately,\n# there were many low-quality sigs, i.e. easy to trigger false positives.\n# Please notify me of any real-world fishy/ambiguous signatures and I'll try\n# to get my hands on the actual archiver and see if I find something better. [JW]\n# probably many can be enhanced by finding some 0-byte or control char near the start\n\n# idarc calls this Crush/Uncompressed... *shrug*\n0\tstring\tCRUSH Crush archive data\n# Squeeze It (.sqz)\n0\tstring\tHLSQZ Squeeze It archive data\n# SQWEZ\n0\tstring\tSQWEZ SQWEZ archive data\n# HPack (.hpk)\n0\tstring\tHPAK HPack archive data\n# HAP\n0\tstring\t\\x91\\x33HF HAP archive data\n# MD/MDCD\n0\tstring\tMDmd MDCD archive data\n# LIM\n0\tstring\tLIM\\x1a LIM archive data\n# SAR\n3\tstring\tLH5 SAR archive data\n# BSArc/BS2\n0\tstring\t\\212\\3SB \\0 BSArc/BS2 archive data\n# MAR\n2\tstring\t=-ah MAR archive data\n# ACB\n0\tbelong&0x00f800ff\t0x00800000 ACB archive data\n# CPZ\n# TODO, this is what idarc says: 0\tstring\t\\0\\0\\0 CPZ archive data\n# JRC\n0\tstring\tJRchive JRC archive data\n# Quantum\n0\tstring\tDS\\0 Quantum archive data\n# ReSOF\n0\tstring\tPK\\3\\6 ReSOF archive data\n# QuArk\n0\tstring\t7\\4 QuArk archive data\n# YAC\n14\tstring\tYC YAC archive data\n# X1\n0\tstring\tX1 X1 archive data\n0\tstring\tXhDr X1 archive data\n# CDC Codec (.dqt)\n0\tbelong&0xffffe000\t0x76ff2000 CDC Codec archive data\n# AMGC\n0\tstring\t\\xad6\" AMGC archive data\n# NuLIB\n0\tstring\tNÃµFÃ©lÃ¥ NuLIB archive data\n# PakLeo\n0\tstring\tLEOLZW PAKLeo archive data\n# ChArc\n0\tstring\tSChF ChArc archive data\n# PSA\n0\tstring\tPSA PSA archive data\n# CrossePAC\n0\tstring\tDSIGDCC CrossePAC archive data\n# Freeze\n0\tstring\t\\x1f\\x9f\\x4a\\x10\\x0a Freeze archive data\n# KBoom\n0\tstring\tÂ¨MPÂ¨ KBoom archive data\n# NSQ, must go after CDC Codec\n0\tstring\t\\x76\\xff NSQ archive data\n# DPA\n0\tstring\tDirk\\ Paehl DPA archive data\n# BA\n# TODO: idarc says \"bytes 0-2 == bytes 3-5\"\n# TTComp\n0\tstring\t\\0\\6 TTComp archive data\n# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?\n0\tstring\tESP ESP archive data\n# ZPack\n0\tstring\t\\1ZPK\\1 ZPack archive data\n# Sky\n0\tstring\t\\xbc\\x40 Sky archive data\n# UFA\n0\tstring\tUFA UFA archive data\n# Dry\n0\tstring\t=-H2O DRY archive data\n# FoxSQZ\n0\tstring\tFOXSQZ FoxSQZ archive data\n# AR7\n0\tstring\t,AR7 AR7 archive data\n# PPMZ\n0\tstring\tPPMZ PPMZ archive data\n# MS Compress\n4\tstring\t\\x88\\xf0\\x27 MS Compress archive data\n# updated by Joerg Jenderek\n>9\tstring\t\\0\t\t\n>>0\tstring\tKWAJ\t\t\n>>>7\tstring\t\\321\\003\tMS Compress archive data\n>>>>14\tulong\t>0\t\t\\b, original size: %ld bytes\n>>>>18\t\tubyte\t>0x65  \t\n>>>>>18\t\tstring\tx    \t\\b, was %.8s\n>>>>>(10.b-4)\tstring\tx    \t\\b.%.3s\n# MP3 (archiver, not lossy audio compression)\n0\tstring\tMP3\\x1a MP3-Archiver archive data\n# ZET\n0\tstring\tOZÃ ZET archive data\n# TSComp\n0\tstring\t\\x65\\x5d\\x13\\x8c\\x08\\x01\\x03\\x00 TSComp archive data\n# ARQ\n0\tstring\tgW\\4\\1 ARQ archive data\n# Squash\n3\tstring\tOctSqu Squash archive data\n# Terse\n0\tstring\t\\5\\1\\1\\0 Terse archive data\n# PUCrunch\n0\tstring\t\\x01\\x08\\x0b\\x08\\xef\\x00\\x9e\\x32\\x30\\x36\\x31 PUCrunch archive data\n# UHarc\n0\tstring\tUHA UHarc archive data\n# ABComp\n0\tstring\t\\2AB ABComp archive data\n0\tstring\t\\3AB2 ABComp archive data\n# CMP\n0\tstring\tCO\\0 CMP archive data\n# Splint\n0\tstring\t\\x93\\xb9\\x06 Splint archive data\n# InstallShield\n0\tstring\t \\x13\\x5d\\x65\\x8c InstallShield Z archive Data\n# Gather\n1\tstring\tGTH Gather archive data\n# BOA\n0\tstring\tBOA BOA archive data\n# RAX\n0\tstring\tULEB\\xa RAX archive data\n# Xtreme\n0\tstring\tULEB\\0 Xtreme archive data\n# Pack Magic\n0\tstring\t@Ã¢\\1\\0 Pack Magic archive data\n# BTS\n0\tbelong&0xfeffffff\t0x1a034465 BTS archive data\n# ELI 5750\n0\tstring\tOra\\  ELI 5750 archive data\n# QFC\n0\tstring\t\\x1aFC\\x1a QFC archive data\n0\tstring\t\\x1aQF\\x1a QFC archive data\n# PRO-PACK\n0\tstring\tRNC PRO-PACK archive data\n# 777\n0\tstring\t777 777 archive data\n# LZS221\n0\tstring\tsTaC LZS221 archive data\n# HPA\n0\tstring\tHPA HPA archive data\n# Arhangel\n0\tstring\tLG Arhangel archive data\n# EXP1, uses bzip2\n0\tstring\t0123456789012345BZh EXP1 archive data\n# IMP\n0\tstring\tIMP\\xa IMP archive data\n# NRV\n0\tstring\t\\x00\\x9E\\x6E\\x72\\x76\\xFF NRV archive data\n# Squish\n0\tstring\t\\x73\\xb2\\x90\\xf4 Squish archive data\n# Par\n0\tstring\tPHILIPP Par archive data\n0\tstring\tPAR Par archive data\n# HIT\n0\tstring\tUB HIT archive data\n# SBX\n0\tbelong&0xfffff000\t0x53423000 SBX archive data\n# NaShrink\n0\tstring\tNSK NaShrink archive data\n# SAPCAR\n0\tstring\t#\\ CAR\\ archive\\ header SAPCAR archive data\n0\tstring\tCAR\\ 2.00RG SAPCAR archive data\n# Disintegrator\n0\tstring\tDST Disintegrator archive data\n# ASD\n0\tstring\tASD ASD archive data\n# InstallShield CAB\n0\tstring\tISc( InstallShield CAB\n# TOP4\n0\tstring\tT4\\x1a TOP4 archive data\n# BatComp left out: sig looks like COM executable\n# so TODO: get real 4dos batcomp file and find sig\n# BlakHole\n0\tstring\tBH\\5\\7 BlakHole archive data\n# BIX\n0\tstring\tBIX0 BIX archive data\n# ChiefLZA\n0\tstring\tChfLZ ChiefLZA archive data\n# Blink\n0\tstring\tBlink Blink archive data\n# Logitech Compress\n0\tstring\t\\xda\\xfa Logitech Compress archive data\n# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)\n1\tstring\t(C)\\ STEPANYUK ARS-Sfx archive data\n# AKT/AKT32\n0\tstring\tAKT32 AKT32 archive data\n0\tstring\tAKT AKT archive data\n# NPack\n0\tstring\tMSTSM NPack archive data\n# PFT\n0\tstring\t\\0\\x50\\0\\x14 PFT archive data\n# SemOne\n0\tstring\tSEM SemOne archive data\n# PPMD\n0\tstring\t\\x8f\\xaf\\xac\\x84 PPMD archive data\n# FIZ\n0\tstring\tFIZ FIZ archive data\n# MSXiE\n0\tbelong&0xfffff0f0\t0x4d530000 MSXiE archive data\n# DeepFreezer\n0\tbelong&0xfffffff0\t0x797a3030 DeepFreezer archive data\n# DC\n0\tstring\t=<DC- DC archive data\n# TPac\n0\tstring\t\\4TPAC\\3 TPac archive data\n# Ai\n0\tstring\tAi\\1\\1\\0 Ai archive data\n0\tstring\tAi\\1\\0\\0 Ai archive data\n# Ai32\n0\tstring\tAi\\2\\0 Ai32 archive data\n0\tstring\tAi\\2\\1 Ai32 archive data\n# SBC\n0\tstring\tSBC SBC archive data\n# Ybs\n0\tstring\tYBS Ybs archive data\n# DitPack\n0\tstring\t\\x9e\\0\\0 DitPack archive data\n# DMS\n0\tstring\tDMS! DMS archive data\n# EPC\n0\tstring\t\\x8f\\xaf\\xac\\x8c EPC archive data\n# VSARC\n0\tstring\tVS\\x1a VSARC archive data\n# PDZ\n0\tstring\tPDZ PDZ archive data\n# ReDuq\n0\tstring\trdqx ReDuq archive data\n# GCA\n0\tstring\tGCAX GCA archive data\n# PPMN\n0\tstring\tpN PPMN archive data\n# WinImage\n3\tstring\tWINIMAGE WinImage archive data\n# Compressia\n0\tstring\tCMP0CMP Compressia archive data\n# UHBC\n0\tstring\tUHB UHBC archive data\n# WinHKI\n0\tstring\t\\x61\\x5C\\x04\\x05 WinHKI archive data\n# WWPack data file\n0\tstring\tWWP WWPack archive data\n# BSN (BSA, PTS-DOS)\n0\tstring\t\\xffBSG BSN archive data\n1\tstring\t\\xffBSG BSN archive data\n3\tstring\t\\xffBSG BSN archive data\n1\tstring\t\\0\\xae\\2 BSN archive data\n1\tstring\t\\0\\xae\\3 BSN archive data\n1\tstring\t\\0\\xae\\7 BSN archive data\n# AIN\n0\tstring\t\\x33\\x18 AIN archive data\n0\tstring\t\\x33\\x17 AIN archive data\n# XPA32\n0\tstring\txpa\\0\\1 XPA32 archive data\n# SZip (TODO: doesn't catch all versions)\n0\tstring\tSZ\\x0a\\4 SZip archive data\n# XPack DiskImage\n0\tstring\tjm XPack DiskImage archive data\n# XPack Data\n0\tstring\txpa XPack archive data\n# XPack Single Data\n0\tstring\tÃ\\ jm XPack single archive data\n\n# TODO: missing due to unknown magic/magic at end of file:\n#DWC\n#ARG\n#ZAR\n#PC/3270\n#InstallIt\n#RKive\n#RK\n#XPack Diskimage\n\n# These were inspired by idarc, but actually verified\n# Dzip archiver (.dz)\n0\tstring\tDZ Dzip archive data\n>2\tbyte\tx \\b, version %i\n>3\tbyte\tx \\b.%i\n# ZZip archiver (.zz)\n0\tstring\tZZ\\ \\0\\0 ZZip archive data\n0\tstring\tZZ0 ZZip archive data\n# PAQ archiver (.paq)\n0\tstring\t\\xaa\\x40\\x5f\\x77\\x1f\\xe5\\x82\\x0d PAQ archive data\n0\tstring\tPAQ PAQ archive data\n>3\tbyte&0xf0\t0x30\n>>3\tbyte\tx (v%c)\n# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)\n0xe\tstring\t\\x1aJar\\x1b JAR (ARJ Software, Inc.) archive data\n0\tstring\tJARCS JAR (ARJ Software, Inc.) archive data\n\n# ARJ archiver (jason@jarthur.Claremont.EDU)\n0\tleshort\t\t0xea60\t\tARJ archive data\n!:mime\tapplication/x-arj\n>5\tbyte\t\tx\t\t\\b, v%d,\n>8\tbyte\t\t&0x04\t\tmulti-volume,\n>8\tbyte\t\t&0x10\t\tslash-switched,\n>8\tbyte\t\t&0x20\t\tbackup,\n>34\tstring\t\tx\t\toriginal name: %s,\n>7\tbyte\t\t0\t\tos: MS-DOS\n>7\tbyte\t\t1\t\tos: PRIMOS\n>7\tbyte\t\t2\t\tos: Unix\n>7\tbyte\t\t3\t\tos: Amiga\n>7\tbyte\t\t4\t\tos: Macintosh\n>7\tbyte\t\t5\t\tos: OS/2\n>7\tbyte\t\t6\t\tos: Apple ][ GS\n>7\tbyte\t\t7\t\tos: Atari ST\n>7\tbyte\t\t8\t\tos: NeXT\n>7\tbyte\t\t9\t\tos: VAX/VMS\n>3\tbyte\t\t>0\t\t%d]\n# [JW] idarc says this is also possible\n2\tleshort\t\t0xea60\t\tARJ archive data\n\n# HA archiver (Greg Roelofs, newt@uchicago.edu)\n# This is a really bad format. A file containing HAWAII will match this...\n#0\tstring\t\tHA\t\tHA archive data,\n#>2\tleshort\t\t=1\t\t1 file,\n#>2\tleshort\t\t>1\t\t%u files,\n#>4\tbyte&0x0f\t=0\t\tfirst is type CPY\n#>4\tbyte&0x0f\t=1\t\tfirst is type ASC\n#>4\tbyte&0x0f\t=2\t\tfirst is type HSC\n#>4\tbyte&0x0f\t=0x0e\t\tfirst is type DIR\n#>4\tbyte&0x0f\t=0x0f\t\tfirst is type SPECIAL\n# suggestion: at least identify small archives (<1024 files)\n0  belong&0xffff00fc 0x48410000 HA archive data\n>2\tleshort\t\t=1\t\t1 file,\n>2\tleshort\t\t>1\t\t%u files,\n>4\tbyte&0x0f\t=0\t\tfirst is type CPY\n>4\tbyte&0x0f\t=1\t\tfirst is type ASC\n>4\tbyte&0x0f\t=2\t\tfirst is type HSC\n>4\tbyte&0x0f\t=0x0e\t\tfirst is type DIR\n>4\tbyte&0x0f\t=0x0f\t\tfirst is type SPECIAL\n\n# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)\n0\tstring\t\tHPAK\t\tHPACK archive data\n\n# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net\n0\tstring\t\t\\351,\\001JAM\\ \t\tJAM archive,\n>7\tstring\t\t>\\0\t\t\tversion %.4s\n>0x26\tbyte\t\t=0x27\t\t\t-\n>>0x2b\tstring          >\\0\t\t\tlabel %.11s,\n>>0x27\tlelong\t\tx\t\t\tserial %08x,\n>>0x36\tstring\t\t>\\0\t\t\tfstype %.8s\n\n# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)\n2\tstring\t\t-lh0-\t\tLHarc 1.x/ARX archive data [lh0]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lh1-\t\tLHarc 1.x/ARX archive data [lh1]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lz4-\t\tLHarc 1.x archive data [lz4]\n!:mime\tapplication/x-lharc\n2\tstring\t\t-lz5-\t\tLHarc 1.x archive data [lz5]\n!:mime\tapplication/x-lharc\n#\t[never seen any but the last; -lh4- reported in comp.compression:]\n2\tstring\t\t-lzs-\t\tLHa/LZS archive data [lzs]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh\\40-\t\tLHa 2.x? archive data [lh ]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lhd-\t\tLHa 2.x? archive data [lhd]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh2-\t\tLHa 2.x? archive data [lh2]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh3-\t\tLHa 2.x? archive data [lh3]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh4-\t\tLHa (2.x) archive data [lh4]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh5-\t\tLHa (2.x) archive data [lh5]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh6-\t\tLHa (2.x) archive data [lh6]\n!:mime\tapplication/x-lha\n2\tstring\t\t-lh7-\t\tLHa (2.x)/LHark archive data [lh7]\n!:mime\tapplication/x-lha\n>20\tbyte\t\tx\t\t- header level %d\n# taken from idarc [JW]\n2   string      -lZ         PUT archive data\n2   string      -lz         LZS archive data \n2   string      -sw1-       Swag archive data\n\n# RAR archiver (Greg Roelofs, newt@uchicago.edu)\n0\tstring\t\tRar!\t\tRAR archive data,\n!:mime\tapplication/x-rar\n>44\tbyte\t\tx\t\tv%0x,\n>10\tbyte\t\t>0\t\tflags:\n>>10\tbyte\t\t&0x01\t\tArchive volume,\n>>10\tbyte\t\t&0x02\t\tCommented,\n>>10\tbyte\t\t&0x04\t\tLocked,\n>>10\tbyte\t\t&0x08\t\tSolid,\n>>10\tbyte\t\t&0x20\t\tAuthenticated,\n>35\tbyte\t\t0\t\tos: MS-DOS\n>35\tbyte\t\t1\t\tos: OS/2\n>35\tbyte\t\t2\t\tos: Win32\n>35\tbyte\t\t3\t\tos: Unix\n# some old version? idarc says:\n0   string      RE\\x7e\\x5e  RAR archive data\n\n# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)\n0\tstring\t\tSQSH\t\tsquished archive data (Acorn RISCOS)\n\n# UC2 archiver (Greg Roelofs, newt@uchicago.edu)\n# [JW] see exe section for self-extracting version\n0\tstring\t\tUC2\\x1a\t\tUC2 archive data\n\n# PKZIP multi-volume archive\n0\tstring\t\tPK\\x07\\x08PK\\x03\\x04\tZip multi-volume archive data, at least PKZIP v2.50 to extract\n!:mime\tapplication/zip\n\n# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)\n0\tstring\t\tPK\\003\\004\n>30\tubelong\t\t!0x6d696d65\n>>4\tbyte\t\t0x00\t\tZip archive data\n!:mime\tapplication/zip\n>>4\tbyte\t\t0x09\t\tZip archive data, at least v0.9 to extract\n!:mime\tapplication/zip\n>>4\tbyte\t\t0x0a\t\tZip archive data, at least v1.0 to extract\n!:mime\tapplication/zip\n>>4\tbyte\t\t0x0b\t\tZip archive data, at least v1.1 to extract\n!:mime\tapplication/zip\n>>0x161\tstring\t\tWINZIP          Zip archive data, WinZIP self-extracting\n!:mime\tapplication/zip\n>>4\tbyte\t\t0x14\t\tZip archive data, at least v2.0 to extract\n!:mime\tapplication/zip\n\n# OpenOffice.org / KOffice / StarOffice documents\n# Listed here because they ARE zip files\n#\n# From: Abel Cheung <abel@oaka.org>\n>30\tstring\t\tmimetype\n\n# KOffice (1.2 or above) formats\n>>50\tstring\tvnd.kde.\t\tKOffice (>=1.2)\n>>>58\tstring\tkarbon\t\t\tKarbon document\n>>>58\tstring\tkchart\t\t\tKChart document\n>>>58\tstring\tkformula\t\tKFormula document\n>>>58\tstring\tkivio\t\t\tKivio document\n>>>58\tstring\tkontour\t\t\tKontour document\n>>>58\tstring\tkpresenter\t\tKPresenter document\n>>>58\tstring\tkspread\t\t\tKSpread document\n>>>58\tstring\tkword\t\t\tKWord document\n\n# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)\n>>50\tstring\tvnd.sun.xml.\t\tOpenOffice.org 1.x\n>>>62\tstring\twriter\t\t\tWriter\n>>>>68\tbyte\t!0x2e\t\t\tdocument\n>>>>68\tstring\t.template\t\ttemplate\n>>>>68\tstring\t.global\t\t\tglobal document\n>>>62\tstring\tcalc\t\t\tCalc\n>>>>66\tbyte\t!0x2e\t\t\tspreadsheet\n>>>>66\tstring\t.template\t\ttemplate\n>>>62\tstring\tdraw\t\t\tDraw\n>>>>66\tbyte\t!0x2e\t\t\tdocument\n>>>>66\tstring\t.template\t\ttemplate\n>>>62\tstring\timpress\t\t\tImpress\n>>>>69\tbyte\t!0x2e\t\t\tpresentation\n>>>>69\tstring\t.template\t\ttemplate\n>>>62\tstring\tmath\t\t\tMath document\n>>>62\tstring\tbase\t\t\tDatabase file\n\n# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)\n# http://lists.oasis-open.org/archives/office/200505/msg00006.html\n>>50\tstring\tvnd.oasis.opendocument.\tOpenDocument\n>>>73\tstring\ttext\n>>>>77\tbyte\t!0x2d\t\t\tText\n!:mime\tapplication/vnd.oasis.opendocument.text\n>>>>77\tstring\t-template\t\tText Template\n!:mime\tapplication/vnd.oasis.opendocument.text-template\n>>>>77\tstring\t-web\t\t\tHTML Document Template\n!:mime\tapplication/vnd.oasis.opendocument.text-web\n>>>>77\tstring\t-master\t\t\tMaster Document\n!:mime\tapplication/vnd.oasis.opendocument.text-master\n>>>73\tstring\tgraphics\n>>>>81\tbyte\t!0x2d\t\t\tDrawing\n!:mime\tapplication/vnd.oasis.opendocument.graphics\n>>>>81\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.graphics-template\n>>>73\tstring\tpresentation\n>>>>85\tbyte\t!0x2d\t\t\tPresentation\n!:mime\tapplication/vnd.oasis.opendocument.presentation\n>>>>85\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.presentation-template\n>>>73\tstring\tspreadsheet\n>>>>84\tbyte\t!0x2d\t\t\tSpreadsheet\n!:mime\tapplication/vnd.oasis.opendocument.spreadsheet\n>>>>84\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.spreadsheet-template\n>>>73\tstring\tchart\n>>>>78\tbyte\t!0x2d\t\t\tChart\n!:mime\tapplication/vnd.oasis.opendocument.chart\n>>>>78\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.chart-template\n>>>73\tstring\tformula\n>>>>80\tbyte\t!0x2d\t\t\tFormula\n!:mime\tapplication/vnd.oasis.opendocument.formula\n>>>>80\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.formula-template\n>>>73\tstring\tdatabase\t\tDatabase\n!:mime\tapplication/vnd.oasis.opendocument.database\n>>>73\tstring\timage\n>>>>78\tbyte\t!0x2d\t\t\tImage\n!:mime\tapplication/vnd.oasis.opendocument.image\n>>>>78\tstring\t-template\t\tTemplate\n!:mime\tapplication/vnd.oasis.opendocument.image-template\n\n# Zoo archiver\n20\tlelong\t\t0xfdc4a7dc\tZoo archive data\n!:mime\tapplication/x-zoo\n>4\tbyte\t\t>48\t\t\\b, v%c.\n>>6\tbyte\t\t>47\t\t\\b%c\n>>>7\tbyte\t\t>47\t\t\\b%c\n>32\tbyte\t\t>0\t\t\\b, modify: v%d\n>>33\tbyte\t\tx\t\t\\b.%d+\n>42\tlelong\t\t0xfdc4a7dc\t\\b,\n>>70\tbyte\t\t>0\t\textract: v%d\n>>>71\tbyte\t\tx\t\t\\b.%d+\n\n# Shell archives\n10\tstring\t\t#\\ This\\ is\\ a\\ shell\\ archive\tshell archive text\n!:mime\tapplication/octet-stream\n\n#\n# LBR. NB: May conflict with the questionable \n#          \"binary Computer Graphics Metafile\" format.\n#\n0       string  \\0\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\0\\0    LBR archive data\n#\n# PMA (CP/M derivative of LHA)\n#\n2       string          -pm0-           PMarc archive data [pm0]\n2       string          -pm1-           PMarc archive data [pm1]\n2       string          -pm2-           PMarc archive data [pm2]\n2       string          -pms-           PMarc SFX archive (CP/M, DOS)\n5       string          -pc1-           PopCom compressed executable (CP/M)\n\n# From Rafael Laboissiere <rafael@laboissiere.net>\n# The Project Revision Control System (see\n# http://prcs.sourceforge.net) generates a packaged project\n# file which is recognized by the following entry: \n0\tleshort\t\t0xeb81\tPRCS packaged project\n\n# Microsoft cabinets \n# by David Necas (Yeti) <yeti@physics.muni.cz>\n#0\tstring\tMSCF\\0\\0\\0\\0\tMicrosoft cabinet file data,\n#>25\tbyte\tx\t\tv%d\n#>24\tbyte\tx\t\t\\b.%d\n# MPi: All CABs have version 1.3, so this is pointless.\n# Better magic in debian-additions.\n\n# GTKtalog catalogs \n# by David Necas (Yeti) <yeti@physics.muni.cz>\n4\tstring\tgtktalog\\ \tGTKtalog catalog data,\n>13\tstring\t3\t\tversion 3\n>>14\tbeshort\t0x677a\t\t(gzipped)\n>>14\tbeshort\t!0x677a\t\t(not gzipped)\n>13\tstring\t>3\t\tversion %s\n\n############################################################################\n# Parity archive reconstruction file, the 'par' file format now used on Usenet.\n0       string          PAR\\0\tPARity archive data\n>48\tleshort\t\t=0\t- Index file\n>48\tleshort\t\t>0\t- file number %d\n\n# Felix von Leitner <felix-file@fefe.de>\n0\tstring\td8:announce\tBitTorrent file\n!:mime\tapplication/x-bittorrent\n\n# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>\n0       beshort 0x0e0f          Atari MSA archive data\n>2      beshort x       \t\\b, %d sectors per track\n>4      beshort 0       \t\\b, 1 sided\n>4      beshort 1       \t\\b, 2 sided\n>6      beshort x       \t\\b, starting track: %d\n>8      beshort x       \t\\b, ending track: %d\n\n# Alternate ZIP string (amc@arwen.cs.berkeley.edu)\n0\tstring\tPK00PK\\003\\004\tZip archive data\n\n# ACE archive (from http://www.wotsit.org/download.asp?f=ace)\n# by Stefan `Sec` Zehl <sec@42.org>\n7\tstring\t\t**ACE**\t\tACE archive data\n>15\tbyte\t>0\t\tversion %d\n>16\tbyte\t=0x00\t\t\\b, from MS-DOS\n>16\tbyte\t=0x01\t\t\\b, from OS/2\n>16\tbyte\t=0x02\t\t\\b, from Win/32\n>16\tbyte\t=0x03\t\t\\b, from Unix\n>16\tbyte\t=0x04\t\t\\b, from MacOS\n>16\tbyte\t=0x05\t\t\\b, from WinNT\n>16\tbyte\t=0x06\t\t\\b, from Primos\n>16\tbyte\t=0x07\t\t\\b, from AppleGS\n>16\tbyte\t=0x08\t\t\\b, from Atari\n>16\tbyte\t=0x09\t\t\\b, from Vax/VMS\n>16\tbyte\t=0x0A\t\t\\b, from Amiga\n>16\tbyte\t=0x0B\t\t\\b, from Next\n>14\tbyte\tx\t\t\\b, version %d to extract\n>5\tleshort &0x0080\t\t\\b, multiple volumes,\n>>17\tbyte\tx\t\t\\b (part %d),\n>5\tleshort &0x0002\t\t\\b, contains comment\n>5\tleshort\t&0x0200\t\t\\b, sfx\n>5\tleshort\t&0x0400\t\t\\b, small dictionary\n>5\tleshort\t&0x0800\t\t\\b, multi-volume\n>5\tleshort\t&0x1000\t\t\\b, contains AV-String\n>>30\tstring\t\\x16*UNREGISTERED\\x20VERSION*\t(unregistered)\n>5\tleshort &0x2000\t\t\\b, with recovery record\n>5\tleshort &0x4000\t\t\\b, locked\n>5\tleshort &0x8000\t\t\\b, solid\n# Date in MS-DOS format (whatever that is)\n#>18\tlelong\tx\t\tCreated on\n\n# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann\n# <doj@cubic.org>\n0x1A\tstring\tsfArk\t\tsfArk compressed Soundfont\n>0x15\tstring\t2\n>>0x1\tstring\t>\\0\t\tVersion %s\n>>0x2A\tstring\t>\\0\t\t: %s\n\n# DR-DOS 7.03 Packed File *.??_\n0\tstring\tPacked\\ File\\ \tPersonal NetWare Packed File\n>12\tstring\tx    \t\t\\b, was \"%.12s\"\n\n# EET archive\n# From: Tilman Sauerbeck <tilman@code-monkey.de>\n0\tbelong\t0x1ee7ff00\tEET archive\n!:mime\tapplication/x-eet\n\n# rzip archives\n0\tstring\tRZIP\t\trzip compressed data\n>4\tbyte\tx\t\t- version %d\n>5\tbyte\tx\t\t\\b.%d\n>6\tbelong\tx\t\t(%d bytes)\n\n# From: \"Robert Dale\" <robdale@gmail.com>\n0\tbelong\t123\t\tdar archive,\n>4\tbelong\tx\t\tlabel \"%.8x\n>>8\tbelong\tx\t\t%.8x\n>>>12\tbeshort\tx\t\t%.4x\"\n>14\tbyte\t0x54\t\tend slice\n>14\tbeshort\t0x4e4e\t\tmulti-part\n>14\tbeshort\t0x4e53\t\tmulti-part, with -S\n\n# Symbian installation files\n#  http://www.thouky.co.uk/software/psifs/sis.html\n#  http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf\n8\tlelong\t0x10000419\tSymbian installation file\n!:mime\tapplication/vnd.symbian.install\n>4\tlelong\t0x1000006D\t(EPOC release 3/4/5)\n>4\tlelong\t0x10003A12\t(EPOC release 6)\n0\tlelong\t0x10201A7A\tSymbian installation file (Symbian OS 9.x)\n!:mime\tx-epoc/x-sisx-app\n\n# From \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\tMPQ\\032\t\tMoPaQ (MPQ) archive\n\n# From: Dirk Jagdmann <doj@cubic.org>\n# xar archive format: http://code.google.com/p/xar/\n0\tstring\txar!\t\txar archive\n>6\tbeshort\tx\t\t- version %ld\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# .kgb\n0\tstring KGB_arch\t\tKGB Archiver file\n>10\tstring x\t\twith compression level %.1s\n\n# xar (eXtensible ARchiver) archive\n# From: \"David Remahl\" <dremahl@apple.com>\n0\tstring\txar!\t\txar archive\n#>4\tbeshort\tx\t\theader size %d\n>6\tbeshort\tx\t\tversion %d,\n#>8\tquad\tx\t\tcompressed TOC: %d,\n#>16\tquad\tx\t\tuncompressed TOC: %d,\n>24\tbelong\t0\t\tno checksum\n>24\tbelong\t1\t\tSHA-1 checksum\n>24\tbelong\t2\t\tMD5 checksum\n\n# Type: Parity Archive\n# From: Daniel van Eeden <daniel_e@dds.nl>\n0\tstring\tPAR2\t\tParity Archive Volume Set\n\n# Bacula volume format. (Volumes always start with a block header.)\n# URL: http://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n12\tstring\tBB02\t\tBacula volume\n>20\tbedate\tx\t\t\\b, started %s\n\n#------------------------------------------------------------------------------\n# $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $\n# asterix:  file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character\n# strings as \"long\" - we assume they're just strings:\n# From: guy@netapp.com (Guy Harris)\n#\n0\tstring\t\t*STA\t\tAster*x\n>7\tstring\t\tWORD\t\t\tWords Document\n>7\tstring\t\tGRAP\t\t\tGraphic\n>7\tstring\t\tSPRE\t\t\tSpreadsheet\n>7\tstring\t\tMACR\t\t\tMacro\n0\tstring\t\t2278\t\tAster*x Version 2\n>29\tbyte\t\t0x36\t\t\tWords Document\n>29\tbyte\t\t0x35\t\t\tGraphic\n>29\tbyte\t\t0x32\t\t\tSpreadsheet\n>29\tbyte\t\t0x38\t\t\tMacro\n\n\n#------------------------------------------------------------------------------\n# $File: att3b,v 1.8 2009/09/19 16:28:08 christos Exp $\n# att3b:  file(1) magic for AT&T 3B machines\n#\n# The `versions' should be un-commented if they work for you.\n# (Was the problem just one of endianness?)\n#\n# 3B20\n#\n# The 3B20 conflicts with SCCS.\n#0\tbeshort\t\t0550\t\t3b20 COFF executable\n#>12\tbelong\t\t>0\t\tnot stripped\n#>22\tbeshort\t\t>0\t\t- version %ld\n#0\tbeshort\t\t0551\t\t3b20 COFF executable (TV)\n#>12\tbelong\t\t>0\t\tnot stripped\n#>22\tbeshort\t\t>0\t\t- version %ld\n#\n# WE32K\n#\n0\tbeshort\t\t0560\t\tWE32000 COFF\n>18\tbeshort\t\t^00000020\tobject\n>18\tbeshort\t\t&00000020\texecutable\n>12\tbelong\t\t>0\t\tnot stripped\n>18\tbeshort\t\t^00010000\tN/A on 3b2/300 w/paging\n>18\tbeshort\t\t&00020000\t32100 required\n>18\tbeshort\t\t&00040000\tand MAU hardware required\n>20\tbeshort\t\t0407\t\t(impure)\n>20\tbeshort\t\t0410\t\t(pure)\n>20\tbeshort\t\t0413\t\t(demand paged)\n>20\tbeshort\t\t0443\t\t(target shared library)\n>22\tbeshort\t\t>0\t\t- version %ld\n0\tbeshort\t\t0561\t\tWE32000 COFF executable (TV)\n>12\tbelong\t\t>0\t\tnot stripped\n#>18\tbeshort\t\t&00020000\t- 32100 required\n#>18\tbeshort\t\t&00040000\tand MAU hardware required\n#>22\tbeshort\t\t>0\t\t- version %ld\n#\n# core file for 3b2 \n0\tstring\t\t\\000\\004\\036\\212\\200\t3b2 core file\n>364\tstring\t\t>\\0\t\tof '%s'\n\n#------------------------------------------------------------------------------\n# $File: audio,v 1.59 2009/11/04 17:27:37 christos Exp $\n# audio:  file(1) magic for sound formats (see also \"iff\")\n#\n# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),\n# and others\n#\n\n# Sun/NeXT audio data\n0\tstring\t\t.snd\t\tSun/NeXT audio data:\n>12\tbelong\t\t1\t\t8-bit ISDN mu-law,\n!:mime\taudio/basic\n>12\tbelong\t\t2\t\t8-bit linear PCM [REF-PCM],\n!:mime\taudio/basic\n>12\tbelong\t\t3\t\t16-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t4\t\t24-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t5\t\t32-bit linear PCM,\n!:mime\taudio/basic\n>12\tbelong\t\t6\t\t32-bit IEEE floating point,\n!:mime\taudio/basic\n>12\tbelong\t\t7\t\t64-bit IEEE floating point,\n!:mime\taudio/basic\n>12\tbelong\t\t8\t\tFragmented sample data,\n>12\tbelong\t\t10\t\tDSP program,\n>12\tbelong\t\t11\t\t8-bit fixed point,\n>12\tbelong\t\t12\t\t16-bit fixed point,\n>12\tbelong\t\t13\t\t24-bit fixed point,\n>12\tbelong\t\t14\t\t32-bit fixed point,\n>12\tbelong\t\t18\t\t16-bit linear with emphasis,\n>12\tbelong\t\t19\t\t16-bit linear compressed,\n>12\tbelong\t\t20\t\t16-bit linear with emphasis and compression,\n>12\tbelong\t\t21\t\tMusic kit DSP commands,\n>12\tbelong\t\t23\t\t8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),\n!:mime  audio/x-adpcm\n>12\tbelong\t\t24\t\tcompressed (8-bit CCITT G.722 ADPCM)\n>12\tbelong\t\t25\t\tcompressed (3-bit CCITT G.723.3 ADPCM),\n>12\tbelong\t\t26\t\tcompressed (5-bit CCITT G.723.5 ADPCM),\n>12\tbelong\t\t27\t\t8-bit A-law (CCITT G.711),\n>20\tbelong\t\t1\t\tmono,\n>20\tbelong\t\t2\t\tstereo,\n>20\tbelong\t\t4\t\tquad,\n>16\tbelong\t\t>0\t\t%d Hz\n\n# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format\n# that uses little-endian encoding and has a different magic number\n0\tlelong\t\t0x0064732E\tDEC audio data:\n>12\tlelong\t\t1\t\t8-bit ISDN mu-law,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t2\t\t8-bit linear PCM [REF-PCM],\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t3\t\t16-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t4\t\t24-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t5\t\t32-bit linear PCM,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t6\t\t32-bit IEEE floating point,\n!:mime\taudio/x-dec-basic\n>12\tlelong\t\t7\t\t64-bit IEEE floating point,\n!:mime\taudio/x-dec-basic\n>12\tbelong\t\t8\t\tFragmented sample data,\n>12\tbelong\t\t10\t\tDSP program,\n>12\tbelong\t\t11\t\t8-bit fixed point,\n>12\tbelong\t\t12\t\t16-bit fixed point,\n>12\tbelong\t\t13\t\t24-bit fixed point,\n>12\tbelong\t\t14\t\t32-bit fixed point,\n>12\tbelong\t\t18\t\t16-bit linear with emphasis,\n>12\tbelong\t\t19\t\t16-bit linear compressed,\n>12\tbelong\t\t20\t\t16-bit linear with emphasis and compression,\n>12\tbelong\t\t21\t\tMusic kit DSP commands,\n>12\tlelong\t\t23\t\t8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),\n!:mime\taudio/x-dec-basic\n>12\tbelong\t\t24\t\tcompressed (8-bit CCITT G.722 ADPCM)\n>12\tbelong\t\t25\t\tcompressed (3-bit CCITT G.723.3 ADPCM),\n>12\tbelong\t\t26\t\tcompressed (5-bit CCITT G.723.5 ADPCM),\n>12\tbelong\t\t27\t\t8-bit A-law (CCITT G.711),\n>20\tlelong\t\t1\t\tmono,\n>20\tlelong\t\t2\t\tstereo,\n>20\tlelong\t\t4\t\tquad,\n>16\tlelong\t\t>0\t\t%d Hz\n\n# Creative Labs AUDIO stuff\n0\tstring\tMThd\t\t\tStandard MIDI data\n!:mime\taudio/midi\n>8 \tbeshort\tx\t\t\t(format %d)\n>10\tbeshort\tx\t\t\tusing %d track\n>10\tbeshort\t\t>1\t\t\\bs\n>12\tbeshort&0x7fff\tx\t\tat 1/%d\n>12\tbeshort&0x8000\t>0\t\tSMPTE\n\n0\tstring\tCTMF\t\t\tCreative Music (CMF) data\n!:mime\taudio/x-unknown\n0\tstring\tSBI\t\t\tSoundBlaster instrument data\n!:mime\taudio/x-unknown\n0\tstring\tCreative\\ Voice\\ File\tCreative Labs voice data\n!:mime\taudio/x-unknown\n# is this next line right?  it came this way...\n>19\tbyte\t0x1A\n>23\tbyte\t>0\t\t\t- version %d\n>22\tbyte\t>0\t\t\t\\b.%d\n\n# first entry is also the string \"NTRK\"\n0\tbelong\t\t0x4e54524b\tMultiTrack sound data\n>4\tbelong\t\tx\t\t- version %ld\n\n# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED\n# [based on posting 940824 by \"Dirk/Elastik\", husberg@lehtori.cc.tut.fi]\n0\tstring\t\tEMOD\t\tExtended MOD sound data,\n>4\tbyte&0xf0\tx\t\tversion %d\n>4\tbyte&0x0f\tx\t\t\\b.%d,\n>45\tbyte\t\tx\t\t%d instruments\n>83\tbyte\t\t0\t\t(module)\n>83\tbyte\t\t1\t\t(song)\n\n# Real Audio (Magic .ra\\0375)\n0\tbelong\t\t0x2e7261fd\tRealAudio sound file\n!:mime\taudio/x-pn-realaudio\n0\tstring\t\t.RMF\\0\\0\\0\tRealMedia file\n!:mime\tapplication/vnd.rn-realmedia\n#video/x-pn-realvideo\n#video/vnd.rn-realvideo\n#application/vnd.rn-realmedia\n#\tsigh, there are many mimes for that but the above are the most common.\n\n# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]\n# Oct 31, 1995\n# fixed by <doj@cubic.org> 2003-06-24\n# Too short...\n#0\tstring\t\tMTM\t\tMultiTracker Module sound file\n#0\tstring\t\tif\t\tComposer 669 Module sound data\n#0\tstring\t\tJN\t\tComposer 669 Module sound data (extended format)\n0\tstring\t\tMAS_U\t\tULT(imate) Module sound data\n\n#0\tstring\t\tFAR\t\tModule sound data\n#>4\tstring\t\t>\\15\t\tTitle: \"%s\"\n\n0x2c\tstring\t\tSCRM\t\tScreamTracker III Module sound data\n>0\tstring\t\t>\\0\t\tTitle: \"%s\"\n\n# Gravis UltraSound patches\n# From <ache@nagual.ru>\n\n0\tstring\t\tGF1PATCH110\\0ID#000002\\0\tGUS patch\n0\tstring\t\tGF1PATCH100\\0ID#000002\\0\tOld GUS\tpatch\n\n# mime types according to http://www.geocities.com/nevilo/mod.htm:\n#\taudio/it\t.it\n#\taudio/x-zipped-it\t.itz\n#\taudio/xm\tfasttracker modules\n#\taudio/x-s3m\tscreamtracker modules\n#\taudio/s3m\tscreamtracker modules\n#\taudio/x-zipped-mod\tmdz\n#\taudio/mod\tmod\n#\taudio/x-mod\tAll modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)\n\n#\n# Taken from loader code from mikmod version 2.14\n# by Steve McIntyre (stevem@chiark.greenend.org.uk)\n# <doj@cubic.org> added title printing on 2003-06-24\n0\tstring\tMAS_UTrack_V00\n>14\tstring\t>/0\t\tultratracker V1.%.1s module sound data\n!:mime\taudio/x-mod\n#audio/x-tracker-module\n\n0\tstring\tUN05\t\tMikMod UNI format module sound data\n\n0\tstring\tExtended\\ Module: Fasttracker II module sound data\n!:mime\taudio/x-mod\n#audio/x-tracker-module\n>17\tstring\t>\\0\t\tTitle: \"%s\"\n\n21\tstring/c\t=!SCREAM!\tScreamtracker 2 module sound data\n!:mime\taudio/x-mod\n#audio/x-screamtracker-module\n21\tstring\tBMOD2STM\tScreamtracker 2 module sound data\n!:mime\taudio/x-mod\n#audio/x-screamtracker-module\n1080\tstring\tM.K.\t\t4-channel Protracker module sound data\n!:mime\taudio/x-mod\n#audio/x-protracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tM!K!\t\t4-channel Protracker module sound data\n!:mime\taudio/x-mod\n#audio/x-protracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tFLT4\t\t4-channel Startracker module sound data\n!:mime\taudio/x-mod\n#audio/x-startracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tFLT8\t\t8-channel Startracker module sound data\n!:mime\taudio/x-mod\n#audio/x-startracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t4CHN\t\t4-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t6CHN\t\t6-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t8CHN\t\t8-channel Fasttracker module sound data\n!:mime\taudio/x-mod\n#audio/x-fasttracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tCD81\t\t8-channel Octalyser module sound data\n!:mime\taudio/x-mod\n#audio/x-octalysertracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\tOKTA\t\t8-channel Octalyzer module sound data\n!:mime\taudio/x-mod\n#audio/x-octalysertracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n# Not good enough.\n#1082\tstring\tCH\n#>1080\tstring\t>/0\t\t%.2s-channel Fasttracker \"oktalyzer\" module sound data\n1080\tstring\t16CN\t\t16-channel Taketracker module sound data\n!:mime\taudio/x-mod\n#audio/x-taketracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n1080\tstring\t32CN\t\t32-channel Taketracker module sound data\n!:mime\taudio/x-mod\n#audio/x-taketracker-module\n>0\tstring\t>\\0\t\tTitle: \"%s\"\n\n# TOC sound files -Trevor Johnson <trevor@jpj.net>\n#\n0       string          TOC             TOC sound file\n\n# sidfiles <pooka@iki.fi>\n# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24\n0\tstring\t\tSIDPLAY\\ INFOFILE\tSidplay info file\n\n0\tstring\t\tPSID\t\t\tPlaySID v2.2+ (AMIGA) sidtune\n>4\tbeshort\t\t>0\t\t\tw/ header v%d,\n>14\tbeshort\t\t=1\t\t\tsingle song,\n>14\tbeshort\t\t>1\t\t\t%d songs,\n>16\tbeshort\t\t>0\t\t\tdefault song: %d\n>0x16\tstring\t\t>\\0\t\t\tname: \"%s\"\n>0x36\tstring\t\t>\\0\t\t\tauthor: \"%s\"\n>0x56\tstring\t\t>\\0\t\t\tcopyright: \"%s\"\n\n0\tstring\t\tRSID\t\t\tRSID sidtune PlaySID compatible\n>4\tbeshort\t\t>0\t\t\tw/ header v%d,\n>14\tbeshort\t\t=1\t\t\tsingle song,\n>14\tbeshort\t\t>1\t\t\t%d songs,\n>16\tbeshort\t\t>0\t\t\tdefault song: %d\n>0x16\tstring\t\t>\\0\t\t\tname: \"%s\"\n>0x36\tstring\t\t>\\0\t\t\tauthor: \"%s\"\n>0x56\tstring\t\t>\\0\t\t\tcopyright: \"%s\"\n\n# IRCAM <mpruett@sgi.com>\n# VAX and MIPS files are little-endian; Sun and NeXT are big-endian\n0\tbelong\t\t0x64a30100\t\tIRCAM file (VAX)\n0\tbelong\t\t0x64a30200\t\tIRCAM file (Sun)\n0\tbelong\t\t0x64a30300\t\tIRCAM file (MIPS little-endian)\n0\tbelong\t\t0x64a30400\t\tIRCAM file (NeXT)\n\n# NIST SPHERE <mpruett@sgi.com>\n0\tstring\t\tNIST_1A\\n\\ \\ \\ 1024\\n\tNIST SPHERE file\n\n# Sample Vision <mpruett@sgi.com>\n0\tstring\t\tSOUND\\ SAMPLE\\ DATA\\ \tSample Vision file\n\n# Audio Visual Research <tonigonenstein@users.sourceforge.net>\n0\tstring\t\t2BIT\t\t\tAudio Visual Research file,\n>12\tbeshort\t\t=0\t\t\tmono,\n>12\tbeshort\t\t=-1\t\t\tstereo,\n>14\tbeshort\t\tx\t\t\t%d bits\n>16\tbeshort\t\t=0\t\t\tunsigned,\n>16\tbeshort\t\t=-1\t\t\tsigned,\n>22\tbelong&0x00ffffff\tx\t\t%d Hz,\n>18\tbeshort\t\t=0\t\t\tno loop,\n>18\tbeshort\t\t=-1\t\t\tloop,\n>21\tubyte\t\t<128\t\t\tnote %d,\n>22\tbyte\t\t=0\t\t\treplay 5.485 KHz\n>22\tbyte\t\t=1\t\t\treplay 8.084 KHz\n>22\tbyte\t\t=2\t\t\treplay 10.971 KHz\n>22\tbyte\t\t=3\t\t\treplay 16.168 KHz\n>22\tbyte\t\t=4\t\t\treplay 21.942 KHz\n>22\tbyte\t\t=5\t\t\treplay 32.336 KHz\n>22\tbyte\t\t=6\t\t\treplay 43.885 KHz\n>22\tbyte\t\t=7\t\t\treplay 47.261 KHz\n\n# SGI SoundTrack <mpruett@sgi.com>\n0\tstring\t\t_SGI_SoundTrack\t\tSGI SoundTrack project file\n# ID3 version 2 tags <waschk@informatik.uni-rostock.de>\n0\tstring\t\tID3\tAudio file with ID3 version 2\n>3\tbyte\t\tx\t\\b.%d\n>4\tbyte\t\tx\t\\b.%d\n>>5\tbyte\t\t&0x80\t\\b, unsynchronized frames\n>>5\tbyte\t\t&0x40\t\\b, extended header\n>>5\tbyte\t\t&0x20\t\\b, experimental\n>>5\tbyte\t\t&0x10\t\\b, footer present\n>(6.I)\tindirect\tx\t\\b, contains: \n\n# NSF (NES sound file) magic\n0\tstring\t\tNESM\\x1a\tNES Sound File\n>14\tstring\t\t>\\0\t\t(\"%s\" by\n>46\tstring\t\t>\\0\t\t%s, copyright\n>78\tstring\t\t>\\0\t\t%s),\n>5\tbyte\t\tx\t\tversion %d,\n>6\tbyte\t\tx\t\t%d tracks,\n>122\tbyte&0x2\t=1\t\tdual PAL/NTSC\n>122\tbyte&0x1\t=1\t\tPAL\n>122\tbyte&0x1\t=0\t\tNTSC\n\n# Type: SNES SPC700 sound files\n# From: Josh Triplett <josh@freedesktop.org>\n0\tstring\tSNES-SPC700\\ Sound\\ File\\ Data\\ v\tSNES SPC700 sound file\n>&0\tstring\t0.30\t\t\t\t\t\\b, version %s\n>>0x23\tbyte\t0x1B\t\t\t\t\t\\b, without ID666 tag\n>>0x23\tbyte\t0x1A\t\t\t\t\t\\b, with ID666 tag\n>>>0x2E\tstring\t>\\0\t\t\t\t\t\\b, song \"%.32s\"\n>>>0x4E\tstring\t>\\0\t\t\t\t\t\\b, game \"%.32s\"\n\n# Impulse tracker module (audio/x-it)\n0\tstring\t\tIMPM\t\tImpulse Tracker module sound data -\n!:mime\taudio/x-mod\n>4\tstring\t\t>\\0\t\t\"%s\"\n>40\tleshort\t\t!0\t\tcompatible w/ITv%x\n>42\tleshort\t\t!0\t\tcreated w/ITv%x\n\n# Imago Orpheus module (audio/x-imf)\n60\tstring\t\tIM10\t\tImago Orpheus module sound data -\n>0\tstring\t\t>\\0\t\t\"%s\"\n\n# From <collver1@attbi.com>\n# These are the /etc/magic entries to decode modules, instruments, and\n# samples in Impulse Tracker's native format.\n\n0\tstring\t\tIMPS\t\tImpulse Tracker Sample\n>18\tbyte\t\t&2\t\t16 bit\n>18\tbyte\t\t^2\t\t8 bit\n>18\tbyte\t\t&4\t\tstereo\n>18\tbyte\t\t^4\t\tmono\n0\tstring\t\tIMPI\t\tImpulse Tracker Instrument\n>28\tleshort\t\t!0\t\tITv%x\n>30\tbyte\t\t!0\t\t%d samples\n\n# Yamaha TX Wave:  file(1) magic for Yamaha TX Wave audio files\n# From <collver1@attbi.com>\n0\tstring\t\tLM8953\t\tYamaha TX Wave\n>22\tbyte\t\t0x49\t\tlooped\n>22\tbyte\t\t0xC9\t\tnon-looped\n>23\tbyte\t\t1\t\t33kHz\n>23\tbyte\t\t2\t\t50kHz\n>23\tbyte\t\t3\t\t16kHz\n\n# scream tracker:  file(1) magic for Scream Tracker sample files\n#\n# From <collver1@attbi.com>\n76\tstring\t\tSCRS\t\tScream Tracker Sample\n>0\tbyte\t\t1\t\tsample\n>0\tbyte\t\t2\t\tadlib melody\n>0\tbyte\t\t>2\t\tadlib drum\n>31\tbyte\t\t&2\t\tstereo\n>31\tbyte\t\t^2\t\tmono\n>31\tbyte\t\t&4\t\t16bit little endian\n>31\tbyte\t\t^4\t\t8bit\n>30\tbyte\t\t0\t\tunpacked\n>30\tbyte\t\t1\t\tpacked\n\n# audio\n# From: Cory Dikkers <cdikkers@swbell.net>\n0\tstring\t\tMMD0\t\tMED music file, version 0\n0\tstring\t\tMMD1\t\tOctaMED Pro music file, version 1\n0\tstring\t\tMMD3\t\tOctaMED Soundstudio music file, version 3\n0\tstring\t\tOctaMEDCmpr\tOctaMED Soundstudio compressed file\n0\tstring\t\tMED\t\tMED_Song\n0\tstring\t\tSymM\t\tSymphonie SymMOD music file\n#\n0\tstring\t\tTHX\t\tAHX version\n>3\tbyte\t\t=0\t\t1 module data\n>3\tbyte\t\t=1\t\t2 module data\n#\n0\tstring\t\tOKTASONG\tOktalyzer module data\n#\n0\tstring\t\tDIGI\\ Booster\\ module\\0\t%s\n>20\tbyte\t\t>0\t\t%c\n>>21\tbyte\t\t>0\t\t\\b%c\n>>>22\tbyte\t\t>0\t\t\\b%c\n>>>>23\tbyte\t\t>0\t\t\\b%c\n>610\tstring\t\t>\\0\t\t\\b, \"%s\"\n#\n0\tstring\t\tDBM0\t   \tDIGI Booster Pro Module\n>4\tbyte\t\t>0\t\tV%X.\n>>5\tbyte\t\tx\t\t\\b%02X\n>16\tstring\t\t>\\0\t\t\\b, \"%s\"\n#\n0\tstring\t\tFTMN\t\tFaceTheMusic module\n>16\tstring\t\t>\\0d\t\t\\b, \"%s\"\n\n# From: <doj@cubic.org> 2003-06-24\n0\tstring\t\tAMShdr\\32\tVelvet Studio AMS Module v2.2\n0\tstring\t\tExtreme\t\tExtreme Tracker AMS Module v1.3\n0\tstring\t\tDDMF\t\tXtracker DMF Module\n>4\tbyte\t\tx\t\tv%i\n>0xD\tstring\t\t>\\0\t\tTitle: \"%s\"\n>0x2B\tstring\t\t>\\0\t\tComposer: \"%s\"\n0\tstring\t\tDSM\\32\t\tDynamic Studio Module DSM\n0\tstring\t\tSONG\t\tDigiTrekker DTM Module\n0\tstring\t\tDMDL\t\tDigiTrakker MDL Module\n0\tstring\t\tPSM\\32\t\tProtracker Studio PSM Module\n44\tstring\t\tPTMF\t\tPoly Tracker PTM Module\n>0\tstring\t\t>\\32\t\tTitle: \"%s\"\n0\tstring\t\tMT20\t\tMadTracker 2.0 Module MT2\n0\tstring\t\tRAD\\40by\\40REALiTY!! RAD Adlib Tracker Module RAD\n0\tstring\t\tRTMM\t\tRTM Module\n0x426\tstring\t\tMaDoKaN96\tXMS Adlib Module\n>0\tstring\t\t>\\0\t\tComposer: \"%s\"\n0\tstring\t\tAMF\t\tAMF Module\n>4\tstring\t\t>\\0\t\tTitle: \"%s\"\n0\tstring\t\tMODINFO1\tOpen Cubic Player Module Inforation MDZ\n0\tstring\t\tExtended\\40Instrument: Fast Tracker II Instrument\n\n# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>\n# NOA Nancy Codec file\n0\tstring\t\t\\210NOA\\015\\012\\032\tNOA Nancy Codec Movie file\n# Yamaha SMAF format\n0\tstring\t\tMMMD\t\tYamaha SMAF file\n# Sharp Jisaku Melody format for PDC\n0\tstring\t\t\\001Sharp\\040JisakuMelody\tSHARP Cell-Phone ringing Melody\n>20\tstring\t\tVer01.00\tVer. 1.00\n>>32\tbyte\t\tx\t\t, %d tracks\n\n# Free lossless audio codec <http://flac.sourceforge.net>\n# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>\n0\tstring\t\t\tfLaC\t\tFLAC audio bitstream data\n!:mime\taudio/x-flac\n>4\tbyte&0x7f\t\t>0\t\t\\b, unknown version\n>4\tbyte&0x7f\t\t0\t\t\\b\n# some common bits/sample values\n>>20\tbeshort&0x1f0\t\t0x030\t\t\\b, 4 bit\n>>20\tbeshort&0x1f0\t\t0x050\t\t\\b, 6 bit\n>>20\tbeshort&0x1f0\t\t0x070\t\t\\b, 8 bit\n>>20\tbeshort&0x1f0\t\t0x0b0\t\t\\b, 12 bit\n>>20\tbeshort&0x1f0\t\t0x0f0\t\t\\b, 16 bit\n>>20\tbeshort&0x1f0\t\t0x170\t\t\\b, 24 bit\n>>20\tbyte&0xe\t\t0x0\t\t\\b, mono\n>>20\tbyte&0xe\t\t0x2\t\t\\b, stereo\n>>20\tbyte&0xe\t\t0x4\t\t\\b, 3 channels\n>>20\tbyte&0xe\t\t0x6\t\t\\b, 4 channels\n>>20\tbyte&0xe\t\t0x8\t\t\\b, 5 channels\n>>20\tbyte&0xe\t\t0xa\t\t\\b, 6 channels\n>>20\tbyte&0xe\t\t0xc\t\t\\b, 7 channels\n>>20\tbyte&0xe\t\t0xe\t\t\\b, 8 channels\n# some common sample rates\n>>17\tbelong&0xfffff0\t\t0x0ac440\t\\b, 44.1 kHz\n>>17\tbelong&0xfffff0\t\t0x0bb800\t\\b, 48 kHz\n>>17\tbelong&0xfffff0\t\t0x07d000\t\\b, 32 kHz\n>>17\tbelong&0xfffff0\t\t0x056220\t\\b, 22.05 kHz\n>>17\tbelong&0xfffff0\t\t0x05dc00\t\\b, 24 kHz\n>>17\tbelong&0xfffff0\t\t0x03e800\t\\b, 16 kHz\n>>17\tbelong&0xfffff0\t\t0x02b110\t\\b, 11.025 kHz\n>>17\tbelong&0xfffff0\t\t0x02ee00\t\\b, 12 kHz\n>>17\tbelong&0xfffff0\t\t0x01f400\t\\b, 8 kHz\n>>17\tbelong&0xfffff0\t\t0x177000\t\\b, 96 kHz\n>>17\tbelong&0xfffff0\t\t0x0fa000\t\\b, 64 kHz\n>>21\tbyte&0xf\t\t>0\t\t\\b, >4G samples\n>>21\tbyte&0xf\t\t0\t\t\\b\n>>>22\tbelong\t\t\t>0\t\t\\b, %u samples\n>>>22\tbelong\t\t\t0\t\t\\b, length unknown\n\n# (ISDN) VBOX voice message file (Wolfram Kleff)\n0       string          VBOX            VBOX voice message data\n\n# ReBorn Song Files (.rbs)\n# David J. Singer <doc@deadvirgins.org.uk>\n8       string          RB40             RBS Song file\n>29     string          ReBorn           created by ReBorn\n>37     string          Propellerhead    created by ReBirth\n\n# Synthesizer Generator and Kimwitu share their file format\n0\tstring\t\tA#S#C#S#S#L#V#3\t    Synthesizer Generator or Kimwitu data\n# Kimwitu++ uses a slightly different magic\n0\tstring\t\tA#S#C#S#S#L#HUB\t    Kimwitu++ data\n\n# From \"Simon Hosie\n0       string  TFMX-SONG       TFMX module sound data\n\n# Monkey's Audio compressed audio format (.ape)\n# From danny.milo@gmx.net (Danny Milosavljevic)\n# New version from Abel Cheung <abel (@) oaka.org>\n0\t\tstring\t\tMAC\\040\t\tMonkey's Audio compressed format\n>4\t\tuleshort\t>0x0F8B\t\tversion %d\n>>(0x08.l)\tuleshort\t=1000\t\twith fast compression\n>>(0x08.l)\tuleshort\t=2000\t\twith normal compression\n>>(0x08.l)\tuleshort\t=3000\t\twith high compression\n>>(0x08.l)\tuleshort\t=4000\t\twith extra high compression\n>>(0x08.l)\tuleshort\t=5000\t\twith insane compression\n>>(0x08.l+18)\tuleshort\t=1\t\t\\b, mono\n>>(0x08.l+18)\tuleshort\t=2\t\t\\b, stereo\n>>(0x08.l+20)\tulelong\t\tx\t\t\\b, sample rate %d\n>4\t\tuleshort\t<0x0F8C\t\tversion %d\n>>6\t\tuleshort\t=1000\t\twith fast compression\n>>6\t\tuleshort\t=2000\t\twith normal compression\n>>6\t\tuleshort\t=3000\t\twith high compression\n>>6\t\tuleshort\t=4000\t\twith extra high compression\n>>6\t\tuleshort\t=5000\t\twith insane compression\n>>10\t\tuleshort\t=1\t\t\\b, mono\n>>10\t\tuleshort\t=2\t\t\\b, stereo\n>>12\t\tulelong\t\tx\t\t\\b, sample rate %d\n\n# adlib sound files\n# From GÃ¼rkan SengÃ¼n <gurkan@linuks.mine.nu>, http://www.linuks.mine.nu\n0    \tstring\t\tRAWADATA\tRdosPlay RAW\n\n1068\tstring\t\tRoR\t\tAMUSIC Adlib Tracker\n\n0\tstring\t\tJCH\t\tEdLib\n\n0\tstring\t\tmpu401tr\tMPU-401 Trakker\n\n0\tstring\t\tSAdT\t\tSurprise! Adlib Tracker\n>4\tbyte\t\tx\t\tVersion %d\n\n0\tstring\t\tXAD!\t\teXotic ADlib\n\n0\tstring\t\tofTAZ!\t\teXtra Simple Music\n\n# Spectrum 128 tunes (.ay files).\n# From: Emanuel Haupt <ehaupt@critical.ch>\n0\tstring\t\tZXAYEMUL\tSpectrum 128 tune\n\n0\tstring\t\t\\0BONK\t\tBONK,\n#>5\tbyte\t\tx\t\tversion %d\n>14\tbyte\t\tx\t\t%d channel(s),\n>15\tbyte\t\t=1\t\tlossless,\n>15\tbyte\t\t=0\t\tlossy,\n>16\tbyte\t\tx\t\tmid-side\n\n384\tstring\t\tLockStream\tLockStream Embedded file (mostly MP3 on old Nokia phones)\n\n# format VQF (proprietary codec for sound)\n# some infos on the header file available at :\n# http://www.twinvq.org/english/technology_format.html\n0\tstring\t\tTWIN97012000\tVQF data\n>27\tshort\t\t0\t\t\\b, Mono\n>27\tshort\t\t1\t\t\\b, Stereo\n>31\tshort \t\t>0\t\t\\b, %d kbit/s\n>35\tshort \t\t>0\t\t\\b, %d kHz\n\n# Nelson A. de Oliveira (naoliv@gmail.com)\n# .eqf\n0\tstring\tWinamp\\ EQ\\ library\\ file\t%s\n# it will match only versions like v<digit>.<digit>\n# Since I saw only eqf files with version v1.1 I think that it's OK\n>23\tstring\tx\t\\b%.4s\n# .preset\n0\tstring\t[Equalizer\\ preset]\tXMMS equalizer preset\n# .m3u\n0\tsearch/1\t#EXTM3U \tM3U playlist text\n# .pls\n0\tsearch/1\t[playlist]\tPLS playlist text\n# licq.conf\n1\tstring\t[licq]\t\t\tLICQ configuration file\n\n# Atari ST audio files by Dirk Jagdmann <doj@cubic.org>\n0\tstring\t\tICE!\t\tSNDH Atari ST music\n0\tstring\t\tSC68\\ Music-file\\ /\\ (c)\\ (BeN)jami\tsc68 Atari ST music\n\n# musepak support From: \"Jiri Pejchal\" <jiri.pejchal@gmail.com>\n0       string          MP+     Musepack audio\n>3      byte            255     \\b, SV pre8\n>3      byte&0xF        0x6     \\b, SV 6\n>3      byte&0xF        0x8     \\b, SV 8\n>3      byte&0xF        0x7     \\b, SV 7\n>>3     byte&0xF0       0x0     \\b.0\n>>3     byte&0xF0       0x10    \\b.1\n>>3     byte&0xF0       240     \\b.15\n>>10    byte&0xF0       0x0     \\b, no profile\n>>10    byte&0xF0       0x10    \\b, profile 'Unstable/Experimental'\n>>10    byte&0xF0       0x50    \\b, quality 0\n>>10    byte&0xF0       0x60    \\b, quality 1\n>>10    byte&0xF0       0x70    \\b, quality 2 (Telephone)\n>>10    byte&0xF0       0x80    \\b, quality 3 (Thumb)\n>>10    byte&0xF0       0x90    \\b, quality 4 (Radio)\n>>10    byte&0xF0       0xA0    \\b, quality 5 (Standard)\n>>10    byte&0xF0       0xB0    \\b, quality 6 (Xtreme)\n>>10    byte&0xF0       0xC0    \\b, quality 7 (Insane)\n>>10    byte&0xF0       0xD0    \\b, quality 8 (BrainDead)\n>>10    byte&0xF0       0xE0    \\b, quality 9\n>>10    byte&0xF0       0xF0    \\b, quality 10\n>>27    byte            0x0     \\b, Buschmann 1.7.0-9, Klemm 0.90-1.05\n>>27    byte            102     \\b, Beta 1.02\n>>27    byte            104     \\b, Beta 1.04\n>>27    byte            105     \\b, Alpha 1.05\n>>27    byte            106     \\b, Beta 1.06\n>>27    byte            110     \\b, Release 1.1\n>>27    byte            111     \\b, Alpha 1.11\n>>27    byte            112     \\b, Beta 1.12\n>>27    byte            113     \\b, Alpha 1.13\n>>27    byte            114     \\b, Beta 1.14\n>>27    byte            115     \\b, Alpha 1.15\n\n# IMY\n# from http://filext.com/detaillist.php?extdetail=IMY\n# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm\n# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html\n# http://www.wx800.com/msg/download/irda/iMelody.pdf\n0\tstring\tBEGIN:IMELODY\tiMelody Ringtone Format\n\n# From: \"Mateus Caruccio\" <mateus@caruccio.com>\n# guitar pro v3,4,5 from http://filext.com/file-extension/gp3\n0\tstring\t\\030FICHIER\\ GUITAR\\ PRO\\ v3.\tGuitar Pro Ver. 3 Tablature\n\n# From: \"Leslie P. Polzer\" <leslie.polzer@gmx.net>\n60\tstring\tSONG\t\tSoundFX Module sound file\n\n# Type: Adaptive Multi-Rate Codec\n# URL:  http://filext.com/detaillist.php?extdetail=AMR\n# From: Russell Coker <russell@coker.com.au>\n0\tstring\t#!AMR\t\tAdaptive Multi-Rate Codec (GSM telephony)\n\n# Type: SuperCollider 3 Synth Definition File Format\n# From: Mario Lang <mlang@debian.org>\n0\tstring\tSCgf\tSuperCollider3 Synth Definition file,\n>4\tbelong\tx\tversion %d\n\n#----------------------------------------------------------------\n# $File: basis,v 1.4 2009/09/19 16:28:08 christos Exp $\n# basis: file(1) magic for BBx/Pro5-files\n#      Oliver Dammer <dammer@olida.de>\t 2005/11/07\n# http://www.basis.com business-basic-files.\n#\n0\tstring\t\t\\074\\074bbx\\076\\076\tBBx\n>7\tstring\t\t\\000\t\t\tindexed file\n>7\tstring\t\t\\001\t\t\tserial file\n>7\tstring\t\t\\002\t\t\tkeyed file\n>>13\tshort\t\t0\t\t\t(sort)\n>7\tstring\t\t\\004\t\t\tprogram\n>>18\tbyte\t\tx\t\t\t(LEVEL %d)\n>>>23\tstring\t\t>\\000\t\t\tpsaved\n>7\tstring\t\t\\006\t\t\tmkeyed file\n>>13\tshort\t\t0\t\t\t(sort)\n>>8\tstring\t\t\\000\t\t\t(mkey)\n\n#------------------------------------------------------------------------------\n# $File: bflt,v 1.4 2009/09/19 16:28:08 christos Exp $\n# bFLT: file(1) magic for BFLT uclinux binary files\n#\n# From Philippe De Muyter <phdm@macqel.be>\n#\n0\tstring\t\tbFLT\t\tBFLT executable\n>4\tbelong\t\tx\t\t- version %ld\n>4\tbelong\t\t4\n>>36\tbelong&0x1\t0x1\t\tram\n>>36\tbelong&0x2\t0x2\t\tgotpic\n>>36\tbelong&0x4\t0x4\t\tgzip\n>>36\tbelong&0x8\t0x8\t\tgzdata\n# Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files\n# http://ftg.lbl.gov/checkpoint\n0\tstring\tC\\0\\0\\0R\\0\\0\\0\tBLCR\n>16\tlelong\t1\tx86\n>16\tlelong\t3\talpha\n>16\tlelong\t5\tx86-64\n>16\tlelong\t7\tARM\n>8\tlelong\tx\tcontext data (little endian, version %d)\n# Uncomment the following only of your \"file\" program supports \"search\"\n#>0\tsearch/1024\tVMA\\06\tfor kernel\n#>>&1\tbyte\tx\t%d.\n#>>&2\tbyte\tx\t\b%d.\n#>>&3\tbyte\tx\t\b%d\n0\tstring\t\\0\\0\\0C\\0\\0\\0R\tBLCR\n>16\tbelong\t2\tSPARC\n>16\tbelong\t4\tppc\n>16\tbelong\t6\tppc64\n>16\tbelong\t7\tARMEB\n>16\tbelong\t8\tSPARC64\n>8\tbelong\tx\tcontext data (big endian, version %d)\n# Uncomment the following only of your \"file\" program supports \"search\"\n#>0\tsearch/1024\tVMA\\06\tfor kernel\n#>>&1\tbyte\tx\t%d.\n#>>&2\tbyte\tx\t\b%d.\n#>>&3\tbyte\tx\t\b%d\n\n#------------------------------------------------------------------------------\n# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $\n# blender: file(1) magic for Blender 3D related files\n#\n# Native format rule v1.2. For questions use the developers list \n# http://lists.blender.org/mailman/listinfo/bf-committers\n# GLOB chunk was moved near start and provides subversion info since 2.42 \n\n0\t\tstring\t=BLENDER\tBlender3D,\n>7\t\tstring\t=_\t\tsaved as 32-bits\n>>8\t\tstring\t=v\t\tlittle endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x40\t\tstring\t=GLOB\t\t\\b.\n>>>>0x58\tleshort\tx\t\t\\b%.4d\n>>8\t\tstring\t=V\t\tbig endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x40\t\tstring\t=GLOB\t\t\\b.\n>>>>0x58\tbeshort\tx\t\t\\b%.4d\n>7\t\tstring\t=-\t\tsaved as 64-bits\n>>8\t\tstring\t=v\t\tlittle endian\n>>9\t\tbyte\tx\t\twith version %c.\n>>10\t\tbyte\tx\t\t\\b%c\n>>11\t\tbyte\tx\t\t\\b%c\n>>0x44\t\tstring\t=GLOB\t\t\\b.\n>>>0x60\t\tleshort\tx\t\t\\b%.4d\n>>8\t\tstring\t=V\t\tbig endian\n>>>9\t\tbyte\tx\t\twith version %c.\n>>>10\t\tbyte\tx\t\t\\b%c\n>>>11\t\tbyte\tx\t\t\\b%c\n>>>0x44\t\tstring\t=GLOB\t\t\\b.\n>>>>0x60\tbeshort\tx\t\t\\b%.4d\n\n# Scripts that run in the embeded Python interpreter\n0\t\tstring\t#!BPY\t\tBlender3D BPython script\n\n#------------------------------------------------------------------------------\n# $File: blit,v 1.8 2009/09/19 16:28:08 christos Exp $\n# blit:  file(1) magic for 68K Blit stuff as seen from 680x0 machine\n#\n# Note that this 0407 conflicts with several other a.out formats...\n#\n# XXX - should this be redone with \"be\" and \"le\", so that it works on\n# little-endian machines as well?  If so, what's the deal with\n# \"VAX-order\" and \"VAX-order2\"?\n#\n#0\tlong\t\t0407\t\t68K Blit (standalone) executable\n#0\tshort\t\t0407\t\tVAX-order2 68K Blit (standalone) executable\n0\tshort\t\t03401\t\tVAX-order 68K Blit (standalone) executable\n0\tlong\t\t0406\t\t68k Blit mpx/mux executable\n0\tshort\t\t0406\t\tVAX-order2 68k Blit mpx/mux executable\n0\tshort\t\t03001\t\tVAX-order 68k Blit mpx/mux executable\n# Need more values for WE32 DMD executables.\n# Note that 0520 is the same as COFF\n#0\tshort\t\t0520\t\ttty630 layers executable\n\n#------------------------------------------------------------------------------\n# $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $\n# i80960 b.out objects and archives\n#\n0\tlong\t\t0x10d\t\ti960 b.out relocatable object\n>16\tlong\t\t>0\t\tnot stripped\n#\n# b.out archive (hp-rt on i960)\n0\tstring\t\t=!<bout>\tb.out archive\n>8\tstring\t\t__.SYMDEF\trandom library\n\n#------------------------------------------------------------------------------\n# $File: bsdi,v 1.5 2009/09/19 16:28:08 christos Exp $\n# bsdi:  file(1) magic for BSD/OS (from BSDI) objects\n#\n\n0\tlelong\t\t0314\t\t386 compact demand paged pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses shared libs)\n\n0\tlelong\t\t0407\t\t386 executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses shared libs)\n\n0\tlelong\t\t0410\t\t386 pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses shared libs)\n\n0\tlelong\t\t0413\t\t386 demand paged pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n>32\tbyte\t\t0x6a\t\t(uses shared libs)\n\n# same as in SunOS 4.x, except for static shared libraries\n0\tbelong&077777777\t0600413\t\tsparc demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n\n0\tbelong&077777777\t0600410\t\tsparc pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n\n0\tbelong&077777777\t0600407\t\tsparc\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n>36\tbelong\t\t0xb4100001\t(uses shared libs)\n# Chiasmus is an encryption standard developed by the German Federal\n# Office for Information Security (Bundesamt fuer Sicherheit in der\n# Informationstechnik).\n\n# Extension: .xia\n0\tstring\tXIA1\tChiasmus encrypted data\n\n# Extension: .xis\n0\tstring\tXIS\tChiasmus key\n\n#------------------------------------------------------------------------------\n# $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $\n# BTSnoop:  file(1) magic for BTSnoop files\n#\n# From <marcel@holtmann.org>\n0\tstring\t\tbtsnoop\\0\t\tBTSnoop\n>8\tbelong\t\tx\t\t\tversion %d,\n>12\tbelong\t\t1001\t\t\tUnencapsulated HCI\n>12\tbelong\t\t1002\t\t\tHCI UART (H4)\n>12\tbelong\t\t1003\t\t\tHCI BCSP\n>12\tbelong\t\t1004\t\t\tHCI Serial (H5)\n>>12\tbelong\t\tx\t\t\ttype %d\n\n#------------------------------------------------------------------------------\n# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $\n# c64:  file(1) magic for various commodore 64 related files\n#\n# From: Dirk Jagdmann <doj@cubic.org>\n\n0x16500\tbelong\t\t0x12014100\tD64 Image\n0x16500\tbelong\t\t0x12014180\tD71 Image\n0x61800 belong\t\t0x28034400\tD81 Image\n0\tstring\t\tC64\\40CARTRIDGE\tCCS C64 Emultar Cartridge Image\n0\tbelong\t\t0x43154164\tX64 Image\n\n0\tstring\t\tGCR-1541\tGCR Image\n>8\tbyte\t\tx\t\tversion: %i\n>9\tbyte\t\tx\t\ttracks: %i\n\n9\tstring\t\tPSUR\t\tARC archive (c64)\n2\tstring\t\t-LH1-\t\tLHA archive (c64)\n\n0\tstring\t\tC64File\t\tPC64 Emulator file\n>8\tstring\t\t>\\0\t\t\"%s\"\n0\tstring\t\tC64Image\tPC64 Freezer Image\n\n0\tbeshort\t\t0x38CD\t\tC64 PCLink Image\n0\tstring\t\tCBM\\144\\0\\0\tPower 64 C64 Emulator Snapshot\n\n0\tbelong\t\t0xFF424CFF\tWRAptor packer (c64)\n\n0\tstring\t\tC64S\\x20tape\\x20file\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n0\tstring\t\tC64\\x20tape\\x20image\\x20file\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n0\tstring\t\tC64S\\x20tape\\x20image\\x20file\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\\x0\tT64 tape Image\n>32\tleshort\t\tx\t\tVersion:0x%x\n>36\tleshort\t\t!0\t\tEntries:%i\n>40\tstring\t\tx\t\tName:%.24s\n\n#------------------------------------------------------------------------------\n# $File: cad,v 1.9 2009/09/19 16:28:08 christos Exp $\n# autocad:  file(1) magic for cad files\n#\n\n# AutoCAD DWG versions R13/R14 (www.autodesk.com)\n# Written December 01, 2003 by Lester Hightower\n# Based on the DWG File Format Specifications at http://www.opendwg.org/\n0\tstring\t       \\101\\103\\061\\060\\061\t\t   AutoCAD\n>5\tstring\t       \\062\\000\\000\\000\\000\t\t   DWG ver. R13\n>5\tstring\t       \\064\\000\\000\\000\\000\t\t   DWG ver. R14\n\n# Microstation DGN/CIT Files (www.bentley.com)\n# Last updated July 29, 2005 by Lester Hightower\n# DGN is the default file extension of Microstation/Intergraph CAD files.\n# CIT is the proprietary raster format (similar to TIFF) used to attach\n# raster underlays to Microstation DGN (vector) drawings.\n# \n# http://www.wotsit.org/search.asp\n# http://filext.com/detaillist.php?extdetail=DGN\n# http://filext.com/detaillist.php?extdetail=CIT\n#\n# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2\n# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928\n# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682\n# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F\n0\tstring\t\\010\\011\\376\t\t\tMicrostation\n>3\tstring\t\\002\n>>30\tstring\t\\026\\105\t\t\tDGNFile\n>>30\tstring\t\\034\\105\t\t\tDGNFile\n>>30\tstring\t\\073\\107\t\t\tDGNFile\n>>30\tstring\t\\073\\110\t\t\tDGNFile\n>>30\tstring\t\\106\\107\t\t\tDGNFile\n>>30\tstring\t\\110\\103\t\t\tDGNFile\n>>30\tstring\t\\120\\104\t\t\tDGNFile\n>>30\tstring\t\\172\\104\t\t\tDGNFile\n>>30\tstring\t\\172\\105\t\t\tDGNFile\n>>30\tstring\t\\172\\106\t\t\tDGNFile\n>>30\tstring\t\\234\\106\t\t\tDGNFile\n>>30\tstring\t\\273\\105\t\t\tDGNFile\n>>30\tstring\t\\306\\106\t\t\tDGNFile\n>>30\tstring\t\\310\\104\t\t\tDGNFile\n>>30\tstring\t\\341\\104\t\t\tDGNFile\n>>30\tstring\t\\372\\103\t\t\tDGNFile\n>>30\tstring\t\\372\\104\t\t\tDGNFile\n>>30\tstring\t\\372\\106\t\t\tDGNFile\n>>30\tstring\t\\376\\103\t\t\tDGNFile\n>4\tstring\t\\030\\000\\000\t\t\tCITFile\n>4\tstring\t\\030\\000\\003\t\t\tCITFile\n\n# AutoCad, from Nahuel Greco\n# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)\n0\tstring AC1012\tAutoCad (release 12)\n0\tstring AC1013\tAutoCad (release 13)\n0\tstring AC1014\tAutoCad (release 14)\n\n# CAD: file(1) magic for computer aided design files\n# Phillip Griffith <phillip dot griffith at gmail dot com>\n# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.\n#\n0\tbelong\t0x08051700\tBentley/Intergraph MicroStation DGN cell library\n0\tbelong\t0x0809fe02\tBentley/Intergraph MicroStation DGN vector CAD\n0\tbelong\t0xc809fe02\tBentley/Intergraph MicroStation DGN vector CAD\n0\tbeshort\t0x0809\t\tBentley/Intergraph MicroStation\n>0x02\tbyte\t0xfe\n>>0x04\tbeshort\t0x1800\t\tCIT raster CAD\n0\tstring\tAC1012\t\tAutoDesk AutoCAD R13\n0\tstring\tAC1014\t\tAutoDesk AutoCAD R14 \n0\tstring\tAC1015\t\tAutoDesk AutoCAD R2000\n\n#------------------------------------------------------------------------------\n# $File: cafebabe,v 1.8 2009/09/19 16:28:08 christos Exp $\n# Cafe Babes unite!\n#\n# Since Java bytecode and Mach-O fat-files have the same magic number, the test\n# must be performed in the same \"magic\" sequence to get both right.  The long\n# at offset 4 in a mach-O fat file tells the number of architectures; the short at\n# offset 4 in a Java bytecode file is the JVM minor version and the\n# short at offset 6 is the JVM major version.  Since there are only \n# only 18 labeled Mach-O architectures at current, and the first released \n# Java class format was version 43.0, we can safely choose any number\n# between 18 and 39 to test the number of architectures against\n# (and use as a hack). Let's not use 18, because the Mach-O people\n# might add another one or two as time goes by...\n#\n0\tbelong\t\t0xcafebabe\n!:mime\tapplication/x-java-applet\n>4\tbelong\t\t>30\t\tcompiled Java class data,\n>>6\tbeshort\t\tx\t        version %d.\n>>4\tbeshort\t\tx       \t\\b%d\n# Which is which?\n#>>4\tbelong\t\t0x032d\t\t(Java 1.0)\n#>>4\tbelong\t\t0x032d\t\t(Java 1.1)\n>>4\tbelong\t\t0x002e\t\t(Java 1.2)\n>>4\tbelong\t\t0x002f\t\t(Java 1.3)\n>>4\tbelong\t\t0x0030\t\t(Java 1.4)\n>>4\tbelong\t\t0x0031\t\t(Java 1.5)\n>>4\tbelong\t\t0x0032\t\t(Java 1.6)\n\n\n0\tbelong\t\t0xcafebabe\n>4\tbelong\t\t1\t\tMach-O fat file with 1 architecture\n>4\tbelong\t\t>1\n>>4\tbelong\t\t<20\t\tMach-O fat file with %ld architectures\n\n0\tbelong\t\t0xcafed00d\tJAR compressed with pack200,\n>>5\tbyte\t\tx\t\tversion %d.\n>>4\tbyte\t\tx\t\t\\b%d\n!:mime\tapplication/x-java-pack200\n\n#------------------------------------------------------------------------------\n# $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $\n# CDDB: file(1) magic for CDDB(tm) format CD text data files\n#\n# From <steve@gracenote.com>\n#\n# This is the /etc/magic entry to decode datafiles as used by\n# CDDB-enabled CD player applications.\n#\n\n0\tsearch/1/w\t#\\040xmcd\tCDDB(tm) format CD text data\n\n#------------------------------------------------------------------------------\n# $File: chord,v 1.4 2009/09/19 16:28:08 christos Exp $\n# chord: file(1) magic for Chord music sheet typesetting utility input files\n#\n# From Philippe De Muyter <phdm@macqel.be>\n# File format is actually free, but many distributed files begin with `{title'\n#\n0\tstring\t\t{title\t\tChord text file\n\n# Type:\tPowerTab file format\n# URL:\thttp://www.power-tab.net/\n# From:\tJelmer Vernooij <jelmer@samba.org>\n0\tstring\t\tptab\\003\\000\tPower-Tab v3 Tablature File\n0\tstring\t\tptab\\004\\000\tPower-Tab v4 Tablature File\n\n#------------------------------------------------------------------------------\n# $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $\n# cisco:  file(1) magic for cisco Systems routers\n#\n# Most cisco file-formats are covered by the generic elf code\n#\n# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.\n0\tbelong&0xffffff00\t0x85011400  cisco IOS microcode\n>7\tstring\t\t>\\0\t\t    for '%s'\n0\tbelong&0xffffff00\t0x8501cb00  cisco IOS experimental microcode\n>7\tstring\t\t>\\0\t\t    for '%s'\n\n#------------------------------------------------------------------------------\n# $File: citrus,v 1.4 2009/09/19 16:28:08 christos Exp $\n# citrus locale declaration\n#\n\n0\tstring\t\tRuneCT\t\tCitrus locale declaration for LC_CTYPE\n\n\n#------------------------------------------------------------------------------\n# $File: c-lang,v 1.14 2009/09/19 16:28:08 christos Exp $\n# c-lang:  file(1) magic for C programs (or REXX)\n#\n\n# XPM icons (Greg Roelofs, newt@uchicago.edu)\n# if you uncomment \"/*\" for C/REXX below, also uncomment this entry\n#0\tstring\t\t/*\\ XPM\\ */\tX pixmap image data\n#!:mime\timage/x-xpmi\n\n# 3DS (3d Studio files) Conflicts with diff output 0x3d '='\n#16\tbeshort\t\t0x3d3d\t\timage/x-3ds\n\n# this first will upset you if you're a PL/1 shop...\n# in which case rm it; ascmagic will catch real C programs\n#0\tsearch/1\t/*\t\tC or REXX program text\n#0\tsearch/1\t//\t\tC++ program text\n\n# From: Mikhail Teterin <mi@aldan.algebra.com> \n0\tstring\t\tcscope\t\tcscope reference data\n>7\tstring\t\tx\t\tversion %.2s\n# We skip the path here, because it is often long (so file will\n# truncate it) and mostly redundant.\n# The inverted index functionality was added some time betwen\n# versions 11 and 15, so look for -q if version is above 14:\n>7\tstring\t\t>14\n>>10\tsearch/100\t\\ -q\\ \t\twith inverted index\n>10\tsearch/100\t\\ -c\\ \t\ttext (non-compressed)\n\n#------------------------------------------------------------------------------\n# $File: clarion,v 1.4 2009/09/19 16:28:08 christos Exp $\n# clarion:  file(1) magic for # Clarion Personal/Professional Developer\n# (v2 and above)\n# From: Julien Blache <jb@jblache.org>\n\n# Database files\n# signature\n0\tleshort\t0x3343\tClarion Developer (v2 and above) data file\n# attributes\n>2\tleshort\t&0x0001\t\\b, locked\n>2\tleshort\t&0x0004\t\\b, encrypted\n>2\tleshort\t&0x0008\t\\b, memo file exists\n>2\tleshort\t&0x0010\t\\b, compressed\n>2\tleshort\t&0x0040\t\\b, read only\n# number of records\n>5\tlelong\tx\t\\b, %ld records\n\n# Memo files\n0\tleshort\t0x334d\tClarion Developer (v2 and above) memo data\n\n# Key/Index files\n# No magic? :(\n\n# Help files\n0\tleshort\t0x49e0\tClarion Developer (v2 and above) help data\n\n#------------------------------------------------------------------------------\n# $File: claris,v 1.5 2009/09/19 16:28:08 christos Exp $\n# claris:  file(1) magic for claris\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Claris Works a word processor, etc.\n# Version 3.0\n\n# .pct claris works clip art files\n#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000\n#*\n#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000\n#null to byte 1000 octal\n514\tstring\t\\377\\377\\377\\377\\000\tClaris clip art?\n>0\tstring\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tyes.\n514\tstring\t\\377\\377\\377\\377\\001\tClaris clip art?\n>0\tstring\t\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tyes.\n\n# Claris works files\n# .cwk\n0\tstring\t\\002\\000\\210\\003\\102\\117\\102\\117\\000\\001\\206 Claris works document\n# .plt\n0\tstring\t\\020\\341\\000\\000\\010\\010\tClaris Works pallete files .plt\n\n# .msp a dictionary file I am not sure about this I have only one .msp file\n0\tstring\t\\002\\271\\262\\000\\040\\002\\000\\164\tClaris works dictionary\n\n# .usp are user dictionary bits\n# I am not sure about a magic header:\n#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151\n#        soh   S   p   f   8   U   D  sp   ^   S  cr  nl   p   o   d   i\n#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043\n#          a   t   r   i   s   t  sp   ^   S  cr  nl   d   i   v  sp   #\n\n# .mth Thesaurus\n# starts with \\0 but no magic header\n\n# .chy Hyphenation file\n# I am not sure: 000 210 034 000 000\n\n# other claris files\n#./windows/claris/useng.ndx: data\n#./windows/claris/xtndtran.l32: data\n#./windows/claris/xtndtran.lst: data\n#./windows/claris/clworks.lbl: data\n#./windows/claris/clworks.prf: data\n#./windows/claris/userd.spl: data\n\n#------------------------------------------------------------------------------\n# $File: clipper,v 1.6 2009/09/19 16:28:08 christos Exp $\n# clipper:  file(1) magic for Intergraph (formerly Fairchild) Clipper.\n#\n# XXX - what byte order does the Clipper use?\n#\n# XXX - what's the \"!\" stuff:\n#\n# >18\tshort\t\t!074000,000000\tC1 R1 \n# >18\tshort\t\t!074000,004000\tC2 R1\n# >18\tshort\t\t!074000,010000\tC3 R1\n# >18\tshort\t\t!074000,074000\tTEST\n#\n# I shall assume it's ANDing the field with the first value and\n# comparing it with the second, and rewrite it as:\n#\n# >18\tshort&074000\t000000\t\tC1 R1 \n# >18\tshort&074000\t004000\t\tC2 R1\n# >18\tshort&074000\t010000\t\tC3 R1\n# >18\tshort&074000\t074000\t\tTEST\n#\n# as SVR3.1's \"file\" doesn't support anything of the \"!074000,000000\"\n# sort, nor does SunOS 4.x, so either it's something Intergraph added\n# in CLIX, or something AT&T added in SVR3.2 or later, or something\n# somebody else thought was a good idea; it's not documented in the\n# man page for this version of \"magic\", nor does it appear to be\n# implemented (at least not after I blew off the bogus code to turn\n# old-style \"&\"s into new-style \"&\"s, which just didn't work at all).\n#\n0\tshort\t\t0575\t\tCLIPPER COFF executable (VAX #)\n>20\tshort\t\t0407\t\t(impure)\n>20\tshort\t\t0410\t\t(5.2 compatible)\n>20\tshort\t\t0411\t\t(pure)\n>20\tshort\t\t0413\t\t(demand paged)\n>20\tshort\t\t0443\t\t(target shared library)\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %ld\n0\tshort\t\t0577\t\tCLIPPER COFF executable\n>18\tshort&074000\t000000\t\tC1 R1 \n>18\tshort&074000\t004000\t\tC2 R1\n>18\tshort&074000\t010000\t\tC3 R1\n>18\tshort&074000\t074000\t\tTEST\n>20\tshort\t\t0407\t\t(impure)\n>20\tshort\t\t0410\t\t(pure)\n>20\tshort\t\t0411\t\t(separate I&D)\n>20\tshort\t\t0413\t\t(paged)\n>20\tshort\t\t0443\t\t(target shared library)\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %ld\n>48\tlong&01\t\t01\t\talignment trap enabled\n>52\tbyte\t\t1\t\t-Ctnc\n>52\tbyte\t\t2\t\t-Ctsw\n>52\tbyte\t\t3\t\t-Ctpw\n>52\tbyte\t\t4\t\t-Ctcb\n>53\tbyte\t\t1\t\t-Cdnc\n>53\tbyte\t\t2\t\t-Cdsw\n>53\tbyte\t\t3\t\t-Cdpw\n>53\tbyte\t\t4\t\t-Cdcb\n>54\tbyte\t\t1\t\t-Csnc\n>54\tbyte\t\t2\t\t-Cssw\n>54\tbyte\t\t3\t\t-Cspw\n>54\tbyte\t\t4\t\t-Cscb\n4\tstring\t\tpipe\t\tCLIPPER instruction trace\n4\tstring\t\tprof\t\tCLIPPER instruction profile\n\n#------------------------------------------------------------------------------\n# $File: commands,v 1.36 2010/01/24 18:41:11 christos Exp $\n# commands:  file(1) magic for various shells and interpreters\n#\n#0\tstring\t\t:\t\t\tshell archive or script for antique kernel text\n0\tstring/w\t#!\\ /bin/sh\t\tPOSIX shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /bin/csh\t\tC shell script text executable\n!:mime\ttext/x-shellscript\n# korn shell magic, sent by George Wu, gwu@clyde.att.com\n0\tstring/w\t#!\\ /bin/ksh\t\tKorn shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w \t#!\\ /bin/tcsh\t\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/bin/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w \t#!\\ /usr/local/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bin/tcsh\tTenex C shell script text executable\n!:mime\ttext/x-shellscript\n\n#\n# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)\n0\tstring/w\t#!\\ /bin/zsh\t\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/bin/zsh\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bin/zsh\tPaul Falstad's zsh script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bin/ash\tNeil Brown's ash script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bin/ae\tNeil Brown's ae script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /bin/nawk\t\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/w\t#!\\ /usr/bin/nawk\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/w\t#!\\ /usr/local/bin/nawk\tnew awk script text executable\n!:mime\ttext/x-nawk\n0\tstring/w\t#!\\ /bin/gawk\t\tGNU awk script text executable\n!:mime\ttext/x-gawk\n0\tstring/w\t#!\\ /usr/bin/gawk\tGNU awk script text executable\n!:mime\ttext/x-gawk\n0\tstring/w\t#!\\ /usr/local/bin/gawk\tGNU awk script text executable\n!:mime\ttext/x-gawk\n#\n0\tstring/w\t#!\\ /bin/awk\t\tawk script text executable\n!:mime\ttext/x-awk\n0\tstring/w\t#!\\ /usr/bin/awk\tawk script text executable\n!:mime\ttext/x-awk\n# update to distinguish from *.vcf files\n# this is broken because postscript has /EBEGIN{ for example.\n#0\tsearch/Ww\tBEGIN {\t\t\tawk script text\n0\tregex\t\t=^\\\\s*BEGIN\\\\s*[{]\tawk script text\n\n# AT&T Bell Labs' Plan 9 shell\n0\tstring/w\t#!\\ /bin/rc\tPlan 9 rc shell script text executable\n\n# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)\n0\tstring/w\t#!\\ /bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n0\tstring/w\t#!\\ /usr/local/bin/bash\tBourne-Again shell script text executable\n!:mime\ttext/x-shellscript\n\n# using env\n0\tstring\t\t#!/usr/bin/env\t\ta\n>15\tstring\t\t>\\0\t\t\t%s script text executable\n0\tstring\t\t#!\\ /usr/bin/env\ta\n>16\tstring\t\t>\\0\t\t\t%s script text executable\n\n# PHP scripts\n# Ulf Harnhammar <ulfh@update.uu.se>\n0\tsearch/1/c\t=<?php\t\t\tPHP script text\n!:mime\ttext/x-php\n0\tsearch/1\t=<?\\n\t\t\tPHP script text\n!:mime\ttext/x-php\n0\tsearch/1\t=<?\\r\t\t\tPHP script text\n!:mime\ttext/x-php\n0\tsearch/1/w\t#!\\ /usr/local/bin/php\tPHP script text executable\n!:mime\ttext/x-php\n0\tsearch/1/w\t#!\\ /usr/bin/php\tPHP script text executable\n!:mime\ttext/x-php\n\n0\tstring\t\tZend\\x00\t\tPHP script Zend Optimizer data\n\n0\tstring\t\t$!\t\t\tDCL command file\n\n# Type: Pdmenu\n# URL:  http://packages.debian.org/pdmenu\n# From: Edward Betts <edward@debian.org>\n0\tstring\t#!/usr/bin/pdmenu\tPdmenu configuration file text\n\n#----------------------------------------------------------------------------\n# $File: communications,v 1.5 2009/09/19 16:28:08 christos Exp $\n# communication\n\n# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.\n# It is used for conformance testing of communication protocols.\n# Added by W. Borgert <debacle@debian.org>.\n0\tstring\t\t$Suite\t\t\tTTCN Abstract Test Suite\n>&1\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n>&2\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n>&3\tstring\t\t$SuiteId\n>>&1\tstring\t\t>\\n\t\t\t%s\n\n# MSC (message sequence charts) are a formal description technique,\n# described in ITU-T Z.120, mainly used for communication protocols.\n# Added by W. Borgert <debacle@debian.org>.\n0\tstring\t\tmscdocument\tMessage Sequence Chart (document)\n0\tstring\t\tmsc\t\tMessage Sequence Chart (chart)\n0\tstring\t\tsubmsc\t\tMessage Sequence Chart (subchart)\n\n#------------------------------------------------------------------------------\n# $File: compress,v 1.42 2009/09/19 16:28:08 christos Exp $\n# compress:  file(1) magic for pure-compression formats (no archives)\n#\n# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.\n#\n# Formats for various forms of compressed data\n# Formats for \"compress\" proper have been moved into \"compress.c\",\n# because it tries to uncompress it to figure out what's inside.\n\n# standard unix compress\n0\tstring\t\t\\037\\235\tcompress'd data\n!:mime\tapplication/x-compress\n!:apple\tLZIVZIVU\n>2\tbyte&0x80\t>0\t\tblock compressed\n>2\tbyte&0x1f\tx\t\t%d bits\n\n# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)\n#   Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002\n#\t* Original filename is only at offset 10 if \"extra field\" absent\n#\t* Produce shorter output - notably, only report compression methods\n#\t  other than 8 (\"deflate\", the only method defined in RFC 1952).\n0       string          \\037\\213        gzip compressed data\n!:mime\tapplication/x-gzip\n>2\tbyte\t\t<8\t\t\\b, reserved method\n>2\tbyte\t\t>8\t\t\\b, unknown method\n>3\tbyte\t\t&0x01\t\t\\b, ASCII\n>3\tbyte\t\t&0x02\t\t\\b, has CRC\n>3\tbyte\t\t&0x04\t\t\\b, extra field\n>3\tbyte&0xC\t=0x08\n>>10\tstring\t\tx\t\t\\b, was \"%s\"\n>3\tbyte\t\t&0x10\t\t\\b, has comment\n>9\tbyte\t\t=0x00\t\t\\b, from FAT filesystem (MS-DOS, OS/2, NT)\n>9\tbyte\t\t=0x01\t\t\\b, from Amiga\n>9\tbyte\t\t=0x02\t\t\\b, from VMS\n>9\tbyte\t\t=0x03\t\t\\b, from Unix\n>9\tbyte\t\t=0x04\t\t\\b, from VM/CMS\n>9\tbyte\t\t=0x05\t\t\\b, from Atari\n>9\tbyte\t\t=0x06\t\t\\b, from HPFS filesystem (OS/2, NT)\n>9\tbyte\t\t=0x07\t\t\\b, from MacOS\n>9\tbyte\t\t=0x08\t\t\\b, from Z-System\n>9\tbyte\t\t=0x09\t\t\\b, from CP/M\n>9\tbyte\t\t=0x0A\t\t\\b, from TOPS/20\n>9\tbyte\t\t=0x0B\t\t\\b, from NTFS filesystem (NT)\n>9\tbyte\t\t=0x0C\t\t\\b, from QDOS\n>9\tbyte\t\t=0x0D\t\t\\b, from Acorn RISCOS\n>3\tbyte\t\t&0x10\t\t\\b, comment\n>3\tbyte\t\t&0x20\t\t\\b, encrypted\n>4\tledate\t\t>0\t\t\\b, last modified: %s\n>8\tbyte\t\t2\t\t\\b, max compression\n>8\tbyte\t\t4\t\t\\b, max speed\n\n# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis\n0\tstring\t\t\\037\\036\tpacked data\n!:mime\tapplication/octet-stream\n>2\tbelong\t\t>1\t\t\\b, %d characters originally\n>2\tbelong\t\t=1\t\t\\b, %d character originally\n#\n# This magic number is byte-order-independent.\n0\tshort\t\t0x1f1f\t\told packed data\n!:mime\tapplication/octet-stream\n\n# XXX - why *two* entries for \"compacted data\", one of which is\n# byte-order independent, and one of which is byte-order dependent?\n#\n0\tshort\t\t0x1fff\t\tcompacted data\n!:mime\tapplication/octet-stream\n# This string is valid for SunOS (BE) and a matching \"short\" is listed\n# in the Ultrix (LE) magic file.\n0\tstring\t\t\\377\\037\tcompacted data\n!:mime\tapplication/octet-stream\n0\tshort\t\t0145405\t\thuf output\n!:mime\tapplication/octet-stream\n\n# bzip2\n0\tstring\t\tBZh\t\tbzip2 compressed data\n!:mime\tapplication/x-bzip2\n>3\tbyte\t\t>47\t\t\\b, block size = %c00k\n\n# lzip\n0\tstring\t\tLZIP\t\tlzip compressed data\n!:mime application/x-lzip\n>4\tbyte\t\tx\t\t\\b, version: %d\n\n# squeeze and crunch\n# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>\n0\tbeshort\t\t0x76FF\t\tsqueezed data,\n>4\tstring\t\tx\t\toriginal name %s\n0\tbeshort\t\t0x76FE\t\tcrunched data,\n>2\tstring\t\tx\t\toriginal name %s\n0\tbeshort\t\t0x76FD\t\tLZH compressed data,\n>2\tstring\t\tx\t\toriginal name %s\n\n# Freeze\n0\tstring\t\t\\037\\237\tfrozen file 2.1\n0\tstring\t\t\\037\\236\tfrozen file 1.0 (or gzip 0.5)\n\n# SCO compress -H (LZH)\n0\tstring\t\t\\037\\240\tSCO compress -H (LZH) data\n\n# European GSM 06.10 is a provisional standard for full-rate speech\n# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse\n# excitation/long term prediction) coding at 13 kbit/s.\n#\n# There's only a magic nibble (4 bits); that nibble repeats every 33\n# bytes.  This isn't suited for use, but maybe we can use it someday.\n#\n# This will cause very short GSM files to be declared as data and\n# mismatches to be declared as data too!\n#0\tbyte&0xF0\t0xd0\t\tdata\n#>33\tbyte&0xF0\t0xd0\n#>66\tbyte&0xF0\t0xd0\n#>99\tbyte&0xF0\t0xd0\n#>132\tbyte&0xF0\t0xd0\t\tGSM 06.10 compressed audio\n\n# bzip\ta block-sorting file compressor\n#\tby Julian Seward <sewardj@cs.man.ac.uk> and others\n#\n#0\tstring\t\tBZ\t\tbzip compressed data\n#>2\tbyte\t\tx\t\t\\b, version: %c\n#>3\tstring\t\t=1\t\t\\b, compression block size 100k\n#>3\tstring\t\t=2\t\t\\b, compression block size 200k\n#>3\tstring\t\t=3\t\t\\b, compression block size 300k\n#>3\tstring\t\t=4\t\t\\b, compression block size 400k\n#>3\tstring\t\t=5\t\t\\b, compression block size 500k\n#>3\tstring\t\t=6\t\t\\b, compression block size 600k\n#>3\tstring\t\t=7\t\t\\b, compression block size 700k\n#>3\tstring\t\t=8\t\t\\b, compression block size 800k\n#>3\tstring\t\t=9\t\t\\b, compression block size 900k\n\n# lzop from <markus.oberhumer@jk.uni-linz.ac.at>\n0\tstring\t\t\\x89\\x4c\\x5a\\x4f\\x00\\x0d\\x0a\\x1a\\x0a\tlzop compressed data\n>9\tbeshort\t\t<0x0940\n>>9\tbyte&0xf0\t=0x00\t\t- version 0.\n>>9\tbeshort&0x0fff\tx\t\t\\b%03x,\n>>13\tbyte\t\t1\t\tLZO1X-1,\n>>13\tbyte\t\t2\t\tLZO1X-1(15),\n>>13\tbyte\t\t3\t\tLZO1X-999,\n## >>22\tbedate\t\t>0\t\tlast modified: %s,\n>>14\tbyte\t\t=0x00\t\tos: MS-DOS\n>>14\tbyte\t\t=0x01\t\tos: Amiga\n>>14\tbyte\t\t=0x02\t\tos: VMS\n>>14\tbyte\t\t=0x03\t\tos: Unix\n>>14\tbyte\t\t=0x05\t\tos: Atari\n>>14\tbyte\t\t=0x06\t\tos: OS/2\n>>14\tbyte\t\t=0x07\t\tos: MacOS\n>>14\tbyte\t\t=0x0A\t\tos: Tops/20\n>>14\tbyte\t\t=0x0B\t\tos: WinNT\n>>14\tbyte\t\t=0x0E\t\tos: Win32\n>9\tbeshort\t\t>0x0939\n>>9\tbyte&0xf0\t=0x00\t\t- version 0.\n>>9\tbyte&0xf0\t=0x10\t\t- version 1.\n>>9\tbyte&0xf0\t=0x20\t\t- version 2.\n>>9\tbeshort&0x0fff\tx\t\t\\b%03x,\n>>15\tbyte\t\t1\t\tLZO1X-1,\n>>15\tbyte\t\t2\t\tLZO1X-1(15),\n>>15\tbyte\t\t3\t\tLZO1X-999,\n## >>25\tbedate\t\t>0\t\tlast modified: %s,\n>>17\tbyte\t\t=0x00\t\tos: MS-DOS\n>>17\tbyte\t\t=0x01\t\tos: Amiga\n>>17\tbyte\t\t=0x02\t\tos: VMS\n>>17\tbyte\t\t=0x03\t\tos: Unix\n>>17\tbyte\t\t=0x05\t\tos: Atari\n>>17\tbyte\t\t=0x06\t\tos: OS/2\n>>17\tbyte\t\t=0x07\t\tos: MacOS\n>>17\tbyte\t\t=0x0A\t\tos: Tops/20\n>>17\tbyte\t\t=0x0B\t\tos: WinNT\n>>17\tbyte\t\t=0x0E\t\tos: Win32\n\n# 4.3BSD-Quasijarus Strong Compression\n# http://minnie.tuhs.org/Quasijarus/compress.html\n0\tstring\t\t\\037\\241\tQuasijarus strong compressed data\n\n# From: Cory Dikkers <cdikkers@swbell.net>\n0\tstring\t\tXPKF\t\tAmiga xpkf.library compressed data\n0\tstring\t\tPP11\t\tPower Packer 1.1 compressed data\n0\tstring\t\tPP20\t\tPower Packer 2.0 compressed data,\n>4\tbelong\t\t0x09090909\tfast compression\n>4\tbelong\t\t0x090A0A0A\tmediocre compression\n>4\tbelong\t\t0x090A0B0B\tgood compression\n>4\tbelong\t\t0x090A0C0C\tvery good compression\n>4\tbelong\t\t0x090A0C0D\tbest compression\n\n# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)\n# http://www.7-zip.org or DOC/7zFormat.txt \n#\n0\tstring\t\t7z\\274\\257\\047\\034\t7-zip archive data,\n>6\tbyte\t\tx\t\t\tversion %d\n>7\tbyte\t\tx\t\t\t\\b.%d\n!:mime\tapplication/x-7z-compressed\n\n# Type: LZMA\n0\tlelong\t\t0x8000005d\t\tLZMA compressed data,\n>5\tlequad\t\t=0xffffffffffffffff\tstreamed\n>5\tlequad\t\t!0xffffffffffffffff\tnon-streamed, size %lld\n\n# http://tukaani.org/xz/xz-file-format.txt\n0\tustring\t\t\\xFD7zXZ\\x00\t\tXZ compressed data\n!:mime\tapplication/x-xz\n\n# AFX compressed files (Wolfram Kleff)\n2\tstring\t\t-afx-\t\tAFX compressed file data\n\n# Supplementary magic data for the file(1) command to support\n# rzip(1).  The format is described in magic(5).\n#\n# Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with\n# this file.\n#\n0\tstring\t\tRZIP\t\trzip compressed data\n>4\tbyte\t\tx\t\t- version %d\n>5\tbyte\t\tx\t\t\\b.%d\n>6\tbelong\t\tx\t\t(%d bytes)\n\n# Type: XZ\n# URL: http://tukaani.org/xz/\n0\tstring\t\t\\xfd\\x37\\x7a\\x58\\x5a\\x00\tXZ compressed data\n!:mime application/x-xz\n\n# Type:\tDACT compressed files\n0\tlong\t0x444354C3\tDACT compressed data\n>4\tbyte\t>-1\t\t(version %i.\n>5\tbyte\t>-1\t\t%i.\n>6\tbyte\t>-1\t\t%i)\n>7\tlong\t>0\t\t, original size: %i bytes\n>15\tlong\t>30\t\t, block size: %i bytes\n\n#------------------------------------------------------------------------------\n# $File: console,v 1.16 2009/09/19 16:28:08 christos Exp $\n# Console game magic\n# Toby Deshane <hac@shoelace.digivill.net>\n#    ines:  file(1) magic for Marat's iNES Nintendo Entertainment System\n#           ROM dump format\n\n0 string NES\\032 iNES ROM dump,\n>4 byte  x     %dx16k PRG\n>5 byte  x     \\b, %dx8k CHR\n>6 byte&0x01  =0x1  \\b, [Vert.]\n>6 byte&0x01  =0x0  \\b, [Horiz.]\n>6 byte&0x02  =0x2  \\b, [SRAM]\n>6 byte&0x04  =0x4  \\b, [Trainer]\n>6 byte&0x04  =0x8  \\b, [4-Scr]\n\n#------------------------------------------------------------------------------\n# gameboy:  file(1) magic for the Nintendo (Color) Gameboy raw ROM format\n#\n0x104 belong 0xCEED6666 Gameboy ROM:\n>0x134 string >\\0 \"%.16s\"\n>0x146 byte 0x03  \\b,[SGB]\n>0x147 byte 0x00  \\b, [ROM ONLY]\n>0x147 byte 0x01  \\b, [ROM+MBC1]\n>0x147 byte 0x02  \\b, [ROM+MBC1+RAM]\n>0x147 byte 0x03  \\b, [ROM+MBC1+RAM+BATT]\n>0x147 byte 0x05  \\b, [ROM+MBC2]\n>0x147 byte 0x06  \\b, [ROM+MBC2+BATTERY]\n>0x147 byte 0x08  \\b, [ROM+RAM]\n>0x147 byte 0x09  \\b, [ROM+RAM+BATTERY]\n>0x147 byte 0x0B  \\b, [ROM+MMM01]\n>0x147 byte 0x0C  \\b, [ROM+MMM01+SRAM]\n>0x147 byte 0x0D  \\b, [ROM+MMM01+SRAM+BATT]\n>0x147 byte 0x0F  \\b, [ROM+MBC3+TIMER+BATT]\n>0x147 byte 0x10  \\b, [ROM+MBC3+TIMER+RAM+BATT]\n>0x147 byte 0x11  \\b, [ROM+MBC3]\n>0x147 byte 0x12  \\b, [ROM+MBC3+RAM]\n>0x147 byte 0x13  \\b, [ROM+MBC3+RAM+BATT]\n>0x147 byte 0x19  \\b, [ROM+MBC5]\n>0x147 byte 0x1A  \\b, [ROM+MBC5+RAM]\n>0x147 byte 0x1B  \\b, [ROM+MBC5+RAM+BATT]\n>0x147 byte 0x1C  \\b, [ROM+MBC5+RUMBLE]\n>0x147 byte 0x1D  \\b, [ROM+MBC5+RUMBLE+SRAM]\n>0x147 byte 0x1E  \\b, [ROM+MBC5+RUMBLE+SRAM+BATT]\n>0x147 byte 0x1F  \\b, [Pocket Camera]\n>0x147 byte 0xFD  \\b, [Bandai TAMA5]\n>0x147 byte 0xFE  \\b, [Hudson HuC-3]\n>0x147 byte 0xFF  \\b, [Hudson HuC-1]\n\n>0x148 byte 0     \\b, ROM: 256Kbit\n>0x148 byte 1     \\b, ROM: 512Kbit\n>0x148 byte 2     \\b, ROM: 1Mbit\n>0x148 byte 3     \\b, ROM: 2Mbit\n>0x148 byte 4     \\b, ROM: 4Mbit\n>0x148 byte 5     \\b, ROM: 8Mbit\n>0x148 byte 6     \\b, ROM: 16Mbit\n>0x148 byte 0x52  \\b, ROM: 9Mbit\n>0x148 byte 0x53  \\b, ROM: 10Mbit\n>0x148 byte 0x54  \\b, ROM: 12Mbit\n\n>0x149 byte 1     \\b, RAM: 16Kbit\n>0x149 byte 2     \\b, RAM: 64Kbit\n>0x149 byte 3     \\b, RAM: 128Kbit\n>0x149 byte 4     \\b, RAM: 1Mbit\n\n#>0x14e long  x     \\b, CRC: %x\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) magic for the Sega MegaDrive/Genesis raw ROM format\n#\n0x100 string SEGA  Sega MegaDrive/Genesis raw ROM dump\n>0x120 string >\\0 Name: \"%.16s\"\n>0x110 string >\\0 %.16s\n>0x1B0 string RA with SRAM\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) magic for the Super MegaDrive ROM dump format\n#\n0x280 string EAGN  Super MagicDrive ROM dump\n>0 byte x %dx16k blocks\n>2 byte 0 \\b, last in series or standalone\n>2 byte >0 \\b, split ROM\n>8 byte 0xAA\n>9 byte 0xBB\n\n#------------------------------------------------------------------------------\n# genesis:  file(1) alternate magic for the Super MegaDrive ROM dump format\n#\n0x280 string EAMG  Super MagicDrive ROM dump\n>0 byte x %dx16k blocks\n>2 byte x \\b, last in series or standalone\n>8 byte 0xAA\n>9 byte 0xBB\n\n#------------------------------------------------------------------------------\n# smsgg:  file(1) magic for Sega Master System and Game Gear ROM dumps\n#\n# Does not detect all images.  Very preliminary guesswork.  Need more data\n# on format.\n#\n# FIXME: need a little more info...;P\n#\n#0 byte 0xF3\n#>1 byte 0xED  Sega Master System/Game Gear ROM dump\n#>1 byte 0x31  Sega Master System/Game Gear ROM dump\n#>1 byte 0xDB  Sega Master System/Game Gear ROM dump\n#>1 byte 0xAF  Sega Master System/Game Gear ROM dump\n#>1 byte 0xC3  Sega Master System/Game Gear ROM dump\n\n#------------------------------------------------------------------------------\n# dreamcast:  file(1) uncertain magic for the Sega Dreamcast VMU image format\n#\n0 belong 0x21068028   Sega Dreamcast VMU game image\n0 string LCDi         Dream Animator file\n\n#------------------------------------------------------------------------------\n# v64: file(1) uncertain magic for the V64 format N64 ROM dumps\n#\n0 belong 0x37804012    V64 Nintendo 64 ROM dump\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# Nintendo .nds\n192\tstring\t\\044\\377\\256Qi\\232\tNintendo DS Game ROM Image\n# Nintendo .gba\n0\tstring\t\\056\\000\\000\\352$\\377\\256Qi\tNintendo Game Boy Advance ROM Image\n\n#------------------------------------------------------------------------------\n# msx: file(1) magic for MSX game cartridge dumps\n# Too simple - MPi\n#0 beshort 0x4142 MSX game cartridge dump \n\n#------------------------------------------------------------------------------\n# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :\n0\tstring\tPS-X\\ EXE\tSony Playstation executable\n#  Area:\n>113\tstring\tx\t\t(%s)\n\n#------------------------------------------------------------------------------\n# Microsoft Xbox executables .xbe (Esa HyytiÃ¤ <ehyytia@cc.hut.fi>)\n0       string          XBEH            XBE, Microsoft Xbox executable\n# probabilistic checks whether signed or not\n>0x0004 ulelong =0x0\n>>&2    ulelong =0x0\n>>>&2   ulelong =0x0  \\b, not signed\n>0x0004 ulelong >0\n>>&2    ulelong >0\n>>>&2   ulelong >0    \\b, signed\n# expect base address of 0x10000\n>0x0104               ulelong =0x10000\n>>(0x0118-0x0FF60)    ulelong&0x80000007  0x80000007 \\b, all regions\n>>(0x0118-0x0FF60)    ulelong&0x80000007  !0x80000007\n>>>(0x0118-0x0FF60)   ulelong >0           (regions:\n>>>>(0x0118-0x0FF60)  ulelong &0x00000001  NA\n>>>>(0x0118-0x0FF60)  ulelong &0x00000002  Japan\n>>>>(0x0118-0x0FF60)  ulelong &0x00000004  Rest_of_World\n>>>>(0x0118-0x0FF60)  ulelong &0x80000000  Manufacturer\n>>>(0x0118-0x0FF60)   ulelong >0           \\b)\n\n# --------------------------------\n# Microsoft Xbox data file formats\n0       string          XIP0            XIP, Microsoft Xbox data\n0       string          XTF0            XTF, Microsoft Xbox data\n\n# Atari Lynx cartridge dump (EXE/BLL header)\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n\n0\tbeshort\t\t0x8008\t\tLynx cartridge,\n>2\tbeshort\t\tx\t\tRAM start $%04x\n>6\tstring\t\tBS93\n\n# Opera file system that is used on the 3DO console\n# From: Serge van den Boom <svdb@stack.nl>\n0\tstring\t\t\\x01ZZZZZ\\x01\t3DO \"Opera\" file system\n\n# From GÃ¼rkan SengÃ¼n <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n0\tstring\t\tGBS\t\tNintendo Gameboy Music/Audio Data\n12\tstring\t\tGameBoy\\ Music\\ Module\tNintendo Gameboy Music Module\n\n# Playstations Patch Files from: From: Thomas Klausner <tk@giga.or.at>\n0\tstring\tPPF30\t\t\tPlaystation Patch File version 3.0\n>5\tbyte\t0\t\t\t\\b, PPF 1.0 patch\n>5\tbyte\t1\t\t\t\\b, PPF 2.0 patch\n>5\tbyte\t2\t\t\t\\b, PPF 3.0 patch\n>>56\tbyte\t0\t\t\t\\b, Imagetype BIN (any)\n>>56\tbyte\t1\t\t\t\\b, Imagetype GI (PrimoDVD)\n>>57\tbyte\t0\t\t\t\\b, Blockcheck disabled\n>>57\tbyte\t1\t\t\t\\b, Blockcheck enabled\n>>58\tbyte\t0\t\t\t\\b, Undo data not available\n>>58\tbyte\t1\t\t\t\\b, Undo data available\n>6\tstring\tx\t\t\t\\b, description: %s\n\n0\tstring\tPPF20\t\t\tPlaystation Patch File version 2.0\n>5\tbyte\t0\t\t\t\\b, PPF 1.0 patch\n>5\tbyte\t1\t\t\t\\b, PPF 2.0 patch\n>>56\tlelong\t>0\t\t\t\\b, size of file to patch %d\n>6\tstring\tx\t\t\t\\b, description: %s\n\n0\tstring\tPPF10\t\t\tPlaystation Patch File version 1.0\n>5\tbyte\t0\t\t\t\\b, Simple Encoding\n>6\tstring\tx\t\t\t\\b, description: %s\n\n# From: Daniel Dawson <ddawson@icehouse.net>\n# SNES9x .smv \"movie\" file format.\n0\t\tstring\t\tSMV\\x1A\tSNES9x input recording\n>0x4\t\tlelong\t\tx\t\\b, version %d\n# version 4 is latest so far \n>0x4\t\tlelong\t\t<5\n>>0x8\t\tledate\t\tx\t\\b, recorded at %s\n>>0xc\t\tlelong\t\t>0\t\\b, rerecorded %d times\n>>0x10\t\tlelong\t\tx\t\\b, %d frames long\n>>0x14\t\tbyte\t\t>0\t\\b, data for controller(s):\n>>>0x14\t\tbyte\t\t&0x1\t#1\n>>>0x14\t\tbyte\t\t&0x2\t#2\n>>>0x14\t\tbyte\t\t&0x4\t#3\n>>>0x14\t\tbyte\t\t&0x8\t#4\n>>>0x14\t\tbyte\t\t&0x10\t#5\n>>0x15\t\tbyte\t\t^0x1\t\\b, begins from snapshot\n>>0x15\t\tbyte\t\t&0x1\t\\b, begins from reset\n>>0x15\t\tbyte\t\t^0x2\t\\b, NTSC standard\n>>0x15\t\tbyte\t\t&0x2\t\\b, PAL standard\n>>0x17\t\tbyte\t\t&0x1    \\b, settings:\n# WIP1Timing not used as of version 4\n>>>0x4\t\tlelong\t\t<4\n>>>>0x17\tbyte\t\t&0x2\tWIP1Timing\n>>>0x17\t\tbyte\t\t&0x4\tLeft+Right\n>>>0x17\t\tbyte\t\t&0x8\tVolumeEnvX\n>>>0x17\t\tbyte\t\t&0x10\tFakeMute\n>>>0x17\t\tbyte\t\t&0x20\tSyncSound\n# New flag as of version 4\n>>>0x4\t\tlelong\t\t>3\n>>>>0x17\tbyte\t\t&0x80\tNoCPUShutdown\n>>0x4\t\tlelong\t\t<4\n>>>0x18\t\tlelong\t\t>0x23\n>>>>0x20\tleshort\t\t!0\n>>>>>0x20\tlestring16\tx\t\\b, metadata: \"%s\"\n>>0x4\t\tlelong\t\t>3\n>>>0x24\t\tbyte\t\t>0\t\\b, port 1:\n>>>>0x24\tbyte\t\t1\tjoypad\n>>>>0x24\tbyte\t\t2\tmouse\n>>>>0x24\tbyte\t\t3\tSuperScope\n>>>>0x24\tbyte\t\t4\tJustifier\n>>>>0x24\tbyte\t\t5\tmultitap\n>>>0x24\t\tbyte\t\t>0\t\\b, port 2:\n>>>>0x25\tbyte\t\t1\tjoypad\n>>>>0x25\tbyte\t\t2\tmouse\n>>>>0x25\tbyte\t\t3\tSuperScope\n>>>>0x25\tbyte\t\t4\tJustifier\n>>>>0x25\tbyte\t\t5\tmultitap\n>>>0x18\t\tlelong\t\t>0x43\n>>>>0x40\tleshort\t\t!0\n>>>>>0x40\tlestring16\tx\t\\b, metadata: \"%s\"\n>>0x17\t\tbyte\t\t&0x40   \\b, ROM:\n>>>(0x18.l-26)\tlelong\t\tx\tCRC32 0x%08x\n>>>(0x18.l-23)\tstring\t\tx\t\"%s\"\n\n# Type: scummVM savegame files\n# From: Sven Hartge <debian@ds9.argh.org>\n0\tstring\tSCVM\tScummVM savegame\n>12\tstring\t>\\0\t\"%s\"\n\n#------------------------------------------------------------------------------\n# $File: convex,v 1.7 2009/09/19 16:28:08 christos Exp $\n# convex:  file(1) magic for Convex boxes\n#\n# Convexes are big-endian.\n#\n# /*\\\n#  * Below are the magic numbers and tests added for Convex.\n#  * Added at beginning, because they are expected to be used most.\n# \\*/\n0\tbelong\t0507\tConvex old-style object\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0513\tConvex old-style demand paged executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0515\tConvex old-style pre-paged executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0517\tConvex old-style pre-paged, non-swapped executable\n>16\tbelong\t>0\tnot stripped\n0\tbelong\t0x011257\tCore file\n#\n# The following are a series of dump format magic numbers.  Each one\n# corresponds to a drastically different dump format.  The first on is\n# the original dump format on a 4.1 BSD or earlier file system.  The\n# second marks the change between the 4.1 file system and the 4.2 file\n# system.  The Third marks the changing of the block size from 1K\n# to 2K to be compatible with an IDC file system.  The fourth indicates\n# a dump that is dependent on Convex Storage Manager, because data in\n# secondary storage is not physically contained within the dump.\n# The restore program uses these number to determine how the data is\n# to be extracted.\n#\n24\tbelong\t=60011\tdump format, 4.1 BSD or earlier\n24\tbelong\t=60012\tdump format, 4.2 or 4.3 BSD without IDC\n24\tbelong\t=60013\tdump format, 4.2 or 4.3 BSD (IDC compatible)\n24\tbelong\t=60014\tdump format, Convex Storage Manager by-reference dump\n#\n# what follows is a bunch of bit-mask checks on the flags field of the opthdr.\n# If there is no `=' sign, assume just checking for whether the bit is set?\n#\n0\tbelong\t0601\t\tConvex SOFF\n>88\tbelong&0x000f0000\t=0x00000000\tc1\n>88\tbelong\t\t\t&0x00010000\tc2\n>88\tbelong\t\t\t&0x00020000\tc2mp\n>88\tbelong\t\t\t&0x00040000\tparallel\n>88\tbelong\t\t\t&0x00080000\tintrinsic\n>88\tbelong\t\t\t&0x00000001\tdemand paged\n>88\tbelong\t\t\t&0x00000002\tpre-paged\n>88\tbelong\t\t\t&0x00000004\tnon-swapped\n>88\tbelong\t\t\t&0x00000008\tPOSIX\n#\n>84\tbelong\t\t\t&0x80000000\texecutable\n>84\tbelong\t\t\t&0x40000000\tobject\n>84\tbelong&0x20000000\t=0\t\tnot stripped\n>84\tbelong&0x18000000\t=0x00000000\tnative fpmode\n>84\tbelong&0x18000000\t=0x10000000\tieee fpmode\n>84\tbelong&0x18000000\t=0x18000000\tundefined fpmode\n#\n0\tbelong\t\t\t0605\t\tConvex SOFF core\n#\n0\tbelong\t\t\t0607\t\tConvex SOFF checkpoint\n>88\tbelong&0x000f0000\t=0x00000000\tc1\n>88\tbelong\t\t\t&0x00010000\tc2\n>88\tbelong\t\t\t&0x00020000\tc2mp\n>88\tbelong\t\t\t&0x00040000\tparallel\n>88\tbelong\t\t\t&0x00080000\tintrinsic\n>88\tbelong\t\t\t&0x00000008\tPOSIX\n#\n>84\tbelong&0x18000000\t=0x00000000\tnative fpmode\n>84\tbelong&0x18000000\t=0x10000000\tieee fpmode\n>84\tbelong&0x18000000\t=0x18000000\tundefined fpmode\n\n#------------------------------------------------------------------------------\n# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $\n# cracklib:  file (1) magic for cracklib v2.7\n\n0\tlelong\t0x70775631\tCracklib password index, little endian\n>4\tlong\t>0\t\t(%i words)\n>4\tlong\t0\t\t(\"64-bit\")\n>>8\tlong\t>-1\t\t(%i words)\n0\tbelong\t0x70775631\tCracklib password index, big endian\n>4\tbelong\t>-1\t\t(%i words)\n# really bellong 0x0000000070775631\n0\tsearch/1\t\\0\\0\\0\\0pwV1\tCracklib password index, big endian (\"64-bit\")\n>12\tbelong\t>0\t\t(%i words)\n\n# ----------------------------------------------------------------------------\n# $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $\n# ctags:  file (1) magic for Exuberant Ctags files\n# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>\n0\tsearch/1\t=!_TAG\tExuberant Ctags tag file text\n\n#------------------------------------------------------------------------------\n# $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $\n# dact:  file(1) magic for DACT compressed files\n#\n0\tlong\t\t0x444354C3\tDACT compressed data\n>4\tbyte\t\t>-1\t\t(version %i.\n>5\tbyte\t\t>-1\t\t$BS%i.\n>6\tbyte\t\t>-1\t\t$BS%i)\n>7\tlong\t\t>0\t\t$BS, original size: %i bytes\n>15\tlong\t\t>30\t\t$BS, block size: %i bytes\n\n#------------------------------------------------------------------------------\n# $File: database,v 1.24 2009/09/19 16:28:08 christos Exp $\n# database:  file(1) magic for various databases\n#\n# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)\n#\n#\n# GDBM magic numbers\n#  Will be maintained as part of the GDBM distribution in the future.\n#  <downsj@teeny.org>\n0\tbelong\t0x13579ace\tGNU dbm 1.x or ndbm database, big endian\n!:mime\tapplication/x-gdbm\n0\tlelong\t0x13579ace\tGNU dbm 1.x or ndbm database, little endian\n!:mime\tapplication/x-gdbm\n0\tstring\tGDBM\t\tGNU dbm 2.x database\n!:mime\tapplication/x-gdbm\n#\n# Berkeley DB\n#\n# Ian Darwin's file /etc/magic files: big/little-endian version.\n#\n# Hash 1.85/1.86 databases store metadata in network byte order.\n# Btree 1.85/1.86 databases store the metadata in host byte order.\n# Hash and Btree 2.X and later databases store the metadata in host byte order.\n\n0\tlong\t0x00061561\tBerkeley DB\n!:mime\tapplication/x-dbm\n>8\tbelong\t4321\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, native byte-order)\n>8\tbelong\t1234\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, little-endian)\n\n0\tbelong\t0x00061561\tBerkeley DB\n>8\tbelong\t4321\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, big-endian)\n>8\tbelong\t1234\n>>4\tbelong\t>2\t\t1.86\n>>4\tbelong\t<3\t\t1.85\n>>4\tbelong\t>0\t\t(Hash, version %d, native byte-order)\n\n0\tlong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tlong\t>0\t\t(Btree, version %d, native byte-order)\n0\tbelong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tbelong\t>0\t\t(Btree, version %d, big-endian)\n0\tlelong\t0x00053162\tBerkeley DB 1.85/1.86\n>4\tlelong\t>0\t\t(Btree, version %d, little-endian)\n\n12\tlong\t0x00061561\tBerkeley DB\n>16\tlong\t>0\t\t(Hash, version %d, native byte-order)\n12\tbelong\t0x00061561\tBerkeley DB\n>16\tbelong\t>0\t\t(Hash, version %d, big-endian)\n12\tlelong\t0x00061561\tBerkeley DB\n>16\tlelong\t>0\t\t(Hash, version %d, little-endian)\n\n12\tlong\t0x00053162\tBerkeley DB\n>16\tlong\t>0\t\t(Btree, version %d, native byte-order)\n12\tbelong\t0x00053162\tBerkeley DB\n>16\tbelong\t>0\t\t(Btree, version %d, big-endian)\n12\tlelong\t0x00053162\tBerkeley DB\n>16\tlelong\t>0\t\t(Btree, version %d, little-endian)\n\n12\tlong\t0x00042253\tBerkeley DB\n>16\tlong\t>0\t\t(Queue, version %d, native byte-order)\n12\tbelong\t0x00042253\tBerkeley DB\n>16\tbelong\t>0\t\t(Queue, version %d, big-endian)\n12\tlelong\t0x00042253\tBerkeley DB\n>16\tlelong\t>0\t\t(Queue, version %d, little-endian)\n\n# From Max Bowsher.\n12\tlong\t0x00040988\tBerkeley DB\n>16\tlong\t>0\t\t(Log, version %d, native byte-order)\n12\tbelong\t0x00040988\tBerkeley DB \n>16\tbelong\t>0\t\t(Log, version %d, big-endian)\n12\tlelong\t0x00040988\tBerkeley DB\n>16\tlelong\t>0\t\t(Log, version %d, little-endian)\n\n#\n#\n# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>\n0\tstring\tRRD\t\tRRDTool DB\n>4\tstring\tx\t\tversion %s\n#----------------------------------------------------------------------\n# ROOT: file(1) magic for ROOT databases\n#\n0       string  root\\0  ROOT file\n>4      belong  x       Version %d\n>33     belong  x       (Compression: %d)\n\n# XXX: Weak magic.\n# Alex Ott <ott@jet.msk.su>\n## Paradox file formats\n#2\t  leshort\t0x0800\tParadox \n#>0x39\t  byte\t\t3\tv. 3.0 \n#>0x39\t  byte\t\t4\tv. 3.5 \n#>0x39\t  byte\t\t9\tv. 4.x \n#>0x39\t  byte\t\t10\tv. 5.x \n#>0x39\t  byte\t\t11\tv. 5.x \n#>0x39\t  byte\t\t12\tv. 7.x \n#>>0x04\t  byte\t\t0\tindexed .DB data file \n#>>0x04\t  byte\t\t1\tprimary index .PX file \n#>>0x04\t  byte\t\t2\tnon-indexed .DB data file \n#>>0x04\t  byte\t\t3\tnon-incrementing secondary index .Xnn file \n#>>0x04\t  byte\t\t4\tsecondary index .Ynn file \n#>>0x04\t  byte\t\t5\tincrementing secondary index .Xnn file \n#>>0x04\t  byte\t\t6\tnon-incrementing secondary index .XGn file \n#>>0x04\t  byte\t\t7\tsecondary index .YGn file \n#>>>0x04\t  byte\t\t8\tincrementing secondary index .XGn file \n\n## XBase database files\n#0      byte       0x02\t\n#>8     leshort\t  >0\n#>>12   leshort    0\tFoxBase \n#!:mime\tapplication/x-dbf\n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x03\t\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tFoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x04\t\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tdBASE IV no memo file \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x05\t\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tdBASE V no memo file \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x30\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tVisual FoxPro \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x43\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tFlagShip with memo var size \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x7b\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tdBASEIV with memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x83\t\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tFoxBase+, dBaseIII+ with memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x8b\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tdBaseIV with memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0x8e\t\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tdBaseIV with SQL Table \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0xb3\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tFlagShip with .dbt memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0      byte       0xf5\n#!:mime\tapplication/x-dbf\n#>8     leshort\t  >0\n#>>12   leshort    0\tFoxPro with memo \n#>>>0x04\tlelong\t\t0\t\t(no records)\n#>>>0x04\tlelong\t\t>0\t\t(%ld records)\n#\n#0\tleshort\t\t0x0006\t\tDBase 3 index file\n\n# MS Access database\n4\tstring\tStandard\\ Jet\\ DB\tMicrosoft Access Database\n!:mime\tapplication/x-msaccess\n\n# TDB database from Samba et al - Martin Pool <mbp@samba.org>\n0\tstring\tTDB\\ file\t\tTDB database\n>32\tlelong\t0x2601196D\t\tversion 6, little-endian\n>>36\tlelong\tx\t\t\thash size %d bytes\n\n# SE Linux policy database\n0       lelong  0xf97cff8c      SE Linux policy\n>16     lelong  x               v%d\n>20     lelong  1      MLS\n>24     lelong  x       %d symbols\n>28     lelong  x       %d ocons\n\n# ICE authority file data (Wolfram Kleff)\n2\tstring\t\tICE\t\tICE authority data\n\n# X11 Xauthority file (Wolfram Kleff)\n10\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n11\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n12\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n13\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n14\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n15\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n16\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n17\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n18\tstring\t\tMIT-MAGIC-COOKIE-1\tX11 Xauthority data\n\n# From: Maxime Henrion <mux@FreeBSD.org>\n# PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org>\n0\tstring\t\tPGDMP\t\tPostgreSQL custom database dump\n>5\tbyte\t\tx\t\t- v%d\n>6\tbyte\t\tx\t\t\\b.%d\n>5\tbeshort\t\t<0x101\t\t\\b-0\n>5\tbeshort\t\t>0x100\n>>7\tbyte\t\tx\t\t\\b-%d\n\n# Type: Advanced Data Format (ADF) database\n# URL:  http://www.grc.nasa.gov/WWW/cgns/adf/\n# From: Nicolas Chauvat <nicolas.chauvat@logilab.fr>\n0\tstring\t@(#)ADF\\ Database\tCGNS Advanced Data Format\n\n# Tokyo Cabinet magic data\n# http://tokyocabinet.sourceforge.net/index.html\n0\tstring\t\tToKyO\\ CaBiNeT\\n\tTokyo Cabinet\n>14\tstring\t\tx\t\t\t\\b (%s)\n>32\tbyte\t\t0\t\t\t\\b, Hash\n!:mime\tapplication/x-tokyocabinet-hash\n>32\tbyte\t\t1\t\t\t\\b, B+ tree\n!:mime\tapplication/x-tokyocabinet-btree\n>32\tbyte\t\t2\t\t\t\\b, Fixed-length\n!:mime\tapplication/x-tokyocabinet-fixed\n>32\tbyte\t\t3\t\t\t\\b, Table\n!:mime\tapplication/x-tokyocabinet-table\n>33\tbyte\t\t&1\t\t\t\\b, [open]\n>33\tbyte\t\t&2\t\t\t\\b, [fatal]\n>34\tbyte\t\tx\t\t\t\\b, apow=%d\n>35\tbyte\t\tx\t\t\t\\b, fpow=%d\n>36\tbyte\t\t&0x01\t\t\t\\b, [large]\n>36\tbyte\t\t&0x02\t\t\t\\b, [deflate]\n>36\tbyte\t\t&0x04\t\t\t\\b, [bzip]\n>36\tbyte\t\t&0x08\t\t\t\\b, [tcbs]\n>36\tbyte\t\t&0x10\t\t\t\\b, [excodec]\n>40\tlequad\t\tx\t\t\t\\b, bnum=%lld\n>48\tlequad\t\tx\t\t\t\\b, rnum=%lld\n>56\tlequad\t\tx\t\t\t\\b, fsiz=%lld\n\n# Type:\tQDBM Quick Database Manager\n# From:\tBenoit Sibaud <bsibaud@april.org>\n0\tstring\t\t\\\\[depot\\\\]\\n\\f\t\tQuick Database Manager, little endian\n0\tstring\t\t\\\\[DEPOT\\\\]\\n\\f\t\tQuick Database Manager, big endian\n\n# Type:\tTokyoCabinet database\n# URL:\thttp://tokyocabinet.sourceforge.net/\n# From:\tBenoit Sibaud <bsibaud@april.org>\n0\tstring\t\tToKyO\\ CaBiNeT\\n\tTokyoCabinet database\n>14\tstring\t\tx\t\t\t(version %s)\n\n#------------------------------------------------------------------------------\n# $File: diamond,v 1.7 2009/09/19 16:28:08 christos Exp $\n# diamond:  file(1) magic for Diamond system\n#\n# ... diamond is a multi-media mail and electronic conferencing system....\n#\n# XXX - I think it was either renamed Slate, or replaced by Slate....\n#\n#\tThe full deal is too long...\n#0\tstring\t<list>\\n<protocol\\ bbn-multimedia-format>\tDiamond Multimedia Document\n0\tstring\t=<list>\\n<protocol\\ bbn-m\tDiamond Multimedia Document\n\n#------------------------------------------------------------------------------\n# $File: diff,v 1.10 2009/09/19 16:28:08 christos Exp $\n# diff:  file(1) magic for diff(1) output\n#\n0\tsearch/1\tdiff\\ \t\tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\t***\\ \t\tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\tOnly\\ in\\ \tdiff output text\n!:mime\ttext/x-diff\n0\tsearch/1\tCommon\\ subdirectories:\\ \tdiff output text\n!:mime\ttext/x-diff\n\n0\tsearch/1\tIndex:\t\tRCS/CVS diff output text\n!:mime\ttext/x-diff\n\n# bsdiff:  file(1) magic for bsdiff(1) output\n0\tstring\t\tBSDIFF40\tbsdiff(1) patch file\n\n#------------------------------------------------------------------------------\n# $File: digital,v 1.8 2009/09/19 16:28:08 christos Exp $\n#  Digital UNIX - Info\n#\n0\tstring\t=!<arch>\\n________64E\tAlpha archive\n>22\tstring\tX\t\t\t-- out of date\n#\n# Alpha COFF Based Executables\n# The stripped stuff really needs to be an 8 byte (64 bit) compare,\n# but this works\n0\tleshort\t\t0x183\t\tCOFF format alpha\n>22\tleshort&020000\t&010000\t\tsharable library,\n>22\tleshort&020000\t^010000\t\tdynamically linked,\n>24\tleshort\t\t0410\t\tpure\n>24\tleshort\t\t0413\t\tdemand paged\n>8\tlelong\t\t>0\t\texecutable or object module, not stripped\n>8\tlelong\t\t0\n>>12\tlelong\t\t0\t\texecutable or object module, stripped\n>>12\tlelong\t\t>0\t\texecutable or object module, not stripped\n>27     byte            >0              - version %d.\n>26     byte            >0              %d-\n>28     leshort         >0              %d\n#\n# The next is incomplete, we could tell more about this format,\n# but its not worth it.\n0\tleshort\t\t0x188\tAlpha compressed COFF\n0\tleshort\t\t0x18f\tAlpha u-code object\n#\n#\n# Some other interesting Digital formats,\n0\tstring\t\\377\\377\\177\t\tddis/ddif\n0\tstring\t\\377\\377\\174\t\tddis/dots archive\n0\tstring\t\\377\\377\\176\t\tddis/dtif table data\n0\tstring\t\\033c\\033\t\tLN03 output\n0\tlong\t04553207\t\tX image\n#\n0\tstring\t=!<PDF>!\\n\t\tprofiling data file\n#\n# Locale data tables (MIPS and Alpha).\n#\n0\tshort\t\t0x0501\t\tlocale data table\n>6\tshort\t\t0x24\t\tfor MIPS\n>6\tshort\t\t0x40\t\tfor Alpha\n\n#------------------------------------------------------------------------------\n# $File: dolby,v 1.5 2009/09/19 16:28:08 christos Exp $\n# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>\n# from http://www.atsc.org/standards/a_52a.pdf\n# corrections, additions, etc. are always welcome!\n#\n# syncword\n0       beshort         0x0b77  ATSC A/52 aka AC-3 aka Dolby Digital stream,\n# fscod\n>4      byte&0xc0       0x00    48 kHz,\n>4      byte&0xc0       0x40    44.1 kHz,\n>4      byte&0xc0       0x80    32 kHz,\n# is this one used for 96 kHz?\n>4      byte&0xc0       0xc0    reserved frequency,\n#\n>5\tbyte&7 = 0\t\t\\b, complete main (CM)\n>5\tbyte&7 = 1\t\t\\b, music and effects (ME)\n>5\tbyte&7 = 2\t\t\\b, visually impaired (VI)\n>5\tbyte&7 = 3\t\t\\b, hearing impaired (HI)\n>5\tbyte&7 = 4\t\t\\b, dialogue (D)\n>5\tbyte&7 = 5\t\t\\b, commentary (C)\n>5\tbyte&7 = 6\t\t\\b, emergency (E)\n# acmod\n>6      byte&0xe0       0x00    1+1 front,\n>6      byte&0xe0       0x20    1 front/0 rear,\n>6      byte&0xe0       0x40    2 front/0 rear,\n>6      byte&0xe0       0x60    3 front/0 rear,\n>6      byte&0xe0       0x80    2 front/1 rear,\n>6      byte&0xe0       0xa0    3 front/1 rear,\n>6      byte&0xe0       0xc0    2 front/2 rear,\n>6      byte&0xe0       0xe0    3 front/2 rear,\n# lfeon (these may be incorrect)\n>7      byte&0x40       0x00    LFE off,\n>7      byte&0x40       0x40    LFE on,\n#\n>4\tbyte&0x3e = 0x00\t\\b, 32 kbit/s\n>4\tbyte&0x3e = 0x02        \\b, 40 kbit/s\n>4\tbyte&0x3e = 0x04        \\b, 48 kbit/s\n>4\tbyte&0x3e = 0x06        \\b, 56 kbit/s\n>4\tbyte&0x3e = 0x08        \\b, 64 kbit/s\n>4\tbyte&0x3e = 0x0a        \\b, 80 kbit/s\n>4\tbyte&0x3e = 0x0c        \\b, 96 kbit/s\n>4\tbyte&0x3e = 0x0e        \\b, 112 kbit/s\n>4\tbyte&0x3e = 0x10        \\b, 128 kbit/s\n>4\tbyte&0x3e = 0x12        \\b, 160 kbit/s\n>4\tbyte&0x3e = 0x14        \\b, 192 kbit/s\n>4\tbyte&0x3e = 0x16        \\b, 224 kbit/s\n>4\tbyte&0x3e = 0x18        \\b, 256 kbit/s\n>4\tbyte&0x3e = 0x1a        \\b, 320 kbit/s\n>4\tbyte&0x3e = 0x1c        \\b, 384 kbit/s\n>4\tbyte&0x3e = 0x1e        \\b, 448 kbit/s\n>4\tbyte&0x3e = 0x20        \\b, 512 kbit/s\n>4\tbyte&0x3e = 0x22        \\b, 576 kbit/s\n>4\tbyte&0x3e = 0x24        \\b, 640 kbit/s\n# dsurmod (these may be incorrect)\n>6      beshort&0x0180  0x0000  Dolby Surround not indicated\n>6      beshort&0x0180  0x0080  not Dolby Surround encoded\n>6      beshort&0x0180  0x0100  Dolby Surround encoded\n>6      beshort&0x0180  0x0180  reserved Dolby Surround mode\n\n#------------------------------------------------------------------------------\n# $File: dump,v 1.11 2009/09/19 16:28:09 christos Exp $\n# dump:  file(1) magic for dump file format--for new and old dump filesystems\n#\n# We specify both byte orders in order to recognize byte-swapped dumps.\n#\n24\tbelong\t60012\t\tnew-fs dump file (big endian),\n>4\tbedate\tx\t\tPrevious dump %s,\n>8\tbedate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %ld,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n24\tbelong\t60011\t\told-fs dump file (big endian),\n#>4\tbedate\tx\t\tPrevious dump %s,\n#>8\tbedate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %ld,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n24\tlelong\t60012\t\tnew-fs dump file (little endian),\n>4\tledate\tx\t\tThis dump %s,\n>8\tledate\tx\t\tPrevious dump %s,\n>12\tlelong\t>0\t\tVolume %ld,\n>692\tlelong\t0\t\tLevel zero, type:\n>692\tlelong\t>0\t\tLevel %d, type:\n>0\tlelong\t1\t\ttape header,\n>0\tlelong\t2\t\tbeginning of file record,\n>0\tlelong\t3\t\tmap of inodes on tape,\n>0\tlelong\t4\t\tcontinuation of file record,\n>0\tlelong\t5\t\tend of volume,\n>0\tlelong\t6\t\tmap of inodes deleted,\n>0\tlelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tlelong\t>0\t\tFlags %x\n\n24\tlelong\t60011\t\told-fs dump file (little endian),\n#>4\tledate\tx\t\tPrevious dump %s,\n#>8\tledate\tx\t\tThis dump %s,\n>12\tlelong\t>0\t\tVolume %ld,\n>692\tlelong\t0\t\tLevel zero, type:\n>692\tlelong\t>0\t\tLevel %d, type:\n>0\tlelong\t1\t\ttape header,\n>0\tlelong\t2\t\tbeginning of file record,\n>0\tlelong\t3\t\tmap of inodes on tape,\n>0\tlelong\t4\t\tcontinuation of file record,\n>0\tlelong\t5\t\tend of volume,\n>0\tlelong\t6\t\tmap of inodes deleted,\n>0\tlelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tlelong\t>0\t\tFlags %x\n\n18\tleshort\t60011\t\told-fs dump file (16-bit, assuming PDP-11 endianness),\n>2\tmedate\tx\t\tPrevious dump %s,\n>6\tmedate\tx\t\tThis dump %s,\n>10\tleshort\t>0\t\tVolume %ld,\n>0\tleshort\t1\t\ttape header.\n>0\tleshort\t2\t\tbeginning of file record.\n>0\tleshort\t3\t\tmap of inodes on tape.\n>0\tleshort\t4\t\tcontinuation of file record.\n>0\tleshort\t5\t\tend of volume.\n>0\tleshort\t6\t\tmap of inodes deleted.\n>0\tleshort\t7\t\tend of medium (for floppy).\n\n24\tbelong\t0x19540119\tnew-fs dump file (ufs2, big endian),\n>896\tbeqdate\tx\t\tPrevious dump %s,\n>904\tbeqdate\tx\t\tThis dump %s,\n>12\tbelong\t>0\t\tVolume %ld,\n>692\tbelong\t0\t\tLevel zero, type:\n>692\tbelong\t>0\t\tLevel %d, type:\n>0\tbelong\t1\t\ttape header,\n>0\tbelong\t2\t\tbeginning of file record,\n>0\tbelong\t3\t\tmap of inodes on tape,\n>0\tbelong\t4\t\tcontinuation of file record,\n>0\tbelong\t5\t\tend of volume,\n>0\tbelong\t6\t\tmap of inodes deleted,\n>0\tbelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tbelong\t>0\t\tFlags %x\n\n24\tlelong\t0x19540119\tnew-fs dump file (ufs2, little endian),\n>896\tleqdate\tx\t\tThis dump %s,\n>904\tleqdate\tx\t\tPrevious dump %s,\n>12\tlelong\t>0\t\tVolume %ld,\n>692\tlelong\t0\t\tLevel zero, type:\n>692\tlelong\t>0\t\tLevel %d, type:\n>0\tlelong\t1\t\ttape header,\n>0\tlelong\t2\t\tbeginning of file record,\n>0\tlelong\t3\t\tmap of inodes on tape,\n>0\tlelong\t4\t\tcontinuation of file record,\n>0\tlelong\t5\t\tend of volume,\n>0\tlelong\t6\t\tmap of inodes deleted,\n>0\tlelong\t7\t\tend of medium (for floppy),\n>676\tstring\t>\\0\t\tLabel %s,\n>696\tstring\t>\\0\t\tFilesystem %s,\n>760\tstring\t>\\0\t\tDevice %s,\n>824\tstring\t>\\0\t\tHost %s,\n>888\tlelong\t>0\t\tFlags %x\n\n#------------------------------------------------------------------------------\n# $File: dyadic,v 1.4 2009/09/19 16:28:09 christos Exp $\n# Dyadic: file(1) magic for Dyalog APL.\n#\n0\tbyte\t0xaa\n>1\tbyte\t<4\t\tDyalog APL\n>>1\tbyte\t0x00\t\tincomplete workspace\n>>1\tbyte\t0x01\t\tcomponent file\n>>1\tbyte\t0x02\t\texternal variable\n>>1\tbyte\t0x03\t\tworkspace\n>>2\tbyte\tx\t\tversion %d\n>>3\tbyte\tx\t\t.%d\n\n0\tbeshort\t\t0xaa03\t\tDyalog APL\n>2\tbyte\t\tx\t\tworkspace type %d\n>3\tbyte\t\tx\t\tsubtype %d\n>7\tbyte&0x28\t0x00\t\t32-bit\n>7\tbyte&0x28\t0x20\t\t64-bit\n>7\tbyte&0x0c\t0x00\t\tclassic\n>7\tbyte&0x0c\t0x04\t\tunicode\n>7\tbyte&0x88\t0x00\t\tbig-endian\n>7\tbyte&0x88\t0x80\t\tlittle-endian\n\n0\tbyte\t\t0xaa\t\tDyalog APL\n>1\tbyte\t\t0x00\t\taplcore\n>1\tbyte\t\t0x01\t\tcomponent file 32-bit non-journaled non-checksummed\n>1\tbyte\t\t0x02\t\texternal variable exclusive\n>1\tbyte\t\t0x06\t\texternal variable shared\n>1\tbyte\t\t0x07\t\tsession\n>1\tbyte\t\t0x08\t\tmapped file 32-bit\n>1\tbyte\t\t0x09\t\tcomponent file 64-bit non-journaled non-checksummed\n>1\tbyte\t\t0x0a\t\tmapped file 64-bit\n>1\tbyte\t\t0x0b\t\tcomponent file 32-bit level 1 journaled non-checksummed\n>1\tbyte\t\t0x0c\t\tcomponent file 64-bit level 1 journaled non-checksummed\n>1\tbyte\t\t0x0d\t\tcomponent file 32-bit level 1 journaled checksummed\n>1\tbyte\t\t0x0e\t\tcomponent file 64-bit level 1 journaled checksummed\n>1\tbyte\t\t0x0f\t\tcomponent file 32-bit level 2 journaled checksummed\n>1\tbyte\t\t0x10\t\tcomponent file 64-bit level 2 journaled checksummed\n>1\tbyte\t\t0x11\t\tcomponent file 32-bit level 3 journaled checksummed\n>1\tbyte\t\t0x12\t\tcomponent file 64-bit level 3 journaled checksummed\n>1\tbyte\t\t0x13\t\tcomponent file 32-bit non-journaled checksummed\n>1\tbyte\t\t0x14\t\tcomponent file 64-bit non-journaled checksummed\n>1\tbyte\t\t0x80\t\tDDB\n\n0\tshort\t\t0x6060\t\tDyalog APL transfer\n\n#------------------------------------------------------------------------------\n# $File: editors,v 1.8 2009/09/19 16:28:09 christos Exp $\n# T602 editor documents \n# by David Necas <yeti@physics.muni.cz>\n0\tstring\t@CT\\ \tT602 document data,\n>4\tstring\t0\tKamenicky\n>4\tstring\t1\tCP 852\n>4\tstring\t2\tKOI8-CS\n>4\tstring\t>2\tunknown encoding\n\n# Vi IMproved Encrypted file \n# by David Necas <yeti@physics.muni.cz>\n0\tstring\tVimCrypt~\tVim encrypted file data\n# Vi IMproved Swap file\n# by Sven Wegener <swegener@gentoo.org>\n0\tstring\tb0VIM\\ \t\tVim swap file\n>&0\tstring\t>\\0\t\t\\b, version %s\n\n#------------------------------------------------------------------------------\n# $File: efi,v 1.4 2009/09/19 16:28:09 christos Exp $\n# efi:  file(1) magic for Universal EFI binaries\n\n0\tlelong\t0x0ef1fab9\n>4\tlelong\t1\t\tUniversal EFI binary with 1 architecture\n>>&0\tlelong\t7\t\t\\b, i386\n>>&0\tlelong\t0x01000007\t\\b, x86_64\n>4\tlelong\t2\t\tUniversal EFI binary with 2 architectures\n>>&0\tlelong\t7\t\t\\b, i386\n>>&0\tlelong\t0x01000007\t\\b, x86_64\n>>&20\tlelong\t7\t\t\\b, i386\n>>&20\tlelong\t0x01000007\t\\b, x86_64\n>4\tlelong\t>2\t\tUniversal EFI binary with %ld architectures\n\n#------------------------------------------------------------------------------\n# $File: elf,v 1.53 2009/09/19 16:28:09 christos Exp $\n# elf:  file(1) magic for ELF executables\n#\n# We have to check the byte order flag to see what byte order all the\n# other stuff in the header is in.\n#\n# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?\n#\n# Created by: unknown\n# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com>\n# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support)\n# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support)\n# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium)\n# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures)\n0\tstring\t\t\\177ELF\t\tELF\n>4\tbyte\t\t0\t\tinvalid class\n>4\tbyte\t\t1\t\t32-bit\n>4\tbyte\t\t2\t\t64-bit\n>5\tbyte\t\t0\t\tinvalid byte order\n>5\tbyte\t\t1\t\tLSB\n>>16\tleshort\t\t0\t\tno file type,\n!:strength *2\n!:mime\tapplication/octet-stream\n>>16\tleshort\t\t1\t\trelocatable,\n!:mime\tapplication/x-object\n>>16\tleshort\t\t2\t\texecutable,\n!:mime\tapplication/x-executable\n>>16\tleshort\t\t3\t\tshared object,\n!:mime\tapplication/x-sharedlib\n>>16\tleshort\t\t4\t\tcore file\n!:mime\tapplication/x-coredump\n# Core file detection is not reliable.\n#>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n#>>>(0x38+0x10) lelong\t>0\t\t(signal %d),\n>>16\tleshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tleshort\t\t0\t\tno machine,\n>>18\tleshort\t\t1\t\tAT&T WE32100 - invalid byte order,\n>>18\tleshort\t\t2\t\tSPARC - invalid byte order,\n>>18\tleshort\t\t3\t\tIntel 80386,\n>>18\tleshort\t\t4\t\tMotorola\n>>>36\tlelong\t\t&0x01000000\t68000 - invalid byte order,\n>>>36\tlelong\t\t&0x00810000\tCPU32 - invalid byte order,\n>>>36\tlelong\t\t0\t\t68020 - invalid byte order,\n>>18\tleshort\t\t5\t\tMotorola 88000 - invalid byte order,\n>>18\tleshort\t\t6\t\tIntel 80486,\n>>18\tleshort\t\t7\t\tIntel 80860,\n# The official e_machine number for MIPS is now #8, regardless of endianness.\n# The second number (#10) will be deprecated later. For now, we still\n# say something if #10 is encountered, but only gory details for #8.\n>>18\tleshort\t\t8\t\tMIPS,\n>>>36\tlelong\t\t&0x20\t\tN32\n>>18\tleshort\t\t10\t\tMIPS,\n>>>36\tlelong\t\t&0x20\t\tN32\n>>18\tleshort\t\t8\n# only for 32-bit\n>>>4\tbyte\t\t1\n>>>>36  lelong&0xf0000000\t0x00000000\tMIPS-I\n>>>>36  lelong&0xf0000000\t0x10000000\tMIPS-II\n>>>>36  lelong&0xf0000000\t0x20000000\tMIPS-III\n>>>>36  lelong&0xf0000000\t0x30000000\tMIPS-IV\n>>>>36  lelong&0xf0000000\t0x40000000\tMIPS-V\n>>>>36  lelong&0xf0000000\t0x50000000\tMIPS32\n>>>>36  lelong&0xf0000000\t0x60000000\tMIPS64\n>>>>36  lelong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>>36  lelong&0xf0000000\t0x80000000\tMIPS64 rel2\n# only for 64-bit\n>>>4\tbyte\t\t2\n>>>>48  lelong&0xf0000000\t0x00000000\tMIPS-I\n>>>>48  lelong&0xf0000000\t0x10000000\tMIPS-II\n>>>>48  lelong&0xf0000000\t0x20000000\tMIPS-III\n>>>>48  lelong&0xf0000000\t0x30000000\tMIPS-IV\n>>>>48  lelong&0xf0000000\t0x40000000\tMIPS-V\n>>>>48  lelong&0xf0000000\t0x50000000\tMIPS32\n>>>>48  lelong&0xf0000000\t0x60000000\tMIPS64\n>>>>48  lelong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>>48  lelong&0xf0000000\t0x80000000\tMIPS64 rel2\n>>18\tleshort\t\t9\t\tAmdahl - invalid byte order,\n>>18\tleshort\t\t10\t\tMIPS (deprecated),\n>>18\tleshort\t\t11\t\tRS6000 - invalid byte order,\n>>18\tleshort\t\t15\t\tPA-RISC - invalid byte order,\n>>>50\tleshort\t\t0x0214\t\t2.0\n>>>48\tleshort\t\t&0x0008\t\t(LP64),\n>>18\tleshort\t\t16\t\tnCUBE,\n>>18\tleshort\t\t17\t\tFujitsu VPP500,\n>>18\tleshort\t\t18\t\tSPARC32PLUS - invalid byte order,\n>>18\tleshort\t\t20\t\tPowerPC,\n>>18\tleshort\t\t22\t\tIBM S/390,\n>>18\tleshort\t\t36\t\tNEC V800,\n>>18\tleshort\t\t37\t\tFujitsu FR20,\n>>18\tleshort\t\t38\t\tTRW RH-32,\n>>18\tleshort\t\t39\t\tMotorola RCE,\n>>18\tleshort\t\t40\t\tARM,\n>>18\tleshort\t\t41\t\tAlpha,\n>>18\tleshort\t\t0xa390\t\tIBM S/390 (obsolete),\n>>18\tleshort\t\t42\t\tRenesas SH,\n>>18\tleshort\t\t43\t\tSPARC V9 - invalid byte order,\n>>18\tleshort\t\t44\t\tSiemens Tricore Embedded Processor,\n>>18\tleshort\t\t45\t\tArgonaut RISC Core, Argonaut Technologies Inc.,\n>>18\tleshort\t\t46\t\tRenesas H8/300,\n>>18\tleshort\t\t47\t\tRenesas H8/300H,\n>>18\tleshort\t\t48\t\tRenesas H8S,\n>>18\tleshort\t\t49\t\tRenesas H8/500,\n>>18\tleshort\t\t50\t\tIA-64,\n>>18\tleshort\t\t51\t\tStanford MIPS-X,\n>>18\tleshort\t\t52\t\tMotorola Coldfire,\n>>18\tleshort\t\t53\t\tMotorola M68HC12,\n>>18\tleshort\t\t54\t\tFujitsu MMA,\n>>18\tleshort\t\t55\t\tSiemens PCP,\n>>18\tleshort\t\t56\t\tSony nCPU,\n>>18\tleshort\t\t57\t\tDenso NDR1,\n>>18\tleshort\t\t58\t\tStart*Core,\n>>18\tleshort\t\t59\t\tToyota ME16,\n>>18\tleshort\t\t60\t\tST100,\n>>18\tleshort\t\t61\t\tTinyj emb.,\n>>18\tleshort\t\t62\t\tx86-64,\n>>18\tleshort\t\t63\t\tSony DSP,\n>>18\tleshort\t\t66\t\tFX66,\n>>18\tleshort\t\t67\t\tST9+ 8/16 bit,\n>>18\tleshort\t\t68\t\tST7 8 bit,\n>>18\tleshort\t\t69\t\tMC68HC16,\n>>18\tleshort\t\t70\t\tMC68HC11,\n>>18\tleshort\t\t71\t\tMC68HC08,\n>>18\tleshort\t\t72\t\tMC68HC05,\n>>18\tleshort\t\t73\t\tSGI SVx,\n>>18\tleshort\t\t74\t\tST19 8 bit,\n>>18\tleshort\t\t75\t\tDigital VAX,\n>>18\tleshort\t\t76\t\tAxis cris,\n>>18\tleshort\t\t77\t\tInfineon 32-bit embedded,\n>>18\tleshort\t\t78\t\tElement 14 64-bit DSP,\n>>18\tleshort\t\t79\t\tLSI Logic 16-bit DSP,\n>>18\tleshort\t\t80\t\tMMIX,\n>>18\tleshort\t\t81\t\tHarvard machine-independent,\n>>18\tleshort\t\t82\t\tSiTera Prism,\n>>18\tleshort\t\t83\t\tAtmel AVR 8-bit,\n>>18\tleshort\t\t84\t\tFujitsu FR30,\n>>18\tleshort\t\t85\t\tMitsubishi D10V,\n>>18\tleshort\t\t86\t\tMitsubishi D30V,\n>>18\tleshort\t\t87\t\tNEC v850,\n>>18\tleshort\t\t88\t\tRenesas M32R,\n>>18\tleshort\t\t89\t\tMatsushita MN10300,\n>>18\tleshort\t\t90\t\tMatsushita MN10200,\n>>18\tleshort\t\t91\t\tpicoJava,\n>>18\tleshort\t\t92\t\tOpenRISC,\n>>18\tleshort\t\t93\t\tARC Cores Tangent-A5,\n>>18\tleshort\t\t94\t\tTensilica Xtensa,\n>>18\tleshort\t\t97\t\tNatSemi 32k,\n>>18\tleshort\t\t106\t\tAnalog Devices Blackfin,\n>>18\tleshort\t\t113\t\tAltera Nios II,\n>>18\tleshort\t\t0xae\t\tMETA,\n>>18\tleshort\t\t0x3426\t\tOpenRISC (obsolete),\n>>18\tleshort\t\t0x8472\t\tOpenRISC (obsolete),\n>>18\tleshort\t\t0x9026\t\tAlpha (unofficial),\n>>20\tlelong\t\t0\t\tinvalid version\n>>20\tlelong\t\t1\t\tversion 1\n>>36\tlelong\t\t1\t\tMathCoPro/FPU/MAU Required\n>5\tbyte\t\t2\t\tMSB\n>>16\tbeshort\t\t0\t\tno file type,\n!:mime\tapplication/octet-stream\n>>16\tbeshort\t\t1\t\trelocatable,\n!:mime\tapplication/x-object\n>>16\tbeshort\t\t2\t\texecutable,\n!:mime\tapplication/x-executable\n>>16\tbeshort\t\t3\t\tshared object,\n!:mime\tapplication/x-sharedlib\n>>16\tbeshort\t\t4\t\tcore file,\n!:mime\tapplication/x-coredump\n#>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n#>>>(0x38+0x10) belong\t>0\t\t(signal %d),\n>>16\tbeshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tbeshort\t\t0\t\tno machine,\n>>18\tbeshort\t\t1\t\tAT&T WE32100,\n>>18\tbeshort\t\t2\t\tSPARC,\n>>18\tbeshort\t\t3\t\tIntel 80386 - invalid byte order,\n>>18\tbeshort\t\t4\t\tMotorola\n>>>36\tbelong\t\t&0x01000000\t68000,\n>>>36\tbelong\t\t&0x00810000\tCPU32,\n>>>36\tbelong\t\t0\t\t68020,\n>>18\tbeshort\t\t5\t\tMotorola 88000,\n>>18\tbeshort\t\t6\t\tIntel 80486 - invalid byte order,\n>>18\tbeshort\t\t7\t\tIntel 80860,\n# only for MIPS - see comment in little-endian section above.\n>>18\tbeshort\t\t8\t\tMIPS,\n>>>36\tbelong\t\t&0x20\t\tN32\n>>18\tbeshort\t\t10\t\tMIPS,\n>>>36\tbelong\t\t&0x20\t\tN32\n>>18\tbeshort\t\t8\n# only for 32-bit\n>>>4\tbyte\t\t1\n>>>>36  belong&0xf0000000\t0x00000000\tMIPS-I\n>>>>36  belong&0xf0000000\t0x10000000\tMIPS-II\n>>>>36  belong&0xf0000000\t0x20000000\tMIPS-III\n>>>>36  belong&0xf0000000\t0x30000000\tMIPS-IV\n>>>>36  belong&0xf0000000\t0x40000000\tMIPS-V\n>>>>36  belong&0xf0000000\t0x50000000\tMIPS32\n>>>>36  belong&0xf0000000\t0x60000000\tMIPS64\n>>>>36  belong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>>36  belong&0xf0000000\t0x80000000\tMIPS64 rel2\n# only for 64-bit\n>>>4\tbyte\t\t2\n>>>>48\tbelong&0xf0000000\t0x00000000\tMIPS-I\n>>>>48\tbelong&0xf0000000\t0x10000000\tMIPS-II\n>>>>48\tbelong&0xf0000000\t0x20000000\tMIPS-III\n>>>>48\tbelong&0xf0000000\t0x30000000\tMIPS-IV\n>>>>48\tbelong&0xf0000000\t0x40000000\tMIPS-V\n>>>>48\tbelong&0xf0000000\t0x50000000\tMIPS32\n>>>>48\tbelong&0xf0000000\t0x60000000\tMIPS64\n>>>>48\tbelong&0xf0000000\t0x70000000\tMIPS32 rel2\n>>>>48\tbelong&0xf0000000\t0x80000000\tMIPS64 rel2\n>>18\tbeshort\t\t9\t\tAmdahl,\n>>18\tbeshort\t\t10\t\tMIPS (deprecated),\n>>18\tbeshort\t\t11\t\tRS6000,\n>>18\tbeshort\t\t15\t\tPA-RISC\n>>>50\tbeshort\t\t0x0214\t\t2.0\n>>>48\tbeshort\t\t&0x0008\t\t(LP64)\n>>18\tbeshort\t\t16\t\tnCUBE,\n>>18\tbeshort\t\t17\t\tFujitsu VPP500,\n>>18\tbeshort\t\t18\t\tSPARC32PLUS,\n>>>36\tbelong&0xffff00\t0x000100\tV8+ Required,\n>>>36\tbelong&0xffff00\t0x000200\tSun UltraSPARC1 Extensions Required,\n>>>36\tbelong&0xffff00\t0x000400\tHaL R1 Extensions Required,\n>>>36\tbelong&0xffff00\t0x000800\tSun UltraSPARC3 Extensions Required,\n>>18\tbeshort\t\t20\t\tPowerPC or cisco 4500,\n>>18\tbeshort\t\t21\t\t64-bit PowerPC or cisco 7500,\n>>18\tbeshort\t\t22\t\tIBM S/390,\n>>18\tbeshort\t\t23\t\tCell SPU,\n>>18\tbeshort\t\t24\t\tcisco SVIP,\n>>18\tbeshort\t\t25\t\tcisco 7200,\n>>18\tbeshort\t\t36\t\tNEC V800 or cisco 12000,\n>>18\tbeshort\t\t37\t\tFujitsu FR20,\n>>18\tbeshort\t\t38\t\tTRW RH-32,\n>>18\tbeshort\t\t39\t\tMotorola RCE,\n>>18\tbeshort\t\t40\t\tARM,\n>>18\tbeshort\t\t41\t\tAlpha,\n>>18\tbeshort\t\t42\t\tRenesas SH,\n>>18\tbeshort\t\t43\t\tSPARC V9,\n>>>48\tbelong&0xffff00\t0x000200\tSun UltraSPARC1 Extensions Required,\n>>>48\tbelong&0xffff00\t0x000400\tHaL R1 Extensions Required,\n>>>48\tbelong&0xffff00\t0x000800\tSun UltraSPARC3 Extensions Required,\n>>>48\tbelong&0x3\t0\t\ttotal store ordering,\n>>>48\tbelong&0x3\t1\t\tpartial store ordering,\n>>>48\tbelong&0x3\t2\t\trelaxed memory ordering,\n>>18\tbeshort\t\t44\t\tSiemens Tricore Embedded Processor,\n>>18\tbeshort\t\t45\t\tArgonaut RISC Core, Argonaut Technologies Inc.,\n>>18\tbeshort\t\t46\t\tRenesas H8/300,\n>>18\tbeshort\t\t47\t\tRenesas H8/300H,\n>>18\tbeshort\t\t48\t\tRenesas H8S,\n>>18\tbeshort\t\t49\t\tRenesas H8/500,\n>>18\tbeshort\t\t50\t\tIA-64,\n>>18\tbeshort\t\t51\t\tStanford MIPS-X,\n>>18\tbeshort\t\t52\t\tMotorola Coldfire,\n>>18\tbeshort\t\t53\t\tMotorola M68HC12,\n>>18\tbeshort\t\t73\t\tCray NV1,\n>>18\tbeshort\t\t75\t\tDigital VAX,\n>>18\tbeshort\t\t88\t\tRenesas M32R,\n>>18\tleshort\t\t92\t\tOpenRISC,\n>>18\tleshort\t\t0x3426\t\tOpenRISC (obsolete),\n>>18\tleshort\t\t0x8472\t\tOpenRISC (obsolete),\n>>18\tbeshort\t\t94\t\tTensilica Xtensa,\n>>18\tbeshort\t\t97\t\tNatSemi 32k,\n>>18\tbeshort\t\t0x18ad\t\tAVR32 (unofficial),\n>>18\tbeshort\t\t0x9026\t\tAlpha (unofficial),\n>>18\tbeshort\t\t0xa390\t\tIBM S/390 (obsolete),\n>>20\tbelong\t\t0\t\tinvalid version\n>>20\tbelong\t\t1\t\tversion 1\n>>36\tbelong\t\t1\t\tMathCoPro/FPU/MAU Required\n# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed\n# like proper ELF, but extracting the string had bad results.\n>4      byte            <0x80\n>>8\tstring\t\t>\\0\t\t(%s)\n>8\tstring\t\t\\0\n>>7\tbyte\t\t0\t\t(SYSV)\n>>7\tbyte\t\t1\t\t(HP-UX)\n>>7\tbyte\t\t2\t\t(NetBSD)\n>>7\tbyte\t\t3\t\t(GNU/Linux)\n>>7\tbyte\t\t4\t\t(GNU/Hurd)\n>>7\tbyte\t\t5\t\t(86Open)\n>>7\tbyte\t\t6\t\t(Solaris)\n>>7\tbyte\t\t7\t\t(Monterey)\n>>7\tbyte\t\t8\t\t(IRIX)\n>>7\tbyte\t\t9\t\t(FreeBSD)\n>>7\tbyte\t\t10\t\t(Tru64)\n>>7\tbyte\t\t11\t\t(Novell Modesto)\n>>7\tbyte\t\t12\t\t(OpenBSD)\n>8      string          \\2\n>>7     byte            13              (OpenVMS)\n>>7\tbyte\t\t97\t\t(ARM)\n>>7\tbyte\t\t255\t\t(embedded)\n\n#------------------------------------------------------------------------------\n# $File: encore,v 1.6 2009/09/19 16:28:09 christos Exp $\n# encore:  file(1) magic for Encore machines\n#\n# XXX - needs to have the byte order specified (NS32K was little-endian,\n# dunno whether they run the 88K in little-endian mode or not).\n#\n0\tshort\t\t0x154\t\tEncore\n>20\tshort\t\t0x107\t\texecutable\n>20\tshort\t\t0x108\t\tpure executable\n>20\tshort\t\t0x10b\t\tdemand-paged executable\n>20\tshort\t\t0x10f\t\tunsupported executable\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %ld\n>22\tshort\t\t0\t\t-\n#>4\tdate\t\tx\t\tstamp %s\n0\tshort\t\t0x155\t\tEncore unsupported executable\n>12\tlong\t\t>0\t\tnot stripped\n>22\tshort\t\t>0\t\t- version %ld\n>22\tshort\t\t0\t\t-\n#>4\tdate\t\tx\t\tstamp %s\n\n#------------------------------------------------------------------------------\n# $File: epoc,v 1.7 2009/09/19 16:28:09 christos Exp $\n# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]\n# Stefan Praszalowicz <hpicollo@worldnet.fr> and Peter Breitenlohner <peb@mppmu.mpg.de>\n# Useful information for improving this file can be found at:\n# http://software.frodo.looijaard.name/psiconv/formats/Index.html\n#------------------------------------------------------------------------------\n0\tlelong\t\t0x10000037\tPsion Series 5\n>4\tlelong\t\t0x10000039\tfont file\n>4\tlelong\t\t0x1000003A\tprinter driver\n>4\tlelong\t\t0x1000003B\tclipboard\n>4\tlelong\t\t0x10000042\tmulti-bitmap image\n!:mime image/x-epoc-mbm\n>4\tlelong\t\t0x1000006A\tapplication information file\n>4\tlelong\t\t0x1000006D\n>>8\tlelong\t\t0x1000007D\tSketch image\n!:mime image/x-epoc-sketch\n>>8\tlelong\t\t0x1000007E\tvoice note\n>>8\tlelong\t\t0x1000007F\tWord file\n!:mime application/x-epoc-word\n>>8\tlelong\t\t0x10000085\tOPL program (TextEd)\n!:mime application/x-epoc-opl\n>>8\tlelong\t\t0x10000088\tSheet file\n!:mime application/x-epoc-sheet\n>>8\tlelong\t\t0x100001C4\tEasyFax initialisation file\n>4\tlelong\t\t0x10000073\tOPO module\n!:mime application/x-epoc-opo\n>4\tlelong\t\t0x10000074\tOPL application\n!:mime application/x-epoc-app\n>4\tlelong\t\t0x1000008A\texported multi-bitmap image\n\n0\tlelong\t\t0x10000041\tPsion Series 5 ROM multi-bitmap image\n\n0\tlelong\t\t0x10000050\tPsion Series 5\n>4\tlelong\t\t0x1000006D\tdatabase\n>4\tlelong\t\t0x100000E4\tini file\n\n0\tlelong\t\t0x10000079\tPsion Series 5 binary:\n>4\tlelong\t\t0x00000000\tDLL\n>4\tlelong\t\t0x10000049\tcomms hardware library\n>4\tlelong\t\t0x1000004A\tcomms protocol library\n>4\tlelong\t\t0x1000005D\tOPX\n>4\tlelong\t\t0x1000006C\tapplication\n>4\tlelong\t\t0x1000008D\tDLL\n>4\tlelong\t\t0x100000AC\tlogical device driver\n>4\tlelong\t\t0x100000AD\tphysical device driver\n>4\tlelong\t\t0x100000E5\tfile transfer protocol\n>4\tlelong\t\t0x100000E5\tfile transfer protocol\n>4\tlelong\t\t0x10000140\tprinter definition\n>4\tlelong\t\t0x10000141\tprinter definition\n\n0\tlelong\t\t0x1000007A\tPsion Series 5 executable\n\n#------------------------------------------------------------------------------\n# $File: erlang,v 1.5 2009/09/19 16:28:09 christos Exp $\n# erlang:  file(1) magic for Erlang JAM and BEAM files\n# URL:  http://www.erlang.org/faq/x779.html#AEN812\n\n# OTP R3-R4\n0\tstring\t\\0177BEAM!\tOld Erlang BEAM file\n>6\tshort\t>0\t\t- version %d\n\n# OTP R5 and onwards\n0\tstring\tFOR1\n>8\tstring\tBEAM\t\tErlang BEAM file\n\n# 4.2 version may have a copyright notice!\n4\tstring\tTue\\ Jan\\ 22\\ 14:32:44\\ MET\\ 1991\tErlang JAM file - version 4.2\n79\tstring\tTue\\ Jan\\ 22\\ 14:32:44\\ MET\\ 1991\tErlang JAM file - version 4.2\n\n4\tstring\t1.0\\ Fri\\ Feb\\ 3\\ 09:55:56\\ MET\\ 1995\tErlang JAM file - version 4.3\n\n0\tbequad\t0x0000000000ABCDEF\tErlang DETS file\n\n#------------------------------------------------------------------------------\n# $File: esri,v 1.4 2009/09/19 16:28:09 christos Exp $\n# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)\n# Based on info from\n# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>\n0\tbelong\t9994\tESRI Shapefile\n>4\tbelong\t=0\n>8\tbelong\t=0\n>12\tbelong\t=0\n>16\tbelong\t=0\n>20\tbelong\t=0\n>28\tlelong\tx\tversion %d\n>24\tbelong\tx\tlength %d\n>32\tlelong\t=0\ttype Null Shape\n>32\tlelong\t=1\ttype Point\n>32\tlelong\t=3\ttype PolyLine\n>32\tlelong\t=5\ttype Polygon\n>32\tlelong\t=8\ttype MultiPoint\n>32\tlelong\t=11\ttype PointZ\n>32\tlelong\t=13\ttype PolyLineZ\n>32\tlelong\t=15\ttype PolygonZ\n>32\tlelong\t=18\ttype MultiPointZ\n>32\tlelong\t=21\ttype PointM\n>32\tlelong\t=23\ttype PolyLineM\n>32\tlelong\t=25\ttype PolygonM\n>32\tlelong\t=28\ttype MultiPointM\n>32\tlelong\t=31\ttype MultiPatch\n\n#------------------------------------------------------------------------------\n# $File: fcs,v 1.4 2009/09/19 16:28:09 christos Exp $\n# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files\n# From Roger Leigh <roger@whinlatter.uklinux.net>\n0       string          FCS1.0          Flow Cytometry Standard (FCS) data, version 1.0\n0       string          FCS2.0          Flow Cytometry Standard (FCS) data, version 2.0\n0       string          FCS3.0          Flow Cytometry Standard (FCS) data, version 3.0\n\n\n#------------------------------------------------------------------------------\n# $File: filesystems,v 1.55 2010/01/16 17:45:12 chl Exp $\n# filesystems:  file(1) magic for different filesystems\n#\n0\tstring\t\\366\\366\\366\\366\tPC formatted floppy with no filesystem\n# Sun disk labels\n# From /usr/include/sun/dklabel.h:\n0774\tbeshort\t\t0xdabe\t\t\n# modified by Joerg Jenderek, because original test\n# succeeds for Cabinet archive dao360.dl_ with negative blocks\n>0770\tlong\t\t>0\t\tSun disk label\n>>0\tstring\t\tx\t\t'%s\n>>>31\tstring\t\t>\\0\t\t\\b%s\n>>>>63\tstring\t\t>\\0\t\t\\b%s\n>>>>>95\tstring\t\t>\\0\t\t\\b%s\n>>0\tstring\t\tx\t\t\\b'\n>>0734\tshort\t\t>0\t\t%d rpm,\n>>0736\tshort\t\t>0\t\t%d phys cys,\n>>0740\tshort\t\t>0\t\t%d alts/cyl,\n>>0746\tshort\t\t>0\t\t%d interleave,\n>>0750\tshort\t\t>0\t\t%d data cyls,\n>>0752\tshort\t\t>0\t\t%d alt cyls,\n>>0754\tshort\t\t>0\t\t%d heads/partition,\n>>0756\tshort\t\t>0\t\t%d sectors/track,\n>>0764\tlong\t\t>0\t\tstart cyl %ld,\n>>0770\tlong\t\tx\t\t%ld blocks\n# Is there a boot block written 1 sector in?\n>512    belong&077777777\t0600407\t\\b, boot block present\n# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc\n# (http://btmgr.sourceforge.net/docs/user-guide-3.html)\n0\t\tstring\tSBMBAKUP_\tSmart Boot Manager backup file\n>9\t\tstring\tx\t\t\\b, version %-5.5s\n>>14\t\tstring\t=_\t\t\n>>>15\t\tstring\tx\t\t%-.1s\n>>>>16\t\tstring\t=_\t\t\\b.\n>>>>>17\t\tstring\tx\t\t\\b%-.1s\n>>>>>>18\tstring\t=_\t\t\\b.\n>>>>>>>19\tstring\tx\t\t\\b%-.1s\n>>>22\t\tubyte\t0\t\t\n>>>>21\t\tubyte\tx\t\t\\b, from drive 0x%x\n>>>22\t\tubyte\t>0\t\t\n>>>>21\t\tstring\tx\t\t\\b, from drive %s\n\n# Joerg Jenderek\n# DOS Emulator image is 128 byte, null right padded header + harddisc image\n0\tstring\tDOSEMU\\0\t\t\t\n>0x27E\tleshort\t0xAA55\t\t\t\n#offset is 128\n>>19\tubyte\t128\t\t\t\n>>>(19.b-1)\tubyte\t0x0\tDOS Emulator image\n>>>>7\tulelong\t>0\t\t\\b, %u heads\n>>>>11\tulelong\t>0\t\t\\b, %d sectors/track\n>>>>15\tulelong\t>0\t\t\\b, %d cylinders\n\n# updated by Joerg Jenderek at Sep 2007\n# only for sector sizes with 512 or more Bytes\n0x1FE\tleshort\t0xAA55\t\t\tx86 boot sector\n# to do also for sectors < than 512 Bytes and some other files, GRR\n#30\tsearch/481\t\\x55\\xAA\tx86 boot sector\n# not for BeOS floppy 1440k, MBRs\n#(11.s-2) uleshort\t0xAA55\t\tx86 boot sector\n>2\tstring\tOSBS\t\t\t\\b, OS/BS MBR\n# J\\xf6rg Jenderek <joerg dot jenderek at web dot de>\n>0x8C\tstring\tInvalid\\ partition\\ table\t\\b, MS-DOS MBR\n# dr-dos with some upper-, lowercase variants\n>0x9D\tstring\tInvalid\\ partition\\ table$\t\n>>181\tstring\tNo\\ Operating\\ System$\t\t\n>>>201\tstring\tOperating\\ System\\ load\\ error$\t\\b, DR-DOS MBR, Version 7.01 to 7.03\n>0x9D\tstring\tInvalid\\ partition\\ table$\t\n>>181\tstring\tNo\\ operating\\ system$\t\t\n>>>201\tstring\tOperating\\ system\\ load\\ error$\t\\b, DR-DOS MBR, Version 7.01 to 7.03\n>342\tstring\tInvalid\\ partition\\ table$\t\n>>366\tstring\tNo\\ operating\\ system$\t\t\n>>>386\tstring\tOperating\\ system\\ load\\ error$\t\\b, DR-DOS MBR, version 7.01 to 7.03\n>295\tstring\tNEWLDR\\0\t\t\t\t\n>>302\tstring\tBad\\ PT\\ $\t\t\t\t\n>>>310\tstring\tNo\\ OS\\ $\t\t\t\t\n>>>>317\tstring\tOS\\ load\\ err$\t\t\t\t\n>>>>>329\tstring\tMoved\\ or\\ missing\\ IBMBIO.LDR\\n\\r\t\n>>>>>>358\tstring\tPress\\ any\\ key\\ to\\ continue.\\n\\r$\t\n>>>>>>>387\tstring\tCopyright\\ (c)\\ 1984,1998\t\n>>>>>>>>411\tstring\tCaldera\\ Inc.\\0\t\t\\b, DR-DOS MBR (IBMBIO.LDR)\n>0x10F\tstring\tUng\\201ltige\\ Partitionstabelle\t\\b, MS-DOS MBR, german version 4.10.1998, 4.10.2222\n>>0x1B8\tubelong\t>0\t\t\t\t\\b, Serial 0x%-.4x\n>0x8B\tstring\tUng\\201ltige\\ Partitionstabelle\t\\b, MS-DOS MBR, german version 5.00 to 4.00.950\n>271\tstring\tInvalid\\ partition\\ table\\0\t\t\n>>295\tstring\tError\\ loading\\ operating\\ system\\0\t\n>>>326\tstring\tMissing\\ operating\\ system\\0\t\t\\b, mbr\n#\n>139\tstring\tInvalid\\ partition\\ table\\0\t\t\n>>163\tstring\tError\\ loading\\ operating\\ system\\0\t\n>>>194\tstring\tMissing\\ operating\\ system\\0\t\t\\b, Microsoft Windows XP mbr\n# http://www.heise.de/ct/05/09/006/ page 184\n#HKEY_LOCAL_MACHINE\\SYSTEM\\MountedDevices\\DosDevices\\?:=Serial4Bytes+8Bytes\n>>>>0x1B8\tulelong\t>0\t\t\t\t\\b,Serial 0x%-.4x\n>300\tstring\tInvalid\\ partition\\ table\\0\t\n>>324\tstring\tError\\ loading\\ operating\\ system\\0\n>>>355\tstring\tMissing\\ operating\\ system\\0\t\t\\b, Microsoft Windows XP MBR\n#??>>>389\tstring\tInvalid\\ system\\ disk\t\t\n>>>>0x1B8\tulelong\t>0\t\t\t\t\\b, Serial 0x%-.4x\n>300\tstring\tUng\\201ltige\\ Partitionstabelle\n#split string to avoid error: String too long\n>>328\tstring\tFehler\\ beim\\ Laden\\ \t\n>>>346\tstring\tdes\\ Betriebssystems\t\n>>>>366\tstring\tBetriebssystem\\ nicht\\ vorhanden\t\\b, Microsoft Windows XP MBR (german)\n>>>>>0x1B8\tulelong\t>0\t\t\t\t\\b, Serial 0x%-.4x\n#>0x145\tstring\tDefault:\\ F\t\t\t\t\\b, FREE-DOS MBR\n#>0x14B\tstring\tDefault:\\ F\t\t\t\t\\b, FREE-DOS 1.0 MBR\n>0x145\tsearch/7\tDefault:\\ F\t\t\t\\b, FREE-DOS MBR\n#>>313\t\tstring\tF0\\ .\\ .\\ .\t\t\t\n#>>>322\t\tstring\tdisk\\ 1\t\t\t\t\n#>>>>382\tstring\tFAT3\t\t\t\t\n>64\tstring\tno\\ active\\ partition\\ found\t\n>>96\tstring\tread\\ error\\ while\\ reading\\ drive\t\\b, FREE-DOS Beta 0.9 MBR\n# Ranish Partition Manager http://www.ranish.com/part/\n>387\tsearch/4\t\\0\\ Error!\\r\t\t\t\n>>378\tsearch/7\tVirus! \t\t\t\t\n>>>397\tsearch/4\tBooting\\ \t\t\t\n>>>>408\tsearch/4\tHD1/\\0\t \t\t\t\\b, Ranish MBR (\n>>>>>416\tstring\tWriting\\ changes...\t\t\\b2.37\n>>>>>>438\tubyte\t\tx\t\t\t\\b,0x%x dots\n>>>>>>440\tubyte\t\t>0\t\t\t\\b,virus check\n>>>>>>441\tubyte\t\t>0\t\t\t\\b,partition %c\n#2.38,2.42,2.44\n>>>>>416\tstring\t!Writing\\ changes...\t\t\\b\n>>>>>>418\tubyte\t1\t\t\t\t\\bvirus check,\n>>>>>>419\tubyte\tx\t\t\t\t\\b0x%x seconds\n>>>>>>420\tubyte&0x0F\t>0\t\t\t\\b,partition\n>>>>>>>420\tubyte&0x0F\t<5\t\t\t\\b %x\n>>>>>>>420\tubyte&0x0F\t0Xf\t\t\t\\b ask\n>>>>>420\tubyte\t\tx\t\t\t\\b)\n#\n>271\tstring\tOperating\\ system\\ loading \t\t\n>>296\tstring\terror\\r\t\t\t\t\t\\b, SYSLINUX MBR (2.10)\n# http://www.acronis.de/\n>362\tstring\tMBR\\ Error\\ \\0\\r\t\t\t\n>>376\tstring\tress\\ any\\ key\\ to\\ \t\t\t\n>>>392\tstring\tboot\\ from\\ floppy...\\0\t\t\t\\b, Acronis MBR\n# added by Joerg Jenderek\n# http://www.visopsys.org/\n# http://partitionlogic.org.uk/\n>309\tstring\tNo\\ bootable\\ partition\\ found\\r\t\n>>339\tstring\tI/O\\ Error\\ reading\\ boot\\ sector\\r\t\\b, Visopsys MBR\n>349\tstring\tNo\\ bootable\\ partition\\ found\\r\t\n>>379\tstring\tI/O\\ Error\\ reading\\ boot\\ sector\\r\t\\b, simple Visopsys MBR\n# bootloader, bootmanager\n>0x40\tstring\tSBML\t\t\t\t\n# label with 11 characters of FAT 12 bit filesystem\n>>43\tstring\tSMART\\ BTMGR\t\t\t\n>>>430\tstring\tSBMK\\ Bad!\\r\t\t\t\\b, Smart Boot Manager\n# OEM-ID not always \"SBM\"\n#>>>>3\tstrings\tSBM\t\t\t\t\n>>>>6\tstring\t>\\0                             \\b, version %s\n>382\tstring\tXOSLLOADXCF\t\t\t\\b, eXtended Operating System Loader\n>6\tstring\tLILO\t\t\t\t\\b, LInux i386 boot LOader\n>>120\tstring\tLILO\t\t\t\t\\b, version 22.3.4 SuSe\n>>172\tstring\tLILO\t\t\t\t\\b, version 22.5.8 Debian\n# updated by Joerg Jenderek at Oct 2008\n# variables according to grub-0.97/stage1/stage1.S or\n# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data\n# usual values are marked with comments to get only informations of strange GRUB loaders\n>342\t\tsearch/60\t\\0Geom\\0\t\n#>0\t\tulelong\t\tx\t\t%x=0x009048EB ,\t0x2a9048EB  0\n>>0x41\t\tubyte\t\t<2\t\t\n>>>0x3E\t\tubyte\t\t>2\t\t\\b; GRand Unified Bootloader\n# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 \n>>>>0x3E\tubyte\t\tx\t\t\\b, stage1 version 0x%x\n#If it is 0xFF, use a drive passed by BIOS\n>>>>0x40\tubyte\t\t<0xFF\t\t\\b, boot drive 0x%x\n# in most case 0,1,0x2e for GRUB 0.5.95\n>>>>0x41\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n>>>>0x42\tuleshort\t<0x8000\t\t\\b, stage2 address 0x%x\n#>>>>0x42\tuleshort\t=0x8000\t\t\\b, stage2 address 0x%x (usual)\n>>>>0x42\tuleshort\t>0x8000\t\t\\b, stage2 address 0x%x\n#>>>>0x44\tulelong\t\t=1\t\t\\b, 1st sector stage2 0x%x (default)\n>>>>0x44\tulelong\t\t>1\t\t\\b, 1st sector stage2 0x%x\n>>>>0x48\tuleshort\t<0x800\t\t\\b, stage2 segment 0x%x\n#>>>>0x48\tuleshort\t=0x800\t\t\\b, stage2 segment 0x%x (usual)\n>>>>0x48\tuleshort\t>0x800\t\t\\b, stage2 segment 0x%x\n>>>>402\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>394\tstring\tstage1\t\t\t\\b, GRUB version 0.5.95\n>>>>382\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>376\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.93 or 1.94\n>>>>383\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>377\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.94\n>>>>385\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>379\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.95 or 0.96\n>>>>391\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>>385\tstring\tGRUB\\ \\0\t\t\\b, GRUB version 0.97\n#unkown version\n>>>343\t\tstring\tGeom\\0Read\\0\\ Error\\0\t\n>>>>321\t\tstring\tLoading\\ stage1.5\t\\b, GRUB version x.y\n>>>380\t\tstring\tGeom\\0Hard\\ Disk\\0Read\\0\\ Error\\0\n>>>>374\t\tstring\tGRUB\\ \\0\t\t\\b, GRUB version n.m\n# http://syslinux.zytor.com/\n>478\tstring\tBoot\\ failed\\r\t\t\t\n>>495\tstring\tLDLINUX\\ SYS\t\t\t\\b, SYSLINUX bootloader (1.62)\n>480\tstring\tBoot\\ failed\\r\t\t\t\n>>495\tstring\tLDLINUX\\ SYS\t\t\t\\b, SYSLINUX bootloader (2.06 or 2.11)\n>484\tstring\tBoot\\ error\\r\t\t\t\\b, SYSLINUX bootloader (3.11)\n>395\tstring\tchksum\\0\\ ERROR!\\0\t\t\\b, Gujin bootloader\n# http://www.bcdwb.de/bcdw/index_e.htm\n>3\tstring\tBCDL\t\t\t\t\n>>498\tstring\tBCDL\\ \\ \\ \\ BIN\t\t\t\\b, Bootable CD Loader (1.50Z)\n# mbr partition table entries\n# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs\n>3\t\t\tstring\t\t!MS\n>>3\t\t\tstring\t\t!SYSLINUX\n>>>3\t\t\tstring\t\t!MTOOL\n>>>>3\t\t\tstring\t\t!NEWLDR\n>>>>>5\t\t\tstring\t\t!DOS\n# not FAT (32 bit)\n>>>>>>82\t\tstring\t\t!FAT32\n#not Linux kernel\n>>>>>>>514\t\tstring\t\t!HdrS\n#not BeOS\n>>>>>>>>422\t\tstring\t\t!Be\\ Boot\\ Loader\n# active flag 0 or 0x80 and type > 0\n>>>>>>>>>446\t\tubyte\t\t<0x81\t\n>>>>>>>>>>446\t\tubyte&0x7F\t0\t\n>>>>>>>>>>>450\t\tubyte\t\t>0\t\\b; partition 1: ID=0x%x\n>>>>>>>>>>>>446\t\tubyte\t\t0x80\t\\b, active\n>>>>>>>>>>>>447\t\tubyte\t\tx\t\\b, starthead %u\n#>>>>>>>>>>>>448\t\tubyte\t\tx\t\\b, start C_S: 0x%x\n#>>>>>>>>>>>>448\t\tubeshort&1023\tx\t\\b, startcylinder? %d\n>>>>>>>>>>>>454\t\tulelong\t\tx\t\\b, startsector %u\n>>>>>>>>>>>>458\t\tulelong\t\tx\t\\b, %u sectors\n#\n>>>>>>>>>462\t\tubyte\t\t<0x81\t\n>>>>>>>>>>462\t\tubyte&0x7F\t0\t\t\n>>>>>>>>>>>466\t\tubyte\t\t>0\t\\b; partition 2: ID=0x%x\n>>>>>>>>>>>>462\t\tubyte\t\t0x80\t\\b, active\n>>>>>>>>>>>>463\t\tubyte\t\tx\t\\b, starthead %u\n#>>>>>>>>>>>>464\t\tubyte\t\tx\t\\b, start C_S: 0x%x\n#>>>>>>>>>>>>464\t\tubeshort&1023\tx\t\\b, startcylinder? %d\n>>>>>>>>>>>>470\t\tulelong\t\tx\t\\b, startsector %u\n>>>>>>>>>>>>474\t\tulelong\t\tx\t\\b, %u sectors\n#\n>>>>>>>>>478\t\tubyte\t\t<0x81\t\t\n>>>>>>>>>>478\t\tubyte&0x7F\t0\t\t\n>>>>>>>>>>>482\t\tubyte\t\t>0\t\\b; partition 3: ID=0x%x\n>>>>>>>>>>>>478\t\tubyte\t\t0x80\t\\b, active\n>>>>>>>>>>>>479\t\tubyte\t\tx\t\\b, starthead %u\n#>>>>>>>>>>>>480\t\tubyte\t\tx\t\\b, start C_S: 0x%x\n#>>>>>>>>>>>>481\t\tubyte\t\tx\t\\b, start C2S: 0x%x\n#>>>>>>>>>>>>480\t\tubeshort&1023\tx\t\\b, startcylinder? %d\n>>>>>>>>>>>>486\t\tulelong\t\tx\t\\b, startsector %u\n>>>>>>>>>>>>490\t\tulelong\t\tx\t\\b, %u sectors\n#\n>>>>>>>>>494\t\tubyte\t\t<0x81\t\n>>>>>>>>>>494\t\tubyte&0x7F\t0\t\t\n>>>>>>>>>>>498\t\tubyte\t\t>0\t\\b; partition 4: ID=0x%x\n>>>>>>>>>>>>494\t\tubyte\t\t0x80\t\\b, active\n>>>>>>>>>>>>495\t\tubyte\t\tx\t\\b, starthead %u\n#>>>>>>>>>>>>496\t\tubyte\t\tx\t\\b, start C_S: 0x%x\n#>>>>>>>>>>>>496\t\tubeshort&1023\tx\t\\b, startcylinder? %d\n>>>>>>>>>>>>502\t\tulelong\t\tx\t\\b, startsector %u\n>>>>>>>>>>>>506\t\tulelong\t\tx\t\\b, %u sectors\n# mbr partition table entries end\n# http://www.acronis.de/\n#FAT label=ACRONIS\\ SZ\n#OEM-ID=BOOTWIZ0\n>442\tstring\tNon-system\\ disk,\\ \t\n>>459\tstring\tpress\\ any\\ key...\\x7\\0\t\t\\b, Acronis Startup Recovery Loader\n# DOS names like F11.SYS are 8 right space padded bytes+3 bytes\n>>>477\t\tubyte&0xDF\t>0\t\t\n>>>>477\t\tstring\t\tx \t\t\\b %-.3s\n>>>>>480\tubyte&0xDF\t>0\t\t\n>>>>>>480\tstring\t\tx \t\t\\b%-.5s\n>>>>485\t\tubyte&0xDF\t>0\t\t\n>>>>>485\tstring\t\tx \t\t\\b.%-.3s\n#\n>185\tstring\tFDBOOT\\ Version\\ \t\t\t\n>>204\tstring\t\\rNo\\ Systemdisk.\\ \t\t\t\n>>>220\tstring\tBooting\\ from\\ harddisk.\\n\\r\t\t\n>>>245\tstring\tCannot\\ load\\ from\\ harddisk.\\n\\r\t\n>>>>273 string\tInsert\\ Systemdisk\\ \t\t\t\n>>>>>291 string and\\ press\\ any\\ key.\\n\\r\t\t\\b, FDBOOT harddisk Bootloader\n>>>>>>200 string\t>\\0                             \\b, version %-3s\n>242\tstring\tBootsector\\ from\\ C.H.\\ Hochst\\204\t\n>>278\tstring\tNo\\ Systemdisk.\\ \t\t\t\n>>>293\tstring\tBooting\\ from\\ harddisk.\\n\\r\t\t\n>>>441\tstring\tCannot\\ load\\ from\\ harddisk.\\n\\r\t\n>>>>469 string\tInsert\\ Systemdisk\\ \t\t\t\n>>>>>487 string and\\ press\\ any\\ key.\\n\\r\t\t\\b, WinImage harddisk Bootloader\n>>>>>>209 string\t>\\0                             \\b, version %-4.4s\n>(1.b+2)\tubyte\t\t0xe\t\t\t\n>>(1.b+3)\tubyte\t\t0x1f\t\t\t\n>>>(1.b+4)\tubyte\t\t0xbe\t\t\t\n>>>>(1.b+5)\tubyte\t\t0x77\t\t\t\n>>>>(1.b+6)\tubyte\t\t0x7c\t\t\t\n>>>>>(1.b+7)\tubyte\t\t0xac\t\t\t\n>>>>>>(1.b+8)\tubyte\t\t0x22\t\t\t\n>>>>>>>(1.b+9)\tubyte\t\t0xc0\t\t\t\n>>>>>>>>(1.b+10)\tubyte\t0x74\t\t\t\n>>>>>>>>>(1.b+11)\tubyte\t0xb\t\t\t\n>>>>>>>>>>(1.b+12)\tubyte\t0x56\t\t\t\n>>>>>>>>>>(1.b+13)\tubyte\t0xb4\t\t\t\\b, mkdosfs boot message display\n>214\tstring\tPlease\\ try\\ to\\ install\\ FreeDOS\\ \t\\b, DOS Emulator boot message display\n#>>244\tstring\tfrom\\ dosemu-freedos-*-bin.tgz\\r\t\n#>>>170\tstring\tSorry,\\ could\\ not\\ load\\ an\\ \t\t\n#>>>>195\tstring\toperating\\ system.\\r\\n\t\t\n#\n>103\tstring\tThis\\ is\\ not\\ a\\ bootable\\ disk.\\ \t\n>>132\tstring\tPlease\\ insert\\ a\\ bootable\\ \t\t\n>>>157\tstring\tfloppy\\ and\\r\\n\t\t\t\t\n>>>>169\tstring\tpress\\ any\\ key\\ to\\ try\\ again...\\r\t\\b, FREE-DOS message display\n#\n>66\tstring\tSolaris\\ Boot\\ Sector    \t\t\n>>99\tstring\tIncomplete\\ MDBoot\\ load.\t\t\n>>>89\tstring\tVersion \t\t\t\t\\b, Sun Solaris Bootloader\n>>>>97\tbyte\tx\t\t\t\t\tversion %c\n#\n>408\tstring\tOS/2\\ !!\\ SYS01475\\r\\0\t\t\t\n>>429\tstring\tOS/2\\ !!\\ SYS02025\\r\\0\t\t\t\n>>>450\tstring\tOS/2\\ !!\\ SYS02027\\r\\0\t\t\t\n>>>469\tstring\tOS2BOOT\\ \\ \\ \\ \t\t\t\t\\b, IBM OS/2 Warp bootloader\n#\n>409\tstring\tOS/2\\ !!\\ SYS01475\\r\\0\t\t\t\n>>430\tstring\tOS/2\\ !!\\ SYS02025\\r\\0\t\t\t\n>>>451\tstring\tOS/2\\ !!\\ SYS02027\\r\\0\t\t\t\n>>>470\tstring\tOS2BOOT\\ \\ \\ \\ \t\t\t\t\\b, IBM OS/2 Warp Bootloader\n>112\t\tstring\tThis\\ disk\\ is\\ not\\ bootable\\r\t\t\t\n>>142\t\tstring\tIf\\ you\\ wish\\ to\\ make\\ it\\ bootable\t\t\n>>>176\t\tstring\trun\\ the\\ DOS\\ program\\ SYS\\  \t\t\t\n>>>200\t\tstring\tafter\\ the\\r\t\t\t\t\t\n>>>>216\t\tstring\tsystem\\ has\\ been\\ loaded\\r\\n\t\t\t\n>>>>>242\tstring\tPlease\\ insert\\ a\\ DOS\\ diskette\\ \t\t\n>>>>>271\tstring\tinto\\r\\n\\ the\\ drive\\ and\\ \t\t\t\n>>>>>>292\tstring\tstrike\\ any\\ key...\\0\t\t\\b, IBM OS/2 Warp message display\n# XP\n>430\tstring\tNTLDR\\ is\\ missing\\xFF\\r\\n\t\t\n>>449\tstring\tDisk\\ error\\xFF\\r\\n\t\t\t\n>>>462\tstring\tPress\\ any\\ key\\ to\\ restart\\r\t\t\\b, Microsoft Windows XP Bootloader\n# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>430\tstring\tNTLDR\\ nicht\\ gefunden\\xFF\\r\\n\t\t\n>>453\tstring\tDatentr\\204gerfehler\\xFF\\r\\n\t\t\n>>>473\tstring\tNeustart\\ mit\\ beliebiger\\ Taste\\r\t\\b, Microsoft Windows XP Bootloader (german)\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n# offset variant\n>>>>379\tstring\t\\0\t\t\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n#\n>430\tstring\tNTLDR\\ fehlt\\xFF\\r\\n\t\t\t\n>>444\tstring\tDatentr\\204gerfehler\\xFF\\r\\n\t\t\n>>>464\tstring\tNeustart\\ mit\\ beliebiger\\ Taste\\r\t\\b, Microsoft Windows XP Bootloader (2.german)\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n# variant\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>430\tstring\tNTLDR\\ fehlt\\xFF\\r\\n\t\t\t\n>>444\tstring\tMedienfehler\\xFF\\r\\n\t\t\t\n>>>459\tstring\tNeustart:\\ Taste\\ dr\\201cken\\r\t\t\\b, Microsoft Windows XP Bootloader (3.german)\n>>>>371\t\tubyte\t\t>0x20\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n# variant\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n>430\tstring\tDatentr\\204ger\\ entfernen\\xFF\\r\\n\t\n>>454\tstring\tMedienfehler\\xFF\\r\\n\t\t\t\n>>>469\tstring\tNeustart:\\ Taste\\ dr\\201cken\\r\t\t\\b, Microsoft Windows XP Bootloader (4.german)\n>>>>379\t\tstring\t\t\\0\t\t\t\n>>>>>368\tubyte&0xDF\t>0\t\t\t\n>>>>>>368\tstring\t\tx \t\t\t%-.5s\n>>>>>>>373\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>373\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>376\tubyte&0xDF\t>0\t\t\t\n>>>>>>>376\tstring\t\tx \t\t\t\\b.%-.3s\n# variant\n>>>>417\t\tubyte&0xDF\t>0\t\t\t\n>>>>>417\tstring\t\tx\t\t\t%-.5s\n>>>>>>422\tubyte&0xDF\t>0\t\t\t\n>>>>>>>422\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>425\tubyte&0xDF\t>0\t\t\t\n>>>>>>425\tstring\t\t>\\ \t\t\t\\b.%-.3s\n#\n\n#>3\tstring\tNTFS\\ \\ \\ \\ \t\t\t\t\n>389\tstring\tFehler\\ beim\\ Lesen\\ \n>>407\tstring\tdes\\ Datentr\\204gers\n>>>426\tstring\tNTLDR\\ fehlt\t\t\t\t\n>>>>440\tstring\tNTLDR\\ ist\\ komprimiert\n>>>>>464 string\tNeustart\\ mit\\ Strg+Alt+Entf\\r\t\t\\b, Microsoft Windows XP Bootloader NTFS (german)\n#>3\tstring\tNTFS\\ \\ \\ \\ \t\t\t\t\n>313\tstring\tA\\ disk\\ read\\ error\\ occurred.\\r\n>>345\tstring\tA\\ kernel\\ file\\ is\\ missing\\ \t\n>>>370\tstring\tfrom\\ the\\ disk.\\r\t\t\n>>>>484\tstring\tNTLDR\\ is\\ compressed\t\t\n>>>>>429 string\tInsert\\ a\\ system\\ diskette\\ \t\n>>>>>>454 string and\\ restart\\r\\nthe\\ system.\\r\t\t\\b, Microsoft Windows XP Bootloader NTFS\n# DOS loader variants different languages,offsets\n>472\tubyte&0xDF\t>0\n>>389\tstring\tInvalid\\ system\\ disk\\xFF\\r\\n\t\t\n>>>411\tstring\tDisk\\ I/O\\ error\t\t\t\n>>>>428\tstring\tReplace\\ the\\ disk,\\ and\\ \t\t\n>>>>>455 string\tpress\\ any\\ key\t\t\t\t\\b, Microsoft Windows 98 Bootloader\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\t\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>479 string\t\tx \t\t\t\\b%-.1s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>390\tstring\tInvalid\\ system\\ disk\\xFF\\r\\n\t\t\n>>>412\tstring\tDisk\\ I/O\\ error\\xFF\\r\\n\t\t\n>>>>429\tstring\tReplace\\ the\\ disk,\\ and\\ \t\t\n>>>>>451 string\tthen\\ press\\ any\\ key\\r\t\t\t\\b, Microsoft Windows 98 Bootloader\n>>388\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>410\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>427\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>453 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (german)\n#WINBOOT.SYS only not spaces (0xDF)\n>>>>>>497\tubyte&0xDF\t>0\t\t\t\n>>>>>>>497\tstring\t\tx \t\t\t%-.5s\n>>>>>>>>502\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>502\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>>>504 string\t\tx \t\t\t\\b%-.1s\n>>>>>>505\tubyte&0xDF\t>0\t\t\t\n>>>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\tor\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>479 string\t\tx \t\t\t\\b%-.1s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>390\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>412\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>429\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>455 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (German)\n#WINBOOT.SYS only not spaces (0xDF)\n>>>>>>497\tubyte&0xDF\t>0\t\t\t\n>>>>>>>497\tstring\t\tx \t\t\t%-.7s\n>>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>505\tubyte&0xDF\t>0\t\t\t\n>>>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#IO.SYS\n>>>>>>472\tubyte&0xDF\t>0\t\t\tor\n>>>>>>>472\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.6s\n>>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>>389\tstring\tUngueltiges\\ System\\ \\xFF\\r\\n\t\t\n>>>411\tstring\tE/A-Fehler\\ \\ \\ \\ \\xFF\\r\\n\t\t\n>>>>428\tstring\tDatentraeger\\ wechseln\\ und\\ \t\t\n>>>>>454 string\tTaste\\ druecken\\r\t\t\t\\b, Microsoft Windows 95/98/ME Bootloader (GERMAN)\n# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes\n>>>>>>472\tstring\t\tx \t\t\t%-.2s\n>>>>>>>474\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>474\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>479\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>479\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>480\tubyte&0xDF\t>0\t\t\t\n>>>>>>>480\tstring\t\tx \t\t\t\\b.%-.3s\n>>>>>>483\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>483\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>488\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>488\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>>>490\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>490\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>491\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>491\tstring\t\tx \t\t\t\\b.%-.3s\n>479\tubyte&0xDF\t>0\n>>416\tstring\tKein\\ System\\ oder\\ \t\t\t\n>>>433\tstring\tLaufwerksfehler\t\t\t\t\n>>>>450\tstring\tWechseln\\ und\\ Taste\\ dr\\201cken\t\\b, Microsoft DOS Bootloader (german)\n#IO.SYS\n>>>>>479\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>481\tubyte&0xDF\t>0\t\t\t\n>>>>>>>481\tstring\t\tx \t\t\t\\b%-.6s\n>>>>>487\tubyte&0xDF\t>0\t\t\t\n>>>>>>487\tstring\t\tx \t\t\t\\b.%-.3s\n#MSDOS.SYS\n>>>>>>490\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>490\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>495\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>495\tstring\t\tx \t\t\t\\b%-.3s\n>>>>>>>498\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>498\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>376\tsearch/41\tNon-System\\ disk\\ or\\ \t\t\n>>395\tsearch/41\tdisk\\ error\\r\t\t\t\n>>>407\tsearch/41\tReplace\\ and\\ \t\t\t\n>>>>419\tsearch/41\tpress\\ \t\t\t\t\\b,\n>>>>419\tsearch/41\tstrike\\ \t\t\t\\b, old\n>>>>426\tsearch/41\tany\\ key\\ when\\ ready\\r\t\tMS or PC-DOS bootloader\n#449\t\t\tDisk\\ Boot\\ failure\\r\t\tMS 3.21\n#466\t\t\tBoot\\ Failure\\r\t\t\tMS 3.30\n>>>>>468 search/18\t\\0\t\t\t\t\n#IO.SYS,IBMBIO.COM\n>>>>>>&0\tstring\t\tx \t\t\t\\b %-.2s\n>>>>>>>&-20\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.4s\n>>>>>>>>>&-16\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>&8\tubyte&0xDF\t>0\t\t\t\\b.\n>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.3s\n#MSDOS.SYS,IBMDOS.COM\n>>>>>>&11\tubyte&0xDF\t>0\t\t\t\\b+\n>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.5s\n>>>>>>>>&-6\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>>>>&-5\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>>&7\tubyte&0xDF\t>0\t\t\t\\b.\n>>>>>>>>&-1\tstring\t\tx \t\t\t\\b%-.3s\n>441\tstring\tCannot\\ load\\ from\\ harddisk.\\n\\r\n>>469\tstring\tInsert\\ Systemdisk\\ \t\t\t\n>>>487\tstring\tand\\ press\\ any\\ key.\\n\\r\t\t\\b, MS (2.11) DOS bootloader\n#>43\tstring\t\\224R-LOADER\\ \\ SYS\t\t\t=label\t\t\t\t\t\n>54\tstring\tSYS\n>>324\tstring\tVASKK\n>>>495\tstring\tNEWLDR\\0\t\t\t\t\\b, DR-DOS Bootloader (LOADER.SYS)\n#\n>98\tstring\tPress\\ a\\ key\\ to\\ retry\\0\\r\t\t\n>>120\tstring\tCannot\\ find\\ file\\ \\0\\r\t\t\n>>>139\tstring\tDisk\\ read\\ error\\0\\r\t\t\t\n>>>>156\tstring\tLoading\\ ...\\0\t\t\t\t\\b, DR-DOS (3.41) Bootloader\n#DRBIOS.SYS\n>>>>>44\t\tubyte&0xDF\t>0\t\t\t\n>>>>>>44\tstring\t\tx\t\t\t\\b %-.6s\n>>>>>>>50\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>50\tstring\t\tx \t\t\t\\b%-.2s\n>>>>>>52\tubyte&0xDF\t>0\t\t\t\n>>>>>>>52\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>70\tstring\tIBMBIO\\ \\ COM\t\t\t\t\n>>472\tstring\tCannot\\ load\\ DOS!\\ \t\t\t\n>>>489\tstring\tAny\\ key\\ to\\ retry\t\t\t\\b, DR-DOS Bootloader\n>>471\tstring\tCannot\\ load\\ DOS\\ \t\t\t\n>>487\tstring\tpress\\ key\\ to\\ retry\t\t\t\\b, Open-DOS Bootloader\n#??\n>444\tstring\tKERNEL\\ \\ SYS\t\t\t\t\t\n>>314\tstring\tBOOT\\ error!\t\t\t\t\\b, FREE-DOS Bootloader\n>499\tstring\tKERNEL\\ \\ SYS\t\t\t\t\n>>305\tstring\tBOOT\\ err!\\0\t\t\t\t\\b, Free-DOS Bootloader\n>449\tstring\tKERNEL\\ \\ SYS\t\t\t\t\n>>319\tstring\tBOOT\\ error!\t\t\t\t\\b, FREE-DOS 0.5 Bootloader\n#\n>449\tstring\tLoading\\ FreeDOS\t\t\t\n>>0x1AF\t\tulelong\t\t>0\t\t\t\\b, FREE-DOS 0.95,1.0 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n#\n>331\tstring\tError!.0\t\t\t\t\\b, FREE-DOS 1.0 bootloader\n#\n>125\tstring\tLoading\\ FreeDOS...\\r\t\t\t\n>>311\tstring\tBOOT\\ error!\\r\t\t\t\t\\b, FREE-DOS bootloader\n>>>441\t\tubyte&0xDF\t>0\t\t\t\n>>>>441\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>447\tubyte&0xDF\t>0\t\t\t\n>>>>>>447\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>448\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>448\tstring\t\tx \t\t\t\\b%-.1s\n>>>>449\t\tubyte&0xDF\t>0\t\t\t\n>>>>>449\tstring\t\tx \t\t\t\\b.%-.3s\n>124\tstring\tFreeDOS\\0\t\t\t\t\n>>331\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS BETa 0.9 Bootloader\n# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>>333\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS BEta 0.9 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>>334\tstring\t\\ err\\0\t\t\t\t\t\\b, FREE-DOS Beta 0.9 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n>336\tstring\tError!\\ \t\t\t\t\n>>343\tstring\tHit\\ a\\ key\\ to\\ reboot.\t\t\\b, FREE-DOS Beta 0.9sr1 Bootloader\n>>>497\t\tubyte&0xDF\t>0\t\t\t\n>>>>497\t\tstring\t\tx \t\t\t\\b %-.6s\n>>>>>503\tubyte&0xDF\t>0\t\t\t\n>>>>>>503\tstring\t\tx \t\t\t\\b%-.1s\n>>>>>>>504\tubyte&0xDF\t>0\t\t\t\n>>>>>>>>504\tstring\t\tx \t\t\t\\b%-.1s\n>>>>505\t\tubyte&0xDF\t>0\t\t\t\n>>>>>505\tstring\t\tx \t\t\t\\b.%-.3s\n# added by Joerg Jenderek\n# http://www.visopsys.org/\n# http://partitionlogic.org.uk/\n# OEM-ID=Visopsys\n>478\t\tulelong\t0\t\t\t\t\t\n>>(1.b+326)\tstring\tI/O\\ Error\\ reading\\ \t\t\t\n>>>(1.b+344)\tstring\tVisopsys\\ loader\\r\t\t\t\n>>>>(1.b+361)\tstring\tPress\\ any\\ key\\ to\\ continue.\\r\t\\b, Visopsys loader\n# http://alexfru.chat.ru/epm.html#bootprog\n>494\tubyte\t>0x4D\t\t\t\t\t\n>>495\tstring\t>E\t\t\t\t\t\n>>>495\tstring\t<S\t\t\t\t\t\n#OEM-ID is not reliable\n>>>>3\tstring\tBootProg\t\t\t\t\n# It just looks for a program file name at the root directory\n# and loads corresponding file with following execution.\n# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes\n>>>>499\t\t\tubyte&0xDF\t>0\t\t\\b, COM/EXE Bootloader\n>>>>>499\t\tstring\t\tx \t\t\\b %-.1s\n>>>>>>500\t\tubyte&0xDF\t>0\t\t\n>>>>>>>500\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>501\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>501\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>502\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>502\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>503\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>503\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>504\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>504\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>>>505\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>>>505\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>>>>>506\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>>>>>506\tstring\t\tx \t\t\\b%-.1s\n#name extension\n>>>>>507\t\tubyte&0xDF\t>0\t\t\\b.\n>>>>>>507\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>508\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>508\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>509\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>509\t\tstring\t\tx \t\t\\b%-.1s\n#If the boot sector fails to read any other sector,\n#it prints a very short message (\"RE\") to the screen and hangs the computer.\n#If the boot sector fails to find needed program in the root directory,\n#it also hangs with another message (\"NF\").\n>>>>>492\t\tstring\t\tRENF\t\t\\b, FAT (12 bit)\n>>>>>495\t\tstring\t\tRENF\t\t\\b, FAT (16 bit)\n# http://alexfru.chat.ru/epm.html#bootprog\n>494\tubyte\t>0x4D\t\t\t\t\t\n>>495\tstring\t>E\t\t\t\t\t\n>>>495\tstring\t<S\t\t\t\t\t\n#OEM-ID is not reliable\n>>>>3\tstring\tBootProg\t\t\t\t\n# It just looks for a program file name at the root directory\n# and loads corresponding file with following execution.\n# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes\n>>>>499\t\t\tubyte&0xDF\t>0\t\t\\b, COM/EXE Bootloader\n>>>>>499\t\tstring\t\tx \t\t\\b %-.1s\n>>>>>>500\t\tubyte&0xDF\t>0\t\t\n>>>>>>>500\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>501\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>501\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>502\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>502\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>503\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>503\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>504\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>504\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>>>505\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>>>505\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>>>>>>>>>>506\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>>>>>>>>>>506\tstring\t\tx \t\t\\b%-.1s\n#name extension\n>>>>>507\t\tubyte&0xDF\t>0\t\t\\b.\n>>>>>>507\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>508\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>508\t\tstring\t\tx \t\t\\b%-.1s\n>>>>>>>>>509\t\tubyte&0xDF\t>0\t\t\n>>>>>>>>>>509\t\tstring\t\tx \t\t\\b%-.1s\n#If the boot sector fails to read any other sector,\n#it prints a very short message (\"RE\") to the screen and hangs the computer.\n#If the boot sector fails to find needed program in the root directory,\n#it also hangs with another message (\"NF\").\n>>>>>492\t\tstring\t\tRENF\t\t\\b, FAT (12 bit)\n>>>>>495\t\tstring\t\tRENF\t\t\\b, FAT (16 bit)\n# x86 bootloader end\n# updated by Joerg Jenderek at Sep 2007\n>3\tubyte\t0\t\t\t\n#no active flag\n>>446\tubyte\t0\t\t\t\n# partition 1 not empty\n>>>450\tubyte\t>0\t\t\t\n# partitions 3,4 empty\n>>>>482\t\tubyte\t0\t\t\t\n>>>>>498\tubyte\t0\t\t\t\n# partition 2 ID=0,5,15\n>>>>>>466\tubyte\t<0x10\t\t\t\n>>>>>>>466\tubyte\t0x05\t\t\t\\b, extended partition table\n>>>>>>>466\tubyte\t0x0F\t\t\t\\b, extended partition table (LBA)\n>>>>>>>466\tubyte\t0x0\t\t\t\\b, extended partition table (last)\t\n# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90\n# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD\n# older drives may use Near JuMP instruction E9 xx xx\n>0\t\tlelong&0x009000EB\t0x009000EB \n>0\t\tlelong&0x000000E9\t0x000000E9 \n# minimal short forward jump found 03cx??\n# maximal short forward jump is 07fx\n>1\t\tubyte\t\t\t<0xff\t\\b, code offset 0x%x\n# mtools-3.9.8/msdos.h\n# usual values are marked with comments to get only informations of strange FAT systems\n# valid sectorsize must be a power of 2 from 32 to 32768\n>>11\t\tuleshort&0x000f\tx\t\t\n>>>11\t\tuleshort\t<32769\t\t\n>>>>11\t\tuleshort\t>31\t\t\n>>>>>21\t\tubyte&0xf0\t0xF0\t\t\n>>>>>>3\t\tstring\t\t>\\0\t\t\\b, OEM-ID \"%8.8s\"\n#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC\n>>>>>>>8\tstring\t\tIHC\t\t\\b cached by Windows 9M\n>>>>>>11\tuleshort\t>512\t\t\\b, Bytes/sector %u\n#>>>>>>11\tuleshort\t=512\t\t\\b, Bytes/sector %u=512 (usual)\n>>>>>>11\tuleshort\t<512\t\t\\b, Bytes/sector %u\n>>>>>>13\tubyte\t\t>1\t\t\\b, sectors/cluster %u\n#>>>>>>13\tubyte\t\t=1\t\t\\b, sectors/cluster %u (usual on Floppies)\n>>>>>>14\tuleshort\t>32\t\t\\b, reserved sectors %u\n#>>>>>>14\tuleshort\t=32\t\t\\b, reserved sectors %u (usual Fat32)\n#>>>>>>14\tuleshort\t>1\t\t\\b, reserved sectors %u\n#>>>>>>14\tuleshort\t=1\t\t\\b, reserved sectors %u (usual FAT12,FAT16)\n>>>>>>14\tuleshort\t<1\t\t\\b, reserved sectors %u\n>>>>>>16\tubyte\t\t>2\t\t\\b, FATs %u\n#>>>>>>16\tubyte\t\t=2\t\t\\b, FATs %u (usual)\n>>>>>>16\tubyte\t\t=1\t\t\\b, FAT  %u\n>>>>>>16\tubyte\t\t>0\n>>>>>>17\tuleshort\t>0\t\t\\b, root entries %u\n#>>>>>>17\tuleshort\t=0\t\t\\b, root entries %u=0 (usual Fat32)\n>>>>>>19\tuleshort\t>0\t\t\\b, sectors %u (volumes <=32 MB) \n#>>>>>>19\tuleshort\t=0\t\t\\b, sectors %u=0 (usual Fat32)\n>>>>>>21\tubyte\t\t>0xF0\t\t\\b, Media descriptor 0x%x\n#>>>>>>21\tubyte\t\t=0xF0\t\t\\b, Media descriptor 0x%x (usual floppy)\n>>>>>>21\tubyte\t\t<0xF0\t\t\\b, Media descriptor 0x%x\n>>>>>>22\tuleshort\t>0\t\t\\b, sectors/FAT %u\n#>>>>>>22\tuleshort\t=0\t\t\\b, sectors/FAT %u=0 (usual Fat32)\n>>>>>>26\tubyte\t\t>2\t\t\\b, heads %u\n#>>>>>>26\tubyte\t\t=2\t\t\\b, heads %u (usual floppy)\n>>>>>>26\tubyte\t\t=1\t\t\\b, heads %u\n#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk\n>>>>>>38\tubyte\t\t!0x70\t\t\n>>>>>>>28\tulelong\t\t>0\t\t\\b, hidden sectors %u\n#>>>>>>>28\tulelong\t\t=0\t\t\\b, hidden sectors %u (usual floppy)\n>>>>>>>32\tulelong\t\t>0\t\t\\b, sectors %u (volumes > 32 MB) \n#>>>>>>>32\tulelong\t\t=0\t\t\\b, sectors %u (volumes > 32 MB)\n# FAT<32 specific \n>>>>>>82\tstring\t\t!FAT32\n#>>>>>>>36\tubyte\t\t0x80\t\t\\b, physical drive 0x%x=0x80 (usual harddisk)\n#>>>>>>>36\tubyte\t\t0\t\t\\b, physical drive 0x%x=0 (usual floppy)\n>>>>>>>36\tubyte\t\t!0x80\t\t\n>>>>>>>>36\tubyte\t\t!0\t\t\\b, physical drive 0x%x\n>>>>>>>37\tubyte\t\t>0\t\t\\b, reserved 0x%x\n#>>>>>>>37\tubyte\t\t=0\t\t\\b, reserved 0x%x\n>>>>>>>38\tubyte\t\t>0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>38\tubyte\t\t<0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>38\tubyte\t\t=0x29\n>>>>>>>>39\tulelong\t\tx\t\t\\b, serial number 0x%x\n>>>>>>>>43\tstring\t\t<NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>>43\tstring\t\t>NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>>43\tstring\t\t=NO\\ NAME\t\\b, unlabeled\n>>>>>>>54\tstring\t\tFAT\t\t\\b, FAT\n>>>>>>>>54\tstring\t\tFAT12\t\t\\b (12 bit)\n>>>>>>>>54\tstring\t\tFAT16\t\t\\b (16 bit)\n# FAT32 specific\n>>>>>>82\tstring\t\tFAT32\t\t\\b, FAT (32 bit)\n>>>>>>>36\tulelong\t\tx\t\t\\b, sectors/FAT %u\n>>>>>>>40\tuleshort\t>0\t\t\\b, extension flags %u\n#>>>>>>>40\tuleshort\t=0\t\t\\b, extension flags %u\n>>>>>>>42\tuleshort\t>0\t\t\\b, fsVersion %u\n#>>>>>>>42\tuleshort\t=0\t\t\\b, fsVersion %u (usual)\n>>>>>>>44\tulelong\t\t>2\t\t\\b, rootdir cluster %u\n#>>>>>>>44\tulelong\t\t=2\t\t\\b, rootdir cluster %u\n#>>>>>>>44\tulelong\t\t=1\t\t\\b, rootdir cluster %u\n>>>>>>>48\tuleshort\t>1\t\t\\b, infoSector %u\n#>>>>>>>48\tuleshort\t=1\t\t\\b, infoSector %u (usual)\n>>>>>>>48\tuleshort\t<1\t\t\\b, infoSector %u\n>>>>>>>50\tuleshort\t>6\t\t\\b, Backup boot sector %u\n#>>>>>>>50\tuleshort\t=6\t\t\\b, Backup boot sector %u (usual) \n>>>>>>>50\tuleshort\t<6\t\t\\b, Backup boot sector %u\n>>>>>>>54\tulelong\t\t>0\t\t\\b, reserved1 0x%x\n>>>>>>>58\tulelong\t\t>0\t\t\\b, reserved2 0x%x\n>>>>>>>62\tulelong\t\t>0\t\t\\b, reserved3 0x%x\n# same structure as FAT1X \n>>>>>>>64\tubyte\t\t>0x80\t\t\\b, physical drive 0x%x\n#>>>>>>>64\tubyte\t\t=0x80\t\t\\b, physical drive 0x%x=80 (usual harddisk)\n>>>>>>>64\tubyte&0x7F\t>0\t\t\\b, physical drive 0x%x\n#>>>>>>>64\tubyte\t\t=0\t\t\\b, physical drive 0x%x=0 (usual floppy)\n>>>>>>>65\tubyte\t\t>0\t\t\\b, reserved 0x%x\n>>>>>>>66\tubyte\t\t>0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>66\tubyte\t\t<0x29\t\t\\b, dos < 4.0 BootSector (0x%x)\n>>>>>>>66\tubyte\t\t=0x29\n>>>>>>>>67\tulelong\t\tx\t\t\\b, serial number 0x%x\n>>>>>>>>71\tstring\t\t<NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>71\tstring\t\t>NO\\ NAME\t\\b, label: \"%11.11s\"\n>>>>>>>71\tstring\t\t=NO\\ NAME\t\\b, unlabeled\n### FATs end\n>0x200\tlelong\t0x82564557\t\t\\b, BSD disklabel\n# FATX \n0\t\tstring\t\tFATX\t\tFATX filesystem data\n\n\n# Minix filesystems - Juan Cespedes <cespedes@debian.org>\n0x410\tleshort\t\t0x137f\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V1, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x137f\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V1 (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x138f\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V1, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x138f\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V1, 30 char names (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x2468\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V2, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x2468\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V2 (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n\n0x410\tleshort\t\t0x2478\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V2, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x2478\n>0x402\tbeshort\t\t< 100\t\tMinix filesystem, V2, 30 char names, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tbeshort\t\t0x2478\n>0x402\tbeshort\t\t!0\t\tMinix filesystem, V2, 30 char names (big endian), %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n0x410\tleshort\t\t0x4d5a\n>0x402\tbeshort\t\t!0\t\tMinix filesystem, V3, %d zones\n>0x1e\tstring\t\tminix\t\t\\b, bootable\n\n# romfs filesystems - Juan Cespedes <cespedes@debian.org>\n0\tstring\t\t-rom1fs-\tromfs filesystem, version 1\n>8\tbelong\tx\t\t\t%d bytes,\n>16\tstring\tx\t\t\tnamed %s.\n\n# netboot image - Juan Cespedes <cespedes@debian.org>\n0\tlelong\t\t0x1b031336L\tNetboot image,\n>4\tlelong&0xFFFFFF00\t0\n>>4\tlelong&0x100\t0x000\t\tmode 2\n>>4\tlelong&0x100\t0x100\t\tmode 3\n>4\tlelong&0xFFFFFF00\t!0\tunknown mode\n\n0x18b\tstring\tOS/2\tOS/2 Boot Manager\n\n# updated by Joerg Jenderek at Oct 2008!!\n# http://syslinux.zytor.com/iso.php\n0\tulelong\t0x7c40eafa\t\tisolinux Loader\n# http://syslinux.zytor.com/pxe.php\n0\tulelong\t0x007c05ea\t\tpxelinux Loader\n0\tulelong\t0x60669c66\t\tpxelinux Loader\n\n# added by Joerg Jenderek\n# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or\n# grub-1.94/kern/i386/pc/startup.S\n# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data\n# usual values are marked with comments to get only informations of strange GRUB loaders\n0x200\tuleshort\t\t0x70EA\t\t\n# found only version 3.{1,2}\n>0x206\t\tubeshort\t>0x0300\t\t\n# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > \"00\"\n>>0x212 \tubyte\t\t>0x29\t\t\n>>>0x213 \tubyte\t\t>0x29\t\t\n# not iso9660_stage1_5\n#>>>0\tulelong&0x00BE5652\t0x00BE5652\t\n>>>>0x213 \tubyte\t\t>0x29\t\tGRand Unified Bootloader\n# config_file for stage1_5 is 0xffffffff + default \"/boot/grub/stage2\"\n>>>>0x217 \tubyte\t\t0xFF\t\tstage1_5\n>>>>0x217 \tubyte\t\t<0xFF\t\tstage2\n>>>>0x206\tubyte\t\tx\t\t\\b version %u\n>>>>0x207\tubyte\t\tx\t\t\\b.%u\n# module_size for 1.94\n>>>>0x208\tulelong\t\t<0xffffff\t\\b, installed partition %u\n#>>>>0x208\tulelong\t\t=0xffffff\t\\b, %u (default)\n>>>>0x208\tulelong\t\t>0xffffff\t\\b, installed partition %u\n# GRUB 0.5.95 unofficial\n>>>>0x20C\tulelong&0x2E300000 0x2E300000\t\n# 0=stage2\t1=ffs\t2=e2fs\t3=fat\t4=minix\t5=reiserfs\n>>>>>0x20C\tubyte\t\tx\t\t\\b, identifier 0x%x\n#>>>>>0x20D\tubyte\t\t=0\t\t\\b, LBA flag 0x%x (default)\n>>>>>0x20D\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n# GRUB version as string\n>>>>>0x20E \tstring\t\t>\\0\t\t\\b, GRUB version %-s\n# for stage1_5 is 0xffffffff + config_file \"/boot/grub/stage2\" default\n>>>>>>0x215 \tulong\t\t0xffffffff\t\n>>>>>>>0x219 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n>>>>>>0x215 \tulong\t\t!0xffffffff\t\n>>>>>>>0x215 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n# newer GRUB versions\n>>>>0x20C\tulelong&0x2E300000 !0x2E300000\t\n##>>>>>0x20C\tulelong\t\t=0\t\t\\b, saved entry %d (usual)\n>>>>>0x20C\tulelong\t\t>0\t\t\\b, saved entry %d\n# for 1.94 contains kernel image size\n# for 0.93,0.94,0.96,0.97\n# 0=stage2\t1=ffs\t2=e2fs\t3=fat\t4=minix\t5=reiserfs\t6=vstafs\t7=jfs\t8=xfs\t9=iso9660\ta=ufs2\t\n>>>>>0x210\tubyte\t\tx\t\t\\b, identifier 0x%x\n# The flag for LBA forcing is in most cases 0\n#>>>>>0x211\tubyte\t\t=0\t\t\\b, LBA flag 0x%x (default)\n>>>>>0x211\tubyte\t\t>0\t\t\\b, LBA flag 0x%x\n# GRUB version as string\n>>>>>0x212 \tstring\t\t>\\0\t\t\\b, GRUB version %-s\n# for stage1_5 is 0xffffffff + config_file \"/boot/grub/stage2\" default\n>>>>>0x217 \tulong\t\t0xffffffff\t\n>>>>>>0x21b \tstring\t\t>\\0\t\t\\b, configuration file %-s\n>>>>>0x217 \tulong\t\t!0xffffffff\t\n>>>>>>0x217 \tstring\t\t>\\0\t\t\\b, configuration file %-s\n\n9564\tlelong\t\t0x00011954\tUnix Fast File system [v1] (little-endian),\n>8404\tstring\t\tx\t\tlast mounted on %s,\n#>9504\tledate\t\tx\t\tlast checked at %s,\n>8224\tledate\t\tx\t\tlast written at %s,\n>8401\tbyte\t\tx\t\tclean flag %d,\n>8228\tlelong\t\tx\t\tnumber of blocks %d,\n>8232\tlelong\t\tx\t\tnumber of data blocks %d,\n>8236\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>8240\tlelong\t\tx\t\tblock size %d,\n>8244\tlelong\t\tx\t\tfragment size %d,\n>8252\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>8256\tlelong\t\tx\t\trotational delay %dms,\n>8260\tlelong\t\tx\t\tdisk rotational speed %drps,\n>8320\tlelong\t\t0\t\tTIME optimization\n>8320\tlelong\t\t1\t\tSPACE optimization\n\n42332\tlelong\t\t0x19540119\tUnix Fast File system [v2] (little-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tleqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tlequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tlequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tlelong\t\tx\t\tblock size %d,\n>&-1324\tlelong\t\tx\t\tfragment size %d,\n>&-180\tlelong\t\tx\t\taverage file size %d,\n>&-176\tlelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tlequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tlelong\t\tx\t\tpending inodes to free %ld,\n>&-664\tlequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tlelong\t\t0\t\tTIME optimization\n>&-1248\tlelong\t\t1\t\tSPACE optimization\n\n66908\tlelong\t\t0x19540119\tUnix Fast File system [v2] (little-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tleqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tlequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tlequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tlelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tlelong\t\tx\t\tblock size %d,\n>&-1324\tlelong\t\tx\t\tfragment size %d,\n>&-180\tlelong\t\tx\t\taverage file size %d,\n>&-176\tlelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tlequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tlelong\t\tx\t\tpending inodes to free %ld,\n>&-664\tlequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tlelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tlelong\t\t0\t\tTIME optimization\n>&-1248\tlelong\t\t1\t\tSPACE optimization\n\n9564\tbelong\t\t0x00011954\tUnix Fast File system [v1] (big-endian),\n>7168   belong\t\t0x4c41424c\tApple UFS Volume\n>>7186  string\t\tx\t\tnamed %s,\n>>7176  belong\t\tx\t\tvolume label version %d,\n>>7180  bedate\t\tx\t\tcreated on %s,\n>8404\tstring\t\tx\t\tlast mounted on %s,\n#>9504\tbedate\t\tx\t\tlast checked at %s,\n>8224\tbedate\t\tx\t\tlast written at %s,\n>8401\tbyte\t\tx\t\tclean flag %d,\n>8228\tbelong\t\tx\t\tnumber of blocks %d,\n>8232\tbelong\t\tx\t\tnumber of data blocks %d,\n>8236\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>8240\tbelong\t\tx\t\tblock size %d,\n>8244\tbelong\t\tx\t\tfragment size %d,\n>8252\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>8256\tbelong\t\tx\t\trotational delay %dms,\n>8260\tbelong\t\tx\t\tdisk rotational speed %drps,\n>8320\tbelong\t\t0\t\tTIME optimization\n>8320\tbelong\t\t1\t\tSPACE optimization\n\n42332\tbelong\t\t0x19540119\tUnix Fast File system [v2] (big-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tbeqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tbequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tbequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tbelong\t\tx\t\tblock size %d,\n>&-1324\tbelong\t\tx\t\tfragment size %d,\n>&-180\tbelong\t\tx\t\taverage file size %d,\n>&-176\tbelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tbequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tbelong\t\tx\t\tpending inodes to free %ld,\n>&-664\tbequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tbelong\t\t0\t\tTIME optimization\n>&-1248\tbelong\t\t1\t\tSPACE optimization\n\n66908\tbelong\t\t0x19540119\tUnix Fast File system [v2] (big-endian)\n>&-1164\tstring\t\tx\t\tlast mounted on %s,\n>&-696\tstring\t\t>\\0\t\tvolume name %s,\n>&-304\tbeqldate\tx\t\tlast written at %s,\n>&-1167\tbyte\t\tx\t\tclean flag %d,\n>&-1168\tbyte\t\tx\t\treadonly flag %d,\n>&-296\tbequad\t\tx\t\tnumber of blocks %lld,\n>&-288\tbequad\t\tx\t\tnumber of data blocks %lld,\n>&-1332\tbelong\t\tx\t\tnumber of cylinder groups %d,\n>&-1328\tbelong\t\tx\t\tblock size %d,\n>&-1324\tbelong\t\tx\t\tfragment size %d,\n>&-180\tbelong\t\tx\t\taverage file size %d,\n>&-176\tbelong\t\tx\t\taverage number of files in dir %d,\n>&-272\tbequad\t\tx\t\tpending blocks to free %lld,\n>&-264\tbelong\t\tx\t\tpending inodes to free %ld,\n>&-664\tbequad\t\tx\t\tsystem-wide uuid %0llx,\n>&-1316\tbelong\t\tx\t\tminimum percentage of free blocks %d,\n>&-1248\tbelong\t\t0\t\tTIME optimization\n>&-1248\tbelong\t\t1\t\tSPACE optimization\n\n# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>\n# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>\n# volume label and UUID Russell Coker\n# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/\n0x438   leshort         0xEF53          Linux\n>0x44c  lelong          x               rev %d\n>0x43e  leshort         x               \\b.%d\n# No journal?  ext2\n>0x45c  lelong          ^0x0000004      ext2 filesystem data\n>>0x43a leshort         ^0x0000001      (mounted or unclean)\n# Has a journal?  ext3 or ext4\n>0x45c  lelong          &0x0000004\n#  and small INCOMPAT?\n>>0x460 lelong          <0x0000040\n#   and small RO_COMPAT?\n>>>0x464 lelong         <0x0000008      ext3 filesystem data\n#   else large RO_COMPAT?\n>>>0x464 lelong         >0x0000007      ext4 filesystem data\n#  else large INCOMPAT?\n>>0x460\tlelong          >0x000003f      ext4 filesystem data\n>0x468\tbelong\t\tx\t\t\\b, UUID=%08x\n>0x46c\tbeshort\t\tx\t\t\\b-%04x\n>0x46e\tbeshort\t\tx\t\t\\b-%04x\n>0x470\tbeshort\t\tx\t\t\\b-%04x\n>0x472\tbelong\t\tx\t\t\\b-%08x\n>0x476\tbeshort\t\tx\t\t\\b%04x\n>0x478\tstring\t\t>0\t\t\\b, volume name \"%s\"\n# General flags for any ext* fs\n>0x460\tlelong          &0x0000004      (needs journal recovery)\n>0x43a\tleshort         &0x0000002      (errors)\n# INCOMPAT flags\n>0x460\tlelong          &0x0000001      (compressed)\n#>0x460\tlelong          &0x0000002      (filetype)\n#>0x460\tlelong          &0x0000010      (meta bg)\n>0x460\tlelong          &0x0000040      (extents)\n>0x460\tlelong          &0x0000080      (64bit)\n#>0x460\tlelong          &0x0000100      (mmp)\n#>0x460\tlelong          &0x0000200      (flex bg)\n# RO_INCOMPAT flags\n#>0x464\tlelong          &0x0000001      (sparse super)\n>0x464\tlelong          &0x0000002      (large files)\n>0x464\tlelong          &0x0000008      (huge files)\n#>0x464\tlelong          &0x0000010      (gdt checksum)\n#>0x464\tlelong          &0x0000020      (many subdirs)\n#>0x463\tlelong          &0x0000040      (extra isize)\n\n# SGI disk labels - Nathan Scott <nathans@debian.org>\n0\tbelong\t\t0x0BE5A941\tSGI disk label (volume header)\n\n# SGI XFS filesystem - Nathan Scott <nathans@debian.org>\n0\tbelong\t\t0x58465342\tSGI XFS filesystem data\n>0x4\tbelong\t\tx\t\t(blksz %d,\n>0x68\tbeshort\t\tx\t\tinosz %d,\n>0x64\tbeshort\t\t^0x2004\t\tv1 dirs)\n>0x64\tbeshort\t\t&0x2004\t\tv2 dirs)\n\n############################################################################\n# Minix-ST kernel floppy\n0x800\tbelong\t\t0x46fc2700\tAtari-ST Minix kernel image\n>19\tstring\t\t\\240\\5\\371\\5\\0\\011\\0\\2\\0\t\\b, 720k floppy\n>19\tstring\t\t\\320\\2\\370\\5\\0\\011\\0\\1\\0\t\\b, 360k floppy\n\n############################################################################\n# Hmmm, is this a better way of detecting _standard_ floppy images ?\n19\tstring\t\t\\320\\2\\360\\3\\0\\011\\0\\1\\0\tDOS floppy 360k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, x86 hard disk boot sector\n19\tstring\t\t\\240\\5\\371\\3\\0\\011\\0\\2\\0\tDOS floppy 720k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, x86 hard disk boot sector\n19\tstring\t\t\\100\\013\\360\\011\\0\\022\\0\\2\\0\tDOS floppy 1440k\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, x86 hard disk boot sector\n\n19\tstring\t\t\\240\\5\\371\\5\\0\\011\\0\\2\\0\tDOS floppy 720k, IBM\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, x86 hard disk boot sector\n19\tstring\t\t\\100\\013\\371\\5\\0\\011\\0\\2\\0\tDOS floppy 1440k, mkdosfs\n>0x1FE\tleshort\t\t0xAA55\t\t\\b, x86 hard disk boot sector\n\n19\tstring\t\t\\320\\2\\370\\5\\0\\011\\0\\1\\0\tAtari-ST floppy 360k\n19\tstring\t\t\\240\\5\\371\\5\\0\\011\\0\\2\\0\tAtari-ST floppy 720k\n\n#  Valid media descriptor bytes for MS-DOS:\n#\n#     Byte   Capacity   Media Size and Type\n#     -------------------------------------------------\n#\n#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector\n#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector\n#     F9     720K       3.5-inch, 2-sided, 9-sector\n#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector\n#     FD     360K       5.25-inch, 2-sided, 9-sector\n#     FF     320K       5.25-inch, 2-sided, 8-sector\n#     FC     180K       5.25-inch, 1-sided, 9-sector\n#     FE     160K       5.25-inch, 1-sided, 8-sector\n#     FE     250K       8-inch, 1-sided, single-density\n#     FD     500K       8-inch, 2-sided, single-density\n#     FE     1.2 MB     8-inch, 2-sided, double-density\n#     F8     -----      Fixed disk \n#\n#     FC     xxxK       Apricot 70x1x9 boot disk.\n#\n# Originally a bitmap:\n#  xxxxxxx0\tNot two sided\n#  xxxxxxx1\tDouble sided\n#  xxxxxx0x\tNot 8 SPT\n#  xxxxxx1x\t8 SPT\n#  xxxxx0xx\tNot Removable drive\n#  xxxxx1xx\tRemovable drive\n#  11111xxx\tMust be one.\n#\n# But now it's rather random:\n#  111111xx\tLow density disk\n#        00\tSS, Not 8 SPT\n#        01\tDS, Not 8 SPT\n#        10\tSS, 8 SPT\n#        11\tDS, 8 SPT\n#\n#  11111001\tDouble density 3½ floppy disk, high density 5¼\n#  11110000\tHigh density 3½ floppy disk\n#  11111000\tHard disk any format\n#\n\n# CDROM Filesystems\n# Modified for UDF by gerardo.cacciari@gmail.com\n32769\tstring    CD001\n!:mime\tapplication/x-iso9660-image\n>38913\tstring   !NSR0      ISO 9660 CD-ROM filesystem data\n>38913\tstring    NSR0      UDF filesystem data\n>>38917\tstring    1         (version 1.0)\n>>38917\tstring    2         (version 1.5)\n>>38917\tstring    3         (version 2.0)\n>>38917\tbyte     >0x33      (unknown version, ID 0x%X)\n>>38917\tbyte     <0x31      (unknown version, ID 0x%X)\n# \"application id\" which appears to be used as a volume label\n>32808\tstring    >\\0       '%s'\n>34816\tstring    \\000CD001\\001EL\\ TORITO\\ SPECIFICATION    (bootable)\n37633\tstring    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)\n!:mime\tapplication/x-iso9660-image\n32776\tstring    CDROM     High Sierra CD-ROM filesystem data\n\n# .cso files\n0    string    CISO\tCompressed ISO CD image\n\n# cramfs filesystem - russell@coker.com.au\n0       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian\n>4      lelong  x size %lu\n>8      lelong  &1 version #2\n>8      lelong  &2 sorted_dirs\n>8      lelong  &4 hole_support\n>32     lelong  x CRC 0x%x,\n>36     lelong  x edition %lu,\n>40     lelong  x %lu blocks,\n>44     lelong  x %lu files\n\n0       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian\n>4      belong  x size %lu\n>8      belong  &1 version #2\n>8      belong  &2 sorted_dirs\n>8      belong  &4 hole_support\n>32     belong  x CRC 0x%x,\n>36     belong  x edition %lu,\n>40     belong  x %lu blocks,\n>44     belong  x %lu files\n\n# reiserfs - russell@coker.com.au\n0x10034\t\tstring\tReIsErFs\tReiserFS V3.5\n0x10034\t\tstring\tReIsEr2Fs\tReiserFS V3.6\n0x10034\t\tstring\tReIsEr3Fs\tReiserFS V3.6.19\n>0x1002c \tleshort\tx\t\tblock size %d\n>0x10032\tleshort\t&2\t\t(mounted or unclean)\n>0x10000\tlelong\tx\t\tnum blocks %d\n>0x10040\tlelong\t1\t\ttea hash\n>0x10040\tlelong\t2\t\tyura hash\n>0x10040\tlelong\t3\t\tr5 hash\n\n# JFFS - russell@coker.com.au\n0\tlelong\t0x34383931\tLinux Journalled Flash File system, little endian\n0\tbelong\t0x34383931\tLinux Journalled Flash File system, big endian\n\n# EST flat binary format (which isn't, but anyway)\n# From: Mark Brown <broonie@sirena.org.uk>\n0\tstring\tESTFBINR\tEST flat binary\n\n# Aculab VoIP firmware\n# From: Mark Brown <broonie@sirena.org.uk>\n0\tstring\tVoIP\\ Startup\\ and\tAculab VoIP firmware\n>35\tstring\tx\tformat %s\n\n# From: Mark Brown <broonie@sirena.org.uk> [old]\n# From: Behan Webster <behanw@websterwood.com>\n0\tbelong\t0x27051956\tu-boot legacy uImage,\n>32\tstring\tx\t\t%s,\n>28\tbyte\t0\t\tInvalid os/\n>28\tbyte\t1\t\tOpenBSD/\n>28\tbyte\t2\t\tNetBSD/\n>28\tbyte\t3\t\tFreeBSD/\n>28\tbyte\t4\t\t4.4BSD/\n>28\tbyte\t5\t\tLinux/\n>28\tbyte\t6\t\tSVR4/\n>28\tbyte\t7\t\tEsix/\n>28\tbyte\t8\t\tSolaris/\n>28\tbyte\t9\t\tIrix/\n>28\tbyte\t10\t\tSCO/\n>28\tbyte\t11\t\tDell/\n>28\tbyte\t12\t\tNCR/\n>28\tbyte\t13\t\tLynxOS/\n>28\tbyte\t14\t\tVxWorks/\n>28\tbyte\t15\t\tpSOS/\n>28\tbyte\t16\t\tQNX/\n>28\tbyte\t17\t\tFirmware/\n>28\tbyte\t18\t\tRTEMS/\n>28\tbyte\t19\t\tARTOS/\n>28\tbyte\t20\t\tUnity OS/\n>28\tbyte\t21\t\tINTEGRITY/\n>29\tbyte\t0\t\t\\bInvalid CPU,\n>29\tbyte\t1\t\t\\bAlpha,\n>29\tbyte\t2\t\t\\bARM,\n>29\tbyte\t3\t\t\\bIntel x86,\n>29\tbyte\t4\t\t\\bIA64,\n>29\tbyte\t5\t\t\\bMIPS,\n>29\tbyte\t6\t\t\\bMIPS 64-bit,\n>29\tbyte\t7\t\t\\bPowerPC,\n>29\tbyte\t8\t\t\\bIBM S390,\n>29\tbyte\t9\t\t\\bSuperH,\n>29\tbyte\t10\t\t\\bSparc,\n>29\tbyte\t11\t\t\\bSparc 64-bit,\n>29\tbyte\t12\t\t\\bM68K,\n>29\tbyte\t13\t\t\\bNios-32,\n>29\tbyte\t14\t\t\\bMicroBlaze,\n>29\tbyte\t15\t\t\\bNios-II,\n>29\tbyte\t16\t\t\\bBlackfin,\n>29\tbyte\t17\t\t\\bAVR32,\n>29\tbyte\t18\t\t\\bSTMicroelectronics ST200,\n>30\tbyte\t0\t\tInvalid Image\n>30\tbyte\t1\t\tStandalone Program\n>30\tbyte\t2\t\tOS Kernel Image\n>30\tbyte\t3\t\tRAMDisk Image\n>30\tbyte\t4\t\tMulti-File Image\n>30\tbyte\t5\t\tFirmware Image\n>30\tbyte\t6\t\tScript File\n>30\tbyte\t7\t\tFilesystem Image (any type)\n>30\tbyte\t8\t\tBinary Flat Device Tree BLOB\n>31\tbyte\t0\t\t(Not compressed),\n>31\tbyte\t1\t\t(gzip),\n>31\tbyte\t2\t\t(bzip2),\n>31\tbyte\t3\t\t(lzma),\n>12\tbelong\tx\t\t%d bytes,\n>8\tbedate\tx\t\t%s,\n>16\tbelong\tx\t\tLoad Address: 0x%08X,\n>20\tbelong\tx\t\tEntry Point: 0x%08X,\n>4\tbelong\tx\t\tHeader CRC: 0x%08X,\n>24\tbelong\tx\t\tData CRC: 0x%08X\n\n# JFFS2 file system\n0\tleshort\t0x1984\t\tLinux old jffs2 filesystem data little endian\n0\tleshort\t0x1985\t\tLinux jffs2 filesystem data little endian\n\n# Squashfs\n0\tstring\tsqsh\tSquashfs filesystem, big endian,\n>28\tbeshort\tx\tversion %d.\n>30\tbeshort x\t\\b%d,\n>28\tbeshort <3\n>>8\tbelong\tx\t%d bytes,\n>28\tbeshort >2\n>>63\tbequad x\t%lld bytes,\n#>>67\tbelong\tx\t%d bytes,\n>4\tbelong\tx\t%d inodes,\n>28\tbeshort <2\n>>32\tbeshort\tx\tblocksize: %d bytes,\n>28\tbeshort >1\n>>51\tbelong\tx\tblocksize: %d bytes,\n>39\tbedate\tx\tcreated: %s\n0\tstring\thsqs\tSquashfs filesystem, little endian,\n>28\tleshort\tx\tversion %d.\n>30\tleshort\tx\t\\b%d,\n>28\tleshort <3\n>>8\tlelong\tx\t%d bytes,\n>28\tleshort >2\n>>63\tlequad x\t%lld bytes,\n#>>63\tlelong\tx\t%d bytes,\n>4\tlelong\tx\t%d inodes,\n>28\tleshort <2\n>>32\tleshort\tx\tblocksize: %d bytes,\n>28\tleshort >1\n>>51\tlelong\tx\tblocksize: %d bytes,\n>39\tledate\tx\tcreated: %s\n\n0\tstring\t\ttd\\000\t\tfloppy image data (TeleDisk)\n\n# AFS Dump Magic\n# From: Ty Sarna <tsarna@sarna.org> \n0       string                  \\x01\\xb3\\xa1\\x13\\x22    AFS Dump\n>&0     belong                  x                       (v%d)\n>>&0    byte                    0x76\n>>>&0   belong                  x                       Vol %d,\n>>>>&0  byte                    0x6e\n>>>>>&0 string                  x                       %s\n>>>>>>&1        byte            0x74\n>>>>>>>&0       beshort         2\n>>>>>>>>&4      bedate          x                       on: %s\n>>>>>>>>&0      bedate          =0                      full dump\n>>>>>>>>&0      bedate          !0                      incremental since: %s\n\n#----------------------------------------------------------\n#delta ISO    Daniel Novotny (dnovotny@redhat.com)\n0\tstring  DISO\tDelta ISO data\n>4\tbelong  x\tversion %d\n\n# VMS backup savesets - gerardo.cacciari@gmail.com\n#\n4            string  \\x01\\x00\\x01\\x00\\x01\\x00\n>(0.s+16)    string  \\x01\\x01\n>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data\n>>>40        lelong  x          (block size %d,\n>>>49        string  >\\0        original name '%s',\n>>>2         short   1024       VAX generated)\n>>>2         short   2048       AXP generated)\n>>>2         short   4096       I64 generated)\n\n# Summary: Oracle Clustered Filesystem\n# Created by: Aaron Botsis <redhat@digitalmafia.org>\n8\tstring\t\tOracleCFS\tOracle Clustered Filesystem,\n>4\tlong\t\tx\t\trev %d\n>0\tlong\t\tx\t\t\\b.%d,\n>560\tstring\t\tx\t\tlabel: %.64s,\n>136\tstring\t\tx\t\tmountpoint: %.128s\n\n# Summary: Oracle ASM tagged volume\n# Created by: Aaron Botsis <redhat@digitalmafia.org>\n32\tstring\t\tORCLDISK\tOracle ASM Volume,\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n32\tstring\t\tORCLCLRD\tOracle ASM Volume (cleared),\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n\n# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org>\n8\tstring\t\tOracleCFS\tOracle Clustered Filesystem,\n>4\tlong\t\tx\t\trev %d\n>0\tlong\t\tx\t\t\\b.%d,\n>560\tstring\t\tx\t\tlabel: %.64s,\n>136\tstring\t\tx\t\tmountpoint: %.128s\n\n# Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org>\n32\tstring\t\tORCLDISK\tOracle ASM Volume,\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n32\tstring\t\tORCLCLRD\tOracle ASM Volume (cleared),\n>40\tstring\t\tx\t\tDisk Name: %0.12s\n\n# Compaq/HP RILOE floppy image\n# From: Dirk Jagdmann <doj@cubic.org>\n0\tstring\tCPQRFBLO\tCompaq/HP RILOE floppy image\n\n#------------------------------------------------------------------------------\n# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com\n# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is\n# mapped to VBN 2 of [000000]INDEXF.SYS;1\n#\n1008    string          DECFILE11B      Files-11 On-Disk Structure\n>525    byte            x               Level %d\n>525    byte            x               (ODS-%d OpenVMS file system),\n>984    string          x               volume label is '%-12.12s'\n\n# From: Thomas Klausner <wiz@NetBSD.org>\n# http://filext.com/file-extension/DAA\n# describes the daa file format. The magic would be:\n0\tstring\t\tDAA\\x0\\x0\\x0\\x0\\x0\tPowerISO Direct-Access-Archive\n\n# From Albert Cahalan <acahalan@gmail.com>\n# really le32 operation,destination,payloadsize (but quite predictable)\n# 01 00 00 00 00 00 00 c0 00 02 00 00\n0\tstring\t\t\\1\\0\\0\\0\\0\\0\\0\\300\\0\\2\\0\\0\tMarvell Libertas firmware\n\n# From Eric Sandeen\n# GFS2\n0x10000         belong          0x01161970      GFS2 Filesystem\n>0x10024        belong          x               (blocksize %d,\n>0x10060        string          >\\0             lockproto %s)\n\n# BTRFS\n0x10040         string          _BHRfS_M        BTRFS Filesystem\n>0x1012b        string          >\\0             (label \"%s\",\n>0x10090        lelong          x               sectorsize %d,\n>0x10094        lelong          x               nodesize %d,\n>0x10098        lelong          x               leafsize %d)\n\n\n# dvdisaster's .ecc\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t*dvdisaster*\tdvdisaster error correction file\n\n# xfs metadump image \n# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog\n# but can we do the << ?  For now it's always 512 (0x200) anyway.\n0\tstring XFSM\n>0x200\tstring XFSB\tXFS filesystem metadump image\n\n# Type:\tCROM filesystem\n# From:\tWerner Fink <werner@suse.de>\n0\tstring\tCROMFS\tCROMFS\n>6\tstring\t>\\0\t\\b version %2.2s,\n>8\tulequad\t>0\t\\b block data at %lld,\n>16\tulequad\t>0\t\\b fblock table at %lld,\n>24\tulequad\t>0\t\\b inode table at %lld,\n>32\tulequad\t>0\t\\b root at %lld,\n>40\tulelong\t>0\t\\b fblock size = %ld,\n>44\tulelong\t>0\t\\b block size = %ld,\n>48\tulequad\t>0\t\\b bytes = %lld\n\n# Type:\txfs metadump image\n# From:\tDaniel Novotny <dnovotny@redhat.com>\n# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog\n# but can we do the << ? For now it's always 512 (0x200) anyway.\n0\tstring\tXFSM\n>0x200\tstring\tXFSB\tXFS filesystem metadump image\n\n# Type:\tdelta ISO\n# From:\tDaniel Novotny <dnovotny@redhat.com>\n0\tstring\tDISO\tDelta ISO data,\n>4\tbelong\tx\tversion %d\n\n# JFS2 (Journaling File System) image. (Old JFS1 has superblock at 0x1000.)\n# See linux/fs/jfs/jfs_superblock.h for layout; see jfs_filsys.h for flags.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n0x8000\tstring\tJFS1\n# Because it's text-only magic, check a binary value (version) to be sure.\n# Should always be 2, but mkfs.jfs writes it as 1. Needs to be 2 or 1 to be\n# mountable.\n>&0\tlelong\t<3\tJFS2 filesystem image\n# Label is followed by a UUID; we have to limit string length to avoid\n# appending the UUID in the case of a 16-byte label.\n>>&144\tregex\t[\\x20-\\x7E]{1,16}\t(label \"%s\")\n>>&0\tlequad\tx\t\\b, %lld blocks\n>>&8\tlelong\tx\t\\b, blocksize %d\n>>&32\tlelong&0x00000006\t>0\t(dirty)\n>>&36\tlelong\t>0\t(compressed)\n\n#------------------------------------------------------------------------------\n# $File: flash,v 1.9 2009/11/08 01:30:01 christos Exp $\n# flash:\tfile(1) magic for Macromedia Flash file format\n#\n# See\n#\n#\thttp://www.macromedia.com/software/flash/open/\n#\n0\tstring\t\tFWS\t\tMacromedia Flash data,\n>3\tbyte\t\tx\t\tversion %d\n!:mime\tapplication/x-shockwave-flash\n0\tstring\t\tCWS\t\tMacromedia Flash data (compressed),\n!:mime\tapplication/x-shockwave-flash\n>3\tbyte\t\tx\t\tversion %d\n# From: Cal Peake <cp@absolutedigital.net>\n0\tstring\t\tFLV\t\tMacromedia Flash Video\n!:mime\tvideo/x-flv\n\n#\n# Yosu Gomez\n0       string AGD2\\xbe\\xb8\\xbb\\xcd\\x00 Macromedia Freehand 7 Document\n0       string AGD3\\xbe\\xb8\\xbb\\xcc\\x00 Macromedia Freehand 8 Document\n# From Dave Wilson\n0\tstring AGD4\\xbe\\xb8\\xbb\\xcb\\x00\tMacromedia Freehand 9 Document\n\n#------------------------------------------------------------------------------\n# $File: fonts,v 1.21 2009/12/06 23:17:52 rrt Exp $\n# fonts:  file(1) magic for font data\n#\n0\tsearch/1\tFONT\t\tASCII vfont text\n0\tshort\t\t0436\t\tBerkeley vfont data\n0\tshort\t\t017001\t\tbyte-swapped Berkeley vfont data\n\n# PostScript fonts (must precede \"printer\" entries), quinlan@yggdrasil.com\n0\tstring\t\t%!PS-AdobeFont-1.\tPostScript Type 1 font text\n>20\tstring\t\t>\\0\t\t\t(%s)\n6\tstring\t\t%!PS-AdobeFont-1.\tPostScript Type 1 font program data\n0\tstring\t\t%!FontType1\tPostScript Type 1 font program data\n6\tstring\t\t%!FontType1\tPostScript Type 1 font program data\n0\tstring\t\t%!PS-Adobe-3.0\\ Resource-Font\tPostScript Type 1 font text\n\n# X11 font files in SNF (Server Natural Format) format\n0\tbelong\t\t00000004\t\tX11 SNF font data, MSB first\n0\tlelong\t\t00000004\t\tX11 SNF font data, LSB first\n\n# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/1\tSTARTFONT\\ \t\tX11 BDF font text\n\n# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)\n# PCF must come before SGI additions (\"MIPSEL MIPS-II COFF\" collides)\n0\tstring\t\t\\001fcp\t\t\tX11 Portable Compiled Font data\n>12\tbyte\t\t0x02\t\t\t\\b, LSB first\n>12\tbyte\t\t0x0a\t\t\t\\b, MSB first\n0\tstring\t\tD1.0\\015\t\tX11 Speedo font data\n\n#------------------------------------------------------------------------------\n# FIGlet fonts and controlfiles\n# From figmagic supplied with Figlet version 2.2\n# \"David E. O'Brien\" <obrien@FreeBSD.ORG>\n0\tstring\t\tflf\t\tFIGlet font\n>3\tstring\t\t>2a\t\tversion %-2.2s\n0\tstring\t\tflc\t\tFIGlet controlfile\n>3\tstring\t\t>2a\t\tversion %-2.2s\n\n# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)\n# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++\n0\tbelong\t\t0x14025919\tlibGrx font data,\n>8\tleshort\t\tx\t\t%dx\n>10\tleshort\t\tx\t\t\\b%d\n>40\tstring\t\tx\t\t%s\n# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)\n0\tbelong\t\t0xff464f4e\tDOS code page font data collection\n7\tbelong\t\t0x00454741\tDOS code page font data\n7\tbelong\t\t0x00564944\tDOS code page font data (from Linux?)\n4098\tstring\t\tDOSFONT\t\tDOSFONT2 encrypted font data\n\n# downloadable fonts for browser (prints type) anthon@mnt.org\n0\tstring\t\tPFR1\t\tPFR1 font\n>102\tstring\t\t>0\t\t\\b: %s\n\n# True Type fonts\n0\tstring\t\\000\\001\\000\\000\\000\tTrueType font data\n!:mime application/x-font-ttf\n\n0\tstring\t\t\\007\\001\\001\\000Copyright\\ (c)\\ 199\tAdobe Multiple Master font\n0\tstring\t\t\\012\\001\\001\\000Copyright\\ (c)\\ 199\tAdobe Multiple Master font\n\n# TrueType/OpenType font collections (.ttc)\n# http://www.microsoft.com/typography/otspec/otff.htm\n0\tstring\t\tttcf\t\tTrueType font collection data\n>4\tbelong\t\t0x00010000\t\\b, 1.0\n>>8\tbelong\t\t>0\t\t\\b, %d fonts\n>4\tbelong\t\t0x00020000\t\\b, 2.0\n>>8\tbelong\t\t>0\t\t\\b, %d fonts\n# 0x44454947 = 'DSIG'\n>>>16\tbelong\t\t0x44534947\t\\b, digitally signed\n\n# Opentype font data from Avi Bercovich\n0\tstring\t\tOTTO\t\tOpenType font data\n!:mime application/vnd.ms-opentype\n\n# GÃ¼rkan SengÃ¼n <gurkan@linuks.mine.nu>, www.linuks.mine.nu \n0\tstring\t\tSplineFontDB:\tSpline Font Database \n!:mime application/vnd.font-fontforge-sfd\n>14\tstring\t\tx\t\tversion %s\n\n#------------------------------------------------------------------------------\n# $File: fortran,v 1.6 2009/09/19 16:28:09 christos Exp $\n# FORTRAN source\n0\tregex/100\t\\^[Cc][\\ \\t]\tFORTRAN program\n!:mime\ttext/x-fortran\n\n#------------------------------------------------------------------------------\n# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $\n# frame:  file(1) magic for FrameMaker files\n#\n# This stuff came on a FrameMaker demo tape, most of which is\n# copyright, but this file is \"published\" as witness the following:\n#\n# Note that this is the Framemaker Maker Interchange Format, not the\n# Normal format which would be application/vnd.framemaker.\n#\n0\tstring\t\t\\<MakerFile\tFrameMaker document\n!:mime\tapplication/x-mif\n>11\tstring\t\t5.5\t\t (5.5\n>11\tstring\t\t5.0\t\t (5.0\n>11\tstring\t\t4.0\t\t (4.0\n>11\tstring\t\t3.0\t\t (3.0\n>11\tstring\t\t2.0\t\t (2.0\n>11\tstring\t\t1.0\t\t (1.0\n>14\tbyte\t\tx\t\t  %c)\n0\tstring\t\t\\<MIFFile\tFrameMaker MIF (ASCII) file\n!:mime\tapplication/x-mif\n>9\tstring\t\t4.0\t\t (4.0)\n>9\tstring\t\t3.0\t\t (3.0)\n>9\tstring\t\t2.0\t\t (2.0)\n>9\tstring\t\t1.0\t\t (1.x)\n0\tsearch/1\t\\<MakerDictionary\tFrameMaker Dictionary text\n!:mime\tapplication/x-mif\n>17\tstring\t\t3.0\t\t (3.0)\n>17\tstring\t\t2.0\t\t (2.0)\n>17\tstring\t\t1.0\t\t (1.x)\n0\tstring\t\t\\<MakerScreenFont\tFrameMaker Font file\n!:mime\tapplication/x-mif\n>17\tstring\t\t1.01\t\t (%s)\n0\tstring\t\t\\<MML\t\tFrameMaker MML file\n!:mime\tapplication/x-mif\n0\tstring\t\t\\<BookFile\tFrameMaker Book file\n!:mime\tapplication/x-mif\n>10\tstring\t\t3.0\t\t (3.0\n>10\tstring\t\t2.0\t\t (2.0\n>10\tstring\t\t1.0\t\t (1.0\n>13\tbyte\t\tx\t\t  %c)\n# XXX - this book entry should be verified, if you find one, uncomment this\n#0\tstring\t\t\\<Book\\ \tFrameMaker Book (ASCII) file\n#!:mime\tapplication/x-mif\n#>6\tstring\t\t3.0\t\t (3.0)\n#>6\tstring\t\t2.0\t\t (2.0)\n#>6\tstring\t\t1.0\t\t (1.0)\n0\tstring\t\t\\<Maker\tIntermediate Print File\tFrameMaker IPL file\n!:mime\tapplication/x-mif\n\n#------------------------------------------------------------------------------\n# $File: freebsd,v 1.7 2009/09/19 16:28:09 christos Exp $\n# freebsd:  file(1) magic for FreeBSD objects\n#\n# All new-style FreeBSD magic numbers are in host byte order (i.e.,\n# little-endian on x86).\n#\n# XXX - this comes from the file \"freebsd\" in a recent FreeBSD version of\n# \"file\"; it, and the NetBSD stuff in \"netbsd\", appear to use different\n# schemes for distinguishing between executable images, shared libraries,\n# and object files.\n#\n# FreeBSD says:\n#\n#    Regardless of whether it's pure, demand-paged, or none of the\n#    above:\n#\n#\tif the entry point is < 4096, then it's a shared library if\n#\tthe \"has run-time loader information\" bit is set, and is\n#\tposition-independent if the \"is position-independent\" bit\n#\tis set;\n#\n#\tif the entry point is >= 4096 (or >4095, same thing), then it's\n#\tan executable, and is dynamically-linked if the \"has run-time\n#\tloader information\" bit is set.\n#\n# On x86, NetBSD says:\n#\n#    If it's neither pure nor demand-paged:\n#\n#\tif it has the \"has run-time loader information\" bit set, it's\n#\ta dynamically-linked executable;\n#\n#\tif it doesn't have that bit set, then:\n#\n#\t    if it has the \"is position-independent\" bit set, it's\n#\t    position-independent;\n#\n#\t    if the entry point is non-zero, it's an executable, otherwise\n#\t    it's an object file.\n#\n#    If it's pure:\n#\n#\tif it has the \"has run-time loader information\" bit set, it's\n#\ta dynamically-linked executable, otherwise it's just an\n#\texecutable.\n#\n#    If it's demand-paged:\n#\n#\tif it has the \"has run-time loader information\" bit set,\n#\tthen:\n#\n#\t    if the entry point is < 4096, it's a shared library;\n#\n#\t    if the entry point is = 4096 or > 4096 (i.e., >= 4096),\n#\t    it's a dynamically-linked executable);\n#\n#\tif it doesn't have the \"has run-time loader information\" bit\n#\tset, then it's just an executable.\n#\n# (On non-x86, NetBSD does much the same thing, except that it uses\n# 8192 on 68K - except for \"68k4k\", which is presumably \"68K with 4K\n# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's\n# had 8K pages; dunno about MIPS.)\n#\n# I suspect the two will differ only in perverse and uninteresting cases\n# (\"shared\" libraries that aren't demand-paged and whose pages probably\n# won't actually be shared, executables with entry points <4096).\n#\n# I leave it to those more familiar with FreeBSD and NetBSD to figure out\n# what the right answer is (although using \">4095\", FreeBSD-style, is\n# probably better than separately checking for \"=4096\" and \">4096\",\n# NetBSD-style).  (The old \"netbsd\" file analyzed FreeBSD demand paged\n# executables using the NetBSD technique.)\n#\n0\tlelong&0377777777\t041400407\tFreeBSD/i386\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400410\tFreeBSD/i386 pure\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400413\tFreeBSD/i386 demand paged\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n0\tlelong&0377777777\t041400314\tFreeBSD/i386 compact demand paged\n>20\tlelong\t\t\t<4096\n>>3\tbyte&0xC0\t\t&0x80\t\tshared library\n>>3\tbyte&0xC0\t\t0x40\t\tPIC object\n>>3\tbyte&0xC0\t\t0x00\t\tobject\n>20\tlelong\t\t\t>4095\n>>3\tbyte&0x80\t\t0x80\t\tdynamically linked executable\n>>3\tbyte&0x80\t\t0x00\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n\n# XXX gross hack to identify core files\n# cores start with a struct tss; we take advantage of the following:\n# byte 7:     highest byte of the kernel stack pointer, always 0xfe\n#      8/9:   kernel (ring 0) ss value, always 0x0010\n#      10 - 27: ring 1 and 2 ss/esp, unused, thus always 0\n#      28:    low order byte of the current PTD entry, always 0 since the\n#             PTD is page-aligned\n#\n7\tstring\t\\357\\020\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tFreeBSD/i386 a.out core file\n>1039\tstring\t>\\0\tfrom '%s'\n\n# /var/run/ld.so.hints\n# What are you laughing about?\n0\tlelong\t\t\t011421044151\tld.so hints file (Little Endian\n>4\tlelong\t\t\t>0\t\t\\b, version %d)\n>4\tbelong\t\t\t<1\t\t\\b)\n0\tbelong\t\t\t011421044151\tld.so hints file (Big Endian\n>4\tbelong\t\t\t>0\t\t\\b, version %d)\n>4\tbelong\t\t\t<1\t\t\\b)\n\n#\n# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities\n#\n0\tstring\tSCRSHOT_\tscrshot(1) screenshot,\n>8\tbyte\tx\t\tversion %d,\n>9\tbyte\t2\t\t%d bytes in header,\n>>10\tbyte\tx\t\t%d chars wide by\n>>11\tbyte\tx\t\t%d chars high\n\n#------------------------------------------------------------------------------\n# $File: fsav,v 1.11 2009/09/19 16:28:09 christos Exp $\n# fsav:  file(1) magic for datafellows fsav virus definition files\n# Anthon van der Neut (anthon@mnt.org)\n\n# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}\n0\tbeshort\t\t0x1575\t\tfsav macro virus signatures\n>8\tleshort\t\t>0\t\t(%d-\n>11\tbyte\t\t>0\t\t\\b%02d-\n>10\tbyte\t\t>0\t\t\\b%02d)\n# ftp://ftp.f-prot.com/pub/sign.zip\n#10\tubyte\t\t<12\n#>9\tubyte\t\t<32\n#>>8\tubyte\t\t0x0a\n#>>>12\tubyte\t\t0x07\n#>>>>11\tuleshort\t>0\t\tfsav DOS/Windows virus signatures (%d-\n#>>>>10\tbyte\t\t0\t\t\\b01-\n#>>>>10\tbyte\t\t1\t\t\\b02-\n#>>>>10\tbyte\t\t2\t\t\\b03-\n#>>>>10\tbyte\t\t3\t\t\\b04-\n#>>>>10\tbyte\t\t4\t\t\\b05-\n#>>>>10\tbyte\t\t5\t\t\\b06-\n#>>>>10\tbyte\t\t6\t\t\\b07-\n#>>>>10\tbyte\t\t7\t\t\\b08-\n#>>>>10\tbyte\t\t8\t\t\\b09-\n#>>>>10\tbyte\t\t9\t\t\\b10-\n#>>>>10\tbyte\t\t10\t\t\\b11-\n#>>>>10\tbyte\t\t11\t\t\\b12-\n#>>>>9\tubyte\t\t>0\t\t\\b%02d)\n# ftp://ftp.f-prot.com/pub/sign2.zip\n#0\tubyte\t\t0x62\t\t\n#>1\tubyte\t\t0xF5\t\t\n#>>2\tubyte\t\t0x1\t\t\n#>>>3\tubyte\t\t0x1\t\t\n#>>>>4\tubyte\t\t0x0e\t\t\n#>>>>>13\t\tubyte\t>0\t\tfsav virus signatures\n#>>>>>>11\tubyte\tx\t\tsize 0x%02x\n#>>>>>>12\tubyte\tx\t\t\\b%02x\n#>>>>>>13\tubyte\tx\t\t\\b%02x bytes\n\n# Joerg Jenderek: joerg dot jenderek at web dot de\n# http://www.clamav.net/doc/latest/html/node45.html\n# .cvd files start with a 512 bytes colon separated header\n# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime\n# + gzipped tarball files\n0\tstring\t\tClamAV-VDB:\t\n>11\tstring\t\t>\\0\t\tClam AntiVirus database %-.23s\n>>34\tstring\t\t:\t\t\n>>>35\t\tstring\t\t!:\t\\b, version \n>>>>35\t\tstring\t\tx \t\\b%-.1s\n>>>>>36\t\tstring \t\t!:\t\n>>>>>>36\tstring\t\tx \t\\b%-.1s\n>>>>>>>37\tstring\t\t!:\t\n>>>>>>>>37\tstring\t\tx \t\\b%-.1s\n>>>>>>>>>38\tstring\t\t!:\t\n>>>>>>>>>>38\tstring\t\tx \t\\b%-.1s\n>512\tstring\t\t\\037\\213\t\\b, gzipped\n>769\tstring\t\tustar\\0\t\t\\b, tarred\n\n# Type: Grisoft AVG AntiVirus\n# From: David Newgas <david@newgas.net>\n0\tstring\tAVG7_ANTIVIRUS_VAULT_FILE\tAVG 7 Antivirus vault file data\n\n#------------------------------------------------------------------------------\n# $File: games,v 1.8 2009/09/19 16:28:09 christos Exp $\n# games:  file(1) for games\n\n# Fabio Bonelli <fabiobonelli@libero.it>\n# Quake II - III data files\n0       string  IDP2        \tQuake II 3D Model file,\n>20     long    x               %lu skin(s),\n>8      long    x               (%lu x\n>12     long    x \t\t%lu),\n>40     long    x               %lu frame(s),\n>16     long    x               Frame size %lu bytes,\n>24     long  \tx               %lu vertices/frame,\n>28     long    x            \t%lu texture coordinates,\n>32     long    x               %lu triangles/frame\n\n0       string  IBSP            Quake\n>4      long    0x26            II Map file (BSP)\n>4      long    0x2E      \tIII Map file (BSP)\n\n0       string  IDS2            Quake II SP2 sprite file\n\n#---------------------------------------------------------------------------\n# Doom and Quake\n# submitted by Nicolas Patrois\n\n0       string  \\xcb\\x1dBoom\\xe6\\xff\\x03\\x01    Boom or linuxdoom demo\n# some doom lmp files don't match, I've got one beginning with \\x6d\\x02\\x01\\x01\n\n24      string  LxD\\ 203        Linuxdoom save\n>0      string  x       , name=%s\n>44     string  x       , world=%s\n\n# Quake\n\n0       string  PACK    Quake I or II world or extension\n>8\tlelong\t>0\t\\b, %d entries\n\n#0       string  -1\\x0a  Quake I demo\n#>30     string  x        version %.4s\n#>61     string  x        level %s       \n\n#0       string  5\\x0a   Quake I save\n\n# The levels\n\n# Quake 1\n\n0\tstring\t5\\x0aIntroduction             Quake I save: start Introduction\n0\tstring\t5\\x0athe_Slipgate_Complex     Quake I save: e1m1 The slipgate complex\n0\tstring\t5\\x0aCastle_of_the_Damned     Quake I save: e1m2 Castle of the damned\n0\tstring\t5\\x0athe_Necropolis           Quake I save: e1m3 The necropolis\n0\tstring\t5\\x0athe_Grisly_Grotto        Quake I save: e1m4 The grisly grotto\n0\tstring\t5\\x0aZiggurat_Vertigo         Quake I save: e1m8 Ziggurat vertigo (secret)\n0\tstring\t5\\x0aGloom_Keep               Quake I save: e1m5 Gloom keep\n0\tstring\t5\\x0aThe_Door_To_Chthon       Quake I save: e1m6 The door to Chthon\n0\tstring\t5\\x0aThe_House_of_Chthon      Quake I save: e1m7 The house of Chthon\n0\tstring\t5\\x0athe_Installation         Quake I save: e2m1 The installation\n0\tstring\t5\\x0athe_Ogre_Citadel         Quake I save: e2m2 The ogre citadel\n0\tstring\t5\\x0athe_Crypt_of_Decay       Quake I save: e2m3 The crypt of decay (dopefish lives!)\n0\tstring\t5\\x0aUnderearth               Quake I save: e2m7 Underearth (secret)\n0\tstring\t5\\x0athe_Ebon_Fortress        Quake I save: e2m4 The ebon fortress\n0\tstring\t5\\x0athe_Wizard's_Manse       Quake I save: e2m5 The wizard's manse\n0\tstring\t5\\x0athe_Dismal_Oubliette     Quake I save: e2m6 The dismal oubliette\n0\tstring\t5\\x0aTermination_Central      Quake I save: e3m1 Termination central\n0\tstring\t5\\x0aVaults_of_Zin            Quake I save: e3m2 Vaults of Zin\n0\tstring\t5\\x0athe_Tomb_of_Terror       Quake I save: e3m3 The tomb of terror\n0\tstring\t5\\x0aSatan's_Dark_Delight     Quake I save: e3m4 Satan's dark delight\n0\tstring\t5\\x0athe_Haunted_Halls        Quake I save: e3m7 The haunted halls (secret)\n0\tstring\t5\\x0aWind_Tunnels             Quake I save: e3m5 Wind tunnels\n0\tstring\t5\\x0aChambers_of_Torment      Quake I save: e3m6 Chambers of torment\n0\tstring\t5\\x0athe_Sewage_System        Quake I save: e4m1 The sewage system\n0\tstring\t5\\x0aThe_Tower_of_Despair     Quake I save: e4m2 The tower of despair\n0\tstring\t5\\x0aThe_Elder_God_Shrine     Quake I save: e4m3 The elder god shrine\n0\tstring\t5\\x0athe_Palace_of_Hate       Quake I save: e4m4 The palace of hate\n0\tstring\t5\\x0aHell's_Atrium            Quake I save: e4m5 Hell's atrium\n0\tstring\t5\\x0athe_Nameless_City        Quake I save: e4m8 The nameless city (secret)\n0\tstring\t5\\x0aThe_Pain_Maze            Quake I save: e4m6 The pain maze\n0\tstring\t5\\x0aAzure_Agony              Quake I save: e4m7 Azure agony\n0\tstring\t5\\x0aShub-Niggurath's_Pit     Quake I save: end Shub-Niggurath's pit\n\n# Quake DeathMatch levels\n\n0\tstring\t5\\x0aPlace_of_Two_Deaths\t Quake I save: dm1 Place of two deaths\n0\tstring\t5\\x0aClaustrophobopolis\t\t Quake I save: dm2 Claustrophobopolis\n0\tstring\t5\\x0aThe_Abandoned_Base\t\t Quake I save: dm3 The abandoned base\n0\tstring\t5\\x0aThe_Bad_Place\t\t Quake I save: dm4 The bad place\n0\tstring\t5\\x0aThe_Cistern\t\t Quake I save: dm5 The cistern\n0\tstring\t5\\x0aThe_Dark_Zone\t\t Quake I save: dm6 The dark zone\n\n# Scourge of Armagon\n\n0\tstring\t5\\x0aCommand_HQ               Quake I save: start Command HQ\n0\tstring\t5\\x0aThe_Pumping_Station      Quake I save: hip1m1 The pumping station\n0\tstring\t5\\x0aStorage_Facility         Quake I save: hip1m2 Storage facility\n0\tstring\t5\\x0aMilitary_Complex         Quake I save: hip1m5 Military complex (secret)\n0\tstring\t5\\x0athe_Lost_Mine            Quake I save: hip1m3 The lost mine\n0\tstring\t5\\x0aResearch_Facility        Quake I save: hip1m4 Research facility\n0\tstring\t5\\x0aAncient_Realms           Quake I save: hip2m1 Ancient realms\n0\tstring\t5\\x0aThe_Gremlin's_Domain     Quake I save: hip2m6 The gremlin's domain (secret)\n0\tstring\t5\\x0aThe_Black_Cathedral      Quake I save: hip2m2 The black cathedral\n0\tstring\t5\\x0aThe_Catacombs            Quake I save: hip2m3 The catacombs\n0\tstring\t5\\x0athe_Crypt__              Quake I save: hip2m4 The crypt\n0\tstring\t5\\x0aMortum's_Keep            Quake I save: hip2m5 Mortum's keep\n0\tstring\t5\\x0aTur_Torment              Quake I save: hip3m1 Tur torment\n0\tstring\t5\\x0aPandemonium              Quake I save: hip3m2 Pandemonium\n0\tstring\t5\\x0aLimbo                    Quake I save: hip3m3 Limbo\n0\tstring\t5\\x0athe_Edge_of_Oblivion     Quake I save: hipdm1 The edge of oblivion (secret)\n0\tstring\t5\\x0aThe_Gauntlet             Quake I save: hip3m4 The gauntlet\n0\tstring\t5\\x0aArmagon's_Lair           Quake I save: hipend Armagon's lair\n\n# Malice\n\n0\tstring\t5\\x0aThe_Academy      Quake I save: start The academy\n0\tstring\t5\\x0aThe_Lab          Quake I save: d1 The lab\n0\tstring\t5\\x0aArea_33          Quake I save: d1b Area 33\n0\tstring\t5\\x0aSECRET_MISSIONS  Quake I save: d3b Secret missions\n0\tstring\t5\\x0aThe_Hospital     Quake I save: d10 The hospital (secret)\n0\tstring\t5\\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)\n0\tstring\t5\\x0aBACK_2_MALICE    Quake I save: d4b Back to Malice\n0\tstring\t5\\x0aArea44           Quake I save: d1c Area 44\n0\tstring\t5\\x0aTakahiro_Towers  Quake I save: d2 Takahiro towers\n0\tstring\t5\\x0aA_Rat's_Life     Quake I save: d3 A rat's life\n0\tstring\t5\\x0aInto_The_Flood   Quake I save: d4 Into the flood\n0\tstring\t5\\x0aThe_Flood        Quake I save: d5 The flood\n0\tstring\t5\\x0aNuclear_Plant    Quake I save: d6 Nuclear plant\n0\tstring\t5\\x0aThe_Incinerator_Plant    Quake I save: d7 The incinerator plant\n0\tstring\t5\\x0aThe_Foundry              Quake I save: d7b The foundry\n0\tstring\t5\\x0aThe_Underwater_Base      Quake I save: d8 The underwater base\n0\tstring\t5\\x0aTakahiro_Base            Quake I save: d9 Takahiro base\n0\tstring\t5\\x0aTakahiro_Laboratories    Quake I save: d12 Takahiro laboratories\n0\tstring\t5\\x0aStayin'_Alive    Quake I save: d13 Stayin' alive\n0\tstring\t5\\x0aB.O.S.S._HQ      Quake I save: d14 B.O.S.S. HQ\n0\tstring\t5\\x0aSHOWDOWN!        Quake I save: d15 Showdown!\n\n# Malice DeathMatch levels\n\n0\tstring\t5\\x0aThe_Seventh_Precinct\t Quake I save: ddm1 The seventh precinct\n0\tstring\t5\\x0aSub_Station\t\t Quake I save: ddm2 Sub station\n0\tstring\t5\\x0aCrazy_Eights!\t\t Quake I save: ddm3 Crazy eights!\n0\tstring\t5\\x0aEast_Side_Invertationa\t Quake I save: ddm4 East side invertationa\n0\tstring\t5\\x0aSlaughterhouse\t\t Quake I save: ddm5 Slaughterhouse\n0\tstring\t5\\x0aDOMINO\t\t\t Quake I save: ddm6 Domino\n0\tstring\t5\\x0aSANDRA'S_LADDER\t\t Quake I save: ddm7 Sandra's ladder\n\n\n0\tstring\tMComprHD\tMAME CHD compressed hard disk image,\n>12\tbelong\tx\t\tversion %lu\n\n# doom - submitted by Jon Dowland\n\n0\tstring\t=IWAD\t\tdoom main IWAD data\n>4\tlelong\tx\t\tcontaining %d lumps\n0\tstring\t=PWAD\t\tdoom patch PWAD data\n>4\tlelong\tx\t\tcontaining %d lumps\n\n\n# Summary: Warcraft 3 save\n# Extension: .w3g\n# Created by: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t\tWarcraft\\ III\\ recorded\\ game\t%s\n\n\n# Summary: Warcraft 3 map\n# Extension: .w3m\n# Created by: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t\tHM3W\t\tWarcraft III map file\n\n\n# Summary: SGF Smart Game Format\n# Extension: .sgf\n# Reference: http://www.red-bean.com/sgf/\n# Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>\n# Modified by (1): Abel Cheung (regex, more game format)\n# FIXME: Some games don't have GM (game type)\n0\tregex\t\t\\\\(;.*GM\\\\[[0-9]{1,2}\\\\]\tSmart Game Format\n>2\tsearch/0x200\tGM[\n>>&0\tstring\t\t1]\t(Go)\n>>&0\tstring\t\t2]\t(Othello)\n>>&0\tstring\t\t3]\t(chess)\n>>&0\tstring\t\t4]\t(Gomoku+Renju)\n>>&0\tstring\t\t5]\t(Nine Men's Morris)\n>>&0\tstring\t\t6]\t(Backgammon)\n>>&0\tstring\t\t7]\t(Chinese chess)\n>>&0\tstring\t\t8]\t(Shogi)\n>>&0\tstring\t\t9]\t(Lines of Action)\n>>&0\tstring\t\t10]\t(Ataxx)\n>>&0\tstring\t\t11]\t(Hex)\n>>&0\tstring\t\t12]\t(Jungle)\n>>&0\tstring\t\t13]\t(Neutron)\n>>&0\tstring\t\t14]\t(Philosopher's Football)\n>>&0\tstring\t\t15]\t(Quadrature)\n>>&0\tstring\t\t16]\t(Trax)\n>>&0\tstring\t\t17]\t(Tantrix)\n>>&0\tstring\t\t18]\t(Amazons)\n>>&0\tstring\t\t19]\t(Octi)\n>>&0\tstring\t\t20]\t(Gess)\n>>&0\tstring\t\t21]\t(Twixt)\n>>&0\tstring\t\t22]\t(Zertz)\n>>&0\tstring\t\t23]\t(Plateau)\n>>&0\tstring\t\t24]\t(Yinsh)\n>>&0\tstring\t\t25]\t(Punct)\n>>&0\tstring\t\t26]\t(Gobblet)\n>>&0\tstring\t\t27]\t(hive)\n>>&0\tstring\t\t28]\t(Exxit)\n>>&0\tstring\t\t29]\t(Hnefatal)\n>>&0\tstring\t\t30]\t(Kuba)\n>>&0\tstring\t\t31]\t(Tripples)\n>>&0\tstring\t\t32]\t(Chase)\n>>&0\tstring\t\t33]\t(Tumbling Down)\n>>&0\tstring\t\t34]\t(Sahara)\n>>&0\tstring\t\t35]\t(Byte)\n>>&0\tstring\t\t36]\t(Focus)\n>>&0\tstring\t\t37]\t(Dvonn)\n>>&0\tstring\t\t38]\t(Tamsk)\n>>&0\tstring\t\t39]\t(Gipf)\n>>&0\tstring\t\t40]\t(Kropki)\n\n\n# Summary: Civilization 4 video\n# Extension: .bik\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\tstring\tBIKi\tCivilization 4 Video\n\n\n##############################################\n# NetImmerse/Gamebryo game engine entries\n\n# Summary: Gamebryo game engine file\n# Extension: .nif, .kf\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\tGamebryo\\ File\\ Format,\\ Version\\ \tGamebryo game engine file\n>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Summary: Gamebryo game engine file\n# Extension: .kfm\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\t;Gamebryo\\ KFM\\ File\\ Version\\ \t\tGamebryo game engine animation File\n>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Summary: NetImmerse game engine file\n# Extension .nif\n# Created by: Abel Cheung <abelcheung@gmail.com>\n0\t\tstring\t\tNetImmerse\\ File\\ Format,\\ Versio\t\t\n>&0\t\tstring\t\tn\\ \t\t\t\t\tNetImmerse game engine file\n>>&0\t\tregex\t\t[0-9a-z.]+\t\t\t\t\\b, version %s\n\n# Type:\tSGF Smart Game Format\n# URL:\thttp://www.red-bean.com/sgf/\n# From:\tEduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>\n2\tregex/c\t\\\\(;.*GM\\\\[[0-9]{1,2}\\\\]\tSmart Game Format\n>2\tregex/c\tGM\\\\[1\\\\]\t\t\t- Go Game\n>2\tregex/c\tGM\\\\[6\\\\]\t\t\t- BackGammon Game\n>2\tregex/c\tGM\\\\[11\\\\]\t\t\t- Hex Game\n>2\tregex/c\tGM\\\\[18\\\\]\t\t\t- Amazons Game\n>2\tregex/c\tGM\\\\[19\\\\]\t\t\t- Octi Game\n>2\tregex/c\tGM\\\\[20\\\\]\t\t\t- Gess Game\n>2\tregex/c\tGM\\\\[21\\\\]\t\t\t- twix Game\n\n#------------------------------------------------------------------------------\n# $File: gcc,v 1.4 2009/09/19 16:28:09 christos Exp $\n# gcc:  file(1) magic for GCC special files\n#\n0\tstring\t\tgpch\t\tGCC precompiled header\n\n# The version field is annoying.  It's 3 characters, not zero-terminated.\n>5\tbyte\t\tx\t\t\t(version %c\n>6\tbyte\t\tx\t\t\t\\b%c\n>7\tbyte\t\tx\t\t\t\\b%c)\n\n# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'\n>4\tbyte\t\t67\t\t\tfor C\n>4\tbyte\t\t111\t\t\tfor Objective C\n>4\tbyte\t\t43\t\t\tfor C++\n>4\tbyte\t\t79\t\t\tfor Objective C++\n\n#------------------------------------------------------------------------------\n# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $\n# GEOS files (Vidar Madsen, vidar@gimp.org)\n# semi-commonly used in embedded and handheld systems.\n0\tbelong\t0xc745c153\tGEOS\n>40\tbyte\t1\texecutable\n>40\tbyte\t2\tVMFile\n>40\tbyte\t3\tbinary\n>40\tbyte\t4\tdirectory label\n>40\tbyte\t<1\tunknown\n>40\tbyte\t>4\tunknown\n>4\tstring\t>\\0\t\\b, name \"%s\"\n#>44\tshort\tx\t\\b, version %d\n#>46\tshort\tx\t\\b.%d\n#>48\tshort\tx\t\\b, rev %d\n#>50\tshort\tx\t\\b.%d\n#>52\tshort\tx\t\\b, proto %d\n#>54\tshort\tx\t\\br%d\n#>168\tstring\t>\\0\t\\b, copyright \"%s\"\n\n#------------------------------------------------------------------------------\n# $File: gimp,v 1.6 2009/09/19 16:28:09 christos Exp $\n# GIMP Gradient: file(1) magic for the GIMP's gradient data files\n# by Federico Mena <federico@nuclecu.unam.mx>\n\n0       string          GIMP\\ Gradient  GIMP gradient data\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the XCF image format used in the GIMP developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n0\tstring\t\tgimp\\ xcf\tGIMP XCF image data,\n!:mime\timage/x-xcf\n>9\tstring\t\tfile\t\tversion 0,\n>9\tstring\t\tv\t\tversion\n>>10\tstring\t\t>\\0\t\t%s,\n>14\tbelong\t\tx\t\t%lu x\n>18\tbelong\t\tx\t\t%lu,\n>22     belong          0               RGB Color\n>22     belong          1               Greyscale\n>22     belong          2               Indexed Color\n>22\tbelong\t\t>2\t\tUnknown Image Type.\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the patterns used in the GIMP, developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n20      string          GPAT            GIMP pattern data,\n>24     string          x               %s\n\n#------------------------------------------------------------------------------\n# XCF:  file(1) magic for the brushes used in the GIMP, developed\n#       by Spencer Kimball and Peter Mattis\n#       ('Bucky' LaDieu, nega@vt.edu)\n\n20      string          GIMP            GIMP brush data\n\n# GIMP Curves File\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n0\tstring\t#\\040GIMP\\040Curves\\040File\tGIMP curve file\n\n#------------------------------------------------------------------------------\n# $File: gnome-keyring,v 1.2 2009/09/19 16:28:09 christos Exp $\n# GNOME keyring\n# Contributed by Josh Triplett\n# FIXME: Could be simplified if pstring supported two-byte counts\n0         string   GnomeKeyring\\n\\r\\0\\n GNOME keyring\n>&0       ubyte    0                    \\b, major version 0\n>>&0      ubyte    0                    \\b, minor version 0\n>>>&0     ubyte    0                    \\b, crypto type 0 (AEL)\n>>>&0     ubyte    >0                   \\b, crypto type %hhu (unknown)\n>>>&1     ubyte    0                    \\b, hash type 0 (MD5)\n>>>&1     ubyte    >0                   \\b, hash type %hhu (unknown)\n>>>&2     ubelong  0xFFFFFFFF           \\b, name NULL\n>>>&2     ubelong  !0xFFFFFFFF\n>>>>&-4   ubelong  >255                 \\b, name too long for file's pstring type\n>>>>&-4   ubelong  <256\n>>>>>&-1  pstring  x                    \\b, name \"%s\"\n>>>>>>&0  ubeqdate x                    \\b, last modified %s\n>>>>>>&8  ubeqdate x                    \\b, created %s\n>>>>>>&16 ubelong  &1\n>>>>>>>&0 ubelong  x                    \\b, locked if idle for %u seconds\n>>>>>>&16 ubelong  ^1                   \\b, not locked if idle\n>>>>>>&24 ubelong  x                    \\b, hash iterations %u\n>>>>>>&28 ubequad  x                    \\b, salt %llu\n>>>>>>&52 ubelong  x                    \\b, %u item(s)\n\n#------------------------------------------------------------------------------\n# $File: gnu,v 1.11 2009/09/19 16:28:09 christos Exp $\n# gnu:  file(1) magic for various GNU tools\n#\n# GNU nlsutils message catalog file format\n#\n0\tstring\t\t\\336\\22\\4\\225\tGNU message catalog (little endian),\n>4\tlelong\t\tx\t\trevision %d,\n>8\tlelong\t\tx\t\t%d messages\n0\tstring\t\t\\225\\4\\22\\336\tGNU message catalog (big endian),\n>4\tbelong\t\tx\t\trevision %d,\n>8\tbelong\t\tx\t\t%d messages\n# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>\n0\tstring\t\t*nazgul*\tNazgul style compiled message catalog\n>8\tlelong\t\t>0\t\t\\b, version %ld\n\n# GnuPG\n# The format is very similar to pgp\n0\tstring          \\001gpg                 GPG key trust database\n>4\tbyte            x                       version %d\n# Note: magic.mime had 0x8501 for the next line instead of 0x8502\n0\tbeshort\t\t0x8502\t\t\tGPG encrypted data\n!:mime\ttext/PGP # encoding: data\n\n# This magic is not particularly good, as the keyrings don't have true\n# magic. Nevertheless, it covers many keyrings.\n0       beshort         0x9901                  GPG key public ring\n!:mime\tapplication/x-gnupg-keyring\n\n# Gnumeric spreadsheet\n# This entry is only semi-helpful, as Gnumeric compresses its files, so\n# they will ordinarily reported as \"compressed\", but at least -z helps\n39      string          =<gmr:Workbook           Gnumeric spreadsheet\n\n# From: James Youngman <jay@gnu.org> \n# gnu find magic\n0\tstring\t\\0LOCATE\tGNU findutils locate database data\n>7\tstring\t>\\0\t\t\\b, format %s\n>7\tstring\t02\t\t\\b (frcode)\n\n# Files produced by GNU gettext\n0\tlong\t0xDE120495\t\tGNU-format message catalog data\n0\tlong\t0x950412DE\t\tGNU-format message catalog data\n\n#------------------------------------------------------------------------------\n# $File: gnumeric,v 1.4 2009/09/19 16:28:09 christos Exp $\n# gnumeric:  file(1) magic for Gnumeric spreadsheet\n# This entry is only semi-helpful, as Gnumeric compresses its files, so\n# they will ordinarily reported as \"compressed\", but at least -z helps\n39\tstring\t=<gmr:Workbook\tGnumeric spreadsheet\n!:mime\tapplication/x-gnumeric\n\n#------------------------------------------------------------------------------\n# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $\n# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE\n#\n# ACE/gr binary\n0\tstring\t\\000\\000\\0001\\000\\000\\0000\\000\\000\\0000\\000\\000\\0002\\000\\000\\0000\\000\\000\\0000\\000\\000\\0003\t\told ACE/gr binary file\n>39\tbyte\t>0\t\t\t- version %c\n# ACE/gr ascii\n0\tstring\t#\\ xvgr\\ parameter\\ file\tACE/gr ascii file\n0\tstring\t#\\ xmgr\\ parameter\\ file\tACE/gr ascii file\n0\tstring\t#\\ ACE/gr\\ parameter\\ file\tACE/gr ascii file\n# Grace projects\n0\tstring\t#\\ Grace\\ project\\ file\t\tGrace project file\n>23\tstring\t@version\\  \t\t\t(version\n>>32\tbyte\t>0 \t\t\t\t%c\n>>33\tstring\t>\\0 \t\t\t\t\\b.%.2s\n>>35\tstring\t>\\0 \t\t\t\t\\b.%.2s)\n# ACE/gr fit description files\n0\tstring\t#\\ ACE/gr\\ fit\\ description\\ \tACE/gr fit description file\n# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE\n\n#------------------------------------------------------------------------------\n# $File: graphviz,v 1.7 2009/09/19 16:28:09 christos Exp $\n# graphviz:  file(1) magic for http://www.graphviz.org/\n\n# FIXME: These patterns match too generally. For example, the first\n# line matches a LaTeX file containing the word \"graph\" (with a {\n# following later) and the second line matches this file.\n#0\tregex/100\t[\\r\\n\\t\\ ]*graph[\\r\\n\\t\\ ]+.*\\\\{\tgraphviz graph text\n#!:mime\ttext/vnd.graphviz\n#0\tregex/100\t[\\r\\n\\t\\ ]*digraph[\\r\\n\\t\\ ]+.*\\\\{\tgraphviz digraph text\n#!:mime\ttext/vnd.graphviz\n\n#------------------------------------------------------------------------------\n# $File: gringotts,v 1.5 2009/09/19 16:28:09 christos Exp $\n# gringotts:  file(1) magic for Gringotts\n# http://devel.pluto.linux.it/projects/Gringotts/\n# author: Germano Rizzo <mano@pluto.linux.it>\n#GRG3????Y\n0\tstring\tGRG\t\tGringotts data file\n#file format 1\n>3\tstring\t\t1\t\tv.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9\n#file format 2\n>3\tstring\t\t2\t\tv.2, MCRYPT S2K, \n>>8\tbyte&0x70\t0x00\t\tRIJNDAEL-128 crypt,\n>>8\tbyte&0x70\t0x10\t\tSERPENT crypt,\n>>8\tbyte&0x70\t0x20\t\tTWOFISH crypt, \n>>8\tbyte&0x70\t0x30\t\tCAST-256 crypt,\n>>8\tbyte&0x70\t0x40\t\tSAFER+ crypt,\n>>8\tbyte&0x70\t0x50\t\tLOKI97 crypt,\n>>8\tbyte&0x70\t0x60\t\t3DES crypt,\n>>8\tbyte&0x70\t0x70\t\tRIJNDAEL-256 crypt,\n>>8\tbyte&0x08\t0x00\t\tSHA1 hash,\n>>8\tbyte&0x08\t0x08\t\tRIPEMD-160 hash,\n>>8\tbyte&0x04\t0x00\t\tZLib\n>>8\tbyte&0x04\t0x04\t\tBZip2\n>>8\tbyte&0x03\t0x00\t\tlvl.0\n>>8\tbyte&0x03\t0x01\t\tlvl.3\n>>8\tbyte&0x03\t0x02\t\tlvl.6\n>>8\tbyte&0x03\t0x03\t\tlvl.9\n#file format 3\n>3\tstring\t\t3\t\tv.3, OpenPGP S2K, \n>>8\tbyte&0x70\t0x00\t\tRIJNDAEL-128 crypt,\n>>8\tbyte&0x70\t0x10\t\tSERPENT crypt,\n>>8\tbyte&0x70\t0x20\t\tTWOFISH crypt, \n>>8\tbyte&0x70\t0x30\t\tCAST-256 crypt,\n>>8\tbyte&0x70\t0x40\t\tSAFER+ crypt,\n>>8\tbyte&0x70\t0x50\t\tLOKI97 crypt,\n>>8\tbyte&0x70\t0x60\t\t3DES crypt,\n>>8\tbyte&0x70\t0x70\t\tRIJNDAEL-256 crypt,\n>>8\tbyte&0x08\t0x00\t\tSHA1 hash,\n>>8\tbyte&0x08\t0x08\t\tRIPEMD-160 hash,\n>>8\tbyte&0x04\t0x00\t\tZLib\n>>8\tbyte&0x04\t0x04\t\tBZip2\n>>8\tbyte&0x03\t0x00\t\tlvl.0\n>>8\tbyte&0x03\t0x01\t\tlvl.3\n>>8\tbyte&0x03\t0x02\t\tlvl.6\n>>8\tbyte&0x03\t0x03\t\tlvl.9\n#file format >3\n>3\tstring\t\t>3\t\tv.%.1s (unknown details)\n\n#------------------------------------------------------------------------------\n# $File: hitachi-sh,v 1.5 2009/09/19 16:28:09 christos Exp $\n# hitach-sh: file(1) magic for Hitachi Super-H\n#\n# Super-H COFF\n#\n0\tbeshort\t\t0x0500\t\tHitachi SH big-endian COFF\n>18\tbeshort&0x0002\t=0x0000\t\tobject\n>18\tbeshort&0x0002\t=0x0002\t\texecutable\n>18\tbeshort&0x0008\t=0x0008\t\t\\b, stripped\n>18\tbeshort&0x0008\t=0x0000\t\t\\b, not stripped\n#\n0\tleshort\t\t0x0550\t\tHitachi SH little-endian COFF\n>18\tleshort&0x0002\t=0x0000\t\tobject\n>18\tleshort&0x0002\t=0x0002\t\texecutable\n>18\tleshort&0x0008\t=0x0008\t\t\\b, stripped\n>18\tleshort&0x0008\t=0x0000\t\t\\b, not stripped\n\n\n#------------------------------------------------------------------------------\n# $File: hp,v 1.23 2009/09/19 16:28:09 christos Exp $\n# hp:  file(1) magic for Hewlett Packard machines (see also \"printer\")\n#\n# XXX - somebody should figure out whether any byte order needs to be\n# applied to the \"TML\" stuff; I'm assuming the Apollo stuff is\n# big-endian as it was mostly 68K-based.\n#\n# I think the 500 series was the old stack-based machines, running a\n# UNIX environment atop the \"SUN kernel\"; dunno whether it was\n# big-endian or little-endian.\n#\n# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;\n# hp300 are 68020+68881 based; hp400 are also 68k.  The following basic\n# HP magic is useful for reference, but using \"long\" magic is a better\n# practice in order to avoid collisions.\n#\n# Guy Harris (guy@netapp.com): some additions to this list came from\n# HP-UX 10.0's \"/usr/include/sys/unistd.h\" (68030, 68040, PA-RISC 1.1,\n# 1.2, and 2.0).  The 1.2 and 2.0 stuff isn't in the HP-UX 10.0\n# \"/etc/magic\", though, except for the \"archive file relocatable library\"\n# stuff, and the 68030 and 68040 stuff isn't there at all - are they not\n# used in executables, or have they just not yet updated \"/etc/magic\"\n# completely?\n#\n# 0\tbeshort\t\t200\t\thp200 (68010) BSD binary\n# 0\tbeshort\t\t300\t\thp300 (68020+68881) BSD binary\n# 0\tbeshort\t\t0x20c\t\thp200/300 HP-UX binary\n# 0\tbeshort\t\t0x20d\t\thp400 (68030) HP-UX binary\n# 0\tbeshort\t\t0x20e\t\thp400 (68040?) HP-UX binary\n# 0\tbeshort\t\t0x20b\t\tPA-RISC1.0 HP-UX binary\n# 0\tbeshort\t\t0x210\t\tPA-RISC1.1 HP-UX binary\n# 0\tbeshort\t\t0x211\t\tPA-RISC1.2 HP-UX binary\n# 0\tbeshort\t\t0x214\t\tPA-RISC2.0 HP-UX binary\n\n#\n# The \"misc\" stuff needs a byte order; the archives look suspiciously\n# like the old 177545 archives (0xff65 = 0177545).\n#\n#### Old Apollo stuff\n0\tbeshort\t\t0627\t\tApollo m68k COFF executable\n>18\tbeshort\t\t^040000\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %ld\n0\tbeshort\t\t0624\t\tapollo a88k COFF executable\n>18\tbeshort\t\t^040000\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %ld\n0       long            01203604016     TML 0123 byte-order format\n0       long            01702407010     TML 1032 byte-order format\n0       long            01003405017     TML 2301 byte-order format\n0       long            01602007412     TML 3210 byte-order format\n#### PA-RISC 1.1\n0\tbelong \t\t0x02100106\tPA-RISC1.1 relocatable object\n0\tbelong \t\t0x02100107\tPA-RISC1.1 executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x02100108\tPA-RISC1.1 shared executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010b\tPA-RISC1.1 demand-load executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010e\tPA-RISC1.1 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x0210010d\tPA-RISC1.1 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n#### PA-RISC 2.0\n0\tbelong\t\t0x02140106\tPA-RISC2.0 relocatable object\n\n0       belong\t\t0x02140107\tPA-RISC2.0 executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x02140108\tPA-RISC2.0 shared executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010b\tPA-RISC2.0 demand-load executable\n>168\tbelong\t\t&0x00000004\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010e\tPA-RISC2.0 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0       belong\t\t0x0214010d\tPA-RISC2.0 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n#### 800\n0\tbelong \t\t0x020b0106\tPA-RISC1.0 relocatable object\n\n0\tbelong \t\t0x020b0107\tPA-RISC1.0 executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b0108\tPA-RISC1.0 shared executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010b\tPA-RISC1.0 demand-load executable\n>168\tbelong&0x4\t0x4\t\tdynamically linked\n>(144)\tbelong\t\t0x054ef630\tdynamically linked\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010e\tPA-RISC1.0 shared library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong \t\t0x020b010d\tPA-RISC1.0 dynamic load library\n>96\tbelong\t\t>0\t\t- not stripped\n\n0\tbelong\t\t0x213c6172\tarchive file\n>68\tbelong \t\t0x020b0619\t- PA-RISC1.0 relocatable library\n>68\tbelong\t \t0x02100619\t- PA-RISC1.1 relocatable library\n>68\tbelong \t\t0x02110619\t- PA-RISC1.2 relocatable library\n>68\tbelong \t\t0x02140619\t- PA-RISC2.0 relocatable library\n\n#### 500\n0\tlong\t\t0x02080106\tHP s500 relocatable executable\n>16\tlong\t\t>0\t\t- version %ld\n\n0\tlong\t\t0x02080107\tHP s500 executable\n>16\tlong\t\t>0\t\t- version %ld\n\n0\tlong\t\t0x02080108\tHP s500 pure executable\n>16\tlong\t\t>0\t\t- version %ld\n\n#### 200\n0\tbelong \t\t0x020c0108\tHP s200 pure executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c0107\tHP s200 executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010b\tHP s200 demand-load executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x40000000\tdynamically linked\n>8\tbelong\t\t&0x20000000\tdebuggable\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c0106\tHP s200 relocatable executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>6\tbeshort\t\t>0\t\t- highwater %d\n>8\tbelong\t\t&0x80000000\tsave fp regs\n>8\tbelong\t\t&0x20000000\tdebuggable\n>8\tbelong\t\t&0x10000000\tPIC\n\n0\tbelong \t\t0x020a0108\tHP s200 (2.x release) pure executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020a0107\tHP s200 (2.x release) executable\n>4\tbeshort\t\t>0\t\t- version %ld\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010e\tHP s200 shared library\n>4\tbeshort\t\t>0\t\t- version %ld\n>6\tbeshort\t\t>0\t\t- highwater %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong\t\t0x020c010d\tHP s200 dynamic load library\n>4\tbeshort\t\t>0\t\t- version %ld\n>6\tbeshort\t\t>0\t\t- highwater %d\n>36\tbelong\t\t>0\t\tnot stripped\n\n#### MISC\n0\tlong\t\t0x0000ff65\tHP old archive\n0\tlong\t\t0x020aff65\tHP s200 old archive\n0\tlong\t\t0x020cff65\tHP s200 old archive\n0\tlong\t\t0x0208ff65\tHP s500 old archive\n\n0\tlong\t\t0x015821a6\tHP core file\n\n0\tlong\t\t0x4da7eee8\tHP-WINDOWS font\n>8\tbyte\t\t>0\t\t- version %ld\n0\tstring\t\tBitmapfile\tHP Bitmapfile\n\n0\tstring\t\tIMGfile\tCIS \tcompimg HP Bitmapfile\n# XXX - see \"lif\"\n#0\tshort\t\t0x8000\t\tlif file\n0\tlong\t\t0x020c010c\tcompiled Lisp\n\n0\tstring\t\tmsgcat01\tHP NLS message catalog,\n>8\tlong\t\t>0\t\t%d messages\n\n# Summary: HP-48/49 calculator\n# Created by: phk@data.fls.dk\n# Modified by (1): AMAKAWA Shuhei <sa264@cam.ac.uk>\n# Modified by (2): Samuel Thibault <samuel.thibault@ens-lyon.org> (HP49 support)\n0\tstring\t\tHPHP\t\tHP\n>4\tstring\t\t48\t\t48 binary\n>4\tstring\t\t49\t\t49 binary\n>7\tbyte\t\t>64\t\t- Rev %c\n>8\tleshort\t\t0x2911\t\t(ADR)\n>8\tleshort\t\t0x2933\t\t(REAL)\n>8\tleshort\t\t0x2955\t\t(LREAL)\n>8\tleshort\t\t0x2977\t\t(COMPLX)\n>8\tleshort\t\t0x299d\t\t(LCOMPLX)\n>8\tleshort\t\t0x29bf\t\t(CHAR)\n>8\tleshort\t\t0x29e8\t\t(ARRAY)\n>8\tleshort\t\t0x2a0a\t\t(LNKARRAY)\n>8\tleshort\t\t0x2a2c\t\t(STRING)\n>8\tleshort\t\t0x2a4e\t\t(HXS)\n>8\tleshort\t\t0x2a74\t\t(LIST)\n>8\tleshort\t\t0x2a96\t\t(DIR)\n>8\tleshort\t\t0x2ab8\t\t(ALG)\n>8\tleshort\t\t0x2ada\t\t(UNIT)\n>8\tleshort\t\t0x2afc\t\t(TAGGED)\n>8\tleshort\t\t0x2b1e\t\t(GROB)\n>8\tleshort\t\t0x2b40\t\t(LIB)\n>8\tleshort\t\t0x2b62\t\t(BACKUP)\n>8\tleshort\t\t0x2b88\t\t(LIBDATA)\n>8\tleshort\t\t0x2d9d\t\t(PROG)\n>8\tleshort\t\t0x2dcc\t\t(CODE)\n>8\tleshort\t\t0x2e48\t\t(GNAME)\n>8\tleshort\t\t0x2e6d\t\t(LNAME)\n>8\tleshort\t\t0x2e92\t\t(XLIB)\n\n0\tstring\t\t%%HP:\t\tHP text\n>6\tstring\t\tT(0)\t\t- T(0)\n>6\tstring\t\tT(1)\t\t- T(1)\n>6\tstring\t\tT(2)\t\t- T(2)\n>6\tstring\t\tT(3)\t\t- T(3)\n>10\tstring\t\tA(D)\t\tA(D)\n>10\tstring\t\tA(R)\t\tA(R)\n>10\tstring\t\tA(G)\t\tA(G)\n>14\tstring\t\tF(.)\t\tF(.);\n>14\tstring\t\tF(,)\t\tF(,);\n\n\n# Summary: HP-38/39 calculator\n# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>\n0\tstring\t\tHP3\n>3\tstring\t\t8\t\tHP 38\n>3\tstring\t\t9\t\tHP 39\n>4\tstring\t\tBin\t\tbinary\n>4\tstring\t\tAsc\t\tASCII\n>7\tstring\t\tA\t\t(Directory List)\n>7\tstring\t\tB\t\t(Zaplet)\n>7\tstring\t\tC\t\t(Note)\n>7\tstring\t\tD\t\t(Program)\n>7\tstring\t\tE\t\t(Variable)\n>7\tstring\t\tF\t\t(List)\n>7\tstring\t\tG\t\t(Matrix)\n>7\tstring\t\tH\t\t(Library)\n>7\tstring\t\tI\t\t(Target List)\n>7\tstring\t\tJ\t\t(ASCII Vector specification)\n>7\tstring\t\tK\t\t(wildcard)\n\n# Summary: HP-38/39 calculator\n# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>\n0\tstring\t\tHP3\n>3\tstring\t\t8\t\tHP 38\n>3\tstring\t\t9\t\tHP 39\n>4\tstring\t\tBin\t\tbinary\n>4\tstring\t\tAsc\t\tASCII\n>7\tstring\t\tA\t\t(Directory List)\n>7\tstring\t\tB\t\t(Zaplet)\n>7\tstring\t\tC\t\t(Note)\n>7\tstring\t\tD\t\t(Program)\n>7\tstring\t\tE\t\t(Variable)\n>7\tstring\t\tF\t\t(List)\n>7\tstring\t\tG\t\t(Matrix)\n>7\tstring\t\tH\t\t(Library)\n>7\tstring\t\tI\t\t(Target List)\n>7\tstring\t\tJ\t\t(ASCII Vector specification)\n>7\tstring\t\tK\t\t(wildcard)\n\n# hpBSD magic numbers\n0\tbeshort\t\t200\t\thp200 (68010) BSD\n>2\tbeshort\t\t0407\t\timpure binary\n>2\tbeshort\t\t0410\t\tread-only binary\n>2\tbeshort\t\t0413\t\tdemand paged binary\n0\tbeshort\t\t300\t\thp300 (68020+68881) BSD\n>2\tbeshort\t\t0407\t\timpure binary\n>2\tbeshort\t\t0410\t\tread-only binary\n>2\tbeshort\t\t0413\t\tdemand paged binary\n#\n# From David Gero <dgero@nortelnetworks.com>\n# HP-UX 10.20 core file format from /usr/include/sys/core.h\n# Unfortunately, HP-UX uses corehead blocks without specifying the order\n# There are four we care about:\n#     CORE_KERNEL, which starts with the string \"HP-UX\"\n#     CORE_EXEC, which contains the name of the command\n#     CORE_PROC, which contains the signal number that caused the core dump\n#     CORE_FORMAT, which contains the version of the core file format (== 1)\n# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC\n# but we include all 6 variations of the order of the first 3, and\n# assume that PROC will always be last\n# Order 1: KERNEL, EXEC, FORMAT, PROC\n0x10\t\tstring\tHP-UX\n>0\t\tbelong\t2\n>>0xC\t\tbelong\t0x3C\n>>>0x4C\t\tbelong\t0x100\n>>>>0x58\tbelong\t0x44\n>>>>>0xA0\tbelong\t1\n>>>>>>0xAC\tbelong\t4\n>>>>>>>0xB0\tbelong\t1\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x90\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 2: KERNEL, FORMAT, EXEC, PROC\n>>>0x4C\t\tbelong\t1\n>>>>0x58\tbelong\t4\n>>>>>0x5C\tbelong\t1\n>>>>>>0x60\tbelong\t0x100\n>>>>>>>0x6C\tbelong\t0x44\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0xA4\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 3: FORMAT, KERNEL, EXEC, PROC\n0x24\t\tstring\tHP-UX\n>0\t\tbelong\t1\n>>0xC\t\tbelong\t4\n>>>0x10\t\tbelong\t1\n>>>>0x14\tbelong\t2\n>>>>>0x20\tbelong\t0x3C\n>>>>>>0x60\tbelong\t0x100\n>>>>>>>0x6C\tbelong\t0x44\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0xA4\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 4: EXEC, KERNEL, FORMAT, PROC\n0x64\t\tstring\tHP-UX\n>0\t\tbelong\t0x100\n>>0xC\t\tbelong\t0x44\n>>>0x54\t\tbelong\t2\n>>>>0x60\tbelong\t0x3C\n>>>>>0xA0\tbelong\t1\n>>>>>>0xAC\tbelong\t4\n>>>>>>>0xB0\tbelong\t1\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x44\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 5: FORMAT, EXEC, KERNEL, PROC\n0x78\t\tstring\tHP-UX\n>0\t\tbelong\t1\n>>0xC\t\tbelong\t4\n>>>0x10\t\tbelong\t1\n>>>>0x14\tbelong\t0x100\n>>>>>0x20\tbelong\t0x44\n>>>>>>0x68\tbelong\t2\n>>>>>>>0x74\tbelong\t0x3C\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x58\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n# Order 6: EXEC, FORMAT, KERNEL, PROC\n>0\t\tbelong\t0x100\n>>0xC\t\tbelong\t0x44\n>>>0x54\t\tbelong\t1\n>>>>0x60\tbelong\t4\n>>>>>0x64\tbelong\t1\n>>>>>>0x68\tbelong\t2\n>>>>>>>0x74\tbelong\t0x2C\n>>>>>>>>0xB4\tbelong\t4\t\tcore file\n>>>>>>>>>0x44\tstring\t>\\0\t\tfrom '%s'\n>>>>>>>>>0xC4\tbelong\t3\t\t- received SIGQUIT\n>>>>>>>>>0xC4\tbelong\t4\t\t- received SIGILL\n>>>>>>>>>0xC4\tbelong\t5\t\t- received SIGTRAP\n>>>>>>>>>0xC4\tbelong\t6\t\t- received SIGABRT\n>>>>>>>>>0xC4\tbelong\t7\t\t- received SIGEMT\n>>>>>>>>>0xC4\tbelong\t8\t\t- received SIGFPE\n>>>>>>>>>0xC4\tbelong\t10\t\t- received SIGBUS\n>>>>>>>>>0xC4\tbelong\t11\t\t- received SIGSEGV\n>>>>>>>>>0xC4\tbelong\t12\t\t- received SIGSYS\n>>>>>>>>>0xC4\tbelong\t33\t\t- received SIGXCPU\n>>>>>>>>>0xC4\tbelong\t34\t\t- received SIGXFSZ\n\n\n\n#------------------------------------------------------------------------------\n# $File: human68k,v 1.5 2009/09/19 16:28:09 christos Exp $\n# human68k:  file(1) magic for Human68k (X680x0 DOS) binary formats\n# Magic too short!\n#0\t\tstring\tHU\t\tHuman68k\n#>68\t\tstring\tLZX\t\tLZX compressed\n#>>72\t\tstring\t>\\0\t\t(version %s)\n#>(8.L+74)\tstring\tLZX\t\tLZX compressed\n#>>(8.L+78)\tstring\t>\\0\t\t(version %s)\n#>60\t\tbelong\t>0\t\tbinded\n#>(8.L+66)\tstring\t#HUPAIR\t\thupair\n#>0\t\tstring\tHU\t\tX executable\n#>(8.L+74)\tstring\t#LIBCV1\t\t- linked PD LIBC ver 1\n#>4\t\tbelong\t>0\t\t- base address 0x%x\n#>28\t\tbelong\t>0\t\tnot stripped\n#>32\t\tbelong\t>0\t\twith debug information\n#0\t\tbeshort\t0x601a\t\tHuman68k Z executable\n#0\t\tbeshort\t0x6000\t\tHuman68k object file\n#0\t\tbelong\t0xd1000000\tHuman68k ar binary archive\n#0\t\tbelong\t0xd1010000\tHuman68k ar ascii archive\n#0\t\tbeshort\t0x0068\t\tHuman68k lib archive\n#4\t\tstring\tLZX\t\tHuman68k LZX compressed\n#>8\t\tstring\t>\\0\t\t(version %s)\n#>4\t\tstring\tLZX\t\tR executable\n#2\t\tstring\t#HUPAIR\t\tHuman68k hupair R executable\n\n#------------------------------------------------------------------------------\n# $File: ibm370,v 1.8 2009/09/19 16:28:09 christos Exp $\n# ibm370:  file(1) magic for IBM 370 and compatibles.\n#\n# \"ibm370\" said that 0x15d == 0535 was \"ibm 370 pure executable\".\n# What the heck *is* \"USS/370\"?\n# AIX 4.1's \"/etc/magic\" has\n#\n#\t0\tshort\t\t0535\t\t370 sysV executable \n#\t>12\tlong\t\t>0\t\tnot stripped\n#\t>22\tshort\t\t>0\t\t- version %d\n#\t>30\tlong\t\t>0\t\t- 5.2 format\n#\t0\tshort\t\t0530\t\t370 sysV pure executable \n#\t>12\tlong\t\t>0\t\tnot stripped\n#\t>22\tshort\t\t>0\t\t- version %d\n#\t>30\tlong\t\t>0\t\t- 5.2 format\n#\n# instead of the \"USS/370\" versions of the same magic numbers.\n#\n0\tbeshort\t\t0537\t\t370 XA sysV executable \n>12\tbelong\t\t>0\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n>30\tbelong\t\t>0\t\t- 5.2 format\n0\tbeshort\t\t0532\t\t370 XA sysV pure executable \n>12\tbelong\t\t>0\t\tnot stripped\n>22\tbeshort\t\t>0\t\t- version %d\n>30\tbelong\t\t>0\t\t- 5.2 format\n0\tbeshort\t\t054001\t\t370 sysV pure executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t055001\t\t370 XA sysV pure executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t056401\t\t370 sysV executable\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t057401\t\t370 XA sysV executable\n>12\tbelong\t\t>0\t\tnot stripped\n0       beshort\t\t0531\t\tSVR2 executable (Amdahl-UTS)\n>12\tbelong\t\t>0\t\tnot stripped\n>24     belong\t\t>0\t\t- version %ld\n0\tbeshort\t\t0534\t\tSVR2 pure executable (Amdahl-UTS)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %ld\n0\tbeshort\t\t0530\t\tSVR2 pure executable (USS/370)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %ld\n0\tbeshort\t\t0535\t\tSVR2 executable (USS/370)\n>12\tbelong\t\t>0\t\tnot stripped\n>24\tbelong\t\t>0\t\t- version %ld\n\n#------------------------------------------------------------------------------\n# $File: ibm6000,v 1.9 2009/09/19 16:28:09 christos Exp $\n# ibm6000:  file(1) magic for RS/6000 and the RT PC.\n#\n0\tbeshort\t\t0x01df\t\texecutable (RISC System/6000 V3.1) or obj module\n>12\tbelong\t\t>0\t\tnot stripped\n# Breaks sun4 statically linked execs.\n#0      beshort\t\t0x0103\t\texecutable (RT Version 2) or obj module\n#>2\tbyte\t\t0x50\t\tpure\n#>28\tbelong\t\t>0\t\tnot stripped\n#>6\tbeshort\t\t>0\t\t- version %ld\n0\tbeshort\t\t0x0104\t\tshared library\n0\tbeshort\t\t0x0105\t\tctab data\n0\tbeshort\t\t0xfe04\t\tstructured file\n0\tstring\t\t0xabcdef\tAIX message catalog\n0\tbelong\t\t0x000001f9\tAIX compiled message catalog\n0\tstring\t\t\\<aiaff>\tarchive\n0\tstring\t\t\\<bigaf>\tarchive (big format)\n\n\n#------------------------------------------------------------------------------\n# $File: iff,v 1.12 2009/09/19 16:28:09 christos Exp $\n# iff:\tfile(1) magic for Interchange File Format (see also \"audio\" & \"images\")\n#\n# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic\n# Arts for file interchange.  It has also been used by Apple, SGI, and\n# especially Commodore-Amiga.\n#\n# IFF files begin with an 8 byte FORM header, followed by a 4 character\n# FORM type, which is followed by the first chunk in the FORM.\n\n0\tstring\t\tFORM\t\tIFF data\n#>4\tbelong\t\tx\t\t\\b, FORM is %d bytes long\n# audio formats\n>8\tstring\t\tAIFF\t\t\\b, AIFF audio\n!:mime\taudio/x-aiff\n>8\tstring\t\tAIFC\t\t\\b, AIFF-C compressed audio\n!:mime\taudio/x-aiff\n>8\tstring\t\t8SVX\t\t\\b, 8SVX 8-bit sampled sound voice\n!:mime\taudio/x-aiff\n>8\tstring\t\t16SV\t\t\\b, 16SV 16-bit sampled sound voice\n>8\tstring\t\tSAMP\t\t\\b, SAMP sampled audio\n>8\tstring\t\tMAUD\t\t\\b, MAUD MacroSystem audio\n>8\tstring\t\tSMUS\t\t\\b, SMUS simple music\n>8\tstring\t\tCMUS\t\t\\b, CMUS complex music\n# image formats\n>8\tstring\t\tILBMBMHD\t\\b, ILBM interleaved image\n>>20\tbeshort\t\tx\t\t\\b, %d x\n>>22\tbeshort\t\tx\t\t%d\n>8\tstring\t\tRGBN\t\t\\b, RGBN 12-bit RGB image\n>8\tstring\t\tRGB8\t\t\\b, RGB8 24-bit RGB image\n>8\tstring\t\tDEEP\t\t\\b, DEEP TVPaint/XiPaint image\n>8\tstring\t\tDR2D\t\t\\b, DR2D 2-D object\n>8\tstring\t\tTDDD\t\t\\b, TDDD 3-D rendering\n>8\tstring\t\tLWOB\t\t\\b, LWOB 3-D object\n>8\tstring\t\tLWO2\t\t\\b, LWO2 3-D object, v2\n>8\tstring\t\tLWLO\t\t\\b, LWLO 3-D layered object\n>8\tstring\t\tREAL\t\t\\b, REAL Real3D rendering\n>8\tstring\t\tMC4D\t\t\\b, MC4D MaxonCinema4D rendering\n>8\tstring\t\tANIM\t\t\\b, ANIM animation\n>8\tstring\t\tYAFA\t\t\\b, YAFA animation\n>8\tstring\t\tSSA\\ \t\t\\b, SSA super smooth animation\n>8\tstring\t\tACBM\t\t\\b, ACBM continuous image\n>8\tstring\t\tFAXX\t\t\\b, FAXX fax image\n# other formats\n>8\tstring\t\tFTXT\t\t\\b, FTXT formatted text\n>8\tstring\t\tCTLG\t\t\\b, CTLG message catalog\n>8\tstring\t\tPREF\t\t\\b, PREF preferences\n>8\tstring\t\tDTYP\t\t\\b, DTYP datatype description\n>8\tstring\t\tPTCH\t\t\\b, PTCH binary patch\n>8\tstring\t\tAMFF\t\t\\b, AMFF AmigaMetaFile format\n>8\tstring\t\tWZRD\t\t\\b, WZRD StormWIZARD resource\n>8\tstring\t\tDOC\\ \t\t\\b, DOC desktop publishing document\n\n# These go at the end of the iff rules\n#\n# I don't see why these might collide with anything else.\n#\n# Interactive Fiction related formats\n#\n>8\tstring\t\tIFRS\t\t\\b, Blorb Interactive Fiction\n>>24\tstring\t\tExec\t\twith executable chunk\n>8\tstring          IFZS\t\t\\b, Z-machine or Glulx saved game file (Quetzal)\n\n#------------------------------------------------------------------------------\n# $File: images,v 1.64 2009/12/06 00:38:50 christos Exp $\n# images:  file(1) magic for image formats (see also \"iff\", and \"c-lang\" for\n# XPM bitmaps)\n#\n# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),\n# additions by janl@ifi.uio.no as well as others. Jan also suggested\n# merging several one- and two-line files into here.\n#\n# little magic: PCX (first byte is 0x0a)\n\n# Targa - matches `povray', `ppmtotga' and `xv' outputs\n# by Philippe De Muyter <phdm@macqel.be>\n# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11\n# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise\n# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs\n# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)\n# `tgatoppm' recognizes a superset (Index may be anything)\n1\tbelong&0xfff7ffff\t0x01010000\tTarga image data - Map\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%hd x\n>14\tleshort\t\t\t>0\t\t%hd\n1\tbelong&0xfff7ffff\t0x00020000\tTarga image data - RGB\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%hd x\n>14\tleshort\t\t\t>0\t\t%hd\n1\tbelong&0xfff7ffff\t0x00030000\tTarga image data - Mono\n>2\tbyte&8\t\t\t8\t\t- RLE\n>12\tleshort\t\t\t>0\t\t%hd x\n>14\tleshort\t\t\t>0\t\t%hd\n\n# PBMPLUS images\n# The next byte following the magic is always whitespace.\n0\tsearch/1\tP1\t\tNetpbm PBM image text\n!:mime\timage/x-portable-bitmap\n0\tsearch/1\tP2\t\tNetpbm PGM image text\n!:mime\timage/x-portable-greymap\n0\tsearch/1\tP3\t\tNetpbm PPM image text\n!:mime\timage/x-portable-pixmap\n0\tstring\t\tP4\t\tNetpbm PBM \"rawbits\" image data\n!:mime\timage/x-portable-bitmap\n0\tstring\t\tP5\t\tNetpbm PGM \"rawbits\" image data\n!:mime\timage/x-portable-greymap\n0\tstring\t\tP6\t\tNetpbm PPM \"rawbits\" image data\n!:mime\timage/x-portable-pixmap\n0\tstring\t\tP7\t\tNetpbm PAM image file\n!:mime\timage/x-portable-pixmap\n\n# From: bryanh@giraffe-data.com (Bryan Henderson)\n0\tstring\t\t\\117\\072\tSolitaire Image Recorder format\n>4\tstring\t\t\\013\t\tMGI Type 11\n>4\tstring\t\t\\021\t\tMGI Type 17\n0\tstring\t\t.MDA\t\tMicroDesign data\n>21\tbyte\t\t48\t\tversion 2\n>21\tbyte\t\t51\t\tversion 3\n0\tstring\t\t.MDP\t\tMicroDesign page data\n>21\tbyte\t\t48\t\tversion 2\n>21\tbyte\t\t51\t\tversion 3\n\n# NIFF (Navy Interchange File Format, a modification of TIFF) images\n# [GRR:  this *must* go before TIFF]\n0\tstring\t\tIIN1\t\tNIFF image data\n!:mime\timage/x-niff\n\n# Canon RAW version 1 (CRW) files are a type of Canon Image File Format\n# (CIFF) file. These are apparently all little-endian.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html\n0\tstring\t\tII\\x1a\\0\\0\\0HEAPCCDR\tCanon CIFF raw image data\n!:mime\timage/x-canon-crw\n>16\tleshort\t\tx\t\\b, version %d.\n>14\tleshort\t\tx\t\\b%d\n\n# Canon RAW version 2 (CR2) files are a kind of TIFF with an extra magic\n# number. Put this above the TIFF test to make sure we detect them.\n# These are apparently all little-endian.\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://libopenraw.freedesktop.org/wiki/Canon_CR2\n0\tstring\t\tII\\x2a\\0\\x10\\0\\0\\0CR\tCanon CR2 raw image data\n!:mime\timage/x-canon-cr2\n>10\tbyte\t\tx\t\\b, version %d.\n>11\tbyte\t\tx\t\\b%d\n\n# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)\n# The second word of TIFF files is the TIFF version number, 42, which has\n# never changed.  The TIFF specification recommends testing for it.\n0\tstring\t\tMM\\x00\\x2a\tTIFF image data, big-endian\n!:mime\timage/tiff\n0\tstring\t\tII\\x2a\\x00\tTIFF image data, little-endian\n!:mime\timage/tiff\n\n# PNG [Portable Network Graphics, or \"PNG's Not GIF\"] images\n# (Greg Roelofs, newt@uchicago.edu)\n# (Albert Cahalan, acahalan@cs.uml.edu)\n#\n# 137 P N G \\r \\n ^Z \\n [4-byte length] H E A D [HEAD data] [HEAD crc] ...\n#\n0\tstring\t\t\\x89PNG\\x0d\\x0a\\x1a\\x0a\t\tPNG image data\n!:mime\timage/png\n>16\tbelong\t\tx\t\t\\b, %ld x\n>20\tbelong\t\tx\t\t%ld,\n>24\tbyte\t\tx\t\t%d-bit\n>25\tbyte\t\t0\t\tgrayscale,\n>25\tbyte\t\t2\t\t\\b/color RGB,\n>25\tbyte\t\t3\t\tcolormap,\n>25\tbyte\t\t4\t\tgray+alpha,\n>25\tbyte\t\t6\t\t\\b/color RGBA,\n#>26\tbyte\t\t0\t\tdeflate/32K,\n>28\tbyte\t\t0\t\tnon-interlaced\n>28\tbyte\t\t1\t\tinterlaced\n\n# possible GIF replacements; none yet released!\n# (Greg Roelofs, newt@uchicago.edu)\n#\n# GRR 950115:  this was mine (\"Zip GIF\"):\n0\tstring\t\tGIF94z\t\tZIF image (GIF+deflate alpha)\n!:mime\timage/x-unknown\n#\n# GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):\n#\t\t\t\t\t\n0\tstring\t\tFGF95a\t\tFGF image (GIF+deflate beta)\n!:mime\timage/x-unknown\n#\n# GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal\n# (best; not yet implemented):\n#\t\t\t\t\t\n0\tstring\t\tPBF\t\tPBF image (deflate compression)\n!:mime\timage/x-unknown\n\n# GIF\n0\tstring\t\tGIF8\t\tGIF image data\n!:mime\timage/gif\n!:apple\t8BIMGIFf\n>4\tstring\t\t7a\t\t\\b, version 8%s,\n>4\tstring\t\t9a\t\t\\b, version 8%s,\n>6\tleshort\t\t>0\t\t%hd x\n>8\tleshort\t\t>0\t\t%hd\n#>10\tbyte\t\t&0x80\t\tcolor mapped,\n#>10\tbyte&0x07\t=0x00\t\t2 colors\n#>10\tbyte&0x07\t=0x01\t\t4 colors\n#>10\tbyte&0x07\t=0x02\t\t8 colors\n#>10\tbyte&0x07\t=0x03\t\t16 colors\n#>10\tbyte&0x07\t=0x04\t\t32 colors\n#>10\tbyte&0x07\t=0x05\t\t64 colors\n#>10\tbyte&0x07\t=0x06\t\t128 colors\n#>10\tbyte&0x07\t=0x07\t\t256 colors\n\n# ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,\n# 1 plane, no encoding.\n0\tstring\t\t\\361\\0\\100\\273\tCMU window manager raster image data\n>4\tlelong\t\t>0\t\t%d x\n>8\tlelong\t\t>0\t\t%d,\n>12\tlelong\t\t>0\t\t%d-bit\n\n# Magick Image File Format\n0\tstring\t\tid=ImageMagick\tMIFF image data\n\n# Artisan\n0\tlong\t\t1123028772\tArtisan image data\n>4\tlong\t\t1\t\t\\b, rectangular 24-bit\n>4\tlong\t\t2\t\t\\b, rectangular 8-bit with colormap\n>4\tlong\t\t3\t\t\\b, rectangular 32-bit (24-bit with matte)\n\n# FIG (Facility for Interactive Generation of figures), an object-based format\n0\tsearch/1\t#FIG\t\tFIG image text\n>5\tstring\t\tx\t\t\\b, version %.3s\n\n# PHIGS\n0\tstring\t\tARF_BEGARF\t\tPHIGS clear text archive\n0\tstring\t\t@(#)SunPHIGS\t\tSunPHIGS\n# version number follows, in the form m.n\n>40\tstring\t\tSunBin\t\t\tbinary\n>32\tstring\t\tarchive\t\t\tarchive\n\n# GKS (Graphics Kernel System)\n0\tstring\t\tGKSM\t\tGKS Metafile\n>24\tstring\t\tSunGKS\t\t\\b, SunGKS\n\n# CGM image files\n0\tstring\t\tBEGMF\t\tclear text Computer Graphics Metafile\n\n# MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)\n0\tstring\tyz\tMGR bitmap, modern format, 8-bit aligned\n0\tstring\tzz\tMGR bitmap, old format, 1-bit deep, 16-bit aligned\n0\tstring\txz\tMGR bitmap, old format, 1-bit deep, 32-bit aligned\n0\tstring\tyx\tMGR bitmap, modern format, squeezed\n\n# Fuzzy Bitmap (FBM) images\n0\tstring\t\t%bitmap\\0\tFBM image data\n>30\tlong\t\t0x31\t\t\\b, mono\n>30\tlong\t\t0x33\t\t\\b, color\n\n# facsimile data\n1\tstring\t\tPC\\ Research,\\ Inc\tgroup 3 fax data\n>29\tbyte\t\t0\t\t\\b, normal resolution (204x98 DPI)\n>29\tbyte\t\t1\t\t\\b, fine resolution (204x196 DPI)\n# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>\n0\tstring\t\tSfff\t\tstructured fax file\n\n\n# PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt@uchicago.edu)\n0\tstring\t\tBM\n>14\tleshort\t\t12\t\tPC bitmap, OS/2 1.x format\n!:mime\timage/x-ms-bmp\n>>18\tleshort\t\tx\t\t\\b, %d x\n>>20\tleshort\t\tx\t\t%d\n>14\tleshort\t\t64\t\tPC bitmap, OS/2 2.x format\n!:mime\timage/x-ms-bmp\n>>18\tleshort\t\tx\t\t\\b, %d x\n>>20\tleshort\t\tx\t\t%d\n>14\tleshort\t\t40\t\tPC bitmap, Windows 3.x format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n>14\tleshort\t\t128\t\tPC bitmap, Windows NT/2000 format\n!:mime\timage/x-ms-bmp\n>>18\tlelong\t\tx\t\t\\b, %d x\n>>22\tlelong\t\tx\t\t%d x\n>>28\tleshort\t\tx\t\t%d\n# Too simple - MPi\n#0\tstring\t\tIC\t\tPC icon data\n#0\tstring\t\tPI\t\tPC pointer image data\n#0\tstring\t\tCI\t\tPC color icon data\n#0\tstring\t\tCP\t\tPC color pointer image data\n# Conflicts with other entries [BABYL]\n#0\tstring\t\tBA\t\tPC bitmap array data\n\n# XPM icons (Greg Roelofs, newt@uchicago.edu)\n# note possible collision with C/REXX entry in c-lang; currently commented out\n0\tsearch/1\t/*\\ XPM\\ */\tX pixmap image text\n\n# Utah Raster Toolkit RLE images (janl@ifi.uio.no)\n0\tleshort\t\t0xcc52\t\tRLE image data,\n>6\tleshort\t\tx\t\t%d x\n>8\tleshort\t\tx\t\t%d\n>2\tleshort\t\t>0\t\t\\b, lower left corner: %d\n>4\tleshort\t\t>0\t\t\\b, lower right corner: %d\n>10\tbyte&0x1\t=0x1\t\t\\b, clear first\n>10\tbyte&0x2\t=0x2\t\t\\b, no background\n>10\tbyte&0x4\t=0x4\t\t\\b, alpha channel\n>10\tbyte&0x8\t=0x8\t\t\\b, comment\n>11\tbyte\t\t>0\t\t\\b, %d color channels\n>12\tbyte\t\t>0\t\t\\b, %d bits per pixel\n>13\tbyte\t\t>0\t\t\\b, %d color map channels\n\n# image file format (Robert Potter, potter@cs.rochester.edu)\n0\tstring\t\tImagefile\\ version-\tiff image data\n# this adds the whole header (inc. version number), informative but longish\n>10\tstring\t\t>\\0\t\t%s\n\n# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tbelong\t\t0x59a66a95\tSun raster image data\n>4\tbelong\t\t>0\t\t\\b, %d x\n>8\tbelong\t\t>0\t\t%d,\n>12\tbelong\t\t>0\t\t%d-bit,\n#>16\tbelong\t\t>0\t\t%d bytes long,\n>20\tbelong\t\t0\t\told format,\n#>20\tbelong\t\t1\t\tstandard,\n>20\tbelong\t\t2\t\tcompressed,\n>20\tbelong\t\t3\t\tRGB,\n>20\tbelong\t\t4\t\tTIFF,\n>20\tbelong\t\t5\t\tIFF,\n>20\tbelong\t\t0xffff\t\treserved for testing,\n>24\tbelong\t\t0\t\tno colormap\n>24\tbelong\t\t1\t\tRGB colormap\n>24\tbelong\t\t2\t\traw colormap\n#>28\tbelong\t\t>0\t\tcolormap is %d bytes long\n\n# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)\n#\n# See\n#\thttp://reality.sgi.com/grafica/sgiimage.html\n#\n0\tbeshort\t\t474\t\tSGI image data\n#>2\tbyte\t\t0\t\t\\b, verbatim\n>2\tbyte\t\t1\t\t\\b, RLE\n#>3\tbyte\t\t1\t\t\\b, normal precision\n>3\tbyte\t\t2\t\t\\b, high precision\n>4\tbeshort\t\tx\t\t\\b, %d-D\n>6\tbeshort\t\tx\t\t\\b, %d x\n>8\tbeshort\t\tx\t\t%d\n>10\tbeshort\t\tx\t\t\\b, %d channel\n>10\tbeshort\t\t!1\t\t\\bs\n>80\tstring\t\t>0\t\t\\b, \"%s\"\n\n0\tstring\t\tIT01\t\tFIT image data\n>4\tbelong\t\tx\t\t\\b, %d x\n>8\tbelong\t\tx\t\t%d x\n>12\tbelong\t\tx\t\t%d\n#\n0\tstring\t\tIT02\t\tFIT image data\n>4\tbelong\t\tx\t\t\\b, %d x\n>8\tbelong\t\tx\t\t%d x\n>12\tbelong\t\tx\t\t%d\n#\n2048\tstring\t\tPCD_IPI\t\tKodak Photo CD image pack file\n>0xe02\tbyte&0x03\t0x00\t\t, landscape mode\n>0xe02\tbyte&0x03\t0x01\t\t, portrait mode\n>0xe02\tbyte&0x03\t0x02\t\t, landscape mode\n>0xe02\tbyte&0x03\t0x03\t\t, portrait mode\n0\tstring\t\tPCD_OPA\t\tKodak Photo CD overview pack file\n\n# FITS format.  Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>\n# FITS is the Flexible Image Transport System, the de facto standard for\n# data and image transfer, storage, etc., for the astronomical community.\n# (FITS floating point formats are big-endian.)\n0\tstring\tSIMPLE\\ \\ =\tFITS image data\n>109\tstring\t8\t\t\\b, 8-bit, character or unsigned binary integer\n>108\tstring\t16\t\t\\b, 16-bit, two's complement binary integer\n>107\tstring\t\\ 32\t\t\\b, 32-bit, two's complement binary integer\n>107\tstring\t-32\t\t\\b, 32-bit, floating point, single precision\n>107\tstring\t-64\t\t\\b, 64-bit, floating point, double precision\n\n# other images\n0\tstring\tThis\\ is\\ a\\ BitMap\\ file\tLisp Machine bit-array-file\n\n# From SunOS 5.5.1 \"/etc/magic\" - appeared right before Sun raster image\n# stuff.\n#\n0\tbeshort\t\t0x1010\t\tPEX Binary Archive\n\n# DICOM medical imaging data\n128\tstring\tDICM\t\t\tDICOM medical imaging data\n!:mime\tapplication/dicom\n\n# XWD - X Window Dump file.\n#   As described in /usr/X11R6/include/X11/XWDFile.h\n#   used by the xwd program.\n#   Bradford Castalia, idaeim, 1/01\n#   updated by Adam Buchbinder, 2/09\n# The following assumes version 7 of the format; the first long is the length\n# of the header, which is at least 25 4-byte longs, and the one at offset 8\n# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,\n# which is a maximum of 32.\n0\tbelong\t>100\n>8\tbelong\t<3\n>>12\tbelong\t<33\n>>>4\tbelong\t7\t\t\tXWD X Window Dump image data\n!:mime\timage/x-xwindowdump\n>>>>100\tstring\t>\\0\t\t\t\\b, \"%s\"\n>>>>16\tbelong\tx\t\t\t\\b, %dx\n>>>>20\tbelong\tx\t\t\t\\b%dx\n>>>>12\tbelong\tx\t\t\t\\b%d\n\n# PDS - Planetary Data System\n#   These files use Parameter Value Language in the header section.\n#   Unfortunately, there is no certain magic, but the following\n#   strings have been found to be most likely.\n0\tstring\tNJPL1I00\t\tPDS (JPL) image data\n2\tstring\tNJPL1I\t\t\tPDS (JPL) image data\n0\tstring\tCCSD3ZF\t\t\tPDS (CCSD) image data\n2\tstring\tCCSD3Z\t\t\tPDS (CCSD) image data\n0\tstring\tPDS_\t\t\tPDS image data\n0\tstring\tLBLSIZE=\t\tPDS (VICAR) image data\n\n# pM8x: ATARI STAD compressed bitmap format\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001\n# p M 8 5/6 xx yy zz data...\n# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.\n# bytes either run horizontally (pM85) or vertically (pM86). yy is the\n# most frequent byte, xx and zz are runlength escape codes, where xx is\n# used for runs of yy.\n#\n0\tstring\tpM85\t\tAtari ST STAD bitmap image data (hor)\n>5\tbyte\t0x00\t\t(white background)\n>5\tbyte\t0xFF\t\t(black background)\n0\tstring\tpM86\t\tAtari ST STAD bitmap image data (vert)\n>5\tbyte\t0x00\t\t(white background)\n>5\tbyte\t0xFF\t\t(black background)\n\n# GÃ¼rkan SengÃ¼n <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n# http://www.atarimax.com/jindroush.atari.org/afmtatr.html\n0\tleshort\t0x0296\t\tAtari ATR image\n\n# XXX:\n# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other\n# magic.\n# SGI RICE image file <mpruett@sgi.com>\n#0\tbeshort\t0x5249\t\tRICE image\n#>2\tbeshort\tx\t\tv%d\n#>4\tbeshort\tx\t\t(%d x\n#>6\tbeshort\tx\t\t%d)\n#>8\tbeshort\t0\t\t8 bit\n#>8\tbeshort\t1\t\t10 bit\n#>8\tbeshort\t2\t\t12 bit\n#>8\tbeshort\t3\t\t13 bit\n#>10\tbeshort\t0\t\t4:2:2\n#>10\tbeshort\t1\t\t4:2:2:4\n#>10\tbeshort\t2\t\t4:4:4\n#>10\tbeshort\t3\t\t4:4:4:4\n#>12\tbeshort\t1\t\tRGB\n#>12\tbeshort\t2\t\tCCIR601\n#>12\tbeshort\t3\t\tRP175\n#>12\tbeshort\t4\t\tYUV\n\n#------------------------------------------------------------------------------\n#\n# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image  file format\n# for the EPOC operating system, which is used with PDAs like those from Psion\n#\n# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description\n# of various EPOC file formats\n\n0\tstring \\x37\\x00\\x00\\x10\\x42\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x39\\x64\\x39\\x47 EPOC MBM image file\n\n# PCX image files\n# From: Dan Fandrich <dan@coneharvesters.com>\n0\tbeshort\t\t0x0a00\tPCX ver. 2.5 image data\n0\tbeshort\t\t0x0a02\tPCX ver. 2.8 image data, with palette\n0\tbeshort\t\t0x0a03\tPCX ver. 2.8 image data, without palette\n0\tbeshort\t\t0x0a04\tPCX for Windows image data\n0\tbeshort\t\t0x0a05\tPCX ver. 3.0 image data\n>4\tleshort\t\tx      bounding box [%hd,\n>6\tleshort\t\tx      %hd] -\n>8\tleshort\t\tx      [%hd,\n>10\tleshort\t\tx      %hd],\n>65\tbyte\t\t>1\t%d planes each of\n>3\tbyte\t\tx\t%hhd-bit\n>68\tbyte\t\t0\timage,\n>68\tbyte\t\t1\tcolour,\n>68\tbyte\t\t2\tgrayscale,\n>68\tbyte\t\t>2\timage,\n>68\tbyte\t\t<0\timage,\n>12\tleshort\t\t>0\t%hd x\n>>14\tleshort\t\tx      %hd dpi,\n>2\tbyte\t\t0\tuncompressed\n>2\tbyte\t\t1\tRLE compressed\n\n# Adobe Photoshop\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0\tstring\t\t8BPS Adobe Photoshop Image\n!:mime\timage/vnd.adobe.photoshop\n>4   beshort 2 (PSB)\n>18  belong  x \\b, %d x\n>14  belong  x %d,\n>24  beshort 0 bitmap\n>24  beshort 1 grayscale\n>>12 beshort 2 with alpha\n>24  beshort 2 indexed\n>24  beshort 3 RGB\n>>12 beshort 4 \\bA\n>24  beshort 4 CMYK\n>>12 beshort 5 \\bA\n>24  beshort 7 multichannel\n>24  beshort 8 duotone\n>24  beshort 9 lab\n>12  beshort > 1\n>>12  beshort x \\b, %dx\n>12  beshort 1 \\b,\n>22  beshort x %d-bit channel\n>12  beshort > 1 \\bs\n\n# XV thumbnail indicator (ThMO)\n0\tstring\t\tP7\\ 332\t\tXV thumbnail image data\n\n# NITF is defined by United States MIL-STD-2500A\n0\tstring\tNITF\tNational Imagery Transmission Format\n>25\tstring\t>\\0\tdated %.14s\n\n# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)\n0\tbelong\t\t0x00010008\tGEM Image data\n>12\tbeshort\t\tx\t\t%d x\n>14\tbeshort\t\tx\t\t%d,\n>4\tbeshort\t\tx\t\t%d planes,\n>8\tbeshort\t\tx\t\t%d x\n>10\tbeshort\t\tx\t\t%d pixelsize\n\n# GEM Metafile (Wolfram Kleff)\n0\tlelong\t\t0x0018FFFF\tGEM Metafile data\n>4\tleshort\t\tx\t\tversion %d\n\n#\n# SMJPEG. A custom Motion JPEG format used by Loki Entertainment\n# Software Torbjorn Andersson <d91tan@Update.UU.SE>.\n#\n0\tstring\t\\0\\nSMJPEG\tSMJPEG\n>8\tbelong\tx\t\t%d.x data\n# According to the specification you could find any number of _TXT\n# headers here, but I can't think of any way of handling that. None of\n# the SMJPEG files I tried it on used this feature. Even if such a\n# file is encountered the output should still be reasonable.\n>16\tstring\t_SND\t\t\\b,\n>>24\tbeshort\t>0\t\t%d Hz\n>>26\tbyte\t8\t\t8-bit\n>>26\tbyte\t16\t\t16-bit\n>>28\tstring\tNONE\t\tuncompressed\n# >>28\tstring\tAPCM\t\tADPCM compressed\n>>27\tbyte\t1\t\tmono\n>>28\tbyte\t2\t\tstereo\n# Help! Isn't there any way to avoid writing this part twice?\n>>32\tstring\t_VID\t\t\\b,\n# >>>48\tstring\tJFIF\t\tJPEG\n>>>40\tbelong\t>0\t\t%d frames\n>>>44\tbeshort\t>0\t\t(%d x\n>>>46\tbeshort\t>0\t\t%d)\n>16\tstring\t_VID\t\t\\b,\n# >>32\tstring\tJFIF\t\tJPEG\n>>24\tbelong\t>0\t\t%d frames\n>>28\tbeshort\t>0\t\t(%d x\n>>30\tbeshort\t>0\t\t%d)\n\n0\tstring\tPaint\\ Shop\\ Pro\\ Image\\ File\tPaint Shop Pro Image File\n\n# \"thumbnail file\" (icon)\n# descended from \"xv\", but in use by other applications as well (Wolfram Kleff)\n0       string          P7\\ 332         XV \"thumbnail file\" (icon) data\n\n# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)\n0       string          KiSS            KISS/GS\n>4      byte            16              color\n>>5     byte            x               %d bit\n>>8     leshort         x               %d colors\n>>10    leshort         x               %d groups\n>4      byte            32              cell\n>>5     byte            x               %d bit\n>>8     leshort         x               %d x\n>>10    leshort         x               %d\n>>12    leshort         x               +%d\n>>14    leshort         x               +%d\n\n# Webshots (www.webshots.com), by John Harrison\n0       string          C\\253\\221g\\230\\0\\0\\0 Webshots Desktop .wbz file\n\n# Hercules DASD image files\n# From Jan Jaeger <jj@septa.nl>\n0       string  CKD_P370        Hercules CKD DASD image file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n0       string  CKD_C370        Hercules compressed CKD DASD image file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n0       string  CKD_S370        Hercules CKD DASD shadow file\n>8      long    x               \\b, %d heads per cylinder\n>12     long    x               \\b, track size %d bytes\n>16     byte    x               \\b, device type 33%2.2X\n\n# Squeak images and programs - etoffi@softhome.net\n0\tstring\t\t\\146\\031\\0\\0\tSqueak image data\n0\tsearch/1\t'From\\040Squeak\tSqueak program text\n\n# partimage: file(1) magic for PartImage files (experimental, incomplete)\n# Author: Hans-Joachim Baader <hjb@pro-linux.de>\n0\t\tstring\tPaRtImAgE-VoLuMe\tPartImage\n>0x0020\t\tstring\t0.6.1\t\tfile version %s\n>>0x0060\tlelong\t>-1\t\tvolume %ld\n#>>0x0064 8 byte identifier\n#>>0x007c reserved\n>>0x0200\tstring\t>\\0\t\ttype %s\n>>0x1400\tstring\t>\\0\t\tdevice %s,\n>>0x1600\tstring\t>\\0\t\toriginal filename %s,\n# Some fields omitted\n>>0x2744\tlelong\t0\t\tnot compressed\n>>0x2744\tlelong\t1\t\tgzip compressed\n>>0x2744\tlelong\t2\t\tbzip2 compressed\n>>0x2744\tlelong\t>2\t\tcompressed with unknown algorithm\n>0x0020\t\tstring\t>0.6.1\t\tfile version %s\n>0x0020\t\tstring\t<0.6.1\t\tfile version %s\n\n# DCX is multi-page PCX, using a simple header of up to 1024\n# offsets for the respective PCX components.\n# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>\n0\tlelong\t987654321\tDCX multi-page PCX image data\n\n# Simon Walton <simonw@matteworld.com>\n# Kodak Cineon format for scanned negatives\n# http://www.kodak.com/US/en/motion/support/dlad/\n0\tlelong  0xd75f2a80\tCineon image data\n>200\tbelong  >0\t\t\\b, %ld x\n>204\tbelong  >0\t\t%ld\n\n\n# Bio-Rad .PIC is an image format used by microscope control systems\n# and related image processing software used by biologists.\n# From: Vebjorn Ljosa <vebjorn@ljosa.com>\n# BOOL values are two-byte integers; use them to rule out false positives.\n# http://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt\n# Samples: http://www.loci.wisc.edu/software/sample-data\n14\tleshort <2\n>62\tleshort <2\n>>54\tleshort 12345\t\tBio-Rad .PIC Image File\n>>>0\tleshort >0\t\t%hd x\n>>>2\tleshort >0\t\t%hd,\n>>>4\tleshort =1\t\t1 image in file\n>>>4\tleshort >1\t\t%hd images in file\n\n# From Jan \"Yenya\" Kasprzak <kas@fi.muni.cz>\n# The description of *.mrw format can be found at\n# http://www.dalibor.cz/minolta/raw_file_format.htm\n0\tstring\t\\000MRM\t\t\tMinolta Dimage camera raw image data\n\n# Summary: DjVu image / document\n# Extension: .djvu\n# Reference: http://djvu.org/docs/DjVu3Spec.djvu\n# Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>\n# Modified by (1): Abel Cheung <abelcheung@gmail.com>\n0\tstring\tAT&TFORM\n>12\tstring\tDJVM\t\tDjVu multiple page document\n!:mime\timage/vnd.djvu\n>12\tstring\tDJVU\t\tDjVu image or single page document\n!:mime\timage/vnd.djvu\n>12\tstring\tDJVI\t\tDjVu shared document\n!:mime\timage/vnd.djvu\n>12\tstring\tTHUM\t\tDjVu page thumbnails\n!:mime\timage/vnd.djvu\n\n\n# From Marc Espie\n0\tlelong\t20000630\t\tOpenEXR image data\n\n# From: Tom Hilinski <tom.hilinski@comcast.net>\n# http://www.unidata.ucar.edu/packages/netcdf/\n0\tstring\tCDF\\001\t\t\tNetCDF Data Format data\n\n#-----------------------------------------------------------------------\n# Hierarchical Data Format, used to facilitate scientific data exchange\n# specifications at http://hdf.ncsa.uiuc.edu/\n0\tbelong\t0x0e031301\tHierarchical Data Format (version 4) data\n!:mime\tapplication/x-hdf\n0\tstring\t\\211HDF\\r\\n\\032\tHierarchical Data Format (version 5) data\n!:mime\tapplication/x-hdf\n\n# From: Tobias Burnus <burnus@net-b.de>\n# Xara (for a while: Corel Xara) is a graphic package, see\n# http://www.xara.com/ for Windows and as GPL application for Linux\n0\tstring\tXARA\\243\\243\tXara graphics file\n\n# http://www.cartesianinc.com/Tech/\n0\tstring\tCPC\\262\t\tCartesian Perceptual Compression image\n!:mime\timage/x-cpi\n\n# From Albert Cahalan <acahalan@gmail.com>\n# puredigital used it for the CVS disposable camcorder\n#8       lelong  4       ZBM bitmap image data\n#>4      leshort x       %u x\n#>6      leshort x       %u\n\n# From Albert Cahalan <acahalan@gmail.com>\n# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons\n0       string C565     OLPC firmware icon image data\n>4      leshort x       %u x\n>6      leshort x       %u\n\n# Applied Images - Image files from Cytovision\n# Gustavo Junior Alves <gjalves@gjalves.com.br>\n0\tstring\t\\xce\\xda\\xde\\xfa\tCytovision Metaphases file\n0\tstring\t\\xed\\xad\\xef\\xac\tCytovision Karyotype file\n0\tstring\t\\x0b\\x00\\x03\\x00\tCytovision FISH Probe file\n0\tstring\t\\xed\\xfe\\xda\\xbe\tCytovision FLEX file\n0\tstring\t\\xed\\xab\\xed\\xfe\tCytovision FLEX file\n0\tstring\t\\xad\\xfd\\xea\\xad\tCytovision RATS file\n\n# Wavelet Scalar Quantization format used in gray-scale fingerprint images\n# From Tano M Fotang <mfotang@quanteq.com>\n0\tstring\t\\xff\\xa0\\xff\\xa8\\x00\tWavelet Scalar Quantization image data\n\n# JPEG 2000 Code Stream Bitmap\n# From Petr Splichal <psplicha@redhat.com>\n0\tstring\t\\xFF\\x4F\\xFF\\x51\\x00\tJPEG-2000 Code Stream Bitmap data\n\n# Type:\tUlead Photo Explorer5 (.pe5)\n# URL:\thttp://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)\n# From:\tSimon Horman <horms@debian.org>\n0\tstring\tIIO2H\t\t\tUlead Photo Explorer5\n\n# Type:\tX11 cursor\n# URL:\thttp://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup\n# From:\tMathias Brodala <info@noctus.net>\n0\tstring\tXcur\t\t\tX11 cursor\n\n# Type:\tOlympus ORF raw images.\n# URL:\thttp://libopenraw.freedesktop.org/wiki/Olympus_ORF\n# From:\tAdam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\t\tMMOR\t\tOlympus ORF raw image data, big-endian\n!:mime\timage/x-olympus-orf\n0\tstring\t\tIIRO\t\tOlympus ORF raw image data, little-endian\n!:mime\timage/x-olympus-orf\n0\tstring\t\tIIRS\t\tOlympus ORF raw image data, little-endian\n!:mime\timage/x-olympus-orf\n\n# Type: files used in modern AVCHD camcoders to store clip information\n# Extension: .cpi\n# From: Alexander Danilov <alexander.a.danilov@gmail.com>\n0\tstring\tHDMV0100\tAVCHD Clip Information\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/\n# Radiance HDR; usually has .pic or .hdr extension.\n0\tstring\t#?RADIANCE\\n\tRadiance HDR image data\n#!mime\timage/vnd.radiance\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf\n# Used by the pfstools packages. The regex matches for the image size could\n# probably use some work. The MIME type is made up; if there's one in\n# actual common use, it should replace the one below.\n0\tstring\tPFS1\\x0a\tPFS HDR image data\n#!mime\timage/x-pfs\n>1\tregex\t[0-9]*\\ \t\t\\b, %s\n>>1\tregex\t\\ [0-9]{4}\t\t\\bx%s\n\n# Type: Foveon X3F\n# URL:  http://www.photofo.com/downloads/x3f-raw-format.pdf\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# Note that the MIME type isn't defined anywhere that I can find; if\n# there's a canonical type for this format, it should replace this one.\n0\tstring\tFOVb\tFoveon X3F raw image data\n!:mime\timage/x-x3f\n>6\tleshort\tx\t\\b, version %d.\n>4\tleshort\tx\t\\b%d\n>28\tlelong\tx\t\\b, %dx\n>32\tlelong\tx\t\\b%d\n\n# Paint.NET file\n# From Adam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\tPDN3\tPaint.NET image data\n!:mime\timage/x-paintnet\n\n#------------------------------------------------------------------------------\n# $File: inform,v 1.5 2009/09/19 16:28:09 christos Exp $\n# inform:  file(1) magic for Inform interactive fiction language\n\n# URL:  http://www.inform-fiction.org/\n# From: Reuben Thomas <rrt@sc3d.org>\n\n0\tsearch/100/cW\tconstant\\ story\t\tInform source text\n\n#------------------------------------------------------------------------------\n# $File: intel,v 1.8 2009/09/19 16:28:10 christos Exp $\n# intel:  file(1) magic for x86 Unix\n#\n# Various flavors of x86 UNIX executable/object (other than Xenix, which\n# is in \"microsoft\").  DOS is in \"msdos\"; the ambitious soul can do\n# Windows as well.\n#\n# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and\n# whatever comes next (HP-PA Hummingbird?).  OS/2 may also go elsewhere\n# as well, if, as, and when IBM makes it portable.\n#\n# The `versions' should be un-commented if they work for you.\n# (Was the problem just one of endianness?)\n#\n0\tleshort\t\t0502\t\tbasic-16 executable\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %ld\n0\tleshort\t\t0503\t\tbasic-16 executable (TV)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %ld\n0\tleshort\t\t0510\t\tx86 executable\n>12\tlelong\t\t>0\t\tnot stripped\n0\tleshort\t\t0511\t\tx86 executable (TV)\n>12\tlelong\t\t>0\t\tnot stripped\n0\tleshort\t\t=0512\t\tiAPX 286 executable small model (COFF)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %ld\n0\tleshort\t\t=0522\t\tiAPX 286 executable large model (COFF)\n>12\tlelong\t\t>0\t\tnot stripped\n#>22\tleshort\t\t>0\t\t- version %ld\n# SGI labeled the next entry as \"iAPX 386 executable\" --Dan Quinlan\n0\tleshort\t\t=0514\t\t80386 COFF executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %ld\n\n# rom: file(1) magic for BIOS ROM Extensions found in intel machines\n#      mapped into memory between 0xC0000 and 0xFFFFF\n# From GÃ¼rkan SengÃ¼n <gurkan@linuks.mine.nu>, www.linuks.mine.nu\n0        beshort         0x55AA       BIOS (ia32) ROM Ext.\n>5       string          USB          USB\n>7       string          LDR          UNDI image\n>30      string          IBM          IBM comp. Video\n>26      string          Adaptec      Adaptec\n>28      string          Adaptec      Adaptec\n>42      string          PROMISE      Promise\n>2       byte            x            (%d*512)\n\n#------------------------------------------------------------------------------\n# $File: interleaf,v 1.10 2009/09/19 16:28:10 christos Exp $\n# interleaf:  file(1) magic for InterLeaf TPS:\n#\n0\tstring\t\t=\\210OPS\tInterleaf saved data\n0\tstring\t\t=<!OPS\t\tInterleaf document text\n>5\tstring\t\t,\\ Version\\ =\t\\b, version\n>>17\tstring\t\t>\\0\t\t%.3s\n\n#------------------------------------------------------------------------------\n# $File: island,v 1.5 2009/09/19 16:28:10 christos Exp $\n# island:  file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1\n# \"/etc/magic\":\n# From: guy@netapp.com (Guy Harris)\n#\n4\tstring\t\tpgscriptver\tIslandWrite document\n13\tstring\t\tDrawFile\tIslandDraw document\n\n\n#------------------------------------------------------------------------------\n# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $\n# ispell:  file(1) magic for ispell\n#\n# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602.  This magic\n# will match 0x9600 through 0x9603 in *both* little endian and big endian.\n# (No other current magic entries collide.)\n#\n# Updated by Daniel Quinlan (quinlan@yggdrasil.com)\n#\n0\tleshort&0xFFFC\t0x9600\t\tlittle endian ispell\n>0\tbyte\t\t0\t\thash file (?),\n>0\tbyte\t\t1\t\t3.0 hash file,\n>0\tbyte\t\t2\t\t3.1 hash file,\n>0\tbyte\t\t3\t\thash file (?),\n>2\tleshort\t\t0x00\t\t8-bit, no capitalization, 26 flags\n>2\tleshort\t\t0x01\t\t7-bit, no capitalization, 26 flags\n>2\tleshort\t\t0x02\t\t8-bit, capitalization, 26 flags\n>2\tleshort\t\t0x03\t\t7-bit, capitalization, 26 flags\n>2\tleshort\t\t0x04\t\t8-bit, no capitalization, 52 flags\n>2\tleshort\t\t0x05\t\t7-bit, no capitalization, 52 flags\n>2\tleshort\t\t0x06\t\t8-bit, capitalization, 52 flags\n>2\tleshort\t\t0x07\t\t7-bit, capitalization, 52 flags\n>2\tleshort\t\t0x08\t\t8-bit, no capitalization, 128 flags\n>2\tleshort\t\t0x09\t\t7-bit, no capitalization, 128 flags\n>2\tleshort\t\t0x0A\t\t8-bit, capitalization, 128 flags\n>2\tleshort\t\t0x0B\t\t7-bit, capitalization, 128 flags\n>2\tleshort\t\t0x0C\t\t8-bit, no capitalization, 256 flags\n>2\tleshort\t\t0x0D\t\t7-bit, no capitalization, 256 flags\n>2\tleshort\t\t0x0E\t\t8-bit, capitalization, 256 flags\n>2\tleshort\t\t0x0F\t\t7-bit, capitalization, 256 flags\n>4\tleshort\t\t>0\t\tand %d string characters\n0\tbeshort&0xFFFC\t0x9600\t\tbig endian ispell\n>1\tbyte\t\t0\t\thash file (?),\n>1\tbyte\t\t1\t\t3.0 hash file,\n>1\tbyte\t\t2\t\t3.1 hash file,\n>1\tbyte\t\t3\t\thash file (?),\n>2\tbeshort\t\t0x00\t\t8-bit, no capitalization, 26 flags\n>2\tbeshort\t\t0x01\t\t7-bit, no capitalization, 26 flags\n>2\tbeshort\t\t0x02\t\t8-bit, capitalization, 26 flags\n>2\tbeshort\t\t0x03\t\t7-bit, capitalization, 26 flags\n>2\tbeshort\t\t0x04\t\t8-bit, no capitalization, 52 flags\n>2\tbeshort\t\t0x05\t\t7-bit, no capitalization, 52 flags\n>2\tbeshort\t\t0x06\t\t8-bit, capitalization, 52 flags\n>2\tbeshort\t\t0x07\t\t7-bit, capitalization, 52 flags\n>2\tbeshort\t\t0x08\t\t8-bit, no capitalization, 128 flags\n>2\tbeshort\t\t0x09\t\t7-bit, no capitalization, 128 flags\n>2\tbeshort\t\t0x0A\t\t8-bit, capitalization, 128 flags\n>2\tbeshort\t\t0x0B\t\t7-bit, capitalization, 128 flags\n>2\tbeshort\t\t0x0C\t\t8-bit, no capitalization, 256 flags\n>2\tbeshort\t\t0x0D\t\t7-bit, no capitalization, 256 flags\n>2\tbeshort\t\t0x0E\t\t8-bit, capitalization, 256 flags\n>2\tbeshort\t\t0x0F\t\t7-bit, capitalization, 256 flags\n>4\tbeshort\t\t>0\t\tand %d string characters\n# ispell 4.0 hash files  kromJx <kromJx@crosswinds.net>\n# Ispell 4.0\n0       string          ISPL            ispell\n>4      long            x               hash file version %d,\n>8      long            x               lexletters %d,\n>12     long            x               lexsize %d,\n>16     long            x               hashsize %d,\n>20     long            x               stblsize %d\n\n#------------------------------------------------------------\n# $File: java,v 1.12 2009/09/19 16:28:10 christos Exp $\n# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the\n# same magic number, 0xcafebabe, so they are both handled\n# in the entry called \"cafebabe\".\n#------------------------------------------------------------\n# Java serialization\n# From Martin Pool (m.pool@pharos.com.au)\n0\tbeshort\t\t0xaced\t\tJava serialization data\n>2\tbeshort\t\t>0x0004\t\t\\b, version %d\n\n0\tbelong\t\t0xfeedfeed\tJava KeyStore\n!:mime\tapplication/x-java-keystore\n0\tbelong\t\t0xcececece\tJava JCE KeyStore\n!:mime\tapplication/x-java-jce-keystore\n\n# Dalvik .dex format. http://retrodev.com/android/dexformat.html\n# From <mkf@google.com> \"Mike Fleming\"\n0\tstring\tdex\\n\n>0\tregex\tdex\\n[0-9][0-9][0-9]\\0\tDalvik dex file\n>4\tstring\t>000\t\t\tversion %s\n0\tstring\tdey\\n\n>0\tregex\tdey\\n[0-9][0-9][0-9]\\0\tDalvik dex file (optimized for host)\n>4\tstring\t>000\t\t\tversion %s\n\n\n#------------------------------------------------------------------------------\n# $File: jpeg,v 1.15 2009/09/19 16:28:10 christos Exp $\n# JPEG images\n# SunOS 5.5.1 had\n#\n#\t0\tstring\t\t\\377\\330\\377\\340\tJPEG file\n#\t0\tstring\t\t\\377\\330\\377\\356\tJPG file\n#\n# both of which turn into \"JPEG image data\" here.\n#\n0\tbeshort\t\t0xffd8\t\tJPEG image data\n!:mime\timage/jpeg\n!:apple\t8BIMJPEG\n!:strength +1\n>6\tstring\t\tJFIF\t\t\\b, JFIF standard\n# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06\n# in a vain attempt to add image size reporting for JFIF.  Note that these\n# tests are not fool-proof since some perfectly valid JPEGs are currently\n# impossible to specify in magic(4) format.\n# First, a little JFIF version info:\n>>11\tbyte\t\tx\t\t\\b %d.\n>>12\tbyte\t\tx\t\t\\b%02d\n# Next, the resolution or aspect ratio of the image:\n#>>13\tbyte\t\t0\t\t\\b, aspect ratio\n#>>13\tbyte\t\t1\t\t\\b, resolution (DPI)\n#>>13\tbyte\t\t2\t\t\\b, resolution (DPCM)\n#>>4\tbeshort\t\tx\t\t\\b, segment length %d\n# Next, show thumbnail info, if it exists:\n>>18\tbyte\t\t!0\t\t\\b, thumbnail %dx\n>>>19\tbyte\t\tx\t\t\\b%d\n\n# EXIF moved down here to avoid reporting a bogus version number,\n# and EXIF version number printing added.\n#   - Patrik R=E5dman <patrik+file-magic@iki.fi>\n>6\tstring\t\tExif\t\t\\b, EXIF standard\n# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.\n# All possible combinations of entries have to be enumerated, since no looping\n# is possible. And both endians are possible...\n# The combinations included below are from real-world JPEGs.\n# Little-endian\n>>12\tstring\t\tII\t\t\n# IFD 0 Entry #5:\n>>>70\tleshort\t\t0x8769          \n# EXIF IFD Entry #1:\n>>>>(78.l+14)\tleshort\t0x9000\t\t\n>>>>>(78.l+23)\tbyte\tx\t\t%c\n>>>>>(78.l+24)\tbyte\tx\t\t\\b.%c\n>>>>>(78.l+25)\tbyte\t!0x30\t\t\\b%c\n# IFD 0 Entry #9:\n>>>118\tleshort\t\t0x8769          \n# EXIF IFD Entry #3:\n>>>>(126.l+38)\tleshort\t0x9000\t\t\n>>>>>(126.l+47)\tbyte\tx\t\t%c\n>>>>>(126.l+48)\tbyte\tx\t\t\\b.%c\n>>>>>(126.l+49)\tbyte\t!0x30\t\t\\b%c\n# IFD 0 Entry #10\n>>>130\tleshort\t\t0x8769          \n# EXIF IFD Entry #3:\n>>>>(138.l+38)\tleshort\t0x9000\t\t\n>>>>>(138.l+47)\tbyte\tx\t\t%c\n>>>>>(138.l+48)\tbyte\tx\t\t\\b.%c\n>>>>>(138.l+49)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #4:\n>>>>(138.l+50)\tleshort\t0x9000\t\t\n>>>>>(138.l+59)\tbyte\tx\t\t%c\n>>>>>(138.l+60)\tbyte\tx\t\t\\b.%c\n>>>>>(138.l+61)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #5:\n>>>>(138.l+62)\tleshort\t0x9000\t\t\n>>>>>(138.l+71)\tbyte\tx\t\t%c\n>>>>>(138.l+72)\tbyte\tx\t\t\\b.%c\n>>>>>(138.l+73)\tbyte\t!0x30\t\t\\b%c\n# IFD 0 Entry #11\n>>>142\tleshort\t\t0x8769          \n# EXIF IFD Entry #3:\n>>>>(150.l+38)\tleshort\t0x9000\t\t\n>>>>>(150.l+47)\tbyte\tx\t\t%c\n>>>>>(150.l+48)\tbyte\tx\t\t\\b.%c\n>>>>>(150.l+49)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #4:\n>>>>(150.l+50)\tleshort\t0x9000\t\t\n>>>>>(150.l+59)\tbyte\tx\t\t%c\n>>>>>(150.l+60)\tbyte\tx\t\t\\b.%c\n>>>>>(150.l+61)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #5:\n>>>>(150.l+62)\tleshort\t0x9000\t\t\n>>>>>(150.l+71)\tbyte\tx\t\t%c\n>>>>>(150.l+72)\tbyte\tx\t\t\\b.%c\n>>>>>(150.l+73)\tbyte\t!0x30\t\t\\b%c\n# Big-endian\n>>12\tstring\t\tMM\t\t\n# IFD 0 Entry #9:\n>>>118\tbeshort\t\t0x8769          \n# EXIF IFD Entry #1:\n>>>>(126.L+14)\tbeshort\t0x9000\t\t\n>>>>>(126.L+23)\tbyte\tx\t\t%c\n>>>>>(126.L+24)\tbyte\tx\t\t\\b.%c\n>>>>>(126.L+25)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #3:\n>>>>(126.L+38)\tbeshort\t0x9000\t\t\n>>>>>(126.L+47)\tbyte\tx\t\t%c\n>>>>>(126.L+48)\tbyte\tx\t\t\\b.%c\n>>>>>(126.L+49)\tbyte\t!0x30\t\t\\b%c\n# IFD 0 Entry #10\n>>>130\tbeshort\t\t0x8769          \n# EXIF IFD Entry #3:\n>>>>(138.L+38)\tbeshort\t0x9000\t\t\n>>>>>(138.L+47)\tbyte\tx\t\t%c\n>>>>>(138.L+48)\tbyte\tx\t\t\\b.%c\n>>>>>(138.L+49)\tbyte\t!0x30\t\t\\b%c\n# EXIF IFD Entry #5:\n>>>>(138.L+62)\tbeshort\t0x9000\t\t\n>>>>>(138.L+71)\tbyte\tx\t\t%c\n>>>>>(138.L+72)\tbyte\tx\t\t\\b.%c\n>>>>>(138.L+73)\tbyte\t!0x30\t\t\\b%c\n# IFD 0 Entry #11\n>>>142\tbeshort\t\t0x8769          \n# EXIF IFD Entry #4:\n>>>>(150.L+50)\tbeshort\t0x9000\t\t\n>>>>>(150.L+59)\tbyte\tx\t\t%c\n>>>>>(150.L+60)\tbyte\tx\t\t\\b.%c\n>>>>>(150.L+61)\tbyte\t!0x30\t\t\\b%c\n# Here things get sticky.  We can do ONE MORE marker segment with\n# indirect addressing, and that's all.  It would be great if we could\n# do pointer arithemetic like in an assembler language.  Christos?\n# And if there was some sort of looping construct to do searches, plus a few\n# named accumulators, it would be even more effective...\n# At least we can show a comment if no other segments got inserted before:\n>(4.S+5)\tbyte\t\t0xFE\n>>(4.S+8)\tstring\t\t>\\0\t\t\\b, comment: \"%s\"\n# FIXME: When we can do non-byte counted strings, we can use that to get\n# the string's count, and fix Debian bug #283760\n#>(4.S+5)\tbyte\t\t0xFE\t\t\\b, comment\n#>>(4.S+6)\tbeshort\t\tx\t\t\\b length=%d\n#>>(4.S+8)\tstring\t\t>\\0\t\t\\b, \"%s\"\n# Or, we can show the encoding type (I've included only the three most common)\n# and image dimensions if we are lucky and the SOFn (image segment) is here:\n>(4.S+5)\tbyte\t\t0xC0\t\t\\b, baseline\n>>(4.S+6)\tbyte\t\tx\t\t\\b, precision %d\n>>(4.S+7)\tbeshort\t\tx\t\t\\b, %dx\n>>(4.S+9)\tbeshort\t\tx\t\t\\b%d\n>(4.S+5)\tbyte\t\t0xC1\t\t\\b, extended sequential\n>>(4.S+6)\tbyte\t\tx\t\t\\b, precision %d\n>>(4.S+7)\tbeshort\t\tx\t\t\\b, %dx\n>>(4.S+9)\tbeshort\t\tx\t\t\\b%d\n>(4.S+5)\tbyte\t\t0xC2\t\t\\b, progressive\n>>(4.S+6)\tbyte\t\tx\t\t\\b, precision %d\n>>(4.S+7)\tbeshort\t\tx\t\t\\b, %dx\n>>(4.S+9)\tbeshort\t\tx\t\t\\b%d\n# I've commented-out quantisation table reporting.  I doubt anyone cares yet.\n#>(4.S+5)\tbyte\t\t0xDB\t\t\\b, quantisation table\n#>>(4.S+6)\tbeshort\t\tx\t\t\\b length=%d\n#>14\tbeshort\t\tx\t\t\\b, %d x\n#>16\tbeshort\t\tx\t\t\\b %d\n\n# HSI is Handmade Software's proprietary JPEG encoding scheme\n0\tstring\t\thsi1\t\tJPEG image data, HSI proprietary\n\n# From: David Santinoli <david@santinoli.com>\n0\tstring\t\t\\x00\\x00\\x00\\x0C\\x6A\\x50\\x20\\x20\\x0D\\x0A\\x87\\x0A\tJPEG 2000 image data\n\n# Type: JPEG 2000 codesream\n# From: Mathieu Malaterre <mathieu.malaterre@gmail.com>\n0\tbelong\t\t0xff4fff51\t\t\t\t\t\tJPEG 2000 codestream\n45\tbeshort\t\t0xff52\n\n#------------------------------------------------------------------------------\n# $File: karma,v 1.6 2009/09/19 16:28:10 christos Exp $\n# karma:  file(1) magic for Karma data files\n#\n# From <rgooch@atnf.csiro.au>\n\n0\tstring\t\tKarmaRHD Version\tKarma Data Structure Version\n>16\tbelong\t\tx\t\t%lu\n\n#------------------------------------------------------------------------------\n# $File: kde,v 1.4 2009/09/19 16:28:10 christos Exp $\n# kde:  file(1) magic for KDE\n\n0\t\tstring\t[KDE\\ Desktop\\ Entry]\tKDE desktop entry\n!:mime\tapplication/x-kdelnk\n0\t\tstring\t#\\ KDE\\ Config\\ File\tKDE config file\n!:mime\tapplication/x-kdelnk\n0\t\tstring\t#\\ xmcd\txmcd database file for kscd\n!:mime\ttext/x-xmcd\n\n#------------------------------------------------------------------------------\n# $File: kml,v 1.2 2009/09/19 16:28:10 christos Exp $\n# Type: Google KML, formerly Keyhole Markup Language\n# Future development of this format has been handed\n# over to the Open Geospatial Consortium.\n# http://www.opengeospatial.org/standards/kml/\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0 string    \\<?xml\n>20  search/400 \\ xmlns= \n>>&0 regex ['\"]http://earth.google.com/kml Google KML document\n!:mime application/vnd.google-earth.kml+xml\n>>>&1 string 2.0' \\b, version 2.0\n>>>&1 string 2.1' \\b, version 2.1\n>>>&1 string 2.2' \\b, version 2.2\n\n#------------------------------------------------------------------------------\n# Type: OpenGIS KML, formerly Keyhole Markup Language\n# This standard is maintained by the\n# Open Geospatial Consortium.\n# http://www.opengeospatial.org/standards/kml/\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n>>&0 regex ['\"]http://www.opengis.net/kml OpenGIS KML document\n!:mime application/vnd.google-earth.kml+xml\n>>>&1 string 2.2 \\b, version 2.2\n\n#------------------------------------------------------------------------------\n# Type: Google KML Archive (ZIP based) \n# http://code.google.com/apis/kml/documentation/kml_tut.html\n# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>\n0 string    PK\\003\\004\n>4  byte    0x14\n>>30  string doc.kml Compressed Google KML Document, including resources.\n!:mime application/vnd.google-earth.kmz\n\n#------------------------------------------------------------------------------\n# $File: lecter,v 1.4 2009/09/19 16:28:10 christos Exp $\n# DEC SRC Virtual Paper: Lectern files\n# Karl M. Hegbloom <karlheg@inetarena.com>\n0\tstring\tlect\tDEC SRC Virtual Paper Lectern file\n\n#------------------------------------------------------------------------------\n# $File: lex,v 1.6 2009/09/19 16:28:10 christos Exp $\n# lex:  file(1) magic for lex\n#\n#\tderived empirically, your offsets may vary!\n0\tsearch/100\tyyprevious\tC program text (from lex)\n>3\tsearch/1\t>\\0\t\t for %s\n# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tsearch/100\tgenerated\\ by\\ flex\tC program text (from flex)\n# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tsearch/1\t%{\t\tlex description text\n\n#------------------------------------------------------------------------------\n# $File: lif,v 1.8 2009/09/19 16:28:10 christos Exp $\n# lif:  file(1) magic for lif\n#\n# (Daniel Quinlan <quinlan@yggdrasil.com>)\n#\n0\tbeshort\t\t0x8000\t\tlif file\n\n#------------------------------------------------------------------------------\n# $File: linux,v 1.33 2009/10/23 16:44:59 christos Exp $\n# linux:  file(1) magic for Linux files\n#\n# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>\n# The following basic Linux magic is useful for reference, but using\n# \"long\" magic is a better practice in order to avoid collisions.\n#\n# 2\tleshort\t\t100\t\tLinux/i386\n# >0\tleshort\t\t0407\t\timpure executable (OMAGIC)\n# >0\tleshort\t\t0410\t\tpure executable (NMAGIC)\n# >0\tleshort\t\t0413\t\tdemand-paged executable (ZMAGIC)\n# >0\tleshort\t\t0314\t\tdemand-paged executable (QMAGIC)\n#\n0\tlelong\t\t0x00640107\tLinux/i386 impure executable (OMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x00640108\tLinux/i386 pure executable (NMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x0064010b\tLinux/i386 demand-paged executable (ZMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n0\tlelong\t\t0x006400cc\tLinux/i386 demand-paged executable (QMAGIC)\n>16\tlelong\t\t0\t\t\\b, stripped\n#\n0\tstring\t\t\\007\\001\\000\tLinux/i386 object file\n>20\tlelong\t\t>0x1020\t\t\\b, DLL library\n# Linux-8086 stuff:\n0\tstring\t\t\\01\\03\\020\\04\tLinux-8086 impure executable\n>28\tlong\t\t!0\t\tnot stripped\n0\tstring\t\t\\01\\03\\040\\04\tLinux-8086 executable\n>28\tlong\t\t!0\t\tnot stripped\n#\n0\tstring\t\t\\243\\206\\001\\0\tLinux-8086 object file\n#\n0\tstring\t\t\\01\\03\\020\\20\tMinix-386 impure executable\n>28\tlong\t\t!0\t\tnot stripped\n0\tstring\t\t\\01\\03\\040\\20\tMinix-386 executable\n>28\tlong\t\t!0\t\tnot stripped\n# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>\n216\tlelong\t\t0421\t\tLinux/i386 core file\n>220\tstring\t\t>\\0\t\tof '%s'\n>200\tlelong\t\t>0\t\t(signal %d)\n#\n# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>\n# this can be overridden by the DOS executable (COM) entry\n2\tstring\t\tLILO\t\tLinux/i386 LILO boot/chain loader\n#\n# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>\n# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>\n# See: http://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html\n0\tleshort\t\t0x0436\t\tLinux/i386 PC Screen Font v1 data,\n>2\tbyte&0x01\t0\t\t256 characters,\n>2\tbyte&0x01\t!0\t\t512 characters,\n>2\tbyte&0x02\t0\t\tno directory,\n>2\tbyte&0x02\t!0\t\tUnicode directory,\n>3\tbyte\t\t>0\t\t8x%d\n0\tstring\t\t\\x72\\xb5\\x4a\\x86\\x00\\x00 Linux/i386 PC Screen Font v2 data,\n>16\tlelong\t\tx\t\t%d characters,\n>12\tlelong&0x01\t0\t\tno directory,\n>12\tlelong&0x01\t!0\t\tUnicode directory,\n>24\tlelong\t\tx\t\t%d\n>28\tlelong\t\tx\t\t\\bx%d\n\n# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>\n4086\tstring\t\tSWAP-SPACE\tLinux/i386 swap file\n# From: Jeff Bailey <jbailey@ubuntu.com>\n# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey@ubuntu.com>\n4076\tstring\t\tSWAPSPACE2S1SUSPEND\tLinux/i386 swap file (new style) with SWSUSP1 image\n# according to man page of mkswap (8) March 1999\n# volume label and UUID Russell Coker\n# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/\n4086\tstring\t\tSWAPSPACE2\tLinux/i386 swap file (new style),\n>0x400\tlong\t\tx\t\tversion %d (4K pages),\n>0x404\tlong\t\tx\t\tsize %d pages,\n>1052\tstring\t\t\\0\t\tno label,\n>1052\tstring\t\t>\\0\t\tLABEL=%s,\n>0x40c\tbelong\t\tx\t\tUUID=%08x\n>0x410\tbeshort\t\tx\t\t\\b-%04x\n>0x412\tbeshort\t\tx\t\t\\b-%04x\n>0x414\tbeshort\t\tx\t\t\\b-%04x\n>0x416\tbelong\t\tx\t\t\\b-%08x\n>0x41a\tbeshort\t\tx\t\t\\b%04x\n# From Daniel Novotny <dnovotny@redhat.com>\n# swap file for PowerPC\n65526\tstring\t\tSWAPSPACE2\tLinux/ppc swap file\n# ECOFF magic for OSF/1 and Linux (only tested under Linux though)\n#\n#\tfrom Erik Troan (ewt@redhat.com) examining od dumps, so this\n#\t\tcould be wrong\n#      updated by David Mosberger (davidm@azstarnet.com) based on\n#      GNU BFD and MIPS info found below.\n#\n0\tleshort\t\t0x0183\t\tECOFF alpha\n>24\tleshort\t\t0407\t\texecutable\n>24\tleshort\t\t0410\t\tpure\n>24\tleshort\t\t0413\t\tdemand paged\n>8\tlong\t\t>0\t\tnot stripped\n>8\tlong\t\t0\t\tstripped\n>23\tleshort\t\t>0\t\t- version %ld.\n#\n# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>\n# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>\n# and Nicolás Lichtmaier <nick@debian.org>\n# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29\n# Linux kernel boot images (i386 arch) (Wolfram Kleff)\n514\tstring\t\tHdrS\t\tLinux kernel\n>510\tleshort\t\t0xAA55\t\tx86 boot executable\n>>518\tleshort\t\t>0x1ff\n>>>529\tbyte\t\t0\t\tzImage,\n>>>529\tbyte\t\t1\t\tbzImage,\n>>>(526.s+0x200) string\t>\\0\t\tversion %s,\n>>498\tleshort\t\t1\t\tRO-rootFS,\n>>498\tleshort\t\t0\t\tRW-rootFS,\n>>508\tleshort\t\t>0\t\troot_dev 0x%X,\n>>502\tleshort\t\t>0\t\tswap_dev 0x%X,\n>>504\tleshort\t\t>0\t\tRAMdisksize %u KB,\n>>506\tleshort\t\t0xFFFF\t\tNormal VGA\n>>506\tleshort\t\t0xFFFE\t\tExtended VGA\n>>506\tleshort\t\t0xFFFD\t\tPrompt for Videomode\n>>506\tleshort\t\t>0\t\tVideo mode %d\n# This also matches new kernels, which were caught above by \"HdrS\".\n0\t\tbelong\t0xb8c0078e\tLinux kernel\n>0x1e3\t\tstring\tLoading\t\tversion 1.3.79 or older\n>0x1e9\t\tstring\tLoading\t\tfrom prehistoric times\n\n# System.map files - Nicolás Lichtmaier <nick@debian.org>\n8\tsearch/1\t\\ A\\ _text\tLinux kernel symbol map text\n\n# LSM entries - Nicolás Lichtmaier <nick@debian.org>\n0\tsearch/1\tBegin3\tLinux Software Map entry text\n0\tsearch/1\tBegin4\tLinux Software Map entry text (new format)\n\n# From Matt Zimmerman, enhanced for v3 by Matthew Palmer\n0\tbelong\t0x4f4f4f4d\tUser-mode Linux COW file\n>4\tbelong\t<3\t\t\\b, version %d\n>>8\tstring\t>\\0\t\t\\b, backing file %s\n>4\tbelong\t>2\t\t\\b, version %d\n>>32\tstring\t>\\0\t\t\\b, backing file %s\n\n############################################################################\n# Linux kernel versions\n\n0\t\tstring\t\t\\xb8\\xc0\\x07\\x8e\\xd8\\xb8\\x00\\x90\tLinux\n>497\t\tleshort\t\t0\t\tx86 boot sector\n>>514\t\tbelong\t\t0x8e\tof a kernel from the dawn of time!\n>>514\t\tbelong\t\t0x908ed8b4\tversion 0.99-1.1.42\n>>514\t\tbelong\t\t0x908ed8b8\tfor memtest86\n\n>497\t\tleshort\t\t!0\t\tx86 kernel\n>>504\t\tleshort\t\t>0\t\tRAMdisksize=%u KB\n>>502\t\tleshort\t\t>0\t\tswap=0x%X\n>>508\t\tleshort\t\t>0\t\troot=0x%X\n>>>498\t\tleshort\t\t1\t\t\\b-ro\n>>>498\t\tleshort\t\t0\t\t\\b-rw\n>>506\t\tleshort\t\t0xFFFF\t\tvga=normal\n>>506\t\tleshort\t\t0xFFFE\t\tvga=extended\n>>506\t\tleshort\t\t0xFFFD\t\tvga=ask\n>>506\t\tleshort\t\t>0\t\tvga=%d\n>>514\t\tbelong\t\t0x908ed881\tversion 1.1.43-1.1.45\n>>514\t\tbelong\t\t0x15b281cd\n>>>0xa8e\tbelong\t\t0x55AA5a5a\tversion 1.1.46-1.2.13,1.3.0\n>>>0xa99\tbelong\t\t0x55AA5a5a\tversion 1.3.1,2\n>>>0xaa3\tbelong\t\t0x55AA5a5a\tversion 1.3.3-1.3.30\n>>>0xaa6\tbelong\t\t0x55AA5a5a\tversion 1.3.31-1.3.41\n>>>0xb2b\tbelong\t\t0x55AA5a5a\tversion 1.3.42-1.3.45\n>>>0xaf7\tbelong\t\t0x55AA5a5a\tversion 1.3.46-1.3.72\n>>514\t\tstring\t\tHdrS\n>>>518\t\tleshort\t\t>0x1FF\n>>>>529\t\tbyte\t\t0\t\t\\b, zImage\n>>>>529\t\tbyte\t\t1\t\t\\b, bzImage\n>>>>(526.s+0x200) string \t>\\0\t\t\\b, version %s\n\n# Linux boot sector thefts.\n0\t\tbelong\t\t0xb8c0078e\tLinux\n>0x1e6\t\tbelong\t\t0x454c4b53\tELKS Kernel\n>0x1e6\t\tbelong\t\t!0x454c4b53\tstyle boot sector\n\n############################################################################\n# Linux 8086 executable\n0\tlelong&0xFF0000FF 0xC30000E9\tLinux-Dev86 executable, headerless\n>5\tstring\t\t.\t\t\n>>4\tstring\t\t>\\0\t\t\\b, libc version %s\n\n0\tlelong&0xFF00FFFF 0x4000301\tLinux-8086 executable\n>2\tbyte&0x01\t!0\t\t\\b, unmapped zero page\n>2\tbyte&0x20\t0\t\t\\b, impure\n>2\tbyte&0x20\t!0\n>>2\tbyte&0x10\t!0\t\t\\b, A_EXEC\n>2\tbyte&0x02\t!0\t\t\\b, A_PAL\n>2\tbyte&0x04\t!0\t\t\\b, A_NSYM\n>2\tbyte&0x08\t!0\t\t\\b, A_STAND\n>2\tbyte&0x40\t!0\t\t\\b, A_PURE\n>2\tbyte&0x80\t!0\t\t\\b, A_TOVLY\n>28     long            !0              \\b, not stripped\n>37\tstring\t\t.\t\t\n>>36\tstring\t\t>\\0\t\t\\b, libc version %s\n\n# 0\tlelong&0xFF00FFFF 0x10000301\tld86 I80386 executable\n# 0\tlelong&0xFF00FFFF 0xB000301\tld86 M68K executable\n# 0\tlelong&0xFF00FFFF 0xC000301\tld86 NS16K executable\n# 0\tlelong&0xFF00FFFF 0x17000301\tld86 SPARC executable\n\n# SYSLINUX boot logo files (from 'ppmtolss16' sources)\n# http://syslinux.zytor.com/\n#\n0\tlelong\t=0x1413f33d\t\tSYSLINUX' LSS16 image data\n>4\tleshort\tx\t\t\t\\b, width %d\n>6\tleshort\tx\t\t\t\\b, height %d\n\n0\tstring\tOOOM\t\t\tUser-Mode-Linux's Copy-On-Write disk image\n>4\tbelong\tx\t\t\tversion %d\n\n# SE Linux policy database\n# From: Mike Frysinger <vapier@gentoo.org>\n0\tlelong\t0xf97cff8c\t\tSE Linux policy\n>16\tlelong\tx\t\t\tv%d\n>20\tlelong\t1\t\t\tMLS\n>24\tlelong\tx\t\t\t%d symbols\n>28\tlelong\tx\t\t\t%d ocons\n\n# Linux Logical Volume Manager (LVM) \n# Emmanuel VARAGNAT <emmanuel.varagnat@guzu.net>\n#\n# System ID, UUID and volume group name are 128 bytes long\n# but they should never be full and initialized with zeros...\n#\n# LVM1\n#\n0x0\tstring\tHM\\001\t\tLVM1 (Linux Logical Volume Manager), version 1\n>0x12c\tstring\t>\\0\t\t, System ID: %s\n\n0x0\tstring\tHM\\002\t\tLVM1 (Linux Logical Volume Manager), version 2\n>0x12c\tstring\t>\\0\t\t, System ID: %s\n\n#  LVM2\n#\n# It seems that the label header can be in one the four first sector\n# of the disk... (from _find_labeller in lib/label/label.c of LVM2)\n#\n# 0x200 seems to be the common case\n\n0x218\t\t string\tLVM2\\ 001\tLVM2 (Linux Logical Volume Manager)\n# read the offset to add to the start of the header, and the header\n# start in 0x200\n>(0x214.l+0x200) string\t>\\0\t\t, UUID: %s\n\n0x018\t\t string\tLVM2\\ 001\tLVM2 (Linux Logical Volume Manager)\n>(0x014.l)\t string\t>\\0\t\t, UUID: %s\n\n0x418\t\t string\tLVM2\\ 001\tLVM2 (Linux Logical Volume Manager)\n>(0x414.l+0x400) string\t>\\0\t\t, UUID: %s\n\n0x618\t\t string\tLVM2\\ 001\tLVM2 (Linux Logical Volume Manager)\n>(0x614.l+0x600) string\t>\\0\t\t, UUID: %s\n\n# LVM snapshot\n# from Jason Farrel\n0\tstring\tSnAp\tLVM Snapshot (CopyOnWrite store)\n>4\tlelong\t!0\t- valid,\n>4\tlelong\t0\t- invalid,\n>8\tlelong\tx\tversion %d,\n>12\tlelong\tx\tchunk_size %d\n\n# SE Linux policy database\n0\tlelong\t0xf97cff8c\t\tSE Linux policy\n>16\tlelong\tx\t\t\tv%d\n>20\tlelong\t1\t\t\tMLS\n>24\tlelong\tx\t\t\t%d symbols\n>28\tlelong\tx\t\t\t%d ocons\n\n# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec\n# Anthon van der Neut (anthon@mnt.org)\n0\tstring\tLUKS\\xba\\xbe\tLUKS encrypted file,\n>6\tbeshort x\t\tver %d\n>8\tstring\tx\t\t[%s,\n>40\tstring\tx\t\t%s,\n>72\tstring\tx\t\t%s]\n>168\tstring\tx\t\tUUID: %s\n\n\n# Summary: Xen saved domain file\n# Created by: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\tLinuxGuestRecord\tXen saved domain\n>20\tsearch/256\t(name\t\t\t\n>>&1\tstring\t\tx\t\t\t(name %s)\n\n# Type: Xen, the virtual machine monitor\n# From: Radek Vokal <rvokal@redhat.com>\n0\tstring\t\tLinuxGuestRecord\tXen saved domain\n#>2\tregex\t\t\\(name\\ [^)]*\\)\t\t%s\n>20\tsearch/256\t(name\t\t\t(name\n>>&1\tstring\t\tx\t\t\t%s...)\n\n#------------------------------------------------------------------------------\n# $File: lisp,v 1.23 2009/09/19 16:28:10 christos Exp $\n# lisp:  file(1) magic for lisp programs\n#\n# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)\n\n# updated by Joerg Jenderek\n# GRR: This lot is too weak\n#0\tstring\t;;\t\t\t\n# windows INF files often begin with semicolon and use CRLF as line end\n# lisp files are mainly created on unix system with LF as line end\n#>2\tsearch/4096\t!\\r\t\tLisp/Scheme program text\n#>2\tsearch/4096\t\\r\t\tWindows INF file\n\n0\tsearch/4096\t(setq\\ \t\t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defvar\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defparam\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(defun\\  \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(autoload\\ \t\tLisp/Scheme program text\n!:mime\ttext/x-lisp\n0\tsearch/4096\t(custom-set-variables\\ \tLisp/Scheme program text\n!:mime\ttext/x-lisp\n\n# Emacs 18 - this is always correct, but not very magical.\n0\tstring\t\\012(\t\t\tEmacs v18 byte-compiled Lisp data\n!:mime\tapplication/x-elc\n# Emacs 19+ - ver. recognition added by Ian Springer\n# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs\n# - Chris Chittleborough <cchittleborough@yahoo.com.au>\n0\tstring\t;ELC\t\n>4\tbyte\t>18\t\t\t\n>4\tbyte    <32\t\t\tEmacs/XEmacs v%d byte-compiled Lisp data\n!:mime\tapplication/x-elc\t\t\n\n# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>\n0\tstring\t(SYSTEM::VERSION\\040'\tCLISP byte-compiled Lisp program (pre 2004-03-27)\n0\tstring\t(|SYSTEM|::|VERSION|\\040'\tCLISP byte-compiled Lisp program text\n\n0\tlong\t0x70768BD2\t\tCLISP memory image data\n0\tlong\t0xD28B7670\t\tCLISP memory image data, other endian\n\n#.com and .bin for MIT scheme \n0\tstring\t\\372\\372\\372\\372\tMIT scheme (library?)\n\n# From: David Allouche <david@allouche.net>\n0\tsearch/1\t\\<TeXmacs|\tTeXmacs document text\n!:mime\ttext/texmacs\n\n#------------------------------------------------------------------------------\n# $File: llvm,v 1.4 2009/09/19 16:28:10 christos Exp $\n# llvm:  file(1) magic for LLVM byte-codes\n# URL:  http://llvm.org/docs/BitCodeFormat.html\n# From: Al Stone <ahs3@fc.hp.com>\n\n0\tstring\tllvm\tLLVM byte-codes, uncompressed\n0\tstring\tllvc0\tLLVM byte-codes, null compression\n0\tstring\tllvc1\tLLVM byte-codes, gzip compression\n0\tstring\tllvc2\tLLVM byte-codes, bzip2 compression\n0\tstring\t\\xde\\xc0\\x17\\x0b\tLLVM bitcode, wrapper\n0       string\tBC\\xc0\\xde\tLLVM bitcode\n\n#------------------------------------------------------------------------------\n# $File: lua,v 1.5 2009/09/19 16:28:10 christos Exp $\n# lua:  file(1) magic for Lua scripting language\n# URL:  http://www.lua.org/\n# From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>\n\n# Lua scripts\n0\tsearch/1/w\t#!\\ /usr/bin/lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1/w\t#!\\ /usr/local/bin/lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1\t#!/usr/bin/env\\ lua\tLua script text executable\n!:mime\ttext/x-lua\n0\tsearch/1\t#!\\ /usr/bin/env\\ lua\tLua script text executable\n!:mime\ttext/x-lua\n\n# Lua bytecode\n0\tstring\t\t\\033Lua\t\t\tLua bytecode,\n>4\tbyte\t\t0x50\t\t\tversion 5.0\n>4\tbyte\t\t0x51\t\t\tversion 5.1\n\n#------------------------------------------------------------------------------\n# $File: luks,v 1.4 2009/09/19 16:28:10 christos Exp $\n# luks:  file(1) magic for Linux Unified Key Setup\n# URL:\thttp://luks.endorphin.org/spec\n# From:\tAnthon van der Neut <anthon@mnt.org>\n\n0\tstring\t\tLUKS\\xba\\xbe\tLUKS encrypted file,\n>6\tbeshort\t\tx\t\tver %d\n>8\tstring\t\tx\t\t[%s,\n>40\tstring\t\tx\t\t%s,\n>72\tstring\t\tx\t\t%s]\n>168\tstring\t\tx\t\tUUID: %s\n\n#------------------------------------------------------------\n# $File: mach,v 1.9 2009/09/19 16:28:10 christos Exp $\n# Mach has two magic numbers, 0xcafebabe and 0xfeedface.\n# Unfortunately the first, cafebabe, is shared with\n# Java ByteCode, so they are both handled in the file \"cafebabe\".\n# The \"feedface\" ones are handled herein.\n#------------------------------------------------------------\n0\tlelong&0xfffffffe\t0xfeedface\tMach-O\n>0\tbyte\t\t0xcf\t\t64-bit\n>12\tlelong\t\t1\t\tobject\n>12\tlelong\t\t2\t\texecutable\n>12\tlelong\t\t3\t\tfixed virtual memory shared library\n>12\tlelong\t\t4\t\tcore\n>12\tlelong\t\t5\t\tpreload executable\n>12\tlelong\t\t6\t\tdynamically linked shared library\n>12\tlelong\t\t7\t\tdynamic linker\n>12\tlelong\t\t8\t\tbundle\n>12\tlelong\t\t9\t\tdynamically linked shared library stub\n>12\tlelong\t\t>9\n>>12\tlelong\t\tx\t\tfiletype=%ld\n>4\tlelong\t\t<0\n>>4\tlelong\t\tx\t\tarchitecture=%ld\n>4\tlelong\t\t1\t\tvax\n>4\tlelong\t\t2\t\tromp\n>4\tlelong\t\t3\t\tarchitecture=3\n>4\tlelong\t\t4\t\tns32032\n>4\tlelong\t\t5\t\tns32332\n>4\tlelong\t\t6\t\tm68k\n>4\tlelong\t\t7\t\ti386\n>4\tlelong\t\t8\t\tmips\n>4\tlelong\t\t9\t\tns32532\n>4\tlelong\t\t10\t\tarchitecture=10\n>4\tlelong\t\t11\t\thppa\n>4\tlelong\t\t12\t\tacorn\n>4\tlelong\t\t13\t\tm88k\n>4\tlelong\t\t14\t\tsparc\n>4\tlelong\t\t15\t\ti860-big\n>4\tlelong\t\t16\t\ti860\n>4\tlelong\t\t17\t\trs6000\n>4\tlelong\t\t18\t\tppc\n>4\tlelong\t\t16777234\tppc64\n>4\tlelong\t\t>16777234\n>>4\tlelong\t\tx\t\tarchitecture=%ld\n#\n0\tbelong&0xfffffffe\t0xfeedface\tMach-O\n>3\tbyte\t\t0xcf\t\t64-bit\n>12\tbelong\t\t1\t\tobject\n>12\tbelong\t\t2\t\texecutable\n>12\tbelong\t\t3\t\tfixed virtual memory shared library\n>12\tbelong\t\t4\t\tcore\n>12\tbelong\t\t5\t\tpreload executable\n>12\tbelong\t\t6               dynamically linked shared library\n>12\tbelong\t\t7               dynamic linker\n>12\tbelong\t\t8\t\tbundle\n>12\tbelong\t\t9\t\tdynamically linked shared library stub\n>12\tbelong\t\t>9\n>>12\tbelong\t\tx\t\tfiletype=%ld\n>4\tbelong\t\t<0\n>>4\tbelong\t\tx\t\tarchitecture=%ld\n>4\tbelong\t\t1\t\tvax\n>4\tbelong\t\t2\t\tromp\n>4\tbelong\t\t3\t\tarchitecture=3\n>4\tbelong\t\t4\t\tns32032\n>4\tbelong\t\t5\t\tns32332\n>4\tbelong\t\t6\t\tfor m68k architecture\n# from NeXTstep 3.0 <mach/machine.h>\n# i.e. mc680x0_all, ignore\n# >>8\tbelong\t\t1\t\t(mc68030)\n>>8\tbelong\t\t2\t\t(mc68040)\n>>8\tbelong\t\t3\t\t(mc68030 only)\n>4\tbelong\t\t7\t\ti386\n>4\tbelong\t\t8\t\tmips\n>4\tbelong\t\t9\t\tns32532\n>4\tbelong\t\t10\t\tarchitecture=10\n>4\tbelong\t\t11\t\thppa\n>4\tbelong\t\t12\t\tacorn\n>4\tbelong\t\t13\t\tm88k\n>4\tbelong\t\t14\t\tsparc\n>4\tbelong\t\t15\t\ti860-big\n>4\tbelong\t\t16\t\ti860\n>4\tbelong\t\t17\t\trs6000\n>4\tbelong\t\t18\t\tppc\n>4\tbelong\t\t16777234\tppc64\n>4\tbelong\t\t>16777234\n>>4\tbelong\t\tx\t\tarchitecture=%ld\n\n#------------------------------------------------------------------------------\n# $File: macintosh,v 1.20 2009/09/19 16:28:10 christos Exp $\n# macintosh description\n#\n# BinHex is the Macintosh ASCII-encoded file format (see also \"apple\")\n# Daniel Quinlan, quinlan@yggdrasil.com\n11\tstring\tmust\\ be\\ converted\\ with\\ BinHex\tBinHex binary text\n!:mime\tapplication/mac-binhex40\n>41\tstring\tx\t\t\t\t\t\\b, version %.3s\n\n# Stuffit archives are the de facto standard of compression for Macintosh\n# files obtained from most archives. (franklsm@tuns.ca)\n0\tstring\t\tSIT!\t\t\tStuffIt Archive (data)\n!:mime\tapplication/x-stuffit\n!:apple\tSIT!SIT!\n>2\tstring\t\tx\t\t\t: %s\n0\tstring\t\tSITD\t\t\tStuffIt Deluxe (data)\n>2\tstring\t\tx\t\t\t: %s\n0\tstring\t\tSeg\t\t\tStuffIt Deluxe Segment (data)\n>2\tstring\t\tx\t\t\t: %s\n\n# Newer StuffIt archives (grant@netbsd.org)\n0\tstring\t\tStuffIt\t\t\tStuffIt Archive\n!:mime\tapplication/x-stuffit\n!:apple\tSIT!SIT!\n#>162\tstring\t\t>0\t\t\t: %s\n\n# Macintosh Applications and Installation binaries (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tAPPL\t\t\tMacintosh Application (data)\n#>2\tstring\t\tx\t\t\t\\b: %s\n\n# Macintosh System files (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tzsys\t\t\tMacintosh System File (data)\n#0\tstring\t\tFNDR\t\t\tMacintosh Finder (data)\n#0\tstring\t\tlibr\t\t\tMacintosh Library (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tshlb\t\t\tMacintosh Shared Library (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tcdev\t\t\tMacintosh Control Panel (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tINIT\t\t\tMacintosh Extension (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tFFIL\t\t\tMacintosh Truetype Font (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tLWFN\t\t\tMacintosh Postscript Font (data)\n#>2\tstring\t\tx\t\t\t: %s\n\n# Additional Macintosh Files (franklsm@tuns.ca)\n# GRR: Too weak\n#0\tstring\t\tPACT\t\t\tMacintosh Compact Pro Archive (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tttro\t\t\tMacintosh TeachText File (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tTEXT\t\t\tMacintosh TeachText File (data)\n#>2\tstring\t\tx\t\t\t: %s\n#0\tstring\t\tPDF\t\t\tMacintosh PDF File (data)\n#>2\tstring\t\tx\t\t\t: %s\n\n# MacBinary format (Eric Fischer, enf@pobox.com)\n#\n# Unfortunately MacBinary doesn't really have a magic number prior\n# to the MacBinary III format.  The checksum is really the way to\n# do it, but the magic file format isn't up to the challenge.\n#\n# 0\tbyte\t\t0\n# 1\tbyte\t\t\t\t# filename length\n# 2\tstring\t\t\t\t# filename\n# 65    string\t\t\t\t# file type\n# 69\tstring\t\t\t\t# file creator\n# 73\tbyte\t\t\t\t# Finder flags\n# 74\tbyte\t\t0\n# 75\tbeshort\t\t\t\t# vertical posn in window\n# 77\tbeshort\t\t\t\t# horiz posn in window\n# 79\tbeshort\t\t\t\t# window or folder ID\n# 81    byte\t\t\t\t# protected?\n# 82\tbyte\t\t0\n# 83\tbelong\t\t\t\t# length of data segment\n# 87\tbelong\t\t\t\t# length of resource segment\n# 91\tbelong\t\t\t\t# file creation date\n# 95\tbelong\t\t\t\t# file modification date\n# 99\tbeshort\t\t\t\t# length of comment after resource\n# 101\tbyte\t\t\t\t# new Finder flags\n# 102\tstring\t\tmBIN\t\t# (only in MacBinary III)\n# 106\tbyte\t\t\t\t# char. code of file name\n# 107\tbyte\t\t\t\t# still more Finder flags\n# 116\tbelong\t\t\t\t# total file length\n# 120\tbeshort\t\t\t\t# length of add'l header\n# 122\tbyte\t\t129\t\t# for MacBinary II\n# 122\tbyte\t\t130\t\t# for MacBinary III\n# 123\tbyte\t\t129\t\t# minimum version that can read fmt\n# 124\tbeshort\t\t\t\t# checksum\n#\n# This attempts to use the version numbers as a magic number, requiring\n# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second\n# be 0x81.  This works for the files I have, but maybe not for everyone's.\n\n# Unfortunately, this magic is quite weak - MPi\n#122\tbeshort&0xFCFF\t0x8081\t\tMacintosh MacBinary data\n\n# MacBinary I doesn't have the version number field at all, but MacBinary II\n# has been in use since 1987 so I hope there aren't many really old files\n# floating around that this will miss.  The original spec calls for using\n# the nulls in 0, 74, and 82 as the magic number.\n#\n# Another possibility, that would also work for MacBinary I, is to use\n# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will\n# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,\n# and that 74 will be 0.  So something like\n# \n# 71 \tbelong&0x80804EFF 0x00000000 \tMacintosh MacBinary data\n# \n# >73\tbyte&0x01\t0x01\t\t\\b, inited\n# >73\tbyte&0x02\t0x02\t\t\\b, changed\n# >73\tbyte&0x04\t0x04\t\t\\b, busy\n# >73\tbyte&0x08\t0x08\t\t\\b, bozo\n# >73\tbyte&0x10\t0x10\t\t\\b, system\n# >73\tbyte&0x10\t0x20\t\t\\b, bundle\n# >73\tbyte&0x10\t0x40\t\t\\b, invisible\n# >73\tbyte&0x10\t0x80\t\t\\b, locked\n\n#>65\tstring\t\tx\t\t\\b, type \"%4.4s\"\n\n#>65\tstring\t\t8BIM\t\t(PhotoShop)\n#>65\tstring\t\tALB3\t\t(PageMaker 3)\n#>65\tstring\t\tALB4\t\t(PageMaker 4)\n#>65\tstring\t\tALT3\t\t(PageMaker 3)\n#>65\tstring\t\tAPPL\t\t(application)\n#>65\tstring\t\tAWWP\t\t(AppleWorks word processor)\n#>65\tstring\t\tCIRC\t\t(simulated circuit)\n#>65\tstring\t\tDRWG\t\t(MacDraw)\n#>65\tstring\t\tEPSF\t\t(Encapsulated PostScript)\n#>65\tstring\t\tFFIL\t\t(font suitcase)\n#>65\tstring\t\tFKEY\t\t(function key)\n#>65\tstring\t\tFNDR\t\t(Macintosh Finder)\n#>65\tstring\t\tGIFf\t\t(GIF image)\n#>65\tstring\t\tGzip\t\t(GNU gzip)\n#>65\tstring\t\tINIT\t\t(system extension)\n#>65\tstring\t\tLIB\\ \t\t(library)\n#>65\tstring\t\tLWFN\t\t(PostScript font)\n#>65\tstring\t\tMSBC\t\t(Microsoft BASIC)\n#>65\tstring\t\tPACT\t\t(Compact Pro archive)\n#>65\tstring\t\tPDF\\ \t\t(Portable Document Format)\n#>65\tstring\t\tPICT\t\t(picture)\n#>65\tstring\t\tPNTG\t\t(MacPaint picture)\n#>65\tstring\t\tPREF\t\t(preferences)\n#>65\tstring\t\tPROJ\t\t(Think C project)\n#>65\tstring\t\tQPRJ\t\t(Think Pascal project)\n#>65\tstring\t\tSCFL\t\t(Defender scores)\n#>65\tstring\t\tSCRN\t\t(startup screen)\n#>65\tstring\t\tSITD\t\t(StuffIt Deluxe)\n#>65\tstring\t\tSPn3\t\t(SuperPaint)\n#>65\tstring\t\tSTAK\t\t(HyperCard stack)\n#>65\tstring\t\tSeg\\ \t\t(StuffIt segment)\n#>65\tstring\t\tTARF\t\t(Unix tar archive)\n#>65\tstring\t\tTEXT\t\t(ASCII)\n#>65\tstring\t\tTIFF\t\t(TIFF image)\n#>65\tstring\t\tTOVF\t\t(Eudora table of contents)\n#>65\tstring\t\tWDBN\t\t(Microsoft Word word processor)\n#>65\tstring\t\tWORD\t\t(MacWrite word processor)\n#>65\tstring\t\tXLS\\ \t\t(Microsoft Excel)\n#>65\tstring\t\tZIVM\t\t(compress (.Z))\n#>65\tstring\t\tZSYS\t\t(Pre-System 7 system file)\n#>65\tstring\t\tacf3\t\t(Aldus FreeHand)\n#>65\tstring\t\tcdev\t\t(control panel)\n#>65\tstring\t\tdfil\t\t(Desk Acessory suitcase)\n#>65\tstring\t\tlibr\t\t(library)\n#>65\tstring\t\tnX^d\t\t(WriteNow word processor)\n#>65\tstring\t\tnX^w\t\t(WriteNow dictionary)\n#>65\tstring\t\trsrc\t\t(resource)\n#>65\tstring\t\tscbk\t\t(Scrapbook)\n#>65\tstring\t\tshlb\t\t(shared library)\n#>65\tstring\t\tttro\t\t(SimpleText read-only)\n#>65\tstring\t\tzsys\t\t(system file)\n\n#>69\tstring\t\tx\t\t\\b, creator \"%4.4s\"\n\n# Somewhere, Apple has a repository of registered Creator IDs.  These are\n# just the ones that I happened to have files from and was able to identify.\n\n#>69\tstring\t\t8BIM\t\t(Adobe Photoshop)\n#>69\tstring\t\tALD3\t\t(PageMaker 3)\n#>69\tstring\t\tALD4\t\t(PageMaker 4)\n#>69\tstring\t\tALFA\t\t(Alpha editor)\n#>69\tstring\t\tAPLS\t\t(Apple Scanner)\n#>69\tstring\t\tAPSC\t\t(Apple Scanner)\n#>69\tstring\t\tBRKL\t\t(Brickles)\n#>69\tstring\t\tBTFT\t\t(BitFont)\n#>69\tstring\t\tCCL2 \t\t(Common Lisp 2)\n#>69\tstring\t\tCCL\\ \t\t(Common Lisp)\n#>69\tstring\t\tCDmo\t\t(The Talking Moose)\n#>69\tstring\t\tCPCT\t\t(Compact Pro)\n#>69\tstring\t\tCSOm\t\t(Eudora)\n#>69\tstring\t\tDMOV\t\t(Font/DA Mover)\n#>69\tstring\t\tDSIM\t\t(DigSim)\n#>69\tstring\t\tEDIT\t\t(Macintosh Edit)\n#>69\tstring\t\tERIK\t\t(Macintosh Finder)\n#>69\tstring\t\tEXTR\t\t(self-extracting archive)\n#>69\tstring\t\tGzip\t\t(GNU gzip)\n#>69\tstring\t\tKAHL\t\t(Think C)\n#>69\tstring\t\tLWFU\t\t(LaserWriter Utility)\n#>69\tstring\t\tLZIV\t\t(compress)\n#>69\tstring\t\tMACA\t\t(MacWrite)\n#>69\tstring\t\tMACS\t\t(Macintosh operating system)\n#>69\tstring\t\tMAcK\t\t(MacKnowledge terminal emulator)\n#>69\tstring\t\tMLND\t\t(Defender)\n#>69\tstring\t\tMPNT\t\t(MacPaint)\n#>69\tstring\t\tMSBB\t\t(Microsoft BASIC (binary))\n#>69\tstring\t\tMSWD\t\t(Microsoft Word)\n#>69\tstring\t\tNCSA\t\t(NCSA Telnet)\n#>69\tstring\t\tPJMM\t\t(Think Pascal)\n#>69\tstring\t\tPSAL\t\t(Hunt the Wumpus)\n#>69\tstring\t\tPSI2\t\t(Apple File Exchange)\n#>69\tstring\t\tR*ch\t\t(BBEdit)\n#>69\tstring\t\tRMKR\t\t(Resource Maker)\n#>69\tstring\t\tRSED\t\t(Resource Editor)\n#>69\tstring\t\tRich\t\t(BBEdit)\n#>69\tstring\t\tSIT!\t\t(StuffIt)\n#>69\tstring\t\tSPNT\t\t(SuperPaint)\n#>69\tstring\t\tUnix\t\t(NeXT Mac filesystem)\n#>69\tstring\t\tVIM!\t\t(Vim editor)\n#>69\tstring\t\tWILD\t\t(HyperCard)\n#>69\tstring\t\tXCEL\t\t(Microsoft Excel)\n#>69\tstring\t\taCa2\t\t(Fontographer)\n#>69\tstring\t\taca3\t\t(Aldus FreeHand)\n#>69\tstring\t\tdosa\t\t(Macintosh MS-DOS file system)\n#>69\tstring\t\tmovr\t\t(Font/DA Mover)\n#>69\tstring\t\tnX^n\t\t(WriteNow)\n#>69\tstring\t\tpdos\t\t(Apple ProDOS file system)\n#>69\tstring\t\tscbk\t\t(Scrapbook)\n#>69\tstring\t\tttxt\t\t(SimpleText)\n#>69\tstring\t\tufox\t\t(Foreign File Access)\n\n# Just in case...\n\n102\tstring\t\tmBIN\t\tMacBinary III data with surprising version number\n\n# sas magic from Bruce Foster (bef@nwu.edu)\n#\n#0\tstring\t\tSAS\t\tSAS\n#>8\tstring\t\tx\t\t%s\n0\tstring\t\tSAS\t\tSAS\n>24\tstring\t\tDATA\t\tdata file\n>24\tstring\t\tCATALOG\t\tcatalog\n>24\tstring\t\tINDEX\t\tdata file index\n>24\tstring\t\tVIEW\t\tdata view\n# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)\n#\n0x54    string          SAS             SAS 7+\n>0x9C   string          DATA            data file\n>0x9C   string          CATALOG         catalog\n>0x9C   string          INDEX           data file index\n>0x9C   string          VIEW            data view\n\n# spss magic for SPSS system and portable files, \n#\t from Bruce Foster (bef@nwu.edu).\n\n0\tlong\t\t0xc1e2c3c9\tSPSS Portable File\n>40\tstring \t\tx\t\t%s\n\n0\tstring\t\t$FL2\t\tSPSS System File\n>24\tstring\t\tx\t\t%s\n\n# Macintosh filesystem data\n# From \"Tom N Harris\" <telliamed@mac.com>\n# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>\n# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these\n# entries depend on the data arithmetic added after v.35\n# There's also some Pascal strings in here, ditto...\n\n# The boot block signature, according to IM:Files, is \n# \"for HFS volumes, this field always contains the value 0x4C4B.\"\n# But if this is true for MFS or HFS+ volumes, I don't know.\n# Alternatively, the boot block is supposed to be zeroed if it's\n# unused, so a simply >0 should suffice.\n\n0x400\tbeshort\t\t\t0xD2D7\t\tMacintosh MFS data\n>0\tbeshort\t\t\t0x4C4B\t\t(bootable)\n>0x40a\tbeshort\t\t\t&0x8000\t\t(locked)\n>0x402\tbeldate-0x7C25B080\tx\t\tcreated: %s,\n>0x406\tbeldate-0x7C25B080\t>0\t\tlast backup: %s,\n>0x414\tbelong\t\t\tx\t\tblock size: %d,\n>0x412\tbeshort\t\t\tx\t\tnumber of blocks: %d,\n>0x424\tpstring\t\t\tx\t\tvolume name: %s\n\n# \"BD\" is has many false positives\n#0x400\tbeshort\t\t\t0x4244\t\tMacintosh HFS data\n#>0\tbeshort\t\t\t0x4C4B\t\t(bootable)\n#>0x40a\tbeshort\t\t\t&0x8000\t\t(locked)\n#>0x40a\tbeshort\t\t\t^0x0100\t\t(mounted)\n#>0x40a\tbeshort\t\t\t&0x0200\t\t(spared blocks)\n#>0x40a\tbeshort\t\t\t&0x0800\t\t(unclean)\n#>0x47C\tbeshort\t\t\t0x482B\t\t(Embedded HFS+ Volume)\n#>0x402\tbeldate-0x7C25B080\tx\t\tcreated: %s,\n#>0x406\tbeldate-0x7C25B080\tx\t\tlast modified: %s,\n#>0x440\tbeldate-0x7C25B080\t>0\t\tlast backup: %s,\n#>0x414\tbelong\t\t\tx\t\tblock size: %d,\n#>0x412\tbeshort\t\t\tx\t\tnumber of blocks: %d,\n#>0x424\tpstring\t\t\tx\t\tvolume name: %s\n\n0x400\tbeshort\t\t\t0x482B\t\tMacintosh HFS Extended\n>&0\tbeshort\t\t\tx\t\tversion %d data\n>0\tbeshort\t\t\t0x4C4B\t\t(bootable)\n>0x404\tbelong\t\t\t^0x00000100\t(mounted)\n>&2\tbelong\t\t\t&0x00000200\t(spared blocks)\n>&2\tbelong\t\t\t&0x00000800\t(unclean)\n>&2\tbelong\t\t\t&0x00008000\t(locked)\n>&6\tstring\t\t\tx\t\tlast mounted by: '%.4s',\n# really, that should be treated as a belong and we print a string\n# based on the value. TN1150 only mentions '8.10' for \"MacOS 8.1\"\n>&14\tbeldate-0x7C25B080\tx\t\tcreated: %s,\n# only the creation date is local time, all other timestamps in HFS+ are UTC.\n>&18\tbedate-0x7C25B080\tx\t\tlast modified: %s,\n>&22\tbedate-0x7C25B080\t>0\t\tlast backup: %s,\n>&26\tbedate-0x7C25B080\t>0\t\tlast checked: %s,\n>&38\tbelong\t\t\tx\t\tblock size: %d,\n>&42\tbelong\t\t\tx\t\tnumber of blocks: %d,\n>&46\tbelong\t\t\tx\t\tfree blocks: %d\n\n# I don't think this is really necessary since it doesn't do much and \n# anything with a valid driver descriptor will also have a valid\n# partition map\n#0\t\tbeshort\t\t0x4552\t\tApple Device Driver data\n#>&24\t\tbeshort\t\t=1\t\t\\b, MacOS\n\n# Is that the partition type a cstring or a pstring? Well, IM says \"strings \n# shorter than 32 bytes must be terminated with NULL\" so I'll treat it as a \n# cstring. Of course, partitions can contain more than four entries, but \n# what're you gonna do?\n# GRR: This magic is too weak, it is just \"PM\"\n#0x200\t\tbeshort\t\t0x504D\t\tApple Partition data\n#>0x2\t\tbeshort\t\tx\t\t(block size: %d):\n#>0x230\t\tstring\t\tx\t\tfirst type: %s,\n#>0x210\t\tstring\t\tx\t\tname: %s,\n#>0x254\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>0x400\t\tbeshort\t\t0x504D\t\t\n#>>0x430\t\tstring\t\tx\t\tsecond type: %s,\n#>>0x410\t\tstring\t\tx\t\tname: %s,\n#>>0x454\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>0x600\t\tbeshort\t\t0x504D\n#>>>0x630\tstring\t\tx\t\tthird type: %s,\n#>>>0x610\tstring\t\tx\t\tname: %s,\n#>>>0x654\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>0x800\t\tbeshort\t\t0x504D\t\t\n#>>>0x830\tstring\t\tx\t\tfourth type: %s,\n#>>>0x810\tstring\t\tx\t\tname: %s,\n#>>>0x854\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>>0xa00\tbeshort\t\t0x504D\t\t\n#>>>>0xa30\tstring\t\tx\t\tfifth type: %s,\n#>>>>0xa10\tstring\t\tx\t\tname: %s,\n#>>>>0xa54\tbelong\t\tx\t\tnumber of blocks: %d\n#>>>0xc00\tbeshort\t\t0x504D\n#>>>>0xc30\tstring\t\tx\t\tsixth type: %s,\n#>>>>0xc10\tstring\t\tx\t\tname: %s,\n#>>>>0xc54\tbelong\t\tx\t\tnumber of blocks: %d\n## AFAIK, only the signature is different\n#0x200\t\tbeshort\t\t0x5453\t\tApple Old Partition data\n#>0x2\t\tbeshort\t\tx\t\tblock size: %d,\n#>0x230\t\tstring\t\tx\t\tfirst type: %s,\n#>0x210\t\tstring\t\tx\t\tname: %s,\n#>0x254\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>0x400\t\tbeshort\t\t0x504D\t\t\n#>>0x430\t\tstring\t\tx\t\tsecond type: %s,\n#>>0x410\t\tstring\t\tx\t\tname: %s,\n#>>0x454\t\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>0x800\t\tbeshort\t\t0x504D\t\t\n#>>>0x830\tstring\t\tx\t\tthird type: %s,\n#>>>0x810\tstring\t\tx\t\tname: %s,\n#>>>0x854\tbelong\t\tx\t\tnumber of blocks: %d,\n#>>>0xa00\tbeshort\t\t0x504D\t\t\n#>>>>0xa30\tstring\t\tx\t\tfourth type: %s,\n#>>>>0xa10\tstring\t\tx\t\tname: %s,\n#>>>>0xa54\tbelong\t\tx\t\tnumber of blocks: %d\n\n# From: Remi Mommsen <mommsen@slac.stanford.edu>\n0\t\tstring\t\tBOMStore\tMac OS X bill of materials (BOM) file\n\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# URL: http://en.wikipedia.org/wiki/Datafork_TrueType\n# Derived from the 'fondu' and 'ufond' source code (fondu.sf.net). 'sfnt' is\n# TrueType; 'POST' is PostScript. 'FONT' and 'NFNT' sometimes appear, but I\n# don't know what they mean.\n0\tbelong\t0x100\n>(0x4.L+24)\tbeshort\tx\n>>&4\tbelong\t0x73666e74\tMac OSX datafork font, TrueType\n>>&4\tbelong\t0x464f4e54\tMac OSX datafork font, 'FONT'\n>>&4\tbelong\t0x4e464e54\tMac OSX datafork font, 'NFNT'\n>>&4\tbelong\t0x504f5354\tMac OSX datafork font, PostScript\n\n#------------------------------------------------------------------------------\n# $File: magic,v 1.9 2009/09/19 16:28:10 christos Exp $\n# magic:  file(1) magic for magic files\n#\n0\tstring\t\t#\\ Magic\tmagic text file for file(1) cmd\n0\tlelong\t\t0xF11E041C\tmagic binary file for file(1) cmd\n>4\tlelong\t\tx\t\t(version %d) (little endian)\n0\tbelong\t\t0xF11E041C\tmagic binary file for file(1) cmd\n>4\tbelong\t\tx\t\t(version %d) (big endian)\n\n#------------------------------------------------------------------------------\n# $File: mail.news,v 1.17 2009/09/19 16:28:10 christos Exp $\n# mail.news:  file(1) magic for mail and news\n#\n# Unfortunately, saved netnews also has From line added in some news software.\n#0\tstring\t\tFrom \t\tmail text\n# There are tests to ascmagic.c to cope with mail and news.\n0\tstring\t\tRelay-Version: \told news text\n!:mime\tmessage/rfc822\n0\tstring\t\t#!\\ rnews\tbatched news text\n!:mime\tmessage/rfc822\n0\tstring\t\tN#!\\ rnews\tmailed, batched news text\n!:mime\tmessage/rfc822\n0\tstring\t\tForward\\ to \tmail forwarding text\n!:mime\tmessage/rfc822\n0\tstring\t\tPipe\\ to \tmail piping text\n!:mime\tmessage/rfc822\n0\tstring\t\tReturn-Path:\tsmtp mail text\n!:mime\tmessage/rfc822\n0\tstring\t\tPath:\t\tnews text\n!:mime\tmessage/news\n0\tstring\t\tXref:\t\tnews text\n!:mime\tmessage/news\n0\tstring\t\tFrom:\t\tnews or mail text\n!:mime\tmessage/rfc822\n0\tstring\t\tArticle \tsaved news text\n!:mime\tmessage/news\n0\tstring\t\tBABYL\t\tEmacs RMAIL text\n0\tstring\t\tReceived:\tRFC 822 mail text\n!:mime\tmessage/rfc822\n0\tstring\t\tMIME-Version:\tMIME entity text\n#0\tstring\t\tContent-\tMIME entity text\n\n# TNEF files...\n0\tlelong\t\t0x223E9F78\tTransport Neutral Encapsulation Format\n\n# From: Kevin Sullivan <ksulliva@psc.edu>\n0\tstring\t\t*mbx*\t\tMBX mail folder\n\n# From: Simon Matter <simon.matter@invoca.ch>\n0\tstring\t\t\\241\\002\\213\\015skiplist\\ file\\0\\0\\0\tCyrus skiplist DB\n\n# JAM(mbp) Fidonet message area databases\n# JHR file\n0\tstring\tJAM\\0\t\t\tJAM message area header file\n>12\tleshort >0\t\t\t(%d messages)\n\n# Squish Fidonet message area databases\n# SQD file (requires at least one message in the area)\n# XXX: Weak magic\n#256\tleshort\t0xAFAE4453\t\tSquish message area data file\n#>4\tleshort\t>0\t\t\t(%d messages)\n\n#0\tstring\t\t\\<!--\\ MHonArc\t\ttext/html; x-type=mhonarc\n\n#------------------------------------------------------------------------------\n# $File: maple,v 1.6 2009/09/19 16:28:10 christos Exp $\n# maple:  file(1) magic for maple files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Maple V release 4, a multi-purpose math program\n#\n\n# maple library .lib\n0\tstring\t\\000MVR4\\nI\tMapleVr4 library\n\n# .ind\n# no magic for these :-(\n# they are compiled indexes for maple files\n\n# .hdb \n0\tstring\t\\000\\004\\000\\000\tMaple help database\n\n# .mhp\n# this has the form <PACKAGE=name>\n0\tstring\t\\<PACKAGE=\tMaple help file\n0\tstring\t\\<HELP\\ NAME=\tMaple help file\n0\tstring\t\\n\\<HELP\\ NAME=\tMaple help file with extra carriage return at start (yuck)\n#0\tstring\t#\\ Newton\tMaple help file, old style\n0\tstring\t#\\ daub\tMaple help file, old style\n#0\tstring\t#===========\tMaple help file, old style\n\n# .mws\n0\tstring\t\\000\\000\\001\\044\\000\\221\tMaple worksheet\n#this is anomalous\n0\tstring\tWriteNow\\000\\002\\000\\001\\000\\000\\000\\000\\100\\000\\000\\000\\000\\000\tMaple worksheet, but weird\n# this has the form {VERSION 2 3 \"IBM INTEL NT\" \"2.3\" }\\n\n# that is {VERSION major_version miunor_version computer_type version_string}\n0\tstring\t{VERSION\\ \tMaple worksheet\n>9\tstring\t>\\0\tversion %.1s.\n>>>11\tstring\t>\\0\t%.1s\n\n# .mps\n0\tstring\t\\0\\0\\001$\tMaple something\n# from byte 4 it is either 'nul E' or 'soh R'\n# I think 'nul E' means a file that was saved as  a different name\n# a sort of revision marking\n# 'soh R' means new \n>4\tstring\t\\000\\105\tAn old revision\n>4\tstring\t\\001\\122\tThe latest save\n\n# .mpl\n# some of these are the same as .mps above\n#0000000 000 000 001 044 000 105 same as .mps\n#0000000 000 000 001 044 001 122 same as .mps\n\n0\tstring\t#\\n##\\ <SHAREFILE=\tMaple something\n0\tstring\t\\n#\\n##\\ <SHAREFILE=\tMaple something\n0\tstring\t##\\ <SHAREFILE=\tMaple something\n0\tstring\t#\\r##\\ <SHAREFILE=\tMaple something\n0\tstring\t\\r#\\r##\\ <SHAREFILE=\tMaple something\n0\tstring\t#\\ \\r##\\ <DESCRIBE>\tMaple something anomalous.\n\n#------------------------------------------------------------------------------\n# $File: mathcad,v 1.5 2009/09/19 16:28:10 christos Exp $\n# mathcad:  file(1) magic for Mathcad documents\n# URL:\thttp://www.mathsoft.com/\n# From:\tJosh Triplett <josh@freedesktop.org>\n\n0\tstring\t.MCAD\\t\t\tMathcad document\n\n#------------------------------------------------------------------------------\n# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $\n# mathematica:  file(1) magic for mathematica files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Mathematica a multi-purpose math program\n# versions 2.2 and 3.0\n\n#mathematica .mb\n0\tstring\t\\064\\024\\012\\000\\035\\000\\000\\000\tMathematica version 2 notebook\n0\tstring\t\\064\\024\\011\\000\\035\\000\\000\\000\tMathematica version 2 notebook\n\n# .ma\n# multiple possibilites:\n\n0\tstring\t(*^\\n\\n::[\\011frontEndVersion\\ =\\ \tMathematica notebook\n#>41\tstring\t>\\0\t%s\n\n#0\tstring\t(*^\\n\\n::[\\011palette\tMathematica notebook version 2.x\n\n#0\tstring\t(*^\\n\\n::[\\011Information\tMathematica notebook version 2.x\n#>675\tstring\t>\\0\t%s #doesn't work well\n\n# there may be 'cr' instread of 'nl' in some does this matter?\n\n# generic:\n0\tstring\t(*^\\r\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r\\n\\r\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\015\t\t\tMathematica notebook version 2.x\n0\tstring\t(*^\\n\\r\\n\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\r\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\n\\n::[\\011\tMathematica notebook version 2.x\n0\tstring\t(*^\\n::[\\011\tMathematica notebook version 2.x\n\n\n# Mathematica .mx files\n\n#0\tstring\t(*This\\ is\\ a\\ Mathematica\\ binary\\ dump\\ file.\\ It\\ can\\ be\\ loaded\\ with\\ Get.*)\tMathematica binary file\n0\tstring\t(*This\\ is\\ a\\ Mathematica\\ binary\\ \tMathematica binary file\n#>71\tstring \\000\\010\\010\\010\\010\\000\\000\\000\\000\\000\\000\\010\\100\\010\\000\\000\\000\t\n# >71... is optional\n>88\tstring\t>\\0\tfrom %s\n\n\n# Mathematica files PBF:\n# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000\n0\tstring\tMMAPBF\\000\\001\\000\\000\\000\\203\\000\\001\\000\tMathematica PBF (fonts I think)\n\n# .ml files  These are menu resources I think\n# these start with \"[0-9][0-9][0-9]\\ A~[0-9][0-9][0-9]\\ \n# how to put that into a magic rule?\n4\tstring\t\\ A~\tMAthematica .ml file\n\n# .nb files\n#too long 0\tstring\t(***********************************************************************\\n\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ Mathematica-Compatible Notebook\tMathematica 3.0 notebook\n0\tstring\t(***********************\tMathematica 3.0 notebook\n\n# other (* matches it is a comment start in these langs\n# GRR: Too weak; also matches other languages e.g. ML\n#0\tstring\t(*\tMathematica, or Pascal, Modula-2 or 3 code text\n\n#########################\n# MatLab v5\n0       string  MATLAB  Matlab v5 mat-file\n>126    short   0x494d  (big endian)\n>>124   beshort x       version 0x%04x\n>126    short   0x4d49  (little endian)\n>>124   leshort x       version 0x%04x\n\n\n#------------------------------------------------------------------------------\n# $File: matroska,v 1.5 2009/09/27 19:02:12 christos Exp $\n# matroska:  file(1) magic for Matroska files\n#\n# See http://www.matroska.org/\n#\n\n# EBML id:\n0\t\tbelong\t\t0x1a45dfa3\n# DocType id:\n>5\t\tbeshort\t\t0x4282\n# DocType contents:\n>>8\t\tstring\t\tmatroska\tMatroska data\n!:mime  video/x-matroska\n\n#------------------------------------------------------------------------------\n# $File: mcrypt,v 1.5 2009/09/19 16:28:10 christos Exp $\n# Mavroyanopoulos Nikos <nmav@hellug.gr>\n# mcrypt:   file(1) magic for mcrypt 2.2.x;\n0\tstring\t\t\\0m\\3\t\tmcrypt 2.5 encrypted data,\n>4\tstring\t\t>\\0\t\talgorithm: %s,\n>>&1\tleshort\t\t>0\t\tkeysize: %d bytes,\n>>>&0\tstring\t\t>\\0\t\tmode: %s,\n\n0\tstring\t\t\\0m\\2\t\tmcrypt 2.2 encrypted data,\n>3\tbyte\t\t0\t\talgorithm: blowfish-448,\n>3\tbyte\t\t1\t\talgorithm: DES,\n>3\tbyte\t\t2\t\talgorithm: 3DES,\n>3\tbyte\t\t3\t\talgorithm: 3-WAY,\n>3\tbyte\t\t4\t\talgorithm: GOST,\n>3\tbyte\t\t6\t\talgorithm: SAFER-SK64,\n>3\tbyte\t\t7\t\talgorithm: SAFER-SK128,\n>3\tbyte\t\t8\t\talgorithm: CAST-128,\n>3\tbyte\t\t9\t\talgorithm: xTEA,\n>3\tbyte\t\t10\t\talgorithm: TWOFISH-128,\n>3\tbyte\t\t11\t\talgorithm: RC2,\n>3\tbyte\t\t12\t\talgorithm: TWOFISH-192,\n>3\tbyte\t\t13\t\talgorithm: TWOFISH-256,\n>3\tbyte\t\t14\t\talgorithm: blowfish-128,\n>3\tbyte\t\t15\t\talgorithm: blowfish-192,\n>3\tbyte\t\t16\t\talgorithm: blowfish-256,\n>3\tbyte\t\t100\t\talgorithm: RC6,\n>3\tbyte\t\t101\t\talgorithm: IDEA,\n>4\tbyte\t\t0\t\tmode: CBC,\n>4\tbyte\t\t1\t\tmode: ECB,\n>4\tbyte\t\t2\t\tmode: CFB,\n>4\tbyte\t\t3\t\tmode: OFB,\n>4\tbyte\t\t4\t\tmode: nOFB,\n>5\tbyte\t\t0\t\tkeymode: 8bit\n>5\tbyte\t\t1\t\tkeymode: 4bit\n>5\tbyte\t\t2\t\tkeymode: SHA-1 hash\n>5\tbyte\t\t3\t\tkeymode: MD5 hash\n\n#------------------------------------------------------------------------------\n# $File: mercurial,v 1.4 2009/09/19 16:28:10 christos Exp $\n# mercurial:  file(1) magic for Mercurial changeset bundles\n# http://www.selenic.com/mercurial/wiki/\n#\n# Jesse Glick (jesse.glick@sun.com)\n#\n\n0\tstring\t\tHG10\t\tMercurial changeset bundle\n>4\tstring\t\tUN\t\t(uncompressed)\n>4\tstring\t\tGZ\t\t(gzip compressed)\n>4\tstring\t\tBZ\t\t(bzip2 compressed)\n\n#------------------------------------------------------------------------------\n# $File: mime,v 1.5 2009/09/19 16:28:10 christos Exp $\n# mime:  file(1) magic for MIME encoded files\n#\n0\tstring\t\tContent-Type:\\ \n>14\tstring\t\t>\\0\t\t%s\n0\tstring\t\tContent-Type:\n>13\tstring\t\t>\\0\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: mips,v 1.5 2009/09/19 16:28:10 christos Exp $\n# mips:  file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)\n#                         Dec Ultrix (MIPS)\n# all of SGI's *current* machines and OSes run in big-endian mode on the\n# MIPS machines, as far as I know.\n#\n# XXX - what is the blank \"-\" line?\n#\n# kbd file definitions\n0\tstring\tkbd!map\t\tkbd map file\n>8\tbyte\t>0\t\tVer %d:\n>10\tshort\t>0\t\twith %d table(s)\n0\tbelong\t0407\t\told SGI 68020 executable\n0\tbelong\t0410\t\told SGI 68020 pure executable\n0\tbeshort\t0x8765\t\tdisk quotas file\n0\tbeshort\t0x0506\t\tIRIS Showcase file\n>2\tbyte\t0x49\t\t-\n>3\tbyte\tx\t\t- version %ld\n0\tbeshort\t0x0226\t\tIRIS Showcase template\n>2\tbyte\t0x63\t\t-\n>3\tbyte\tx\t\t- version %ld\n0\tbelong\t0x5343464d\tIRIS Showcase file\n>4\tbyte\tx\t\t- version %ld\n0\tbelong\t0x5443464d\tIRIS Showcase template\n>4\tbyte\tx\t\t- version %ld\n0\tbelong\t0xdeadbabe\tIRIX Parallel Arena\n>8\tbelong\t>0\t\t- version %ld\n#\n0\tbeshort\t0x0160\t\tMIPSEB ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %ld\n>23\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x0162\t\tMIPSEL-BE ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x6001\t\tMIPSEB-LE ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %d\n>22\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x6201\t\tMIPSEL ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %ld\n>22\tbyte\tx\t\t\b.%ld\n#\n# MIPS 2 additions\n#\n0\tbeshort\t0x0163\t\tMIPSEB MIPS-II ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %ld\n>23\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x0166\t\tMIPSEL-BE MIPS-II ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %ld\n>23\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x6301\t\tMIPSEB-LE MIPS-II ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %ld\n>22\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x6601\t\tMIPSEL MIPS-II ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %ld\n>22\tbyte\tx\t\t\b.%ld\n#\n# MIPS 3 additions\n#\n0\tbeshort\t0x0140\t\tMIPSEB MIPS-III ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %ld\n>23\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x0142\t\tMIPSEL-BE MIPS-III ECOFF executable\n>20\tbeshort\t0407\t\t(impure)\n>20\tbeshort\t0410\t\t(swapped)\n>20\tbeshort\t0413\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>22\tbyte\tx\t\t- version %ld\n>23\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x4001\t\tMIPSEB-LE MIPS-III ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %ld\n>22\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x4201\t\tMIPSEL MIPS-III ECOFF executable\n>20\tbeshort\t03401\t\t(impure)\n>20\tbeshort\t04001\t\t(swapped)\n>20\tbeshort\t05401\t\t(paged)\n>8\tbelong\t>0\t\tnot stripped\n>8\tbelong\t0\t\tstripped\n>23\tbyte\tx\t\t- version %ld\n>22\tbyte\tx\t\t\b.%ld\n#\n0\tbeshort\t0x180\t\tMIPSEB Ucode\n0\tbeshort\t0x182\t\tMIPSEL-BE Ucode\n# 32bit core file\n0\tbelong\t0xdeadadb0\tIRIX core dump\n>4\tbelong\t1\t\tof\n>16\tstring\t>\\0\t\t'%s'\n# 64bit core file\n0\tbelong\t0xdeadad40\tIRIX 64-bit core dump\n>4\tbelong\t1\t\tof\n>16\tstring\t>\\0\t\t'%s'\n# N32bit core file\n0       belong\t0xbabec0bb\tIRIX N32 core dump\n>4      belong\t1               of\n>16     string\t>\\0             '%s'\n# New style crash dump file\n0\tstring\t\\x43\\x72\\x73\\x68\\x44\\x75\\x6d\\x70\tIRIX vmcore dump of\n>36\tstring\t>\\0\t\t\t\t\t'%s'\n# Trusted IRIX info\n0\tstring\tSGIAUDIT\tSGI Audit file\n>8\tbyte\tx\t\t- version %d\n>9\tbyte\tx\t\t\b.%ld\n#\n0\tstring\tWNGZWZSC\tWingz compiled script\n0\tstring\tWNGZWZSS\tWingz spreadsheet\n0\tstring\tWNGZWZHP\tWingz help file\n#\n0\tstring\t#Inventor V\tIRIS Inventor 1.0 file\n0\tstring\t#Inventor V2\tOpen Inventor 2.0 file\n# GLF is OpenGL stream encoding\n0\tstring\tglfHeadMagic();\t\tGLF_TEXT\n4\tbelong\t0x7d000000\t\tGLF_BINARY_LSB_FIRST\n4\tbelong\t0x0000007d\t\tGLF_BINARY_MSB_FIRST\n# GLS is OpenGL stream encoding; GLS is the successor of GLF\n0\tstring\tglsBeginGLS(\t\tGLS_TEXT\n4\tbelong\t0x10000000\t\tGLS_BINARY_LSB_FIRST\n4\tbelong\t0x00000010\t\tGLS_BINARY_MSB_FIRST\n\n#------------------------------------------------------------------------------\n# $File: mirage,v 1.7 2009/09/19 16:28:10 christos Exp $\n# mirage:  file(1) magic for Mirage executables\n#\n# XXX - byte order?\n#\n0\tlong\t31415\t\tMirage Assembler m.out executable\n\n#-----------------------------------------------------------------------------\n# $File: misctools,v 1.10 2009/09/19 16:28:10 christos Exp $\n# misctools:  file(1) magic for miscellaneous UNIX tools.\n#\n0\tsearch/1\t%%!!\t\t\tX-Post-It-Note text\n0\tstring/c\tBEGIN:VCALENDAR\t\tvCalendar calendar file\n0\tstring/c\tBEGIN:VCARD\t\tvCard visiting card\n!:mime\ttext/x-vcard\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n4\tstring\tgtktalog\t\tGNOME Catalogue (gtktalog)\n>13\tstring\t>\\0\t\t\tversion %s\n\n# Summary: GStreamer binary registry\n# Extension: .bin\n# Submitted by: Josh Triplett <josh@joshtriplett.org>\n0\tbelong\t0xc0def00d\t\tGStreamer binary registry\n>4\tstring\tx\t\t\t\\b, version %s\n\n# Summary: Libtool library file\n# Extension: .la\n# Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl>\n0\tsearch/80\t.la\\ -\\ a\\ libtool\\ library\\ file\tlibtool library file\n\n# Summary: Libtool object file\n# Extension: .lo\n# Submitted by: Abel Cheung <abelcheung@gmail.com>\n0\tsearch/80\t.lo\\ -\\ a\\ libtool\\ object\\ file\tlibtool object file\n\n# From: Daniel Novotny <dnovotny@redhat.com>\n0\tstring\t\tMDMP\\x93\\xA7\t\t\t\tMDMP crash report data\n\n#------------------------------------------------------------------------------\n# $File: mkid,v 1.6 2009/09/19 16:28:10 christos Exp $\n# mkid:  file(1) magic for mkid(1) databases\n#\n# ID is the binary tags database produced by mkid(1).\n#\n# XXX - byte order?\n#\n0\tstring\t\t\\311\\304\tID tags data\n>2\tshort\t\t>0\t\tversion %d\n\n#------------------------------------------------------------------------------\n# $File: mlssa,v 1.4 2009/09/19 16:28:10 christos Exp $\n# mlssa: file(1) magic for MLSSA datafiles\n#\n0\t\tlelong\t\t0xffffabcd\tMLSSA datafile,\n>4\t\tleshort\t\tx\t\talgorithm %d,\n>10\t\tlelong\t\tx\t\t%d samples\n\n#------------------------------------------------------------------------------\n# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $\n# mmdf:  file(1) magic for MMDF mail files\n#\n0\tstring\t\\001\\001\\001\\001\tMMDF mailbox\n\n#------------------------------------------------------------------------------\n# $File: modem,v 1.4 2009/09/19 16:28:10 christos Exp $\n# modem:  file(1) magic for modem programs\n#\n# From: Florian La Roche <florian@knorke.saar.de>\n1\tstring\t\tPC\\ Research,\\ Inc\tDigifax-G3-File\n>29\tbyte\t\t1\t\t\t\\b, fine resolution\n>29\tbyte\t\t0\t\t\t\\b, normal resolution\n\n0\tshort\t\t0x0100\t\traw G3 data, byte-padded\n0\tshort\t\t0x1400\t\traw G3 data\n#\n# Magic data for vgetty voice formats\n# (Martin Seine & Marc Eberhard)\n\n#\n# raw modem data version 1\n#\n0    string    RMD1      raw modem data\n>4   string    >\\0       (%s /\n>20  short     >0        compression type 0x%04x)\n\n#\n# portable voice format 1\n#\n0    string    PVF1\\n         portable voice format\n>5   string    >\\0       (binary %s)\n\n#\n# portable voice format 2\n#\n0    string    PVF2\\n         portable voice format\n>5   string >\\0          (ascii %s)\n\n\n#------------------------------------------------------------------------------\n# $File: motorola,v 1.10 2009/09/19 16:28:11 christos Exp $\n# motorola:  file(1) magic for Motorola 68K and 88K binaries\n#\n# 68K\n#\n0\tbeshort\t\t0520\t\tmc68k COFF\n>18\tbeshort\t\t^00000020\tobject\n>18\tbeshort\t\t&00000020\texecutable\n>12\tbelong\t\t>0\t\tnot stripped\n>168\tstring\t\t.lowmem\t\tApple toolbox\n>20\tbeshort\t\t0407\t\t(impure)\n>20\tbeshort\t\t0410\t\t(pure)\n>20\tbeshort\t\t0413\t\t(demand paged)\n>20\tbeshort\t\t0421\t\t(standalone)\n0\tbeshort\t\t0521\t\tmc68k executable (shared)\n>12\tbelong\t\t>0\t\tnot stripped\n0\tbeshort\t\t0522\t\tmc68k executable (shared demand paged)\n>12\tbelong\t\t>0\t\tnot stripped\n#\n# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)\n#\n0\tbeshort\t\t0554\t\t68K BCS executable\n#\n# 88K\n#\n# Motorola/88Open BCS\n#\n0\tbeshort\t\t0555\t\t88K BCS executable\n#\n# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>\n0   string      S0          Motorola S-Record; binary data in text format\n\n# ATARI ST relocatable PRG\n#\n# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001\n# (according to Roland Waldi, Oct 21, 1987)\n# besides the magic 0x601a, the text segment size is checked to be\n# not larger than 1 MB (which is a lot on ST).\n# The additional 0x601b distinction I took from Doug Lee's magic.\n0\tbelong&0xFFFFFFF0\t0x601A0000\tAtari ST M68K contiguous executable\n>2\tbelong\t\t\tx\t\t(txt=%ld,\n>6\tbelong\t\t\tx\t\tdat=%ld,\n>10\tbelong\t\t\tx\t\tbss=%ld,\n>14\tbelong\t\t\tx\t\tsym=%ld)\n0\tbelong&0xFFFFFFF0\t0x601B0000\tAtari ST M68K non-contig executable\n>2\tbelong\t\t\tx\t\t(txt=%ld,\n>6\tbelong\t\t\tx\t\tdat=%ld,\n>10\tbelong\t\t\tx\t\tbss=%ld,\n>14\tbelong\t\t\tx\t\tsym=%ld)\n\n# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)\n0       beshort         0x601A          Atari 68xxx executable,\n>2      belong          x               text len %lu,\n>6      belong          x               data len %lu,\n>10     belong          x               BSS len %lu,\n>14     belong          x               symboltab len %lu,\n>18     belong          0\n>22     belong          &0x01           fastload flag,\n>22     belong          &0x02           may be loaded to alternate RAM,\n>22     belong          &0x04           malloc may be from alternate RAM,\n>22     belong          x               flags: 0x%lX,\n>26     beshort         0               no relocation tab\n>26     beshort         !0              + relocation tab\n>30     string          SFX             [Self-Extracting LZH SFX archive]\n>38     string          SFX             [Self-Extracting LZH SFX archive]\n>44     string          ZIP!            [Self-Extracting ZIP SFX archive]\n\n0       beshort         0x0064          Atari 68xxx CPX file\n>8      beshort         x               (version %04lx)\n\n#------------------------------------------------------------------------------\n# $File: mozilla,v 1.4 2009/09/19 16:28:11 christos Exp $\n# mozilla:  file(1) magic for Mozilla XUL fastload files \n# (XUL.mfasl and XPC.mfasl)\n# URL:\thttp://www.mozilla.org/\n# From:\tJosh Triplett <josh@freedesktop.org>\n\n0\tstring\tXPCOM\\nMozFASL\\r\\n\\x1A\t\tMozilla XUL fastload data\n\n#------------------------------------------------------------------------------\n# $File: msdos,v 1.65 2009/09/19 16:28:11 christos Exp $\n# msdos:  file(1) magic for MS-DOS files\n#\n\n# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)\n# updated by Joerg Jenderek at Oct 2008\n0\tstring\t@\t\t\t\n>1\tstring/cW\t\\ echo\\ off\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\techo\\ off\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\trem\\ \t\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n>1\tstring/cW\tset\\ \t\tDOS batch file text\n!:mime\ttext/x-msdos-batch\n\n\n# OS/2 batch files are REXX. the second regex is a bit generic, oh well\n# the matched commands seem to be common in REXX and uncommon elsewhere\n100\tsearch/0xffff   rxfuncadd\n>100\tregex/c =^[\\ \\t]{0,10}call[\\ \\t]{1,10}rxfunc\tOS/2 REXX batch file text\n100\tsearch/0xffff   say\n>100\tregex/c =^[\\ \\t]{0,10}say\\ ['\"]\t\t\tOS/2 REXX batch file text\n\n0\tleshort\t\t0x14c\tMS Windows COFF Intel 80386 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x166\tMS Windows COFF MIPS R4000 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x184\tMS Windows COFF Alpha object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x268\tMS Windows COFF Motorola 68000 object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x1f0\tMS Windows COFF PowerPC object file\n#>4\tledate\t\tx\tstamp %s\n0\tleshort\t\t0x290\tMS Windows COFF PA-RISC object file\n#>4\tledate\t\tx\tstamp %s\n\n# XXX - according to Microsoft's spec, at an offset of 0x3c in a\n# PE-format executable is the offset in the file of the PE header;\n# unfortunately, that's a little-endian offset, and there's no way\n# to specify an indirect offset with a specified byte order.\n# So, for now, we assume the standard MS-DOS stub, which puts the\n# PE header at 0x80 = 128.\n#\n# Required OS version and subsystem version were 4.0 on some NT 3.51\n# executables built with Visual C++ 4.0, so it's not clear that\n# they're interesting.\tThe user version was 0.0, but there's\n# probably some linker directive to set it.  The linker version was\n# 3.0, except for one \".exe\" which had it as 4.20 (same damn linker!).\n#\n# many of the compressed formats were extraced from IDARC 1.23 source code\n#\n0\tstring\tMZ\n!:mime\tapplication/x-dosexec\n>0x18  leshort <0x40 MS-DOS executable\n>0 string MZ\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0PE\\0\\0 \\b, PE for MS Windows\n>>&18\tleshort&0x2000\t>0\t(DLL)\n>>&88\tleshort\t\t0\t(unknown subsystem)\n>>&88\tleshort\t\t1\t(native)\n>>&88\tleshort\t\t2\t(GUI)\n>>&88\tleshort\t\t3\t(console)\n>>&88\tleshort\t\t7\t(POSIX)\n>>&0\tleshort\t\t0x0\tunknown processor\n>>&0\tleshort\t\t0x14c\tIntel 80386\n>>&0\tleshort\t\t0x166\tMIPS R4000\n>>&0\tleshort\t\t0x184\tAlpha\n>>&0\tleshort\t\t0x268\tMotorola 68000\n>>&0\tleshort\t\t0x1f0\tPowerPC\n>>&0\tleshort\t\t0x290\tPA-RISC\n>>&18\tleshort&0x0100\t>0\t32-bit\n>>&18\tleshort&0x1000\t>0\tsystem file\n>>&228\tlelong\t\t>0\t\\b, Mono/.Net assembly\n>>&0xf4 search/0x140 \\x0\\x40\\x1\\x0\n>>>(&0.l+(4)) string MSCF \\b, WinHKI CAB self-extracting archive\n>30\t\tstring\tCopyright\\ 1989-1990\\ PKWARE\\ Inc.\tSelf-extracting PKZIP archive\n!:mime\tapplication/zip\n# Is next line correct? One might expect \"Corp.\" not \"Copr.\" If it is right, add a note to that effect.\n>30\t\tstring\tPKLITE\\ Copr.\tSelf-extracting PKZIP archive\n!:mime\tapplication/zip\n\n>0x18  leshort >0x3f\n>>(0x3c.l) string PE\\0\\0 PE\n>>>(0x3c.l+25) byte\t\t1 \\b32 executable\n>>>(0x3c.l+25) byte\t\t2 \\b32+ executable\n# hooray, there's a DOS extender using the PE format, with a valid PE\n# executable inside (which just prints a message and exits if run in win)\n>>>(0x3c.l+92)\tleshort\t\t<10\n>>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender\n>>>>(8.s*16) string !32STUB for MS Windows\n>>>>>(0x3c.l+22)\tleshort&0x2000\t>0\t(DLL)\n>>>>>(0x3c.l+92)\tleshort\t\t0\t(unknown subsystem)\n>>>>>(0x3c.l+92)\tleshort\t\t1\t(native)\n>>>>>(0x3c.l+92)\tleshort\t\t2\t(GUI)\n>>>>>(0x3c.l+92)\tleshort\t\t3\t(console)\n>>>>>(0x3c.l+92)\tleshort\t\t7\t(POSIX)\n>>>(0x3c.l+92)\tleshort\t\t10\t(EFI application)\n>>>(0x3c.l+92)\tleshort\t\t11\t(EFI boot service driver)\n>>>(0x3c.l+92)\tleshort\t\t12\t(EFI runtime driver)\n>>>(0x3c.l+92)\tleshort\t\t13\t(XBOX)\n>>>(0x3c.l+4)\tleshort\t\t0x0\tunknown processor\n>>>(0x3c.l+4)\tleshort\t\t0x14c\tIntel 80386\n>>>(0x3c.l+4)\tleshort\t\t0x166\tMIPS R4000\n>>>(0x3c.l+4)\tleshort\t\t0x184\tAlpha\n>>>(0x3c.l+4)\tleshort\t\t0x268\tMotorola 68000\n>>>(0x3c.l+4)\tleshort\t\t0x1f0\tPowerPC\n>>>(0x3c.l+4)\tleshort\t\t0x290\tPA-RISC\n>>>(0x3c.l+4)\tleshort\t\t0x200\tIntel Itanium\n>>>(0x3c.l+22)\tleshort&0x0100\t>0\t32-bit\n>>>(0x3c.l+22)\tleshort&0x1000\t>0\tsystem file\n>>>(0x3c.l+232) lelong\t>0\tMono/.Net assembly\n\n>>>>(0x3c.l+0xf8)\tstring\t\tUPX0 \\b, UPX compressed\n>>>>(0x3c.l+0xf8)\tsearch/0x140\tPEC2 \\b, PECompact2 compressed\n>>>>(0x3c.l+0xf8)\tsearch/0x140\tUPX2\n>>>>>(&0x10.l+(-4))\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive (Info-Zip)\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.idata\n>>>>>(&0xe.l+(-4))\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive (Info-Zip)\n>>>>>(&0xe.l+(-4))\tstring\t\tZZ0 \\b, ZZip self-extracting archive\n>>>>>(&0xe.l+(-4))\tstring\t\tZZ1 \\b, ZZip self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.rsrc\n>>>>>(&0x0f.l+(-4))\tstring\t\ta\\\\\\4\\5 \\b, WinHKI self-extracting archive\n>>>>>(&0x0f.l+(-4))\tstring\t\tRar! \\b, RAR self-extracting archive\n>>>>>(&0x0f.l+(-4))\tsearch/0x3000\tMSCF \\b, InstallShield self-extracting archive\n>>>>>(&0x0f.l+(-4))\tsearch/32\tNullsoft \\b, Nullsoft Installer self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.data\n>>>>>(&0x0f.l)\t\tstring\t\tWEXTRACT \\b, MS CAB-Installer self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.petite\\0 \\b, Petite compressed\n>>>>>(0x3c.l+0xf7)\tbyte\t\tx\n>>>>>>(&0x104.l+(-4))\tstring\t\t=!sfx! \\b, ACE self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.WISE \\b, WISE installer self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.dz\\0\\0\\0 \\b, Dzip self-extracting archive\n>>>>(0x3c.l+0xf8)\tsearch/0x140\t.reloc\n>>>>>(&0xe.l+(-4))\tsearch/0x180\tPK\\3\\4 \\b, ZIP self-extracting archive (WinZip)\n\n>>>>&(0x3c.l+0xf8)\tsearch/0x100\t_winzip_ \\b, ZIP self-extracting archive (WinZip)\n>>>>&(0x3c.l+0xf8)\tsearch/0x100\tSharedD \\b, Microsoft Installer self-extracting archive\n>>>>0x30\t\tstring\t\tInno \\b, InnoSetup self-extracting archive\n\n>>(0x3c.l) string !PE\\0\\0 MS-DOS executable\n\n>>(0x3c.l)\t\tstring\t\tNE \\b, NE\n>>>(0x3c.l+0x36)\tbyte\t\t0 (unknown OS)\n>>>(0x3c.l+0x36)\tbyte\t\t1 for OS/2 1.x\n>>>(0x3c.l+0x36)\tbyte\t\t2 for MS Windows 3.x\n>>>(0x3c.l+0x36)\tbyte\t\t3 for MS-DOS\n>>>(0x3c.l+0x36)\tbyte\t\t>3 (unknown OS)\n>>>(0x3c.l+0x36)\tbyte\t\t0x81 for MS-DOS, Phar Lap DOS extender\n>>>(0x3c.l+0x0c)\tleshort&0x8003\t0x8002 (DLL)\n>>>(0x3c.l+0x0c)\tleshort&0x8003\t0x8001 (driver)\n>>>&(&0x24.s-1)\t\tstring\t\tARJSFX \\b, ARJ self-extracting archive\n>>>(0x3c.l+0x70)\tsearch/0x80\tWinZip(R)\\ Self-Extractor \\b, ZIP self-extracting archive (WinZip)\n\n>>(0x3c.l)\t\tstring\t\tLX\\0\\0 \\b, LX\n>>>(0x3c.l+0x0a)\tleshort\t\t<1 (unknown OS)\n>>>(0x3c.l+0x0a)\tleshort\t\t1 for OS/2\n>>>(0x3c.l+0x0a)\tleshort\t\t2 for MS Windows\n>>>(0x3c.l+0x0a)\tleshort\t\t3 for DOS\n>>>(0x3c.l+0x0a)\tleshort\t\t>3 (unknown OS)\n>>>(0x3c.l+0x10)\tlelong&0x28000\t=0x8000 (DLL)\n>>>(0x3c.l+0x10)\tlelong&0x20000\t>0 (device driver)\n>>>(0x3c.l+0x10)\tlelong&0x300\t0x300 (GUI)\n>>>(0x3c.l+0x10)\tlelong&0x28300\t<0x300 (console)\n>>>(0x3c.l+0x08)\tleshort\t\t1 i80286\n>>>(0x3c.l+0x08)\tleshort\t\t2 i80386\n>>>(0x3c.l+0x08)\tleshort\t\t3 i80486\n>>>(8.s*16)\t\tstring\t\temx \\b, emx\n>>>>&1\t\t\tstring\t\tx %s\n>>>&(&0x54.l-3)\t\tstring\t\tarjsfx \\b, ARJ self-extracting archive\n\n# MS Windows system file, supposedly a collection of LE executables\n>>(0x3c.l)\t\tstring\t\tW3 \\b, W3 for MS Windows\n\n>>(0x3c.l)\t\tstring\t\tLE\\0\\0 \\b, LE executable\n>>>(0x3c.l+0x0a)\tleshort\t\t1\n# some DOS extenders use LE files with OS/2 header\n>>>>0x240\t\tsearch/0x100\tDOS/4G for MS-DOS, DOS4GW DOS extender\n>>>>0x240\t\tsearch/0x200\tWATCOM\\ C/C++ for MS-DOS, DOS4GW DOS extender\n>>>>0x440\t\tsearch/0x100\tCauseWay\\ DOS\\ Extender for MS-DOS, CauseWay DOS extender\n>>>>0x40\t\tsearch/0x40\tPMODE/W for MS-DOS, PMODE/W DOS extender\n>>>>0x40\t\tsearch/0x40\tSTUB/32A for MS-DOS, DOS/32A DOS extender (stub)\n>>>>0x40\t\tsearch/0x80\tSTUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)\n>>>>0x40\t\tsearch/0x80\tDOS/32A for MS-DOS, DOS/32A DOS extender (embedded)\n# this is a wild guess; hopefully it is a specific signature\n>>>>&0x24\t\tlelong\t\t<0x50\n>>>>>(&0x4c.l)\t\tstring\t\t\\xfc\\xb8WATCOM\n>>>>>>&0\t\tsearch/8\t3\\xdbf\\xb9 \\b, 32Lite compressed\n# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP\n#>>>>(0x3c.l+0x1c)\tlelong\t\t>0x10000 for OS/2\n# fails with DOS-Extenders.\n>>>(0x3c.l+0x0a)\tleshort\t\t2 for MS Windows\n>>>(0x3c.l+0x0a)\tleshort\t\t3 for DOS\n>>>(0x3c.l+0x0a)\tleshort\t\t4 for MS Windows (VxD)\n>>>(&0x7c.l+0x26)\tstring\t\tUPX \\b, UPX compressed\n>>>&(&0x54.l-3)\t\tstring\t\tUNACE \\b, ACE self-extracting archive\n\n# looks like ASCII, probably some embedded copyright message.\n# and definitely not NE/LE/LX/PE\n>>0x3c\t\tlelong\t>0x20000000\n>>>(4.s*512)\tleshort !0x014c \\b, MZ for MS-DOS\n# header data too small for extended executable\n>2\t\tlong\t!0\n>>0x18\t\tleshort <0x40\n>>>(4.s*512)\tleshort !0x014c\n\n>>>>&(2.s-514)\tstring\t!LE\n>>>>>&-2\tstring\t!BW \\b, MZ for MS-DOS\n>>>>&(2.s-514)\tstring\tLE \\b, LE\n>>>>>0x240\tsearch/0x100\tDOS/4G for MS-DOS, DOS4GW DOS extender\n# educated guess since indirection is still not capable enough for complex offset\n# calculations (next embedded executable would be at &(&2*512+&0-2)\n# I suspect there are only LE executables in these multi-exe files\n>>>>&(2.s-514)\tstring\tBW\n>>>>>0x240\tsearch/0x100\tDOS/4G ,\\b LE for MS-DOS, DOS4GW DOS extender (embedded)\n>>>>>0x240\tsearch/0x100\t!DOS/4G ,\\b BW collection for MS-DOS\n\n# This sequence skips to the first COFF segment, usually .text\n>(4.s*512)\tleshort\t\t0x014c \\b, COFF\n>>(8.s*16)\tstring\t\tgo32stub for MS-DOS, DJGPP go32 DOS extender\n>>(8.s*16)\tstring\t\temx\n>>>&1\t\tstring\t\tx for DOS, Win or OS/2, emx %s\n>>&(&0x42.l-3)\tbyte\t\tx \n>>>&0x26\tstring\t\tUPX \\b, UPX compressed\n# and yet another guess: small .text, and after large .data is unusal, could be 32lite\n>>&0x2c\t\tsearch/0xa0\t.text\n>>>&0x0b\tlelong\t\t<0x2000\n>>>>&0\t\tlelong\t\t>0x6000 \\b, 32lite compressed\n\n>(8.s*16) string $WdX \\b, WDos/X DOS extender\n\n# .EXE formats (Greg Roelofs, newt@uchicago.edu)\n#\n>0x35\tstring\t\\x8e\\xc0\\xb9\\x08\\x00\\xf3\\xa5\\x4a\\x75\\xeb\\x8e\\xc3\\x8e\\xd8\\x33\\xff\\xbe\\x30\\x00\\x05 \\b, aPack compressed\n>0xe7\tstring\tLH/2\\ Self-Extract \\b, %s\n>0x1c\tstring\tdiet \\b, diet compressed\n>0x1c\tstring\tLZ09 \\b, LZEXE v0.90 compressed\n>0x1c\tstring\tLZ91 \\b, LZEXE v0.91 compressed\n>0x1c\tstring\ttz \\b, TinyProg compressed\n>0x1e\tstring\tPKLITE \\b, %s compressed\n>0x64\tstring\tW\\ Collis\\0\\0 \\b, Compack compressed\n>0x24\tstring\tLHa's\\ SFX \\b, LHa self-extracting archive\n!:mime\tapplication/x-lha\n>0x24\tstring\tLHA's\\ SFX \\b, LHa self-extracting archive\n!:mime\tapplication/x-lha\n>0x24\tstring\t\\ $ARX \\b, ARX self-extracting archive\n>0x24\tstring\t\\ $LHarc \\b, LHarc self-extracting archive\n>0x20\tstring\tSFX\\ by\\ LARC \\b, LARC self-extracting archive\n>1638\tstring\t-lh5- \\b, LHa self-extracting archive v2.13S\n>0x17888 string Rar! \\b, RAR self-extracting archive\n>0x40\tstring aPKG \\b, aPackage self-extracting archive\n\n>32\t string AIN\n>>35\t string 2\t\t\\b, AIN 2.x compressed\n>>35\t string <2\t\t\\b, AIN 1.x compressed\n>>35\t string >2\t\t\\b, AIN 1.x compressed\n>28\t string UC2X\t\t\\b, UCEXE compressed\n>28\t string WWP\\  \t\t\\b, WWPACK compressed\n\n# skip to the end of the exe\n>(4.s*512)\tlong\tx \n>>&(2.s-517)\tbyte\tx \n>>>&0\tstring\t\tPK\\3\\4 \\b, ZIP self-extracting archive\n>>>&0\tstring\t\tRar! \\b, RAR self-extracting archive\n>>>&0\tstring\t\t=!\\x11 \\b, AIN 2.x self-extracting archive\n>>>&0\tstring\t\t=!\\x12 \\b, AIN 2.x self-extracting archive\n>>>&0\tstring\t\t=!\\x17 \\b, AIN 1.x self-extracting archive\n>>>&0\tstring\t\t=!\\x18 \\b, AIN 1.x self-extracting archive\n>>>&7\tsearch/400\t**ACE** \\b, ACE self-extracting archive\n>>>&0\tsearch/0x480\tUC2SFX\\ Header \\b, UC2 self-extracting archive\n\n>0x1c\tstring\t\tRJSX \\b, ARJ self-extracting archive\n# winarj stores a message in the stub instead of the sig in the MZ header\n>0x20\tsearch/0xe0\taRJsfX \\b, ARJ self-extracting archive\n\n# a few unknown ZIP sfxes, no idea if they are needed or if they are\n# already captured by the generic patterns above\n>0x7a\t\tstring\t\tWindows\\ self-extracting\\ ZIP\t\\b, ZIP self-extracting archive\n>(8.s*16)\tsearch/0x20\tPKSFX \\b, ZIP self-extracting archive (PKZIP)\n# TODO: how to add this? >FileSize-34 string Windows\\ Self-Installing\\ Executable \\b, ZIP self-extracting archive\n#\n\n# TELVOX Teleinformatica CODEC self-extractor for OS/2:\n>49801\tstring\t\\x79\\xff\\x80\\xff\\x76\\xff\t\\b, CODEC archive v3.21\n>>49824 leshort\t\t=1\t\t\t\\b, 1 file\n>>49824 leshort\t\t>1\t\t\t\\b, %u files\n\n# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)\n# Uncommenting only the first two lines will cover about 2/3 of COM files,\n# but it isn't feasible to match all COM files since there must be at least\n# two dozen different one-byte \"magics\".\n# test too generic ?\n0\tbyte\t\t0xe9\t\tDOS executable (COM)\n>0x1FE leshort\t\t0xAA55\t\t\\b, boot code\n>6\tstring\t\tSFX\\ of\\ LHarc\t(%s)\n0\tbelong\t0xffffffff\t\tDOS executable (device driver)\n#CMD640X2.SYS\n>10\tstring\t>\\x23\t\t\t\n>>10\tstring\t!\\x2e\t\t\t\n>>>17\tstring\t<\\x5B\t\t\t\n>>>>10\tstring\tx\t\t\t\\b, name: %.8s\n#UDMA.SYS KEYB.SYS CMD640X2.SYS\n>10\tstring\t<\\x41\t\t\t\n>>12\tstring\t>\\x40\t\t\t\n>>>10\tstring\t!$\t\t\t\n>>>>12\tstring\tx\t\t\t\\b, name: %.8s\n#BTCDROM.SYS ASPICD.SYS\n>22\tstring\t>\\x40\t\t\t\n>>22\tstring\t<\\x5B\t\t\t\n>>>23\tstring\t<\\x5B\t\t\t\n>>>>22\tstring\tx\t\t\t\\b, name: %.8s\n#ATAPICD.SYS\n>76\tstring\t\\0\t\t\t\n>>77\tstring\t>\\x40\t\t\t\n>>>77\tstring\t<\\x5B\t\t\t\n>>>>77\tstring\tx\t\t\t\\b, name: %.8s\n# test too generic ?\n0\tbyte\t\t0x8c\t\tDOS executable (COM)\n# updated by Joerg Jenderek at Oct 2008\n0\tulelong\t\t0xffff10eb\tDR-DOS executable (COM)\n# byte 0xeb conflicts with \"sequent\" magic leshort 0xn2eb\n0\tubeshort&0xeb8d\t>0xeb00\t\t\n# DR-DOS STACKER.COM SCREATE.SYS missed\n>0\tbyte\t\t0xeb\t\tDOS executable (COM)\n>>0x1FE leshort\t\t0xAA55\t\t\\b, boot code\n>>85\tstring\t\tUPX\t\t\\b, UPX compressed\n>>4\tstring\t\t\\ $ARX\t\t\\b, ARX self-extracting archive\n>>4\tstring\t\t\\ $LHarc\t\\b, LHarc self-extracting archive\n>>0x20e string\t\tSFX\\ by\\ LARC\t\\b, LARC self-extracting archive\n# updated by Joerg Jenderek at Oct 2008\n#0\tbyte\t\t0xb8\t\tCOM executable\n0\tuleshort&0x80ff\t0x00b8\t\t\n# modified by Joerg Jenderek\n>1\tlelong\t\t!0x21cd4cff\tCOM executable for DOS\n# http://syslinux.zytor.com/comboot.php\n# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode\n# start with assembler instructions mov eax,21cd4cffh\n0\tuleshort&0xc0ff\t0xc0b8\t\t\n>1\tlelong\t\t0x21cd4cff\tCOM executable (32-bit COMBOOT)\n0\tstring\t\\x81\\xfc\t\t\n>4\tstring\t\\x77\\x02\\xcd\\x20\\xb9\t\n>>36\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n252\tstring Must\\ have\\ DOS\\ version DR-DOS executable (COM)\n# added by Joerg Jenderek at Oct 2008\n# GRR search is not working\n#34\tsearch/2\tUPX!\t\tFREE-DOS executable (COM), UPX compressed\n34\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n35\tstring\tUPX!\t\t\tFREE-DOS executable (COM), UPX compressed\n# GRR search is not working\n#2\tsearch/28\t\\xcd\\x21\tCOM executable for MS-DOS\n#WHICHFAT.cOM\n2\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#DELTREE.cOM DELTREE2.cOM\n4\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM\n5\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#DELTMP.COm HASFAT32.cOM\n7\tstring\t\\xcd\\x21\t\t\n>0\tbyte\t!0xb8\t\t\tCOM executable for DOS\n#COMP.cOM MORE.COm\n10\tstring\t\\xcd\\x21\t\t\n>5\tstring\t!\\xcd\\x21\t\tCOM executable for DOS\n#comecho.com\n13\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n#HELP.COm EDIT.coM\n18\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#NWRPLTRM.COm\n23\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#LOADFIX.cOm LOADFIX.cOm\n30\tstring\t\\xcd\\x21\t\tCOM executable for MS-DOS\n#syslinux.com 3.11\n70\tstring\t\\xcd\\x21\t\tCOM executable for DOS\n# many compressed/converted COMs start with a copy loop instead of a jump\n0x6\tsearch/0xa\t\\xfc\\x57\\xf3\\xa5\\xc3\tCOM executable for MS-DOS\n0x6\tsearch/0xa\t\\xfc\\x57\\xf3\\xa4\\xc3\tCOM executable for DOS\n>0x18\tsearch/0x10\t\\x50\\xa4\\xff\\xd5\\x73\t\\b, aPack compressed\n0x3c\tstring\t\tW\\ Collis\\0\\0\t\tCOM executable for MS-DOS, Compack compressed\n# FIXME: missing diet .com compression\n\n# miscellaneous formats\n0\tstring\t\tLZ\t\tMS-DOS executable (built-in)\n#0\tbyte\t\t0xf0\t\tMS-DOS program library data\n#\n\n# AAF files:\n# <stuartc@rd.bbc.co.uk> Stuart Cunningham\n0\tstring\t\\320\\317\\021\\340\\241\\261\\032\\341AAFB\\015\\000OM\\006\\016\\053\\064\\001\\001\\001\\377\t\t\tAAF legacy file using MS Structured Storage\n>30\tbyte\t9\t\t(512B sectors)\n>30\tbyte\t12\t\t(4kB sectors)\n0\tstring\t\\320\\317\\021\\340\\241\\261\\032\\341\\001\\002\\001\\015\\000\\002\\000\\000\\006\\016\\053\\064\\003\\002\\001\\001\t\t\tAAF file using MS Structured Storage\n>30\tbyte\t9\t\t(512B sectors)\n>30\tbyte\t12\t\t(4kB sectors)\n\n# Popular applications\n2080\tstring\tMicrosoft\\ Word\\ 6.0\\ Document\t%s\n!:mime\tapplication/msword\n2080\tstring\tDocumento\\ Microsoft\\ Word\\ 6 Spanish Microsoft Word 6 document data\n!:mime\tapplication/msword\n# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)\n2112\tstring\tMSWordDoc\t\t\tMicrosoft Word document data\n!:mime\tapplication/msword\n#\n0\tbelong\t0x31be0000\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n#\n0\tstring\tPO^Q`\t\t\t\tMicrosoft Word 6.0 Document\n!:mime\tapplication/msword\n#\n0\tstring\t\\376\\067\\0\\043\t\t\tMicrosoft Office Document\n!:mime\tapplication/msword\n0\tstring\t\\333\\245-\\0\\0\\0\t\t\tMicrosoft Office Document\n!:mime\tapplication/msword\n512\tstring\t\t\\354\\245\\301\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n#\n2080\tstring\tMicrosoft\\ Excel\\ 5.0\\ Worksheet\t%s\n!:mime\tapplication/vnd.ms-excel\n\n2080\tstring\tFoglio\\ di\\ lavoro\\ Microsoft\\ Exce\t%s\n!:mime\tapplication/vnd.ms-excel\n#\n# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)\n2114\tstring\tBiff5\t\tMicrosoft Excel 5.0 Worksheet\n!:mime\tapplication/vnd.ms-excel\n# Italian MS-Excel\n2121\tstring\tBiff5\t\tMicrosoft Excel 5.0 Worksheet\n!:mime\tapplication/vnd.ms-excel\n0\tstring\t\\x09\\x04\\x06\\x00\\x00\\x00\\x10\\x00\tMicrosoft Excel Worksheet\n!:mime\tapplication/vnd.ms-excel\n#\n0\tbelong\t0x00001a00\tLotus 1-2-3\n!:mime\tapplication/x-123\n>4\tbelong\t0x00100400\twk3 document data\n>4\tbelong\t0x02100400\twk4 document data\n>4\tbelong\t0x07800100\tfm3 or fmb document data\n>4\tbelong\t0x07800000\tfm3 or fmb document data\n#\n0\tbelong\t0x00000200\tLotus 1-2-3\n!:mime\tapplication/x-123\n>4\tbelong\t0x06040600\twk1 document data\n>4\tbelong\t0x06800200\tfmt document data\n0\tstring\t\tWordPro\\0\tLotus WordPro\n!:mime\tapplication/vnd.lotus-wordpro\n0\tstring\t\tWordPro\\r\\373\tLotus WordPro\n!:mime\tapplication/vnd.lotus-wordpro\n\n\n# Summary: Script used by InstallScield to uninstall applications\n# Extension: .isu\n# Submitted by: unknown\n# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)\n0\t\tstring\t\t\\x71\\xa8\\x00\\x00\\x01\\x02\n>12\t\tstring\t\tStirling\\ Technologies,\t\tInstallShield Uninstall Script\n\n# Winamp .avs\n#0\tstring\tNullsoft\\ AVS\\ Preset\\ \\060\\056\\061\\032 A plug in for Winamp ms-windows Freeware media player\n0\tstring\tNullsoft\\ AVS\\ Preset\\ \tWinamp plug in\n\n# Windows Metafont .WMF\n0\tstring\t\\327\\315\\306\\232\tms-windows metafont .wmf\n0\tstring\t\\002\\000\\011\\000\tms-windows metafont .wmf\n0\tstring\t\\001\\000\\011\\000\tms-windows metafont .wmf\n\n#tz3 files whatever that is (MS Works files)\n0\tstring\t\\003\\001\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n0\tstring\t\\003\\002\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n0\tstring\t\\003\\003\\001\\004\\070\\001\\000\\000\ttz3 ms-works file\n\n# PGP sig files .sig\n#0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127 065 to  \\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\065\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\066\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\067\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\070\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\077\\003\\005\\000\\063\\237\\127\\071\\027\\266\\151\\064\\005\\045\\101\\233\\021\\002 PGP sig\n0 string \\211\\000\\225\\003\\005\\000\\062\\122\\207\\304\\100\\345\\042 PGP sig\n\n# windows zips files .dmf\n0\tstring\tMDIF\\032\\000\\010\\000\\000\\000\\372\\046\\100\\175\\001\\000\\001\\036\\001\\000 MS Windows special zipped file\n\n\n#ico files\n0\tstring\t\\102\\101\\050\\000\\000\\000\\056\\000\\000\\000\\000\\000\\000\\000\tIcon for MS Windows\n\n# Windows icons (Ian Springer <ips@fpk.hp.com>)\n0\tstring\t\\000\\000\\001\\000\tMS Windows icon resource\n!:mime\timage/x-ico\n>4\tbyte\t1\t\t\t- 1 icon\n>4\tbyte\t>1\t\t\t- %d icons\n>>6\tbyte\t>0\t\t\t\\b, %dx\n>>>7\tbyte\t>0\t\t\t\\b%d\n>>8\tbyte\t0\t\t\t\\b, 256-colors\n>>8\tbyte\t>0\t\t\t\\b, %d-colors\n\n\n# .chr files\n0\tstring\tPK\\010\\010BGI\tBorland font \n>4\tstring\t>\\0\t%s\n# then there is a copyright notice\n\n\n# .bgi files\n0\tstring\tpk\\010\\010BGI\tBorland device \n>4\tstring\t>\\0\t%s\n# then there is a copyright notice\n\n\n# Windows Recycle Bin record file (named INFO2)\n# By Abel Cheung (abelcheung AT gmail dot com)\n# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes\n# Since Vista uses another structure, INFO2 structure probably won't change\n# anymore. Detailed analysis in:\n# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf\n0\tlelong\t\t0x00000004\n>12\tlelong\t\t0x00000118\tWindows Recycle Bin INFO2 file (Win98 or below)\n\n0\tlelong\t\t0x00000005\n>12\tlelong\t\t0x00000320\tWindows Recycle Bin INFO2 file (Win2k - WinXP)\n\n\n##### put in Either Magic/font or Magic/news\n# Acroread or something\t files wrongly identified as G3\t .pfm\n# these have the form \\000 \\001 any? \\002 \\000 \\000\n# or \\000 \\001 any? \\022 \\000 \\000\n0\tbelong&0xffff00ff\t0x00010012\tPFM data\n>4\tstring\t\t\t\\000\\000\n>6\tstring\t\t\t>\\060\t\t- %s\n\n0\tbelong&0xffff00ff\t0x00010002\tPFM data\n>4\tstring\t\t\t\\000\\000\n>6\tstring\t\t\t>\\060\t\t- %s\n#0\tstring\t\\000\\001 pfm?\n#>3\tstring\t\\022\\000\\000Copyright\\\tyes\n#>3\tstring\t\\002\\000\\000Copyright\\\tyes\n#>3\tstring\t>\\0\toops, not a font file. Cancel that.\n#it clashes with ttf files so put it lower down.\n\n# From Doug Lee via a FreeBSD pr\n9\tstring\t\tGERBILDOC\tFirst Choice document\n9\tstring\t\tGERBILDB\tFirst Choice database\n9\tstring\t\tGERBILCLIP\tFirst Choice database\n0\tstring\t\tGERBIL\t\tFirst Choice device file\n9\tstring\t\tRABBITGRAPH\tRabbitGraph file\n0\tstring\t\tDCU1\t\tBorland Delphi .DCU file\n0\tstring\t\t=!<spell>\tMKS Spell hash list (old format)\n0\tstring\t\t=!<spell2>\tMKS Spell hash list\n# Too simple - MPi\n#0\tstring\t\tAH\t\tHalo(TM) bitmapped font file\n0\tlelong\t\t0x08086b70\tTurboC BGI file\n0\tlelong\t\t0x08084b50\tTurboC Font file\n\n# WARNING: below line conflicts with Infocom game data Z-machine 3\n0\tbyte\t\t0x03\t\tDBase 3 data file\n>0x04\tlelong\t\t0\t\t(no records)\n>0x04\tlelong\t\t>0\t\t(%ld records)\n0\tbyte\t\t0x83\t\tDBase 3 data file with memo(s)\n>0x04\tlelong\t\t0\t\t(no records)\n>0x04\tlelong\t\t>0\t\t(%ld records)\n0\tleshort\t\t0x0006\t\tDBase 3 index file\n0\tstring\t\tPMCC\t\tWindows 3.x .GRP file\n1\tstring\t\tRDC-meg\t\tMegaDots \n>8\tbyte\t\t>0x2F\t\tversion %c\n>9\tbyte\t\t>0x2F\t\t\\b.%c file\n0\tlelong\t\t0x4C\n>4\tlelong\t\t0x00021401\tWindows shortcut file\n\n# DOS EPS Binary File Header\n# From: Ed Sznyter <ews@Black.Market.NET>\n0\tbelong\t\t0xC5D0D3C6\tDOS EPS Binary File\n>4\tlong\t\t>0\t\tPostscript starts at byte %d\n>>8\tlong\t\t>0\t\tlength %d\n>>>12\tlong\t\t>0\t\tMetafile starts at byte %d\n>>>>16\tlong\t\t>0\t\tlength %d\n>>>20\tlong\t\t>0\t\tTIFF starts at byte %d\n>>>>24\tlong\t\t>0\t\tlength %d\n\n# TNEF magic From \"Joomy\" <joomy@se-ed.net> \n# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)\n0\tleshort\t\t0x223e9f78\tTNEF\n!:mime\tapplication/vnd.ms-tnef\n\n# HtmlHelp files (.chm)\n0\tstring\tITSF\\003\\000\\000\\000\\x60\\000\\000\\000\\001\\000\\000\\000\tMS Windows HtmlHelp Data\n\n# GFA-BASIC (Wolfram Kleff)\n2\tstring\t\tGFA-BASIC3\tGFA-BASIC 3 data\n\n#------------------------------------------------------------------------------\n# From Stuart Caie <kyzer@4u.net> (developer of cabextract)\n# Microsoft Cabinet files\n0\tstring\t\tMSCF\\0\\0\\0\\0\tMicrosoft Cabinet archive data\n!:mime application/vnd.ms-cab-compressed\n>8\tlelong\t\tx\t\t\\b, %u bytes\n>28\tleshort\t\t1\t\t\\b, 1 file\n>28\tleshort\t\t>1\t\t\\b, %u files\n\n# InstallShield Cabinet files\n0\tstring\t\tISc(\t\tInstallShield Cabinet archive data\n>5\tbyte&0xf0\t=0x60\t\tversion 6,\n>5\tbyte&0xf0\t!0x60\t\tversion 4/5,\n>(12.l+40)\tlelong\tx\t\t%u files\n\n# Windows CE package files\n0\tstring\t\tMSCE\\0\\0\\0\\0\tMicrosoft WinCE install header\n>20\tlelong\t\t0\t\t\\b, architecture-independent\n>20\tlelong\t\t103\t\t\\b, Hitachi SH3\n>20\tlelong\t\t104\t\t\\b, Hitachi SH4\n>20\tlelong\t\t0xA11\t\t\\b, StrongARM\n>20\tlelong\t\t4000\t\t\\b, MIPS R4000\n>20\tlelong\t\t10003\t\t\\b, Hitachi SH3\n>20\tlelong\t\t10004\t\t\\b, Hitachi SH3E\n>20\tlelong\t\t10005\t\t\\b, Hitachi SH4\n>20\tlelong\t\t70001\t\t\\b, ARM 7TDMI\n>52\tleshort\t\t1\t\t\\b, 1 file\n>52\tleshort\t\t>1\t\t\\b, %u files\n>56\tleshort\t\t1\t\t\\b, 1 registry entry\n>56\tleshort\t\t>1\t\t\\b, %u registry entries\n\n\n# Windows Enhanced Metafile (EMF)\n# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp \n# for further information.\n0\tulelong 1\n>40\tstring\t\\ EMF\t\tWindows Enhanced Metafile (EMF) image data\n>>44\tulelong x\t\tversion 0x%x\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n0\tstring\tCOWD\t\tVMWare3\n>4\tbyte\t3\t\tdisk image\n>>32\tlelong\tx\t\t(%d/\n>>36\tlelong\tx\t\t\\b%d/\n>>40\tlelong\tx\t\t\\b%d)\n>4\tbyte\t2\t\tundoable disk image\n>>32\tstring\t>\\0\t\t(%s)\n\n0\tstring\tVMDK\t\t VMware4 disk image\n0\tstring\tKDMV\t\t VMware4 disk image\n\n#--------------------------------------------------------------------\n# Qemu Emulator Images\n# Lines written by Friedrich Schwittay (f.schwittay@yousable.de)\n# Updated by Adam Buchbinder (adam.buchbinder@gmail.com)\n# Made by reading sources, reading documentation, and doing trial and error\n# on existing QCOW files\n0\tstring\tQFI\\xFB\tQEMU QCOW Image\n\n# Uncomment the following line to display Magic (only used for debugging\n# this magic number)\n#>0\tstring\tx\t, Magic: %s\n\n# There are currently 2 Versions: \"1\" and \"2\".\n# http://www.gnome.org/~markmc/qcow-image-format-version-1.html\n>4\tbelong\t1\t(v1)\n\n# Using the existence of the Backing File Offset to determine whether\n# to read Backing File Information\n>>12\tbelong\t >0\t \\b, has backing file (\n# Note that this isn't a null-terminated string; the length is actually\n# (16.L). Assuming a null-terminated string happens to work usually, but it\n# may spew junk until it reaches a \\0 in some cases.\n>>>(12.L)\t string >\\0\t\\bpath %s\n\n# Modification time of the Backing File\n# Really useful if you want to know if your backing\n# file is still usable together with this image\n>>>>20\tbedate >0\t\\b, mtime %s)\n>>>>20\tdefault x\t\\b)\n\n# Size is stored in bytes in a big-endian u64.\n>>24\tbequad\tx\t \\b, %lld bytes\n\n# 1 for AES encryption, 0 for none.\n>>36\tbelong\t1\t\\b, AES-encrypted\n\n# http://www.gnome.org/~markmc/qcow-image-format.html\n>4\tbelong\t2\t(v2)\n# Using the existence of the Backing File Offset to determine whether\n# to read Backing File Information\n>>8\tbequad  >0\t \\b, has backing file\n# Note that this isn't a null-terminated string; the length is actually\n# (16.L). Assuming a null-terminated string happens to work usually, but it\n# may spew junk until it reaches a \\0 in some cases. Also, since there's no\n# .Q modifier, we just use the bottom four bytes as an offset. Note that if\n# the file is over 4G, and the backing file path is stored after the first 4G,\n# the wrong filename will be printed. (This should be (8.Q), when that syntax\n# is introduced.)\n>>>(12.L)\t string >\\0\t(path %s)\n>>24\tbequad\tx\t\\b, %lld bytes\n>>32\tbelong\t1\t\\b, AES-encrypted\n\n>4\tdefault x\t(unknown version)\n\n0\tstring\tQEVM\t\tQEMU suspend to disk image\n\n0\tstring\tBochs\\ Virtual\\ HD\\ Image\tBochs disk image,\n>32\tstring\tx\t\t\t\ttype %s,\n>48\tstring\tx\t\t\t\tsubtype %s\n\n0\tlelong\t0x02468ace\t\t\tBochs Sparse disk image\n\n# from http://filext.com by Derek M Jones <derek@knosof.co.uk>\n# False positive with PPT (also currently this string is too long)\n#0\tstring\t\\xD0\\xCF\\x11\\xE0\\xA1\\xB1\\x1A\\xE1\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3E\\x00\\x03\\x00\\xFE\\xFF\\x09\\x00\\x06\tMicrosoft Installer\n0\tstring\t\\320\\317\\021\\340\\241\\261\\032\\341\tMicrosoft Office Document\n#>48\tbyte\t0x1B\t\t\t\t\tExcel Document\n#!:mime application/vnd.ms-excel\n>546\tstring\tbjbj\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n>546\tstring\tjbjb\t\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n0\tstring\t\\224\\246\\056\t\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n512\tstring\tR\\0o\\0o\\0t\\0\\ \\0E\\0n\\0t\\0r\\0y\tMicrosoft Word Document\n!:mime\tapplication/msword\n\n# From: \"Nelson A. de Oliveira\" <naoliv@gmail.com>\n# Magic type for Dell's BIOS .hdr files\n# Dell's .hdr\n0\tstring $RBU\n>23\tstring Dell\t\t\t%s system BIOS\n>48\tstring x\t\t\tversion %.3s\n\n# Type: Microsoft DirectDraw Surface\n# URL:\thttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp\n# From: Morten Hustveit <morten@debian.org>\n0\tstring\tDDS\\040\\174\\000\\000\\000 Microsoft DirectDraw Surface (DDS),\n>16\tlelong\t>0\t\t\t%hd x\n>12\tlelong\t>0\t\t\t%hd,\n>84\tstring\tx\t\t\t%.4s\n\n# Type: Microsoft Document Imaging Format (.mdi)\n# URL:\thttp://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format\n# From: Daniele Sempione <scrows@oziosi.org>\n0\tshort\t0x5045\t\t\tMicrosoft Document Imaging Format\n\n# MS eBook format (.lit)\n0\tstring\tITOLITLS\t\tMicrosoft Reader eBook Data\n>8\tlelong\tx\t\t\t\\b, version %u\n!:mime\t\t\t\t\tapplication/x-ms-reader\n\n#------------------------------------------------------------------------------\n# $File: msvc,v 1.5 2009/09/19 16:28:11 christos Exp $\n# msvc:  file(1) magic for msvc\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# Microsoft visual C\n# \n# I have version 1.0\n\n# .aps\n0\tstring\tHWB\\000\\377\\001\\000\\000\\000\tMicrosoft Visual C .APS file\n\n# .ide\n#too long 0\tstring\t\\102\\157\\162\\154\\141\\156\\144\\040\\103\\053\\053\\040\\120\\162\\157\\152\\145\\143\\164\\040\\106\\151\\154\\145\\012\\000\\032\\000\\002\\000\\262\\000\\272\\276\\372\\316\tMSVC .ide\n0\tstring\t\\102\\157\\162\\154\\141\\156\\144\\040\\103\\053\\053\\040\\120\\162\\157\tMSVC .ide\n\n# .res\n0\tstring\t\\000\\000\\000\\000\\040\\000\\000\\000\\377\tMSVC .res\n0\tstring\t\\377\\003\\000\\377\\001\\000\\020\\020\\350\tMSVC .res\n0\tstring\t\\377\\003\\000\\377\\001\\000\\060\\020\\350\tMSVC .res\n\n#.lib\n0\tstring\t\\360\\015\\000\\000\tMicrosoft Visual C library\n0\tstring\t\\360\\075\\000\\000\tMicrosoft Visual C library\n0\tstring\t\\360\\175\\000\\000\tMicrosoft Visual C library\n\n#.pch\n0\tstring\tDTJPCH0\\000\\022\\103\\006\\200\tMicrosoft Visual C .pch\n\n# .pdb\n# too long 0\tstring\tMicrosoft\\ C/C++\\ program\\ database\\ \n0\tstring\tMicrosoft\\ C/C++\\ \tMSVC program database\n>18\tstring\tprogram\\ database\\ \t\n>33\tstring\t>\\0\tver %s\n\n#.sbr\n0\tstring\t\\000\\002\\000\\007\\000\tMSVC .sbr\n>5\tstring \t>\\0\t%s\n\n#.bsc\n0\tstring\t\\002\\000\\002\\001\tMSVC .bsc\n\n#.wsp\n0\tstring\t1.00\\ .0000.0000\\000\\003\tMSVC .wsp version 1.0000.0000\n# these seem to start with the version and contain menus\n\n# ------------------------------------------------------------------------\n# $File: mup,v 1.4 2009/09/19 16:28:11 christos Exp $\n# mup: file(1) magic for Mup (Music Publisher) input file.\n#\n# From: Abel Cheung <abel (@) oaka.org>\n#\n# NOTE: This header is mainly proposed in the Arkkra mailing list,\n# and is not a mandatory header because of old mup input file\n# compatibility. Noteedit also use mup format, but is not forcing\n# user to use any header as well.\n#\n0\t\tsearch/1\t//!Mup\t\tMup music publication program input text\n>6\t\tstring\t\t-Arkkra\t\t(Arkkra)\n>>13\t\tstring\t\t-\t\t\n>>>16\t\tstring\t\t.\t\t\n>>>>14\t\tstring\t\tx\t\t\\b, need V%.4s\n>>>15\t\tstring\t\t.\t\t\n>>>>14\t\tstring\t\tx\t\t\\b, need V%.3s\n>6\t\tstring\t\t-\t\t\n>>9\t\tstring\t\t.\t\t\n>>>7\t\tstring\t\tx\t\t\\b, need V%.4s\n>>8\t\tstring\t\t.\t\t\n>>>7\t\tstring\t\tx\t\t\\b, need V%.3s\n\n#-----------------------------------------------------------------------------\n# $File: natinst,v 1.4 2009/09/19 16:28:11 christos Exp $\n# natinst:  file(1) magic for National Instruments Code Files\n\n#\n# From <egamez@fcfm.buap.mx> Enrique Gámez-Flores\n# version 1\n# Many formats still missing, we use, for the moment LabVIEW\n# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing\n#\n0       string          RSRC            National Instruments,\n# Check if it's a LabVIEW File\n>8      string          LV              LabVIEW File,\n# Check wich kind of file is\n>>10    string          SB              Code Resource File, data\n>>10    string          IN              Virtual Instrument Program, data\n>>10    string          AR              VI Library, data\n# This is for Menu Libraries\n>8      string          LMNULBVW        Portable File Names, data\n# This is for General Resources\n>8      string          rsc             Resources File, data\n# This is for VXI Package\n0       string          VMAP            National Instruments, VXI File, data\n\n#------------------------------------------------------------------------------\n# $File: ncr,v 1.7 2009/09/19 16:28:11 christos Exp $\n# ncr:  file(1) magic for NCR Tower objects\n#\n# contributed by\n# Michael R. Wayne  ***  TMC & Associates  ***  INTERNET: wayne@ford-vax.arpa\n# uucp: {philabs | pyramid} !fmsrl7!wayne   OR   wayne@fmsrl7.UUCP\n#\n0\tbeshort\t\t000610\tTower/XP rel 2 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000615\tTower/XP rel 2 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000620\tTower/XP rel 3 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000625\tTower/XP rel 3 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000630\tTower32/600/400 68020 object\n>12\t   belong\t\t>0\tnot stripped\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0410\tpure executable\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000640\tTower32/800 68020\n>18\t   beshort\t\t&020000\tw/68881 object\n>18\t   beshort\t\t&040000\tcompatible object\n>18\t   beshort\t\t&060000\tobject\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0413\tpure executable\n>12\t   belong\t\t>0\tnot stripped\n>22\t   beshort\t\t>0\t- version %ld\n0\tbeshort\t\t000645\tTower32/800 68010\n>18\t   beshort\t\t&040000\tcompatible object\n>18\t   beshort\t\t&060000 object\n>20\t   beshort\t\t0407\texecutable\n>20\t   beshort\t\t0413\tpure executable\n>12\t   belong\t\t>0\tnot stripped\n>22\t   beshort\t\t>0\t- version %ld\n\n#------------------------------------------------------------------------------\n# $File: netbsd,v 1.18 2009/09/19 16:28:11 christos Exp $\n# netbsd:  file(1) magic for NetBSD objects\n#\n# All new-style magic numbers are in network byte order.\n#\n\n0\tlelong\t\t\t000000407\ta.out NetBSD little-endian object file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong\t\t\t000000407\ta.out NetBSD big-endian object file\n>16\tbelong\t\t\t>0\t\tnot stripped\n\n0\tbelong&0377777777\t041400413\ta.out NetBSD/i386 demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400410\ta.out NetBSD/i386 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400407\ta.out NetBSD/i386\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041400507\ta.out NetBSD/i386 core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t041600413\ta.out NetBSD/m68k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600410\ta.out NetBSD/m68k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600407\ta.out NetBSD/m68k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t041600507\ta.out NetBSD/m68k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042000413\ta.out NetBSD/m68k4k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<4096\t\tshared library\n>>20\tbelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000410\ta.out NetBSD/m68k4k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000407\ta.out NetBSD/m68k4k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042000507\ta.out NetBSD/m68k4k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042200413\ta.out NetBSD/ns32532 demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200410\ta.out NetBSD/ns32532 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200407\ta.out NetBSD/ns32532\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042200507\ta.out NetBSD/ns32532 core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t045200507\ta.out NetBSD/powerpc core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n\n0\tbelong&0377777777\t042400413\ta.out NetBSD/sparc demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400410\ta.out NetBSD/sparc pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400407\ta.out NetBSD/sparc\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042400507\ta.out NetBSD/sparc core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t042600413\ta.out NetBSD/pmax demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600410\ta.out NetBSD/pmax pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600407\ta.out NetBSD/pmax\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t042600507\ta.out NetBSD/pmax core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043000413\ta.out NetBSD/vax 1k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000410\ta.out NetBSD/vax 1k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000407\ta.out NetBSD/vax 1k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043000507\ta.out NetBSD/vax 1k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t045400413\ta.out NetBSD/vax 4k demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400410\ta.out NetBSD/vax 4k pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400407\ta.out NetBSD/vax 4k\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t045400507\ta.out NetBSD/vax 4k core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n# NetBSD/alpha does not support (and has never supported) a.out objects,\n# so no rules are provided for them.  NetBSD/alpha ELF objects are \n# dealt with in \"elf\".\n0\tlelong\t\t0x00070185\t\tECOFF NetBSD/alpha binary\n>10\tleshort\t\t0x0001\t\t\tnot stripped\n>10\tleshort\t\t0x0000\t\t\tstripped\n0\tbelong&0377777777\t043200507\ta.out NetBSD/alpha core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043400413\ta.out NetBSD/mips demand paged\n>0\tbyte\t\t\t&0x80\t\t\n>>20\tbelong\t\t\t<8192\t\tshared library\n>>20\tbelong\t\t\t=8192\t\tdynamically linked executable\n>>20\tbelong\t\t\t>8192\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400410\ta.out NetBSD/mips pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400407\ta.out NetBSD/mips\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tbelong\t\t\t!0\t\texecutable\n>>20\tbelong\t\t\t=0\t\tobject file\n>16\tbelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043400507\ta.out NetBSD/mips core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tbelong\t\t\t!0\t\t(signal %d)\n\n0\tbelong&0377777777\t043600413\ta.out NetBSD/arm32 demand paged\n>0\tbyte\t\t\t&0x80\n>>20\tlelong\t\t\t<4096\t\tshared library\n>>20\tlelong\t\t\t=4096\t\tdynamically linked executable\n>>20\tlelong\t\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043600410\ta.out NetBSD/arm32 pure\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\t\texecutable\n>16\tlelong\t\t\t>0\t\tnot stripped\n0\tbelong&0377777777\t043600407\ta.out NetBSD/arm32\n>0\tbyte\t\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t\t^0x80\n>>0\tbyte\t\t\t&0x40\t\tposition independent\n>>20\tlelong\t\t\t!0\t\texecutable\n>>20\tlelong\t\t\t=0\t\tobject file\n>16\tlelong\t\t\t>0\t\tnot stripped\n# NetBSD/arm26 has always used ELF objects, but it shares a core file\n# format with NetBSD/arm32.\n0\tbelong&0377777777\t043600507\ta.out NetBSD/arm core\n>12\tstring\t\t\t>\\0\t\tfrom '%s'\n>32\tlelong\t\t\t!0\t\t(signal %d)\n\n#------------------------------------------------------------------------------\n# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $\n# netscape:  file(1) magic for Netscape files\n# \"H. Nanosecond\" <aldomel@ix.netcom.com>\n# version 3 and 4 I think\n#\n\n# Netscape Address book  .nab\n0\tstring \\000\\017\\102\\104\\000\\000\\000\\000\\000\\000\\001\\000\\000\\000\\000\\002\\000\\000\\000\\002\\000\\000\\004\\000 Netscape Address book\n\n# Netscape Communicator address book\n0   string   \\000\\017\\102\\111 Netscape Communicator address book\n\n# .snm Caches\n0\tstring\t\t#\\ Netscape\\ folder\\ cache\tNetscape folder cache\n0\tstring\t\\000\\036\\204\\220\\000\tNetscape folder cache\n# .n2p \n# Net 2 Phone \n#0\tstring\t123\\130\\071\\066\\061\\071\\071\\071\\060\\070\\061\\060\\061\\063\\060\n0\tstring\tSX961999\tNet2phone\n\n#\n#This is files ending in .art, FIXME add more rules\n0       string          JG\\004\\016\\0\\0\\0\\0      ART\n\n#------------------------------------------------------------------------------\n# $File: netware,v 1.4 2009/09/19 16:28:11 christos Exp $\n# netware:  file(1) magic for NetWare Loadable Modules (NLMs)\n# From: Mads Martin Joergensen <mmj@suse.de>\n\n0\tstring\tNetWare\\ Loadable\\ Module\tNetWare Loadable Module\n\n#------------------------------------------------------------------------------\n# $File: news,v 1.6 2009/09/19 16:28:11 christos Exp $\n# news:  file(1) magic for SunOS NeWS fonts (not \"news\" as in \"netnews\")\n#\n0\tstring\t\tStartFontMetrics\tASCII font metrics\n0\tstring\t\tStartFont\tASCII font bits\n0\tbelong\t\t0x137A2944\tNeWS bitmap font\n0\tbelong\t\t0x137A2947\tNeWS font family\n0\tbelong\t\t0x137A2950\tscalable OpenFont binary\n0\tbelong\t\t0x137A2951\tencrypted scalable OpenFont binary\n8\tbelong\t\t0x137A2B45\tX11/NeWS bitmap font\n8\tbelong\t\t0x137A2B48\tX11/NeWS font family\n\n#------------------------------------------------------------------------------\n# $File: nitpicker,v 1.4 2009/09/19 16:28:11 christos Exp $\n# nitpicker:  file(1) magic for Flowfiles.\n# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de\n0\tstring\tNPFF\tNItpicker Flow File \n>4\tbyte\tx\tV%d.\n>5\tbyte\tx\t%d\n>6\tbedate\tx\tstarted: %s\n>10\tbedate\tx\tstopped: %s\n>14\tbelong\tx\tBytes: %u\n>18\tbelong\tx\tBytes1: %u\n>22\tbelong\tx\tFlows: %u\n>26\tbelong\tx\tPkts: %u\n\n#------------------------------------------------------------------------------\n# $File: ocaml,v 1.4 2009/09/19 16:28:11 christos Exp $\n# ocaml: file(1) magic for Objective Caml files.\n0\tstring\tCaml1999\tOCaml\n>8\tstring\tX\t\texec file\n>8\tstring\tI\t\tinterface file (.cmi)\n>8\tstring\tO\t\tobject file (.cmo)\n>8\tstring\tA\t\tlibrary file (.cma)\n>8\tstring\tY\t\tnative object file (.cmx)\n>8\tstring\tZ\t\tnative library file (.cmxa)\n>8\tstring\tM\t\tabstract syntax tree implementation file\n>8\tstring\tN\t\tabstract syntax tree interface file\n>9\tstring\t>\\0\t\t(Version %3.3s)\n\n#------------------------------------------------------------------------------\n# $File: octave,v 1.4 2009/09/19 16:28:11 christos Exp $\n# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>\n0\tstring\t\tOctave-1-L\tOctave binary data (little endian)\n0\tstring\t\tOctave-1-B\tOctave binary data (big endian)\n\n#------------------------------------------------------------------------------\n# $File: ole2compounddocs,v 1.4 2009/09/19 16:28:11 christos Exp $\n# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured\n# storage (http://en.wikipedia.org/wiki/Structured_Storage)\n# Additional tests for OLE 2 Compound Documents should be under this recipe.\n\n0   string  \\320\\317\\021\\340\\241\\261\\032\\341      OLE 2 Compound Document\n# - Microstation V8 DGN files (www.bentley.com)\n#   Last update on 10/23/2006 by Lester Hightower\n> 0x480  string  D\\000g\\000n\\000~\\000H                : Microstation V8 DGN\n# - Visio documents\n#   Last update on 10/23/2006 by Lester Hightower\n> 0x480  string  V\\000i\\000s\\000i\\000o\\000D\\000o\\000c : Visio Document\n\n#------------------------------------------------------------------------------\n# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $\n# olf:  file(1) magic for OLF executables\n#\n# We have to check the byte order flag to see what byte order all the\n# other stuff in the header is in.\n#\n# MIPS R3000 may also be for MIPS R2000.\n# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?\n#\n# Created by Erik Theisen <etheisen@openbsd.org>\n# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>\n0\tstring\t\t\\177OLF\t\tOLF\n>4\tbyte\t\t0\t\tinvalid class\n>4\tbyte\t\t1\t\t32-bit\n>4\tbyte\t\t2\t\t64-bit\n>7\tbyte\t\t0\t\tinvalid os\n>7\tbyte\t\t1\t\tOpenBSD\n>7\tbyte\t\t2\t\tNetBSD\n>7\tbyte\t\t3\t\tFreeBSD\n>7\tbyte\t\t4\t\t4.4BSD\n>7\tbyte\t\t5\t\tLinux\n>7\tbyte\t\t6\t\tSVR4\n>7\tbyte\t\t7\t\tesix\n>7\tbyte\t\t8\t\tSolaris\n>7\tbyte\t\t9\t\tIrix\n>7\tbyte\t\t10\t\tSCO\n>7\tbyte\t\t11\t\tDell\n>7\tbyte\t\t12\t\tNCR\n>5\tbyte\t\t0\t\tinvalid byte order\n>5\tbyte\t\t1\t\tLSB\n>>16\tleshort\t\t0\t\tno file type,\n>>16\tleshort\t\t1\t\trelocatable,\n>>16\tleshort\t\t2\t\texecutable,\n>>16\tleshort\t\t3\t\tshared object,\n# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>\n# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>\n>>16\tleshort\t\t4\t\tcore file\n>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n>>>(0x38+0x10) lelong\t>0\t\t(signal %d),\n>>16\tleshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tleshort\t\t0\t\tno machine,\n>>18\tleshort\t\t1\t\tAT&T WE32100 - invalid byte order,\n>>18\tleshort\t\t2\t\tSPARC - invalid byte order,\n>>18\tleshort\t\t3\t\tIntel 80386,\n>>18\tleshort\t\t4\t\tMotorola 68000 - invalid byte order,\n>>18\tleshort\t\t5\t\tMotorola 88000 - invalid byte order,\n>>18\tleshort\t\t6\t\tIntel 80486,\n>>18\tleshort\t\t7\t\tIntel 80860,\n>>18\tleshort\t\t8\t\tMIPS R3000_BE - invalid byte order,\n>>18\tleshort\t\t9\t\tAmdahl - invalid byte order,\n>>18\tleshort\t\t10\t\tMIPS R3000_LE,\n>>18\tleshort\t\t11\t\tRS6000 - invalid byte order,\n>>18\tleshort\t\t15\t\tPA-RISC - invalid byte order,\n>>18\tleshort\t\t16\t\tnCUBE,\n>>18\tleshort\t\t17\t\tVPP500,\n>>18\tleshort\t\t18\t\tSPARC32PLUS,\n>>18\tleshort\t\t20\t\tPowerPC,\n>>18\tleshort\t\t0x9026\t\tAlpha,\n>>20\tlelong\t\t0\t\tinvalid version\n>>20\tlelong\t\t1\t\tversion 1\n>>36\tlelong\t\t1\t\tMathCoPro/FPU/MAU Required\n>8\tstring\t\t>\\0\t\t(%s)\n>5\tbyte\t\t2\t\tMSB\n>>16\tbeshort\t\t0\t\tno file type,\n>>16\tbeshort\t\t1\t\trelocatable,\n>>16\tbeshort\t\t2\t\texecutable,\n>>16\tbeshort\t\t3\t\tshared object,\n>>16\tbeshort\t\t4\t\tcore file,\n>>>(0x38+0xcc) string\t>\\0\t\tof '%s'\n>>>(0x38+0x10) belong\t>0\t\t(signal %d),\n>>16\tbeshort\t\t&0xff00\t\tprocessor-specific,\n>>18\tbeshort\t\t0\t\tno machine,\n>>18\tbeshort\t\t1\t\tAT&T WE32100,\n>>18\tbeshort\t\t2\t\tSPARC,\n>>18\tbeshort\t\t3\t\tIntel 80386 - invalid byte order,\n>>18\tbeshort\t\t4\t\tMotorola 68000,\n>>18\tbeshort\t\t5\t\tMotorola 88000,\n>>18\tbeshort\t\t6\t\tIntel 80486 - invalid byte order,\n>>18\tbeshort\t\t7\t\tIntel 80860,\n>>18\tbeshort\t\t8\t\tMIPS R3000_BE,\n>>18\tbeshort\t\t9\t\tAmdahl,\n>>18\tbeshort\t\t10\t\tMIPS R3000_LE - invalid byte order,\n>>18\tbeshort\t\t11\t\tRS6000,\n>>18\tbeshort\t\t15\t\tPA-RISC,\n>>18\tbeshort\t\t16\t\tnCUBE,\n>>18\tbeshort\t\t17\t\tVPP500,\n>>18\tbeshort\t\t18\t\tSPARC32PLUS,\n>>18\tbeshort\t\t20\t\tPowerPC or cisco 4500,\n>>18\tbeshort\t\t21\t\tcisco 7500,\n>>18\tbeshort\t\t24\t\tcisco SVIP,\n>>18\tbeshort\t\t25\t\tcisco 7200,\n>>18\tbeshort\t\t36\t\tcisco 12000,\n>>18\tbeshort\t\t0x9026\t\tAlpha,\n>>20\tbelong\t\t0\t\tinvalid version\n>>20\tbelong\t\t1\t\tversion 1\n>>36\tbelong\t\t1\t\tMathCoPro/FPU/MAU Required\n\n#------------------------------------------------------------------------------\n# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $\n# os2:  file(1) magic for OS/2 files\n#\n\n# Provided 1998/08/22 by\n# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>\n1\tsearch/1\tInternetShortcut\tMS Windows 95 Internet shortcut text\n>24\tsearch/1\t>\\ \t\t\t(URL=<%s>)\n\n# OS/2 URL objects\n# Provided 1998/08/22 by\n# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>\n#0\tstring\thttp:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(WWW) <http:%s>\n#0\tstring\tmailto:\t\t\tOS/2 URL object text\n#>7\tstring\t>\\\t\t\t(email) <%s>\n#0\tstring\tnews:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(Usenet) <%s>\n#0\tstring\tftp:\t\t\tOS/2 URL object text\n#>4\tstring\t>\\\t\t\t(FTP) <ftp:%s>\n#0\tstring\tfile:\t\t\tOS/2 URL object text\n#>5\tstring\t>\\\t\t\t(Local file) <%s>\n\n# >>>>> OS/2 INF/HLP <<<<<  (source: Daniel Dissett ddissett@netcom.com)\n# Carl Hauser (chauser.parc@xerox.com) and \n# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)\n# list the following header format in inf02a.doc:\n#\n#  int16 ID;           // ID magic word (5348h = \"HS\")\n#  int8  unknown1;     // unknown purpose, could be third letter of ID\n#  int8  flags;        // probably a flag word...\n#                      //  bit 0: set if INF style file\n#                      //  bit 4: set if HLP style file\n#                      // patching this byte allows reading HLP files\n#                      // using the VIEW command, while help files \n#                      // seem to work with INF settings here as well.\n#  int16 hdrsize;      // total size of header\n#  int16 unknown2;     // unknown purpose\n# \n0   string  HSP\\x01\\x9b\\x00 OS/2 INF\n>107 string >0                      (%s)\n0   string  HSP\\x10\\x9b\\x00     OS/2 HLP\n>107 string >0                      (%s)\n\n# OS/2 INI (this is a guess)\n0  string   \\xff\\xff\\xff\\xff\\x14\\0\\0\\0  OS/2 INI\n\n#------------------------------------------------------------------------------\n# $File: os400,v 1.5 2009/09/19 16:28:11 christos Exp $\n# os400:  file(1) magic for IBM OS/400 files\n#\n# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com\n# In spite of its quite variable format (due to internal memory page\n# length differences between CISC and RISC versions of the OS) the\n# SAVF structure hasn't suitable offsets to identify the catalog\n# header in the first descriptor where there are some useful infos,\n# so we must search in a somewhat large area for a particular string\n# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore\n# descriptor space) preceded by a two byte constant.\n#\n1090\t search/7393\t\\x19\\xDB\\xD8\\xE2\\xD9\\xC4\\xE2\\xE2\\xD7\\xC3 IBM OS/400 save file data\n>&212\t byte\t\t0x01\t\t\t \\b, created with SAVOBJ\n>&212\t byte\t\t0x02\t\t\t \\b, created with SAVLIB\n>&212\t byte\t\t0x07\t\t\t \\b, created with SAVCFG\n>&212\t byte\t\t0x08\t\t\t \\b, created with SAVSECDTA\n>&212\t byte\t\t0x0A\t\t\t \\b, created with SAVSECDTA\n>&212\t byte\t\t0x0B\t\t\t \\b, created with SAVDLO\n>&212\t byte\t\t0x0D\t\t\t \\b, created with SAVLICPGM\n>&212\t byte\t\t0x11\t\t\t \\b, created with SAVCHGOBJ\n>&213\t byte\t\t0x44\t\t\t \\b, at least V5R4 to open\n>&213\t byte\t\t0x43\t\t\t \\b, at least V5R3 to open\n>&213\t byte\t\t0x42\t\t\t \\b, at least V5R2 to open\n>&213\t byte\t\t0x41\t\t\t \\b, at least V5R1 to open\n>&213\t byte\t\t0x40\t\t\t \\b, at least V4R5 to open\n>&213\t byte\t\t0x3F\t\t\t \\b, at least V4R4 to open\n>&213\t byte\t\t0x3E\t\t\t \\b, at least V4R3 to open\n>&213\t byte\t\t0x3C\t\t\t \\b, at least V4R2 to open\n>&213\t byte\t\t0x3D\t\t\t \\b, at least V4R1M4 to open\n>&213\t byte\t\t0x3B\t\t\t \\b, at least V4R1 to open\n>&213\t byte\t\t0x3A\t\t\t \\b, at least V3R7 to open\n>&213\t byte\t\t0x35\t\t\t \\b, at least V3R6 to open\n>&213\t byte\t\t0x36\t\t\t \\b, at least V3R2 to open\n>&213\t byte\t\t0x34\t\t\t \\b, at least V3R1 to open\n>&213\t byte\t\t0x31\t\t\t \\b, at least V3R0M5 to open\n>&213\t byte\t\t0x30\t\t\t \\b, at least V2R3 to open\n\n#------------------------------------------------------------------------------\n# $File: os9,v 1.6 2009/09/19 16:28:11 christos Exp $\n#\n# Copyright (c) 1996 Ignatios Souvatzis. 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\n# are met:\n# 1. Redistributions of source code must retain the above copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the above copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. All advertising materials mentioning features or use of this software\n#    must display the following acknowledgement:\n#      This product includes software developed by Ignatios Souvatzis for\n#      the NetBSD project.\n# 4. The name of the author may not be used to endorse or promote products\n#    derived from this software without specific prior written permission.\n#\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  \n# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n#\n#\n# OS9/6809 module descriptions:\n#\n0\tbeshort\t\t0x87CD\tOS9/6809 module:\n#\n>6\tbyte&0x0f\t0x00\tnon-executable\n>6\tbyte&0x0f\t0x01\tmachine language\n>6\tbyte&0x0f\t0x02\tBASIC I-code\n>6\tbyte&0x0f\t0x03\tPascal P-code\n>6\tbyte&0x0f\t0x04\tC I-code\n>6\tbyte&0x0f\t0x05\tCOBOL I-code\n>6\tbyte&0x0f\t0x06\tFortran I-code\n#\n>6\tbyte&0xf0\t0x10\tprogram executable\n>6\tbyte&0xf0\t0x20\tsubroutine\n>6\tbyte&0xf0\t0x30\tmulti-module\n>6\tbyte&0xf0\t0x40\tdata module\n#\n>6\tbyte&0xf0\t0xC0\tsystem module\n>6\tbyte&0xf0\t0xD0\tfile manager\n>6\tbyte&0xf0\t0xE0\tdevice driver\n>6\tbyte&0xf0\t0xF0\tdevice descriptor\n#\n# OS9/m68k stuff (to be continued)\n#\n0\tbeshort\t\t0x4AFC\tOS9/68K module:\n#\n# attr\n>0x14\tbyte&0x80\t0x80\tre-entrant\n>0x14\tbyte&0x40\t0x40\tghost\n>0x14\tbyte&0x20\t0x20\tsystem-state\n#\n# lang:\n#\n>0x13\tbyte\t\t1\tmachine language\n>0x13\tbyte\t\t2\tBASIC I-code\n>0x13\tbyte\t\t3\tPascal P-code\n>0x13\tbyte\t\t4\tC I-code\n>0x13\tbyte\t\t5\tCOBOL I-code\n>0x13\tbyte\t\t6\tFortran I-code\n#\n#\n# type:\n#\n>0x12\tbyte\t\t1\tprogram executable\n>0x12\tbyte\t\t2\tsubroutine\n>0x12\tbyte\t\t3\tmulti-module\n>0x12\tbyte\t\t4\tdata module\n>0x12\tbyte\t\t11\ttrap library\n>0x12\tbyte\t\t12\tsystem module\n>0x12\tbyte\t\t13\tfile manager\n>0x12\tbyte\t\t14\tdevice driver\n>0x12\tbyte\t\t15\tdevice descriptor\n\n#------------------------------------------------------------------------------\n# $File: osf1,v 1.7 2009/09/19 16:28:11 christos Exp $\n#\n# Mach magic number info\n#\n0\tlong\t\t0xefbe\tOSF/Rose object\n# I386 magic number info\n#\n0\tshort\t\t0565\ti386 COFF object\n\n#------------------------------------------------------------------------------\n# $File: palm,v 1.7 2009/09/19 16:28:11 christos Exp $\n# palm:  file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks\n#\n# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>\n\n# appl\n60      belong                  0x6170706c      PalmOS application\n>0      string                  >\\0             \"%s\"\n# TEXt\n60      belong                  0x54455874      AportisDoc file\n>0      string                  >\\0             \"%s\"\n# HACK\n60      belong                  0x4841434b      HackMaster hack\n>0      string                  >\\0             \"%s\"\n\n# Variety of PalmOS document types\n# Michael-John Turner <mj@debian.org>\n# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType\n60\tstring\t                BVokBDIC\tBDicty PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DB99DBOS\tDB PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                vIMGView\tFireViewer/ImageViewer PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                PmDBPmDB\tHanDBase PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                InfoINDB\tInfoView PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                ToGoToGo\tiSilo PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                JfDbJBas\tJFile PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                JfDbJFil\tJFile Pro PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DATALSdb\tList PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                Mdb1Mdb1\tMobileDB PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                PNRdPPrs\tPeanutPress PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DataPlkr\tPlucker PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DataSprd\tQuickSheet PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                SM01SMem\tSuperMemo PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                TEXtTlDc\tTealDoc PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                InfoTlIf\tTealInfo PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DataTlMl\tTealMeal PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                DataTlPt\tTealPaint PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                dataTDBP\tThinkDB PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                TdatTide\tTides PalmOS document\n>0\tstring                  >\\0             \"%s\"\n60\tstring\t                ToRaTRPW\tTomeRaider PalmOS document\n>0\tstring                  >\\0             \"%s\"\n\n# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)\n# For version 1.xx zTXTs, outputs version and numbers of bookmarks and\n#   annotations.\n# For other versions, just outputs version.\n#\n60\t\tstring\t\tzTXT\t\tA GutenPalm zTXT e-book\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n>(0x4E.L)\tbyte\t\t0\n>>(0x4E.L+1)\tbyte\t\tx\t\t(v0.%02d)\n>(0x4E.L)\tbyte\t\t1\n>>(0x4E.L+1)\tbyte\t\tx\t\t(v1.%02d)\n>>>(0x4E.L+10)\tbeshort\t\t>0\n>>>>(0x4E.L+10) beshort\t\t<2\t\t- 1 bookmark\n>>>>(0x4E.L+10) beshort\t\t>1\t\t- %d bookmarks\n>>>(0x4E.L+14)\tbeshort\t\t>0\n>>>>(0x4E.L+14) beshort\t\t<2\t\t- 1 annotation\n>>>>(0x4E.L+14) beshort\t\t>1\t\t- %d annotations\n>(0x4E.L)\tbyte\t\t>1\t\t(v%d.\n>>(0x4E.L+1)\tbyte\t\tx\t\t%02d)\n\n# Palm OS .prc file types\n60\t\tstring\t\tlibr\t\tPalm OS dynamic library data\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n60\t\tstring\t\tptch\t\tPalm OS operating system patch data\n>0\t\tstring\t\t>\\0\t\t\"%s\"\n\n# Mobipocket (www.mobipocket.com), donated by Carl Witty\n60\tstring\t                BOOKMOBI\tMobipocket E-book\n>0\tstring                  >\\0             \"%s\"\n\n#------------------------------------------------------------------------------\n# $File: parix,v 1.4 2009/09/19 16:28:11 christos Exp $\n#\n# Parix COFF executables\n# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>\n#\n0\tbeshort&0xfff\t0xACE\tPARIX\n>0\tbyte&0xf0\t0x80\tT800\n>0\tbyte&0xf0\t0x90\tT9000\n>19\tbyte&0x02\t0x02\texecutable\n>19\tbyte&0x02\t0x00\tobject\n>19\tbyte&0x0c\t0x00\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: pbm,v 1.6 2009/09/19 16:28:11 christos Exp $\n# pbm:  file(1) magic for Portable Bitmap files\n#\n# XXX - byte order?\n#\n0\tshort\t0x2a17\t\"compact bitmap\" format (Poskanzer)\n\n#------------------------------------------------------------------------------\n# $File: pdf,v 1.6 2009/09/19 16:28:11 christos Exp $\n# pdf:  file(1) magic for Portable Document Format\n#\n\n0\tstring\t\t%PDF-\t\tPDF document\n!:mime\tapplication/pdf\n>5\tbyte\t\tx\t\t\\b, version %c\n>7\tbyte\t\tx\t\t\\b.%c\n\n# From: Nick Schmalenberger <nick@schmalenberger.us>\n# Forms Data Format\n0       string          %FDF-           FDF document\n>5      byte            x               \\b, version %c\n>7      byte            x               \\b.%c\n\n#------------------------------------------------------------------------------\n# $File: pdp,v 1.8 2009/09/19 16:28:11 christos Exp $\n# pdp:  file(1) magic for PDP-11 executable/object and APL workspace\n#\n0\tlelong\t\t0101555\t\tPDP-11 single precision APL workspace\n0\tlelong\t\t0101554\t\tPDP-11 double precision APL workspace\n#\n# PDP-11 a.out\n#\n0\tleshort\t\t0407\t\tPDP-11 executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n\n0\tleshort\t\t0401\t\tPDP-11 UNIX/RT ldp\n0\tleshort\t\t0405\t\tPDP-11 old overlay\n\n0\tleshort\t\t0410\t\tPDP-11 pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n\n0\tleshort\t\t0411\t\tPDP-11 separate I&D executable\n>8\tleshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n\n0\tleshort\t\t0437\t\tPDP-11 kernel overlay\n\n# These last three are derived from 2.11BSD file(1)\n0\tleshort\t\t0413\t\tPDP-11 demand-paged pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0430\t\tPDP-11 overlaid pure executable\n>8\tleshort\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0431\t\tPDP-11 overlaid separate executable\n>8\tleshort\t\t>0\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: perl,v 1.16 2009/09/19 16:28:11 christos Exp $\n# perl:  file(1) magic for Larry Wall's perl language.\n#\n# The `eval' lines recognizes an outrageously clever hack.\n# Keith Waclena <keith@cerberus.uchicago.edu>\n# Send additions to <perl5-porters@perl.org>\n0\tsearch/1/w\t#!\\ /bin/perl\t\t\tPerl script text executable\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ \"exec\\ /bin/perl\t\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1/w\t#!\\ /usr/bin/perl\t\tPerl script text executable\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ \"exec\\ /usr/bin/perl\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1/w\t#!\\ /usr/local/bin/perl\t\tPerl script text executable\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ \"exec\\ /usr/local/bin/perl\tPerl script text\n!:mime\ttext/x-perl\n0\tsearch/1\teval\\ '(exit\\ $?0)'\\ &&\\ eval\\ 'exec\tPerl script text\n!:mime\ttext/x-perl\n\n\n# by Dmitry V. Levin and Alexey Tourbin\n# check the first line\n0\tsearch/1\tpackage\n>0\tregex\t\t\\^package[\\ \\t]+[0-9A-Za-z_:]+\\ *;\tPerl5 module source text\n# not 'p', check other lines\n0\tsearch/1\t!p\n>0\tregex\t\t\\^package[\\ \\t]+[0-9A-Za-z_:]+\\ *;\n>>0\tregex\t\t\\^1\\ *;|\\^(use|sub|my)\\ .*[(;{=]\tPerl5 module source text\n\n\n\n# Perl POD documents\n# From: Tom Hukins <tom@eborcom.com>\n0\tsearch/1/W\t\\=pod\\n\t\tPerl POD document text\n0\tsearch/1/W\t\\n\\=pod\\n\tPerl POD document text\n0\tsearch/1/W\t\\=head1\\ \tPerl POD document text\n0\tsearch/1/W\t\\n\\=head1\\ \tPerl POD document text\n0\tsearch/1/W\t\\=head2\\ \tPerl POD document text\n0\tsearch/1/W\t\\n\\=head2\\ \tPerl POD document text\n\n# Perl Storable data files.\n0\tstring\tperl-store\tperl Storable (v0.6) data\n>4\tbyte\t>0\t(net-order %d)\n>>4\tbyte\t&01\t(network-ordered)\n>>4\tbyte\t=3\t(major 1)\n>>4\tbyte\t=2\t(major 1)\n\n0\tstring\tpst0\tperl Storable (v0.7) data\n>4\tbyte\t>0\n>>4\tbyte\t&01\t(network-ordered)\n>>4\tbyte\t=5\t(major 2)\n>>4\tbyte\t=4\t(major 2)\n>>5\tbyte\t>0\t(minor %d)\n\n#------------------------------------------------------------------------------\n# $File: pgp,v 1.9 2009/09/19 16:28:11 christos Exp $\n# pgp:  file(1) magic for Pretty Good Privacy\n# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html\n#\n0       beshort         0x9900                  PGP key public ring\n!:mime\tapplication/x-pgp-keyring\n0       beshort         0x9501                  PGP key security ring\n!:mime\tapplication/x-pgp-keyring\n0       beshort         0x9500                  PGP key security ring\n!:mime\tapplication/x-pgp-keyring\n0\tbeshort\t\t0xa600\t\t\tPGP encrypted data\n#!:mime\tapplication/pgp-encrypted\n#0\tstring\t\t-----BEGIN\\040PGP\ttext/PGP armored data\n!:mime\ttext/PGP # encoding: armored data\n#>15\tstring\tPUBLIC\\040KEY\\040BLOCK-\tpublic key block\n#>15\tstring\tMESSAGE-\t\tmessage\n#>15\tstring\tSIGNED\\040MESSAGE-\tsigned message\n#>15\tstring\tPGP\\040SIGNATURE-\tsignature\n\n2\tstring\t---BEGIN\\ PGP\\ PUBLIC\\ KEY\\ BLOCK-\tPGP public key block\n!:mime\tapplication/pgp-keys\n0\tstring\t-----BEGIN\\040PGP\\40MESSAGE-\t\tPGP message\n!:mime\tapplication/pgp\n0\tstring\t-----BEGIN\\040PGP\\40SIGNATURE-\t\tPGP signature\n!:mime\tapplication/pgp-signature\n\n#------------------------------------------------------------------------------\n# $File: pkgadd,v 1.6 2009/09/19 16:28:11 christos Exp $\n# pkgadd:  file(1) magic for SysV R4 PKG Datastreams\n#\n0       string          #\\ PaCkAgE\\ DaTaStReAm  pkg Datastream (SVR4)\n!:mime\tapplication/x-svr4-package\n\n#------------------------------------------------------------------------------\n# $File: plan9,v 1.5 2009/09/19 16:28:11 christos Exp $\n# plan9:  file(1) magic for AT&T Bell Labs' Plan 9 executables\n# From: \"Stefan A. Haubenthal\" <polluks@web.de>\n#\n0\tbelong\t\t0x00000107\tPlan 9 executable, Motorola 68k\n0\tbelong\t\t0x000001EB\tPlan 9 executable, Intel 386\n0\tbelong\t\t0x00000247\tPlan 9 executable, Intel 960\n0\tbelong\t\t0x000002AB\tPlan 9 executable, SPARC\n0\tbelong\t\t0x00000407\tPlan 9 executable, MIPS R3000\n0\tbelong\t\t0x0000048B\tPlan 9 executable, AT&T DSP 3210\n0\tbelong\t\t0x00000517\tPlan 9 executable, MIPS R4000 BE\n0\tbelong\t\t0x000005AB\tPlan 9 executable, AMD 29000\n0\tbelong\t\t0x00000647\tPlan 9 executable, ARM 7-something\n0\tbelong\t\t0x000006EB\tPlan 9 executable, PowerPC\n0\tbelong\t\t0x00000797\tPlan 9 executable, MIPS R4000 LE\n0\tbelong\t\t0x0000084B\tPlan 9 executable, DEC Alpha\n\n#------------------------------------------------------------------------------\n# $File: plus5,v 1.6 2009/09/19 16:28:11 christos Exp $\n# plus5:  file(1) magic for Plus Five's UNIX MUMPS\n#\n# XXX - byte order?  Paging Hokey....\n#\n0\tshort\t\t0x259\t\tmumps avl global\n>2\tbyte\t\t>0\t\t(V%d)\n>6\tbyte\t\t>0\t\twith %d byte name\n>7\tbyte\t\t>0\t\tand %d byte data cells\n0\tshort\t\t0x25a\t\tmumps blt global\n>2\tbyte\t\t>0\t\t(V%d)\n>8\tshort\t\t>0\t\t- %d byte blocks\n>15\tbyte\t\t0x00\t\t- P/D format\n>15\tbyte\t\t0x01\t\t- P/K/D format\n>15\tbyte\t\t0x02\t\t- K/D format\n>15\tbyte\t\t>0x02\t\t- Bad Flags\n\n#------------------------------------------------------------------------------\n# $File: printer,v 1.22 2009/09/19 16:28:11 christos Exp $\n# printer:  file(1) magic for printer-formatted files\n#\n\n# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)\n0\tstring\t\t%!\t\tPostScript document text\n!:mime\tapplication/postscript\n!:apple\tASPSTEXT\n>2\tstring\t\tPS-Adobe-\tconforming\n>>11\tstring\t\t>\\0\t\tDSC level %.3s\n>>>15\tstring\t\tEPS\t\t\\b, type %s\n>>>15\tstring\t\tQuery\t\t\\b, type %s\n>>>15\tstring\t\tExitServer\t\\b, type %s\n>>>15   search/1000\t\t%%LanguageLevel:\\ \n>>>>&0\tstring\t\t>\\0\t\t\\b, Level %s\n# Some PCs have the annoying habit of adding a ^D as a document separator\n0\tstring\t\t\\004%!\t\tPostScript document text\n!:mime\tapplication/postscript\n!:apple\tASPSTEXT\n>3\tstring\t\tPS-Adobe-\tconforming\n>>12\tstring\t\t>\\0\t\tDSC level %.3s\n>>>16\tstring\t\tEPS\t\t\\b, type %s\n>>>16\tstring\t\tQuery\t\t\\b, type %s\n>>>16\tstring\t\tExitServer\t\\b, type %s\n>>>16   search/1000\t\t%%LanguageLevel:\\ \n>>>>&0\tstring\t\t>\\0\t\t\\b, Level %s\n0\tstring\t\t\\033%-12345X%!PS\tPostScript document\n\n# DOS EPS Binary File Header\n# From: Ed Sznyter <ews@Black.Market.NET>\n0       belong          0xC5D0D3C6      DOS EPS Binary File\n>4      long            >0              Postscript starts at byte %d\n>>8     long            >0              length %d\n>>>12   long            >0              Metafile starts at byte %d\n>>>>16  long            >0              length %d\n>>>20   long            >0              TIFF starts at byte %d\n>>>>24  long            >0              length %d\n\n# Summary: Adobe's PostScript Printer Description File\n# Extension: .ppd\n# Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8\n# Submitted by: Yves Arrouye <arrouye@marin.fdn.fr>\n#\n0\tstring\t\t*PPD-Adobe:\\x20\tPPD file\n>&0\tstring\t\tx\t\t\\b, version %s\n\n# HP Printer Job Language\n0\tstring\t\t\\033%-12345X@PJL\tHP Printer Job Language data\n# HP Printer Job Language\n# The header found on Win95 HP plot files is the \"Silliest Thing possible\" \n# (TM)\n# Every driver puts the language at some random position, with random case\n# (LANGUAGE and Language)\n# For example the LaserJet 5L driver puts the \"PJL ENTER LANGUAGE\" in line 10\n# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>\n# \n0\tstring\t\t\\033%-12345X@PJL\tHP Printer Job Language data\n>&0\tstring\t\t>\\0\t\t\t%s\t\t\t\n>>&0\tstring\t\t>\\0\t\t\t%s\t\t\t\n>>>&0\tstring\t\t>\\0\t\t\t%s\t\t\n>>>>&0\tstring\t\t>\\0\t\t\t%s\t\t\n#>15\tstring\t\t\\ ENTER\\ LANGUAGE\\ =\n#>31\tstring\t\tPostScript\t\tPostScript\n\n# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)\n0\tstring\t\t\\033E\\033\tHP PCL printer data\n>3\tstring\t\t\\&l0A\t\t- default page size\n>3\tstring\t\t\\&l1A\t\t- US executive page size\n>3\tstring\t\t\\&l2A\t\t- US letter page size\n>3\tstring\t\t\\&l3A\t\t- US legal page size\n>3\tstring\t\t\\&l26A\t\t- A4 page size\n>3\tstring\t\t\\&l80A\t\t- Monarch envelope size\n>3\tstring\t\t\\&l81A\t\t- No. 10 envelope size\n>3\tstring\t\t\\&l90A\t\t- Intl. DL envelope size\n>3\tstring\t\t\\&l91A\t\t- Intl. C5 envelope size\n>3\tstring\t\t\\&l100A\t\t- Intl. B5 envelope size\n>3\tstring\t\t\\&l-81A\t\t- No. 10 envelope size (landscape)\n>3\tstring\t\t\\&l-90A\t\t- Intl. DL envelope size (landscape)\n\n# IMAGEN printer-ready files:\n0\tstring\t@document(\t\tImagen printer\n# this only works if \"language xxx\" is first item in Imagen header.\n>10\tstring\tlanguage\\ impress\t(imPRESS data)\n>10\tstring\tlanguage\\ daisy\t\t(daisywheel text)\n>10\tstring\tlanguage\\ diablo\t(daisywheel text)\n>10\tstring\tlanguage\\ printer\t(line printer emulation)\n>10\tstring\tlanguage\\ tektronix\t(Tektronix 4014 emulation)\n# Add any other languages that your Imagen uses - remember\n# to keep the word `text' if the file is human-readable.\n# [GRR 950115:  missing \"postscript\" or \"ultrascript\" (whatever it was called)]\n#\n# Now magic for IMAGEN font files...\n0\tstring\t\tRast\t\tRST-format raster font data\n>45\tstring\t\t>0\t\tface %s\n# From Jukka Ukkonen\n0\tstring\t\t\\033[K\\002\\0\\0\\017\\033(a\\001\\0\\001\\033(g\tCanon Bubble Jet BJC formatted data\n\n# From <mike@flyn.org>\n# These are the /etc/magic entries to decode data sent to an Epson printer.\n0       string          \\x1B\\x40\\x1B\\x28\\x52\\x08\\x00\\x00REMOTE1P        Epson Stylus Color 460 data\n\n\n#------------------------------------------------------------------------------\n# zenographics:  file(1) magic for Zenographics ZjStream printer data\n# Rick Richardson  rickr@mn.rr.com\n0\tstring\t\tJZJZ\n>0x12\tstring\t\tZZ\t\tZenographics ZjStream printer data (big-endian)\n0\tstring\t\tZJZJ\n>0x12\tstring\t\tZZ\t\tZenographics ZjStream printer data (little-endian)\n\n\n#------------------------------------------------------------------------------\n# Oak Technologies printer stream\n# Rick Richardson <rickr@mn.rr.com>\n0       string          OAK\n>0x07\tbyte\t\t0\n>0x0b\tbyte\t\t0\tOak Technologies printer stream\n\n# This would otherwise be recognized as PostScript - nick@debian.org\n0\tstring\t\t%!VMF \t\tSunClock's Vector Map Format data\n\n#------------------------------------------------------------------------------\n# HP LaserJet 1000 series downloadable firmware file\n0\tstring\t\\xbe\\xefABCDEFGH\tHP LaserJet 1000 series downloadable firmware   \n\n# From: Paolo <oopla@users.sf.net>\n# Epson ESC/Page, ESC/PageColor \n0\tstring\t\\x1b\\x01@EJL\tEpson ESC/Page language printer data\n\n#------------------------------------------------------------------------------\n# $File: project,v 1.4 2009/09/19 16:28:11 christos Exp $\n# project:  file(1) magic for Project management\n# \n# Magic strings for ftnchek project files. Alexander Mai\n0\tstring\tFTNCHEK_\\ P\tproject file for ftnchek\n>10\tstring\t1\t\tversion 2.7\n>10\tstring\t2\t\tversion 2.8 to 2.10\n>10\tstring\t3\t\tversion 2.11 or later\n\n#------------------------------------------------------------------------------\n# $File: psdbms,v 1.6 2009/09/19 16:28:11 christos Exp $\n# psdbms:  file(1) magic for psdatabase\n#\n0\tbelong&0xff00ffff\t0x56000000\tps database\n>1\tstring\t>\\0\tversion %s\n>4\tstring\t>\\0\tfrom kernel %s\n\n#------------------------------------------------------------------------------\n# $File: pulsar,v 1.5 2009/09/19 16:28:12 christos Exp $\n# pulsar:  file(1) magic for Pulsar POP3 daemon binary files\n#\n# http://pulsar.sourceforge.net\n# mailto:rok.papez@lugos.si\n#\n\n0\tbelong\t0x1ee7f11e\tPulsar POP3 daemon mailbox cache file.\n>4\tubelong\tx\t\tVersion: %d.\n>8\tubelong\tx\t\t\\b%d\n\n\n#------------------------------------------------------------------------------\n# $File: pyramid,v 1.7 2009/09/19 16:28:12 christos Exp $\n# pyramid:  file(1) magic for Pyramids\n#\n# XXX - byte order?\n#\n0\tlong\t\t0x50900107\tPyramid 90x family executable\n0\tlong\t\t0x50900108\tPyramid 90x family pure executable\n>16\tlong\t\t>0\t\tnot stripped\n0\tlong\t\t0x5090010b\tPyramid 90x family demand paged pure executable\n>16\tlong\t\t>0\t\tnot stripped\n\n#------------------------------------------------------------------------------\n# $File: python,v 1.12 2009/10/27 14:49:57 christos Exp $\n# python:  file(1) magic for python\n#\n# From: David Necas <yeti@physics.muni.cz>\n# often the module starts with a multiline string\n0\tstring\t\t\"\"\"\ta python script text executable\n# MAGIC as specified in Python/import.c (1.5 to 2.6a1 and 3.1a0, assuming\n# that Py_UnicodeFlag is off for Python 2)\n# 20121  ( YEAR - 1995 ) + MONTH  + DAY (little endian followed by \"\\r\\n\"\n0\tbelong\t\t0x994e0d0a\tpython 1.5/1.6 byte-compiled\n0\tbelong\t\t0x87c60d0a\tpython 2.0 byte-compiled\n0\tbelong\t\t0x2aeb0d0a\tpython 2.1 byte-compiled\n0\tbelong\t\t0x2ded0d0a\tpython 2.2 byte-compiled\n0\tbelong\t\t0x3bf20d0a\tpython 2.3 byte-compiled\n0\tbelong\t\t0x6df20d0a\tpython 2.4 byte-compiled\n0\tbelong\t\t0xb3f20d0a\tpython 2.5 byte-compiled\n0\tbelong\t\t0xd1f20d0a\tpython 2.6 byte-compiled\n0\tbelong\t\t0x3b0c0d0a\tpython 3.0 byte-compiled\n0\tbelong\t\t0x4f0c0d0a\tpython 3.1 byte-compiled\n\n0\tsearch/1/w\t#!\\ /usr/bin/python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1/w\t#!\\ /usr/local/bin/python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1\t#!/usr/bin/env\\ python\tPython script text executable\n!:mime text/x-python\n0\tsearch/1\t#!\\ /usr/bin/env\\ ruby\tPython script text executable\n!:mime text/x-python\n\n#------------------------------------------------------------------------------\n# $File: revision,v 1.6 2009/09/19 16:28:12 christos Exp $\n# file(1) magic for revision control files\n# From Hendrik Scholz <hendrik@scholz.net>\n0\tstring\t/1\\ :pserver:\tcvs password text file\n\n# Conary changesets\n# From: Jonathan Smith <smithj@rpath.com>\n0\tbelong\t0xea3f81bb\tConary changeset data\n\n# Type: Git bundles (git-bundle)\n# From: Josh Triplett <josh@freedesktop.org>\n0\tstring\t#\\ v2\\ git\\ bundle\\n\tGit bundle\n\n# Type: Git pack\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However,\n# those have a little-endian offset immediately following the magic 'PACK',\n# the first byte of which is never 0, while the first byte of the Git pack\n# version, since it's a tiny number stored in big-endian format, is always 0.\n0\tstring\tPACK\\0\t\tGit pack\n>4\tbelong\t>0\t\t\\b, version %d\n>>8\tbelong\t>0\t\t\\b, %d objects\n\n# Type: Git pack index\n# From: Adam Buchbinder <adam.buchbinder@gmail.com>\n0\tstring\t\\377tOc\t\tGit pack index\n>4\tbelong\t=2\t\t\\b, version 2\n\n# Type: Git index file\n# From: FrÃ©dÃ©ric BriÃ¨re <fbriere@fbriere.net>\n0\tstring\tDIRC\t\tGit index\n>4\tbelong\t>0\t\t\\b, version %d\n>>8\tbelong\t>0\t\t\\b, %d entries\n\n# Type:\tMercurial bundles\n# From:\tSeo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>\n0\tstring\tHG10\t\tMercurial bundle,\n>4\tstring\tUN\t\tuncompressed\n>4\tstring\tBZ\t\tbzip2 compressed\n\n# Type:\tSubversion (SVN) dumps\n# From:\tUwe Zeisberger <zeisberg@informatik.uni-freiburg.de>\n0\tstring\tSVN-fs-dump-format-version:\tSubversion dumpfile\n>28\tstring\t>\\0\t\t\t\t(version: %s)\n\n# Type:\tBazaar revision bundles and merge requests\n# URL:\thttp://www.bazaar-vcs.org/\n# From:\tJelmer Vernooij <jelmer@samba.org>\n0\tstring\t#\\ Bazaar\\ revision\\ bundle\\ v Bazaar Bundle\n0\tstring\t#\\ Bazaar\\ merge\\ directive\\ format Bazaar merge directive\n\n#------------------------------------------------------------------------------\n# $File: riff,v 1.18 2009/09/19 16:28:12 christos Exp $\n# riff:  file(1) magic for RIFF format\n# See\n#\n#\thttp://www.seanet.com/users/matts/riffmci/riffmci.htm\n#\n# AVI section extended by Patrik Rådman <patrik+file-magic@iki.fi>\n#\n0\tstring\t\tRIFF\t\tRIFF (little-endian) data\n# RIFF Palette format\n>8\tstring\t\tPAL\t\t\\b, palette\n>>16\tleshort\t\tx\t\t\\b, version %d\n>>18\tleshort\t\tx\t\t\\b, %d entries\n# RIFF Device Independent Bitmap format\n>8\tstring\t\tRDIB\t\t\\b, device-independent bitmap\n>>16\tstring\t\tBM\t\t\n>>>30\tleshort\t\t12\t\t\\b, OS/2 1.x format\n>>>>34\tleshort\t\tx\t\t\\b, %d x\n>>>>36\tleshort\t\tx\t\t%d\n>>>30\tleshort\t\t64\t\t\\b, OS/2 2.x format\n>>>>34\tleshort\t\tx\t\t\\b, %d x\n>>>>36\tleshort\t\tx\t\t%d\n>>>30\tleshort\t\t40\t\t\\b, Windows 3.x format\n>>>>34\tlelong\t\tx\t\t\\b, %d x\n>>>>38\tlelong\t\tx\t\t%d x\n>>>>44\tleshort\t\tx\t\t%d\n# RIFF MIDI format\n>8\tstring\t\tRMID\t\t\\b, MIDI\n# RIFF Multimedia Movie File format\n>8\tstring\t\tRMMP\t\t\\b, multimedia movie\n# RIFF wrapper for MP3\n>8\tstring\t\tRMP3\t\t\\b, MPEG Layer 3 audio\n# Microsoft WAVE format (*.wav)\n>8\tstring\t\tWAVE\t\t\\b, WAVE audio\n!:mime\taudio/x-wav\n>>20\tleshort\t\t1\t\t\\b, Microsoft PCM\n>>>34\tleshort\t\t>0\t\t\\b, %d bit\n>>20\tleshort\t\t2\t\t\\b, Microsoft ADPCM\n>>20\tleshort\t\t6\t\t\\b, ITU G.711 A-law\n>>20\tleshort\t\t7\t\t\\b, ITU G.711 mu-law\n>>20\tleshort\t\t8\t\t\\b, Microsoft DTS\n>>20\tleshort\t\t17\t\t\\b, IMA ADPCM\n>>20\tleshort\t\t20\t\t\\b, ITU G.723 ADPCM (Yamaha)\n>>20\tleshort\t\t49\t\t\\b, GSM 6.10\n>>20\tleshort\t\t64\t\t\\b, ITU G.721 ADPCM\n>>20\tleshort\t\t80\t\t\\b, MPEG\n>>20\tleshort\t\t85\t\t\\b, MPEG Layer 3\n>>20\tleshort\t\t0x2001\t\t\\b, DTS\n>>22\tleshort\t\t=1\t\t\\b, mono\n>>22\tleshort\t\t=2\t\t\\b, stereo\n>>22\tleshort\t\t>2\t\t\\b, %d channels\n>>24\tlelong\t\t>0\t\t%d Hz\n# Corel Draw Picture\n>8\tstring\t\tCDRA\t\t\\b, Corel Draw Picture\n!:mime\timage/x-coreldraw\n# AVI == Audio Video Interleave\n>8\tstring\t\tAVI\\040\t\t\\b, AVI\n!:mime\tvideo/x-msvideo\n>>12    string          LIST\n>>>20   string          hdrlavih\n>>>>&36 lelong          x               \\b, %lu x\n>>>>&40 lelong          x               %lu,\n>>>>&4  lelong          >1000000        <1 fps,\n>>>>&4  lelong          1000000         1.00 fps,\n>>>>&4  lelong          500000          2.00 fps,\n>>>>&4  lelong          333333          3.00 fps,\n>>>>&4  lelong          250000          4.00 fps,\n>>>>&4  lelong          200000          5.00 fps,\n>>>>&4  lelong          166667          6.00 fps,\n>>>>&4  lelong          142857          7.00 fps,\n>>>>&4  lelong          125000          8.00 fps,\n>>>>&4  lelong          111111          9.00 fps,\n>>>>&4  lelong          100000          10.00 fps,\n# ]9.9,10.1[\n>>>>&4  lelong          <101010\n>>>>>&-4        lelong  >99010\n>>>>>>&-4       lelong  !100000         ~10 fps,\n>>>>&4  lelong          83333           12.00 fps,\n# ]11.9,12.1[\n>>>>&4  lelong          <84034\n>>>>>&-4        lelong  >82645\n>>>>>>&-4       lelong  !83333          ~12 fps,\n>>>>&4  lelong          66667           15.00 fps,\n# ]14.9,15.1[\n>>>>&4  lelong          <67114\n>>>>>&-4        lelong  >66225\n>>>>>>&-4       lelong  !66667          ~15 fps,\n>>>>&4  lelong          50000           20.00 fps,\n>>>>&4  lelong          41708           23.98 fps,\n>>>>&4  lelong          41667           24.00 fps,\n# ]23.9,24.1[\n>>>>&4  lelong          <41841\n>>>>>&-4        lelong  >41494\n>>>>>>&-4       lelong  !41708\n>>>>>>>&-4      lelong  !41667          ~24 fps,\n>>>>&4  lelong          40000           25.00 fps,\n# ]24.9,25.1[\n>>>>&4  lelong          <40161\n>>>>>&-4        lelong  >39841\n>>>>>>&-4       lelong  !40000          ~25 fps,\n>>>>&4  lelong          33367           29.97 fps,\n>>>>&4  lelong          33333           30.00 fps,\n# ]29.9,30.1[\n>>>>&4  lelong          <33445\n>>>>>&-4        lelong  >33223\n>>>>>>&-4       lelong  !33367\n>>>>>>>&-4      lelong  !33333          ~30 fps,\n>>>>&4  lelong          <32224          >30 fps,\n##>>>>&4  lelong          x               (%lu)\n##>>>>&20 lelong          x               %lu frames,\n# Note: The tests below assume that the AVI has 1 or 2 streams,\n#       \"vids\" optionally followed by \"auds\".\n#       (Should cover 99.9% of all AVIs.)\n# assuming avih length = 56\n>>>88   string  LIST\n>>>>96  string  strlstrh\n>>>>>108        string  vids    video:\n>>>>>>&0        lelong  0               uncompressed\n# skip past vids strh\n>>>>>>(104.l+108)       string  strf\n>>>>>>>(104.l+132)      lelong          1       RLE 8bpp\n>>>>>>>(104.l+132)      string/c        cvid    Cinepak\n>>>>>>>(104.l+132)      string/c        i263    Intel I.263\n>>>>>>>(104.l+132)      string/c        iv32    Indeo 3.2\n>>>>>>>(104.l+132)      string/c        iv41    Indeo 4.1\n>>>>>>>(104.l+132)      string/c        iv50    Indeo 5.0\n>>>>>>>(104.l+132)      string/c        mp42    Microsoft MPEG-4 v2\n>>>>>>>(104.l+132)      string/c        mp43    Microsoft MPEG-4 v3\n>>>>>>>(104.l+132)      string/c        fmp4    FFMpeg MPEG-4\n>>>>>>>(104.l+132)      string/c        mjpg    Motion JPEG\n>>>>>>>(104.l+132)      string/c        div3    DivX 3\n>>>>>>>>112             string/c        div3    Low-Motion\n>>>>>>>>112             string/c        div4    Fast-Motion\n>>>>>>>(104.l+132)      string/c        divx    DivX 4\n>>>>>>>(104.l+132)      string/c        dx50    DivX 5\n>>>>>>>(104.l+132)      string/c        xvid    XviD\n>>>>>>>(104.l+132)\tstring/c\th264\tH.264\n>>>>>>>(104.l+132)      string/c        wmv3    Windows Media Video 9\n>>>>>>>(104.l+132)      string/c        h264    X.264 or H.264\n>>>>>>>(104.l+132)      lelong  0\n##>>>>>>>(104.l+132)      string  x       (%.4s)\n# skip past first (video) LIST\n>>>>(92.l+96)   string  LIST\n>>>>>(92.l+104) string  strlstrh\n>>>>>>(92.l+116)        string          auds    \\b, audio:\n# auds strh length = 56:\n>>>>>>>(92.l+172)       string          strf\n>>>>>>>>(92.l+180)      leshort 0x0001  uncompressed PCM\n>>>>>>>>(92.l+180)      leshort 0x0002  ADPCM\n>>>>>>>>(92.l+180)      leshort 0x0006  aLaw\n>>>>>>>>(92.l+180)      leshort 0x0007  uLaw\n>>>>>>>>(92.l+180)      leshort 0x0050  MPEG-1 Layer 1 or 2\n>>>>>>>>(92.l+180)      leshort 0x0055  MPEG-1 Layer 3\n>>>>>>>>(92.l+180)      leshort 0x2000  Dolby AC3\n>>>>>>>>(92.l+180)      leshort 0x0161  DivX\n##>>>>>>>>(92.l+180)      leshort x       (0x%.4x)\n>>>>>>>>(92.l+182)      leshort 1       (mono,\n>>>>>>>>(92.l+182)      leshort 2       (stereo,\n>>>>>>>>(92.l+182)      leshort >2      (%d channels,\n>>>>>>>>(92.l+184)      lelong  x       %d Hz)\n# auds strh length = 64:\n>>>>>>>(92.l+180)       string          strf\n>>>>>>>>(92.l+188)      leshort 0x0001  uncompressed PCM\n>>>>>>>>(92.l+188)      leshort 0x0002  ADPCM\n>>>>>>>>(92.l+188)      leshort 0x0055  MPEG-1 Layer 3\n>>>>>>>>(92.l+188)      leshort 0x2000  Dolby AC3\n>>>>>>>>(92.l+188)      leshort 0x0161  DivX\n##>>>>>>>>(92.l+188)      leshort x       (0x%.4x)\n>>>>>>>>(92.l+190)      leshort 1       (mono,\n>>>>>>>>(92.l+190)      leshort 2       (stereo,\n>>>>>>>>(92.l+190)      leshort >2      (%d channels,\n>>>>>>>>(92.l+192)      lelong  x       %d Hz)\n# Animated Cursor format\n>8\tstring\t\tACON\t\t\\b, animated cursor\n# SoundFont 2 <mpruett@sgi.com>\n>8\tstring\t\tsfbk\t\tSoundFont/Bank\n# MPEG-1 wrapped in a RIFF, apparently\n>8      string          CDXA            \\b, wrapped MPEG-1 (CDXA)\n>8\tstring\t\t4XMV\t\t\\b, 4X Movie file \n\n#\n# XXX - some of the below may only appear in little-endian form.\n#\n# Also \"MV93\" appears to be for one form of Macromedia Director\n# files, and \"GDMF\" appears to be another multimedia format.\n#\n0\tstring\t\tRIFX\t\tRIFF (big-endian) data\n# RIFF Palette format\n>8\tstring\t\tPAL\t\t\\b, palette\n>>16\tbeshort\t\tx\t\t\\b, version %d\n>>18\tbeshort\t\tx\t\t\\b, %d entries\n# RIFF Device Independent Bitmap format\n>8\tstring\t\tRDIB\t\t\\b, device-independent bitmap\n>>16\tstring\t\tBM\t\t\n>>>30\tbeshort\t\t12\t\t\\b, OS/2 1.x format\n>>>>34\tbeshort\t\tx\t\t\\b, %d x\n>>>>36\tbeshort\t\tx\t\t%d\n>>>30\tbeshort\t\t64\t\t\\b, OS/2 2.x format\n>>>>34\tbeshort\t\tx\t\t\\b, %d x\n>>>>36\tbeshort\t\tx\t\t%d\n>>>30\tbeshort\t\t40\t\t\\b, Windows 3.x format\n>>>>34\tbelong\t\tx\t\t\\b, %d x\n>>>>38\tbelong\t\tx\t\t%d x\n>>>>44\tbeshort\t\tx\t\t%d\n# RIFF MIDI format\n>8\tstring\t\tRMID\t\t\\b, MIDI\n# RIFF Multimedia Movie File format\n>8\tstring\t\tRMMP\t\t\\b, multimedia movie\n# Microsoft WAVE format (*.wav)\n>8\tstring\t\tWAVE\t\t\\b, WAVE audio\n>>20\tleshort\t\t1\t\t\\b, Microsoft PCM\n>>>34\tleshort\t\t>0\t\t\\b, %d bit\n>>22\tbeshort\t\t=1\t\t\\b, mono\n>>22\tbeshort\t\t=2\t\t\\b, stereo\n>>22\tbeshort\t\t>2\t\t\\b, %d channels\n>>24\tbelong\t\t>0\t\t%d Hz\n# Corel Draw Picture\n>8\tstring\t\tCDRA\t\t\\b, Corel Draw Picture\n# AVI == Audio Video Interleave\n>8\tstring\t\tAVI\\040\t\t\\b, AVI\n# Animated Cursor format\n>8\tstring\t\tACON\t\t\\b, animated cursor\n# Notation Interchange File Format (big-endian only)\n>8\tstring\t\tNIFF\t\t\\b, Notation Interchange File Format\n# SoundFont 2 <mpruett@sgi.com>\n>8\tstring\t\tsfbk\t\tSoundFont/Bank\n\n#------------------------------------------------------------------------------\n# $File: rpm,v 1.9 2009/11/06 13:53:52 christos Exp $\n#\n# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt@redhat.com)\n#\n0\tbeshort\t\t0xedab\n>2\tbeshort\t\t0xeedb\t\tRPM\n!:mime\tapplication/x-rpm\n>>4\tbyte\t\tx\t\tv%d\n>>5\tbyte\t\tx\t\t\\b.%d\n>>6\tbeshort\t\t1\t\tsrc\n>>6\tbeshort\t\t0\t\tbin\n>>>8\tbeshort\t\t1\t\ti386/x86_64\n>>>8\tbeshort\t\t2\t\tAlpha/Sparc64\n>>>8\tbeshort\t\t3\t\tSparc\n>>>8\tbeshort\t\t4\t\tMIPS\n>>>8\tbeshort\t\t5\t\tPowerPC\n>>>8\tbeshort\t\t6\t\t68000\n>>>8\tbeshort\t\t7\t\tSGI\n>>>8\tbeshort\t\t8\t\tRS6000\n>>>8\tbeshort\t\t9\t\tIA64\n>>>8\tbeshort\t\t10\t\tSparc64\n\n#delta RPM    Daniel Novotny (dnovotny@redhat.com)\n0\tstring\tdrpm\tDelta RPM\n!:mime  application/x-rpm\n>12\tstring \tx\t%s\n\n>>>8\tbeshort\t\t11\t\tMIPSel\n>>>8\tbeshort\t\t12\t\tARM\n>>>8\tbeshort\t\t13\t\tMiNT\n>>>8\tbeshort\t\t14\t\tS/390\n>>>8\tbeshort\t\t15\t\tS/390x\n>>>8\tbeshort\t\t16\t\tPowerPC64\n>>>8\tbeshort\t\t17\t\tSuperH\n>>>8\tbeshort\t\t18\t\tXtensa\n>>10\tstring\t\tx\t\t%s\n\n# Type:\tDelta RPM\n# From:\tDaniel Novotny (dnovotny@redhat.com)\n0\tstring\t\tdrpm\t\tDelta RPM\n!:mime application/x-rpm\n>12\tstring\t\tx\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: rtf,v 1.7 2009/09/19 16:28:12 christos Exp $\n# rtf:\tfile(1) magic for Rich Text Format (RTF)\n#\n# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk\n#\n0\tstring\t\t{\\\\rtf\t\tRich Text Format data,\n!:mime\ttext/rtf\n>5\tstring\t\t1\t\tversion 1,\n>>6\tstring\t\t\\\\ansi\t\tANSI\n>>6\tstring\t\t\\\\mac\t\tApple Macintosh\n>>6\tstring\t\t\\\\pc\t\tIBM PC, code page 437\n>>6\tstring\t\t\\\\pca\t\tIBM PS/2, code page 850\n>>6\tdefault\t\tx\t\tunknown character set\n>5\tdefault\t\tx\t\tunknown version\n\n#------------------------------------------------------------------------------\n# $File: ruby,v 1.3 2009/09/19 16:28:12 christos Exp $\n# ruby:  file(1) magic for Ruby scripting language\n# URL:  http://www.ruby-lang.org/\n# From: Reuben Thomas <rrt@sc3d.org>\n\n# Ruby scripts\n0\tsearch/1/w\t#!\\ /usr/bin/ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1/w\t#!\\ /usr/local/bin/ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1\t#!/usr/bin/env\\ ruby\tRuby script text executable\n!:mime text/x-ruby\n0\tsearch/1\t#!\\ /usr/bin/env\\ ruby\tRuby script text executable\n!:mime text/x-ruby\n\n#------------------------------------------------------------------------------\n# $File: sc,v 1.6 2009/09/19 16:28:12 christos Exp $\n# sc:  file(1) magic for \"sc\" spreadsheet\n#\n38\tstring\t\tSpreadsheet\tsc spreadsheet file\n!:mime\tapplication/x-sc\n\n#------------------------------------------------------------------------------\n# $File: sccs,v 1.6 2009/09/19 16:28:12 christos Exp $\n# sccs:  file(1) magic for SCCS archives\n#\n# SCCS archive structure:\n# \\001h01207\n# \\001s 00276/00000/00000\n# \\001d D 1.1 87/09/23 08:09:20 ian 1 0\n# \\001c date and time created 87/09/23 08:09:20 by ian\n# \\001e\n# \\001u\n# \\001U\n# ... etc.\n# Now '\\001h' happens to be the same as the 3B20's a.out magic number (0550).\n# *Sigh*. And these both came from various parts of the USG.\n# Maybe we should just switch everybody from SCCS to RCS!\n# Further, you can't just say '\\001h0', because the five-digit number\n# is a checksum that could (presumably) have any leading digit,\n# and we don't have regular expression matching yet. \n# Hence the following official kludge:\n8\tstring\t\t\\001s\\ \t\t\tSCCS archive data\n\n#------------------------------------------------------------------------------\n# $File: scientific,v 1.6 2009/09/19 16:28:12 christos Exp $\n# scientific:  file(1) magic for scientific formats \n#\n# From: Joe Krahn <krahn@niehs.nih.gov>\n\n########################################################\n# CCP4 data and plot files:\n0\tstring\t\tMTZ\\040\t\tMTZ reflection file\n\n92\tstring\t\tPLOT%%84\tPlot84 plotting file\n>52\tbyte\t\t1\t\t, Little-endian\n>55\tbyte\t\t1\t\t, Big-endian\n\n########################################################\n# Electron density MAP/MASK formats\n\n0\tstring\t\tEZD_MAP\tNEWEZD Electron Density Map\n109\tstring\t\tMAP\\040(  Old EZD Electron Density Map\n\n0\tstring/c\t:-)\\040Origin\tBRIX Electron Density Map\n>170\tstring\t\t>0\t, Sigma:%.12s\n#>4\tstring\t\t>0\t%.178s\n#>4\taddr\t\tx\t%.178s\n\n7\tstring\t\t18\\040!NTITLE\tXPLOR ASCII Electron Density Map\n9\tstring\t\t\\040!NTITLE\\012\\040REMARK\tCNS ASCII electron density map\n\n208\tstring\t\tMAP\\040\tCCP4 Electron Density Map\n# Assumes same stamp for float and double (normal case)\n>212\tbyte\t\t17\t\\b, Big-endian\n>212\tbyte\t\t34\t\\b, VAX format\n>212\tbyte\t\t68\t\\b, Little-endian\n>212\tbyte\t\t85\t\\b, Convex native\n\n############################################################\n# X-Ray Area Detector images\n0\tstring\tR-AXIS4\\ \\ \\ \tR-Axis Area Detector Image:\n>796\tlelong\t<20\t\tLittle-endian, IP #%d,\n>>768\tlelong\t>0\t\tSize=%dx\n>>772\tlelong\t>0\t\t\\b%d\n>796\tbelong\t<20\t\tBig-endian, IP #%d,\n>>768\tbelong\t>0\t\tSize=%dx\n>>772\tbelong\t>0\t\t\\b%d\n\n0\tstring\tRAXIS\\ \\ \\ \\ \\ \tR-Axis Area Detector Image, Win32:\n>796\tlelong\t<20\t\tLittle-endian, IP #%d,\n>>768\tlelong\t>0\t\tSize=%dx\n>>772\tlelong\t>0\t\t\\b%d\n>796\tbelong\t<20\t\tBig-endian, IP #%d,\n>>768\tbelong\t>0\t\tSize=%dx\n>>772\tbelong\t>0\t\t\\b%d\n\n\n1028\tstring\tMMX\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\tMAR Area Detector Image,\n>1072\tulong\t>1\t\tCompressed(%d),\n>1100\tulong\t>1\t\t%d headers,\n>1104\tulong\t>0\t\t%d x\n>1108\tulong\t>0\t\t%d,\n>1120\tulong\t>0\t\t%d bits/pixel\n\n# Type: GEDCOM genealogical (family history) data\n# From: Giuseppe Bilotta\n0       search/1/c\t0\\ HEAD         GEDCOM genealogy text\n>&0     search\t\t1\\ GEDC\n>>&0    search\t\t2\\ VERS         version\n>>>&1   search/1\t>\\0\t\t%s\n# From: Phil Endecott <phil05@chezphil.org>\n0\tstring\t\\000\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\t\tGEDCOM data\n0\tstring\t\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\\000\t\tGEDCOM data\n0\tstring\t\\376\\377\\000\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\tGEDCOM data\n0\tstring\t\\377\\376\\060\\000\\040\\000\\110\\000\\105\\000\\101\\000\\104\\000\tGEDCOM data\n\n# PDB: Protein Data Bank files\n# Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n# http://www.wwpdb.org/documentation/format32/sect2.html\n# http://www.ch.ic.ac.uk/chemime/\n#\n# The PDB file format is fixed-field, 80 columns. From the spec:\n#\n# COLS        DATA\n#  1 -  6      \"HEADER\"\n#  11 - 50     String(40)\n#  51 - 59     Date\n#  63 - 66     IDcode\n#\n# Thus, positions 7-10, 60-62 and 67-80 are spaces. The Date must be in the\n# format DD-MMM-YY, e.g., 01-JAN-70, and the IDcode consists of numbers and\n# uppercase letters. However, examples have been seen without the date string,\n# e.g., the example on the chemime site.\n0\tstring\tHEADER\\ \\ \\ \\ \n>&0\tregex/1\t\\^.{40}\n>>&0\tregex/1\t[0-9]{2}-[A-Z]{3}-[0-9]{2}\\ {3}\n>>>&0\tregex/1s\t[A-Z0-9]{4}.{14}$\n>>>>&0\tregex/1\t[A-Z0-9]{4}\tProtein Data Bank data, ID Code %s\n!:mime\tchemical/x-pdb\n>>>>0\tregex/1\t[0-9]{2}-[A-Z]{3}-[0-9]{2}\t\\b, %s\n\n# Type:\tGDSII Stream file\n0\tbelong\t0x00060002\tGDSII Stream file\n>4\tbyte\t0x00\n>>5\tbyte\tx\t\tversion %d.0\n>4\tbyte\t>0x00\t\tversion %d\n>>5\tbyte\tx\t\t\\b.%d\n\n#------------------------------------------------------------------------------\n# $File: securitycerts,v 1.4 2009/09/19 16:28:12 christos Exp $\n0\tsearch/1\t\t-----BEGIN\\ CERTIFICATE------\tRFC1421 Security Certificate text\n0\tsearch/1\t\t-----BEGIN\\ NEW\\ CERTIFICATE\tRFC1421 Security Certificate Signing Request text\n0\tbelong\t0xedfeedfe\tSun 'jks' Java Keystore File data\n# Type:\tSE Linux policy modules *.pp reference policy\n#\tfor Fedora 5 to 9, RHEL5, and Debian Etch and Lenny.\n# URL:\thttp://doc.coker.com.au/computers/selinux-magic\n# From:\tRussell Coker <russell@coker.com.au>\n\n0\t\tlelong\t0xf97cff8f\tSE Linux modular policy\n>4\t\tlelong\tx\t\tversion %d,\n>8\t\tlelong\tx\t\t%d sections,\n>>(12.l)\tlelong\t0xf97cff8d\n>>>(12.l+27)\tlelong\tx\t\tmod version %d,\n>>>(12.l+31)\tlelong\t0\t\tNot MLS,\n>>>(12.l+31)\tlelong\t1\t\tMLS,\n>>>(12.l+23)\tlelong\t2\n>>>>(12.l+47)\tstring\t>\\0\t\tmodule name %s\n>>>(12.l+23)\tlelong\t1\t\tbase\n\n1\tstring\tpolicy_module(\tSE Linux policy module source\n2\tstring\tpolicy_module(\tSE Linux policy module source\n\n0\tstring\t##\\ <summary>\tSE Linux policy interface source\n\n#0\tsearch\tgen_context(\tSE Linux policy file contexts\n\n#0\tsearch\tgen_sens(\tSE Linux policy MLS constraints source\n\n#------------------------------------------------------------------------------\n# $File: sendmail,v 1.7 2009/09/19 16:28:12 christos Exp $\n# sendmail:  file(1) magic for sendmail config files\n#\n# XXX - byte order?\n#\n0\tbyte\t046\t  Sendmail frozen configuration \n>16\tstring\t>\\0\t  - version %s\n0\tshort\t0x271c\t  Sendmail frozen configuration\n>16\tstring\t>\\0\t  - version %s\n\n#------------------------------------------------------------------------------\n# sendmail:  file(1) magic for sendmail m4(1) files\n#\n# From Hendrik Scholz <hendrik@scholz.net>\n# i.e. files in /usr/share/sendmail/cf/\n#\n0   string  divert(-1)\\n    sendmail m4 text file\n\n\n#------------------------------------------------------------------------------\n# $File: sequent,v 1.8 2009/09/19 16:28:12 christos Exp $\n# sequent:  file(1) magic for Sequent machines\n#\n# Sequent information updated by Don Dwiggins <atsun!dwiggins>.\n# For Sequent's multiprocessor systems (incomplete).\n0\tlelong\t0x00ea        \tBALANCE NS32000 .o\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tlelong\t0x10ea        \tBALANCE NS32000 executable (0 @ 0)\n>16\tlelong  >0            \tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tlelong\t0x20ea        \tBALANCE NS32000 executable (invalid @ 0)\n>16\tlelong  >0            \tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tlelong\t0x30ea        \tBALANCE NS32000 standalone executable\n>16\tlelong  >0          \tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n#\n# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.\n# Symmetry magic nums will not be reached if DOS COM comes before them;\n# byte 0xeb is matched before these get a chance.\n0\tleshort\t0x12eb\t\tSYMMETRY i386 .o\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tleshort\t0x22eb\t\tSYMMETRY i386 executable (0 @ 0)\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tleshort\t0x32eb\t\tSYMMETRY i386 executable (invalid @ 0)\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n0\tleshort\t0x42eb\t\tSYMMETRY i386 standalone executable\n>16\tlelong\t>0\t\tnot stripped\n>124\tlelong\t>0\t\tversion %ld\n\n#------------------------------------------------------------------------------\n# $File: sgi,v 1.17 2009/09/19 16:28:12 christos Exp $\n# sgi:  file(1) magic for Silicon Graphics applications\n\n#\n#\n# Performance Co-Pilot file types\n0\tstring\tPmNs\t\t\t\tPCP compiled namespace (V.0)\n0\tstring\tPmN\t\t\t\tPCP compiled namespace\n>3\tstring\t>\\0\t\t\t\t(V.%1.1s)\n#3\tlelong\t0x84500526\t\t\tPCP archive\n3\tbelong\t0x84500526\t\t\tPCP archive\n>7\tbyte\tx\t\t\t\t(V.%d)\n#>20\tlelong\t-2\t\t\t\ttemporal index\n#>20\tlelong\t-1\t\t\t\tmetadata\n#>20\tlelong\t0\t\t\t\tlog volume #0\n#>20\tlelong\t>0\t\t\t\tlog volume #%ld\n>20\tbelong\t-2\t\t\t\ttemporal index\n>20\tbelong\t-1\t\t\t\tmetadata\n>20\tbelong\t0\t\t\t\tlog volume #0\n>20\tbelong\t>0\t\t\t\tlog volume #%ld\n>24\tstring\t>\\0\t\t\t\thost: %s\n0\tstring\tPCPFolio\t\t\tPCP\n>9\tstring\tVersion:\t\t\tArchive Folio\n>18\tstring\t>\\0\t\t\t\t(V.%s)\n0\tstring\t#pmchart\t\t\tPCP pmchart view\n>9\tstring\tVersion\n>17\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\t#kmchart\t\t\tPCP kmchart view\n>9\tstring\tVersion\n>17\tstring\t>\\0\t\t\t\t(V.%s)\n0\tstring\tpmview\t\t\t\tPCP pmview config\n>7\tstring\tVersion\n>15\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\t#pmlogger\t\t\tPCP pmlogger config\n>10\tstring\tVersion\n>18\tstring\t>\\0\t\t\t\t(V%1.1s)\n0\tstring\t#pmdahotproc\t\t\tPCP pmdahotproc config\n>13\tstring\tVersion\n>21\tstring\t>\\0\t\t\t\t(V%-3.3s)\n0\tstring\tPcPh\t\t\t\tPCP Help\n>4\tstring\t1\t\t\t\tIndex\n>4\tstring\t2\t\t\t\tText\n>5\tstring\t>\\0\t\t\t\t(V.%1.1s)\n0\tstring\t#pmieconf-rules\t\t\tPCP pmieconf rules\n>16\tstring\t>\\0\t\t\t\t(V.%1.1s)\n3\tstring\tpmieconf-pmie\t\t\tPCP pmie config\n>17\tstring\t>\\0\t\t\t\t(V.%1.1s)\n\n# SpeedShop data files\n0\tlelong\t0x13130303\t\t\tSpeedShop data file\n\n# mdbm files\n0\tlelong\t0x01023962\t\t\tmdbm file, version 0 (obsolete)\n0\tstring\tmdbm\t\t\t\tmdbm file,\n>5\tbyte\tx\t\t\t\tversion %d,\n>6\tbyte\tx\t\t\t\t2^%d pages,\n>7\tbyte\tx\t\t\t\tpagesize 2^%d,\n>17\tbyte\tx\t\t\t\thash %d,\n>11\tbyte\tx\t\t\t\tdataformat %d\n\n# Alias Maya files\n0\tstring\t//Maya ASCII\tAlias Maya Ascii File,\n>13\tstring\t>\\0\tversion %s\n8\tstring\tMAYAFOR4\tAlias Maya Binary File,\n>32\tstring\t>\\0\tversion %s scene\n8\tstring\tMayaFOR4\tAlias Maya Binary File,\n>32\tstring\t>\\0\tversion %s scene\n8\tstring\tCIMG\t\tAlias Maya Image File\n8\tstring\tDEEP\t\tAlias Maya Image File\n#------------------------------------------------------------------------------\n# $File: sgml,v 1.24 2009/09/19 17:31:35 christos Exp $\n# Type:\tSVG Vectorial Graphics\n# From:\tNoel Torres <tecnico@ejerciciosresueltos.com>\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096\t\\<svg\t\t\tSVG Scalable Vector Graphics image\n!:mime\timage/svg+xml\n>>19\tsearch/4096\t\\<gnc-v2\t\tGnuCash file\n!:mime\tapplication/x-gnucash\n\n# Sitemap file\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096\t\\<urlset\t\tXML Sitemap document text\n!:mime\tapplication/xml-sitemap\n\n# xhtml\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<!doctype\\ html\txHTML document text\n!:mime\ttext/html\n0\tstring\t\t\\<?xml\\ version='\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<!doctype\\ html\txHTML document text\n!:mime\ttext/html\n0\tstring\t\t\\<?xml\\ version=\"\n>15\tstring\t\t>\\0\n>>19\tsearch/4096/cWbt\t\\<html\tbroken xHTML document text\n!:mime\ttext/html\n\n#------------------------------------------------------------------------------\n# sgml:  file(1) magic for Standard Generalized Markup Language\n# HyperText Markup Language (HTML) is an SGML document type,\n# from Daniel Quinlan (quinlan@yggdrasil.com)\n# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)\n0\tsearch/4096/cWbt\t\\<!doctype\\ html\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<head\t\t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<title\t\t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<html\t\t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<script \t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<style \t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<table\t\t\tHTML document text\n!:mime\ttext/html\n0\tsearch/4096/cwbt\t\\<a\\ href=\t\tHTML document text\n!:mime\ttext/html\n\n# Extensible markup language (XML), a subset of SGML\n# from Marc Prud'hommeaux (marc@apocalypse.org)\n0\tsearch/1/cwbt\t\\<?xml\t\t\tXML document text\n!:mime\tapplication/xml\n0\tstring\t\t\\<?xml\\ version\\ \"\tXML\n!:mime\tapplication/xml\n0\tstring\t\t\\<?xml\\ version=\"\tXML\n!:mime\tapplication/xml\n>15\tsearch/1\t>\\0\t\t\t%.3s document text\n>>23\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n>>24\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n0\tstring\t\t\\<?xml\\ version='\tXML\n!:mime\tapplication/xml\n>15\tsearch/1\t>\\0\t\t\t%.3s document text\n>>23\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n>>24\tsearch/1\t\\<xsl:stylesheet\t(XSL stylesheet)\n0\tsearch/1/wbt\t\\<?xml\t\t\tXML document text\n!:mime\tapplication/xml\n!:strength - 10\n0\tsearch/1/wbt\t\\<?XML\t\t\tbroken XML document text\n!:mime\tapplication/xml\n!:strength - 10\n\n\n# SGML, mostly from rph@sq\n0\tsearch/4096/cwbt\t\\<!doctype\t\texported SGML document text\n0\tsearch/4096/cwbt\t\\<!subdoc\t\texported SGML subdocument text\n0\tsearch/4096/cwbt\t\\<!--\t\t\texported SGML document text\n!:strength - 10\n\n# Web browser cookie files\n# (Mozilla, Galeon, Netscape 4, Konqueror..)\n# Ulf Harnhammar <ulfh@update.uu.se>\n0\tsearch/1\t#\\ HTTP\\ Cookie\\ File\tWeb browser cookie text\n0\tsearch/1\t#\\ Netscape\\ HTTP\\ Cookie\\ File\tNetscape cookie text\n0\tsearch/1\t#\\ KDE\\ Cookie\\ File\tKonqueror cookie text\n\n#------------------------------------------------------------------------\n# $File: sharc,v 1.6 2009/09/19 16:28:12 christos Exp $\n# file(1) magic for sharc files\n#\n# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by \n# FutureGroove Music (dsp@futuregroove.de)\n\n#------------------------------------------------------------------------\n#0\tstring\t\t\tDraw\t\tRiscOS Drawfile\n#0\tstring\t\t\tPACK\t\tRiscOS PackdDir archive\n\n#------------------------------------------------------------------------\n# SHARC DSP stuff (based on the FGM SHARC DSP SDK)\n\n#0\tstring\t\t\t=!\t\tAssembler source\n#0\tstring\t\t\tAnalog\t\tADi asm listing file\n0\tstring\t\t\t.SYSTEM\t\tSHARC architecture file\n0\tstring\t\t\t.system\t\tSHARC architecture file\n\n0\tleshort\t\t\t0x521C\t\tSHARC COFF binary\n>2\tleshort\t\t\t>1\t\t, %hd sections\n>>12\tlelong\t\t\t>0\t\t, not stripped\n\n#------------------------------------------------------------------------------\n# $File: sinclair,v 1.5 2009/09/19 16:28:12 christos Exp $\n# sinclair:  file(1) sinclair QL\n\n# additions to /etc/magic by Thomas M. Ott (ThMO)\n\n# Sinclair QL floppy disk formats (ThMO)\n0\tstring\t=QL5\t\tQL disk dump data,\n>3\tstring\t=A\t\t720 KB,\n>3\tstring\t=B\t\t1.44 MB,\n>3\tstring\t=C\t\t3.2 MB,\n>4\tstring\t>\\0\t\tlabel:%.10s\n\n# Sinclair QL OS dump (ThMO)\n# (NOTE: if `file' would be able to use indirect references in an endian format\n#\t differing from the natural host format, this could be written more\n#\t reliably and faster...)\n#\n# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more\n# than the first 8K of a file... #-(\n#\n#0\t\tbelong\t=0x30000\n#>49124\t\tbelong\t<47104\n#>>49128\t\tbelong\t<47104\n#>>>49132\tbelong\t<47104\n#>>>>49136\tbelong\t<47104\tQL OS dump data,\n#>>>>>49148\tstring\t>\\0\ttype %.3s,\n#>>>>>49142\tstring\t>\\0\tversion %.4s\n\n# Sinclair QL firmware executables (ThMO)\n0\tstring\tNqNqNq`\\004\tQL firmware executable (BCPL)\n\n# Sinclair QL libraries (was ThMO)\n0\tbeshort\t0xFB01\t\tQDOS object\n>2\tpstring\tx\t\t'%s'\n\n# Sinclair QL executables (was ThMO)\n4\tbelong\t0x4AFB\t\tQDOS executable\n>9\tpstring\tx\t\t'%s'\n\n# Sinclair QL ROM (ThMO)\n0\tbelong\t=0x4AFB0001\tQL plugin-ROM data,\n>9\tpstring\t=\\0\t\tun-named\n>9\tpstring\t>\\0\t\tnamed: %s\n# Type: SiSU Markup Language\n# URL:  http://www.sisudoc.org/\n# From: Ralph Amissah <ralph.amissah@gmail.com>\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t]+insert\tSiSU text insert\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%[\\ \\t]+SiSU[\\ \\t]+master\tSiSU text master\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t]+text\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%?[\\ \\t]*SiSU[\\ \\t][0-9.]+\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n0\tregex\t\\^%*[\\ \\t]*sisu-[0-9.]+\t\tSiSU text\n>5\tregex\t[0-9.]+\t\t\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: sketch,v 1.4 2009/09/19 16:28:12 christos Exp $\n# Sketch Drawings: http://sketch.sourceforge.net/ \n# From: Edwin Mons <e@ik.nu>\n0\tsearch/1\t##Sketch\tSketch document text\n\n#-----------------------------------------------\n# $File: smalltalk,v 1.5 2009/09/19 16:28:12 christos Exp $\n# GNU Smalltalk image, starting at version 1.6.2\n# From: catull_us@yahoo.com\n#\n0\tstring\tGSTIm\\0\\0\tGNU SmallTalk\n# little-endian\n>7\tbyte&1\t=0\t\tLE image version\n>>10\tbyte\tx\t\t%d.\n>>9\tbyte\tx\t\t\\b%d.\n>>8\tbyte\tx\t\t\\b%d\n#>>12\tlelong\tx\t\t, data: %ld\n#>>16\tlelong\tx\t\t, table: %ld\n#>>20\tlelong\tx\t\t, memory: %ld\n# big-endian\n>7\tbyte&1\t=1\t\tBE image version\n>>8\tbyte\tx\t\t%d.\n>>9\tbyte\tx\t\t\\b%d.\n>>10\tbyte\tx\t\t\\b%d\n#>>12\tbelong\tx\t\t, data: %ld\n#>>16\tbelong\tx\t\t, table: %ld\n#>>20\tbelong\tx\t\t, memory: %ld\n\n\n\n#------------------------------------------------------------------------------\n# $File: sniffer,v 1.14 2009/09/19 16:28:12 christos Exp $\n# sniffer:  file(1) magic for packet capture files\n#\n# From: guy@alum.mit.edu (Guy Harris)\n#\n\n#\n# Microsoft Network Monitor 1.x capture files.\n#\n0\tstring\t\tRTSS\t\tNetMon capture file\n>5\tbyte\t\tx\t\t- version %d\n>4\tbyte\t\tx\t\t\\b.%d\n>6\tleshort\t\t0\t\t(Unknown)\n>6\tleshort\t\t1\t\t(Ethernet)\n>6\tleshort\t\t2\t\t(Token Ring)\n>6\tleshort\t\t3\t\t(FDDI)\n>6\tleshort\t\t4\t\t(ATM)\n\n#\n# Microsoft Network Monitor 2.x capture files.\n#\n0\tstring\t\tGMBU\t\tNetMon capture file\n>5\tbyte\t\tx\t\t- version %d\n>4\tbyte\t\tx\t\t\\b.%d\n>6\tleshort\t\t0\t\t(Unknown)\n>6\tleshort\t\t1\t\t(Ethernet)\n>6\tleshort\t\t2\t\t(Token Ring)\n>6\tleshort\t\t3\t\t(FDDI)\n>6\tleshort\t\t4\t\t(ATM)\n\n#\n# Network General Sniffer capture files.\n# Sorry, make that \"Network Associates Sniffer capture files.\"\n# Sorry, make that \"Network General old DOS Sniffer capture files.\"\n#\n0\tstring\t\tTRSNIFF\\ data\\ \\ \\ \\ \\032\tSniffer capture file\n>33\tbyte\t\t2\t\t(compressed)\n>23\tleshort\t\tx\t\t- version %d\n>25\tleshort\t\tx\t\t\\b.%d\n>32\tbyte\t\t0\t\t(Token Ring)\n>32\tbyte\t\t1\t\t(Ethernet)\n>32\tbyte\t\t2\t\t(ARCNET)\n>32\tbyte\t\t3\t\t(StarLAN)\n>32\tbyte\t\t4\t\t(PC Network broadband)\n>32\tbyte\t\t5\t\t(LocalTalk)\n>32\tbyte\t\t6\t\t(Znet)\n>32\tbyte\t\t7\t\t(Internetwork Analyzer)\n>32\tbyte\t\t9\t\t(FDDI)\n>32\tbyte\t\t10\t\t(ATM)\n\n#\n# Cinco Networks NetXRay capture files.\n# Sorry, make that \"Network General Sniffer Basic capture files.\"\n# Sorry, make that \"Network Associates Sniffer Basic capture files.\"\n# Sorry, make that \"Network Associates Sniffer Basic, and Windows\n# Sniffer Pro\", capture files.\"\n# Sorry, make that \"Network General Sniffer capture files.\"\n#\n0\tstring\t\tXCP\\0\t\tNetXRay capture file\n>4\tstring\t\t>\\0\t\t- version %s\n>44\tleshort\t\t0\t\t(Ethernet)\n>44\tleshort\t\t1\t\t(Token Ring)\n>44\tleshort\t\t2\t\t(FDDI)\n>44\tleshort\t\t3\t\t(WAN)\n>44\tleshort\t\t8\t\t(ATM)\n>44\tleshort\t\t9\t\t(802.11)\n\n#\n# \"libpcap\" capture files.\n# (We call them \"tcpdump capture file(s)\" for now, as \"tcpdump\" is\n# the main program that uses that format, but there are other programs\n# that use \"libpcap\", or that use the same capture file format.)\n#\n0\tubelong\t\t0xa1b2c3d4\ttcpdump capture file (big-endian)\n>4\tbeshort\t\tx\t\t- version %d\n>6\tbeshort\t\tx\t\t\\b.%d\n>20\tbelong\t\t0\t\t(No link-layer encapsulation\n>20\tbelong\t\t1\t\t(Ethernet\n>20\tbelong\t\t2\t\t(3Mb Ethernet\n>20\tbelong\t\t3\t\t(AX.25\n>20\tbelong\t\t4\t\t(ProNET\n>20\tbelong\t\t5\t\t(CHAOS\n>20\tbelong\t\t6\t\t(Token Ring\n>20\tbelong\t\t7\t\t(BSD ARCNET\n>20\tbelong\t\t8\t\t(SLIP\n>20\tbelong\t\t9\t\t(PPP\n>20\tbelong\t\t10\t\t(FDDI\n>20\tbelong\t\t11\t\t(RFC 1483 ATM\n>20\tbelong\t\t12\t\t(raw IP\n>20\tbelong\t\t13\t\t(BSD/OS SLIP\n>20\tbelong\t\t14\t\t(BSD/OS PPP\n>20\tbelong\t\t19\t\t(Linux ATM Classical IP\n>20\tbelong\t\t50\t\t(PPP or Cisco HDLC\n>20\tbelong\t\t51\t\t(PPP-over-Ethernet\n>20\tbelong\t\t99\t\t(Symantec Enterprise Firewall\n>20\tbelong\t\t100\t\t(RFC 1483 ATM\n>20\tbelong\t\t101\t\t(raw IP\n>20\tbelong\t\t102\t\t(BSD/OS SLIP\n>20\tbelong\t\t103\t\t(BSD/OS PPP\n>20\tbelong\t\t104\t\t(BSD/OS Cisco HDLC\n>20\tbelong\t\t105\t\t(802.11\n>20\tbelong\t\t106\t\t(Linux Classical IP over ATM\n>20\tbelong\t\t107\t\t(Frame Relay\n>20\tbelong\t\t108\t\t(OpenBSD loopback\n>20\tbelong\t\t109\t\t(OpenBSD IPsec encrypted\n>20\tbelong\t\t112\t\t(Cisco HDLC\n>20\tbelong\t\t113\t\t(Linux \"cooked\"\n>20\tbelong\t\t114\t\t(LocalTalk\n>20\tbelong\t\t117\t\t(OpenBSD PFLOG\n>20\tbelong\t\t119\t\t(802.11 with Prism header\n>20\tbelong\t\t122\t\t(RFC 2625 IP over Fibre Channel\n>20\tbelong\t\t123\t\t(SunATM\n>20\tbelong\t\t127\t\t(802.11 with radiotap header\n>20\tbelong\t\t129\t\t(Linux ARCNET\n>20\tbelong\t\t138\t\t(Apple IP over IEEE 1394\n>20\tbelong\t\t140\t\t(MTP2\n>20\tbelong\t\t141\t\t(MTP3\n>20\tbelong\t\t143\t\t(DOCSIS\n>20\tbelong\t\t144\t\t(IrDA\n>20\tbelong\t\t147\t\t(Private use 0\n>20\tbelong\t\t148\t\t(Private use 1\n>20\tbelong\t\t149\t\t(Private use 2\n>20\tbelong\t\t150\t\t(Private use 3\n>20\tbelong\t\t151\t\t(Private use 4\n>20\tbelong\t\t152\t\t(Private use 5\n>20\tbelong\t\t153\t\t(Private use 6\n>20\tbelong\t\t154\t\t(Private use 7\n>20\tbelong\t\t155\t\t(Private use 8\n>20\tbelong\t\t156\t\t(Private use 9\n>20\tbelong\t\t157\t\t(Private use 10\n>20\tbelong\t\t158\t\t(Private use 11\n>20\tbelong\t\t159\t\t(Private use 12\n>20\tbelong\t\t160\t\t(Private use 13\n>20\tbelong\t\t161\t\t(Private use 14\n>20\tbelong\t\t162\t\t(Private use 15\n>20\tbelong\t\t163\t\t(802.11 with AVS header\n>16\tbelong\t\tx\t\t\\b, capture length %d)\n0\tulelong\t\t0xa1b2c3d4\ttcpdump capture file (little-endian)\n>4\tleshort\t\tx\t\t- version %d\n>6\tleshort\t\tx\t\t\\b.%d\n>20\tlelong\t\t0\t\t(No link-layer encapsulation\n>20\tlelong\t\t1\t\t(Ethernet\n>20\tlelong\t\t2\t\t(3Mb Ethernet\n>20\tlelong\t\t3\t\t(AX.25\n>20\tlelong\t\t4\t\t(ProNET\n>20\tlelong\t\t5\t\t(CHAOS\n>20\tlelong\t\t6\t\t(Token Ring\n>20\tlelong\t\t7\t\t(ARCNET\n>20\tlelong\t\t8\t\t(SLIP\n>20\tlelong\t\t9\t\t(PPP\n>20\tlelong\t\t10\t\t(FDDI\n>20\tlelong\t\t11\t\t(RFC 1483 ATM\n>20\tlelong\t\t12\t\t(raw IP\n>20\tlelong\t\t13\t\t(BSD/OS SLIP\n>20\tlelong\t\t14\t\t(BSD/OS PPP\n>20\tlelong\t\t19\t\t(Linux ATM Classical IP\n>20\tlelong\t\t50\t\t(PPP or Cisco HDLC\n>20\tlelong\t\t51\t\t(PPP-over-Ethernet\n>20\tlelong\t\t99\t\t(Symantec Enterprise Firewall\n>20\tlelong\t\t100\t\t(RFC 1483 ATM\n>20\tlelong\t\t101\t\t(raw IP\n>20\tlelong\t\t102\t\t(BSD/OS SLIP\n>20\tlelong\t\t103\t\t(BSD/OS PPP\n>20\tlelong\t\t104\t\t(BSD/OS Cisco HDLC\n>20\tlelong\t\t105\t\t(802.11\n>20\tlelong\t\t106\t\t(Linux Classical IP over ATM\n>20\tlelong\t\t107\t\t(Frame Relay\n>20\tlelong\t\t108\t\t(OpenBSD loopback\n>20\tlelong\t\t109\t\t(OpenBSD IPsec encrypted\n>20\tlelong\t\t112\t\t(Cisco HDLC\n>20\tlelong\t\t113\t\t(Linux \"cooked\"\n>20\tlelong\t\t114\t\t(LocalTalk\n>20\tlelong\t\t117\t\t(OpenBSD PFLOG\n>20\tlelong\t\t119\t\t(802.11 with Prism header\n>20\tlelong\t\t122\t\t(RFC 2625 IP over Fibre Channel\n>20\tlelong\t\t123\t\t(SunATM\n>20\tlelong\t\t127\t\t(802.11 with radiotap header\n>20\tlelong\t\t129\t\t(Linux ARCNET\n>20\tlelong\t\t138\t\t(Apple IP over IEEE 1394\n>20\tlelong\t\t140\t\t(MTP2\n>20\tlelong\t\t141\t\t(MTP3\n>20\tlelong\t\t143\t\t(DOCSIS\n>20\tlelong\t\t144\t\t(IrDA\n>20\tlelong\t\t147\t\t(Private use 0\n>20\tlelong\t\t148\t\t(Private use 1\n>20\tlelong\t\t149\t\t(Private use 2\n>20\tlelong\t\t150\t\t(Private use 3\n>20\tlelong\t\t151\t\t(Private use 4\n>20\tlelong\t\t152\t\t(Private use 5\n>20\tlelong\t\t153\t\t(Private use 6\n>20\tlelong\t\t154\t\t(Private use 7\n>20\tlelong\t\t155\t\t(Private use 8\n>20\tlelong\t\t156\t\t(Private use 9\n>20\tlelong\t\t157\t\t(Private use 10\n>20\tlelong\t\t158\t\t(Private use 11\n>20\tlelong\t\t159\t\t(Private use 12\n>20\tlelong\t\t160\t\t(Private use 13\n>20\tlelong\t\t161\t\t(Private use 14\n>20\tlelong\t\t162\t\t(Private use 15\n>20\tlelong\t\t163\t\t(802.11 with AVS header\n>16\tlelong\t\tx\t\t\\b, capture length %d)\n\n#\n# \"libpcap\"-with-Alexey-Kuznetsov's-patches capture files.\n# (We call them \"tcpdump capture file(s)\" for now, as \"tcpdump\" is\n# the main program that uses that format, but there are other programs\n# that use \"libpcap\", or that use the same capture file format.)\n#\n0\tubelong\t\t0xa1b2cd34\textended tcpdump capture file (big-endian)\n>4\tbeshort\t\tx\t\t- version %d\n>6\tbeshort\t\tx\t\t\\b.%d\n>20\tbelong\t\t0\t\t(No link-layer encapsulation\n>20\tbelong\t\t1\t\t(Ethernet\n>20\tbelong\t\t2\t\t(3Mb Ethernet\n>20\tbelong\t\t3\t\t(AX.25\n>20\tbelong\t\t4\t\t(ProNET\n>20\tbelong\t\t5\t\t(CHAOS\n>20\tbelong\t\t6\t\t(Token Ring\n>20\tbelong\t\t7\t\t(ARCNET\n>20\tbelong\t\t8\t\t(SLIP\n>20\tbelong\t\t9\t\t(PPP\n>20\tbelong\t\t10\t\t(FDDI\n>20\tbelong\t\t11\t\t(RFC 1483 ATM\n>20\tbelong\t\t12\t\t(raw IP\n>20\tbelong\t\t13\t\t(BSD/OS SLIP\n>20\tbelong\t\t14\t\t(BSD/OS PPP\n>16\tbelong\t\tx\t\t\\b, capture length %d)\n0\tulelong\t\t0xa1b2cd34\textended tcpdump capture file (little-endian)\n>4\tleshort\t\tx\t\t- version %d\n>6\tleshort\t\tx\t\t\\b.%d\n>20\tlelong\t\t0\t\t(No link-layer encapsulation\n>20\tlelong\t\t1\t\t(Ethernet\n>20\tlelong\t\t2\t\t(3Mb Ethernet\n>20\tlelong\t\t3\t\t(AX.25\n>20\tlelong\t\t4\t\t(ProNET\n>20\tlelong\t\t5\t\t(CHAOS\n>20\tlelong\t\t6\t\t(Token Ring\n>20\tlelong\t\t7\t\t(ARCNET\n>20\tlelong\t\t8\t\t(SLIP\n>20\tlelong\t\t9\t\t(PPP\n>20\tlelong\t\t10\t\t(FDDI\n>20\tlelong\t\t11\t\t(RFC 1483 ATM\n>20\tlelong\t\t12\t\t(raw IP\n>20\tlelong\t\t13\t\t(BSD/OS SLIP\n>20\tlelong\t\t14\t\t(BSD/OS PPP\n>16\tlelong\t\tx\t\t\\b, capture length %d)\n\n#\n# AIX \"iptrace\" capture files.\n#\n0\tstring\t\tiptrace\\ 1.0\t\"iptrace\" capture file\n0\tstring\t\tiptrace\\ 2.0\t\"iptrace\" capture file\n\n#\n# Novell LANalyzer capture files.\n#\n0\tleshort\t\t0x1001\t\tLANalyzer capture file\n0\tleshort\t\t0x1007\t\tLANalyzer capture file\n\n#\n# HP-UX \"nettl\" capture files.\n#\n0\tstring\t\t\\x54\\x52\\x00\\x64\\x00\t\"nettl\" capture file\n\n#\n# RADCOM WAN/LAN Analyzer capture files.\n#\n0\tstring\t\t\\x42\\xd2\\x00\\x34\\x12\\x66\\x22\\x88\tRADCOM WAN/LAN Analyzer capture file\n\n#\n# NetStumbler log files.  Not really packets, per se, but about as\n# close as you can get.  These are log files from NetStumbler, a\n# Windows program, that scans for 802.11b networks.\n#\n0\tstring\t\tNetS\t\tNetStumbler log file\n>8\tlelong\t\tx\t\t\\b, %d stations found\n\n#\n# EtherPeek/AiroPeek \"version 9\" capture files.\n#\n0\tstring\t\t\\177ver\t\tEtherPeek/AiroPeek capture file\n\n#\n# Visual Networks traffic capture files.\n#\n0\tstring\t\t\\x05VNF\t\tVisual Networks traffic capture file\n\n#\n# Network Instruments Observer capture files.\n#\n0\tstring\t\tObserverPktBuffe\tNetwork Instruments Observer capture file\n\n#\n# Files from Accellent Group's 5View products.\n#\n0\tstring\t\t\\xaa\\xaa\\xaa\\xaa\t5View capture file\n\n#------------------------------------------------------------------------------\n# $File: softquad,v 1.13 2009/09/19 16:28:12 christos Exp $\n# softquad:  file(1) magic for SoftQuad Publishing Software\n#\n# Author/Editor and RulesBuilder\n#\n# XXX - byte order?\n#\n0\tstring\t\t\\<!SQ\\ DTD>\tCompiled SGML rules file\n>9\tstring\t\t>\\0\t\t Type %s\n0\tstring\t\t\\<!SQ\\ A/E>\tA/E SGML Document binary\n>9\tstring\t\t>\\0\t\t Type %s\n0\tstring\t\t\\<!SQ\\ STS>\tA/E SGML binary styles file\n>9\tstring\t\t>\\0\t\t Type %s\n0\tshort\t\t0xc0de\t\tCompiled PSI (v1) data\n0\tshort\t\t0xc0da\t\tCompiled PSI (v2) data\n>3\tstring\t\t>\\0\t\t(%s)\n# Binary sqtroff font/desc files...\n0\tshort\t\t0125252\t\tSoftQuad DESC or font file binary\n>2\tshort\t\t>0\t\t- version %d\n# Bitmaps...\n0\tsearch/1\tSQ\\ BITMAP1\tSoftQuad Raster Format text\n#0\tstring\t\tSQ\\ BITMAP2\tSoftQuad Raster Format data\n# sqtroff intermediate language (replacement for ditroff int. lang.)\n0\tstring\t\tX\\ \t\tSoftQuad troff Context intermediate\n>2\tstring\t\t495\t\tfor AT&T 495 laser printer\n>2\tstring\t\thp\t\tfor Hewlett-Packard LaserJet\n>2\tstring\t\timpr\t\tfor IMAGEN imPRESS\n>2\tstring\t\tps\t\tfor PostScript\n\n# From: Michael Piefel <piefel@debian.org>\n# sqtroff intermediate language (replacement for ditroff int. lang.)\n0\tstring\t\tX\\ 495\t\tSoftQuad troff Context intermediate for AT&T 495 laser printer\n0\tstring\t\tX\\ hp\t\tSoftQuad troff Context intermediate for HP LaserJet\n0\tstring\t\tX\\ impr\t\tSoftQuad troff Context intermediate for IMAGEN imPRESS\n0\tstring\t\tX\\ ps\t\tSoftQuad troff Context intermediate for PostScript\n\n#------------------------------------------------------------------------------\n# $File: spec,v 1.4 2009/09/19 16:28:12 christos Exp $\n# spec:  file(1) magic for SPEC raw results (*.raw, *.rsf)\n#\n# Cloyce D. Spradling <cloyce@headgear.org>\n\n0\tstring\tspec\t\t\tSPEC\n>4\tstring\t.cpu\t\t\tCPU\n>>8\tstring\t<:\t\t\t\\b%.4s\n>>12\tstring\t.\t\t\traw result text\n\n17\tstring\tversion=SPECjbb\t\tSPECjbb\n>32\tstring\t<:\t\t\t\\b%.4s\n>>37\tstring\t<:\t\t\tv%.4s raw result text\n\n0\tstring\tBEGIN\\040SPECWEB\tSPECweb\n>13\tstring\t<:\t\t\t\\b%.2s\n>>15\tstring\t_SSL\t\t\t\\b_SSL\n>>>20\tstring\t<:\t\t\tv%.4s raw result text\n>>16\tstring\t<:\t\t\tv%.4s raw result text\n\n#------------------------------------------------------------------------------\n# $File: spectrum,v 1.6 2009/09/19 16:28:12 christos Exp $\n# spectrum:  file(1) magic for Spectrum emulator files.\n#\n# John Elliott <jce@seasip.demon.co.uk>\n\n#\n# Spectrum +3DOS header\n#\n0       string          PLUS3DOS\\032    Spectrum +3 data\n>15     byte            0               - BASIC program\n>15     byte            1               - number array\n>15     byte            2               - character array\n>15     byte            3               - memory block\n>>16    belong          0x001B0040      (screen)\n>15     byte            4               - Tasword document\n>15     string          TAPEFILE        - ZXT tapefile\n#\n# Tape file. This assumes the .TAP starts with a Spectrum-format header,\n# which nearly all will.\n#\n# Update: Sanity-check string contents to be printable.\n#  -Adam Buchbinder <adam.buchbinder@gmail.com>\n#\n0       string          \\023\\000\\000\n>4      string          >\\0\n>>4     string          <\\177           Spectrum .TAP data \"%-10.10s\"\n>>>3    byte            0               - BASIC program\n>>>3    byte            1               - number array\n>>>3    byte            2               - character array\n>>>3    byte            3               - memory block\n>>>>14  belong          0x001B0040      (screen)\n\n# The following three blocks are from pak21-spectrum@srcf.ucam.org\n# TZX tape images\n0      string          ZXTape!\\x1a     Spectrum .TZX data\n>8     byte            x               version %d\n>9     byte            x               \\b.%d\n\n# RZX input recording files\n0      string          RZX!            Spectrum .RZX data\n>4     byte            x               version %d\n>5     byte            x               \\b.%d\n\n# Floppy disk images\n0      string          MV\\ -\\ CPCEMU\\ Disk-Fil Amstrad/Spectrum .DSK data\n0      string          MV\\ -\\ CPC\\ format\\ Dis Amstrad/Spectrum DU54 .DSK data\n0      string          EXTENDED\\ CPC\\ DSK\\ Fil Amstrad/Spectrum Extended .DSK data\n0      string          SINCLAIR        Spectrum .SCL Betadisk image\n\n# Hard disk images\n0      string          RS-IDE\\x1a      Spectrum .HDF hard disk image\n>7     byte            x               \\b, version 0x%02x\n\n#------------------------------------------------------------------------------\n# $File: sql,v 1.6 2009/09/19 16:28:12 christos Exp $\n# sql:  file(1) magic for SQL files\n#\n# From: \"Marty Leisner\" <mleisner@eng.mc.xerox.com>\n# Recognize some MySQL files.\n#\n0\tbeshort\t\t\t0xfe01\t\tMySQL table definition file\n>2\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0300\tMySQL MISAM index file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0700\tMySQL MISAM compressed data file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0500\tMySQL ISAM index file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tbelong&0xffffff00\t0xfefe0600\tMySQL ISAM compressed data file\n>3\tbyte\t\t\tx\t\tVersion %d\n0\tstring\t\t \t\\376bin\t\tMySQL replication log\n\n#------------------------------------------------------------------------------\n# iRiver H Series database file \n# From Ken Guest <ken@linux.ie>\n# As observed from iRivNavi.iDB and unencoded firmware\n#\n0   string\t\tiRivDB\tiRiver Database file\n>11  string\t>\\0\tVersion %s\n>39  string\t\tiHP-100\t[H Series]\n\n#------------------------------------------------------------------------------\n# SQLite database files\n# Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg\n#\n# Version 1 used GDBM internally; its files cannot be distinguished\n# from other GDBM files.\n#\n# Version 2 used this format:\n0\tstring\t**\\ This\\ file\\ contains\\ an\\ SQLite  SQLite 2.x database\n\n# Version 3 of SQLite allows applications to embed their own \"user version\"\n# number in the database.  Detect this and distinguish those files.\n\n0   string  SQLite\\ format\\ 3\n>60 string  _MTN               Monotone source repository\n>60 belong  !0                 SQLite 3.x database, user version %u\n>60 belong  0                  SQLite 3.x database\n# Type:\tOpenSSH key files\n# From:\tNicolas Collignon <tsointsoin@gmail.com>\n\n0\tstring\tSSH\\ PRIVATE\\ KEY\tOpenSSH RSA1 private key,\n>28\tstring\t>\\0\t\t\tversion %s\n\n0\tstring\tssh-dss\\\t\tOpenSSH DSA public key\n0\tstring\tssh-rsa\\\t\tOpenSSH RSA public key\n# Type: OpenSSL certificates/key files\n# From: Nicolas Collignon <tsointsoin@gmail.com>\n\n0\tstring\t-----BEGIN\\ CERTIFICATE-----\tPEM certificate\n0\tstring\t-----BEGIN\\ CERTIFICATE\\ REQ\tPEM certificate request\n0\tstring\t-----BEGIN\\ RSA\\ PRIVATE\tPEM RSA private key\n0\tstring\t-----BEGIN\\ DSA\\ PRIVATE\tPEM DSA private key\n\n#------------------------------------------------------------------------------\n# $File: sun,v 1.20 2009/09/19 16:28:12 christos Exp $\n# sun:  file(1) magic for Sun machines\n#\n# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x\n# releases.  (5.x uses ELF.)\n#\n0\tbelong&077777777\t0600413\t\tsparc demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0600410\t\tsparc pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0600407\t\tsparc\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400413\t\tmc68020 demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400410\t\tmc68020 pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0400407\t\tmc68020\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200413\t\tmc68010 demand paged\n>0\tbyte\t\t&0x80\n>>20\tbelong\t\t<4096\t\tshared library\n>>20\tbelong\t\t=4096\t\tdynamically linked executable\n>>20\tbelong\t\t>4096\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200410\t\tmc68010 pure\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n0\tbelong&077777777\t0200407\t\tmc68010\n>0\tbyte\t\t&0x80\t\tdynamically linked executable\n>0\tbyte\t\t^0x80\t\texecutable\n>16\tbelong\t\t>0\t\tnot stripped\n\n# reworked these to avoid anything beginning with zero becoming \"old sun-2\"\n0\tbelong\t\t0407\t\told sun-2 executable\n>16\tbelong\t\t>0\t\tnot stripped\n0\tbelong\t\t0410\t\told sun-2 pure executable\n>16\tbelong\t\t>0\t\tnot stripped\n0\tbelong\t\t0413\t\told sun-2 demand paged executable\n>16\tbelong\t\t>0\t\tnot stripped\n\n#\n# Core files.  \"SPARC 4.x BCP\" means \"core file from a SunOS 4.x SPARC\n# binary executed in compatibility mode under SunOS 5.x\".\n#\n0\tbelong\t\t0x080456\tSunOS core file\n>4\tbelong\t\t432\t\t(SPARC)\n>>132\tstring\t\t>\\0\t\tfrom '%s'\n>>116\tbelong\t\t=3\t\t(quit)\n>>116\tbelong\t\t=4\t\t(illegal instruction)\n>>116\tbelong\t\t=5\t\t(trace trap)\n>>116\tbelong\t\t=6\t\t(abort)\n>>116\tbelong\t\t=7\t\t(emulator trap)\n>>116\tbelong\t\t=8\t\t(arithmetic exception)\n>>116\tbelong\t\t=9\t\t(kill)\n>>116\tbelong\t\t=10\t\t(bus error)\n>>116\tbelong\t\t=11\t\t(segmentation violation)\n>>116\tbelong\t\t=12\t\t(bad argument to system call)\n>>116\tbelong\t\t=29\t\t(resource lost)\n>>120\tbelong\t\tx\t\t(T=%dK,\n>>124\tbelong\t\tx\t\tD=%dK,\n>>128\tbelong\t\tx\t\tS=%dK)\n>4\tbelong\t\t826\t\t(68K)\n>>128\tstring\t\t>\\0\t\tfrom '%s'\n>4\tbelong\t\t456\t\t(SPARC 4.x BCP)\n>>152\tstring\t\t>\\0\t\tfrom '%s'\n# Sun SunPC\n0\tlong\t\t0xfa33c08e\tSunPC 4.0 Hard Disk\n0\tstring\t\t#SUNPC_CONFIG\tSunPC 4.0 Properties Values\n# Sun snoop (see RFC 1761, which describes the capture file format).\n#\n0\tstring\t\tsnoop\t\tSnoop capture file\n>8\tbelong\t\t>0\t\t- version %ld\n>12\tbelong\t\t0\t\t(IEEE 802.3)\n>12\tbelong\t\t1\t\t(IEEE 802.4)\n>12\tbelong\t\t2\t\t(IEEE 802.5)\n>12\tbelong\t\t3\t\t(IEEE 802.6)\n>12\tbelong\t\t4\t\t(Ethernet)\n>12\tbelong\t\t5\t\t(HDLC)\n>12\tbelong\t\t6\t\t(Character synchronous)\n>12\tbelong\t\t7\t\t(IBM channel-to-channel adapter)\n>12\tbelong\t\t8\t\t(FDDI)\n>12\tbelong\t\t9\t\t(Unknown)\n\n# Microsoft ICM color profile\n36\tstring\t\tacspMSFT\tMicrosoft ICM Color Profile\n# Sun KCMS\n36\tstring\t\tacsp\t\tKodak Color Management System, ICC Profile\n\n#---------------------------------------------------------------------------\n# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a\n# lead Sun/Cobalt developer) who agrees that they are good and worthy of\n# inclusion.\n\n# Boot ROM images for Sun/Cobalt Linux server appliances\n0       string  Cobalt\\ Networks\\ Inc.\\nFirmware\\ v     Paged COBALT boot rom\n>38     string x        V%.4s\n\n# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code\n# at the very end where file(1) can't get it.\n0       string CRfs     COBALT boot rom data (Flat boot rom or file system)\n\n\n\n#------------------------------------------------------------------------\n# $File: sysex,v 1.6 2009/09/19 16:28:12 christos Exp $\n# sysex: file(1) magic for MIDI sysex files\n#\n# \n0\tbyte\t\t\t0xF0\t\tSysEx File -\n\n# North American Group\n>1\tbyte\t\t\t0x01\t\tSequential\n>1\tbyte\t\t\t0x02\t\tIDP\n>1\tbyte\t\t\t0x03\t\tOctavePlateau\n>1\tbyte\t\t\t0x04\t\tMoog\n>1\tbyte\t\t\t0x05\t\tPassport\n>1\tbyte\t\t\t0x06\t\tLexicon\n>1\tbyte\t\t\t0x07\t\tKurzweil/Future Retro\n>>3\tbyte\t\t\t0x77\t\t777\n>>4\tbyte\t\t\t0x00\t\tBank\n>>4\tbyte\t\t\t0x01\t\tSong\n>>5\tbyte\t\t\t0x0f\t\t16\n>>5\tbyte\t\t\t0x0e\t\t15\n>>5\tbyte\t\t\t0x0d\t\t14\n>>5\tbyte\t\t\t0x0c\t\t13\n>>5\tbyte\t\t\t0x0b\t\t12\n>>5\tbyte\t\t\t0x0a\t\t11\n>>5\tbyte\t\t\t0x09\t\t10\n>>5\tbyte\t\t\t0x08\t\t9\n>>5\tbyte\t\t\t0x07\t\t8\n>>5\tbyte\t\t\t0x06\t\t7\n>>5\tbyte\t\t\t0x05\t\t6\n>>5\tbyte\t\t\t0x04\t\t5\n>>5\tbyte\t\t\t0x03\t\t4\n>>5\tbyte\t\t\t0x02\t\t3\n>>5\tbyte\t\t\t0x01\t\t2\n>>5\tbyte\t\t\t0x00\t\t1\n>>5\tbyte\t\t\t0x10\t\t(ALL)\n>>2\tbyte\t\t\tx\t\t\t\\b, Channel %d\n>1\tbyte\t\t\t0x08\t\tFender\n>1\tbyte\t\t\t0x09\t\tGulbransen\n>1\tbyte\t\t\t0x0a\t\tAKG\n>1\tbyte\t\t\t0x0b\t\tVoyce\n>1\tbyte\t\t\t0x0c\t\tWaveframe\n>1\tbyte\t\t\t0x0d\t\tADA\n>1\tbyte\t\t\t0x0e\t\tGarfield\n>1\tbyte\t\t\t0x0f\t\tEnsoniq\n>1\tbyte\t\t\t0x10\t\tOberheim\n>>2\tbyte\t\t\t0x06\t\tMatrix 6 series\n>>3\tbyte\t\t\t0x0A\t\tDump (All)\n>>3\tbyte\t\t\t0x01\t\tDump (Bank)\n>>4 belong\t\t\t0x0002040E\t\tMatrix 1000\n>>>11 byte\t\t\t<2\t\t\tUser bank %d\n>>>11 byte\t\t\t>1\t\t\tPreset bank %d\n>1\tbyte\t\t\t0x11\t\tApple\n>1\tbyte\t\t\t0x12\t\tGreyMatter\n>1\tbyte\t\t\t0x14\t\tPalmTree\n>1\tbyte\t\t\t0x15\t\tJLCooper\n>1\tbyte\t\t\t0x16\t\tLowrey\n>1\tbyte\t\t\t0x17\t\tAdamsSmith\n>1\tbyte\t\t\t0x18\t\tE-mu\n>1\tbyte\t\t\t0x19\t\tHarmony\n>1\tbyte\t\t\t0x1a\t\tART\n>1\tbyte\t\t\t0x1b\t\tBaldwin\n>1\tbyte\t\t\t0x1c\t\tEventide\n>1\tbyte\t\t\t0x1d\t\tInventronics\n>1\tbyte\t\t\t0x1f\t\tClarity\n\n# European Group\n>1\tbyte\t\t\t0x21\t\tSIEL\n>1\tbyte\t\t\t0x22\t\tSynthaxe\n>1\tbyte\t\t\t0x24\t\tHohner\n>1\tbyte\t\t\t0x25\t\tTwister\n>1\tbyte\t\t\t0x26\t\tSolton\n>1\tbyte\t\t\t0x27\t\tJellinghaus\n>1\tbyte\t\t\t0x28\t\tSouthworth\n>1\tbyte\t\t\t0x29\t\tPPG\n>1\tbyte\t\t\t0x2a\t\tJEN\n>1\tbyte\t\t\t0x2b\t\tSSL\n>1\tbyte\t\t\t0x2c\t\tAudioVertrieb\n\n>1\tbyte\t\t\t0x2f\t\tELKA\n>>3\tbyte\t\t\t0x09\t\tEK-44\n\n>1\tbyte\t\t\t0x30\t\tDynacord\n>1\tbyte\t\t\t0x31\t\tJomox\n>1\tbyte\t\t\t0x33\t\tClavia\n>1\tbyte\t\t\t0x39\t\tSoundcraft\n# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs\n>1\tbyte\t\t\t0x3e\t\tWaldorf\n>>2\tbyte\t\t\t0x00\t\tmicroWave\n>>2\tbyte\t\t\t0x0E\t\tmicrowave2 / XT\n>>2\tbyte\t\t\t0x0F\t\tQ / Q+\n>>3\tbyte\t\t\t=0\t\t\t(default id)\n>>3 byte\t\t\t>0\t\t\t(\n>>>3 byte\t\t\t<0x7F\t\t\\bdevice %d)\n>>>3 byte\t\t\t=0x7F\t\t\\bbroadcast id)\n>>3\tbyte\t\t\t0x7f\t\tMicrowave I\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Inquiry)\n>>>4\tbyte\t\t\t0x70\t\tBOOT (Sound Reserved)\n>>>4\tbyte\t\t\t0x01\t\tMULR (Multi Request)\n>>>4\tbyte\t\t\t0x11\t\tMULD (Multi Dump)\n>>>4\tbyte\t\t\t0x21\t\tMULP (Multi Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tMULQ (Multi Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Multi Reserved)\n>>>4\tbyte\t\t\t0x02\t\tDRMR (Drum Map Request)\n>>>4\tbyte\t\t\t0x12\t\tDRMD (Drum Map Dump)\n>>>4\tbyte\t\t\t0x22\t\tDRMP (Drum Map Parameter Change)\n>>>4\tbyte\t\t\t0x32\t\tDRMQ (Drum Map Parameter Inquiry)\n>>>4\tbyte\t\t\t0x72\t\tBIN (Drum Map Reserved)\n>>>4\tbyte\t\t\t0x03\t\tPATR (Sequencer Pattern Request)\n>>>4\tbyte\t\t\t0x13\t\tPATD (Sequencer Pattern Dump)\n>>>4\tbyte\t\t\t0x23\t\tPATP (Sequencer Pattern Parameter Change)\n>>>4\tbyte\t\t\t0x33\t\tPATQ (Sequencer Pattern Parameter Inquiry)\n>>>4\tbyte\t\t\t0x73\t\tAFM (Sequencer Pattern Reserved)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x07\t\tMODR (Mode Parameter Request)\n>>>4\tbyte\t\t\t0x17\t\tMODD (Mode Parameter Dump)\n>>>4\tbyte\t\t\t0x27\t\tMODP (Mode Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x37\t\tMODQ (Mode Parameter Parameter Inquiry)\n>>2\tbyte\t\t\t0x10\t\tmicroQ\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Inquiry)\n>>>4\tbyte\t\t\t0x70\t\t(Sound Reserved)\n>>>4\tbyte\t\t\t0x01\t\tMULR (Multi Request)\n>>>4\tbyte\t\t\t0x11\t\tMULD (Multi Dump)\n>>>4\tbyte\t\t\t0x21\t\tMULP (Multi Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tMULQ (Multi Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Multi Reserved)\n>>>4\tbyte\t\t\t0x02\t\tDRMR (Drum Map Request)\n>>>4\tbyte\t\t\t0x12\t\tDRMD (Drum Map Dump)\n>>>4\tbyte\t\t\t0x22\t\tDRMP (Drum Map Parameter Change)\n>>>4\tbyte\t\t\t0x32\t\tDRMQ (Drum Map Parameter Inquiry)\n>>>4\tbyte\t\t\t0x72\t\tBIN (Drum Map Reserved)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>2\tbyte\t\t\t0x11\t\trackAttack\n>>>4\tbyte\t\t\t0x00\t\tSNDR (Sound Parameter Request)\n>>>4\tbyte\t\t\t0x10\t\tSNDD (Sound Parameter Dump)\n>>>4\tbyte\t\t\t0x20\t\tSNDP (Sound Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x30\t\tSNDQ (Sound Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x01\t\tPRGR (Program Parameter Request)\n>>>4\tbyte\t\t\t0x11\t\tPRGD (Program Parameter Dump)\n>>>4\tbyte\t\t\t0x21\t\tPRGP (Program Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x31\t\tPRGQ (Program Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x71\t\tOS (Program Parameter Reserved)\n>>>4\tbyte\t\t\t0x03\t\tPATR (Pattern Parameter Request)\n>>>4\tbyte\t\t\t0x13\t\tPATD (Pattern Parameter Dump)\n>>>4\tbyte\t\t\t0x23\t\tPATP (Pattern Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x33\t\tPATQ (Pattern Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x04\t\tGLBR (Global Parameter Request)\n>>>4\tbyte\t\t\t0x14\t\tGLBD (Global Parameter Dump)\n>>>4\tbyte\t\t\t0x24\t\tGLBP (Global Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x34\t\tGLBQ (Global Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x05\t\tEFXR (FX Parameter Request)\n>>>4\tbyte\t\t\t0x15\t\tEFXD (FX Parameter Dump)\n>>>4\tbyte\t\t\t0x25\t\tEFXP (FX Parameter Parameter Change)\n>>>4\tbyte\t\t\t0x35\t\tEFXQ (FX Parameter Parameter Inquiry)\n>>>4\tbyte\t\t\t0x07\t\tMODR (Mode Command Request)\n>>>4\tbyte\t\t\t0x17\t\tMODD (Mode Command Dump)\n>>>4\tbyte\t\t\t0x27\t\tMODP (Mode Command Parameter Change)\n>>>4\tbyte\t\t\t0x37\t\tMODQ (Mode Command Parameter Inquiry)\n>>2\tbyte\t\t\t0x03\t\tWave\n>>>4\tbyte\t\t\t0x00\t\tSBPR (Soundprogram)\n>>>4\tbyte\t\t\t0x01\t\tSAPR (Performance)\n>>>4\tbyte\t\t\t0x02\t\tSWAVE (Wave)\n>>>4\tbyte\t\t\t0x03\t\tSWTBL (Wave control table)\n>>>4\tbyte\t\t\t0x04\t\tSVT (Velocity Curve)\n>>>4\tbyte\t\t\t0x05\t\tSTT (Tuning Table)\n>>>4\tbyte\t\t\t0x06\t\tSGLB (Global Parameters)\n>>>4\tbyte\t\t\t0x07\t\tSARRMAP (Performance Program Change Map)\n>>>4\tbyte\t\t\t0x08\t\tSBPRMAP (Sound Program Change Map)\n>>>4\tbyte\t\t\t0x09\t\tSBPRPAR (Sound Parameter)\n>>>4\tbyte\t\t\t0x0A\t\tSARRPAR (Performance Parameter)\n>>>4\tbyte\t\t\t0x0B\t\tSINSPAR (Instrument/External Parameter)\n>>>4\tbyte\t\t\t0x0F\t\tSBULK (Bulk Switch on/off)\n\n# Japanese Group\n>1\tbyte\t\t\t0x40\t\tKawai\n>>3\tbyte\t\t\t0x20\t\tK1\n>>3\tbyte\t\t\t0x22\t\tK4\n\n>1\tbyte\t\t\t0x41\t\tRoland\n>>3\tbyte\t\t\t0x14\t\tD-50\n>>3\tbyte\t\t\t0x2b\t\tU-220\n>>3\tbyte\t\t\t0x02\t\tTR-707\n\n>1\tbyte\t\t\t0x42\t\tKorg\n>>3\tbyte\t\t\t0x19\t\tM1\n\n>1\tbyte\t\t\t0x43\t\tYamaha\n>1\tbyte\t\t\t0x44\t\tCasio\n>1\tbyte\t\t\t0x46\t\tKamiya\n>1\tbyte\t\t\t0x47\t\tAkai\n>1\tbyte\t\t\t0x48\t\tVictor\n>1\tbyte\t\t\t0x49\t\tMesosha\n>1\tbyte\t\t\t0x4b\t\tFujitsu\n>1\tbyte\t\t\t0x4c\t\tSony\n>1\tbyte\t\t\t0x4e\t\tTeac\n>1\tbyte\t\t\t0x50\t\tMatsushita\n>1\tbyte\t\t\t0x51\t\tFostex\n>1\tbyte\t\t\t0x52\t\tZoom\n>1\tbyte\t\t\t0x54\t\tMatsushita\n>1\tbyte\t\t\t0x57\t\tAcoustic tech. lab.\n\n>1\tbelong&0xffffff00\t0x00007400\tTa Horng\n>1\tbelong&0xffffff00\t0x00007500\te-Tek\n>1\tbelong&0xffffff00\t0x00007600\tE-Voice\n>1\tbelong&0xffffff00\t0x00007700\tMidisoft\n>1\tbelong&0xffffff00\t0x00007800\tQ-Sound\n>1\tbelong&0xffffff00\t0x00007900\tWestrex\n>1\tbelong&0xffffff00\t0x00007a00\tNvidia*\n>1\tbelong&0xffffff00\t0x00007b00\tESS\n>1\tbelong&0xffffff00\t0x00007c00\tMediatrix\n>1\tbelong&0xffffff00\t0x00007d00\tBrooktree\n>1\tbelong&0xffffff00\t0x00007e00\tOtari\n>1\tbelong&0xffffff00\t0x00007f00\tKey Electronics\n>1\tbelong&0xffffff00\t0x00010000\tShure\n>1\tbelong&0xffffff00\t0x00010100\tAuraSound\n>1\tbelong&0xffffff00\t0x00010200\tCrystal\n>1\tbelong&0xffffff00\t0x00010300\tRockwell\n>1\tbelong&0xffffff00\t0x00010400\tSilicon Graphics\n>1\tbelong&0xffffff00\t0x00010500\tMidiman\n>1\tbelong&0xffffff00\t0x00010600\tPreSonus\n>1\tbelong&0xffffff00\t0x00010800\tTopaz\n>1\tbelong&0xffffff00\t0x00010900\tCast Lightning\n>1\tbelong&0xffffff00\t0x00010a00\tMicrosoft\n>1\tbelong&0xffffff00\t0x00010b00\tSonic Foundry\n>1\tbelong&0xffffff00\t0x00010c00\tLine 6\n>1\tbelong&0xffffff00\t0x00010d00\tBeatnik Inc.\n>1\tbelong&0xffffff00\t0x00010e00\tVan Koerving\n>1\tbelong&0xffffff00\t0x00010f00\tAltech Systems\n>1\tbelong&0xffffff00\t0x00011000\tS & S Research\n>1\tbelong&0xffffff00\t0x00011100\tVLSI Technology\n>1\tbelong&0xffffff00\t0x00011200\tChromatic\n>1\tbelong&0xffffff00\t0x00011300\tSapphire\n>1\tbelong&0xffffff00\t0x00011400\tIDRC\n>1\tbelong&0xffffff00\t0x00011500\tJustonic Tuning\n>1\tbelong&0xffffff00\t0x00011600\tTorComp\n>1\tbelong&0xffffff00\t0x00011700\tNewtek Inc.\n>1\tbelong&0xffffff00\t0x00011800\tSound Sculpture\n>1\tbelong&0xffffff00\t0x00011900\tWalker Technical\n>1\tbelong&0xffffff00\t0x00011a00\tDigital Harmony\n>1\tbelong&0xffffff00\t0x00011b00\tInVision\n>1\tbelong&0xffffff00\t0x00011c00\tT-Square\n>1\tbelong&0xffffff00\t0x00011d00\tNemesys\n>1\tbelong&0xffffff00\t0x00011e00\tDBX\n>1\tbelong&0xffffff00\t0x00011f00\tSyndyne\n>1\tbelong&0xffffff00\t0x00012000\tBitheadz\t\n>1\tbelong&0xffffff00\t0x00012100\tCakewalk\n>1\tbelong&0xffffff00\t0x00012200\tStaccato\n>1\tbelong&0xffffff00\t0x00012300\tNational Semicon.\n>1\tbelong&0xffffff00\t0x00012400\tBoom Theory\n>1\tbelong&0xffffff00\t0x00012500\tVirtual DSP Corp\n>1\tbelong&0xffffff00\t0x00012600\tAntares\n>1\tbelong&0xffffff00\t0x00012700\tAngel Software\n>1\tbelong&0xffffff00\t0x00012800\tSt Louis Music\n>1\tbelong&0xffffff00\t0x00012900\tLyrrus dba G-VOX\n>1\tbelong&0xffffff00\t0x00012a00\tAshley Audio\n>1\tbelong&0xffffff00\t0x00012b00\tVari-Lite\n>1\tbelong&0xffffff00\t0x00012c00\tSummit Audio\n>1\tbelong&0xffffff00\t0x00012d00\tAureal Semicon.\n>1\tbelong&0xffffff00\t0x00012e00\tSeaSound\n>1\tbelong&0xffffff00\t0x00012f00\tU.S. Robotics\n>1\tbelong&0xffffff00\t0x00013000\tAurisis\n>1\tbelong&0xffffff00\t0x00013100\tNearfield Multimedia\n>1\tbelong&0xffffff00\t0x00013200\tFM7 Inc.\n>1\tbelong&0xffffff00\t0x00013300\tSwivel Systems\n>1\tbelong&0xffffff00\t0x00013400\tHyperactive\n>1\tbelong&0xffffff00\t0x00013500\tMidiLite\n>1\tbelong&0xffffff00\t0x00013600\tRadical\n>1\tbelong&0xffffff00\t0x00013700\tRoger Linn\n>1\tbelong&0xffffff00\t0x00013800\tHelicon\n>1\tbelong&0xffffff00\t0x00013900\tEvent\n>1\tbelong&0xffffff00\t0x00013a00\tSonic Network\n>1\tbelong&0xffffff00\t0x00013b00\tRealtime Music\n>1\tbelong&0xffffff00\t0x00013c00\tApogee Digital\n\n>1\tbelong&0xffffff00\t0x00202b00\tMedeli Electronics\n>1\tbelong&0xffffff00\t0x00202c00\tCharlie Lab\n>1\tbelong&0xffffff00\t0x00202d00\tBlue Chip Music\n>1\tbelong&0xffffff00\t0x00202e00\tBEE OH Corp\n>1\tbelong&0xffffff00\t0x00202f00\tLG Semicon America\n>1\tbelong&0xffffff00\t0x00203000\tTESI\n>1\tbelong&0xffffff00\t0x00203100\tEMAGIC\n>1\tbelong&0xffffff00\t0x00203200\tBehringer\n>1\tbelong&0xffffff00\t0x00203300\tAccess Music\n>1\tbelong&0xffffff00\t0x00203400\tSynoptic\n>1\tbelong&0xffffff00\t0x00203500\tHanmesoft Corp\n>1\tbelong&0xffffff00\t0x00203600\tTerratec\n>1\tbelong&0xffffff00\t0x00203700\tProel SpA\n>1\tbelong&0xffffff00\t0x00203800\tIBK MIDI\n>1\tbelong&0xffffff00\t0x00203900\tIRCAM\n>1\tbelong&0xffffff00\t0x00203a00\tPropellerhead Software\n>1\tbelong&0xffffff00\t0x00203b00\tRed Sound Systems\n>1\tbelong&0xffffff00\t0x00203c00\tElectron ESI AB\n>1\tbelong&0xffffff00\t0x00203d00\tSintefex Audio\n>1\tbelong&0xffffff00\t0x00203e00\tMusic and More\n>1\tbelong&0xffffff00\t0x00203f00\tAmsaro\n>1\tbelong&0xffffff00\t0x00204000\tCDS Advanced Technology\n>1\tbelong&0xffffff00\t0x00204100\tTouched by Sound\n>1\tbelong&0xffffff00\t0x00204200\tDSP Arts\n>1\tbelong&0xffffff00\t0x00204300\tPhil Rees Music\n>1\tbelong&0xffffff00\t0x00204400\tStamer Musikanlagen GmbH\n>1\tbelong&0xffffff00\t0x00204500\tSoundart\n>1\tbelong&0xffffff00\t0x00204600\tC-Mexx Software\n>1\tbelong&0xffffff00\t0x00204700\tKlavis Tech.\n>1\tbelong&0xffffff00\t0x00204800\tNoteheads AB\n\n0\tstring\t\t\tT707\t\tRoland TR-707 Data\n\n#------------------------------------------------------------------------------\n# $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $\n# teapot:  file(1) magic for \"teapot\" spreadsheet\n#\n0       string          #!teapot\\012xdr      teapot work sheet (XDR format)\n\n#------------------------------------------------------------------------------\n# $File: terminfo,v 1.6 2009/09/19 16:28:12 christos Exp $\n# terminfo:  file(1) magic for terminfo\n#\n# XXX - byte order for screen images?\n#\n0\tstring\t\t\\032\\001\tCompiled terminfo entry\n0\tshort\t\t0433\t\tCurses screen image\n0\tshort\t\t0434\t\tCurses screen image\n\n#------------------------------------------------------------------------------\n# $File: tex,v 1.16 2009/09/19 16:28:12 christos Exp $\n# tex:  file(1) magic for TeX files\n#\n# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)\n#\n# From <conklin@talisman.kaleida.com>\n\n# Although we may know the offset of certain text fields in TeX DVI\n# and font files, we can't use them reliably because they are not\n# zero terminated. [but we do anyway, christos]\n0\tstring\t\t\\367\\002\tTeX DVI file\n!:mime\tapplication/x-dvi\n>16\tstring\t\t>\\0\t\t(%s)\n0\tstring\t\t\\367\\203\tTeX generic font data\n0\tstring\t\t\\367\\131\tTeX packed font data\n>3\tstring\t\t>\\0\t\t(%s)\n0\tstring\t\t\\367\\312\tTeX virtual font data\n0\tsearch/1\tThis\\ is\\ TeX,\tTeX transcript text\n0\tsearch/1\tThis\\ is\\ METAFONT,\tMETAFONT transcript text\n\n# There is no way to detect TeX Font Metric (*.tfm) files without\n# breaking them apart and reading the data.  The following patterns\n# match most *.tfm files generated by METAFONT or afm2tfm.\n2\tstring\t\t\\000\\021\tTeX font metric data\n!:mime\tapplication/x-tex-tfm\n>33\tstring\t\t>\\0\t\t(%s)\n2\tstring\t\t\\000\\022\tTeX font metric data\n!:mime\tapplication/x-tex-tfm\n>33\tstring\t\t>\\0\t\t(%s)\n\n# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/1\t\\\\input\\ texinfo\tTexinfo source text\n!:mime\ttext/x-texinfo\n0\tsearch/1\tThis\\ is\\ Info\\ file\tGNU Info text\n!:mime\ttext/x-info\n\n# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)\n0\tsearch/400\t\\\\input\t\tTeX document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\section\tLaTeX document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\setlength\tLaTeX document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\documentstyle\tLaTeX document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\chapter\tLaTeX document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\documentclass\tLaTeX 2e document text\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\relax\t\tLaTeX auxiliary file\n!:mime\ttext/x-tex\n0\tsearch/400\t\\\\contentsline\tLaTeX table of contents\n!:mime\ttext/x-tex\n0\tsearch/400\t%\\ -*-latex-*-\tLaTeX document text\n!:mime\ttext/x-tex\n\n# Tex document, from Hendrik Scholz <hendrik@scholz.net>\n0   \tsearch/1\t\\\\ifx\t\tTeX document text\n\n# Index and glossary files\n0\tsearch/400\t\\\\indexentry\tLaTeX raw index file\n0\tsearch/400\t\\\\begin{theindex}\tLaTeX sorted index\n0\tsearch/400\t\\\\glossaryentry\tLaTeX raw glossary\n0\tsearch/400\t\\\\begin{theglossary}\tLaTeX sorted glossary\n0\tsearch/400\tThis\\ is\\ makeindex\tMakeindex log file\n\n# End of TeX\n\n#------------------------------------------------------------------------------\n# file(1) magic for BibTex text files\n# From Hendrik Scholz <hendrik@scholz.net>\n\n0\tsearch/1/c\t@article{\tBibTeX text file\n0\tsearch/1/c\t@book{\t\tBibTeX text file\n0\tsearch/1/c\t@inbook{\tBibTeX text file\n0\tsearch/1/c\t@incollection{\tBibTeX text file\n0\tsearch/1/c\t@inproceedings{\tBibTeX text file\n0\tsearch/1/c\t@manual{\tBibTeX text file\n0\tsearch/1/c\t@misc{\t\tBibTeX text file\n0\tsearch/1/c\t@preamble{\tBibTeX text file\n0\tsearch/1/c\t@phdthesis{\tBibTeX text file\n0\tsearch/1/c\t@techreport{\tBibTeX text file\n0\tsearch/1/c\t@unpublished{\tBibTeX text file\n\n73\tsearch/1\t%%%\\ \\ \t\tBibTeX-file{ BibTex text file (with full header)\n\n73\tsearch/1\t%%%\\ \\ @BibTeX-style-file{   BibTeX style text file (with full header)\n\n0\tsearch/1\t%\\ BibTeX\\ standard\\ bibliography\\ \tBibTeX standard bibliography style text file\n\n0\tsearch/1\t%\\ BibTeX\\ `\tBibTeX custom bibliography style text file\n\n0\tsearch/1\t@c\\ @mapfile{\tTeX font aliases text file\n\n0\tstring\t\t\\#LyX\t\tLyX document text\n\n#------------------------------------------------------------------------------\n# $File: tgif,v 1.5 2009/09/19 16:28:12 christos Exp $\n# file(1) magic for tgif(1) files\n# From Hendrik Scholz <hendrik@scholz.net>\n0\tstring\t%TGIF\\\t\t\tTgif file version\n>6\tstring\tx\t\t\t%s\n\n#------------------------------------------------------------------------------\n# $File: ti-8x,v 1.6 2009/09/19 16:28:12 christos Exp $\n# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.\n#\n# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).\n#\n# Update: Romain Lievin (roms@lpg.ticalc.org).\n#\n# NOTE: This list is not complete.\n# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the\n# program/group magic numbers in here because I cannot find any.\n0\t\tstring\t\t**TI80**\tTI-80 Graphing Calculator File.\n0\t\tstring\t\t**TI81**\tTI-81 Graphing Calculator File.\n#\n# Magic Numbers for the TI-73\n#\n0\t\tstring\t\t**TI73**\tTI-73 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(equation)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(assembly program)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0C\t\t(complex number)\n>0x00003B\tbyte\t\t0x0F\t\t(window settings)\n>0x00003B\tbyte\t\t0x10\t\t(zoom)\n>0x00003B\tbyte\t\t0x11\t\t(table setup)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n\n# Magic Numbers for the TI-82\n#\n0\t\tstring\t\t**TI82**\tTI-82 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(Y-variable)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(protected prgm)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0B\t\t(window settings)\n>0x00003B\tbyte\t\t0x0C\t\t(window settings)\n>0x00003B\tbyte\t\t0x0D\t\t(table setup)\n>0x00003B\tbyte\t\t0x0E\t\t(screenshot)\n>0x00003B\tbyte\t\t0x0F\t\t(backup)\n#\n# Magic Numbers for the TI-83\n#\n0\t\tstring\t\t**TI83**\tTI-83 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(Y-variable)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(protected prgm)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0B\t\t(window settings)\n>0x00003B\tbyte\t\t0x0C\t\t(window settings)\n>0x00003B\tbyte\t\t0x0D\t\t(table setup)\n>0x00003B\tbyte\t\t0x0E\t\t(screenshot)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n#\n# Magic Numbers for the TI-83+\n#\n0\t\tstring\t\t**TI83F*\tTI-83+ Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(list)\n>0x00003B\tbyte\t\t0x02\t\t(matrix)\n>0x00003B\tbyte\t\t0x03\t\t(equation)\n>0x00003B\tbyte\t\t0x04\t\t(string)\n>0x00003B\tbyte\t\t0x05\t\t(program)\n>0x00003B\tbyte\t\t0x06\t\t(assembly program)\n>0x00003B\tbyte\t\t0x07\t\t(picture)\n>0x00003B\tbyte\t\t0x08\t\t(gdb)\n>0x00003B\tbyte\t\t0x0C\t\t(complex number)\n>0x00003B\tbyte\t\t0x0F\t\t(window settings)\n>0x00003B\tbyte\t\t0x10\t\t(zoom)\n>0x00003B\tbyte\t\t0x11\t\t(table setup)\n>0x00003B\tbyte\t\t0x13\t\t(backup)\n>0x00003B\tbyte\t\t0x15\t\t(application variable)\n>0x00003B\tbyte\t\t0x17\t\t(group of variable)\n\n#\n# Magic Numbers for the TI-85\n#\n0\t\tstring\t\t**TI85**\tTI-85 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(complex number)\n>0x00003B\tbyte\t\t0x02\t\t(real vector)\n>0x00003B\tbyte\t\t0x03\t\t(complex vector)\n>0x00003B\tbyte\t\t0x04\t\t(real list)\n>0x00003B\tbyte\t\t0x05\t\t(complex list)\n>0x00003B\tbyte\t\t0x06\t\t(real matrix)\n>0x00003B\tbyte\t\t0x07\t\t(complex matrix)\n>0x00003B\tbyte\t\t0x08\t\t(real constant)\n>0x00003B\tbyte\t\t0x09\t\t(complex constant)\n>0x00003B\tbyte\t\t0x0A\t\t(equation)\n>0x00003B\tbyte\t\t0x0C\t\t(string)\n>0x00003B\tbyte\t\t0x0D\t\t(function GDB)\n>0x00003B\tbyte\t\t0x0E\t\t(polar GDB)\n>0x00003B\tbyte\t\t0x0F\t\t(parametric GDB)\n>0x00003B\tbyte\t\t0x10\t\t(diffeq GDB)\n>0x00003B\tbyte\t\t0x11\t\t(picture)\n>0x00003B\tbyte\t\t0x12\t\t(program)\n>0x00003B\tbyte\t\t0x13\t\t(range)\n>0x00003B\tbyte\t\t0x17\t\t(window settings)\n>0x00003B\tbyte\t\t0x18\t\t(window settings)\n>0x00003B\tbyte\t\t0x19\t\t(window settings)\n>0x00003B\tbyte\t\t0x1A\t\t(window settings)\n>0x00003B\tbyte\t\t0x1B\t\t(zoom)\n>0x00003B\tbyte\t\t0x1D\t\t(backup)\n>0x00003B\tbyte\t\t0x1E\t\t(unknown)\n>0x00003B\tbyte\t\t0x2A\t\t(equation)\n>0x000032\tstring\t\tZS4\t\t- ZShell Version 4 File.\n>0x000032\tstring\t\tZS3\t\t- ZShell Version 3 File.\n#\n# Magic Numbers for the TI-86\n#\n0\t\tstring\t\t**TI86**\tTI-86 Graphing Calculator\n>0x00003B\tbyte\t\t0x00\t\t(real number)\n>0x00003B\tbyte\t\t0x01\t\t(complex number)\n>0x00003B\tbyte\t\t0x02\t\t(real vector)\n>0x00003B\tbyte\t\t0x03\t\t(complex vector)\n>0x00003B\tbyte\t\t0x04\t\t(real list)\n>0x00003B\tbyte\t\t0x05\t\t(complex list)\n>0x00003B\tbyte\t\t0x06\t\t(real matrix)\n>0x00003B\tbyte\t\t0x07\t\t(complex matrix)\n>0x00003B\tbyte\t\t0x08\t\t(real constant)\n>0x00003B\tbyte\t\t0x09\t\t(complex constant)\n>0x00003B\tbyte\t\t0x0A\t\t(equation)\n>0x00003B\tbyte\t\t0x0C\t\t(string)\n>0x00003B\tbyte\t\t0x0D\t\t(function GDB)\n>0x00003B\tbyte\t\t0x0E\t\t(polar GDB)\n>0x00003B\tbyte\t\t0x0F\t\t(parametric GDB)\n>0x00003B\tbyte\t\t0x10\t\t(diffeq GDB)\n>0x00003B\tbyte\t\t0x11\t\t(picture)\n>0x00003B\tbyte\t\t0x12\t\t(program)\n>0x00003B\tbyte\t\t0x13\t\t(range)\n>0x00003B\tbyte\t\t0x17\t\t(window settings)\n>0x00003B\tbyte\t\t0x18\t\t(window settings)\n>0x00003B\tbyte\t\t0x19\t\t(window settings)\n>0x00003B\tbyte\t\t0x1A\t\t(window settings)\n>0x00003B\tbyte\t\t0x1B\t\t(zoom)\n>0x00003B\tbyte\t\t0x1D\t\t(backup)\n>0x00003B\tbyte\t\t0x1E\t\t(unknown)\n>0x00003B\tbyte\t\t0x2A\t\t(equation)\n#\n# Magic Numbers for the TI-89\n#\n0\t\tstring\t\t**TI89**\tTI-89 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1C\t\t(zipped)\n>0x000048\tbyte\t\t0x21\t\t(assembler)\n#\n# Magic Numbers for the TI-92\n#\n0\t\tstring\t\t**TI92**\tTI-92 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1D\t\t(backup)\n#\n# Magic Numbers for the TI-92+/V200\n#\n0\t\tstring\t\t**TI92P*\tTI-92+/V200 Graphing Calculator\n>0x000048\tbyte\t\t0x00\t\t(expression)\n>0x000048\tbyte\t\t0x04\t\t(list)\n>0x000048\tbyte\t\t0x06\t\t(matrix)\n>0x000048\tbyte\t\t0x0A\t\t(data)\n>0x000048\tbyte\t\t0x0B\t\t(text)\n>0x000048\tbyte\t\t0x0C\t\t(string)\n>0x000048\tbyte\t\t0x0D\t\t(graphic data base)\n>0x000048\tbyte\t\t0x0E\t\t(figure)\n>0x000048\tbyte\t\t0x10\t\t(picture)\n>0x000048\tbyte\t\t0x12\t\t(program)\n>0x000048\tbyte\t\t0x13\t\t(function)\n>0x000048\tbyte\t\t0x14\t\t(macro)\n>0x000048\tbyte\t\t0x1C\t\t(zipped)\n>0x000048\tbyte\t\t0x21\t\t(assembler)\n#\n# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades\n#\n0x0000016\tstring\t\tAdvanced\tTI-XX Graphing Calculator (FLASH)\n0\t\tstring\t\t**TIFL**\tTI-XX Graphing Calculator (FLASH)\n>8\t\tbyte\t\t>0\t\t- Revision %d\n>>9 \t\tbyte\t\tx\t\t\\b.%d,\n>12\t\tbyte\t\t>0\t\tRevision date %02x\n>>13\t\tbyte\t\tx\t\t\\b/%02x\n>>14\t\tbeshort\t\tx\t\t\\b/%04x,\n>17\t\tstring\t\t>/0\t\tname: '%s',\n>48\t\tbyte\t\t0x74\t\tdevice: TI-73,\n>48\t\tbyte\t\t0x73\t\tdevice: TI-83+,\n>48\t\tbyte\t\t0x98\t\tdevice: TI-89,\n>48\t\tbyte\t\t0x88\t\tdevice: TI-92+,\n>49\t\tbyte\t\t0x23\t\ttype: OS upgrade,\n>49\t\tbyte\t\t0x24\t\ttype: application,\n>49\t\tbyte\t\t0x25\t\ttype: certificate,\n>49\t\tbyte\t\t0x3e\t\ttype: license,\n>74\t\tlelong\t\t>0\t\tsize: %ld bytes\n\n# VTi & TiEmu skins (TI Graphing Calculators).\n# From: Romain Lievin (roms@lpg.ticalc.org).\n# Magic Numbers for the VTi skins\n0               string          VTI\t\tVirtual TI skin\n>3\t\tstring\t\tv\t\t- Version\n>>4\t\tbyte\t\t>0\t\t\\b %c\n>>6\t\tbyte\t\tx\t\t\\b.%c\n# Magic Numbers for the TiEmu skins\n0\t\tstring\t\tTiEmu\t\tTiEmu skin\n>6              string          v               - Version\n>>7             byte            >0              \\b %c\n>>9             byte            x               \\b.%c\n>>10\t\tbyte\t\tx\t\t\\b%c\n\n#------------------------------------------------------------------------------\n# $File: timezone,v 1.11 2009/09/19 16:28:12 christos Exp $\n# timezone:  file(1) magic for timezone data\n#\n# from Daniel Quinlan (quinlan@yggdrasil.com)\n# this should work on Linux, SunOS, and maybe others\n# Added new official magic number for recent versions of the Olson code\n0\tstring\tTZif\ttimezone data\n>4\tbyte\t0\t\\b, old version\n>4\tbyte\t>0\t\\b, version %c\n>20\tbelong\t0\t\\b, no gmt time flags\n>20\tbelong\t1\t\\b, 1 gmt time flag\n>20\tbelong\t>1\t\\b, %d gmt time flags\n>24\tbelong\t0\t\\b, no std time flags\n>20\tbelong\t1\t\\b, 1 std time flag\n>24\tbelong\t>1\t\\b, %d std time flags\n>28\tbelong\t0\t\\b, no leap seconds\n>28\tbelong\t1\t\\b, 1 leap second\n>28\tbelong  >1\t\\b, %d leap seconds\n>32\tbelong\t0\t\\b, no transition times\n>32\tbelong\t1\t\\b, 1 transition time\n>32\tbelong  >1\t\\b, %d transition times\n>36\tbelong\t0\t\\b, no abbreviation chars\n>36\tbelong\t1\t\\b, 1 abbreviation char\n>36\tbelong\t>1\t\\b, %d abbreviation chars\n0\tstring\t\\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\\0\told timezone data\n0\tstring\t\\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\\2\\0\told timezone data\n0\tstring  \\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\\3\\0\told timezone data\n0\tstring\t\\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\\4\\0\told timezone data\n0\tstring\t\\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\\5\\0\told timezone data\n0\tstring\t\\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\\6\\0\told timezone data\n\n#------------------------------------------------------------------------------\n# $File: troff,v 1.10 2009/09/19 16:28:12 christos Exp $\n# troff:  file(1) magic for *roff\n#\n# updated by Daniel Quinlan (quinlan@yggdrasil.com)\n\n# troff input\n0\tsearch/1\t.\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'.\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t\\\\\"\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tsearch/1\t'''\t\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tregex/20\t\\^\\\\.[A-Za-z0-9][A-Za-z0-9][\\ \\t]\ttroff or preprocessor input text\n!:mime\ttext/troff\n0\tregex/20\t\\^\\\\.[A-Za-z0-9][A-Za-z0-9]$\ttroff or preprocessor input text\n!:mime\ttext/troff\n\n# ditroff intermediate output text\n0\tsearch/1\tx\\ T\t\tditroff output text\n>4\tsearch/1\tcat\t\tfor the C/A/T phototypesetter\n>4\tsearch/1\tps\t\tfor PostScript\n>4\tsearch/1\tdvi\t\tfor DVI\n>4\tsearch/1\tascii\t\tfor ASCII\n>4\tsearch/1\tlj4\t\tfor LaserJet 4\n>4\tsearch/1\tlatin1\t\tfor ISO 8859-1 (Latin 1)\n>4\tsearch/1\tX75\t\tfor xditview at 75dpi\n>>7\tsearch/1\t-12\t\t(12pt)\n>4\tsearch/1\tX100\t\tfor xditview at 100dpi\n>>8\tsearch/1\t-12\t\t(12pt)\n\n# output data formats\n0\tstring\t\t\\100\\357\tvery old (C/A/T) troff output data\n\n#------------------------------------------------------------------------------\n# $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $\n# tuxedo:\tfile(1) magic for BEA TUXEDO data files\n#\n# from Ian Springer <ispringer@hotmail.com>\n#\n0\tstring\t\t\\0\\0\\1\\236\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\tBEA TUXEDO DES mask data\n\n#------------------------------------------------------------------------------\n# $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $\n# typeset:  file(1) magic for other typesetting\n#\n0\tstring\t\tInterpress/Xerox\tXerox InterPress data\n>16\tstring\t\t/\t\t\t(version\n>>17\tstring\t\t>\\0\t\t\t%s)\n\n#------------------------------------------------------------------------------\n# $File: unicode,v 1.5 2009/09/19 16:28:13 christos Exp $\n# Unicode:  BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp>\n# GRR: These types should be recognised in file_ascmagic so these\n# encodings can be treated by text patterns.\n# Missing types are already dealt with internally.\n#\n0\tstring\t+/v8\t\t\tUnicode text, UTF-7\n0\tstring\t+/v9\t\t\tUnicode text, UTF-7\n0\tstring\t+/v+\t\t\tUnicode text, UTF-7\n0\tstring\t+/v/\t\t\tUnicode text, UTF-7\n0\tstring\t\\335\\163\\146\\163\tUnicode text, UTF-8-EBCDIC\n0\tstring\t\\000\\000\\376\\377\tUnicode text, UTF-32, big-endian\n0\tstring\t\\377\\376\\000\\000\tUnicode text, UTF-32, little-endian\n0\tstring\t\\016\\376\\377\t\tUnicode text, SCSU (Standard Compression Scheme for Unicode)\n\n#------------------------------------------------------------------------------\n# $File: unknown,v 1.7 2009/09/19 16:28:13 christos Exp $\n# unknown:  file(1) magic for unknown machines\n#\n# XXX - this probably should be pruned, as it'll match PDP-11 and\n# VAX image formats.\n#\n# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,\n# respectively).\n#\n# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't\n# have the \"version %ld\", which may be a bogus COFFism (I don't think\n# there ever was COFF for the PDP-11).\n#\n# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a\n# long, as it would be on a VAX.\n#\n# 0x10C is 0414 and 0x10E is 416; those *are* unknown.\n#\n0\tshort\t\t0x107\t\tunknown machine executable\n>8\tshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n0\tshort\t\t0x108\t\tunknown pure executable\n>8\tshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n0\tshort\t\t0x109\t\tPDP-11 separate I&D\n>8\tshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n0\tshort\t\t0x10b\t\tunknown pure executable\n>8\tshort\t\t>0\t\tnot stripped\n>15\tbyte\t\t>0\t\t- version %ld\n0\tlong\t\t0x10c\t\tunknown demand paged pure executable\n>16\tlong\t\t>0\t\tnot stripped\n0\tlong\t\t0x10e\t\tunknown readable demand paged pure executable\n\n#------------------------------------------------------------------------------\n# $File: uuencode,v 1.7 2009/09/19 16:28:13 christos Exp $\n# uuencode:  file(1) magic for ASCII-encoded files\n#\n\n# GRR:  the first line of xxencoded files is identical to that in uuencoded\n# files, but the first character in most subsequent lines is 'h' instead of\n# 'M'.  (xxencoding uses lowercase letters in place of most of uuencode's\n# punctuation and survives BITNET gateways better.)  If regular expressions\n# were supported, this entry could possibly be split into two with\n# \"begin\\040\\.\\*\\012M\" or \"begin\\040\\.\\*\\012h\" (where \\. and \\* are REs).\n0\tsearch/1\tbegin\\ \t\tuuencoded or xxencoded text\n\n# btoa(1) is an alternative to uuencode that requires less space.\n0\tsearch/1\txbtoa\\ Begin\tbtoa'd text\n\n# ship(1) is another, much cooler alternative to uuencode.\n# Greg Roelofs, newt@uchicago.edu\n0\tsearch/1\t$\\012ship\tship'd binary text\n\n# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)\n# Greg Roelofs, newt@uchicago.edu\n0\tsearch/1\tDecode\\ the\\ following\\ with\\ bdeco\tbencoded News text\n\n# BinHex is the Macintosh ASCII-encoded file format (see also \"apple\")\n# Daniel Quinlan, quinlan@yggdrasil.com\n11\tsearch/1\tmust\\ be\\ converted\\ with\\ BinHex\tBinHex binary text\n>41\tsearch/1\tx\t\t\t\t\t\\b, version %.3s\n\n# GRR: handle BASE64\n\n#------------------------------------------------------------------------------\n# $File: varied.out,v 1.21 2009/09/19 16:28:13 christos Exp $\n# varied.out:  file(1) magic for various USG systems\n#\n#\tHerewith many of the object file formats used by USG systems.\n#\tMost have been moved to files for a particular processor,\n#\tand deleted if they duplicate other entries.\n#\n0\tshort\t\t0610\t\tPerkin-Elmer executable\n# AMD 29K\n0\tbeshort\t\t0572\t\tamd 29k coff noprebar executable\n0\tbeshort\t\t01572\t\tamd 29k coff prebar executable\n0\tbeshort\t\t0160007\t\tamd 29k coff archive\n# Cray\n6\tbeshort\t\t0407\t\tunicos (cray) executable\n# Ultrix 4.3\n596\tstring\t\t\\130\\337\\377\\377\tUltrix core file\n>600\tstring\t\t>\\0\t\tfrom '%s'\n# BeOS and MAcOS PEF executables\n# From: hplus@zilker.net (Jon Watte)\n0\tstring\t\tJoy!peffpwpc\theader for PowerPC PEF executable\n#\n# ava assembler/linker Uros Platise <uros.platise@ijs.si>\n0       string          avaobj  AVR assembler object code\n>7      string          >\\0     version '%s'\n# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>\n0\tstring\t\tgmon\t\tGNU prof performance data\n>4\tlong\t\tx\t\t- version %ld\n# From: Dave Pearson <davep@davep.org>\n# Harbour <URL:http://www.harbour-project.org/> HRB files.\n0\tstring\t\t\\xc0HRB\t\tHarbour HRB file\n>4\tshort\t\tx\t\tversion %d\n\n# From: Alex Beregszaszi <alex@fsn.hu>\n# 0\tstring\t\texec \t\tBugOS executable\n# 0\tstring\t\tpack\t\tBugOS archive\n\n# From: Jason Spence <jspence@lightconsulting.com>\n# Generated by the \"examples\" in STM's ST40 devkit, and derived code.\n0\tlelong\t\t0x13a9f17e\tST40 component image format\n>4\tstring\t\t>\\0\t\t\\b, name '%s'\n\n\n#------------------------------------------------------------------------------\n# $File: varied.script,v 1.6 2009/09/19 16:28:13 christos Exp $\n# varied.script:  file(1) magic for various interpreter scripts\n\n0\tstring\t\t#!\\ /\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script text executable\n0\tstring\t\t#!\\t/\t\t\ta\n>3\tstring\t\t>\\0\t\t\t%s script text executable\n0\tstring\t\t#!/\t\t\ta\n>2\tstring\t\t>\\0\t\t\t%s script text executable\n0\tstring\t\t#!\\ \t\t\tscript text executable\n>3\tstring\t\t>\\0\t\t\tfor %s\n\n# From: arno <arenevier@fdn.fr>\n# mozilla xpconnect typelib\n# see http://www.mozilla.org/scriptable/typelib_file.html\n0\tstring \t\tXPCOM\\nTypeLib\\r\\n\\032\t\tXPConnect Typelib\n>0x10  byte        x       version %d\n>>0x11 byte        x      \\b.%d\n\n#------------------------------------------------------------------------------\n# $File: vax,v 1.7 2009/09/19 16:28:13 christos Exp $\n# vax:  file(1) magic for VAX executable/object and APL workspace\n#\n0\tlelong\t\t0101557\t\tVAX single precision APL workspace\n0\tlelong\t\t0101556\t\tVAX double precision APL workspace\n\n#\n# VAX a.out (32V, BSD)\n#\n0\tlelong\t\t0407\t\tVAX executable\n>16\tlelong\t\t>0\t\tnot stripped\n\n0\tlelong\t\t0410\t\tVAX pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n\n0\tlelong\t\t0413\t\tVAX demand paged pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n\n0\tlelong\t\t0420\t\tVAX demand paged (first page unmapped) pure executable\n>16\tlelong\t\t>0\t\tnot stripped\n\n#\n# VAX COFF\n#\n# The `versions' should be un-commented if they work for you.\n# (Was the problem just one of endianness?)\n#\n0\tleshort\t\t0570\t\tVAX COFF executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %ld\n0\tleshort\t\t0575\t\tVAX COFF pure executable\n>12\tlelong\t\t>0\t\tnot stripped\n>22\tleshort\t\t>0\t\t- version %ld\n\n#------------------------------------------------------------------------------\n# $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $\n# vicar:  file(1) magic for VICAR files.\n#\n# From: Ossama Othman <othman@astrosun.tn.cornell.edu\n# VICAR is JPL's in-house spacecraft image processing program\n# VICAR image\n0\tstring\tLBLSIZE=\tVICAR image data\n>32\tstring\tBYTE\t\t\\b, 8 bits  = VAX byte\n>32\tstring\tHALF\t\t\\b, 16 bits = VAX word     = Fortran INTEGER*2\n>32\tstring\tFULL\t\t\\b, 32 bits = VAX longword = Fortran INTEGER*4\n>32\tstring\tREAL\t\t\\b, 32 bits = VAX longword = Fortran REAL*4\n>32\tstring\tDOUB\t\t\\b, 64 bits = VAX quadword = Fortran REAL*8\n>32\tstring\tCOMPLEX\t\t\\b, 64 bits = VAX quadword = Fortran COMPLEX*8\n# VICAR label file\n43\tstring\tSFDU_LABEL\tVICAR label file\n\n#------------------------------------------------------------------------------\n# $File: virtual,v 1.1 2009/12/25 16:04:30 christos Exp $\n# From: James Nobis <quel@quelrod.net>\n# Microsoft hard disk images for:\n# Virtual Server\n# Virtual PC\n# http://technet.microsoft.com/en-us/virtualserver/bb676673.aspx\n# .vhd\n0\tstring\tconectix\tMicrosoft Disk Image, Virtual Server or Virtual PC\n\n# Sun xVM VirtualBox Disk Image\n# string  <<< Sun xVM VirtualBox Disk Image >>>\n# .vdi\n0\tstring\t\\<\\<\\<\\ Sun\\ xVM\\ VirtualBox\\ Disk\tSun xVM VirtualBox Disk Image\n\n\n\n#------------------------------------------------------------------------------\n# $File: virtutech,v 1.4 2009/09/19 16:28:13 christos Exp $\n# Virtutech Compressed Random Access File Format\n#\n# From <gustav@virtutech.com>\n0      string          \\211\\277\\036\\203        Virtutech CRAFF\n>4     belong          x               v%d\n>20    belong          0               uncompressed\n>20    belong          1               bzipp2ed\n>20    belong          2               gzipped\n>24    belong          0               not clean\n\n#------------------------------------------------------------------------------\n# $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $\n# visx:  file(1) magic for Visx format files\n#\n0\tshort\t\t0x5555\t\tVISX image file\n>2\tbyte\t\t0\t\t(zero)\n>2\tbyte\t\t1\t\t(unsigned char)\n>2\tbyte\t\t2\t\t(short integer)\n>2\tbyte\t\t3\t\t(float 32)\n>2\tbyte\t\t4\t\t(float 64)\n>2\tbyte\t\t5\t\t(signed char)\n>2\tbyte\t\t6\t\t(bit-plane)\n>2\tbyte\t\t7\t\t(classes)\n>2\tbyte\t\t8\t\t(statistics)\n>2\tbyte\t\t10\t\t(ascii text)\n>2\tbyte\t\t15\t\t(image segments)\n>2\tbyte\t\t100\t\t(image set)\n>2\tbyte\t\t101\t\t(unsigned char vector)\n>2\tbyte\t\t102\t\t(short integer vector)\n>2\tbyte\t\t103\t\t(float 32 vector)\n>2\tbyte\t\t104\t\t(float 64 vector)\n>2\tbyte\t\t105\t\t(signed char vector)\n>2\tbyte\t\t106\t\t(bit plane vector)\n>2\tbyte\t\t121\t\t(feature vector)\n>2\tbyte\t\t122\t\t(feature vector library)\n>2\tbyte\t\t124\t\t(chain code)\n>2\tbyte\t\t126\t\t(bit vector)\n>2\tbyte\t\t130\t\t(graph)\n>2\tbyte\t\t131\t\t(adjacency graph)\n>2\tbyte\t\t132\t\t(adjacency graph library)\n>2\tstring\t\t.VISIX\t\t(ascii text)\n\n#------------------------------------------------------------------------------\n# $File: vms,v 1.6 2009/09/19 16:28:13 christos Exp $\n# vms:  file(1) magic for VMS executables (experimental)\n#\n# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)\n\n# GRR 950122:  I'm just guessing on these, based on inspection of the headers\n# of three executables each for Alpha and VAX architectures.  The VAX files\n# all had headers similar to this:\n#\n#   00000  b0 00 30 00 44 00 60 00  00 00 00 00 30 32 30 35  ..0.D.`.....0205\n#   00010  01 01 00 00 ff ff ff ff  ff ff ff ff 00 00 00 00  ................\n#\n0\tstring\t\\xb0\\0\\x30\\0\tVMS VAX executable\n>44032\tstring\tPK\\003\\004\t\\b, Info-ZIP SFX archive v5.12 w/decryption\n#\n# The AXP files all looked like this, except that the byte at offset 0x22\n# was 06 in some of them and 07 in others:\n#\n#   00000  03 00 00 00 00 00 00 00  ec 02 00 00 10 01 00 00  ................\n#   00010  68 00 00 00 98 00 00 00  b8 00 00 00 00 00 00 00  h...............\n#   00020  00 00 07 00 00 00 00 00  00 00 00 00 00 00 00 00  ................\n#   00030  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  ................\n#   00040  00 00 00 00 ff ff ff ff  ff ff ff ff 02 00 00 00  ................\n#\n0\tbelong\t0x03000000\tVMS Alpha executable\n>75264\tstring\tPK\\003\\004\t\\b, Info-ZIP SFX archive v5.12 w/decryption\n\n#------------------------------------------------------------------------------\n# $File: vmware,v 1.7 2009/09/19 16:28:13 christos Exp $\n# VMware specific files (deducted from version 1.1 and log file entries)\n# Anthon van der Neut (anthon@mnt.org)\n0\tbelong\t0x4d52564e\tVMware nvram \n\n#------------------------------------------------------------------------------\n# $File: vorbis,v 1.16 2009/09/19 16:28:13 christos Exp $\n# vorbis:  file(1) magic for Ogg/Vorbis files\n#\n# From Felix von Leitner <leitner@fefe.de>\n# Extended by Beni Cherniavsky <cben@crosswinds.net>\n# Further extended by Greg Wooledge <greg@wooledge.org>\n#\n# Most (everything but the number of channels and bitrate) is commented\n# out with `##' as it's not interesting to the average user.  The most\n# probable things advanced users would want to uncomment are probably\n# the number of comments and the encoder version.\n#\n# FIXME: The first match has been made a search, so that it can skip\n# over prepended ID3 tags. This will work for MIME type detection, but\n# won't work for detecting other properties of the file (they all need\n# to be made relative to the search). In any case, if the file has ID3\n# tags, the ID3 information will be printed, not the Ogg information,\n# so until that's fixed, this doesn't matter.\n# FIXME[2]: Disable the above for now, since search assumes text mode.\n#\n# --- Ogg Framing ---\n#0\t\tsearch/1000\tOggS\t\tOgg data\n0\t\tstring\tOggS\t\tOgg data\n!:mime\t\tapplication/ogg\n>4\t\tbyte\t\t!0\t\tUNKNOWN REVISION %u\n##>4\t\tbyte\t\t0\t\trevision 0\n>4\t\tbyte\t\t0\n##>>14\t\tlelong\t\tx\t\t(Serial %lX)\n# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)\n>>28\t\tstring\t\t\\x7fFLAC\t\\b, FLAC audio\n# non-Vorbis content: Theora\n>>28\t\tstring\t\t\\x80theora\t\\b, Theora video\n# non-Vorbis content: Kate\n>>28\t\tstring\t\t\\x80kate\\0\\0\\0\\0\t\\b, Kate\n>>>37\t\tubyte\t\tx\t\tv%u\n>>>38\t\tubyte\t\tx\t\t\\b.%u,\n>>>40\t\tbyte\t\t0\t\tutf8 encoding,\n>>>40\t\tbyte\t\t!0\t\tunknown character encoding,\n>>>60\t\tstring\t\t>\\0\t\tlanguage %s,\n>>>60\t\tstring\t\t\\0\t\tno language set,\n>>>76\t\tstring\t\t>\\0\t\tcategory %s\n>>>76\t\tstring\t\t\\0\t\tno category set\n# non-Vorbis content: Skeleton\n>>28\t\tstring\t\tfishead\\0\t\\b, Skeleton\n>>>36\t\tshort\t\tx\t\tv%u\n>>>40\t\tshort\t\tx\t\t\\b.%u\n# non-Vorbis content: Speex\n>>28\t\tstring\t\tSpeex\\ \\ \\ \t\\b, Speex audio\n# non-Vorbis content: OGM\n>>28\t\tstring\t\t\\x01video\\0\\0\\0\t\\b, OGM video\n>>>37\t\tstring/c\tdiv3\t\t(DivX 3)\n>>>37\t\tstring/c\tdivx\t\t(DivX 4)\n>>>37\t\tstring/c\tdx50\t\t(DivX 5)\n>>>37\t\tstring/c\txvid\t\t(XviD)\n# --- First vorbis packet - general header ---\n>>28\t\tstring\t\t\\x01vorbis\t\\b, Vorbis audio,\n>>>35\t\tlelong\t\t!0\t\tUNKNOWN VERSION %lu,\n##>>>35\t\tlelong\t\t0\t\tversion 0,\n>>>35\t\tlelong\t\t0\n>>>>39\t\tubyte\t\t1\t\tmono,\n>>>>39\t\tubyte\t\t2\t\tstereo,\n>>>>39\t\tubyte\t\t>2\t\t%u channels,\n>>>>40\t\tlelong\t\tx\t\t%lu Hz\n# Minimal, nominal and maximal bitrates specified when encoding\n>>>>48\t\tstring\t\t<\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\t\\b,\n# The above tests if at least one of these is specified:\n>>>>>52\t\tlelong\t\t!-1\n# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields\n# instead of -1.\n# Vorbis 1.0 uses 0 instead of -1.\n>>>>>>52\tlelong\t\t!0\n>>>>>>>52\tlelong\t\t!-1000\n>>>>>>>>52\tlelong\t\tx\t\t<%lu\n>>>>>48\t\tlelong\t\t!-1\n>>>>>>48\tlelong\t\tx\t\t~%lu\n>>>>>44\t\tlelong\t\t!-1\n>>>>>>44\tlelong\t\t!-1000\n>>>>>>>44\tlelong\t\t!0\n>>>>>>>>44\tlelong\t\tx\t\t>%lu\n>>>>>48\t\tstring\t\t<\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\tbps\n# -- Second vorbis header packet - the comments\n# A kludge to read the vendor string.  It's a counted string, not a\n# zero-terminated one, so file(1) can't read it in a generic way.\n# libVorbis is the only one existing currently, so I detect specifically\n# it.  The interesting value is the cvs date (8 digits decimal).\n# Post-RC1 Ogg files have the second header packet (and thus the version)\n# in a different place, so we must use an indirect offset.\n>>>(84.b+85)\t\tstring\t\t\\x03vorbis\n>>>>(84.b+96)\t\tstring/c\tXiphophorus\\ libVorbis\\ I\t\\b, created by: Xiphophorus libVorbis I\n>>>>>(84.b+120)\t\tstring\t\t>00000000\t\n# Map to beta version numbers:\n>>>>>>(84.b+120)\tstring\t\t<20000508\t(<beta1, prepublic)\n>>>>>>(84.b+120)\tstring\t\t20000508\t(1.0 beta 1 or beta 2)\n>>>>>>(84.b+120)\tstring\t\t>20000508\n>>>>>>>(84.b+120)\tstring\t\t<20001031\t(beta2-3)\n>>>>>>(84.b+120)\tstring\t\t20001031\t(1.0 beta 3)\n>>>>>>(84.b+120)\tstring\t\t>20001031\n>>>>>>>(84.b+120)\tstring\t\t<20010225\t(beta3-4)\n>>>>>>(84.b+120)\tstring\t\t20010225\t(1.0 beta 4)\n>>>>>>(84.b+120)\tstring\t\t>20010225\n>>>>>>>(84.b+120)\tstring\t\t<20010615\t(beta4-RC1)\n>>>>>>(84.b+120)\tstring\t\t20010615\t(1.0 RC1)\n>>>>>>(84.b+120)\tstring\t\t20010813\t(1.0 RC2)\n>>>>>>(84.b+120)\tstring\t\t20010816\t(RC2 - Garf tuned v1)\n>>>>>>(84.b+120)\tstring\t\t20011014\t(RC2 - Garf tuned v2)\n>>>>>>(84.b+120)\tstring\t\t20011217\t(1.0 RC3)\n>>>>>>(84.b+120)\tstring\t\t20011231\t(1.0 RC3)\n# Some pre-1.0 CVS snapshots still had \"Xiphphorus\"...\n>>>>>>(84.b+120)\tstring\t\t>20011231\t(pre-1.0 CVS)\n# For the 1.0 release, Xiphophorus is replaced by Xiph.Org\n>>>>(84.b+96)\t\tstring/c\tXiph.Org\\ libVorbis\\ I\t\\b, created by: Xiph.Org libVorbis I\n>>>>>(84.b+117)\t\tstring\t\t>00000000\t\n>>>>>>(84.b+117)\tstring\t\t<20020717\t(pre-1.0 CVS)\n>>>>>>(84.b+117)\tstring\t\t20020717\t(1.0)\n>>>>>>(84.b+117)\tstring\t\t20030909\t(1.0.1)\n>>>>>>(84.b+117)\tstring\t\t20040629\t(1.1.0 RC1)\n\n#------------------------------------------------------------------------------\n# $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $\n# VXL: file(1) magic for VXL binary IO data files\n#\n# from Ian Scott <scottim@sf.net>\n#\n# VXL is a collection of C++ libraries for Computer Vision.\n# See the vsl chapter in the VXL Book for more info\n# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html\n# http:/vxl.sf.net\n\n2\tlelong\t0x472b2c4e\tVXL data file,\n>0\tleshort\t>0\t\tschema version no %d\n\n#------------------------------------------------------------------------------\n# $File: warc,v 1.2 2009/09/19 16:28:13 christos Exp $\n# warc:  file(1) magic for WARC files\n\n0\tstring\tWARC/\tWARC Archive\n>5\tstring\tx\tversion %.4s\n\n#------------------------------------------------------------------------------\n# weak:  file(1) magic for very weak magic entries, disabled by default\n#\n# These entries are so weak that they might interfere identification of\n# other formats. Example include:\n# - Only identify for 1 or 2 bytes\n# - Match against very wide range of values\n# - Match against generic word in some spoken languages (e.g. English)\n\n# Summary: Computer Graphics Metafile\n# Extension: .cgm\n#0\tbeshort&0xffe0\t0x0020\t\tbinary Computer Graphics Metafile\n#0\tbeshort\t\t0x3020\t\tcharacter Computer Graphics Metafile\n\n#0\tstring\t\t=!!\t\tBennet Yee's \"face\" format\n\n#------------------------------------------------------------------------------\n# $File: windows,v 1.4 2009/09/19 16:28:13 christos Exp $\n# windows:  file(1) magic for Microsoft Windows\n#\n# This file is mainly reserved for files where programs\n# using them are run almost always on MS Windows 3.x or\n# above, or files only used exclusively in Windows OS,\n# where there is no better category to allocate for.\n# For example, even though WinZIP almost run on Windows\n# only, it is better to treat them as \"archive\" instead.\n# For format usable in DOS, such as generic executable\n# format, please specify under \"msdos\" file.\n#\n\n\n# Summary: Outlook Express DBX file\n# Extension: .dbx\n# Created by: Christophe Monniez\n0\tstring\t\\xCF\\xAD\\x12\\xFE\tMS Outlook Express DBX file\n>4\tbyte\t=0xC5\t\t\t\\b, message database\n>4\tbyte\t=0xC6\t\t\t\\b, folder database\n>4\tbyte\t=0xC7\t\t\t\\b, account information\n>4\tbyte\t=0x30\t\t\t\\b, offline database\n\n\n# Summary: Windows crash dump\n# Extension: .dmp\n# Created by: Andreas Schuster (http://computer.forensikblog.de/)\n# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html\n# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)\n0\tstring\t\tPAGE\t\t\n>4\tstring\t\tDUMP\t\tMS Windows 32bit crash dump\n>>0x05c\tbyte            0\t\t\\b, no PAE\n>>0x05c\tbyte            1\t\t\\b, PAE\n>>0xf88\tlelong\t\t1\t\t\\b, full dump\n>>0xf88\tlelong\t\t2\t\t\\b, kernel dump\n>>0xf88\tlelong\t\t3\t\t\\b, small dump\n>>0x068\tlelong\t\tx\t\t\\b, %ld pages\n>4\tstring\t\tDU64\t\tMS Windows 64bit crash dump\n>>0xf98\tlelong\t\t1\t\t\\b, full dump\n>>0xf98\tlelong\t\t2\t\t\\b, kernel dump\n>>0xf98\tlelong\t\t3\t\t\\b, small dump\n>>0x090\tlequad\t\tx\t\t\\b, %lld pages\n\n\n# Summary: Vista Event Log\n# Extension: .evtx\n# Created by: Andreas Schuster (http://computer.forensikblog.de/)\n# Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html\n0\tstring\t\tElfFile\\0\tMS Windows Vista Event Log\n>0x2a\tleshort\t\tx\t\t\\b, %d chunks\n>>0x10\tlelong\t\tx\t\t\\b (no. %d in use)\n>0x18\tlelong\t\t>1\t\t\\b, next record no. %d\n>0x18\tlelong\t\t=1\t\t\\b, empty\n>0x78\tlelong\t\t&1\t\t\\b, DIRTY\n>0x78\tlelong\t\t&2\t\t\\b, FULL\n\n\n# Summary: Windows 3.1 group files\n# Extension: .grp\n# Created by: unknown\n0\tstring\t\t\\120\\115\\103\\103\tMS Windows 3.1 group files\n\n\n# Summary: Old format help files\n# Extension: .hlp\n# Created by: Dirk Jagdmann <doj@cubic.org>\n0\tlelong\t\t0x00035f3f\t\tMS Windows 3.x help file\n\n\n# Summary: Hyper terminal\n# Extension: .ht\n# Created by: unknown\n0\tstring\t\tHyperTerminal\\ \n>15\tstring\t\t1.0\\ --\\ HyperTerminal\\ data\\ file\tMS Windows HyperTerminal profile\n\n\n# Summary: Windows shortcut\n# Extension: .lnk\n# Created by: unknown\n0\tstring\t\t\\114\\0\\0\\0\\001\\024\\002\\0\\0\\0\\0\\0\\300\\0\\0\\0\\0\\0\\0\\106\tMS Windows shortcut\n\n\n# Summary: Outlook Personal Folders\n# Created by: unknown\n0\tlelong\t\t0x4E444221\tMicrosoft Outlook email folder\n>10\tleshort\t\t0x0e\t\t(<=2002)\n>10\tleshort\t\t0x17\t\t(>=2003)\n\n\n# Summary: Windows help cache\n# Created by: unknown\n0\tstring\t\t\\164\\146\\115\\122\\012\\000\\000\\000\\001\\000\\000\\000\tMS Windows help cache\n\n\n# Summary: IE cache file\n# Created by: Christophe Monniez\n0\tstring\tClient\\ UrlCache\\ MMF \tInternet Explorer cache file\n>20\tstring\t>\\0\t\t\tversion %s\n\n\n# Summary: Registry files\n# Created by: unknown\n# Modified by (1): Joerg Jenderek\n0\tstring\t\tregf\t\tMS Windows registry file, NT/2000 or above\n0\tstring\t\tCREG\t\tMS Windows 95/98/ME registry file\n0\tstring\t\tSHCC3\t\tMS Windows 3.1 registry file\n\n\n# Summary: Windows Registry text\n# Extension: .reg\n# Submitted by: Abel Cheung <abelcheung@gmail.com>\n0\tstring\t\tREGEDIT4\\r\\n\\r\\n\tWindows Registry text (Win95 or above)\n0\tstring\t\tWindows\\ Registry\\ Editor\\ \n>&0\tstring\t\tVersion\\ 5.00\\r\\n\\r\\n\tWindows Registry text (Win2K or above)\n\n\n# From: Pal Tamas <folti@balabit.hu>\n# Autorun File\n0       string/c          [autorun]\\r\\n   Microsoft Windows Autorun file.\n!:mime\tapplication/x-setupscript. \n\n#------------------------------------------------------------------------------\n# $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $\n# wireless-regdb:        file(1) magic for CRDA wireless-regdb file format\n#\n0\tstring\tRGDB\tCRDA wireless regulatory database file\n>4\tbelong\t19\t(Version 1)\n\n#------------------------------------------------------------------------------\n# $File: wordprocessors,v 1.14 2009/09/19 16:28:13 christos Exp $\n# wordprocessors:  file(1) magic fo word processors.\n#\n####### PWP file format used on Smith Corona Personal Word Processors:\n2\tstring\t\\040\\040\\040\\040\\040\\040\\040\\040\\040\\040\\040ML4D\\040'92\tSmith Corona PWP\n>24\tbyte\t2\t\\b, single spaced\n>24\tbyte\t3\t\\b, 1.5 spaced\n>24\tbyte\t4\t\\b, double spaced\n>25\tbyte\t0x42\t\\b, letter\n>25\tbyte\t0x54\t\\b, legal\n>26\tbyte\t0x46\t\\b, A4\n\n#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE\n0\tstring\t\\377WPC\\020\\000\\000\\000\\022\\012\\001\\001\\000\\000\\000\\000\t(WP) loadable file\n>15\tbyte\t0\tOptimized for Intel\n>15\tbyte\t1\tOptimized for Non-Intel\n1\tstring\tWPC\t(Corel/WP)\n>8\tshort\t257\tWordPerfect macro\n>8\tshort\t258\tWordPerfect help file\n>8\tshort\t259\tWordPerfect keyboard file\n>8\tshort\t266\tWordPerfect document\n>8\tshort\t267\tWordPerfect dictionary\n>8\tshort\t268\tWordPerfect thesaurus\n>8\tshort\t269\tWordPerfect block\n>8\tshort\t270\tWordPerfect rectangular block\n>8\tshort\t271\tWordPerfect column block\n>8\tshort\t272\tWordPerfect printer data\n>8\tshort\t275\tWordPerfect printer data\n>8\tshort\t276\tWordPerfect driver resource data\n>8\tshort\t279\tWordPerfect hyphenation code\n>8\tshort\t280\tWordPerfect hyphenation data\n>8\tshort\t281\tWordPerfect macro resource data\n>8\tshort\t283\tWordPerfect hyphenation lex\n>8\tshort\t285\tWordPerfect wordlist\n>8\tshort\t286\tWordPerfect equation resource data\n>8\tshort\t289\tWordPerfect spell rules\n>8\tshort\t290\tWordPerfect dictionary rules\n>8\tshort\t295\tWordPerfect spell rules (Microlytics)\n>8\tshort\t299\tWordPerfect settings file\n>8\tshort\t301\tWordPerfect 4.2 document\n>8\tshort\t325\tWordPerfect dialog file\n>8\tshort\t332\tWordPerfect button bar\n>8\tshort\t513\tShell macro\n>8\tshort\t522\tShell definition\n>8\tshort\t769\tNotebook macro\n>8\tshort\t770\tNotebook help file\n>8\tshort\t771\tNotebook keyboard file\n>8\tshort\t778\tNotebook definition\n>8\tshort\t1026\tCalculator help file\n>8\tshort \t1538\tCalendar help file\n>8\tshort \t1546\tCalendar data file\n>8\tshort\t1793\tEditor macro\n>8\tshort\t1794\tEditor help file\n>8\tshort\t1795\tEditor keyboard file\n>8\tshort\t1817\tEditor macro resource file\n>8\tshort \t2049\tMacro editor macro\n>8\tshort \t2050\tMacro editor help file\n>8\tshort\t2051\tMacro editor keyboard file\n>8\tshort\t2305\tPlanPerfect macro\n>8\tshort\t2306\tPlanPerfect help file\n>8\tshort\t2307\tPlanPerfect keyboard file\n>8\tshort\t2314\tPlanPerfect worksheet\n>8\tshort\t2319\tPlanPerfect printer definition\n>8\tshort\t2322\tPlanPerfect graphic definition\n>8\tshort\t2323\tPlanPerfect data\n>8\tshort\t2324\tPlanPerfect temporary printer\n>8\tshort\t2329\tPlanPerfect macro resource data\n>8\tbyte\t11\tMail\n>8\tshort\t2818\thelp file\n>8\tshort\t2821\tdistribution list\n>8\tshort\t2826\tout box\n>8\tshort\t2827\tin box\n>8\tshort\t2836\tusers archived mailbox\n>8\tshort\t2837\tarchived message database\n>8\tshort\t2838\tarchived attachments\n>8\tshort\t3083\tPrinter temporary file\n>8\tshort\t3330\tScheduler help file\n>8\tshort\t3338\tScheduler in file\n>8\tshort\t3339\tScheduler out file\n>8\tshort\t3594\tGroupWise settings file\n>8\tshort\t3601\tGroupWise directory services\n>8\tshort\t3627\tGroupWise settings file\n>8\tshort\t4362\tTerminal resource data\n>8\tshort\t4363\tTerminal resource data\n>8\tshort\t4395\tTerminal resource data\n>8\tshort\t4619\tGUI loadable text\n>8\tshort\t4620\tgraphics resource data\n>8\tshort\t4621\tprinter settings file\n>8\tshort\t4622\tport definition file\n>8\tshort\t4623\tprint queue parameters\n>8\tshort\t4624\tcompressed file\n>8\tshort\t5130\tNetwork service msg file\n>8\tshort\t5131\tNetwork service msg file\n>8\tshort\t5132\tAsync gateway login msg\n>8\tshort\t5134\tGroupWise message file\n>8\tshort\t7956\tGroupWise admin domain database\n>8\tshort\t7957\tGroupWise admin host database\n>8\tshort\t7959\tGroupWise admin remote host database\n>8\tshort\t7960\tGroupWise admin ADS deferment data file\n>8\tshort\t8458\tIntelliTAG (SGML) compiled DTD\n>8\tlong\t18219264\tWordPerfect graphic image (1.0)\n>8\tlong\t18219520\tWordPerfect graphic image (2.0)\n#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE\n\n# Hangul (Korean) Word Processor File\n0\tstring\tHWP\\ Document\\ File\tHangul (Korean) Word Processor File 3.0\n# From: Won-Kyu Park <wkpark@kldp.org>\n512\tstring\t\tR\\0o\\0o\\0t\\0\tHangul (Korean) Word Processor File 2000\n!:mime\tapplication/x-hwp\n\n# CosmicBook, from Benoît Rouits\n0       string  CSBK    Ted Neslson's CosmicBook hypertext file\n\n2       string  EYWR    AmigaWriter file\n\n# chi:  file(1) magic for ChiWriter files\n0       string          \\\\1cw\\          ChiWriter file\n>5      string          >\\0             version %s\n0       string          \\\\1cw           ChiWriter file\n\n# Quark Express from http://www.garykessler.net/library/file_sigs.html\n2\tstring\tIIXPR3\t\t\tIntel Quark Express Document (English)\n2\tstring\tIIXPRa\t\t\tIntel Quark Express Document (Korean)\n2\tstring\tMMXPR3\t\t\tMotorola Quark Express Document (English)\n!:mime\tapplication/x-quark-xpress-3\n2\tstring\tMMXPRa\t\t\tMotorola Quark Express Document (Korean)\n\n# adobe indesign (document, whatever...) from querkan\n0\tbelong\t0x0606edf5\t\tAdobe InDesign\n>16\tstring\tDOCUMENT\t\tDocument\n\n#------------------------------------------------------------------------------\n# ichitaro456: file(1) magic for Just System Word Processor Ichitaro\n#\n# Contributor kenzo-:\n# Reversed-engineered JS Ichitaro magic numbers\n#\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x14\tJust System Word Processor Ichitaro v4\n!:mime\tapplication/x-ichitaro4\n>144\tstring\tJDASH\t\tapplication/x-ichitaro4\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x15\tJust System Word Processor Ichitaro v5\n!:mime\tapplication/x-ichitaro5\n\n0\tstring\t\tDOC\n>43\tbyte\t\t0x16\tJust System Word Processor Ichitaro v6\n!:mime\tapplication/x-ichitaro6\n\n# Type: Freemind mindmap documents\n# From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk>\n0\tstring/w\t\\<map\\ version\tFreemind document\n!:mime\tapplication/x-freemind\n\n# Type:        Scribus\n# From:        Werner Fink <werner@suse.de>\n0\tstring\t\\<SCRIBUSUTF8\\ Version\t\tScribus Document\n0\tstring\t\\<SCRIBUSUTF8NEW\\ Version\tScribus Document\n!:mime\tapplication/x-scribus\n\n#------------------------------------------------------------------------------\n# $File: xdelta,v 1.4 2009/09/19 16:28:13 christos Exp $\n# file(1) magic(5) data for xdelta  Josh MacDonald <jmacd@CS.Berkeley.EDU>\n#\n0\tstring\t%XDELTA%\tXDelta binary patch file 0.14\n0\tstring\t%XDZ000%\tXDelta binary patch file 0.18\n0\tstring\t%XDZ001%\tXDelta binary patch file 0.20\n0\tstring\t%XDZ002%\tXDelta binary patch file 1.0\n0\tstring\t%XDZ003%\tXDelta binary patch file 1.0.4\n0\tstring\t%XDZ004%\tXDelta binary patch file 1.1\n\n#------------------------------------------------------------------------------\n# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $\n# xenix:  file(1) magic for Microsoft Xenix\n#\n# \"Middle model\" stuff, and \"Xenix 8086 relocatable or 80286 small\n# model\" lifted from \"magic.xenix\", with comment \"derived empirically;\n# treat as folklore until proven\"\n#\n# \"small model\", \"large model\", \"huge model\" stuff lifted from XXX\n#\n# XXX - \"x.out\" collides with PDP-11 archives\n#\n0\tstring\t\tcore\t\tcore file (Xenix)\n0\tbyte\t\t0x80\t\t8086 relocatable (Microsoft)\n0\tleshort\t\t0xff65\t\tx.out\n>2\tstring\t\t__.SYMDEF\t randomized\n>0\tbyte\t\tx\t\tarchive\n0\tleshort\t\t0x206\t\tMicrosoft a.out\n>8\tleshort\t\t1\t\tMiddle model\n>0x1e\tleshort\t\t&0x10\t\toverlay\n>0x1e\tleshort\t\t&0x2\t\tseparate\n>0x1e\tleshort\t\t&0x4\t\tpure\n>0x1e\tleshort\t\t&0x800\t\tsegmented\n>0x1e\tleshort\t\t&0x400\t\tstandalone\n>0x1e\tleshort\t\t&0x8\t\tfixed-stack\n>0x1c\tbyte\t\t&0x80\t\tbyte-swapped\n>0x1c\tbyte\t\t&0x40\t\tword-swapped\n>0x10\tlelong\t\t>0\t\tnot-stripped\n>0x1e\tleshort\t\t^0xc000\t\tpre-SysV\n>0x1e\tleshort\t\t&0x4000\t\tV2.3\n>0x1e\tleshort\t\t&0x8000\t\tV3.0\n>0x1c\tbyte\t\t&0x4\t\t86\n>0x1c\tbyte\t\t&0xb\t\t186\n>0x1c\tbyte\t\t&0x9\t\t286\n>0x1c\tbyte\t\t&0xa\t\t386\n>0x1f\tbyte\t\t<0x040\t\tsmall model\n>0x1f\tbyte\t\t=0x048\t\tlarge model\t\n>0x1f\tbyte\t\t=0x049\t\thuge model \n>0x1e\tleshort\t\t&0x1\t\texecutable\n>0x1e\tleshort\t\t^0x1\t\tobject file\n>0x1e\tleshort\t\t&0x40\t\tLarge Text\n>0x1e\tleshort\t\t&0x20\t\tLarge Data\n>0x1e\tleshort\t\t&0x120\t\tHuge Objects Enabled\n>0x10\tlelong\t\t>0\t\tnot stripped\n\n0\tleshort\t\t0x140\t\told Microsoft 8086 x.out\n>0x3\tbyte\t\t&0x4\t\tseparate\n>0x3\tbyte\t\t&0x2\t\tpure\n>0\tbyte\t\t&0x1\t\texecutable\n>0\tbyte\t\t^0x1\t\trelocatable\n>0x14\tlelong\t\t>0\t\tnot stripped\n\n0\tlelong\t\t0x206\t\tb.out\n>0x1e\tleshort\t\t&0x10\t\toverlay\n>0x1e\tleshort\t\t&0x2\t\tseparate\n>0x1e\tleshort\t\t&0x4\t\tpure\n>0x1e\tleshort\t\t&0x800\t\tsegmented\n>0x1e\tleshort\t\t&0x400\t\tstandalone\n>0x1e\tleshort\t\t&0x1\t\texecutable\n>0x1e\tleshort\t\t^0x1\t\tobject file\n>0x1e\tleshort\t\t&0x4000\t\tV2.3\n>0x1e\tleshort\t\t&0x8000\t\tV3.0\n>0x1c\tbyte\t\t&0x4\t\t86\n>0x1c\tbyte\t\t&0xb\t\t186\n>0x1c\tbyte\t\t&0x9\t\t286\n>0x1c\tbyte\t\t&0x29\t\t286\n>0x1c\tbyte\t\t&0xa\t\t386\n>0x1e\tleshort\t\t&0x4\t\tLarge Text\n>0x1e\tleshort\t\t&0x2\t\tLarge Data\n>0x1e\tleshort\t\t&0x102\t\tHuge Objects Enabled\n\n0\tleshort\t\t0x580\t\tXENIX 8086 relocatable or 80286 small model\n\n#------------------------------------------------------------------------------\n# $File: xilinx,v 1.4 2009/09/19 16:28:13 christos Exp $\n# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.\n# Xilinx-Magic@RevRagnarok.com\n# Got the info from FPGA-FAQ 0026\n#\n# First there is the sync header and its length\n0\tbeshort 0x0009\n>2 \tbelong\t=0x0ff00ff0\n>>&0\tbelong  =0x0ff00ff0\n>>>&0\tbeshort =0x0000\t\n>>>>&0\tpstring\ta\tXilinx BIT data\n# Next is a Pascal-style string with the NCD name. We want to capture that.\n>>>>0x0F\tpstring\tx\t- from %s\n# It is followed by a NUL\n>>>>>&1\tbyte\t0x00\n# And then 'b'\n>>>>>&2\tstring b\n# With the part number:\n#>>>>>&5 string\t4v\t(Virtex4)\n#>>>>>&5 string  2v\t(Virtex II\n#>>>>>>&0\tstring\t!p\t\\b)\n#>>>>>>&0\tstring\tp\tPro)\n>>>>>&4\tpstring x\t- for %s\n# And then NUL / 'c' / Build Data / NUL / 'd' / Date / NUL / 'e' / Data Length\n>>>>>>&1\tbyte\t0x00\n>>>>>>&2\tstring\tc\n>>>>>>&4\tpstring\tx\t- built %s\n>>>>>>>&1\tbyte\t0x00\n>>>>>>>&2\tstring\td\n>>>>>>>&4\tpstring\tx\t\\b(%s)\n>>>>>>>>&1\tbyte\t0x00\n>>>>>>>>&2\tstring\te\n>>>>>>>>&4\tbelong\tx\t- data length 0x%lx\n\n#------------------------------------------------------------------------------\n# $File: xo65,v 1.4 2009/09/19 16:28:13 christos Exp $\n# xo65 object files\n# From: \"Ullrich von Bassewitz\" <uz@cc65.org>\n#\n0\tstring\t\t\\x55\\x7A\\x6E\\x61\txo65 object,\n>4\tleshort\t\tx\t\t\tversion %d,\n>6\tleshort&0x0001 =0x0001\t\t\twith debug info\n>6\tleshort&0x0001 =0x0000\t\t\tno debug info\n\n# xo65 library files\n0\tstring\t\t\\x6E\\x61\\x55\\x7A\txo65 library,\n>4\tleshort\t\tx\t\t\tversion %d\n\n# o65 object files\n0\tstring\t\t\\x01\\x00\\x6F\\x36\\x35\to65\n>6\tleshort&0x1000\t=0x0000\t\t\texecutable,\n>6\tleshort&0x1000\t=0x1000\t\t\tobject,\n>5\tbyte\t\tx\t\t\tversion %d,\n>6\tleshort&0x8000\t=0x8000\t\t\t65816,\n>6\tleshort&0x8000\t=0x0000\t\t\t6502,\n>6\tleshort&0x2000\t=0x2000\t\t\t32 bit,\n>6\tleshort&0x2000\t=0x0000\t\t\t16 bit,\n>6\tleshort&0x4000\t=0x4000\t\t\tpage reloc,\n>6\tleshort&0x4000\t=0x0000\t\t\tbyte reloc,\n>6\tleshort&0x0003\t=0x0000\t\t\talignment 1\n>6\tleshort&0x0003\t=0x0001\t\t\talignment 2\n>6\tleshort&0x0003\t=0x0002\t\t\talignment 4\n>6\tleshort&0x0003\t=0x0003\t\t\talignment 256\n\n#------------------------------------------------------------------------------\n# $File: xwindows,v 1.6 2009/09/19 16:28:13 christos Exp $\n# xwindows:  file(1) magic for various X/Window system file formats.\n\n# Compiled X Keymap \n# XKM (compiled X keymap) files (including version and byte ordering)\n1\tstring\tmkx\t\t\t\tCompiled XKB Keymap: lsb,\n>0\tbyte\t>0\t\t\t\tversion %d\n>0\tbyte\t=0\t\t\t\tobsolete\n0\tstring\txkm\t\t\t\tCompiled XKB Keymap: msb,\n>3\tbyte\t>0\t\t\t\tversion %d\n>0\tbyte\t=0\t\t\t\tobsolete\n\n# xfsdump archive\n0\tstring\txFSdump0\t\t\txfsdump archive\n>8\tbelong\tx\t(version %d)\n\n# Jaleo XFS files\n0\tlong\t395726\t\t\t\tJaleo XFS file\n>4\tlong\tx\t\t\t\t- version %ld\n>8\tlong\tx\t\t\t\t- [%ld -\n>20\tlong\tx\t\t\t\t\b%ldx\n>24\tlong\tx\t\t\t\t\b%ldx\n>28\tlong\t1008\t\t\t\t\bYUV422]\n>28\tlong\t1000\t\t\t\t\bRGB24]\n\n# Xcursor data\n# X11 mouse cursor format defined in libXcursor, see\n# http://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html\n# http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h\n0\tstring\t\tXcur\t\tXcursor data\n!:mime\timage/x-xcursor\n>10\tleshort\t\tx\t\tversion %hd\n>>8\tleshort\t\tx\t\t\\b.%hd\n\n#------------------------------------------------------------------------------\n# $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $\n# zilog:  file(1) magic for Zilog Z8000.\n#\n# Was it big-endian or little-endian?  My Product Specification doesn't\n# say.\n#\n0\tlong\t\t0xe807\t\tobject file (z8000 a.out)\n0\tlong\t\t0xe808\t\tpure object file (z8000 a.out)\n0\tlong\t\t0xe809\t\tseparate object file (z8000 a.out)\n0\tlong\t\t0xe805\t\toverlay object file (z8000 a.out)\n\n#------------------------------------------------------------------------------\n# $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $\n# zyxel:  file(1) magic for ZyXEL modems\n#\n# From <rob@pe1chl.ampr.org>\n# These are the /etc/magic entries to decode datafiles as used for the\n# ZyXEL U-1496E DATA/FAX/VOICE modems.  (This header conforms to a\n# ZyXEL-defined standard)\n\n0\tstring\t\tZyXEL\\002\tZyXEL voice data\n>10\tbyte\t\t0\t\t- CELP encoding\n>10\tbyte&0x0B\t1\t\t- ADPCM2 encoding\n>10\tbyte&0x0B\t2\t\t- ADPCM3 encoding\n>10\tbyte&0x0B\t3\t\t- ADPCM4 encoding\n>10\tbyte&0x0B\t8\t\t- New ADPCM3 encoding\n>10\tbyte&0x04\t4\t\twith resync\n"
  },
  {
    "path": "test/File/_files/wordcount.txt",
    "content": "This is the testfile number 3. It should have 9 words."
  },
  {
    "path": "test/GPSPointTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\GpsPoint;\n\n/**\n * @group      Zend_Validator\n */\nclass GPSPointTest extends TestCase\n{\n\n    /**\n     * @var GpsPoint\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new GpsPoint();\n    }\n\n\n    /**\n     * @dataProvider basicDataProvider\n     * @covers \\Zend\\Validator\\GPSPoint::isValid\n     */\n    public function testBasic($gpsPoint)\n    {\n        $this->assertTrue($this->validator->isValid($gpsPoint));\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\GPSPoint::isValid\n     */\n    public function testBoundariesAreRespected()\n    {\n        $this->assertFalse($this->validator->isValid('181.8897,-77.0089'));\n        $this->assertFalse($this->validator->isValid('38.8897,-181.0089'));\n        $this->assertFalse($this->validator->isValid('-181.8897,-77.0089'));\n        $this->assertFalse($this->validator->isValid('38.8897,181.0089'));\n    }\n\n    /**\n     * @covers \\Zend\\Validator\\GPSPoint::isValid\n     * @dataProvider ErrorMessageTestValues\n     */\n    public function testErrorsSetOnOccur($value, $messageKey, $messageValue)\n    {\n        $this->assertFalse($this->validator->isValid($value));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey($messageKey, $messages);\n        $this->assertContains($messageValue, $messages[$messageKey]);\n    }\n\n    public function basicDataProvider()\n    {\n        return [\n            ['38° 53\\' 23\" N, 77° 00\\' 32\" W'],\n            ['15° 22\\' 20.137\" S, 35° 35\\' 14.686\" E'],\n            ['65° 4\\' 36.434\" N,-22.728867530822754'],\n            ['38.8897°, -77.0089°'],\n            ['38.8897,-77.0089']\n        ];\n    }\n    // @codingStandardsIgnoreStart\n    public function ErrorMessageTestValues()\n    {\n        // @codingStandardsIgnoreEnd\n        return [\n            ['63 47 24.691 N, 18 2 54.363 W', GpsPoint::OUT_OF_BOUNDS, '63 47 24.691 N'],\n            ['° \\' \" N,° \\' \" E', GpsPoint::CONVERT_ERROR, '° \\' \" N'],\n            ['° \\' \" N', GpsPoint::INCOMPLETE_COORDINATE, '° \\' \" N'],\n        ];\n    }\n}\n"
  },
  {
    "path": "test/GreaterThanTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\GreaterThan;\n\n/**\n * @group      Zend_Validator\n */\nclass GreaterThanTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        /**\n         * The elements of each array are, in order:\n         *      - minimum\n         *      - expected validation result\n         *      - array of test input values\n         */\n        $valuesExpected = [\n            [0, true, [0.01, 1, 100]],\n            [0, false, [0, 0.00, -0.01, -1, -100]],\n            ['a', true, ['b', 'c', 'd']],\n            ['z', false, ['x', 'y', 'z']],\n            [['min' => 0, 'inclusive' => true], true, [0, 0.00, 0.01, 1, 100]],\n            [['min' => 0, 'inclusive' => true], false, [-0.01, -1, -100]],\n            [['min' => 0, 'inclusive' => false], true, [0.01, 1, 100]],\n            [['min' => 0, 'inclusive' => false], false, [0, 0.00, -0.01, -1, -100]]\n        ];\n\n        foreach ($valuesExpected as $element) {\n            $validator = new GreaterThan($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals($element[1], $validator->isValid($input));\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new GreaterThan(10);\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that getMin() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $validator = new GreaterThan(10);\n        $this->assertEquals(10, $validator->getMin());\n    }\n\n    /**\n     * Ensures that getInclusive() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetInclusive()\n    {\n        $validator = new GreaterThan(10);\n        $this->assertEquals(false, $validator->getInclusive());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new GreaterThan(1);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new GreaterThan(1);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function testCorrectInclusiveMessageReturn()\n    {\n        $valuesToValidate = [0, 0.5, 5, 10];\n\n        foreach ($valuesToValidate as $value) {\n            $validator = new GreaterThan(10);\n            $validator->isValid($value);\n            $message = $validator->getMessages();\n\n            $this->assertArrayHaskey('notGreaterThan', $message);\n            $this->assertEquals($message['notGreaterThan'], \"The input is not greater than '10'\");\n        }\n    }\n\n    public function testCorrectNotInclusiveMessageReturn()\n    {\n        $valuesToValidate = [0, 0.5, 5, 9];\n\n        foreach ($valuesToValidate as $value) {\n            $validator = new GreaterThan(['min' => 10, 'inclusive' => true]);\n            $validator->isValid($value);\n            $message = $validator->getMessages();\n\n            $this->assertArrayHaskey('notGreaterThanInclusive', $message);\n            $this->assertEquals($message['notGreaterThanInclusive'], \"The input is not greater than or equal to '10'\");\n        }\n    }\n\n    public function testConstructorCanAcceptInclusiveFlagAsAnArgument()\n    {\n        $validator = new GreaterThan(10, true);\n        $this->assertTrue($validator->getInclusive());\n    }\n}\n"
  },
  {
    "path": "test/HexTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Hex;\n\n/**\n * @group      Zend_Validator\n */\nclass HexTest extends TestCase\n{\n    /**\n     * @var Hex\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Hex();\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $valuesExpected = [\n            [1, true],\n            [0x1, true],\n            [0x123, true],\n            ['1', true],\n            ['abc123', true],\n            ['ABC123', true],\n            ['1234567890abcdef', true],\n            ['g', false],\n            ['1.2', false]\n            ];\n        foreach ($valuesExpected as $element) {\n            $this->assertEquals($element[1], $this->validator->isValid($element[0]), $element[0]);\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/HostnameTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Hostname;\n\n/**\n * @group      Zend_Validator\n */\nclass HostnameTest extends TestCase\n{\n    /**\n     * Default instance created for all test methods\n     *\n     * @var Hostname\n     */\n    protected $validator;\n\n    /**\n     * @var string\n     */\n    protected $origEncoding;\n\n    public function setUp()\n    {\n        $this->origEncoding = PHP_VERSION_ID < 50600\n            ? iconv_get_encoding('internal_encoding')\n            : ini_get('default_charset');\n        $this->validator = new Hostname();\n    }\n\n    /**\n     * Reset iconv\n     */\n    public function tearDown()\n    {\n        if (PHP_VERSION_ID < 50600) {\n            iconv_set_encoding('internal_encoding', $this->origEncoding);\n        } else {\n            ini_set('default_charset', $this->origEncoding);\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $valuesExpected = [\n            [Hostname::ALLOW_IP, true, ['1.2.3.4', '10.0.0.1', '255.255.255.255']],\n            [Hostname::ALLOW_IP, false, ['1.2.3.4.5', '0.0.0.256']],\n            [Hostname::ALLOW_DNS, true, ['example.com', 'example.museum', 'd.hatena.ne.jp', 'example.photography']],\n            [Hostname::ALLOW_DNS, false, ['localhost', 'localhost.localdomain', '1.2.3.4', 'domain.invalid']],\n            [Hostname::ALLOW_LOCAL, true, ['localhost', 'localhost.localdomain', 'example.com']],\n            [Hostname::ALLOW_ALL, true, ['localhost', 'example.com', '1.2.3.4']],\n            [Hostname::ALLOW_LOCAL, false, ['local host', 'example,com', 'exam_ple.com']]\n        ];\n        foreach ($valuesExpected as $element) {\n            $validator = new Hostname($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals(\n                    $element[1],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    public function testCombination()\n    {\n        $valuesExpected = [\n            [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, true, ['domain.com', 'localhost', 'local.localhost']],\n            [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, false, ['1.2.3.4', '255.255.255.255']],\n            [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, true, ['1.2.3.4', '255.255.255.255']],\n            [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, false, ['localhost', 'local.localhost']]\n            ];\n        foreach ($valuesExpected as $element) {\n            $validator = new Hostname($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals(\n                    $element[1],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensure the dash character tests work as expected\n     *\n     */\n    public function testDashes()\n    {\n        $valuesExpected = [\n            [Hostname::ALLOW_DNS, true, ['domain.com', 'doma-in.com']],\n            [Hostname::ALLOW_DNS, false, ['-domain.com', 'domain-.com', 'do--main.com']]\n            ];\n        foreach ($valuesExpected as $element) {\n            $validator = new Hostname($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals(\n                    $element[1],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * @return iterable\n     */\n    public function domainsWithUnderscores()\n    {\n        yield 'subdomain with leading underscore' => [\n            '_subdomain.domain.com',\n            'assertTrue',\n        ];\n\n        yield 'subdomain with trailing underscore' => [\n            'subdomain_.domain.com',\n            'assertTrue',\n        ];\n\n        yield 'subdomain with single underscore' => [\n            'sub_domain.domain.com',\n            'assertTrue',\n        ];\n\n        yield 'subdomain with double underscore' => [\n            'sub__domain.domain.com',\n            'assertTrue',\n        ];\n\n        yield 'root domain with leading underscore' => [\n            '_domain.com',\n            'assertFalse',\n        ];\n\n        yield 'root domain with trailing underscore' => [\n            'domain_.com',\n            'assertFalse',\n        ];\n\n        yield 'root domain with underscore' => [\n            'do_main.com',\n            'assertFalse',\n        ];\n    }\n\n    /**\n     * Ensure the underscore character tests work as expected\n     *\n     * @dataProvider domainsWithUnderscores\n     * @param string $input\n     * @param string $assertion\n     */\n    public function testValidatorHandlesUnderscoresInDomainsCorrectly($input, $assertion)\n    {\n        $validator = new Hostname(Hostname::ALLOW_DNS);\n        $this->$assertion($validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n    }\n\n    /**\n     * Ensure the underscore character tests work as expected when not using tld check\n     *\n     * @dataProvider domainsWithUnderscores\n     * @param string $input\n     * @param string $assertion\n     */\n    public function testValidatorHandlesUnderscoresInDomainsWithoutTldCheckCorrectly($input, $assertion)\n    {\n        $validator = new Hostname([\n            'useTldCheck' => false,\n            'allow' => Hostname::ALLOW_DNS,\n        ]);\n        $this->$assertion($validator->isValid($input), implode(\"\\n\", $validator->getMessages()));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensure the IDN check works as expected\n     *\n     */\n    public function testIDN()\n    {\n        $validator = new Hostname();\n\n        // Check IDN matching\n        $valuesExpected = [\n            [true, ['bürger.de', 'hãllo.de', 'hållo.se']],\n            [true, ['bÜrger.de', 'hÃllo.de', 'hÅllo.se']],\n            [false, ['hãllo.se', 'bürger.lt', 'hãllo.uk']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check no IDN matching\n        $validator->useIdnCheck(false);\n        $valuesExpected = [\n            [false, ['bürger.de', 'hãllo.de', 'hållo.se']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check setting no IDN matching via constructor\n        unset($validator);\n        $validator = new Hostname(Hostname::ALLOW_DNS, false);\n        $valuesExpected = [\n            [false, ['bürger.de', 'hãllo.de', 'hållo.se']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensure the IDN check works on resource files as expected\n     *\n     */\n    public function testResourceIDN()\n    {\n        $validator = new Hostname();\n\n        // Check IDN matching\n        $valuesExpected = [\n            [true, ['bürger.com', 'hãllo.com', 'hållo.com', 'plekitööd.ee']],\n            [true, ['bÜrger.com', 'hÃllo.com', 'hÅllo.com', 'plekitÖÖd.ee']],\n            [false, ['hãllo.lt', 'bürger.lt', 'hãllo.lt']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check no IDN matching\n        $validator->useIdnCheck(false);\n        $valuesExpected = [\n            [false, ['bürger.com', 'hãllo.com', 'hållo.com']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check setting no IDN matching via constructor\n        unset($validator);\n        $validator = new Hostname(Hostname::ALLOW_DNS, false);\n        $valuesExpected = [\n            [false, ['bürger.com', 'hãllo.com', 'hållo.com']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensure the TLD check works as expected\n     *\n     */\n    public function testTLD()\n    {\n        $validator = new Hostname();\n\n        // Check TLD matching\n        $valuesExpected = [\n            [true, ['domain.co.uk', 'domain.uk.com', 'domain.tl', 'domain.zw']],\n            [false, ['domain.xx', 'domain.zz', 'domain.madeup']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check no TLD matching\n        $validator->useTldCheck(false);\n        $valuesExpected = [\n            [true, ['domain.xx', 'domain.zz', 'domain.madeup']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n\n        // Check setting no TLD matching via constructor\n        unset($validator);\n        $validator = new Hostname(Hostname::ALLOW_DNS, true, false);\n        $valuesExpected = [\n            [true, ['domain.xx', 'domain.zz', 'domain.madeup']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensures that getAllow() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetAllow()\n    {\n        $this->assertEquals(Hostname::ALLOW_DNS, $this->validator->getAllow());\n    }\n\n    /**\n     * Test changed with ZF-6676, as IP check is only involved when IP patterns match\n     *\n     * @group ZF-2861\n     * @group ZF-6676\n     */\n    public function testValidatorMessagesShouldBeTranslated()\n    {\n        if (! extension_loaded('intl')) {\n            $this->markTestSkipped('ext/intl not enabled');\n        }\n\n        $translations = [\n            'hostnameInvalidLocalName' => 'The input does not appear to be a valid local network name',\n        ];\n        $loader = new TestAsset\\ArrayTranslator();\n        $loader->translations = $translations;\n        $translator = new TestAsset\\Translator();\n        $translator->getPluginManager()->setService('default', $loader);\n        $translator->addTranslationFile('default', null);\n        $this->validator->setTranslator($translator);\n\n        $this->validator->isValid('0.239,512.777');\n        $messages = $this->validator->getMessages();\n        $found = false;\n        foreach ($messages as $code => $message) {\n            if (array_key_exists($code, $translations)) {\n                $found = true;\n                break;\n            }\n        }\n\n        $this->assertTrue($found);\n        $this->assertEquals($translations[$code], $message);\n    }\n\n    /**\n     * @group ZF-6033\n     */\n    public function testNumberNames()\n    {\n        $validator = new Hostname();\n\n        // Check TLD matching\n        $valuesExpected = [\n            [true, ['www.danger1.com', 'danger.com', 'www.danger.com']],\n            [false, ['www.danger1com', 'dangercom', 'www.dangercom']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * @group ZF-6133\n     */\n    public function testPunycodeDecoding()\n    {\n        $validator = new Hostname();\n\n        // Check TLD matching\n        $valuesExpected = [\n            [true, ['xn--brger-kva.com', 'xn--eckwd4c7cu47r2wf.jp']],\n            [false, ['xn--brger-x45d2va.com', 'xn--bürger.com', 'xn--']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    /**\n     * @ZF-7323\n     */\n    public function testLatinSpecialChars()\n    {\n        $this->assertFalse($this->validator->isValid('place@yah&oo.com'));\n        $this->assertFalse($this->validator->isValid('place@y*ahoo.com'));\n        $this->assertFalse($this->validator->isValid('ya#hoo'));\n    }\n\n    /**\n     * @group ZF-7277\n     */\n    public function testDifferentIconvEncoding()\n    {\n        if (PHP_VERSION_ID < 50600) {\n            iconv_set_encoding('internal_encoding', 'ISO8859-1');\n        } else {\n            ini_set('default_charset', 'ISO8859-1');\n        }\n\n        $validator = new Hostname();\n\n        $valuesExpected = [\n            [true, ['bürger.com', 'hãllo.com', 'hållo.com']],\n            [true, ['bÜrger.com', 'hÃllo.com', 'hÅllo.com']],\n            [false, ['hãllo.lt', 'bürger.lt', 'hãllo.lt']]\n            ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * @ZF-8312\n     */\n    public function testInvalidDoubledIdn()\n    {\n        $this->assertFalse($this->validator->isValid('test.com / http://www.test.com'));\n    }\n\n    /**\n     * @group ZF-10267\n     */\n    public function testURI()\n    {\n        $valuesExpected = [\n            [Hostname::ALLOW_URI, true, ['localhost', 'example.com', '~ex%20ample']],\n            // @codingStandardsIgnoreStart\n            [Hostname::ALLOW_URI, false, ['§bad', 'don?t.know', 'thisisaverylonghostnamewhichextendstwohundredfiftysixcharactersandthereforshouldnotbeallowedbythisvalidatorbecauserfc3986limitstheallowedcharacterstoalimitoftwohunderedfiftysixcharactersinsumbutifthistestwouldfailthenitshouldreturntruewhichthrowsanexceptionbytheunittest']],\n            // @codingStandardsIgnoreEnd\n        ];\n        foreach ($valuesExpected as $element) {\n            $validator = new Hostname($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals(\n                    $element[1],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensure that a trailing \".\" in a local hostname is permitted\n     *\n     * @group ZF-6363\n     */\n    public function testTrailingDot()\n    {\n        $valuesExpected = [\n            [Hostname::ALLOW_ALL, true, ['example.', 'example.com.', '~ex%20ample.']],\n            [Hostname::ALLOW_ALL, false, ['example..']],\n            [Hostname::ALLOW_ALL, true, ['1.2.3.4.']],\n            [Hostname::ALLOW_DNS, false, ['example..', '~ex%20ample..']],\n            [Hostname::ALLOW_LOCAL, true, ['example.', 'example.com.']],\n        ];\n\n        foreach ($valuesExpected as $element) {\n            $validator = new Hostname($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals(\n                    $element[1],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) . $input\n                );\n            }\n        }\n    }\n\n    /**\n     * @group ZF-11334\n     */\n    public function testSupportsIpv6AddressesWhichContainHexDigitF()\n    {\n        $validator = new Hostname(Hostname::ALLOW_ALL);\n\n        $this->assertTrue($validator->isValid('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'));\n        $this->assertTrue($validator->isValid('1080:0:0:0:8:800:200C:417A'));\n        $this->assertTrue($validator->isValid('3ffe:2a00:100:7031::1'));\n        $this->assertTrue($validator->isValid('1080::8:800:200C:417A'));\n        $this->assertTrue($validator->isValid('::192.9.5.5'));\n        $this->assertTrue($validator->isValid('::FFFF:129.144.52.38'));\n        $this->assertTrue($validator->isValid('2010:836B:4179::836B:4179'));\n    }\n\n    /**\n     * Test extended greek charset\n     *\n     * @group ZF-11751\n     */\n    public function testExtendedGreek()\n    {\n        $validator = new Hostname(Hostname::ALLOW_ALL);\n        $this->assertEquals(true, $validator->isValid('ῆὧὰῧῲ.com'));\n    }\n\n    /**\n     * @group ZF-11796\n     */\n    public function testIDNSI()\n    {\n        $validator = new Hostname(Hostname::ALLOW_ALL);\n\n        $this->assertTrue($validator->isValid('Test123.si'));\n        $this->assertTrue($validator->isValid('țest123.si'));\n        $this->assertTrue($validator->isValid('tĕst123.si'));\n        $this->assertTrue($validator->isValid('tàrø.si'));\n        $this->assertFalse($validator->isValid('رات.si'));\n    }\n\n    /**\n     * @group Issue #5894 - Add .il IDN domain checking; add new TLDs\n     */\n    public function testIDNIL()\n    {\n        $validator = new Hostname(Hostname::ALLOW_ALL);\n\n        // Check .IL TLD matching\n        $valuesExpected = [\n            [true, ['xn----zhcbgfhe2aacg8fb5i.org.il', 'מבחן.il', 'מבחן123.il']],\n            [false, ['tבדיקה123.il', 'رات.il']] // Can't mix Latin and Hebrew character sets (except digits)\n        ];\n        foreach ($valuesExpected as $element) {\n            foreach ($element[1] as $input) {\n                $this->assertEquals(\n                    $element[0],\n                    $validator->isValid($input),\n                    implode(\"\\n\", $validator->getMessages()) .' - '. $input\n                );\n            }\n        }\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for UTF-8 and Punycoded (ACE) TLDs\n     *\n     * @dataProvider validTLDHostnames\n     */\n    public function testValidTLDHostnames($value)\n    {\n        $this->assertTrue(\n            $this->validator->isValid($value),\n            sprintf(\n                '%s failed validation: %s',\n                $value,\n                implode(\"\\n\", $this->validator->getMessages())\n            )\n        );\n    }\n\n    public function validTLDHostnames()\n    {\n        // @codingStandardsIgnoreStart\n        return [\n            'ASCII label + UTF-8 TLD'                    => ['test123.онлайн'],\n            'ASCII label + Punycoded TLD'                => ['test123.xn--80asehdb'],\n            'UTF-8 label + UTF-8 TLD (cyrillic)'         => ['тест.рф'],\n            'Punycoded label + Punycoded TLD (cyrillic)' => ['xn--e1aybc.xn--p1ai'],\n        ];\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior for invalid UTF-8 and Punycoded (ACE) TLDs\n     *\n     * @dataProvider invalidTLDHostnames\n     */\n    public function testInalidTLDHostnames($value)\n    {\n        $this->assertFalse($this->validator->isValid($value));\n    }\n\n    public function invalidTLDHostnames()\n    {\n        // @codingStandardsIgnoreStart\n        return [\n            'Invalid mix of UTF-8 and ASCII in label'                              => ['சோதனை3.இலங்கை'],\n            'Invalid mix of UTF-8 and ASCII in label (Punycoded)'                  => ['xn--3-owe4au9mpa.xn--xkc2al3hye2a'],\n            'Invalid use of non-cyrillic characters with cyrillic TLD'             => ['رات.мон'],\n            'Invalid use of non-cyrillic characters with cyrillic TLD (Punycoded)' => ['xn--mgbgt.xn--l1acc'],\n        ];\n        // @codingStandardsIgnoreEnd\n    }\n\n    public function testIDNIT()\n    {\n        $validator = new Hostname(Hostname::ALLOW_ALL);\n\n        $this->assertTrue($validator->isValid('plainascii.it'));\n        $this->assertTrue($validator->isValid('città-caffè.it'));\n        $this->assertTrue($validator->isValid('edgetest-àâäèéêëìîïòôöùûüæœçÿß.it'));\n        $this->assertFalse($validator->isValid('رات.it'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals($validator->getOption('messageTemplates'), 'messageTemplates', $validator);\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals($validator->getOption('messageVariables'), 'messageVariables', $validator);\n    }\n\n    public function testHostnameWithOnlyIpChars()\n    {\n        $validator = new Hostname();\n        $this->assertTrue($validator->isValid('cafecafe.de'));\n    }\n\n    public function testValidCnHostname()\n    {\n        $validator = new Hostname();\n        $this->assertTrue($validator->isValid('google.cn'));\n    }\n\n    public function testValidBizHostname()\n    {\n        $validator = new Hostname();\n        $this->assertTrue($validator->isValid('google.biz'));\n    }\n\n    public function testHostnameWithEmptyDomainPart()\n    {\n        $validator = new Hostname();\n        $this->assertFalse($validator->isValid('.com'));\n    }\n}\n"
  },
  {
    "path": "test/IbanTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\Iban as IbanValidator;\n\n/**\n * @group      Zend_Validator\n */\nclass IbanTest extends TestCase\n{\n    public function ibanDataProvider()\n    {\n        return [\n            ['AD1200012030200359100100', true],\n            ['AT611904300234573201',     true],\n            ['AT61 1904 3002 3457 3201', true],\n            ['AD1200012030200354100100', false],\n\n            ['AL47212110090000000235698741', true],\n            ['AD1200012030200359100100', true],\n            ['AT611904300234573201', true],\n            ['AZ21NABZ00000000137010001944', true],\n            ['BH67BMAG00001299123456', true],\n            ['BE68539007547034', true],\n            ['BA391290079401028494', true],\n            ['BG80BNBG96611020345678', true],\n            ['CR0515202001026284066', true],\n            ['HR1210010051863000160', true],\n            ['CY17002001280000001200527600', true],\n            ['CZ6508000000192000145399', true],\n            ['DK5000400440116243', true],\n            ['DO28BAGR00000001212453611324', true],\n            ['EE382200221020145685', true],\n            ['FO6264600001631634', true],\n            ['FI2112345600000785', true],\n            ['FR1420041010050500013M02606', true],\n            ['GE29NB0000000101904917', true],\n            ['DE89370400440532013000', true],\n            ['GI75NWBK000000007099453', true],\n            ['GR1601101250000000012300695', true],\n            ['GL8964710001000206', true],\n            ['GT82TRAJ01020000001210029690', true],\n            ['HU42117730161111101800000000', true],\n            ['IS140159260076545510730339', true],\n            ['IE29AIBK93115212345678', true],\n            ['IL620108000000099999999', true],\n            ['IT60X0542811101000000123456', true],\n            ['KZ86125KZT5004100100', true],\n            ['KW81CBKU0000000000001234560101', true],\n            ['LV80BANK0000435195001', true],\n            ['LB62099900000001001901229114', true],\n            ['LI21088100002324013AA', true],\n            ['LT121000011101001000', true],\n            ['LU280019400644750000', true],\n            ['MK07250120000058984', true],\n            ['MT84MALT011000012345MTLCAST001S', true],\n            ['MR1300020001010000123456753', true],\n            ['MU17BOMM0101101030300200000MUR', true],\n            ['MD24AG000225100013104168', true],\n            ['MC5811222000010123456789030', true],\n            ['ME25505000012345678951', true],\n            ['NL91ABNA0417164300', true],\n            ['NO9386011117947', true],\n            ['PK36SCBL0000001123456702', true],\n            ['PL61109010140000071219812874', true],\n            ['PT50000201231234567890154', true],\n            ['RO49AAAA1B31007593840000', true],\n            ['SM86U0322509800000000270100', true],\n            ['SA0380000000608010167519', true],\n            ['RS35260005601001611379', true],\n            ['SK3112000000198742637541', true],\n            ['SI56191000000123438', true],\n            ['ES9121000418450200051332', true],\n            ['SE4550000000058398257466', true],\n            ['CH9300762011623852957', true],\n            ['TN5910006035183598478831', true],\n            ['TR330006100519786457841326', true],\n            ['AE070331234567890123456', true],\n            ['GB29NWBK60161331926819', true],\n            ['VG96VPVG0000012345678901', true],\n            ['DO17552081023122561803924090', true],\n            ['SM76P0854009812123456789123', true],\n            ['HR1723600001101234565', true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider ibanDataProvider\n     * @return void\n     */\n    public function testBasic($iban, $expected)\n    {\n        $validator = new IbanValidator();\n        $this->assertEquals(\n            $expected,\n            $validator->isValid($iban),\n            implode(\"\\n\", array_merge($validator->getMessages()))\n        );\n    }\n\n    public function testSettingAndGettingCountryCode()\n    {\n        $validator = new IbanValidator();\n\n        $validator->setCountryCode('DE');\n        $this->assertEquals('DE', $validator->getCountryCode());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('ISO 3166-1');\n        $validator->setCountryCode('foo');\n    }\n\n    public function testInstanceWithCountryCode()\n    {\n        $validator = new IbanValidator(['country_code' => 'AT']);\n        $this->assertEquals('AT', $validator->getCountryCode());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('ISO 3166-1');\n        $validator = new IbanValidator(['country_code' => 'BAR']);\n    }\n\n    public function testSepaNotSupportedCountryCode()\n    {\n        $validator = new IbanValidator();\n        $this->assertTrue($validator->isValid('DO17552081023122561803924090'));\n        $validator->setAllowNonSepa(false);\n        $this->assertFalse($validator->isValid('DO17552081023122561803924090'));\n        $validator->setAllowNonSepa(true);\n        $this->assertTrue($validator->isValid('DO17552081023122561803924090'));\n    }\n\n    public function testIbanNotSupportedCountryCode()\n    {\n        $validator = new IbanValidator();\n        $this->assertFalse($validator->isValid('US611904300234573201'));\n    }\n\n    /**\n     * @group ZF-10556\n     */\n    public function testIbanDetectionWithoutCountryCode()\n    {\n        $validator = new IbanValidator();\n        $this->assertTrue($validator->isValid('AT611904300234573201'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new IbanValidator();\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testConstructorAllowsSettingOptionsViaOptionsArray()\n    {\n        $validator = new IbanValidator(['country_code' => 'AT', 'allow_non_sepa' => false]);\n        $this->assertSame('AT', $validator->getCountryCode());\n        $this->assertFalse($validator->allowNonSepa());\n    }\n\n    public function invalidValues()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'array'      => [['foo']],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidValues\n     */\n    public function testIsValidReturnsFalseForNonStringValue($value)\n    {\n        $validator = new IbanValidator();\n        $this->assertFalse($validator->isValid([]));\n    }\n}\n"
  },
  {
    "path": "test/IdenticalTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Stdlib\\Parameters;\nuse Zend\\Validator\\Identical;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass IdenticalTest extends TestCase\n{\n    /** @var Identical */\n    public $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Identical;\n    }\n\n    public function testTokenInitiallyNull()\n    {\n        $this->assertNull($this->validator->getToken());\n    }\n\n    public function testCanSetToken()\n    {\n        $this->testTokenInitiallyNull();\n        $this->validator->setToken('foo');\n        $this->assertEquals('foo', $this->validator->getToken());\n    }\n\n    public function testCanSetTokenViaConstructor()\n    {\n        $validator = new Identical('foo');\n        $this->assertEquals('foo', $validator->getToken());\n    }\n\n    public function testValidatingWhenTokenNullReturnsFalse()\n    {\n        $this->assertFalse($this->validator->isValid('foo'));\n    }\n\n    public function testValidatingWhenTokenNullSetsMissingTokenMessage()\n    {\n        $this->testValidatingWhenTokenNullReturnsFalse();\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('missingToken', $messages);\n    }\n\n    public function testValidatingAgainstTokenWithNonMatchingValueReturnsFalse()\n    {\n        $this->validator->setToken('foo');\n        $this->assertFalse($this->validator->isValid('bar'));\n    }\n\n    public function testValidatingAgainstTokenWithNonMatchingValueSetsNotSameMessage()\n    {\n        $this->testValidatingAgainstTokenWithNonMatchingValueReturnsFalse();\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('notSame', $messages);\n    }\n\n    public function testValidatingAgainstTokenWithMatchingValueReturnsTrue()\n    {\n        $this->validator->setToken('foo');\n        $this->assertTrue($this->validator->isValid('foo'));\n    }\n\n    /**\n     * @group ZF-6953\n     */\n    public function testValidatingAgainstEmptyToken()\n    {\n        $this->validator->setToken('');\n        $this->assertTrue($this->validator->isValid(''));\n    }\n\n    /**\n     * @group ZF-7128\n     */\n    public function testValidatingAgainstNonStrings()\n    {\n        $this->validator->setToken(true);\n        $this->assertTrue($this->validator->isValid(true));\n        $this->assertFalse($this->validator->isValid(1));\n\n        $this->validator->setToken(['one' => 'two', 'three']);\n        $this->assertTrue($this->validator->isValid(['one' => 'two', 'three']));\n        $this->assertFalse($this->validator->isValid([]));\n    }\n\n    public function testValidatingTokenArray()\n    {\n        $validator = new Identical(['token' => 123]);\n        $this->assertTrue($validator->isValid(123));\n        $this->assertFalse($validator->isValid(['token' => 123]));\n    }\n\n    public function testValidatingNonStrictToken()\n    {\n        $validator = new Identical(['token' => 123, 'strict' => false]);\n        $this->assertTrue($validator->isValid('123'));\n\n        $validator->setStrict(true);\n        $this->assertFalse($validator->isValid(['token' => '123']));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function testValidatingStringTokenInContext()\n    {\n        $this->validator->setToken('email');\n\n        $this->assertTrue($this->validator->isValid(\n            'john@doe.com',\n            ['email' => 'john@doe.com']\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'john@doe.com',\n            ['email' => 'harry@hoe.com']\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'harry@hoe.com',\n            ['email' => 'john@doe.com']\n        ));\n\n        $this->assertTrue($this->validator->isValid(\n            'john@doe.com',\n            new Parameters(['email' => 'john@doe.com'])\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'john@doe.com',\n            new Parameters(['email' => 'harry@hoe.com'])\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'harry@hoe.com',\n            new Parameters(['email' => 'john@doe.com'])\n        ));\n    }\n\n    public function testValidatingArrayTokenInContext()\n    {\n        $this->validator->setToken(['user' => 'email']);\n\n        $this->assertTrue($this->validator->isValid(\n            'john@doe.com',\n            [\n                'user' => [\n                    'email' => 'john@doe.com'\n                ]\n            ]\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'john@doe.com',\n            [\n                'user' => [\n                    'email' => 'harry@hoe.com'\n                ]\n            ]\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'harry@hoe.com',\n            [\n                'user' => [\n                    'email' => 'john@doe.com'\n                ]\n            ]\n        ));\n\n        $this->assertTrue($this->validator->isValid(\n            'john@doe.com',\n            new Parameters([\n                'user' => [\n                    'email' => 'john@doe.com'\n                ]\n            ])\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'john@doe.com',\n            new Parameters([\n                'user' => [\n                    'email' => 'harry@hoe.com'\n                ]\n            ])\n        ));\n\n        $this->assertFalse($this->validator->isValid(\n            'harry@hoe.com',\n            new Parameters([\n                'user' => [\n                    'email' => 'john@doe.com'\n                ]\n            ])\n        ));\n    }\n\n    public function testCanSetLiteralParameterThroughConstructor()\n    {\n        $validator = new Identical(['token' => 'foo', 'literal' => true]);\n        // Default is false\n        $validator->setLiteral(true);\n        $this->assertTrue($validator->getLiteral());\n    }\n\n    public function testLiteralParameterDoesNotAffectValidationWhenNoContextIsProvided()\n    {\n        $this->validator->setToken(['foo' => 'bar']);\n\n        $this->validator->setLiteral(false);\n        $this->assertTrue($this->validator->isValid(['foo' => 'bar']));\n\n        $this->validator->setLiteral(true);\n        $this->assertTrue($this->validator->isValid(['foo' => 'bar']));\n    }\n\n    public function testLiteralParameterWorksWhenContextIsProvided()\n    {\n        $this->validator->setToken(['foo' => 'bar']);\n        $this->validator->setLiteral(true);\n\n        $this->assertTrue($this->validator->isValid(\n            ['foo' => 'bar'],\n            ['foo' => 'baz'] // Provide a context to make sure the literal parameter will work\n        ));\n    }\n\n    /**\n     * @dataProvider invalidContextProvider\n     *\n     * @param mixed $context\n     */\n    public function testIsValidThrowsExceptionOnInvalidContext($context)\n    {\n        $this->expectException(InvalidArgumentException::class);\n\n        $this->validator->isValid('john@doe.com', $context);\n    }\n\n    /**\n     * @return mixed[][]\n     */\n    public function invalidContextProvider()\n    {\n        return [\n            [false],\n            [new \\stdClass()],\n            ['dummy'],\n        ];\n    }\n}\n"
  },
  {
    "path": "test/InArrayTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\InArray;\nuse Zend\\Validator\\Exception\\RuntimeException;\n\n/**\n * @group      Zend_Validator\n */\nclass InArrayTest extends TestCase\n{\n    /** @var InArray */\n    protected $validator;\n\n    protected function setUp()\n    {\n        $this->validator = new InArray(\n            [\n                 'haystack' => [1, 2, 3],\n            ]\n        );\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures that getHaystack() returns expected value\n     *\n     * @return void\n     */\n    public function testGetHaystack()\n    {\n        $this->assertEquals([1, 2, 3], $this->validator->getHaystack());\n    }\n\n    public function testUnsetHaystackRaisesException()\n    {\n        $validator = new InArray();\n        $this->expectException(RuntimeException::class);\n        $this->expectExceptionMessage('haystack option is mandatory');\n        $validator->getHaystack();\n    }\n\n    /**\n     * Ensures that getStrict() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetStrict()\n    {\n        $this->assertFalse($this->validator->getStrict());\n    }\n\n    public function testGivingOptionsAsArrayAtInitiation()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [1, 'a', 2.3]\n            ]\n        );\n        $this->assertTrue($validator->isValid(1));\n        $this->assertTrue($validator->isValid(1.0));\n        $this->assertTrue($validator->isValid('1'));\n        $this->assertTrue($validator->isValid('a'));\n        $this->assertFalse($validator->isValid('A'));\n        $this->assertTrue($validator->isValid(2.3));\n        $this->assertTrue($validator->isValid(2.3e0));\n    }\n\n    public function testSettingANewHaystack()\n    {\n        $this->validator->setHaystack([1, 'a', 2.3]);\n        $this->assertEquals([1, 'a', 2.3], $this->validator->getHaystack());\n    }\n\n    /**\n     * @group ZF2-337\n     */\n    public function testSettingNewStrictMode()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 0, 'A', 0.0],\n            ]\n        );\n\n        // test non-strict with vulnerability prevention (default choice)\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n        $this->assertFalse($validator->getStrict());\n\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $this->assertTrue($validator->getStrict());\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $this->assertEquals(InArray::COMPARE_NOT_STRICT, $validator->getStrict());\n    }\n\n    public function testNonStrictSafeComparisons()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 0, 'A', 1, 0.0],\n            ]\n        );\n\n        $this->assertFalse($validator->getStrict());\n        $this->assertFalse($validator->isValid('b'));\n        $this->assertFalse($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertTrue($validator->isValid('0'));\n        $this->assertFalse($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testStrictComparisons()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 0, 'A', 1, 0.0],\n            ]\n        );\n\n        // bog standard strict compare\n        $validator->setStrict(InArray::COMPARE_STRICT);\n\n        $this->assertTrue($validator->getStrict());\n        $this->assertFalse($validator->isValid('b'));\n        $this->assertFalse($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertFalse($validator->isValid('0'));\n        $this->assertFalse($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testNonStrictComparisons()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 0, 'A', 1, 0.0],\n            ]\n        );\n\n        // non-numeric strings converted to 0\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n\n        $this->assertEquals(InArray::COMPARE_NOT_STRICT, $validator->getStrict());\n        $this->assertTrue($validator->isValid('b'));\n        $this->assertTrue($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertTrue($validator->isValid('0'));\n        $this->assertTrue($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testNonStrictSafeComparisonsRecurisve()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [\n                     ['test', 0, 'A', 0.0],\n                     ['foo', 1, 'a', 'c'],\n                 ]\n            ]\n        );\n\n        $validator->setRecursive(true);\n\n        $this->assertFalse($validator->getStrict());\n        $this->assertFalse($validator->isValid('b'));\n        $this->assertTrue($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertTrue($validator->isValid('0'));\n        $this->assertFalse($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testStrictComparisonsRecursive()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [\n                     ['test', 0, 'A', 0.0],\n                     ['foo', 1, 'a', 'c'],\n                 ]\n            ]\n        );\n\n        // bog standard strict compare\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $validator->setRecursive(true);\n\n        $this->assertTrue($validator->getStrict());\n        $this->assertFalse($validator->isValid('b'));\n        $this->assertTrue($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertFalse($validator->isValid('0'));\n        $this->assertFalse($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testNonStrictComparisonsRecursive()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [\n                     ['test', 0, 'A', 0.0],\n                     ['foo', 1, 'a', 'c'],\n                 ]\n            ]\n        );\n\n        // non-numeric strings converted to 0\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $validator->setRecursive(true);\n\n        $this->assertEquals(InArray::COMPARE_NOT_STRICT, $validator->getStrict());\n        $this->assertTrue($validator->isValid('b'));\n        $this->assertTrue($validator->isValid('a'));\n        $this->assertTrue($validator->isValid('A'));\n        $this->assertTrue($validator->isValid('0'));\n        $this->assertTrue($validator->isValid('1a'));\n        $this->assertTrue($validator->isValid(0));\n    }\n\n    public function testIntegerInputAndStringInHaystack()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 1, 2],\n            ]\n        );\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n        $this->assertFalse($validator->isValid(0));\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $this->assertTrue($validator->isValid(0));\n\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $this->assertFalse($validator->isValid(0));\n    }\n\n    public function testFloatInputAndStringInHaystack()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 1, 2],\n            ]\n        );\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n        $this->assertFalse($validator->isValid(0.0));\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $this->assertTrue($validator->isValid(0.0));\n\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $this->assertFalse($validator->isValid(0.0));\n    }\n\n    public function testNumberStringInputAgainstNumberInHaystack()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [1, 2],\n            ]\n        );\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n        $this->assertFalse($validator->isValid('1asdf'));\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $this->assertTrue($validator->isValid('1asdf'));\n\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $this->assertFalse($validator->isValid('1asdf'));\n    }\n\n    public function testFloatStringInputAgainstNumberInHaystack()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => [1.5, 2.4],\n            ]\n        );\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY);\n        $this->assertFalse($validator->isValid('1.5asdf'));\n\n        $validator->setStrict(InArray::COMPARE_NOT_STRICT);\n        $this->assertTrue($validator->isValid('1.5asdf'));\n\n        $validator->setStrict(InArray::COMPARE_STRICT);\n        $this->assertFalse($validator->isValid('1.5asdf'));\n    }\n\n    public function testSettingStrictViaInitiation()\n    {\n        $validator = new InArray(\n            [\n                 'haystack' => ['test', 0, 'A'],\n                 'strict'   => true,\n            ]\n        );\n        $this->assertTrue($validator->getStrict());\n    }\n\n    public function testGettingRecursiveOption()\n    {\n        $this->assertFalse($this->validator->getRecursive());\n\n        $this->validator->setRecursive(true);\n        $this->assertTrue($this->validator->getRecursive());\n    }\n\n    public function testSettingRecursiveViaInitiation()\n    {\n        $validator = new InArray(\n            [\n                 'haystack'  => ['test', 0, 'A'],\n                 'recursive' => true,\n            ]\n        );\n        $this->assertTrue($validator->getRecursive());\n    }\n\n    public function testRecursiveDetection()\n    {\n        $validator = new InArray(\n            [\n                 'haystack'  =>\n                 [\n                     'firstDimension'  => ['test', 0, 'A'],\n                     'secondDimension' => ['value', 2, 'a'],\n                 ],\n                 'recursive' => false,\n            ]\n        );\n        $this->assertFalse($validator->isValid('A'));\n\n        $validator->setRecursive(true);\n        $this->assertTrue($validator->isValid('A'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $this->assertAttributeEquals(\n            $this->validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $this->validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/IpTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\Ip;\n\n/**\n * @group      Zend_Validator\n */\nclass IpTest extends TestCase\n{\n    /**\n     * @var Ip\n     */\n    protected $validator;\n\n    /**\n     * The list with the options supported.\n     * By default all options are disabled.\n     *\n     * @var array\n     */\n    protected $options;\n\n    /**\n     * Creates a new IP Validator for each test\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        $this->validator = new Ip();\n        $this->options   = [\n            'allowipv4'      => false,\n            'allowipv6'      => false,\n            'allowipvfuture' => false,\n            'allowliteral' => false,\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $this->assertTrue($this->validator->isValid('1.2.3.4'));\n        $this->assertTrue($this->validator->isValid('10.0.0.1'));\n        $this->assertTrue($this->validator->isValid('255.255.255.255'));\n\n        $this->assertFalse($this->validator->isValid('0.0.0.256'));\n        $this->assertFalse($this->validator->isValid('1.2.3.4.5'));\n    }\n\n    public function testZeroIpForZF2420()\n    {\n        $this->assertTrue($this->validator->isValid('0.0.0.0'));\n    }\n\n\n    public function testOnlyIpv4()\n    {\n        $this->options['allowipv4'] = true;\n        $this->validator->setOptions($this->options);\n        $this->assertTrue($this->validator->isValid('1.2.3.4'));\n        $this->assertFalse($this->validator->isValid('a:b:c:d:e::1.2.3.4'));\n        $this->assertFalse($this->validator->isValid('v1.09azAZ-._~!$&\\'()*+,;='));\n    }\n\n    public function testOnlyIpv6()\n    {\n        $this->options['allowipv6'] = true;\n        $this->validator->setOptions($this->options);\n        $this->assertFalse($this->validator->isValid('1.2.3.4'));\n        $this->assertTrue($this->validator->isValid('a:b:c:d:e::1.2.3.4'));\n        $this->assertFalse($this->validator->isValid('v1.09azAZ-._~!$&\\'()*+,;='));\n    }\n\n    public function testOnlyIpvfuture()\n    {\n        $this->options['allowipvfuture'] = true;\n        $this->validator->setOptions($this->options);\n        $this->assertFalse($this->validator->isValid('1.2.3.4'));\n        $this->assertFalse($this->validator->isValid('a:b:c:d:e::1.2.3.4'));\n        $this->assertTrue($this->validator->isValid(\"v1.09azAZ-._~!$&'()*+,;=:\"));\n    }\n\n    public function testLiteral()\n    {\n        $this->options   = [\n            'allowipv4'      => true,\n            'allowipv6'      => true,\n            'allowipvfuture' => true,\n            'allowliteral'   => true,\n        ];\n        $this->validator->setOptions($this->options);\n\n        $this->assertFalse($this->validator->isValid('[1.2.3.4]'));\n        $this->assertTrue($this->validator->isValid('[a:b:c:d:e::1.2.3.4]'));\n        $this->assertFalse($this->validator->isValid('[[a:b:c:d:e::1.2.3.4]]'));\n        $this->assertFalse($this->validator->isValid('[[a:b:c:d:e::1.2.3.4]'));\n        $this->assertFalse($this->validator->isValid('[[a:b:c:d:e::1.2.3.4'));\n        $this->assertFalse($this->validator->isValid('[a:b:c:d:e::1.2.3.4]]'));\n        $this->assertFalse($this->validator->isValid('a:b:c:d:e::1.2.3.4]]'));\n        $this->assertTrue($this->validator->isValid(\"[v1.ZZ:ZZ]\"));\n    }\n\n    /**\n     * Versions 4 and 6 are not allowed in IPvFuture\n     *\n     * @depends testOnlyIpvfuture\n     */\n    public function testVersionsAllowedIpvfuture()\n    {\n        $this->options['allowipvfuture'] = true;\n        $this->validator->setOptions($this->options);\n        $this->assertTrue($this->validator->isValid('v1.A', 'IPvFuture: Version 1 disallowed'));\n        $this->assertTrue($this->validator->isValid('vD.A', 'IPvFuture: Version D disallowed'));\n        $this->assertTrue($this->validator->isValid('v46.A', 'IPvFuture: Version 46 disallowed'));\n\n        $this->assertFalse($this->validator->isValid('v4.A', 'IPvFuture: Version 4 allowed'));\n        $this->assertFalse($this->validator->isValid('v6.A', 'IPvFuture: Version 6 allowed'));\n    }\n\n    public function testNoValidation()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Nothing to validate');\n        $this->validator->setOptions($this->options);\n    }\n\n    public function testInvalidIpForZF4809()\n    {\n        $this->assertFalse($this->validator->isValid('1.2.333'));\n    }\n\n    public function testInvalidIpForZF3435()\n    {\n        $this->assertFalse($this->validator->isValid('192.168.0.2 adfs'));\n    }\n\n    /**\n     * @group ZF-2694\n     * @group ZF-8253\n     */\n    public function testIPv6addresses()\n    {\n        $ips = [\n            '2001:0db8:0000:0000:0000:0000:1428:57ab'      => true,\n            '2001:0DB8:0000:0000:0000:0000:1428:57AB'      => true,\n            '[2001:0DB8:0000:0000:0000:0000:1428:57AB]'    => true,\n            '2001:00db8:0000:0000:0000:0000:1428:57ab'     => false,\n            '2001:0db8:xxxx:0000:0000:0000:1428:57ab'      => false,\n            '2001:0DB8:0000:0000:0000:0000:1428:57AB:90'   => false,\n            '[2001:0DB8:0000:0000:0000:0000:1428:57AB]:90' => false,\n\n            '2001:db8::1428:57ab'                          => true,\n            '2001:db8::1428::57ab'                         => false,\n            '2001:dx0::1234'                               => false,\n            '2001:db0::12345'                              => false,\n\n            ''                                             => false,\n            ':'                                            => false,\n            '::'                                           => true,\n            ':::'                                          => false,\n            '::::'                                         => false,\n            '::1'                                          => true,\n            ':::1'                                         => false,\n\n            '[::1.2.3.4]'                                  => true,\n            '::1.2.3.4'                                    => true,\n            '::127.0.0.1'                                  => true,\n            '::256.0.0.1'                                  => false,\n            '::01.02.03.04'                                => true,\n            // according to RFC this can be interpreted as hex notation IPv4\n            'a:b:c::1.2.3.4'                               => true,\n            'a:b:c:d::1.2.3.4'                             => true,\n            'a:b:c:d:e::1.2.3.4'                           => true,\n            'a:b:c:d:e:f:1.2.3.4'                          => true,\n            'a:b:c:d:e:f:1.256.3.4'                        => false,\n            'a:b:c:d:e:f::1.2.3.4'                         => false,\n\n            'a:b:c:d:e:f:0:1:2'                            => false,\n            'a:b:c:d:e:f:0:1'                              => true,\n            'a::b:c:d:e:f:0:1'                             => false,\n            'a::c:d:e:f:0:1'                               => true,\n            'a::d:e:f:0:1'                                 => true,\n            'a::e:f:0:1'                                   => true,\n            'a::f:0:1'                                     => true,\n            'a::0:1'                                       => true,\n            'a::1'                                         => true,\n            'a::'                                          => true,\n\n            '::0:1:a:b:c:d:e:f'                            => false,\n            '::0:a:b:c:d:e:f'                              => true,\n            '::a:b:c:d:e:f'                                => true,\n            '::b:c:d:e:f'                                  => true,\n            '::c:d:e:f'                                    => true,\n            '::d:e:f'                                      => true,\n            '::e:f'                                        => true,\n            '::f'                                          => true,\n\n            '0:1:a:b:c:d:e:f::'                            => false,\n            '0:a:b:c:d:e:f::'                              => true,\n            'a:b:c:d:e:f::'                                => true,\n            'b:c:d:e:f::'                                  => true,\n            'c:d:e:f::'                                    => true,\n            'd:e:f::'                                      => true,\n            'e:f::'                                        => true,\n            'f::'                                          => true,\n\n            'a:b:::e:f'                                    => false,\n            '::a:'                                         => false,\n            '::a::'                                        => false,\n            ':a::b'                                        => false,\n            'a::b:'                                        => false,\n            '::a:b::c'                                     => false,\n            'abcde::f'                                     => false,\n\n            ':10.0.0.1'                                    => false,\n            '0:0:0:255.255.255.255'                        => false,\n            '1fff::a88:85a3::172.31.128.1'                 => false,\n\n            'a:b:c:d:e:f:0::1'                             => false,\n            'a:b:c:d:e:f:0::'                              => true,\n            'a:b:c:d:e:f::0'                               => true,\n\n            'total gibberish'                              => false\n        ];\n\n        foreach ($ips as $ip => $expectedOutcome) {\n            if ($expectedOutcome) {\n                $this->assertTrue($this->validator->isValid($ip), $ip . ' failed validation (expects true)');\n            } else {\n                $this->assertFalse($this->validator->isValid($ip), $ip . ' failed validation (expects false)');\n            }\n        }\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    /**\n     * @ZF-8640\n     */\n    public function testNonNewlineValidation()\n    {\n        $this->assertFalse($this->validator->isValid(\"::C0A8:2\\n\"));\n    }\n\n    /**\n     * @group ZF-10621\n     */\n    public function testIPv4AddressNotations()\n    {\n        $ips = [\n            // binary notation\n            '00000001.00000010.00000011.00000100'    => true,\n            '10000000.02000000.00000000.00000001'    => false,\n            '10000000.02000000.00000000.00000001:80' => false,\n\n            // octal notation (always seen as integer!)\n            '001.002.003.004'                        => true,\n            '009.008.007.006'                        => true,\n            '0a0.100.001.010'                        => false,\n            '0a0.100.001.010:80'                     => false,\n\n            // hex notation\n            '01.02.03.04'                            => true,\n            'a0.b0.c0.d0'                            => true,\n            'g0.00.00.00'                            => false,\n            'g0.00.00.00:80'                         => false,\n\n            // new lines should not accept\n            \"00000001.00000010.00000011.00000100\\n\"  => false,\n            \"001.002.003.004\\n\"                      => false,\n            \"a0.b0.c0.d0\\n\"                          => false,\n\n        ];\n\n        foreach ($ips as $ip => $expectedOutcome) {\n            if ($expectedOutcome) {\n                $this->assertTrue($this->validator->isValid($ip), $ip . ' failed validation (expects true)');\n            } else {\n                $this->assertFalse($this->validator->isValid($ip), $ip . ' failed validation (expects false)');\n            }\n        }\n    }\n\n    /**\n     * @dataProvider iPvFutureAddressesProvider\n     */\n    public function testIPvFutureAddresses($ip, $expected)\n    {\n        $this->options['allowipvfuture'] = true;\n        $this->options['allowliteral'] = true;\n        $this->validator->setOptions($this->options);\n        $this->assertEquals($expected, $this->validator->isValid($ip));\n    }\n\n    public function iPvFutureAddressesProvider()\n    {\n        return [\n            [\"[v1.09azAZ-._~!$&'()*+,;=:]:80\", false],\n            [\"[v1.09azAZ-._~!$&'()*+,;=:]\", true],\n            [\"[v1.09azAZ-._~!$&'()*+,;=:\", false],\n            [\"v1.09azAZ-._~!$&'()*+,;=:]\", false],\n            [\"v1.09azAZ-._~!$&'()*+,;=:\", true],\n            [\"v1.09azAZ-._~!$&'()*+,;=\", true],\n            [\"v1.09azAZ-._~!$&'()*+,;\", true],\n            [\"v1.09azAZ-._~!$&'()*+,\", true],\n            [\"v1.09azAZ-._~!$&'()*+\", true],\n            [\"v1.09azAZ-._~!$&'()*\", true],\n            [\"v1.09azAZ-._~!$&'()\", true],\n            [\"v1.09azAZ-._~!$&'(\", true],\n            [\"v1.09azAZ-._~!$&'\", true],\n            [\"v1.09azAZ-._~!$&\", true],\n            [\"v1.09azAZ-._~!$\", true],\n            [\"v1.09azAZ-._~!\", true],\n            [\"v1.09azAZ-._~\", true],\n            [\"v1.09azAZ-._\", true],\n            [\"v1.09azAZ-.\", true],\n            [\"v1.09azAZ-\", true],\n            [\"v1.09azAZ\", true],\n            [\"v1.09azA\", true],\n            [\"v1.09az\", true],\n            [\"v1.09a\", true],\n            [\"v1.09\", true],\n            [\"v1.0\", true],\n            [\"v1.\", false],\n            [\"v1\", false],\n            [\"v\", false],\n            [\"\", false],\n            [\"vFF.Z\", true],\n            [\"vFG./\", false],\n            [\"v1./\", false],\n            [\"v1.?\", false],\n            [\"v1.#\", false],\n            [\"v1.[\", false],\n            [\"v1.]\", false],\n            [\"v1.@\", false],\n        ];\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function invalidIpV4Addresses()\n    {\n        return [\n            'all-numeric' => ['111111111111'],\n            'first-quartet' => ['111.111111111'],\n            'first-octet' => ['111111.111111'],\n            'last-quartet' => ['111111111.111'],\n            'first-second-quartet' => ['111.111.111111'],\n            'first-fourth-quartet' => ['111.111111.111'],\n            'third-fourth-quartet' => ['111111.111.111'],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidIpV4Addresses\n     */\n    public function testIpV4ValidationShouldFailForIpV4AddressesMissingQuartets($address)\n    {\n        $this->assertFalse($this->validator->isValid($address));\n    }\n}\n"
  },
  {
    "path": "test/IsCountableTest.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2017 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\IsCountable;\nuse Zend\\Validator\\Exception;\n\nclass IsCountableTest extends TestCase\n{\n    public function conflictingOptionsProvider()\n    {\n        return [\n            'count-min' => [['count' => 10, 'min' => 1]],\n            'count-max' => [['count' => 10, 'max' => 10]],\n        ];\n    }\n\n    /**\n     * @dataProvider conflictingOptionsProvider\n     */\n    public function testConstructorRaisesExceptionWhenProvidedConflictingOptions(array $options)\n    {\n        $this->expectException(Exception\\InvalidArgumentException::class);\n        $this->expectExceptionMessage('conflicts');\n        new IsCountable($options);\n    }\n\n    public function conflictingSecondaryOptionsProvider()\n    {\n        return [\n            'count-min' => [['count' => 10], ['min' => 1]],\n            'count-max' => [['count' => 10], ['max' => 10]],\n        ];\n    }\n\n    /**\n     * @dataProvider conflictingSecondaryOptionsProvider\n     */\n    public function testSetOptionsRaisesExceptionWhenProvidedOptionConflictingWithCurrentSettings(\n        array $originalOptions,\n        array $secondaryOptions\n    ) {\n        $validator = new IsCountable($originalOptions);\n        $this->expectException(Exception\\InvalidArgumentException::class);\n        $this->expectExceptionMessage('conflicts');\n        $validator->setOptions($secondaryOptions);\n    }\n\n    public function testArrayIsValid()\n    {\n        $sut = new IsCountable([\n            'min' => 1,\n            'max' => 10,\n        ]);\n\n        $this->assertTrue($sut->isValid(['Foo']), json_encode($sut->getMessages()));\n        $this->assertCount(0, $sut->getMessages());\n    }\n\n    public function testIteratorIsValid()\n    {\n        $sut = new IsCountable();\n\n        $this->assertTrue($sut->isValid(new \\SplQueue()), json_encode($sut->getMessages()));\n        $this->assertCount(0, $sut->getMessages());\n    }\n\n    public function testValidEquals()\n    {\n        $sut = new IsCountable([\n            'count' => 1,\n        ]);\n\n        $this->assertTrue($sut->isValid(['Foo']));\n        $this->assertCount(0, $sut->getMessages());\n    }\n\n    public function testValidMax()\n    {\n        $sut = new IsCountable([\n            'max' => 1,\n        ]);\n\n        $this->assertTrue($sut->isValid(['Foo']));\n        $this->assertCount(0, $sut->getMessages());\n    }\n\n    public function testValidMin()\n    {\n        $sut = new IsCountable([\n            'min' => 1,\n        ]);\n\n        $this->assertTrue($sut->isValid(['Foo']));\n        $this->assertCount(0, $sut->getMessages());\n    }\n\n    public function testInvalidNotEquals()\n    {\n        $sut = new IsCountable([\n            'count' => 2,\n        ]);\n\n        $this->assertFalse($sut->isValid(['Foo']));\n        $this->assertCount(1, $sut->getMessages());\n    }\n\n    public function testInvalidType()\n    {\n        $sut = new IsCountable();\n\n        $this->assertFalse($sut->isValid(new \\stdClass()));\n        $this->assertCount(1, $sut->getMessages());\n    }\n\n    public function testInvalidExceedsMax()\n    {\n        $sut = new IsCountable([\n            'max' => 1,\n        ]);\n\n        $this->assertFalse($sut->isValid(['Foo', 'Bar']));\n        $this->assertCount(1, $sut->getMessages());\n    }\n\n    public function testInvalidExceedsMin()\n    {\n        $sut = new IsCountable([\n            'min' => 2,\n        ]);\n\n        $this->assertFalse($sut->isValid(['Foo']));\n        $this->assertCount(1, $sut->getMessages());\n    }\n}\n"
  },
  {
    "path": "test/IsInstanceOfTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license    http://framework.zend.com/license/new-bsd     New BSD License\n */\nnamespace ZendTest\\Validator;\n\nuse DateTime;\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionClass;\nuse Zend\\Validator;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @covers     Zend\\Validator\\IsInstanceOf\n * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license    http://framework.zend.com/license/new-bsd     New BSD License\n * @group      Zend_Validator\n */\nclass IsInstanceOfTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $validator = new Validator\\IsInstanceOf(DateTime::class);\n        $this->assertTrue($validator->isValid(new DateTime())); // True\n        $this->assertFalse($validator->isValid(null)); // False\n        $this->assertFalse($validator->isValid($this)); // False\n\n        $validator = new Validator\\IsInstanceOf(\\Exception::class);\n        $this->assertTrue($validator->isValid(new \\Exception())); // True\n        $this->assertFalse($validator->isValid(null)); // False\n        $this->assertFalse($validator->isValid($this)); // False\n\n        $validator = new Validator\\IsInstanceOf(TestCase::class);\n        $this->assertTrue($validator->isValid($this)); // True\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new Validator\\IsInstanceOf(DateTime::class);\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that getClassName() returns expected value\n     *\n     * @return void\n     */\n    public function testGetClassName()\n    {\n        $validator = new Validator\\IsInstanceOf(DateTime::class);\n        $this->assertEquals(DateTime::class, $validator->getClassName());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator  = new Validator\\IsInstanceOf(DateTime::class);\n        $reflection = new ReflectionClass($validator);\n\n        $property = $reflection->getProperty('messageTemplates');\n        $property->setAccessible(true);\n\n        $this->assertEquals(\n            $property->getValue($validator),\n            $validator->getOption('messageTemplates')\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator  = new Validator\\IsInstanceOf(DateTime::class);\n        $reflection = new ReflectionClass($validator);\n\n        $property = $reflection->getProperty('messageVariables');\n        $property->setAccessible(true);\n\n        $this->assertEquals(\n            $property->getValue($validator),\n            $validator->getOption('messageVariables')\n        );\n    }\n\n    public function testPassTraversableToConstructor()\n    {\n        $validator = new Validator\\IsInstanceOf(new \\ArrayIterator(['className' => DateTime::class]));\n        $this->assertEquals(DateTime::class, $validator->getClassName());\n        $this->assertTrue($validator->isValid(new DateTime()));\n        $this->assertFalse($validator->isValid(null));\n        $this->assertFalse($validator->isValid($this));\n    }\n\n    public function testPassOptionsWithoutClassNameKey()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Missing option \"className\"');\n\n        $options   = ['NotClassNameKey' => DateTime::class];\n        $validator = new Validator\\IsInstanceOf($options);\n    }\n}\n"
  },
  {
    "path": "test/IsbnTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\Isbn;\n\n/**\n * @group      Zend_Validator\n */\nclass IsbnTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        $validator = new Isbn();\n\n        // Brave New World by Aldous Huxley\n        $this->assertTrue($validator->isValid('0060929871'));\n        $this->assertFalse($validator->isValid('006092987X'));\n\n        // Time Rations by Benjamin Friedlander\n        $this->assertTrue($validator->isValid('188202205X'));\n        $this->assertFalse($validator->isValid('1882022059'));\n\n        // Towards The Primeval Lighting Field by Will Alexander\n        $this->assertTrue($validator->isValid('1882022300'));\n        $this->assertFalse($validator->isValid('1882022301'));\n\n        //  ISBN-13 for dummies by Zoë Wykes\n        $this->assertTrue($validator->isValid('9780555023402'));\n        $this->assertFalse($validator->isValid('97805550234029'));\n\n        // Change Your Brain, Change Your Life Daniel G. Amen\n        $this->assertTrue($validator->isValid('9780812929980'));\n        $this->assertFalse($validator->isValid('9780812929981'));\n    }\n\n    /**\n     * Ensures that setSeparator() works as expected\n     *\n     * @return void\n     */\n    public function testType()\n    {\n        $validator = new Isbn();\n\n        $validator->setType(Isbn::AUTO);\n        $this->assertEquals(Isbn::AUTO, $validator->getType());\n\n        $validator->setType(Isbn::ISBN10);\n        $this->assertEquals(Isbn::ISBN10, $validator->getType());\n\n        $validator->setType(Isbn::ISBN13);\n        $this->assertEquals(Isbn::ISBN13, $validator->getType());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid ISBN type');\n        $validator->setType('X');\n    }\n\n    /**\n     * Ensures that setSeparator() works as expected\n     *\n     * @return void\n     */\n    public function testSeparator()\n    {\n        $validator = new Isbn();\n\n        $validator->setSeparator('-');\n        $this->assertEquals('-', $validator->getSeparator());\n\n        $validator->setSeparator(' ');\n        $this->assertEquals(' ', $validator->getSeparator());\n\n        $validator->setSeparator('');\n        $this->assertEquals('', $validator->getSeparator());\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Invalid ISBN separator');\n        $validator->setSeparator('X');\n    }\n\n\n    /**\n     * Ensures that __construct() works as expected\n     *\n     * @return void\n     */\n    public function testInitialization()\n    {\n        $options = ['type'      => Isbn::AUTO,\n                         'separator' => ' '];\n        $validator = new Isbn($options);\n        $this->assertEquals(Isbn::AUTO, $validator->getType());\n        $this->assertEquals(' ', $validator->getSeparator());\n\n        $options = ['type'      => Isbn::ISBN10,\n                         'separator' => '-'];\n        $validator = new Isbn($options);\n        $this->assertEquals(Isbn::ISBN10, $validator->getType());\n        $this->assertEquals('-', $validator->getSeparator());\n\n        $options = ['type'      => Isbn::ISBN13,\n                         'separator' => ''];\n        $validator = new Isbn($options);\n        $this->assertEquals(Isbn::ISBN13, $validator->getType());\n        $this->assertEquals('', $validator->getSeparator());\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testTypeAuto()\n    {\n        $validator = new Isbn();\n\n        $this->assertTrue($validator->isValid('0060929871'));\n        $this->assertFalse($validator->isValid('0-06-092987-1'));\n        $this->assertFalse($validator->isValid('0 06 092987 1'));\n\n        $this->assertTrue($validator->isValid('9780555023402'));\n        $this->assertFalse($validator->isValid('978-0-555023-40-2'));\n        $this->assertFalse($validator->isValid('978 0 555023 40 2'));\n\n        $validator->setSeparator('-');\n\n        $this->assertFalse($validator->isValid('0060929871'));\n        $this->assertTrue($validator->isValid('0-06-092987-1'));\n        $this->assertFalse($validator->isValid('0 06 092987 1'));\n\n        $this->assertFalse($validator->isValid('9780555023402'));\n        $this->assertTrue($validator->isValid('978-0-555023-40-2'));\n        $this->assertFalse($validator->isValid('978 0 555023 40 2'));\n\n        $validator->setSeparator(' ');\n\n        $this->assertFalse($validator->isValid('0060929871'));\n        $this->assertFalse($validator->isValid('0-06-092987-1'));\n        $this->assertTrue($validator->isValid('0 06 092987 1'));\n\n        $this->assertFalse($validator->isValid('9780555023402'));\n        $this->assertFalse($validator->isValid('978-0-555023-40-2'));\n        $this->assertTrue($validator->isValid('978 0 555023 40 2'));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testType10()\n    {\n        $validator = new Isbn();\n        $validator->setType(Isbn::ISBN10);\n\n        $this->assertTrue($validator->isValid('0060929871'));\n        $this->assertFalse($validator->isValid('9780555023402'));\n\n        $validator->setSeparator('-');\n\n        $this->assertTrue($validator->isValid('0-06-092987-1'));\n        $this->assertFalse($validator->isValid('978-0-555023-40-2'));\n\n        $validator->setSeparator(' ');\n\n        $this->assertTrue($validator->isValid('0 06 092987 1'));\n        $this->assertFalse($validator->isValid('978 0 555023 40 2'));\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testType13()\n    {\n        $validator = new Isbn();\n        $validator->setType(Isbn::ISBN13);\n\n        $this->assertFalse($validator->isValid('0060929871'));\n        $this->assertTrue($validator->isValid('9780555023402'));\n\n        $validator->setSeparator('-');\n\n        $this->assertFalse($validator->isValid('0-06-092987-1'));\n        $this->assertTrue($validator->isValid('978-0-555023-40-2'));\n\n        $validator->setSeparator(' ');\n\n        $this->assertFalse($validator->isValid('0 06 092987 1'));\n        $this->assertTrue($validator->isValid('978 0 555023 40 2'));\n    }\n\n    /**\n     * @group ZF-9605\n     */\n    public function testInvalidTypeGiven()\n    {\n        $validator = new Isbn();\n        $validator->setType(Isbn::ISBN13);\n\n        $this->assertFalse($validator->isValid((float) 1.2345));\n        $this->assertFalse($validator->isValid((object) 'Test'));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Isbn();\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/LessThanTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\LessThan;\n\n/**\n * @group      Zend_Validator\n */\nclass LessThanTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        /**\n         * The elements of each array are, in order:\n         *      - maximum\n         *      - expected validation result\n         *      - array of test input values\n         */\n        $valuesExpected = [\n            [100, true, [-1, 0, 0.01, 1, 99.999]],\n            [100, false, [100, 100.0, 100.01]],\n            ['a', false, ['a', 'b', 'c', 'd']],\n            ['z', true, ['x', 'y']],\n            [['max' => 100, 'inclusive' => true], true, [-1, 0, 0.01, 1, 99.999, 100, 100.0]],\n            [['max' => 100, 'inclusive' => true], false, [100.01]],\n            [['max' => 100, 'inclusive' => false], true, [-1, 0, 0.01, 1, 99.999]],\n            [['max' => 100, 'inclusive' => false], false, [100, 100.0, 100.01]]\n        ];\n\n        foreach ($valuesExpected as $element) {\n            $validator = new LessThan($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals($element[1], $validator->isValid($input));\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new LessThan(10);\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that getMax() returns expected value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $validator = new LessThan(10);\n        $this->assertEquals(10, $validator->getMax());\n    }\n\n    /**\n     * Ensures that getInclusive() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetInclusive()\n    {\n        $validator = new LessThan(10);\n        $this->assertEquals(false, $validator->getInclusive());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new LessThan(10);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new LessThan(10);\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function testConstructorAllowsSettingAllOptionsAsDiscreteArguments()\n    {\n        $validator = new LessThan(10, true);\n        $this->assertSame(10, $validator->getMax());\n        $this->assertTrue($validator->getInclusive());\n    }\n}\n"
  },
  {
    "path": "test/MessageTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\StringLength;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass MessageTest extends TestCase\n{\n    /**\n     * @var StringLength\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new StringLength(4, 8);\n    }\n\n    /**\n     * Ensures that we can change a specified message template by its key\n     * and that this message is returned when the input is invalid.\n     *\n     * @return void\n     */\n    public function testSetMessage()\n    {\n        $inputInvalid = 'abcdefghij';\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals(\"The input is more than 8 characters long\", current($messages));\n\n        $this->validator->setMessage(\n            'Your value is too long',\n            StringLength::TOO_LONG\n        );\n\n        $this->assertFalse($this->validator->isValid('abcdefghij'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long', current($messages));\n    }\n\n    /**\n     * Ensures that if we don't specify the message key, it uses\n     * the first one in the list of message templates.\n     * In the case of Zend_Validate_StringLength, TOO_SHORT is\n     * the one we should expect to change.\n     *\n     * @return void\n     */\n    public function testSetMessageDefaultKey()\n    {\n        $this->validator->setMessage(\n            'Your value is too short',\n            StringLength::TOO_SHORT\n        );\n\n        $this->assertFalse($this->validator->isValid('abc'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too short', current($messages));\n        $errors = array_keys($this->validator->getMessages());\n        $this->assertEquals(StringLength::TOO_SHORT, current($errors));\n    }\n\n    /**\n     * Ensures that we can include the %value% parameter in the message,\n     * and that it is substituted with the value we are validating.\n     *\n     * @return void\n     */\n    public function testSetMessageWithValueParam()\n    {\n        $this->validator->setMessage(\n            \"Your value '%value%' is too long\",\n            StringLength::TOO_LONG\n        );\n\n        $inputInvalid = 'abcdefghij';\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals(\"Your value '$inputInvalid' is too long\", current($messages));\n    }\n\n    /**\n     * Ensures that we can include the %length% parameter in the message,\n     * and that it is substituted with the length of the value we are validating.\n     *\n     * @return void\n     */\n    public function testSetMessageWithLengthParam()\n    {\n        $this->validator->setMessage(\n            \"The length of your value is '%length%'\",\n            StringLength::TOO_LONG\n        );\n        $inputInvalid = 'abcdefghij';\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals(\"The length of your value is '10'\", current($messages));\n    }\n\n    /**\n     * Ensures that we can include another parameter, defined on a\n     * class-by-class basis, in the message string.\n     * In the case of Zend_Validate_StringLength, one such parameter\n     * is %max%.\n     *\n     * @return void\n     */\n    public function testSetMessageWithOtherParam()\n    {\n        $this->validator->setMessage(\n            'Your value is too long, it should be no longer than %max%',\n            StringLength::TOO_LONG\n        );\n\n        $inputInvalid = 'abcdefghij';\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long, it should be no longer than 8', current($messages));\n    }\n\n    /**\n     * Ensures that if we set a parameter in the message that is not\n     * known to the validator class, it is not changed; %shazam% is\n     * left as literal text in the message.\n     *\n     * @return void\n     */\n    public function testSetMessageWithUnknownParam()\n    {\n        $this->validator->setMessage(\n            'Your value is too long, and btw, %shazam%!',\n            StringLength::TOO_LONG\n        );\n\n        $inputInvalid = 'abcdefghij';\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long, and btw, %shazam%!', current($messages));\n    }\n\n    /**\n     * Ensures that the validator throws an exception when we\n     * try to set a message for a key that is unknown to the class.\n     *\n     * @return void\n     */\n    public function testSetMessageExceptionInvalidKey()\n    {\n        $keyInvalid = 'invalidKey';\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('No message template exists for key');\n        $this->validator->setMessage(\n            'Your value is too long',\n            $keyInvalid\n        );\n    }\n\n    /**\n     * Ensures that we can set more than one message at a time,\n     * by passing an array of key/message pairs.  Both messages\n     * should be defined.\n     *\n     * @return void\n     */\n    public function testSetMessages()\n    {\n        $this->validator->setMessages(\n            [\n                StringLength::TOO_LONG  => 'Your value is too long',\n                StringLength::TOO_SHORT => 'Your value is too short'\n            ]\n        );\n\n        $this->assertFalse($this->validator->isValid('abcdefghij'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long', current($messages));\n\n        $this->assertFalse($this->validator->isValid('abc'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too short', current($messages));\n    }\n\n    /**\n     * Ensures that the magic getter gives us access to properties\n     * that are permitted to be substituted in the message string.\n     * The access is by the parameter name, not by the protected\n     * property variable name.\n     *\n     * @return void\n     */\n    public function testGetProperty()\n    {\n        $this->validator->setMessage(\n            'Your value is too long',\n            StringLength::TOO_LONG\n        );\n\n        $inputInvalid = 'abcdefghij';\n\n        $this->assertFalse($this->validator->isValid($inputInvalid));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long', current($messages));\n\n        $this->assertEquals($inputInvalid, $this->validator->value);\n        $this->assertEquals(8, $this->validator->max);\n        $this->assertEquals(4, $this->validator->min);\n    }\n\n    /**\n     * Ensures that the class throws an exception when we try to\n     * access a property that doesn't exist as a parameter.\n     *\n     * @return void\n     */\n    public function testGetPropertyException()\n    {\n        $this->validator->setMessage(\n            'Your value is too long',\n            StringLength::TOO_LONG\n        );\n\n        $this->assertFalse($this->validator->isValid('abcdefghij'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('Your value is too long', current($messages));\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('No property exists by the name ');\n        $this->validator->unknownProperty;\n    }\n\n    /**\n     * Ensures that getMessageVariables() returns an array of\n     * strings and that these strings that can be used as variables\n     * in a message.\n     */\n    public function testGetMessageVariables()\n    {\n        $vars = $this->validator->getMessageVariables();\n\n        $this->assertInternalType('array', $vars);\n        $this->assertEquals(['min', 'max', 'length'], $vars);\n        $message = 'variables: %notvar% ';\n        foreach ($vars as $var) {\n            $message .= \"%$var% \";\n        }\n        $this->validator->setMessage($message, StringLength::TOO_SHORT);\n\n        $this->assertFalse($this->validator->isValid('abc'));\n        $messages = $this->validator->getMessages();\n        $this->assertEquals('variables: %notvar% 4 8 3 ', current($messages));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/NotEmptyTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse stdClass;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\nuse Zend\\Validator\\NotEmpty;\n\n/**\n * @group      Zend_Validator\n */\nclass NotEmptyTest extends TestCase\n{\n    /**\n     * @var NotEmpty\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new NotEmpty();\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param array $types Array of type strings or constants\n     * @param integer $expected Expected value of calculated type\n     *\n     * @return void\n     * @dataProvider constructorWithTypeArrayProvider\n     */\n    public function testConstructorWithTypeArray($types, $expected)\n    {\n        $validator = new NotEmpty($types);\n        $this->assertEquals($expected, $validator->getType());\n    }\n\n    public function constructorWithTypeArrayProvider()\n    {\n        return [\n            [['php', 'boolean'], NotEmpty::PHP],\n            [['boolean', 'boolean'], NotEmpty::BOOLEAN],\n            [[NotEmpty::PHP, NotEmpty::BOOLEAN], NotEmpty::PHP],\n            [[NotEmpty::BOOLEAN, NotEmpty::BOOLEAN], NotEmpty::BOOLEAN],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * ZF-6708 introduces a change for validating integer 0; it is a valid\n     * integer value. '0' is also valid.\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @group ZF-6708\n     * @return void\n     * @dataProvider basicProvider\n     */\n    public function testBasic($value, $valid)\n    {\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and expected validity for the basic test\n     *\n     * @return array\n     */\n    public function basicProvider()\n    {\n        return [\n            ['word', true],\n            ['', false],\n            ['    ', false],\n            ['  word  ', true],\n            ['0', true],\n            [1, true],\n            [0, true],\n            [true, true],\n            [false, false],\n            [null, false],\n            [[], false],\n            [[5], true],\n            [0.0, true],\n            [1.0, true],\n            [new stdClass(), true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider booleanProvider\n     */\n    public function testOnlyBoolean($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::BOOLEAN);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function booleanProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider integerOnlyProvider\n     */\n    public function testOnlyInteger($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::INTEGER);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for when the validator is testing empty integer values\n     *\n     * @return array\n     */\n    public function integerOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, false],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider floatOnlyProvider\n     */\n    public function testOnlyFloat($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::FLOAT);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function floatOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, false],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider stringOnlyProvider\n     */\n    public function testOnlyString($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::STRING);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function stringOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider zeroOnlyProvider\n     */\n    public function testOnlyZero($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::ZERO);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function zeroOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider arrayOnlyProvider\n     */\n    public function testOnlyArray($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::EMPTY_ARRAY);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function arrayOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], false],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider nullOnlyProvider\n     */\n    public function testOnlyNull($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::NULL);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function nullOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider phpOnlyProvider\n     */\n    public function testOnlyPHP($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::PHP);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function phpOnlyProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, false],\n            [1, true],\n            [0.0, false],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], false],\n            [['xxx'], true],\n            [null, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider spaceOnlyProvider\n     */\n    public function testOnlySpace($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::SPACE);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function spaceOnlyProvider()\n    {\n        return [\n            [false, true],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider onlyAllProvider\n     */\n    public function testOnlyAll($value, $valid)\n    {\n        $this->validator->setType(NotEmpty::ALL);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function onlyAllProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, false],\n            [1, true],\n            [0.0, false],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], false],\n            [['xxx'], true],\n            [null, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider arrayConstantNotationProvider\n     */\n    public function testArrayConstantNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            [\n                'type' => [\n                    NotEmpty::ZERO,\n                    NotEmpty::STRING,\n                    NotEmpty::BOOLEAN\n                ]\n            ]\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function arrayConstantNotationProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider arrayConfigNotationProvider\n     */\n    public function testArrayConfigNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            [\n                'type' => [\n                    NotEmpty::ZERO,\n                    NotEmpty::STRING,\n                    NotEmpty::BOOLEAN],\n                'test' => false\n            ]\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function arrayConfigNotationProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider multiConstantNotationProvider\n     */\n    public function testMultiConstantNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            NotEmpty::ZERO + NotEmpty::STRING + NotEmpty::BOOLEAN\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider multiConstantNotationProvider\n     */\n    public function testMultiConstantBooleanOrNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            NotEmpty::ZERO | NotEmpty::STRING | NotEmpty::BOOLEAN\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function multiConstantNotationProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider stringNotationProvider\n     */\n    public function testStringNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            [\n                'type' => ['zero', 'string', 'boolean']\n            ]\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function stringNotationProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n\n    /**\n     * Ensures that the validator follows expected behavior so if a string is specified more than once, it doesn't\n     * cause different validations to run\n     *\n     * @param string  $string   Array of string type values\n     * @param integer $expected Expected type setting value\n     *\n     * @return void\n     *\n     * @dataProvider duplicateStringSettingProvider\n     */\n    public function testStringNotationWithDuplicate($string, $expected)\n    {\n        $type = [$string, $string];\n        $this->validator->setType($type);\n\n        $this->assertEquals($expected, $this->validator->getType());\n    }\n\n    /**\n     * Data provider for testStringNotationWithDuplicate method. Provides a string which will be duplicated. The test\n     * ensures that setting a string value more than once only turns on the appropriate bit once\n     *\n     * @return array\n     */\n    public function duplicateStringSettingProvider()\n    {\n        return [\n            ['boolean',      NotEmpty::BOOLEAN],\n            ['integer',      NotEmpty::INTEGER],\n            ['float',        NotEmpty::FLOAT],\n            ['string',       NotEmpty::STRING],\n            ['zero',         NotEmpty::ZERO],\n            ['array',        NotEmpty::EMPTY_ARRAY],\n            ['null',         NotEmpty::NULL],\n            ['php',          NotEmpty::PHP],\n            ['space',        NotEmpty::SPACE],\n            ['object',       NotEmpty::OBJECT],\n            ['objectstring', NotEmpty::OBJECT_STRING],\n            ['objectcount',  NotEmpty::OBJECT_COUNT],\n            ['all',          NotEmpty::ALL],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider singleStringNotationProvider\n     */\n    public function testSingleStringConstructorNotation($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            'boolean'\n        );\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider singleStringNotationProvider\n     */\n    public function testSingleStringSetTypeNotation($value, $valid)\n    {\n        $this->validator->setType('boolean');\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function singleStringNotationProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', true],\n            ['abc', true],\n            ['0', true],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @return void\n     *\n     * @dataProvider configObjectProvider\n     */\n    public function testConfigObject($value, $valid)\n    {\n        $options = ['type' => 'all'];\n        $config  = new \\Zend\\Config\\Config($options);\n\n        $this->validator = new NotEmpty(\n            $config\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function configObjectProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, false],\n            [1, true],\n            [0.0, false],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], false],\n            [['xxx'], true],\n            [null, false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testSettingFalseType()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Unknown');\n        $this->validator->setType(true);\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testGetType()\n    {\n        $this->assertEquals($this->validator->getDefaultType(), $this->validator->getType());\n    }\n\n    /**\n     * @group ZF-3236\n     */\n    public function testStringWithZeroShouldNotBeTreatedAsEmpty()\n    {\n        $this->assertTrue($this->validator->isValid('0'));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $v2 = new NotEmpty();\n        $this->assertTrue($this->validator->isValid($v2));\n    }\n\n    /**\n     * @ZF-8767\n     *\n     * @return void\n     */\n    public function testZF8767()\n    {\n        $valid = new NotEmpty(NotEmpty::STRING);\n\n        $this->assertFalse($valid->isValid(''));\n        $messages = $valid->getMessages();\n        $this->assertArrayHasKey('isEmpty', $messages);\n        $this->assertContains(\"can't be empty\", $messages['isEmpty']);\n    }\n\n    /**\n     * @return void\n     */\n    public function testObjects()\n    {\n        $valid = new NotEmpty(NotEmpty::STRING);\n        $object = new stdClass();\n\n        $this->assertFalse($valid->isValid($object));\n\n        $valid = new NotEmpty(NotEmpty::OBJECT);\n        $this->assertTrue($valid->isValid($object));\n    }\n\n    /**\n     * @return void\n     */\n    public function testStringObjects()\n    {\n        $valid = new NotEmpty(NotEmpty::STRING);\n\n        $object = $this->getMockBuilder(stdClass::class)\n            ->setMethods(['__toString'])\n            ->getMock();\n\n        $object->expects($this->atLeastOnce())\n            ->method('__toString')\n            ->will($this->returnValue('Test'));\n\n        $this->assertFalse($valid->isValid($object));\n\n        $valid = new NotEmpty(NotEmpty::OBJECT_STRING);\n        $this->assertTrue($valid->isValid($object));\n\n        $object = $this->getMockBuilder(stdClass::class)\n            ->setMethods(['__toString'])\n            ->getMock();\n        $object->expects($this->atLeastOnce())\n            ->method('__toString')\n            ->will($this->returnValue(''));\n\n        $this->assertFalse($valid->isValid($object));\n    }\n\n    /**\n     * @group ZF-11566\n     *\n     * @param mixed $value Value to test\n     * @param boolean $valid Expected validity of value\n     *\n     * @dataProvider arrayConfigNotationWithoutKeyProvider\n     */\n    public function testArrayConfigNotationWithoutKey($value, $valid)\n    {\n        $this->validator = new NotEmpty(\n            ['zero', 'string', 'boolean']\n        );\n\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides values and their expected validity for boolean empty\n     *\n     * @return array\n     */\n    public function arrayConfigNotationWithoutKeyProvider()\n    {\n        return [\n            [false, false],\n            [true, true],\n            [0, true],\n            [1, true],\n            [0.0, true],\n            [1.0, true],\n            ['', false],\n            ['abc', true],\n            ['0', false],\n            ['1', true],\n            [[], true],\n            [['xxx'], true],\n            [null, true],\n        ];\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testTypeAutoDetectionHasNoSideEffect()\n    {\n        $validator = new NotEmpty(['translatorEnabled' => true]);\n        $this->assertEquals($validator->getDefaultType(), $validator->getType());\n    }\n\n    public function testDefaultType()\n    {\n        $this->assertSame(\n            NotEmpty::BOOLEAN\n                | NotEmpty::STRING\n                | NotEmpty::EMPTY_ARRAY\n                | NotEmpty::NULL\n                | NotEmpty::SPACE\n                | NotEmpty::OBJECT,\n            $this->validator->getDefaultType()\n        );\n    }\n\n    /**\n     * Checks that the validation value matches the expected validity\n     *\n     * @param mixed $value Value to validate\n     * @param bool  $valid Expected validity\n     *\n     * @return void\n     */\n    protected function checkValidationValue($value, $valid)\n    {\n        $isValid = $this->validator->isValid($value);\n\n        if ($valid) {\n            $this->assertTrue($isValid);\n        } else {\n            $this->assertFalse($isValid);\n        }\n    }\n}\n"
  },
  {
    "path": "test/RegexTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Regex;\nuse ReflectionProperty;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass RegexTest extends TestCase\n{\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        /**\n         * The elements of each array are, in order:\n         *      - pattern\n         *      - expected validation result\n         *      - array of test input values\n         */\n        $valuesExpected = [\n            ['/[a-z]/', true, ['abc123', 'foo', 'a', 'z']],\n            ['/[a-z]/', false, ['123', 'A']]\n            ];\n        foreach ($valuesExpected as $element) {\n            $validator = new Regex($element[0]);\n            foreach ($element[2] as $input) {\n                $this->assertEquals($element[1], $validator->isValid($input));\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $validator = new Regex('/./');\n        $this->assertEquals([], $validator->getMessages());\n    }\n\n    /**\n     * Ensures that getPattern() returns expected value\n     *\n     * @return void\n     */\n    public function testGetPattern()\n    {\n        $validator = new Regex('/./');\n        $this->assertEquals('/./', $validator->getPattern());\n    }\n\n    /**\n     * Ensures that a bad pattern results in a thrown exception upon isValid() call\n     *\n     * @return void\n     */\n    public function testBadPattern()\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('Internal error parsing');\n        $validator = new Regex('/');\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $validator = new Regex('/./');\n        $this->assertFalse($validator->isValid([1 => 1]));\n    }\n\n    /**\n     * @ZF-11863\n     * @dataProvider specialCharValidationProvider\n     */\n    public function testSpecialCharValidation($expected, $input)\n    {\n        $validator = new Regex('/^[[:alpha:]\\']+$/iu');\n        $this->assertEquals(\n            $expected,\n            $validator->isValid($input),\n            'Reason: ' . implode('', $validator->getMessages())\n        );\n    }\n\n    /**\n     * The elements of each array are, in order:\n     *      - expected validation result\n     *      - test input value\n     */\n    public function specialCharValidationProvider()\n    {\n        return [\n            [true, 'test'],\n            [true, 'òèùtestòò'],\n            [true, 'testà'],\n            [true, 'teààst'],\n            [true, 'ààòòìùéé'],\n            [true, 'èùòìiieeà'],\n            [false, 'test99'],\n        ];\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Regex('//');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = new Regex('//');\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n\n    public function invalidConstructorArgumentsProvider()\n    {\n        return [\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.0],\n            'object'     => [(object) []],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidConstructorArgumentsProvider\n     */\n    public function testConstructorRaisesExceptionWhenProvidedInvalidArguments($options)\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $validator = new Regex($options);\n    }\n\n    public function testConstructorRaisesExceptionWhenProvidedWithInvalidOptionsArray()\n    {\n        $options = ['foo' => 'bar'];\n        $this->expectException(InvalidArgumentException::class);\n        $validator = new Regex($options);\n    }\n\n    public function testIsValidShouldReturnFalseWhenRegexPatternIsInvalid()\n    {\n        $validator = new Regex('//');\n        $pattern   = '/';\n\n        $r = new ReflectionProperty($validator, 'pattern');\n        $r->setAccessible(true);\n        $r->setValue($validator, $pattern);\n\n        $this->assertFalse($validator->isValid('test'));\n    }\n}\n"
  },
  {
    "path": "test/Sitemap/ChangefreqTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Sitemap;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Sitemap\\Changefreq;\n\n/**\n * @group      Zend_Validator\n */\nclass ChangefreqTest extends TestCase\n{\n    /**\n     * @var Changefreq\n     */\n    protected $validator;\n\n    protected function setUp()\n    {\n        $this->validator = new Changefreq();\n    }\n\n    /**\n     * Tests valid change frequencies\n     *\n     */\n    public function testValidChangefreqs()\n    {\n        $values = [\n            'always',  'hourly', 'daily', 'weekly',\n            'monthly', 'yearly', 'never'\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(true, $this->validator->isValid($value));\n        }\n    }\n\n    /**\n     * Tests strings that should be invalid\n     *\n     */\n    public function testInvalidStrings()\n    {\n        $values = [\n            'alwayz',  '_hourly', 'Daily', 'wEekly',\n            'mönthly ', ' yearly ', 'never ', 'rofl',\n            'yesterday',\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('is not a valid', current($messages));\n        }\n    }\n\n    /**\n     * Tests values that are not strings\n     *\n     */\n    public function testNotString()\n    {\n        $values = [\n            1, 1.4, null, new \\stdClass(), true, false\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('String expected', current($messages));\n        }\n    }\n}\n"
  },
  {
    "path": "test/Sitemap/LastmodTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Sitemap;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Sitemap\\Lastmod;\n\n/**\n * @group      Zend_Validator\n */\nclass LastmodTest extends TestCase\n{\n    /**\n     * @var Lastmod\n     */\n    protected $validator;\n\n    protected function setUp()\n    {\n        $this->validator = new Lastmod();\n    }\n\n    /**\n     * Tests valid change frequencies\n     *\n     */\n    public function testValidChangefreqs()\n    {\n        $values = [\n            '1994-05-11T18:00:09-08:45',\n            '1997-05-11T18:50:09+00:00',\n            '1998-06-11T01:00:09-02:00',\n            '1999-11-11T22:23:52+02:00',\n            '1999-11-11T22:23+02:00',\n            '2000-06-11',\n            '2001-04-14',\n            '2003-01-13',\n            '2005-01-01',\n            '2006-03-19',\n            '2007-08-31',\n            '2007-08-25'\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(true, $this->validator->isValid($value));\n        }\n    }\n\n    /**\n     * Tests strings that should be invalid\n     *\n     */\n    public function testInvalidStrings()\n    {\n        $values = [\n            '1995-05-11T18:60:09-08:45',\n            '1996-05-11T18:50:09+25:00',\n            '2002-13-11',\n            '2004-00-01',\n            '2006-01-01\\n'\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('is not a valid', current($messages));\n        }\n    }\n\n    /**\n     * Tests values that are not strings\n     *\n     */\n    public function testNotString()\n    {\n        $values = [\n            1, 1.4, null, new \\stdClass(), true, false\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('String expected', current($messages));\n        }\n    }\n}\n"
  },
  {
    "path": "test/Sitemap/LocTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Sitemap;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Sitemap\\Loc;\n\n/**\n * @group      Zend_Validator\n */\nclass LocTest extends TestCase\n{\n    /**\n     * @var Loc\n     */\n    protected $validator;\n\n    protected function setUp()\n    {\n        $this->validator = new Loc();\n    }\n\n    /**\n     * Tests valid locations\n     *\n     */\n    public function testValidLocs()\n    {\n        $values = [\n            'http://www.example.com',\n            'http://www.example.com/',\n            'http://www.exmaple.lan/',\n            'https://www.exmaple.com/?foo=bar',\n            'http://www.exmaple.com:8080/foo/bar/',\n            'https://user:pass@www.exmaple.com:8080/',\n            'https://www.exmaple.com/?foo=&quot;bar&apos;&amp;bar=&lt;bat&gt;'\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(true, $this->validator->isValid($value));\n        }\n    }\n\n    public static function invalidLocs()\n    {\n        return [\n            ['www.example.com'],\n            ['/news/'],\n            ['#'],\n            ['http:/example.com/'],\n            ['https://www.exmaple.com/?foo=\"bar\\'&bar=<bat>'],\n        ];\n    }\n\n    /**\n     * Tests invalid locations\n     * @todo A change in the URI API has led to most of these now validating\n     * @dataProvider invalidLocs\n     */\n    public function testInvalidLocs($url)\n    {\n        $this->markTestIncomplete('Test must be reworked');\n        $this->assertFalse($this->validator->isValid($url), $url);\n        $messages = $this->validator->getMessages();\n        $this->assertContains('is not a valid', current($messages));\n    }\n\n    /**\n     * Tests values that are not strings\n     *\n     */\n    public function testNotStrings()\n    {\n        $values = [\n            1, 1.4, null, new \\stdClass(), true, false\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('String expected', current($messages));\n        }\n    }\n}\n"
  },
  {
    "path": "test/Sitemap/PriorityTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\Sitemap;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Sitemap\\Priority;\n\n/**\n * @group      Zend_Validator\n */\nclass PriorityTest extends TestCase\n{\n    /**\n     * @var Priority\n     */\n    protected $validator;\n\n    protected function setUp()\n    {\n        $this->validator = new Priority();\n    }\n\n    /**\n     * Tests valid priorities\n     *\n     */\n    public function testValidPriorities()\n    {\n        $values = [\n            '0.0', '0.1', '0.2', '0.3', '0.4', '0.5',\n            '0.6', '0.7', '0.8', '0.9', '1.0', '0.99',\n            0.1, 0.6667, 0.0001, 0.4, 0, 1, .35\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(true, $this->validator->isValid($value));\n        }\n    }\n\n    /**\n     * Tests invalid priorities\n     *\n     */\n    public function testInvalidPriorities()\n    {\n        $values = [\n            -1, -0.1, 1.1, 100, 10, 2, '3', '-4',\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('is not a valid', current($messages));\n        }\n    }\n\n    /**\n     * Tests values that are no numbers\n     *\n     */\n    public function testNotNumbers()\n    {\n        $values = [\n            null, new \\stdClass(), true, false, 'abcd',\n        ];\n\n        foreach ($values as $value) {\n            $this->assertSame(false, $this->validator->isValid($value));\n            $messages = $this->validator->getMessages();\n            $this->assertContains('integer or float expected', current($messages));\n        }\n    }\n}\n"
  },
  {
    "path": "test/StaticValidatorTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\I18n\\Validator\\Alpha;\nuse Zend\\ServiceManager\\Exception\\ServiceNotFoundException;\nuse Zend\\ServiceManager\\ServiceManager;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Between;\nuse Zend\\Validator\\ValidatorPluginManager;\nuse Zend\\Validator\\StaticValidator;\n\n/**\n * @group      Zend_Validator\n */\nclass StaticValidatorTest extends TestCase\n{\n    /** @var Alpha */\n    public $validator;\n\n    /**\n     * Creates a new validation object for each test method\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        AbstractValidator::setDefaultTranslator(null);\n        StaticValidator::setPluginManager(null);\n        $this->validator = new Alpha();\n    }\n\n    public function tearDown()\n    {\n        AbstractValidator::setDefaultTranslator(null);\n        AbstractValidator::setMessageLength(-1);\n    }\n\n    public function testCanSetGlobalDefaultTranslator()\n    {\n        $translator = new TestAsset\\Translator();\n        AbstractValidator::setDefaultTranslator($translator);\n        $this->assertSame($translator, AbstractValidator::getDefaultTranslator());\n    }\n\n    public function testGlobalDefaultTranslatorUsedWhenNoLocalTranslatorSet()\n    {\n        $this->testCanSetGlobalDefaultTranslator();\n        $this->assertSame(AbstractValidator::getDefaultTranslator(), $this->validator->getTranslator());\n    }\n\n    public function testLocalTranslatorPreferredOverGlobalTranslator()\n    {\n        $this->testCanSetGlobalDefaultTranslator();\n        $translator = new TestAsset\\Translator();\n        $this->validator->setTranslator($translator);\n        $this->assertNotSame(AbstractValidator::getDefaultTranslator(), $this->validator->getTranslator());\n    }\n\n    public function testMaximumErrorMessageLength()\n    {\n        if (! extension_loaded('intl')) {\n            $this->markTestSkipped('ext/intl not enabled');\n        }\n\n        $this->assertEquals(-1, AbstractValidator::getMessageLength());\n        AbstractValidator::setMessageLength(10);\n        $this->assertEquals(10, AbstractValidator::getMessageLength());\n\n        $loader = new TestAsset\\ArrayTranslator();\n        $loader->translations = [\n            'Invalid type given. String expected' => 'This is the translated message for %value%',\n        ];\n        $translator = new TestAsset\\Translator();\n        $translator->getPluginManager()->setService('default', $loader);\n        $translator->addTranslationFile('default', null);\n\n        $this->validator->setTranslator($translator);\n        $this->assertFalse($this->validator->isValid(123));\n        $messages = $this->validator->getMessages();\n\n        $this->assertArrayHasKey(Alpha::INVALID, $messages);\n        $this->assertEquals('This is...', $messages[Alpha::INVALID]);\n    }\n\n    public function testSetGetMessageLengthLimitation()\n    {\n        AbstractValidator::setMessageLength(5);\n        $this->assertEquals(5, AbstractValidator::getMessageLength());\n\n        $valid = new Between(1, 10);\n        $this->assertFalse($valid->isValid(24));\n        $message = current($valid->getMessages());\n        $this->assertLessThanOrEqual(5, strlen($message));\n    }\n\n    public function testSetGetDefaultTranslator()\n    {\n        $translator = new TestAsset\\Translator();\n        AbstractValidator::setDefaultTranslator($translator);\n        $this->assertSame($translator, AbstractValidator::getDefaultTranslator());\n    }\n\n    /* plugin loading */\n\n    public function testLazyLoadsValidatorPluginManagerByDefault()\n    {\n        $plugins = StaticValidator::getPluginManager();\n        $this->assertInstanceOf(ValidatorPluginManager::class, $plugins);\n    }\n\n    public function testCanSetCustomPluginManager()\n    {\n        $plugins = new ValidatorPluginManager($this->getMockBuilder(ServiceManager::class)->getMock());\n        StaticValidator::setPluginManager($plugins);\n        $this->assertSame($plugins, StaticValidator::getPluginManager());\n    }\n\n    public function testPassingNullWhenSettingPluginManagerResetsPluginManager()\n    {\n        $plugins = new ValidatorPluginManager($this->getMockBuilder(ServiceManager::class)->getMock());\n        StaticValidator::setPluginManager($plugins);\n        $this->assertSame($plugins, StaticValidator::getPluginManager());\n        StaticValidator::setPluginManager(null);\n        $this->assertNotSame($plugins, StaticValidator::getPluginManager());\n    }\n\n    public function parameterizedData()\n    {\n        return [\n            'valid-positive-range'   => [5, 'between', ['min' => 1, 'max' => 10], true],\n            'valid-negative-range'   => [-5, 'between', ['min' => -10, 'max' => -1], true],\n            'invalid-positive-range' => [-5, 'between', ['min' => 1, 'max' => 10], false],\n            'invalid-negative-range' => [5, 'between', ['min' => -10, 'max' => -1], false],\n        ];\n    }\n\n    /**\n     * @dataProvider parameterizedData\n     */\n    public function testExecuteValidWithParameters($value, $validator, $options, $expected)\n    {\n        $this->assertSame($expected, StaticValidator::execute($value, $validator, $options));\n    }\n\n    public function invalidParameterizedData()\n    {\n        return [\n            'positive-range' => [5, 'between', [1, 10]],\n            'negative-range' => [-5, 'between', [-10, -1]],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidParameterizedData\n     */\n    public function testExecuteRaisesExceptionForIndexedOptionsArray($value, $validator, $options)\n    {\n        $this->expectException(\\InvalidArgumentException::class);\n        $this->expectExceptionMessage('options');\n        StaticValidator::execute($value, $validator, $options);\n    }\n\n    /**\n     * Ensures that if we specify a validator class basename that doesn't\n     * exist in the namespace, is() throws an exception.\n     *\n     * Refactored to conform with ZF-2724.\n     *\n     * @group  ZF-2724\n     * @return void\n     */\n    public function testStaticFactoryClassNotFound()\n    {\n        $this->expectException(ServiceNotFoundException::class);\n        StaticValidator::execute('1234', 'UnknownValidator');\n    }\n}\n"
  },
  {
    "path": "test/StepTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator;\nuse ReflectionMethod;\n\nclass StepTest extends TestCase\n{\n    /**\n     * Step object\n     *\n     * @var \\Zend\\Validator\\Step\n     */\n    protected $validator;\n\n    /**\n     * Creates a new Zend\\Validator\\Step object for each test method\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        $this->validator = new Validator\\Step();\n    }\n\n    public function valuesToValidate()\n    {\n        return [\n            'float'              => [1.00, true],\n            'zero-float'         => [0.00, true],\n            'int-2'              => [2, true],\n            'int-3'              => [3, true],\n            'float-fraction'     => [2.1, false],\n            'string-2'           => ['2', true],\n            'string-1'           => ['1', true],\n            'string-decimal'     => ['1.2', false],\n            'string-hundredths'  => [1.01, false],\n            'string-non-decimal' => ['not a scalar', false],\n        ];\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @dataProvider valuesToValidate\n     */\n    public function testBasic($value, $expected)\n    {\n        // By default, baseValue == 0 and step == 1\n        $this->assertSame(\n            $expected,\n            $this->validator->isValid($value)\n        );\n    }\n\n    public function decimalValues()\n    {\n        return [\n            'between-step'        => [1.1, false],\n            'base-value'          => [0.1, true],\n            'first-step'          => [2.1, true],\n            'between-steps'       => [3.1, false],\n            'string-first-step'   => ['2.1', true],\n            'string-between-step' => ['1.1', false],\n            'fine-grained'        => [1.11, false],\n            'string-non-decimal'  => ['not a scalar', false],\n        ];\n    }\n\n    /**\n     * @dataProvider decimalValues\n     */\n    public function testDecimalBaseValue($value, $expected)\n    {\n        $validator = new Validator\\Step([\n            'baseValue' => 0.1,\n            'step'      => 2\n        ]);\n\n        $this->assertSame($expected, $validator->isValid($value));\n    }\n\n    public function decimalStepValues()\n    {\n        return [\n            'between-0.1'        => [0.1, false],\n            'between-1.1'        => [1.1, false],\n            'first-step'         => [2.1, true],\n            'between-3.1'        => [3.1, false],\n            'second-step'        => [4.2, true],\n            'third-step'         => [6.3, true],\n            'fourth-step'        => [8.4, true],\n            'fifth-step'         => [10.5, true],\n            'sixth-step'         => [12.6, true],\n            'seventh-step'       => [14.7, true],\n            'eight-step'         => [16.8, true],\n            'ninth-step'         => [18.9, true],\n            'tenth-step'         => [21.0, true],\n            'string-1.1'         => ['1.1', false],\n            'string-1.11'        => [1.11, false],\n            'string-first-step'  => ['2.1', true],\n            'string-non-decimal' => ['not a scalar', false],\n        ];\n    }\n\n    /**\n     * @dataProvider decimalStepValues\n     */\n    public function testDecimalStep($value, $expected)\n    {\n        $validator = new Validator\\Step([\n            'baseValue' => 0,\n            'step'      => 2.1\n        ]);\n        $this->assertSame($expected, $validator->isValid($value));\n    }\n\n\n    public function decimalStepSubstractionBugValues()\n    {\n        return [\n            'base-value-20' => [20, 20.06, true],\n            'base-value-40' => [40, 40.09, true],\n            'base-value-50' => [50, 50.09, true],\n        ];\n    }\n\n    /**\n     * @dataProvider decimalStepSubstractionBugValues\n     */\n    public function testDecimalStepSubstractionBug($baseValue, $value, $expected)\n    {\n        $validator = new Validator\\Step([\n            'baseValue' => $baseValue,\n            'step'      => 0.01\n        ]);\n\n        $this->assertSame($expected, $validator->isValid($value));\n    }\n\n    public function decimalHundredthStepValues()\n    {\n        return [\n            'first-step'       => [0.01, true],\n            'second-step'      => [0.02, true],\n            'third-step'       => [0.03, true],\n            'fourth-step'      => [0.04, true],\n            'fifth-step'       => [0.05, true],\n            'sixth-step'       => [0.06, true],\n            'seventh-step'     => [0.07, true],\n            'eighth-step'      => [0.08, true],\n            'ninth-step'       => [0.09, true],\n            'thousandth-0.001' => [0.001, false],\n            'thousandth-0.002' => [0.002, false],\n            'thousandth-0.003' => [0.003, false],\n            'thousandth-0.004' => [0.004, false],\n            'thousandth-0.005' => [0.005, false],\n            'thousandth-0.006' => [0.006, false],\n            'thousandth-0.007' => [0.007, false],\n            'thousandth-0.008' => [0.008, false],\n            'thousandth-0.009' => [0.009, false]\n        ];\n    }\n\n    /**\n     * @dataProvider decimalHundredthStepValues\n     */\n    public function testdecimalHundredthStep($value, $expected)\n    {\n        $validator = new Validator\\Step([\n            'baseValue' => 0,\n            'step'      => 0.01\n        ]);\n\n        $this->assertSame($expected, $validator->isValid($value));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures that set/getBaseValue() works\n     */\n    public function testCanSetBaseValue()\n    {\n        $this->validator->setBaseValue(2);\n        $this->assertEquals('2', $this->validator->getBaseValue());\n    }\n\n    /**\n     * Ensures that set/getStep() works\n     */\n    public function testCanSetStepValue()\n    {\n        $this->validator->setStep(2);\n        $this->assertEquals('2', $this->validator->getStep());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = new Validator\\Step();\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testSetStepFloat()\n    {\n        $step = 0.01;\n        $this->validator->setStep($step);\n        $this->assertAttributeSame($step, 'step', $this->validator);\n    }\n\n    public function testSetStepString()\n    {\n        $step = '0.01';\n        $this->validator->setStep($step);\n        $this->assertAttributeSame((float) $step, 'step', $this->validator);\n    }\n\n    public function testConstructorCanAcceptAllOptionsAsDiscreteArguments()\n    {\n        $baseValue = 1.00;\n        $step      = 0.01;\n        $validator = new Validator\\Step($baseValue, $step);\n\n        $this->assertSame($step, $validator->getStep());\n        $this->assertSame($baseValue, $validator->getBaseValue());\n    }\n\n    public function testFModNormalizesZeroToFloatOne()\n    {\n        $validator = new Validator\\Step();\n\n        $r = new ReflectionMethod($validator, 'fmod');\n        $r->setAccessible(true);\n\n        $this->assertSame(1.0, $r->invoke($validator, 0, 0));\n    }\n}\n"
  },
  {
    "path": "test/StringLengthTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\StringLength;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * @group      Zend_Validator\n */\nclass StringLengthTest extends TestCase\n{\n    /**\n     * @var StringLength\n     */\n    protected $validator;\n\n    /**\n     * Creates a new StringLength object for each test method\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        $this->validator = new StringLength();\n    }\n\n    /**\n     * Ensures that the validator follows expected behavior\n     *\n     * @return void\n     */\n    public function testBasic()\n    {\n        if (PHP_VERSION_ID < 50600) {\n            iconv_set_encoding('internal_encoding', 'UTF-8');\n        } else {\n            ini_set('default_charset', 'UTF-8');\n        }\n\n        /**\n         * The elements of each array are, in order:\n         *      - minimum length\n         *      - maximum length\n         *      - expected validation result\n         *      - array of test input values\n         */\n        $valuesExpected = [\n            [0, null, true, ['', 'a', 'ab']],\n            [-1, null, true, ['']],\n            [2, 2, true, ['ab', '  ']],\n            [2, 2, false, ['a', 'abc']],\n            [1, null, false, ['']],\n            [2, 3, true, ['ab', 'abc']],\n            [2, 3, false, ['a', 'abcd']],\n            [3, 3, true, ['äöü']],\n            [6, 6, true, ['Müller']]\n            ];\n        foreach ($valuesExpected as $element) {\n            $validator = new StringLength($element[0], $element[1]);\n            foreach ($element[3] as $input) {\n                $this->assertEquals($element[2], $validator->isValid($input));\n            }\n        }\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures that getMin() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMin()\n    {\n        $this->assertEquals(0, $this->validator->getMin());\n    }\n\n    /**\n     * Ensures that getMax() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMax()\n    {\n        $this->assertEquals(null, $this->validator->getMax());\n    }\n\n    /**\n     * Ensures that setMin() throws an exception when given a value greater than the maximum\n     *\n     * @return void\n     */\n    public function testSetMinExceptionGreaterThanMax()\n    {\n        $max = 1;\n        $min = 2;\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('The minimum must be less than or equal to the maximum length, but');\n        $this->validator->setMax($max)->setMin($min);\n    }\n\n    /**\n     * Ensures that setMax() throws an exception when given a value less than the minimum\n     *\n     * @return void\n     */\n    public function testSetMaxExceptionLessThanMin()\n    {\n        $max = 1;\n        $min = 2;\n\n        $this->expectException(InvalidArgumentException::class);\n        $this->expectExceptionMessage('The maximum must be greater than or equal to the minimum length, but ');\n        $this->validator->setMin($min)->setMax($max);\n    }\n\n    /**\n     * @return void\n     */\n    public function testDifferentEncodingWithValidator()\n    {\n        if (PHP_VERSION_ID < 50600) {\n            iconv_set_encoding('internal_encoding', 'UTF-8');\n        } else {\n            ini_set('default_charset', 'UTF-8');\n        }\n\n        $validator = new StringLength(2, 2, 'UTF-8');\n        $this->assertEquals(true, $validator->isValid('ab'));\n\n        $this->assertEquals('UTF-8', $validator->getEncoding());\n        $validator->setEncoding('ISO-8859-1');\n        $this->assertEquals('ISO-8859-1', $validator->getEncoding());\n    }\n\n    /**\n     * @ZF-4352\n     */\n    public function testNonStringValidation()\n    {\n        $this->assertFalse($this->validator->isValid([1 => 1]));\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageTemplates'),\n            'messageTemplates',\n            $validator\n        );\n    }\n\n    public function testEqualsMessageVariables()\n    {\n        $validator = $this->validator;\n        $this->assertAttributeEquals(\n            $validator->getOption('messageVariables'),\n            'messageVariables',\n            $validator\n        );\n    }\n}\n"
  },
  {
    "path": "test/TestAsset/ArrayTranslator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\I18n\\Translator as I18nTranslator;\n\nclass ArrayTranslator implements I18nTranslator\\Loader\\FileLoaderInterface\n{\n    public $translations;\n\n    public function load($filename, $locale)\n    {\n        $textDomain = new I18nTranslator\\TextDomain($this->translations);\n        return $textDomain;\n    }\n}\n"
  },
  {
    "path": "test/TestAsset/ConcreteValidator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\Validator\\AbstractValidator;\n\nclass ConcreteValidator extends AbstractValidator\n{\n    const FOO_MESSAGE = 'fooMessage';\n    const BAR_MESSAGE = 'barMessage';\n\n    protected $messageTemplates = [\n        'fooMessage' => '%value% was passed',\n        'barMessage' => '%value% was wrong'\n    ];\n\n    public function isValid($value)\n    {\n        $this->setValue($value);\n        $this->error(self::FOO_MESSAGE);\n        $this->error(self::BAR_MESSAGE);\n        return false;\n    }\n}\n"
  },
  {
    "path": "test/TestAsset/CreditCardValidatorExtension.php",
    "content": "<?php\n/**\n * @see       https://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   https://github.com/zendframework/zend-validator/blob/master/LICENSE.md New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\Validator\\CreditCard;\n\nclass CreditCardValidatorExtension extends CreditCard\n{\n    const TEST_TYPE = 'Test_Type';\n}\n"
  },
  {
    "path": "test/TestAsset/EmailValidatorWithExposedIsReserved.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\Validator\\EmailAddress;\n\n/**\n * @see ZF-12347\n */\nclass EmailValidatorWithExposedIsReserved extends EmailAddress\n{\n    public function isReserved($host)\n    {\n        return parent::isReserved($host);\n    }\n}\n"
  },
  {
    "path": "test/TestAsset/HttpClientException.php",
    "content": "<?php\n\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Psr\\Http\\Client\\ClientExceptionInterface;\n\nclass HttpClientException extends \\Exception implements ClientExceptionInterface\n{\n\n}\n"
  },
  {
    "path": "test/TestAsset/SessionManager.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\Session\\AbstractManager;\nuse Zend\\EventManager\\EventManagerInterface;\nuse Zend\\Session\\Storage\\ArrayStorage;\n\nclass SessionManager extends AbstractManager\n{\n    public $started = false;\n\n    protected $configDefaultClass  = 'Zend\\Session\\Configuration\\StandardConfiguration';\n    protected $storageDefaultClass = ArrayStorage::class;\n\n    public function start()\n    {\n        $this->started = true;\n    }\n\n    public function destroy()\n    {\n        $this->started = false;\n    }\n\n    public function stop()\n    {\n    }\n\n    public function writeClose()\n    {\n        $this->started = false;\n    }\n\n    public function getName()\n    {\n    }\n\n    public function setName($name)\n    {\n    }\n\n    public function getId()\n    {\n    }\n\n    public function setId($id)\n    {\n    }\n\n    public function regenerateId()\n    {\n    }\n\n    public function rememberMe($ttl = null)\n    {\n    }\n\n    public function forgetMe()\n    {\n    }\n\n\n    public function setValidatorChain(EventManagerInterface $chain)\n    {\n    }\n\n    public function getValidatorChain()\n    {\n    }\n\n    public function isValid()\n    {\n    }\n\n\n    public function sessionExists()\n    {\n    }\n\n    public function expireSessionCookie()\n    {\n    }\n}\n"
  },
  {
    "path": "test/TestAsset/Translator.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator\\TestAsset;\n\nuse Zend\\I18n\\Translator\\Translator as I18nTranslator;\nuse Zend\\Validator\\Translator\\TranslatorInterface as ValidatorTranslatorInterface;\n\nclass Translator extends I18nTranslator implements ValidatorTranslatorInterface\n{\n}\n"
  },
  {
    "path": "test/TimezoneTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Timezone;\nuse Zend\\Validator\\Exception\\InvalidArgumentException;\n\n/**\n * Tests for {@see \\Zend\\Validator\\Timezone}\n *\n * @covers \\Zend\\Validator\\Timezone\n */\nclass TimezoneTest extends TestCase\n{\n    /**\n     * @var Timezone\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Timezone();\n    }\n\n    /**\n     * Test locations\n     *\n     * @return void\n     *\n     * @dataProvider locationProvider\n     */\n    public function testLocations($value, $valid)\n    {\n        $this->validator->setType(Timezone::LOCATION);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Test locations by type is string\n     *\n     * @return void\n     *\n     * @dataProvider locationProvider\n     */\n    public function testLocationsByTypeAsString($value, $valid)\n    {\n        $this->validator->setType('location');\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides location values\n     *\n     * @return array\n     */\n    public function locationProvider()\n    {\n        return [\n            ['America/Anguilla', true],\n            ['Antarctica/Palmer', true],\n            ['Asia/Dubai', true],\n            ['Atlantic/Cape_Verde', true],\n            ['Australia/Broken_Hill', true],\n            ['America/Sao_Paulo', true],\n            ['America/Toronto', true],\n            ['Pacific/Easter', true],\n            ['Europe/Copenhagen', true],\n            ['Indian/Maldives', true],\n\n            ['cest', false],              // abbreviation of Anadyr Summer Time\n\n            ['Asia/London', false],        // wrong location\n            ['', false],                   // empty string\n            [null, false],                 // null value\n        ];\n    }\n\n    /**\n     * Test abbreviations\n     *\n     * @return void\n     *\n     * @dataProvider abbreviationProvider\n     */\n    public function testAbbreviations($value, $valid)\n    {\n        $this->validator->setType(Timezone::ABBREVIATION);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Test abbreviations byTypeAsString\n     *\n     * @return void\n     *\n     * @dataProvider abbreviationProvider\n     */\n    public function testAbbreviationsByTypeAsString($value, $valid)\n    {\n        $this->validator->setType('abbreviation');\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides abbreviation values\n     *\n     * @return array\n     */\n    public function abbreviationProvider()\n    {\n        return [\n            ['cest', true],                // Central European Summer Time\n            ['hkt', true],                 // Hong Kong Time\n            ['nzdt', true],                // New Zealand Daylight Time\n            ['sast', true],                // South Africa Standard Time\n\n            ['America/Toronto', false],    // location\n\n            ['xyz', false],                // wrong abbreviation\n            ['', false],                   // empty string\n            [null, false],                 // null value\n        ];\n    }\n\n    /**\n     * Test locations and abbreviations\n     *\n     * @return void\n     *\n     * @dataProvider locationAndAbbreviationProvider\n     */\n    public function testlocationsAndAbbreviationsWithAllTypeAsString($value, $valid)\n    {\n        $this->validator->setType(Timezone::ALL);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Test locations and abbreviations\n     *\n     * @return void\n     *\n     * @dataProvider locationAndAbbreviationProvider\n     */\n    public function testlocationsAndAbbreviationsWithAllTypeAsArray($value, $valid)\n    {\n        $this->validator->setType([Timezone::LOCATION, Timezone::ABBREVIATION]);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Test locations and abbreviations\n     *\n     * @return void\n     *\n     * @dataProvider locationAndAbbreviationProvider\n     */\n    public function testlocationsAndAbbreviationsWithAllTypeAsArrayWithStrings($value, $valid)\n    {\n        $this->validator->setType(['location', 'abbreviation']);\n        $this->checkValidationValue($value, $valid);\n    }\n\n    /**\n     * Provides location and abbreviation values\n     *\n     * @return array\n     */\n    public function locationAndAbbreviationProvider()\n    {\n        return [\n            ['America/Anguilla', true],\n            ['Antarctica/Palmer', true],\n            ['Asia/Dubai', true],\n            ['Atlantic/Cape_Verde', true],\n            ['Australia/Broken_Hill', true],\n\n            ['hkt', true],                 // Hong Kong Time\n            ['nzdt', true],                // New Zealand Daylight Time\n            ['sast', true],                // South Africa Standard Time\n\n            ['xyz', false],                // wrong abbreviation\n            ['Asia/London', false],        // wrong location\n\n            ['', false],                   // empty string\n            [null, false],                 // null value\n        ];\n    }\n\n    /**\n     * Test wrong type\n     *\n     * @return void\n     *\n     * @dataProvider wrongTypesProvider\n     */\n    public function testWrongType($value)\n    {\n        $this->checkExpectedException($value);\n    }\n\n    /**\n     * Provides wrong types\n     *\n     * @return array\n     */\n    public function wrongTypesProvider()\n    {\n        return [\n            [null],\n            [''],\n            [[]],\n            [0],\n            [4],\n        ];\n    }\n\n    /**\n     * Test pass `type` option through constructor\n     *\n     *  @return void\n     */\n    public function testTypeThroughConstructor()\n    {\n        $timezone1 = new Timezone(Timezone::LOCATION);\n        $this->assertTrue($timezone1->isValid('Asia/Dubai'));\n        $this->assertFalse($timezone1->isValid('sast'));\n\n        $timezone2 = new Timezone('location');\n        $this->assertTrue($timezone2->isValid('Asia/Dubai'));\n        $this->assertFalse($timezone2->isValid('sast'));\n\n        $timezone3 = new Timezone(['type' => 'location']);\n        $this->assertTrue($timezone3->isValid('Asia/Dubai'));\n        $this->assertFalse($timezone3->isValid('sast'));\n\n        $timezone4 = new Timezone(Timezone::ABBREVIATION);\n        $this->assertFalse($timezone4->isValid('Asia/Dubai'));\n        $this->assertTrue($timezone4->isValid('sast'));\n\n        $timezone5 = new Timezone('abbreviation');\n        $this->assertFalse($timezone5->isValid('Asia/Dubai'));\n        $this->assertTrue($timezone5->isValid('sast'));\n\n        $timezone6 = new Timezone(['type' => 'abbreviation']);\n        $this->assertFalse($timezone6->isValid('Asia/Dubai'));\n        $this->assertTrue($timezone6->isValid('sast'));\n\n        // default value is `all`\n        $timezone7 = new Timezone();\n        $this->assertTrue($timezone7->isValid('Asia/Dubai'));\n        $this->assertTrue($timezone7->isValid('sast'));\n\n        $timezone8 = new Timezone(['type' => ['location', 'abbreviation']]);\n        $this->assertTrue($timezone8->isValid('Asia/Dubai'));\n        $this->assertTrue($timezone8->isValid('sast'));\n    }\n\n    /**\n     * @param mixed $invalidType\n     *\n     * @dataProvider getInvalidTypes\n     */\n    public function testRejectsInvalidIntType($invalidType)\n    {\n        $this->expectException(InvalidArgumentException::class);\n\n        new Timezone(['type' => $invalidType]);\n    }\n\n    /**\n     * Checks that the validation value matches the expected validity\n     *\n     * @param mixed $value Value to validate\n     * @param bool  $valid Expected validity\n     *\n     * @return void\n     */\n    protected function checkValidationValue($value, $valid)\n    {\n        $isValid = $this->validator->isValid($value);\n\n        if ($valid) {\n            $this->assertTrue($isValid);\n        } else {\n            $this->assertFalse($isValid);\n        }\n    }\n\n    /**\n     * Checks expected exception on wrong type\n     *\n     * @param mixed $value Value to validate\n     *\n     * @return void\n     */\n    protected function checkExpectedException($value)\n    {\n        $this->expectException(InvalidArgumentException::class);\n        $this->validator->setType($value);\n    }\n\n    /**\n     * Data provider\n     *\n     * @return mixed[][]\n     */\n    public function getInvalidTypes()\n    {\n        return [\n            [new \\stdClass()],\n            [[]],\n            [0],\n            [10],\n            ['foo'],\n        ];\n    }\n}\n"
  },
  {
    "path": "test/UndisclosedPasswordTest.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2019 Zend Technologies USA Inc. (https://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Http\\Client\\ClientExceptionInterface;\nuse Psr\\Http\\Client\\ClientInterface;\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseFactoryInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse ReflectionClass;\nuse Zend\\Validator\\UndisclosedPassword;\nuse ZendTest\\Validator\\TestAsset\\HttpClientException;\n\nclass UndisclosedPasswordTest extends TestCase\n{\n    /**\n     * @var ClientInterface\n     */\n    private $httpClient;\n\n    /**\n     * @var RequestInterface\n     */\n    private $httpRequest;\n\n    /**\n     * @var ResponseInterface\n     */\n    private $httpResponse;\n\n    /**\n     * @var UndisclosedPassword\n     */\n    private $validator;\n\n    /**\n     * @inheritDoc\n     */\n    public function setUp()\n    {\n        $this->httpClient = $this->getMockBuilder(ClientInterface::class)\n            ->getMockForAbstractClass();\n        $this->httpRequest = $this->getMockBuilder(RequestFactoryInterface::class)\n            ->getMockForAbstractClass();\n        $this->httpResponse = $this->getMockBuilder(ResponseInterface::class)\n            ->getMockForAbstractClass();\n        $responseFactoryInterface = $this->getMockBuilder(ResponseFactoryInterface::class)\n            ->getMockForAbstractClass();\n\n        $this->validator = new UndisclosedPassword(\n            $this->httpClient,\n            $this->httpRequest,\n            $responseFactoryInterface\n        );\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function tearDown()\n    {\n        $this->httpClient = null;\n    }\n\n    /**\n     * @param string|object $classOrInstance\n     * @return mixed\n     */\n    public function getConstant(string $constant, $classOrInstance)\n    {\n        $r = new ReflectionClass($classOrInstance);\n        return $r->getConstant($constant);\n    }\n\n    /**\n     * Data provider returning good, strong and unseen\n     * passwords to be used in the validator.\n     *\n     * @return array\n     */\n    public function goodPasswordProvider()\n    {\n        return [\n            ['ABi$B47es.Pfg3n9PjPi'],\n            ['potence tipple would frisk shoofly'],\n        ];\n    }\n\n    /**\n     * Data provider for most common used passwords\n     *\n     * @return array\n     * @see https://en.wikipedia.org/wiki/List_of_the_most_common_passwords\n     */\n    public function seenPasswordProvider()\n    {\n        return [\n            ['123456'],\n            ['password'],\n            ['123456789'],\n            ['12345678'],\n            ['12345'],\n        ];\n    }\n\n    /**\n     * Testing that we reject invalid password types\n     *\n     * @covers \\Zend\\Validator\\UndisclosedPassword\n     * @covers \\Zend\\Validator\\AbstractValidator\n     * @todo Can be replaced by a \\TypeError being thrown in PHP 7.0 or up\n     */\n    public function testValidationFailsForInvalidInput()\n    {\n        $this->assertFalse($this->validator->isValid(true));\n        $this->assertFalse($this->validator->isValid((new \\stdClass())));\n        $this->assertFalse($this->validator->isValid(['foo']));\n    }\n\n    /**\n     * Test that a given password was not found in the HIBP\n     * API service.\n     *\n     * @param string $password\n     *\n     * @covers \\Zend\\Validator\\UndisclosedPassword\n     * @dataProvider goodPasswordProvider\n     */\n    public function testStrongUnseenPasswordsPassValidation($password)\n    {\n        $this->httpResponse->method('getBody')\n            ->will($this->returnCallback(function () use ($password) {\n                $hash = \\sha1('zend-validator');\n                return sprintf(\n                    '%s:%d',\n                    strtoupper(substr($hash, $this->getConstant(\n                        'HIBP_K_ANONYMITY_HASH_RANGE_LENGTH',\n                        UndisclosedPassword::class\n                    ))),\n                    rand(0, 100000)\n                );\n            }));\n        $this->httpClient->method('sendRequest')\n            ->will($this->returnValue($this->httpResponse));\n\n        $this->assertTrue($this->validator->isValid($password));\n    }\n\n    /**\n     * Test that a given password was already seen in the HIBP\n     * AP service.\n     *\n     * @param string $password\n     * @dataProvider seenPasswordProvider\n     * @covers \\Zend\\Validator\\UndisclosedPassword\n     * @covers \\Zend\\Validator\\AbstractValidator\n     */\n    public function testBreachedPasswordsDoNotPassValidation($password)\n    {\n        $this->httpResponse->method('getBody')\n            ->will($this->returnCallback(function () use ($password) {\n                $hash = \\sha1($password);\n                return sprintf(\n                    '%s:%d',\n                    strtoupper(substr($hash, $this->getConstant(\n                        'HIBP_K_ANONYMITY_HASH_RANGE_LENGTH',\n                        UndisclosedPassword::class\n                    ))),\n                    rand(0, 100000)\n                );\n            }));\n        $this->httpClient->method('sendRequest')\n            ->will($this->returnValue($this->httpResponse));\n\n        $this->assertFalse($this->validator->isValid($password));\n    }\n\n    /**\n     * Testing we are setting error messages when a password was found\n     * in the breach database.\n     *\n     * @param string $password\n     * @depends testBreachedPasswordsDoNotPassValidation\n     * @dataProvider seenPasswordProvider\n     * @covers \\Zend\\Validator\\UndisclosedPassword\n     */\n    public function testBreachedPasswordReturnErrorMessages($password)\n    {\n        $this->httpClient->method('sendRequest')\n            ->will($this->throwException(new \\Exception('foo')));\n\n        $this->expectException(\\Exception::class);\n        $this->validator->isValid($password);\n        $this->fail('Excpected exception was not thrown');\n    }\n\n    /**\n     * Testing that we capture any failures when trying to connect with\n     * the HIBP web service.\n     *\n     * @param string $password\n     * @depends testBreachedPasswordsDoNotPassValidation\n     * @dataProvider seenPasswordProvider\n     * @covers \\Zend\\Validator\\UndisclosedPassword\n     */\n    public function testValidationDegradesGracefullyWhenNoConnectionCanBeMade($password)\n    {\n        $clientException = $this->getMockBuilder(HttpClientException::class)\n            ->getMock();\n        $this->httpClient->method('sendRequest')\n            ->will($this->throwException($clientException));\n\n        $this->expectException(ClientExceptionInterface::class);\n\n        $this->validator->isValid($password);\n        $this->fail('Expected ClientException was not thrown');\n    }\n}\n"
  },
  {
    "path": "test/UriTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator;\nuse Zend\\Uri\\Exception\\InvalidArgumentException;\nuse Zend\\Uri\\Uri;\nuse Zend\\Uri\\Http;\n\n/**\n * @group      Zend_Validator\n */\nclass UriTest extends TestCase\n{\n    /**\n     * @var \\Zend\\Validator\\Uri\n     */\n    protected $validator;\n\n    /**\n     * Creates a new Uri Validator object for each test method\n     *\n     * @return void\n     */\n    public function setUp()\n    {\n        $this->validator = new Validator\\Uri();\n    }\n\n    public function testHasDefaultSettingsAndLazyLoadsUriHandler()\n    {\n        $validator = $this->validator;\n        $uriHandler = $validator->getUriHandler();\n        $this->assertInstanceOf(Uri::class, $uriHandler);\n        $this->assertTrue($validator->getAllowRelative());\n        $this->assertTrue($validator->getAllowAbsolute());\n    }\n\n    public function testConstructorWithArraySetsOptions()\n    {\n        $uriMock = $this->createMock(Uri::class);\n        $validator = new Validator\\Uri([\n            'uriHandler' => $uriMock,\n            'allowRelative' => false,\n            'allowAbsolute' => false,\n        ]);\n        $this->assertEquals($uriMock, $validator->getUriHandler());\n        $this->assertFalse($validator->getAllowRelative());\n        $this->assertFalse($validator->getAllowAbsolute());\n    }\n\n    public function testConstructorWithArgsSetsOptions()\n    {\n        $uriMock = $this->createMock(Uri::class);\n        $validator = new Validator\\Uri($uriMock, false, false);\n        $this->assertEquals($uriMock, $validator->getUriHandler());\n        $this->assertFalse($validator->getAllowRelative());\n        $this->assertFalse($validator->getAllowAbsolute());\n    }\n\n    public function allowOptionsDataProvider()\n    {\n        return [\n            //    allowAbsolute allowRelative isAbsolute isRelative isValid expects\n            [true,         true,         true,      false,     true,   true],\n            [true,         true,         false,     true,      true,   true],\n            [false,        true,         true,      false,     true,   false],\n            [false,        true,         false,     true,      true,   true],\n            [true,         false,        true,      false,     true,   true],\n            [true,         false,        false,     true,      true,   false],\n            [false,        false,        true,      false,     true,   false],\n            [false,        false,        false,     true,      true,   false],\n            [true,         true,         false,     false,     false,  false],\n        ];\n    }\n\n    /**\n     * @dataProvider allowOptionsDataProvider\n     */\n    public function testUriHandlerBehaviorWithAllowSettings(\n        $allowAbsolute,\n        $allowRelative,\n        $isAbsolute,\n        $isRelative,\n        $isValid,\n        $expects\n    ) {\n        $uriMock = $this->getMockBuilder(Uri::class)\n            ->setConstructorArgs(['parse', 'isValid', 'isAbsolute', 'isValidRelative'])\n            ->getMock();\n        $uriMock->expects($this->once())\n            ->method('isValid')->will($this->returnValue($isValid));\n        $uriMock->expects($this->any())\n            ->method('isAbsolute')->will($this->returnValue($isAbsolute));\n        $uriMock->expects($this->any())\n            ->method('isValidRelative')->will($this->returnValue($isRelative));\n\n        $this->validator->setUriHandler($uriMock)\n            ->setAllowAbsolute($allowAbsolute)\n            ->setAllowRelative($allowRelative);\n\n        $this->assertEquals($expects, $this->validator->isValid('uri'));\n    }\n\n    public function testUriHandlerThrowsExceptionInParseMethodNotValid()\n    {\n        $uriMock = $this->createMock(Uri::class);\n        $uriMock->expects($this->once())\n            ->method('parse')\n            ->will($this->throwException(new InvalidArgumentException()));\n\n        $this->validator->setUriHandler($uriMock);\n        $this->assertFalse($this->validator->isValid('uri'));\n    }\n\n    /**\n     * Ensures that getMessages() returns expected default value\n     *\n     * @return void\n     */\n    public function testGetMessages()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    public function testEqualsMessageTemplates()\n    {\n        $validator = $this->validator;\n        $this->assertObjectHasAttribute('messageTemplates', $validator);\n        $this->assertAttributeEquals($validator->getOption('messageTemplates'), 'messageTemplates', $validator);\n    }\n\n    public function testUriHandlerCanBeSpecifiedAsString()\n    {\n        $this->validator->setUriHandler(Http::class);\n        $this->assertInstanceOf(Http::class, $this->validator->getUriHandler());\n    }\n\n    public function testUriHandlerStringInvalidClassThrowsException()\n    {\n        $this->expectException(Validator\\Exception\\InvalidArgumentException::class);\n        $this->validator->setUriHandler(\\stdClass::class);\n    }\n\n    public function testUriHandlerInvalidTypeThrowsException()\n    {\n        $this->expectException(Validator\\Exception\\InvalidArgumentException::class);\n        $this->validator->setUriHandler(new \\stdClass());\n    }\n\n    public function invalidValueTypes()\n    {\n        return [\n            'null'       => [null],\n            'true'       => [true],\n            'false'      => [false],\n            'zero'       => [0],\n            'int'        => [1],\n            'zero-float' => [0.0],\n            'float'      => [1.1],\n            'array'      => [['http://example.com']],\n            'object'     => [(object) ['uri' => 'http://example.com']],\n        ];\n    }\n\n    /**\n     * @dataProvider invalidValueTypes\n     */\n    public function testIsValidReturnsFalseWhenProvidedUnsupportedType($value)\n    {\n        $this->assertFalse($this->validator->isValid($value));\n    }\n}\n"
  },
  {
    "path": "test/UuidTest.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse stdClass;\nuse Zend\\Validator\\Uuid;\n\n/**\n * Class UuidTest.\n *\n * Uuid test cases based on https://github.com/beberlei/assert/blob/master/tests/Assert/Tests/AssertTest.php\n */\nfinal class UuidTest extends TestCase\n{\n    /**\n     * @var Uuid\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        $this->validator = new Uuid();\n    }\n\n    /**\n     * @param $uuid\n     * @dataProvider validUuidProvider\n     */\n    public function testValidUuid($uuid)\n    {\n        $this->assertTrue($this->validator->isValid($uuid));\n        $messages = $this->validator->getMessages();\n        $this->assertCount(0, $messages);\n    }\n\n    /**\n     * @param $uuid\n     * @dataProvider invalidUuidProvider\n     */\n    public function testInvalidUuid($uuid, $expectedMessageKey)\n    {\n        $this->assertFalse($this->validator->isValid($uuid));\n        $messages = $this->validator->getMessages();\n        $this->assertCount(1, $messages);\n        $this->assertArrayHasKey($expectedMessageKey, $messages);\n        $this->assertNotEmpty($messages[$expectedMessageKey]);\n    }\n\n    /**\n     * @return array\n     */\n    public function validUuidProvider()\n    {\n        return [\n            'zero-fill' => ['00000000-0000-0000-0000-000000000000'],\n            'version-1' => ['ff6f8cb0-c57d-11e1-9b21-0800200c9a66'],\n            'version-2' => ['ff6f8cb0-c57d-21e1-9b21-0800200c9a66'],\n            'version-3' => ['ff6f8cb0-c57d-31e1-9b21-0800200c9a66'],\n            'version-4' => ['ff6f8cb0-c57d-41e1-9b21-0800200c9a66'],\n            'version-5' => ['ff6f8cb0-c57d-51e1-9b21-0800200c9a66'],\n            'uppercase' => ['FF6F8CB0-C57D-11E1-9B21-0800200C9A66'],\n        ];\n    }\n\n    /**\n     * @return array\n     */\n    public function invalidUuidProvider()\n    {\n        return [\n            'invalid-characters' => ['zf6f8cb0-c57d-11e1-9b21-0800200c9a66', Uuid::INVALID],\n            'missing-separators' => ['af6f8cb0c57d11e19b210800200c9a66', Uuid::INVALID],\n            'invalid-segment-2'  => ['ff6f8cb0-c57da-51e1-9b21-0800200c9a66', Uuid::INVALID],\n            'invalid-segment-1'  => ['af6f8cb-c57d-11e1-9b21-0800200c9a66', Uuid::INVALID],\n            'invalid-segement-5' => ['3f6f8cb0-c57d-11e1-9b21-0800200c9a6', Uuid::INVALID],\n            'truncated'          => ['3f6f8cb0', Uuid::INVALID],\n            'empty-string'       => ['', Uuid::INVALID],\n            'all-numeric'        => [123, Uuid::NOT_STRING],\n            'object'             => [new stdClass(), Uuid::NOT_STRING],\n        ];\n    }\n}\n"
  },
  {
    "path": "test/ValidatorChainTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\AbstractValidator;\nuse Zend\\Validator\\Between;\nuse Zend\\Validator\\NotEmpty;\nuse Zend\\Validator\\StaticValidator;\nuse Zend\\Validator\\ValidatorChain;\nuse Zend\\Validator\\ValidatorInterface;\nuse Zend\\Validator\\GreaterThan;\n\n/**\n * @group      Zend_Validator\n */\nclass ValidatorChainTest extends TestCase\n{\n    /**\n     * @var ValidatorChain\n     */\n    protected $validator;\n\n    public function setUp()\n    {\n        AbstractValidator::setMessageLength(-1);\n        $this->validator = new ValidatorChain();\n    }\n\n    public function tearDown()\n    {\n        AbstractValidator::setDefaultTranslator(null);\n        AbstractValidator::setMessageLength(-1);\n    }\n\n    public function populateValidatorChain()\n    {\n        $this->validator->attach(new NotEmpty());\n        $this->validator->attach(new Between(1, 5));\n    }\n\n    public function testValidatorChainIsEmptyByDefault()\n    {\n        $this->assertEquals(0, count($this->validator->getValidators()));\n    }\n\n    /**\n     * Ensures expected results from empty validator chain\n     *\n     * @return void\n     */\n    public function testEmpty()\n    {\n        $this->assertEquals([], $this->validator->getMessages());\n        $this->assertTrue($this->validator->isValid('something'));\n    }\n\n    /**\n     * Ensures expected behavior from a validator known to succeed\n     *\n     * @return void\n     */\n    public function testTrue()\n    {\n        $this->validator->attach($this->getValidatorTrue());\n        $this->assertTrue($this->validator->isValid(null));\n        $this->assertEquals([], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures expected behavior from a validator known to fail\n     *\n     * @return void\n     */\n    public function testFalse()\n    {\n        $this->validator->attach($this->getValidatorFalse());\n        $this->assertFalse($this->validator->isValid(null));\n        $this->assertEquals(['error' => 'validation failed'], $this->validator->getMessages());\n    }\n\n    /**\n     * Ensures that a validator may break the chain\n     *\n     * @return void\n     */\n    public function testBreakChainOnFailure()\n    {\n        $this->validator->attach($this->getValidatorFalse(), true)\n            ->attach($this->getValidatorFalse());\n        $this->assertFalse($this->validator->isValid(null));\n        $this->assertEquals(['error' => 'validation failed'], $this->validator->getMessages());\n    }\n\n    public function testAllowsPrependingValidators()\n    {\n        $this->validator->attach($this->getValidatorTrue())\n            ->prependValidator($this->getValidatorFalse(), true);\n        $this->assertFalse($this->validator->isValid(true));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('error', $messages);\n    }\n\n    public function testAllowsPrependingValidatorsByName()\n    {\n        $this->validator->attach($this->getValidatorTrue())\n            ->prependByName('NotEmpty', [], true);\n        $this->assertFalse($this->validator->isValid(''));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('isEmpty', $messages);\n    }\n\n    /**\n     * @group 6386\n     * @group 6496\n     */\n    public function testValidatorsAreExecutedAccordingToPriority()\n    {\n        $this->validator->attach($this->getValidatorTrue(), false, 1000)\n                        ->attach($this->getValidatorFalse(), true, 2000);\n        $this->assertFalse($this->validator->isValid(true));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('error', $messages);\n    }\n\n    /**\n     * @group 6386\n     * @group 6496\n     */\n    public function testPrependValidatorsAreExecutedAccordingToPriority()\n    {\n        $this->validator->attach($this->getValidatorTrue(), false, 1000)\n            ->prependValidator($this->getValidatorFalse(), true);\n        $this->assertFalse($this->validator->isValid(true));\n        $messages = $this->validator->getMessages();\n        $this->assertArrayHasKey('error', $messages);\n    }\n\n    /**\n     * @group 6386\n     * @group 6496\n     */\n    public function testMergeValidatorChains()\n    {\n        $mergedValidatorChain = new ValidatorChain();\n\n        $mergedValidatorChain->attach($this->getValidatorTrue());\n        $this->validator->attach($this->getValidatorTrue());\n\n        $this->validator->merge($mergedValidatorChain);\n\n        $this->assertCount(2, $this->validator->getValidators());\n    }\n\n    /**\n     * @group 6386\n     * @group 6496\n     */\n    public function testValidatorChainIsCloneable()\n    {\n        $this->validator->attach(new NotEmpty());\n\n        $this->assertCount(1, $this->validator->getValidators());\n\n        $clonedValidatorChain = clone $this->validator;\n\n        $this->assertCount(1, $clonedValidatorChain->getValidators());\n\n        $clonedValidatorChain->attach(new NotEmpty());\n\n        $this->assertCount(1, $this->validator->getValidators());\n        $this->assertCount(2, $clonedValidatorChain->getValidators());\n    }\n\n    public function testCountGivesCountOfAttachedValidators()\n    {\n        $this->populateValidatorChain();\n        $this->assertEquals(2, count($this->validator->getValidators()));\n    }\n\n    /**\n     * Handle file not found errors\n     *\n     * @group  ZF-2724\n     * @param  int    $errnum\n     * @param  string $errstr\n     * @return void\n     */\n    public function handleNotFoundError($errnum, $errstr)\n    {\n        if (strstr($errstr, 'No such file')) {\n            $this->error = true;\n        }\n    }\n\n    /**\n     * @return \\PHPUnit_Framework_MockObject_MockObject|\\Zend\\Validator\\ValidatorInterface\n     */\n    public function getValidatorTrue()\n    {\n        $validator = $this->createMock(ValidatorInterface::class);\n        $validator->expects($this->any())\n            ->method('isValid')\n            ->will($this->returnValue(true));\n        return $validator;\n    }\n\n    /**\n     * @return \\PHPUnit_Framework_MockObject_MockObject|\\Zend\\Validator\\ValidatorInterface\n     */\n    public function getValidatorFalse()\n    {\n        $validator = $this->createMock(ValidatorInterface::class);\n        $validator->expects($this->any())\n            ->method('isValid')\n            ->will($this->returnValue(false));\n        $validator->expects($this->any())\n            ->method('getMessages')\n            ->will($this->returnValue(['error' => 'validation failed']));\n        return $validator;\n    }\n\n    /**\n     * @group ZF-412\n     */\n    public function testCanAttachMultipleValidatorsOfTheSameTypeAsDiscreteInstances()\n    {\n        $this->validator->attachByName('Callback', [\n            'callback' => function ($value) {\n                return true;\n            },\n            'messages' => [\n                'callbackValue' => 'This should not be seen in the messages',\n            ],\n        ]);\n        $this->validator->attachByName('Callback', [\n            'callback' => function ($value) {\n                return false;\n            },\n            'messages' => [\n                'callbackValue' => 'Second callback trapped',\n            ],\n        ]);\n\n        $this->assertEquals(2, count($this->validator));\n        $validators = $this->validator->getValidators();\n        $compare = null;\n        foreach ($validators as $validator) {\n            $this->assertNotSame($compare, $validator);\n            $compare = $validator;\n        }\n\n        $this->assertFalse($this->validator->isValid('foo'));\n        $messages = $this->validator->getMessages();\n        $found    = false;\n        $test     = 'Second callback trapped';\n        foreach ($messages as $messageSet) {\n            if (is_string($messageSet) && $messageSet === $test) {\n                $found = true;\n                break;\n            }\n            if (is_array($messageSet) && in_array('Second callback trapped', $messageSet)) {\n                $found = true;\n                break;\n            }\n        }\n        $this->assertTrue($found);\n    }\n\n\n    public function testCanSerializeValidatorChain()\n    {\n        $this->populateValidatorChain();\n        $serialized = serialize($this->validator);\n\n        $unserialized = unserialize($serialized);\n        $this->assertInstanceOf(ValidatorChain::class, $unserialized);\n        $this->assertEquals(2, count($unserialized));\n        $this->assertFalse($unserialized->isValid(''));\n    }\n\n    public function breakChainFlags()\n    {\n        return [\n            'underscores' => ['break_chain_on_failure'],\n            'no_underscores' => ['breakchainonfailure'],\n        ];\n    }\n\n    /**\n     * @group zfcampus_zf-apigility-admin_89\n     * @dataProvider breakChainFlags\n     */\n    public function testAttachByNameAllowsSpecifyingBreakChainOnFailureFlagViaOptions($option)\n    {\n        $this->validator->attachByName('GreaterThan', [\n            $option => true,\n            'min' => 1,\n        ]);\n        $this->assertEquals(1, count($this->validator));\n        $validators = $this->validator->getValidators();\n        $spec       = array_shift($validators);\n\n        $this->assertInternalType('array', $spec);\n        $this->assertArrayHasKey('instance', $spec);\n        $validator = $spec['instance'];\n        $this->assertInstanceOf(GreaterThan::class, $validator);\n        $this->assertArrayHasKey('breakChainOnFailure', $spec);\n        $this->assertTrue($spec['breakChainOnFailure']);\n    }\n}\n"
  },
  {
    "path": "test/ValidatorPluginManagerCompatibilityTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionProperty;\nuse Zend\\Validator\\Exception\\RuntimeException;\nuse Zend\\Validator\\ValidatorInterface;\nuse Zend\\Validator\\ValidatorPluginManager;\nuse Zend\\ServiceManager\\ServiceManager;\nuse Zend\\ServiceManager\\Test\\CommonPluginManagerTrait;\n\nclass ValidatorPluginManagerCompatibilityTest extends TestCase\n{\n    use CommonPluginManagerTrait;\n\n    protected function getPluginManager()\n    {\n        return new ValidatorPluginManager(new ServiceManager());\n    }\n\n    protected function getV2InvalidPluginException()\n    {\n        return RuntimeException::class;\n    }\n\n    protected function getInstanceOf()\n    {\n        return ValidatorInterface::class;\n    }\n\n    public function aliasProvider()\n    {\n        $pluginManager = $this->getPluginManager();\n        $r = new ReflectionProperty($pluginManager, 'aliases');\n        $r->setAccessible(true);\n        $aliases = $r->getValue($pluginManager);\n\n        foreach ($aliases as $alias => $target) {\n            // Skipping due to required options\n            if (strpos($target, '\\\\Barcode')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\Between')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\Db\\\\')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\File\\\\ExcludeExtension')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\File\\\\Extension')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\File\\\\FilesSize')) {\n                continue;\n            }\n\n            // Skipping due to required options\n            if (strpos($target, '\\\\Regex')) {\n                continue;\n            }\n\n            yield $alias => [$alias, $target];\n        }\n    }\n}\n"
  },
  {
    "path": "test/ValidatorPluginManagerFactoryTest.php",
    "content": "<?php\n/**\n * @link      http://github.com/zendframework/zend-validator for the canonical source repository\n * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse Interop\\Container\\ContainerInterface;\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Digits;\nuse Zend\\Validator\\ValidatorInterface;\nuse Zend\\Validator\\ValidatorPluginManager;\nuse Zend\\Validator\\ValidatorPluginManagerFactory;\nuse Zend\\ServiceManager\\ServiceLocatorInterface;\n\nclass ValidatorPluginManagerFactoryTest extends TestCase\n{\n    public function testFactoryReturnsPluginManager()\n    {\n        $container = $this->prophesize(ContainerInterface::class)->reveal();\n        $factory = new ValidatorPluginManagerFactory();\n\n        $validators = $factory($container, ValidatorPluginManagerFactory::class);\n        $this->assertInstanceOf(ValidatorPluginManager::class, $validators);\n\n        if (method_exists($validators, 'configure')) {\n            // zend-servicemanager v3\n            $this->assertAttributeSame($container, 'creationContext', $validators);\n        } else {\n            // zend-servicemanager v2\n            $this->assertSame($container, $validators->getServiceLocator());\n        }\n    }\n\n    /**\n     * @depends testFactoryReturnsPluginManager\n     */\n    public function testFactoryConfiguresPluginManagerUnderContainerInterop()\n    {\n        $container = $this->prophesize(ContainerInterface::class)->reveal();\n        $validator = $this->prophesize(ValidatorInterface::class)->reveal();\n\n        $factory = new ValidatorPluginManagerFactory();\n        $validators = $factory($container, ValidatorPluginManagerFactory::class, [\n            'services' => [\n                'test' => $validator,\n            ],\n        ]);\n        $this->assertSame($validator, $validators->get('test'));\n    }\n\n    /**\n     * @depends testFactoryReturnsPluginManager\n     */\n    public function testFactoryConfiguresPluginManagerUnderServiceManagerV2()\n    {\n        $container = $this->prophesize(ServiceLocatorInterface::class);\n        $container->willImplement(ContainerInterface::class);\n\n        $validator = $this->prophesize(ValidatorInterface::class)->reveal();\n\n        $factory = new ValidatorPluginManagerFactory();\n        $factory->setCreationOptions([\n            'services' => [\n                'test' => $validator,\n            ],\n        ]);\n\n        $validators = $factory->createService($container->reveal());\n        $this->assertSame($validator, $validators->get('test'));\n    }\n\n    public function testConfiguresValidatorServicesWhenFound()\n    {\n        $validator = $this->prophesize(ValidatorInterface::class)->reveal();\n        $config = [\n            'validators' => [\n                'aliases' => [\n                    'test' => Digits::class,\n                ],\n                'factories' => [\n                    'test-too' => function ($container) use ($validator) {\n                        return $validator;\n                    },\n                ],\n            ],\n        ];\n\n        $container = $this->prophesize(ServiceLocatorInterface::class);\n        $container->willImplement(ContainerInterface::class);\n\n        $container->has('ServiceListener')->willReturn(false);\n        $container->has('config')->willReturn(true);\n        $container->get('config')->willReturn($config);\n        $container->has('MvcTranslator')->willReturn(false); // necessary due to default initializers\n\n        $factory = new ValidatorPluginManagerFactory();\n        $validators = $factory($container->reveal(), 'ValidatorManager');\n\n        $this->assertInstanceOf(ValidatorPluginManager::class, $validators);\n        $this->assertTrue($validators->has('test'));\n        $this->assertInstanceOf(Digits::class, $validators->get('test'));\n        $this->assertTrue($validators->has('test-too'));\n        $this->assertSame($validator, $validators->get('test-too'));\n    }\n\n    public function testDoesNotConfigureValidatorServicesWhenServiceListenerPresent()\n    {\n        $validator = $this->prophesize(ValidatorInterface::class)->reveal();\n        $config = [\n            'validators' => [\n                'aliases' => [\n                    'test' => Digits::class,\n                ],\n                'factories' => [\n                    'test-too' => function ($container) use ($validator) {\n                        return $validator;\n                    },\n                ],\n            ],\n        ];\n\n        $container = $this->prophesize(ServiceLocatorInterface::class);\n        $container->willImplement(ContainerInterface::class);\n\n        $container->has('ServiceListener')->willReturn(true);\n        $container->has('config')->shouldNotBeCalled();\n        $container->get('config')->shouldNotBeCalled();\n        $container->has('MvcTranslator')->willReturn(false); // necessary due to default initializers\n\n        $factory = new ValidatorPluginManagerFactory();\n        $validators = $factory($container->reveal(), 'ValidatorManager');\n\n        $this->assertInstanceOf(ValidatorPluginManager::class, $validators);\n        $this->assertFalse($validators->has('test'));\n        $this->assertFalse($validators->has('test-too'));\n    }\n\n    public function testDoesNotConfigureValidatorServicesWhenConfigServiceNotPresent()\n    {\n        $container = $this->prophesize(ServiceLocatorInterface::class);\n        $container->willImplement(ContainerInterface::class);\n\n        $container->has('ServiceListener')->willReturn(false);\n        $container->has('config')->willReturn(false);\n        $container->get('config')->shouldNotBeCalled();\n        $container->has('MvcTranslator')->willReturn(false); // necessary due to default initializers\n\n        $factory = new ValidatorPluginManagerFactory();\n        $validators = $factory($container->reveal(), 'ValidatorManager');\n\n        $this->assertInstanceOf(ValidatorPluginManager::class, $validators);\n    }\n\n    public function testDoesNotConfigureValidatorServicesWhenConfigServiceDoesNotContainValidatorsConfig()\n    {\n        $container = $this->prophesize(ServiceLocatorInterface::class);\n        $container->willImplement(ContainerInterface::class);\n\n        $container->has('ServiceListener')->willReturn(false);\n        $container->has('config')->willReturn(true);\n        $container->get('config')->willReturn(['foo' => 'bar']);\n        $container->has('MvcTranslator')->willReturn(false); // necessary due to default initializers\n\n        $factory = new ValidatorPluginManagerFactory();\n        $validators = $factory($container->reveal(), 'ValidatorManager');\n\n        $this->assertInstanceOf(ValidatorPluginManager::class, $validators);\n        $this->assertFalse($validators->has('foo'));\n    }\n}\n"
  },
  {
    "path": "test/ValidatorPluginManagerTest.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace ZendTest\\Validator;\n\nuse Interop\\Container\\ContainerInterface;\nuse PHPUnit\\Framework\\TestCase;\nuse Zend\\Validator\\Exception\\RuntimeException;\nuse Zend\\Validator\\ValidatorInterface;\nuse Zend\\Validator\\ValidatorPluginManager;\nuse Zend\\ServiceManager\\Exception\\InvalidServiceException;\nuse Zend\\ServiceManager\\ServiceManager;\n\n/**\n * @group      Zend_Validator\n */\nclass ValidatorPluginManagerTest extends TestCase\n{\n    public function setUp()\n    {\n        $this->validators = new ValidatorPluginManager(new ServiceManager);\n    }\n\n    public function testAllowsInjectingTranslator()\n    {\n        $translator = $this->prophesize(TestAsset\\Translator::class)->reveal();\n\n        $container = $this->prophesize(ContainerInterface::class);\n        $container->has('MvcTranslator')->willReturn(true);\n        $container->get('MvcTranslator')->willReturn($translator);\n\n        $validators = new ValidatorPluginManager($container->reveal());\n\n        $validator = $validators->get('notempty');\n        $this->assertEquals($translator, $validator->getTranslator());\n    }\n\n    public function testNoTranslatorInjectedWhenTranslatorIsNotPresent()\n    {\n        $container = $this->prophesize(ContainerInterface::class);\n        $container->has('MvcTranslator')->willReturn(false);\n\n        $validators = new ValidatorPluginManager($container->reveal());\n\n        $validator = $validators->get('notempty');\n        $this->assertNull($validator->getTranslator());\n    }\n\n    public function testRegisteringInvalidValidatorRaisesException()\n    {\n        try {\n            $this->validators->setService('test', $this);\n        } catch (InvalidServiceException $e) {\n            $this->assertContains(ValidatorInterface::class, $e->getMessage());\n        } catch (RuntimeException $e) {\n            $this->assertContains(ValidatorInterface::class, $e->getMessage());\n        } catch (\\Exception $e) {\n            $this->fail(sprintf(\n                'Unexpected exception of type \"%s\" when testing for invalid validator types',\n                get_class($e)\n            ));\n        }\n    }\n\n    public function testLoadingInvalidValidatorRaisesException()\n    {\n        $this->validators->setInvokableClass('test', get_class($this));\n        try {\n            $this->validators->get('test');\n        } catch (InvalidServiceException $e) {\n            $this->assertContains(ValidatorInterface::class, $e->getMessage());\n        } catch (RuntimeException $e) {\n            $this->assertContains(ValidatorInterface::class, $e->getMessage());\n        } catch (\\Exception $e) {\n            $this->fail(sprintf(\n                'Unexpected exception of type \"%s\" when testing for invalid validator types',\n                get_class($e)\n            ));\n        }\n    }\n\n    public function testInjectedValidatorPluginManager()\n    {\n        $validator = $this->validators->get('explode');\n        $this->assertSame($this->validators, $validator->getValidatorPluginManager());\n    }\n}\n"
  },
  {
    "path": "test/_files/MyBarcode1.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass MyBarcode1 extends AbstractAdapter\n{\n    public function __construct()\n    {\n        $this->setLength(-1);\n        $this->setCharacters(0);\n        $this->setChecksum('invalid');\n    }\n}\n"
  },
  {
    "path": "test/_files/MyBarcode2.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass MyBarcode2 extends AbstractAdapter\n{\n    public function __construct()\n    {\n        $this->setLength([1, 3, 6]);\n        $this->setCharacters(128);\n        $this->setChecksum('_mod10');\n    }\n}\n"
  },
  {
    "path": "test/_files/MyBarcode3.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass MyBarcode3 extends AbstractAdapter\n{\n    public function __construct()\n    {\n        $this->setLength([1, 3, 6, -1]);\n        $this->setCharacters(128);\n        $this->setChecksum('_mod10');\n    }\n}\n"
  },
  {
    "path": "test/_files/MyBarcode4.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass MyBarcode4 extends AbstractAdapter\n{\n    public function __construct()\n    {\n        $this->setLength('odd');\n        $this->setCharacters(128);\n        $this->setChecksum('_mod10');\n    }\n}\n"
  },
  {
    "path": "test/_files/MyBarcode5.php",
    "content": "<?php\n/**\n * Zend Framework (http://framework.zend.com/)\n *\n * @link      http://github.com/zendframework/zf2 for the canonical source repository\n * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)\n * @license   http://framework.zend.com/license/new-bsd New BSD License\n */\n\nnamespace Zend\\Validator\\Barcode;\n\nclass MyBarcode5\n{\n    public function __construct()\n    {\n        $setLength = 'odd';\n        $setCharacters = 128;\n        $setChecksum = '_mod10';\n    }\n}\n"
  }
]