diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df94bd50e5f69..2d7fbac84c574 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -327,7 +327,8 @@ Currently we have the following branches in use: | Branch | | | --------- | --------- | -| master | Active development branch for PHP 8.0, which is open for backwards incompatible changes and major internal API changes. | +| master | Active development branch for PHP 8.1, which is open for backwards incompatible changes and major internal API changes. | +| PHP-8.0 | Is used to release the PHP 8.0.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.4 | Is used to release the PHP 7.4.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.3 | Is used to release the PHP 7.3.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.2 | Is used to release the PHP 7.2.x series. This is an old stable version and is open for security fixes only. | diff --git a/NEWS b/NEWS index b0e4d74d2810f..b9e81b417f60c 100644 --- a/NEWS +++ b/NEWS @@ -1,380 +1,21 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.0.0rc2 +?? ??? ????, PHP 8.1.0alpha1 -- Curl: - . Fixed bug #80121 (Null pointer deref if CurlHandle directly instantiated). - (Nikita) - -- SPL: - . Fixed bug #65387 (Circular references in SPL iterators are not garbage - collected). (Nikita) - -- Standard: - . Fixed bug #64060 (lstat_stat_variation7.phpt fails on certain file systems). - (M. Voelker, cmb) - -01 Oct 2020, PHP 8.0.0rc1 - -- CLI: - . Allow debug server binding to an ephemeral port via `-S localhost:0`. (Sara) - -- Core: - . Fixed bug #80109 (Cannot skip arguments when extended debug is enabled). - (Nikita) - -- ODBC: - . Fixed bug #22986 (odbc_connect() may reuse persistent connection). (cmb) - -- PDO_Firebird: - . Fixed bug #64937 (Firebird PDO preprocessing sql). (Simonov Denis) - -- SPL: - . SplFixedArray is now IteratorAggregate rather than Iterator. (alexdowad) - -- Zlib: - . Fixed bug #78792 (zlib.output_compression disabled by Content-Type: image/). - (cmb) - -17 Sep 2020, PHP 8.0.0beta4 - -- Core: - . Implement #[Attr] Attribute syntax as per final vote in RFC - https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Fixed bug #80045 (memleak after two set_exception_handler calls with - __call). (Nikita) - . Fixed bug #80096 (Segmentation fault with named arguments in nested call). - (Nikita) - . Fixed faulty generator cleanup with yield from. (Bob) - -- Date: - . Fixed bug #80057 (DateTimeImmutable::createFromFormat() does not populate - time). (Derick) - -- FFI: - . Added FFI\CType::getName() method. (chopins) - -03 Sep 2020, PHP 8.0.0beta3 - -- Calendar: - . Fixed bug #80007 (Potential type confusion in unixtojd() parameter parsing). - (Andy Postnikov) - -- COM: - . Fixed bug #55847 (DOTNET .NET 4.0 GAC new location). (cmb) - -- DOM: - . Fixed bug #79968 (DOMChildNode API crash on unattached nodes). (Benjamin) - -- Fileinfo: - . Upgrade to libmagic 5.39. (Anatol) - -- Opcache: - . Fixed bug #80030 (Optimizer segfault with isset on static property with - undef dynamic class name). (Nikita) - -20 Aug 2020, PHP 8.0.0beta2 - -- SPL: - . Fixed bug #79987 (Memory leak in SplFileInfo because of missing - zend_restore_error_handling()). (Dmitry) - -06 Aug 2020, PHP 8.0.0beta1 - -- Core: - . Fixed bug #78236 (convert error on receiving variables when duplicate [). - (cmb) - . Fixed bug #79108 (Referencing argument in a function makes it a reference - in the stack trace). (Nikita) - . Fixed bug #79897 (Promoted constructor params with attribs cause crash). - (Deus Kane) - . Fixed bug #79946 (Build fails due to undeclared UINT32_C). (Nikita) - . Fixed bug #77561 (Shebang line not stripped for non-primary script). - (Nikita) - . Fixed bug #79948 (Exit in auto-prepended file does not abort PHP execution). - (Nikita) - . Fixed bug #65275 (Calling exit() in a shutdown function does not change the - exit value in CLI). (Nikita) - . Fixed bug #62294 (register_shutdown_function() does not correctly handle - exit code). (Nikita) - . Fixed bug #79927 (Generator doesn't throw exception after multiple yield - from iterable). (Nikita) - . Fixed bug #78770 (Incorrect callability check inside internal methods). - (Nikita) - -- Date: - . Fixed bug #60302 (DateTime::createFromFormat should new static(), not new - self()). (Derick) - . Implemented FR #79903 (datetime: new format "p", same as "P" but returning - "Z" for UTC). (gharlan) - -- JIT: - . Fixed bug #79864 (JIT segfault in Symfony OptionsResolver). (Dmitry) - . Fixed bug #79888 (Incorrect execution with JIT enabled). (Dmitry) - -- LDAP: - . Fixed memory leaks. (ptomulik) - -- OCI8: - . Modernized oci_register_taf_callback() callable argument parsing - implementation. (girgias) - -23 Jul 2020, PHP 8.0.0alpha3 - -- Core: - . Fixed bug #79790 ("Illegal offset type" exception during AST evaluation - not handled properly). (Nikita) - . Fixed bug #79791 (Assertion failure when unsetting variable during binary - op). (Nikita) - . Fixed bug #79841 (Syntax error in configure / unescaped "[]" in php.m4). - (Nikita) - . Fixed bug #79828 (Segfault when trying to access non-existing variable). - (Nikita) - . Fixed bug #79852 (count(DOMNodeList) doesn't match - count(IteratorIterator(DOMNodeList))). (Nikita) - . Fixed bug #79867 (Promoted untyped properties should get null default - value). (Nikita) - -- Standard: - . Fixed bug #79868 (Sorting with array_unique gives unwanted result). (Nikita) - -09 Jul 2020, PHP 8.0.0alpha2 - -- FFI: - . Fixed bug #79749 (Converting FFI instances to bool fails). (cmb) - -- JIT: - . Fixed bug #79743 (Fatal error when assigning to array property - with JIT enabled). (Laruence) - -- PCRE: - . Updated to PCRE2 10.35. (cmb) - -25 Jun 2020, PHP 8.0.0alpha1 - -- Core: - . Removed the pdo_odbc.db2_instance_name php.ini directive. (Kalle) - . Fixed bug #77619 (Wrong reflection on MultipleIterator::__construct). - (Fabien Villepinte) - . Fixed bug #65274 (Enhance undefined class constant error with class name). - (Nikita) - . Fixed bug #49555 (Fatal error "Function must be a string" message should be - renamed). (Nikita) - . Fixed bug #70839 (Converting optional argument to variadic forbidden by LSP - checks). (Nikita) - . Fixed bug #69084 (Unclear error message when not implementing a renamed - abstract trait function). (Nikita) - . Fixed bug #62609 (Allow implementing Traversable on abstract classes). - (Nikita) - . Fixed bug #79462 (method_exists and property_exists incoherent behavior). - (cmb) - . Fixed bug #79368 ("Unexpected end of file" is not an acceptable error - message). (Alex Dowad) - . Fixed bug #36365 (scandir duplicates file name at every 65535th file). - (cmb) - . Use SSE2 instructions do locale independent strtolower. (Laruence) - . Fixed bug #79521 (Check __set_state structure). (carusogabriel) - . Fixed bug #79467 (data:// wrappers are writable). (cmb) - . Implemented FR #47074 (phpinfo() reports "On" as 1 for the some - extensions). (cmb) - . Implemented FR #72089 (require() throws fatal error instead of exception). - (Nikita) - . Fixed bug #77966 (Cannot alias a method named "namespace"). (Nikita) - -- BZ2: - . Fixed bug #71263 (fread() does not report bzip2.decompress errors). (cmb) - -- CURL: - . Bumped required libcurl version to 7.29.0. (cmb) - -- Date: - . Fixed bug #65547 (Default value for sunrise/sunset zenith still wrong). - (cmb) - . Fixed bug #69044 (discrepancy between time and microtime). (krakjoe) - -- DOM: - . Add property DOMXPath::$registerNodeNamespaces and constructor argument - that allow global flag to configure query() or evaluate() calls. - -- Enchant: - . Add LIBENCHANT_VERSION macro. - . Deprecate enchant_broker_set_dict_path, enchant_broker_get_dict_path, - enchant_dict_add_to_personal and enchant_dict_is_in_session. - . Add enchant_dict_add and enchant_dict_is_added functions. - . Use libenchant-2 when available. - -- FPM: - . Fixed bug #64865 (Search for .user.ini files from script dir up to - CONTEXT_DOCUMENT_ROOT). (Will Bender) - . Add pm.status_listen option. (Jakub Zelenka) +- FTP: + . Convert resource to object \FTPConnection. (Sara) - GD: - . Fixed bug #55005 (imagepolygon num_points requirement). (cmb) - . Replaced gd resources with objects. (Mark Randall) - . Made the $num_points parameter of php_imagepolygon optional. (cmb) - . Removed deprecated image2wbmp(). (cmb) - . Removed deprecated png2wbmp() and jpeg2wbmp(). (cmb) - . Added imagegetinterpolation(). (cmb) - -- Iconv: - . Dropped support for iconv without proper errno setting. (cmb) - -- Intl: - . Removed deprecated INTL_IDNA_VARIANT_2003. (cmb) + . Convert resource to object \GdFont. (Sara) -- JIT: - . Fixed bug #79582 (Crash seen when opcache.jit=1235 and - opcache.jit_debug=2). (Laruence) - . Fixed bug #77857 (Wrong result if executed with JIT). (Laruence) - . Fixed bug #79255 (PHP cannot be compiled with enable JIT). - (Laruence, Dmitry) - -- JSON: - . The JSON extension is now an integral part of PHP and cannot be disabled - as per RFC: https://wiki.php.net/rfc/always_enable_json (tandre) - -- LDAP: - . Removed deprecated ldap_sort. (mcmic) - -- MBString: - . Fixed bug #76999 (mb_regex_set_options() return current options). (cmb) - . Removed the unused $is_hex parameter from mb_decode_numericentity(). (cmb) - -- MySQLi: - . Fixed bug #76809 (SSL settings aren't respected when persistent connections - are used). (fabiomsouto) - -- mysqlnd: - . Fixed #60594 (mysqlnd exposes 160 lines of stats in phpinfo). (PeeHaa) - -- OCI8: - . Deprecated old OCI8 function aliases. (Jens de Nies) - . Removed obsolete no-op function oci_internal_debug(). (Jens de Nies) - -- OpCache: - . Fixed bug #78654 (Incorrectly computed opcache checksum on files with - non-ascii characters). (mhagstrand) - . Fixed bug #76535 (Opcache does not replay compile-time warnings). (Nikita) - . Fixed bug #79665 (ini_get() and opcache_get_configuration() inconsistency). - (cmb) +- hash: + . Implemented FR #68109 (Add MurmurHash V3). (Anatol, Michael) - OpenSSL: - . Added Cryptographic Message Syntax (CMS) support. (Eliot Lear) - -- PCRE: - . Don't ignore invalid escape sequences. (sjon) - -- PGSQL: - . Bumped required libpq version to 9.1. (cmb) - -- PDO: - . Changed default PDO error mode to exceptions. (AllenJB) - . Fixed bug #77849 (Disable cloning of PDO handle/connection objects). - (camporter) - -- PDO_OCI: - . Added support for setting and getting the oracle OCI 18c call timeout. - (camporter) - -- PDO_PGSQL: - . Bumped required libpq version to 9.1. (cmb) - -- phpdbg: - . Fixed bug #76596 (phpdbg support for display_errors=stderr). (kabel) - . Fixed bug #76801 (too many open files). (alekitto) - . Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints). - (krakjoe) - . Fixed bug #77805 (phpdbg build fails when readline is shared). (krakjoe) - -- Reflection: - . Fixed bug #78697 (ReflectionClass::implementsInterface - inaccurate error - message with traits). (villfa) - . Implement ReflectionProperty::hasDefaultValue and - Reflection::getDefaultValue (beberlei) - . Fixed bug #64592 (ReflectionClass::getMethods() returns methods out of - scope). (Nikita) - . Fixed bug #77325 (ReflectionClassConstant::$class returns wrong class when - extending). (Nikita) - . Fixed bug #69180 (Reflection does not honor trait conflict resolution / - method aliasing). (Nikita) - . Fixed bug #74939 (Nested traits' aliased methods are lowercased). (Nikita) - . Implement #79628 (Add $filter parameter for ReflectionClass::getConstants - and ReflectionClass::getReflectionConstants) (carusogabriel) - -- Session: - . Fixed bug #78624 (session_gc return value for user defined session - handlers). (bshaffer) - . Fixed bug #73529 (session_decode() silently fails on wrong input). (cmb) - -- Shmop: - . Converted shmop resources to objects. (cmb) - -- SimpleXML: - . Fixed bug #75245 (Don't set content of elements with only whitespaces). - (eriklundin) - . Fixed bug #63575 (Root elements are not properly cloned). (cmb) - -- sodium: - . Fixed bug #77646 (sign_detached() strings not terminated). (Frank) - -- SQLite3: - . Added SQLite3::setAuthorizer() and respective class constants. (bohwaz) - -- SPL: - . Fixed bug #71236 (Second call of spl_autoload_register() does nothing if it - has no arguments). (Nikita) - . Fixed bug #65006 (spl_autoload_register fails with multiple callables using - self, same method). (Nikita) - -- Standard: - . Implemented FR #78638 (__PHP_Incomplete_Class should be final). (Laruence) - . Fixed bug #77204 (getimagesize(): Read error! should mention file path). - (peter279k) - . Fixed bug #76859 (stream_get_line skips data if used with data-generating - filter). (kkopachev) - . Fixed bug #78385 (parse_url() does not include 'query' when question mark - is the last char). (Islam Israfilov) - . Fixed bug #75902 (str_replace should warn when misused with nested arrays). - (Nikita) - . Fixed bug #47983 (mixed LF and CRLF line endings in mail()). (cmb) - . Made quoting of cmd execution functions consistent. (cmb) - -- tidy: - . Removed the unused $use_include_path parameter from tidy_repair_string(). - (cmb) - -- XML: - . Fixed bug #76874 (xml_parser_free() should never leak memory). (Nikita) - -- XMLWriter: - . Changed functions to accept/return XMLWriter objects instead of resources. - (cmb) - . Implemented FR #79344 (xmlwriter_write_attribute_ns: $prefix should be - nullable). (cmb) - -- Zip: - . Fixed bug #72374 (remove_path strips first char of filename). (tyage, Remi) - . Add ZipArchive::setMtimeName and ZipArchive::setMtimeIndex methods. (Remi) - . Add ZipArchive::setProgressCallback method (since libzip 1.3.0). (Remi) - . Add ZipArchive::setCancelCallback method (since libzip 1.6.0). (Remi) - . Add optional "flags" parameter to ZipArchive::addEmptyDir, addFile and - addFromString methods. (Remi) - . Add "flags" options to ZipArchive::addGlob and addPattern methods - keeping previous behavior having FL_OVERWRITE by default. (Remi) - . Add ZipArchive::replaceFile() method. (Remi) - . Add lastId property to ZipArchive. (Remi) - . ZipArchive::status and ZipArchive::statusSys properties and - ZipArchive::getStatusString() method stay valid after the archive - is closed. (Remi) - . Fixed bug #50678 (files extracted by ZipArchive class lost their - original modified time). (Remi) - . Implemented FR #77960 (add compression / encryption options for - ZipArchive::addGlob and ZipArchive::addPattern). (Remi) - . Add ZipArchive::EM_UNKNOWN and ZipArchive::EM_TRAD_PKWARE constants. (Remi) - . Add ZipArchive::isCompressionMethodSupported() and - ZipArchive::isEncryptionMethodSupported() method (libzip 1.7.0). (Remi) + . Bump minimal OpenSSL version to 1.0.2. (Jakub Zelenka) -- Zlib: - . Fixed bug #71417 (fread() does not report zlib.inflate errors). (cmb) +- PSpell: + . Convert resource to object \PSpell. (Sara) + . Convert resource to object \PSPellConfig. (Sara) <<< NOTE: Insert NEWS from last stable release here prior to actual release! >>> diff --git a/UPGRADING b/UPGRADING index 09a317da7511d..c8c8d4b09e089 100644 --- a/UPGRADING +++ b/UPGRADING @@ -1,4 +1,4 @@ -PHP 8.0 UPGRADE NOTES +PHP 8.1 UPGRADE NOTES 1. Backward Incompatible Changes 2. New Features @@ -15,1126 +15,70 @@ PHP 8.0 UPGRADE NOTES 13. Other Changes 14. Performance Improvements - ======================================== 1. Backward Incompatible Changes ======================================== -- Core: - . `match` is now a reserved keyword. - . Assertion failures now throw by default. If the old behavior is desired, - then set `assert.exception=0` in INI settings. - . Methods with the same name as the class are no longer interpreted as - constructors. The __construct() method should be used instead. - . Removed ability to call non-static methods statically. - Thus `is_callable` will fail when checking for a non-static method with a - classname (must check with an object instance). - . Removed (unset) cast. - . Removed track_errors ini directive. This means that $php_errormsg is no - longer available. The error_get_last() function may be used instead. - . Removed the ability to define case-insensitive constants. The third - argument to define() may no longer be true. - . Access to undefined constants now always results in an Error exception. - Previously, unqualified constant accesses resulted in a warning and were - interpreted as strings. - . Removed ability to specify an autoloader using an __autoload() function. - spl_autoload_register() should be used instead. - . Removed the $errcontext argument for custom error handlers. - . Removed create_function(). Anonymous functions may be used instead. - . Removed each(). foreach or ArrayIterator should be used instead. - . Removed ability to unbind $this from closures that were created from a - method, using Closure::fromCallable() or ReflectionMethod::getClosure(). - . Also removed ability to unbind $this from proper closures that contain uses - of $this. - . Removed ability to use array_key_exists() with objects. Use one of isset() - or property_exists() instead. - . Made the behavior of array_key_exists() regarding the type of the key - parameter consistent with isset() and normal array access. All key types now - use the usual coercions and array/object keys throw a TypeError. - . Any array that has a number n as its first numeric key will use n+1 for - its next implicit key, even if n is negative. - RFC: https://wiki.php.net/rfc/negative_array_index - . The default error_reporting level is now E_ALL. Previously it excluded - E_NOTICE and E_DEPRECATED. - . display_startup_errors is now enabled by default. - . Using "parent" inside a class that has no parent will now result in a - fatal compile-time error. - . The @ operator will no longer silence fatal errors (E_ERROR, E_CORE_ERROR, - E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE). Error handlers - that expect error_reporting to be 0 when @ is used, should be adjusted to - use a mask check instead: - - // Replace - function my_error_handler($err_no, $err_msg, $filename, $linenum) { - if (error_reporting() == 0) { - return; // Silenced - } - // ... - } - - // With - function my_error_handler($err_no, $err_msg, $filename, $linenum) { - if (!(error_reporting() & $err_no)) { - return; // Silenced - } - // ... - } - - Additionally, care should be taken that error messages are not displayed in - production environments, which can result in information leaks. Please - ensure that display_errors=Off is used in conjunction with error logging. - . Following the hash comment operator # immediately with an opening bracket - is not supported as a comment anymore since this syntax is now used for - attributes. - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Inheritance errors due to incompatible method signatures (LSP violations) - will now always generate a fatal error. Previously a warning was generated - in some cases. - RFC: https://wiki.php.net/rfc/lsp_errors - . The precedence of the concatenation operator has changed relative to - bitshifts and addition as well as subtraction. - RFC: https://wiki.php.net/rfc/concatenation_precedence - . Arguments with a default value that resolves to null at runtime will no - longer implicitly mark the argument type as nullable. Either use an explicit - nullable type, or an explicit null default value instead. - - // Replace - function test(int $arg = CONST_RESOLVING_TO_NULL) {} - // With - function test(?int $arg = CONST_RESOLVING_TO_NULL) {} - // Or - function test(int $arg = null) {} - . A number of warnings have been converted into Error exceptions: - - * Attempting to write to a property of a non-object. Previously this - implicitly created an stdClass object for null, false and empty strings. - * Attempting to append an element to an array for which the PHP_INT_MAX key - is already used. - * Attempting to use an invalid type (array or object) as an array key or - string offset. - * Attempting to write to an array index of a scalar value. - * Attempting to unpack a non-array/Traversable. - - A number of notices have been converted into warnings: - - * Attempting to read an undefined variable. - * Attempting to read an undefined property. - * Attempting to read an undefined array key. - * Attempting to read a property of a non-object. - * Attempting to access an array index of a non-array. - * Attempting to convert an array to string. - * Attempting to use a resource as an array key. - * Attempting to use null, a boolean, or a float as a string offset. - * Attempting to read an out-of-bounds string offset. - * Attempting to assign an empty string to a string offset. - - RFC: https://wiki.php.net/rfc/engine_warnings - . Attempting to assign multiple bytes to a string offset will now emit a - warning. - . Unexpected characters in source files (such as null bytes outside of - strings) will now result in a ParseError exception instead of a compile - warning. - . Uncaught exceptions now go through "clean shutdown", which means that - destructors will be called after an uncaught exception. - . Compile time fatal error "Only variables can be passed by reference" has - been delayed until runtime and converted to "Argument cannot be passed by - reference" exception. - . Some "Only variables should be passed by reference" notices have been - converted to "Argument cannot be passed by reference" exception. - . The generated name for anonymous classes has changed. It will now include - the name of the first parent or interface: - - new class extends ParentClass {}; - // -> ParentClass@anonymous - new class implements FirstInterface, SecondInterface {}; - // -> FirstInterface@anonymous - new class {}; - // -> class@anonymous - - The name shown above is still followed by a null byte and a unique - suffix. - . Non-absolute trait method references in trait alias adaptations are now - required to be unambiguous: - - class X { - use T1, T2 { - func as otherFunc; - } - function func() {} - } - - If both T1::func() and T2::func() exist, this code was previously silently - accepted, and func as assumed to refer to T1::func. Now it will generate a - fatal error instead, and either T1::func or T2::func needs to be written - explicitly. - . The signature of abstract methods defined in traits is now checked against - the implementing class method: - - trait MyTrait { - abstract private function neededByTrait(): string; - } - - class MyClass { - use MyTrait; - - // Error, because of return type mismatch. - private function neededByTrait(): int { return 42; } - } - - RFC: https://wiki.php.net/rfc/abstract_trait_method_validation - . Disabled functions are now treated exactly like non-existent functions. - Calling a disabled function will report it as unknown, and redefining a - disabled function is now possible. - . data: stream wrappers are no longer writable, which matches the documented - behavior. - . The arithmetic and bitwise operators - +, -, *, /, **, %, <<, >>, &, |, ^, ~, ++, -- - will now consistently throw a TypeError when one of the operands is an - array, resource or non-overloaded object. The only exception to this is the - array + array merge operation, which remains supported. - RFC: https://wiki.php.net/rfc/arithmetic_operator_type_checks - . Float to string casting will now always behave locale-independently. - RFC: https://wiki.php.net/rfc/locale_independent_float_to_string - . Removed support for deprecated curly braces for offset access - RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access - . Applying the final modifier on a private method will now produce a warning - unless that method is the constructor. - RFC: https://wiki.php.net/rfc/inheritance_private_methods - . If an object constructor exit()s, the object destructor will no longer be - called. This matches the behavior when the constructor throws. - . Non-strict comparisons between numbers and non-numeric strings now work by - casting the number to string and comparing the strings. Comparisons between - numbers and numeric strings continue to work as before. Notably, this means - that `0 == "not-a-number"` is considered false now. - RFC: https://wiki.php.net/rfc/string_to_number_comparison - . Namespaced names can no longer contain whitespace: While `Foo\Bar` will be - recognized as a namespaced name, `Foo \ Bar` will not. Conversely, reserved - keywords are now permitted as namespace segments, which may also change the - interpretation of code: `new\x` is now the same as `constant('new\x')`, not - `new \x()`. - RFC: https://wiki.php.net/rfc/namespaced_names_as_token - . Nested ternaries now require explicit parentheses. - RFC: https://wiki.php.net/rfc/ternary_associativity - . debug_backtrace() and Exception::getTrace() will no longer provide - references to arguments. It will not be possible to change function - arguments through the backtrace. - . Numeric string handling has been altered to be more intuitive and less - error-prone. Trailing whitespace is now allowed in numeric strings for - consistency with how leading whitespace is treated. This mostly affects: - - The is_numeric() function - - String-to-string comparisons - - Type declarations - - Increment and decrement operations - The concept of a "leading-numeric string" has been mostly dropped; the - cases where this remains exist in order to ease migration. Strings which - emitted an E_NOTICE "A non well-formed numeric value encountered" will now - emit an E_WARNING "A non-numeric value encountered" and all strings which - emitted an E_WARNING "A non-numeric value encountered" will now throw a - TypeError. This mostly affects: - - Arithmetic operations - - Bitwise operations - This E_WARNING to TypeError change also affects the E_WARNING - "Illegal string offset 'string'" for illegal string offsets. The behavior - of explicit casts to int/float from strings has not been changed. - RFC: https://wiki.php.net/rfc/saner-numeric-strings - . Magic Methods will now have their arguments and return types checked if - they have them declared. The signatures should match the following list: - - __call(string $name, array $arguments): mixed - __callStatic(string $name, array $arguments): mixed - __clone(): void - __debugInfo(): ?array - __get(string $name): mixed - __invoke(mixed $arguments): mixed - __isset(string $name): bool - __serialize(): array - __set(string $name, mixed $value): void - __set_state(array $properties): object - __sleep(): array - __unserialize(array $data): void - __unset(string $name): void - __wakeup(): void - - RFC: https://wiki.php.net/rfc/magic-methods-signature - . call_user_func_array() array keys will now be interpreted as parameter names, - instead of being silently ignored. - -- COM: - . Removed the ability to import case-insensitive constants from type - libraries. The second argument to com_load_typelib() may no longer be false; - com.autoregister_casesensitive may no longer be disabled; case-insensitive - markers in com.typelib_file are ignored. - -- Curl: - . CURLOPT_POSTFIELDS no longer accepts objects as arrays. To interpret an - object as an array, perform an explicit (array) cast. The same applies to - other options accepting arrays as well. - -- Date: - . mktime() and gmmktime() now require at least one argument. time() can be - used to get the current timestamp. - -- dom: - . Remove unimplemented classes from ext/dom that had no behavior and contained - test data. These classes have also been removed in the latest version of DOM - standard: - - * DOMNameList - * DomImplementationList - * DOMConfiguration - * DomError - * DomErrorHandler - * DOMImplementationSource - * DOMLocator - * DOMUserDataHandler - * DOMTypeInfo - -- Enchant: - . enchant_broker_list_dicts(), enchant_broker_describe() and - enchant_dict_suggest() will now return an empty array instead of null. - . enchant_broker_init() will now return an EnchantBroker object rather than - a resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . enchant_broker_request_dict() and enchant_broker_request_pwl_dict() will now - return an EnchantDictionary object rather than a resource. Return value - checks using is_resource() should be replaced with checks for `false`. - -- Exif: - . Removed read_exif_data(). exif_read_data() should be used instead. - -- Filter: - . The FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIRED flags for the - FILTER_VALIDATE_URL filter have been removed. The scheme and host are (and - have been) always required. - . The INPUT_REQUEST and INPUT_SESSION source for filter_input() etc have been - removed. These were never implemented and their use always generated a - warning. - -- GD: - . The GD extension now uses objects as the underlying data structure for - images, rather than resources. These objects are completely opaque, i.e. - they don't have any methods. - . The deprecated function image2wbmp() has been removed. - RFC: https://wiki.php.net/rfc/image2wbmp - . The deprecated functions png2wbmp() and jpeg2wbmp() have been removed. - RFC: https://wiki.php.net/rfc/deprecate-png-jpeg-2wbmp - . The default $mode parameter of imagecropauto() no longer accepts -1. - IMG_CROP_DEFAULT should be used instead. - -- GMP: - . gmp_random() has been removed. One of gmp_random_range() or - gmp_random_bits() should be used instead. - -- Iconv: - . iconv() implementations which do not properly set errno in case of errors - are no longer supported. - -- IMAP: - . The unused default_host argument of imap_headerinfo() has been removed. - . The imap_header() function which is an alias of imap_headerinfo() has been removed. - -- Intl: - . The deprecated constant INTL_IDNA_VARIANT_2003 has been removed. - RFC: https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003 - . The deprecated Normalizer::NONE constant has been removed. - . The IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::RELATIVE_LONG, - IntlDateFormatter::RELATIVE_MEDIUM, and IntlDateFormatter::RELATIVE_SHORT - constants have been added. - -- LDAP: - . The deprecated function ldap_sort has been removed. - . The deprecated function ldap_control_paged_result has been removed. - . The deprecated function ldap_control_paged_result_response has been removed. - . The interface of ldap_set_rebind_proc has changed; the $callback parameter - does not accept empty string anymore; null value shall be used instead. - -- Mbstring: - . The mbstring.func_overload directive has been removed. The related - MB_OVERLOAD_MAIL, MB_OVERLOAD_STRING, and MB_OVERLOAD_REGEX constants have - also been removed. Finally, the "func_overload" and "func_overload_list" - entries in mb_get_info() have been removed. - . mb_parse_str() can no longer be used without specifying a result array. - . A number of deprecated mbregex aliases have been removed. See the following - list for which functions should be used instead: - - * mbregex_encoding() -> mb_regex_encoding() - * mbereg() -> mb_ereg() - * mberegi() -> mb_eregi() - * mbereg_replace() -> mb_ereg_replace() - * mberegi_replace() -> mb_eregi_replace() - * mbsplit() -> mb_split() - * mbereg_match() -> mb_ereg_match() - * mbereg_search() -> mb_ereg_search() - * mbereg_search_pos() -> mb_ereg_search_pos() - * mbereg_search_regs() -> mb_ereg_search_regs() - * mbereg_search_init() -> mb_ereg_search_init() - * mbereg_search_getregs() -> mb_ereg_search_getregs() - * mbereg_search_getpos() -> mb_ereg_search_getpos() - * mbereg_search_setpos() -> mb_ereg_search_setpos() - - . The 'e' modifier for mb_ereg_replace() has been removed. - mb_ereg_replace_callback() should be used instead. - . A non-string pattern argument to mb_ereg_replace() will now be interpreted - as a string instead of an ASCII codepoint. The previous behavior may be - restored with an explicit call to chr(). - . The needle argument for mb_strpos(), mb_strrpos(), mb_stripos(), - mb_strripos(), mb_strstr(), mb_stristr(), mb_strrchr() and mb_strrichr() can - now be empty. - . The $is_hex parameter, which was not used internally, has been removed from - mb_decode_numericentity(). - . The legacy behavior of passing the encoding as the third argument instead - of an offset for the mb_strrpos() function has been removed; provide an - explicit 0 offset with the encoding as the fourth argument instead. - . The ISO_8859-* character encoding aliases have been replaced by ISO8859-* - aliases for better interoperability with the iconv extension. The mbregex - ISO 8859 aliases with underscores (ISO_8859_* and ISO8859_*) have also been - removed. - -- OCI8: - . The OCI-Lob class is now called OCILob, and the OCI-Collection class is now - called OCICollection for name compliance enforced by PHP 8 arginfo - type annotation tooling. - . Several alias functions have been marked as deprecated. - . oci_internal_debug() and its alias ociinternaldebug() have been removed. - -- ODBC: - . odbc_connect() no longer reuses persistent connections. - . The unused flags parameter of odbc_exec() has been removed. - -- OpenSSL: - . openssl_x509_read() and openssl_csr_sign() will now return an - OpenSSLCertificate object rather than a resource. Return value checks using - is_resource() should be replaced with checks for `false`. - . The openssl_x509_free() function is deprecated and no longer has an effect, - instead the OpenSSLCertificate instance is automatically destroyed if it is no - longer referenced. - . openssl_csr_new() will now return an OpenSSLCertificateSigningRequest object - rather than a resource. Return value checks using is_resource() should be - replaced with checks for `false`. - . openssl_pkey_new() will now return an OpenSSLAsymmetricKey object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . The openssl_pkey_free() function is deprecated and no longer has an effect, - instead the OpenSSLAsymmetricKey instance is automatically destroyed if it is no - longer referenced. - . openssl_seal() and openssl_open() now require $method to be passed, as the - previous default of "RC4" is considered insecure. - -- PCRE: - . When passing invalid escape sequences they are no longer interpreted as - literals. This behavior previously required the X modifier - which is - now ignored. - -- PDO: - . The default error handling mode has been changed from "silent" to - "exceptions". See https://www.php.net/manual/en/pdo.error-handling.php - for details of behavior changes and how to explicitly set this attribute. - RFC: https://wiki.php.net/rfc/pdo_default_errmode - . The signatures of some PDO methods have changed: - - PDO::query( - string $statement, ?int $fetch_mode = null, ...$fetch_mode_args) - PDOStatement::setFetchMode(int $mode, ...$params) - -- PDO_ODBC: - . The php.ini directive pdo_odbc.db2_instance_name has been removed - -- pgsql: - . The deprecated pg_connect() syntax using multiple parameters instead of a - connection string is no longer supported. - . The deprecated pg_lo_import() and pg_lo_export() signature that passes the - connection as the last argument is no longer supported. The connection - should be passed as first argument instead. - . pg_fetch_all() will now return an empty array instead of false for result - sets with zero rows. - -- Phar: - . Metadata associated with a phar will no longer be automatically unserialized, - to fix potential security vulnerabilities due to object instantiation, autoloading, etc. - RFC: https://wiki.php.net/rfc/phar_stop_autoloading_metadata - -- Reflection: - . The method signatures - - ReflectionClass::newInstance($args) - ReflectionFunction::invoke($args) - ReflectionMethod::invoke($object, $args) - - have been changed to: - - ReflectionClass::newInstance(...$args) - ReflectionFunction::invoke(...$args) - ReflectionMethod::invoke($object, ...$args) - - Code that must be compatible with both PHP 7 and PHP 8 can use the following - signatures to be compatible with both versions: - - ReflectionClass::newInstance($arg = null, ...$args) - ReflectionFunction::invoke($arg = null, ...$args) - ReflectionMethod::invoke($object, $arg = null, ...$args) - - . The ReflectionType::__toString() method will now return a complete debug - representation of the type, and is no longer deprecated. In particular the - result will include a nullability indicator for nullable types. The format - of the return value is not stable and may change between PHP versions. - . Reflection export() methods have been removed. - . The following methods can now return information about default values of - parameters of internal functions: - ReflectionParameter::isDefaultValueAvailable() - ReflectionParameter::getDefaultValue() - ReflectionParameter::isDefaultValueConstant() - ReflectionParameter::getDefaultValueConstantName() - . ReflectionMethod::isConstructor() and ReflectionMethod::isDestructor() now - also return true for `__construct` and `__destruct` methods of interfaces. - Previously, this would only be true for methods of classes and traits. - . ReflectionType::isBuiltin() method has been moved to ReflectionNamedType. - ReflectionUnionType does not have it. - -- Sockets: - . The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES - flags for socket_addrinfo_lookup() have been removed. - . socket_create(), socket_create_listen(), socket_accept(), - socket_import_stream(), socket_addrinfo_connect(), socket_addrinfo_bind(), - and socket_wsaprotocol_info_import() will now return a Socket object rather - than a resource. Return value checks using is_resource() should be replaced - with checks for `false`. - . socket_addrinfo_lookup() will now return an array of AddressInfo objects - rather than resources. - -- SPL: - . SplFileObject::fgetss() has been removed. - . SplHeap::compare($a, $b) now specifies a method signature. Inheriting - classes implementing this method will now have to use a compatible - method signature. - . SplDoublyLinkedList::push() now returns void instead of true - . SplDoublyLinkedList::unshift() now returns void instead of true - . SplQueue::enqueue() now returns void instead of true - . spl_autoload_register() will now always throw a TypeError on invalid - arguments, therefore the second argument $do_throw is ignored and a - notice will be emitted if it is set to false. - . SplFixedArray is now an IteratorAggregate and not an Iterator. - SplFixedArray::rewind(), ::current(), ::key(), ::next(), and ::valid() - have been removed. In their place, SplFixedArray::getIterator() has been - added. Any code which uses explicit iteration over SplFixedArray must now - obtain an Iterator through SplFixedArray::getIterator(). This means that - SplFixedArray is now safe to use in nested loops. - -- Standard: - . assert() will no longer evaluate string arguments, instead they will be - treated like any other argument. assert($a == $b) should be used instead of - assert('$a == $b'). The assert.quiet_eval ini directive and - ASSERT_QUIET_EVAL constants have also been removed, as they would no longer - have any effect. - . parse_str() can no longer be used without specifying a result array. - . fgetss() has been removed. - . The string.strip_tags filter has been removed. - . The needle argument of strpos(), strrpos(), stripos(), strripos(), strstr(), - strchr(), strrchr(), and stristr() will now always be interpreted as a - string. Previously non-string needles were interpreted as an ASCII code - point. An explicit call to chr() can be used to restore the previous - behavior. - . The needle argument for strpos(), strrpos(), stripos(), strripos(), - strstr(), stristr() and strrchr() can now be empty. - . The length argument for substr(), substr_count(), substr_compare(), and - iconv_substr() can now be null. Null values will behave as if no length - argument was provided and will therefore return the remainder of the string - instead of an empty string. - . The length argument for array_splice() can now be null. Null values will - behave identically to omitting the argument, thus removing everything from - the 'offset' to the end of the array. - . The args argument of vsprintf(), vfprintf(), and vprintf() must now be an - array. Previously any type was accepted. - . The 'salt' option of password_hash() is no longer supported. If the 'salt' - option is used a warning is generated, the provided salt is ignored, and a - generated salt is used instead. - . The quotemeta() function will now return an empty string if an empty string - was passed. Previously false was returned. - . hebrevc() has been removed. - . convert_cyr_string() has been removed. - . money_format() has been removed. - . ezmlm_hash() has been removed. - . restore_include_path() has been removed. - . get_magic_quotes_gpc() and get_magic_quotes_gpc_runtime() has been removed. - . FILTER_SANITIZE_MAGIC_QUOTES has been removed. - . Calling implode() with parameters in a reverse order ($pieces, $glue) is no - longer supported. - . parse_url() will now distinguish absent and empty queries and fragments: - - http://example.com/foo => query = null, fragment = null - http://example.com/foo? => query = "", fragment = null - http://example.com/foo# => query = null, fragment = "" - http://example.com/foo?# => query = "", fragment = "" - - Previously all cases resulted in query and fragment being null. - . var_dump() and debug_zval_dump() will now print floating-point numbers - using serialize_precision rather than precision. In a default configuration, - this means that floating-point numbers are now printed with full accuracy - by these debugging functions. - . If the array returned by __sleep() contains non-existing properties, these - are now silently ignored. Previously, such properties would have been - serialized as if they had the value NULL. - . The default locale on startup is now always "C". No locales are inherited - from the environment by default. Previously, LC_ALL was set to "C", while - LC_CTYPE was inherited from the environment. However, some functions did not - respect the inherited locale without an explicit setlocale() call. An - explicit setlocale() call is now always required if you wish to change any - locale component from the default. - . Removed deprecated DES fallback in crypt(). If an unknown salt format is - passed to crypt(), the function will fail with *0 instead of falling back - to a weak DES hash now. - . Specifying out of range rounds for sha256/sha526 crypt() will now fail with - *0 instead of clamping to the closest limit. This matches glibc behavior. - . The result of sorting functions may have changed, if the array contains - elements that compare as equal. - . Sort comparison functions that return true or false will now throw a - deprecation warning, and should be replaced with an implementation - that returns an integer less than, equal to, or greater than zero. - - // Replace - usort($array, fn($a, $b) => $a > $b); - // With - usort($array, fn($a, $b) => $a <=> $b); - - . Any functions accepting callbacks that are not explicitly specified to - accept parameters by reference will now warn if a callback with reference - parameters is used. Examples include array_filter() and array_reduce(). - This was already the case for most, but not all, functions previously. - . The HTTP stream wrapper as used by functions like file_get_contents() - now advertises HTTP/1.1 rather than HTTP/1.0 by default. This does not - change the behavior of the client, but may cause servers to respond - differently. To retain the old behavior, set the 'protocol_version' - stream context option, e.g. - - $ctx = stream_context_create(['http' => ['protocol_version' => '1.0']]); - echo file_get_contents('http://example.org', false, $ctx); - . Calling crypt() without an explicit salt is no longer supported. If you - would like to produce a strong hash with an auto-generated salt, use - password_hash() instead. - . substr(), mb_substr(), iconv_substr() and grapheme_substr() now consistently - clamp out-of-bounds offsets to the string boundary. Previously, false was - returned instead of the empty string in some cases. - -- Sysvmsg: - . msg_get_queue() will now return an SysvMessageQueue object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - -- Sysvsem: - . sem_get() will now return an SysvSemaphore object rather than a resource. - Return value checks using is_resource() should be replaced with checks - for `false`. - . The $auto_release parameter of sem_get() was changed to accept bool values - rather than int. - -- Sysvshm: - . shm_attach() will now return an SysvSharedMemory object rather than a resource. - Return value checks using is_resource() should be replaced with checks - for `false`. - -- tidy: - . The $use_include_path parameter, which was not used internally, has been - removed from tidy_repair_string(). - -- Tokenizer: - . T_COMMENT tokens will no longer include a trailing newline. The newline will - instead be part of a following T_WHITESPACE token. It should be noted that - T_COMMENT is not always followed by whitespace, it may also be followed by - T_CLOSE_TAG or end-of-file. - . Namespaced names are now represented using the T_NAME_QUALIFIED (Foo\Bar), - T_NAME_FULLY_QUALIFIED (\Foo\Bar) and T_NAME_RELATIVE (namespace\Foo\Bar) - tokens. T_NS_SEPARATOR is only used for standalone namespace separators, - and only syntactially valid in conjunction with group use declarations. - RFC: https://wiki.php.net/rfc/namespaced_names_as_token - -- XML: - . xml_parser_create(_ns) will now return an XmlParser object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The xml_parser_free() function no longer has an effect, - instead the XmlParser instance is automatically destroyed if it is no longer - referenced. - -- XMLWriter: - . The XMLWriter functions now accept and return, respectively, XMLWriter - objects instead of resources. - -- Zip: - . ZipArchive::OPSYS_Z_CPM has been removed (this name was a typo). Use - ZipArchive::OPSYS_CPM instead. - -- Zlib: - . gzgetss() has been removed. - . inflate_init() will now return an InflateContext object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . deflate_init() will now return a DeflateContext object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . zlib.output_compression is no longer automatically disabled for - Content-Type: image/*. - ======================================== 2. New Features ======================================== -- Core: - . Added support for union types. - RFC: https://wiki.php.net/rfc/union_types_v2 - . Added WeakMap. - RFC: https://wiki.php.net/rfc/weak_maps - . Added ValueError class. - . Any number of function parameters may now be replaced by a variadic - argument, as long as the types are compatible. For example, the following - code is now allowed: - - class A { - public function method(int $many, string $parameters, $here) {} - } - class B extends A { - public function method(...$everything) {} - } - . "static" (as in "late static binding") can now be used as a return type: - - class Test { - public function create(): static { - return new static(); - } - } - - RFC: https://wiki.php.net/rfc/static_return_type - . It is now possible to fetch the class name of an object using - `$object::class`. The result is the same as `get_class($object)`. - RFC: https://wiki.php.net/rfc/class_name_literal_on_object - . New and instanceof can now be used with arbitrary expressions, using - `new (expression)(...$args)` and `$obj instanceof (expression)`. - RFC: https://wiki.php.net/rfc/variable_syntax_tweaks - . Some consistency fixes to variable syntax have been applied, for example - writing `Foo::BAR::$baz` is now allowed. - RFC: https://wiki.php.net/rfc/variable_syntax_tweaks - . Added Stringable interface, which is automatically implemented if a class - defines a __toString() method. - RFC: https://wiki.php.net/rfc/stringable - . Traits can now define abstract private methods. - RFC: https://wiki.php.net/rfc/abstract_trait_method_validation - . `throw` can now be used as an expression. - RFC: https://wiki.php.net/rfc/throw_expression - . An optional trailing comma is now allowed in parameter lists. - RFC: https://wiki.php.net/rfc/trailing_comma_in_parameter_list - . It is now possible to write `catch (Exception)` to catch an exception - without storing it in a variable. - RFC: https://wiki.php.net/rfc/non-capturing_catches - . Added support for mixed type - RFC: https://wiki.php.net/rfc/mixed_type_v2 - . Added support for Attributes - RFC: https://wiki.php.net/rfc/attributes_v2 - RFC: https://wiki.php.net/rfc/attribute_amendments - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Added support for constructor property promotion (declaring properties in - the constructor signature). - RFC: https://wiki.php.net/rfc/constructor_promotion - . Added support for `match` expression. - RFC: https://wiki.php.net/rfc/match_expression_v2 - . Private methods declared on a parent class no longer enforce any - inheritance rules on the methods of a child class. (with the exception of - final private constructors) - RFC: https://wiki.php.net/rfc/inheritance_private_methods - . Added support for nullsafe operator (`?->`). - RFC: https://wiki.php.net/rfc/nullsafe_operator - . Added support for named arguments. - RFC: https://wiki.php.net/rfc/named_params - -- Date: - . Added DateTime::createFromInterface() and - DateTimeImmutable::createFromInterface(). - . Added the DateTime format specifier "p" which is the same as "P" but - returning "Z" for UTC. - -- Dom: - . Introduce DOMParentNode and DOMChildNode with new traversal and - manipulation APIs. - RFC: https://wiki.php.net/rfc/dom_living_standard_api - -- Enchant: - . enchant_dict_add() - . enchant_dict_is_added() - . LIBENCHANT_VERSION macro - -- FPM: - . Added a new option pm.status_listen that allows getting status from - different endpoint (e.g. port or UDS file) which is useful for getting - status when all children are busy with serving long running requests. - -- Hash: - . HashContext objects can now be serialized. - -- Opcache: - . If the opcache.record_warnings ini setting is enabled, opcache will record - compile-time warnings and replay them on the next include, even if it is - served from cache. - -- OpenSSL: - . Added Cryptographic Message Syntax (CMS) (RFC 5652) support composed of - functions for encryption, decryption, signing, verifying and reading. The - API is similar to the API for PKCS #7 functions with an addition of new - encoding constants: OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME and - OPENSSL_ENCODING_PEM. - -- Standard: - . printf() and friends now support the %h and %H format specifiers. These - are the same as %g and %G, but always use "." as the decimal separator, - rather than determining it through the LC_NUMERIC locale. - . printf() and friends now support using "*" as width or precision, in which - case the width/precision is passed as an argument to printf. This also - allows using precision -1 with %g, %G, %h and %H. For example, the following - code can be used to reproduce PHP's default floating point formatting: - - printf("%.*H", (int) ini_get("precision"), $float); - printf("%.*H", (int) ini_get("serialize_precision"), $float); - - . proc_open() now supports pseudo-terminal (PTY) descriptors. The following - attaches stdin, stdout and stderr to the same PTY: +- hash: + . Added MurmurHash3 with streaming support. The following variants are implemented - $proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes); - - . proc_open() now supports socket pair descriptors. The following attaches - a distinct socket pair to stdin, stdout and stderr: - - $proc = proc_open( - $command, [['socket'], ['socket'], ['socket']], $pipes); - - Unlike pipes, sockets do not suffer from blocking I/O issues on Windows. - However, not all programs may work correctly with stdio sockets. - . Sorting functions are now stable, which means that equal-comparing elements - will retain their original order. - RFC: https://wiki.php.net/rfc/stable_sorting - . array_diff(), array_intersect() and their variations can now be used with - a single array as argument. This means that usages like the following are - now possible: - - // OK even if $excludes is empty. - array_diff($array, ...$excludes); - // OK even if $arrays only contains a single array. - array_intersect(...$arrays); - . The $flag parameter of ob_implicit_flush() was changed to accept bool - values rather than int. - -- Zip: - . Extension updated to version 1.19.1 - . New ZipArchive::lastId property to get index value of last added entry. - . Error can be checked after an archive is closed using ZipArchive::status, - ZipArchive::statusSys properties or ZipArchive::getStatusString() method. - . The remove_path option of ZipArchive::addGlob() and ::addPattern() is now - treated as arbitrary string prefix (for consistency with the add_path - option), whereas formerly it was treated as directory name. - . Optional compression / encryption features are listed in phpinfo. + - murmur3a, 32-bit hash + - murmur3c, 128-bit hash for x86 + - murmur3f, 128-bit hash for x64 ======================================== 3. Changes in SAPI modules ======================================== -- Apache: - . The PHP module has been renamed from php7_module to php_module. - -- CGI and FPM will now use CONTEXT_DOCUMENT_ROOT to scan for .user.ini files, - if it is defined. Otherwise, DOCUMENT_ROOT will be used as before. This - improves support for Apache mod_userdir and mod_alias. - ======================================== 4. Deprecated Functionality ======================================== -- Core: - . Declaring a required parameter after an optional one is deprecated. As an - exception, declaring a parameter of the form "Type $param = null" before - a required one continues to be allowed, because this pattern was sometimes - used to achieve nullable types in older PHP versions. - - function test($a = [], $b) {} // Deprecated - function test(Foo $a = null, $b) {} // Allowed - . Calling get_defined_functions() with $exclude_disabled explicitly set to - false is deprecated. get_defined_functions() will never include disabled - functions. - -- Enchant: - . enchant_broker_set_dict_path and enchant_broker_get_dict_path - not available in libenchant < 1.5 nor in libenchant-2 - . enchant_dict_add_to_personal, use enchant_dict_add instead - . enchant_dict_is_in_session, use enchant_dict_is_added instead - . enchant_broker_free and enchant_broker_free_dict, unset the object instead - . ENCHANT_MYSPELL and ENCHANT_ISPELL constants - -- LibXML: - . libxml_disable_entity_loader() has been deprecated. As libxml 2.9.0 is now - required, external entity loading is guaranteed to be disabled by default, - and this function is no longer needed to protect against XXE attacks. - -- PGSQL / PDO PGSQL: - . The constant PG_VERSION_STR has now the same value as PG_VERSION, and thus - is deprecated. - . Function aliases in the pgsql extension have been deprecated. - -- Zip: - . Using empty file as ZipArchive is deprecated. Libzip 1.6.0 - do not accept empty files as valid zip archives any longer. - Existing workaround will be removed in next version. - . The procedural API of Zip is deprecated. Use ZipArchive instead. - -- Reflection: - . ReflectionFunction::isDisabled() is deprecated, as it is no longer possible - to create a ReflectionFunction for a disabled function. This method now - always returns false. - . ReflectionParameter::getClass(), ReflectionParameter::isArray(), and - ReflectionParameter::isCallable() are deprecated. - ReflectionParameter::getType() and the ReflectionType APIs should be used - instead. - ======================================== 5. Changed Functions ======================================== -- Reflection: - . ReflectionClass::getConstants and ReflectionClass::getReflectionConstants results - can be now filtered via a new parameter `$filter`. 3 new constants were added to - be used with it: - - ReflectionClassConstant::IS_PUBLIC - ReflectionClassConstant::IS_PROTECTED - ReflectionClassConstant::IS_PRIVATE - -- Zip - . ZipArchive::addGlob and ZipArchive::addPattern methods accept more - values in the "options" array argument: - . flags - . comp_method - . comp_flags - . env_method - . enc_password - . ZipArchive::addEmptyDir, ZipArchive::addFile and aZipArchive::addFromString - methods have a new "flags" argument. This allows managing name encoding - (ZipArchive::FL_ENC_*) and entry replacement (ZipArchive::FL_OVERWRITE) - . ZipArchive::extractTo now restore file modification time. - ======================================== 6. New Functions ======================================== -- Core: - . Added get_resource_id($resource) function, which returns the same value as - (int) $resource. It provides the same functionality under a clearer API. - -- LDAP: - . Added ldap_count_references(), which returns the number of reference - messages in a search result. - -- OpenSSL: - . Added openssl_cms_encrypt() encrypts the message in the file with the - certificates and outputs the result to the supplied file. - . Added openssl_cms_decrypt() that decrypts the S/MIME message in the file - and outputs the results to the supplied file. - . Added openssl_cms_read() that exports the CMS file to an array of PEM - certificates. - . Added openssl_cms_sign() that signs the MIME message in the file with - a cert and key and output the result to the supplied file. - . Added openssl_cms_verify() that verifies that the data block is intact, - the signer is who they say they are, and returns the certs of the signers. - -- PCRE: - . Added preg_last_error_msg(), which returns a human-readable message for - the last PCRE error. It complements preg_last_error(), which returns an - integer enum instead. - -- SQLite3: - . Add SQLite3::setAuthorizer() and respective class constants to set a - userland callback that will be used to authorize or not an action on the - database. - PR: https://github.com/php/php-src/pull/4797 - -- Standard: - . Added - - str_contains(string $haystack, string $needle): bool - str_starts_with(string $haystack, string $needle): bool - str_ends_with(string $haystack, string $needle): bool - - functions, which check whether $haystack contains, starts with or ends with - $needle. - RFC: https://wiki.php.net/rfc/str_contains - RFC: https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions - . Added fdiv() function, which performs a floating-point division under - IEEE 754 semantics. Division by zero is considered well-defined and - will return one of Inf, -Inf or NaN. - . Added get_debug_type() function, which returns a type useful for error - messages. Unlike gettype(), it uses canonical type names, returns class - names for objects, and indicates the resource type for resources. - RFC: https://wiki.php.net/rfc/get_debug_type - -- Zip: - . ZipArchive::setMtimeName and ZipArchive::setMtimeIndex to set the - modification time of an entry. - . ZipArchive::setProgressCallback to provide updates during archive close. - . ZipArchive::setCancelCallback to allow cancellation during archive close. - . ZipArchive::replaceFile to replace an entry content. - . ZipArchive::isCompressionMethodSupported to check optional compression - features. - . ZipArchive::isEncryptionMethodSupported to check optional encryption - features. - ======================================== 7. New Classes and Interfaces ======================================== -- Tokenizer: - . The new PhpToken class adds an object-based interface to the tokenizer. - It provides a more uniform and ergonomic representation, while being more - memory efficient and faster. - RFC: https://wiki.php.net/rfc/token_as_object - ======================================== 8. Removed Extensions and SAPIs ======================================== -- XML-RPC: - . The xmlrpc extension has been unbundled and moved to PECL. - RFC: https://wiki.php.net/rfc/unbundle_xmlprc - ======================================== 9. Other Changes to Extensions ======================================== -- CURL: - . The CURL extension now requires at least libcurl 7.29.0. - . curl_init() will now return a CurlHandle object rather than a resource. - Return value checks using is_resource() should be replaced with - checks for `false`. The curl_close() function no longer has an effect, - instead the CurlHandle instance is automatically destroyed if it is no - longer referenced. - . curl_multi_init() will now return a CurlMultiHandle object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The curl_multi_close() function no longer has an effect, - instead the CurlMultiHandle instance is automatically destroyed if it is no - longer referenced. - . curl_share_init() will now return a CurlShareHandle object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The curl_share_close() function no longer has an effect, - instead the CurlShareHandle instance is automatically destroyed if it is no - longer referenced. - . The deprecated parameter `$version` of curl_version() has been removed. - -- Date: - . DatePeriod now implements IteratorAggregate (instead of Traversable). - -- DOM: - . DOMNamedNodeMap now implements IteratorAggregate (instead of Traversable). - . DOMNodeList now implements IteratorAggregate (instead of Traversable). - -- Intl: - . IntlBreakIterator now implements IteratorAggregate (instead of Traversable). - . ResourceBundle now implements IteratorAggregate (instead of Traversable). - -- Enchant: - . The enchant extension now uses libenchant-2 by default when available. - libenchant version 1 is still supported but is deprecated and could - be removed in the future. - -- GD: - . The $num_points parameter of imagepolygon(), imageopenpolygon() and - imagefilledpolygon() is now optional, i.e. these functions may be called - with either 3 or 4 arguments. If the arguments is omitted, it is calculated - as count($points)/2. - . The function imagegetinterpolation() to get the current interpolation method - has been added. - -- JSON: - . The JSON extension cannot be disabled anymore and is always an integral part - of any PHP build, similar to the date extension. - -- MBString: - . The Unicode data tables have been updated to version 13.0.0. - -- PDO: - . PDOStatement now implements IteratorAggregate (instead of Traversable). - -- LibXML: - . The minimum required libxml version is now 2.9.0. This means that external - entity loading is now guaranteed to be disabled by default, and no extra - steps need to be taken to protect against XXE attacks. - -- MySQLi / PDO MySQL: - . When mysqlnd is not used (which is the default and recommended option), - the minimum supported libmysqlclient version is now 5.5. - . mysqli_result now implements IteratorAggregate (instead of Traversable). - -- PGSQL / PDO PGSQL: - . The PGSQL and PDO PGSQL extensions now require at least libpq 9.1. - -- Readline: - . Calling readline_completion_function() before the interactive prompt starts - (e.g. in auto_prepend_file) will now override the default interactive prompt - completion function. Previously, readline_completion_function() only worked - when called after starting the interactive prompt. - -- SimpleXML: - . SimpleXMLElement now implements RecursiveIterator and absorbed the - functionality of SimpleXMLIterator. SimpleXMLIterator is an empty extension - of SimpleXMLElement. - -- Shmop: - . shmop_open() will now return a Shmop object rather than a resource. Return - value checks using is_resource() should be replaced with checks for `false`. - The shmop_close() function no longer has an effect, and is deprecated; - instead the Shmop instance is automatically destroyed if it is no longer - referenced. +- OpenSSL: + . The OpenSSL extension now requires at least OpenSSL version 1.0.2. ======================================== 10. New Global Constants ======================================== -- Filter: - . FILTER_VALIDATE_BOOL has been added as an alias for FILTER_VALIDATE_BOOLEAN. - The new name is preferred, as it uses the canonical type name. - ======================================== 11. Changes to INI File Handling ======================================== -- zend.exception_string_param_max_len - . New INI directive to set the maximum string length in an argument of a - stringified stack strace. - -- com.dotnet_version - . New INI directive to choose the version of the .NET framework to use for - dotnet objects. - ======================================== 12. Windows Support ======================================== -- Standard: - . Program execution functions (proc_open(), exec(), popen() etc.) using the - shell now consistently execute `%comspec% /s /c "$commandline"`, which has - the same effect as executing `$commandline` (without additional quotes). - -- GD: - . php_gd2.dll has been renamed to php_gd.dll. - -- php-test-pack: - . The test runner has been renamed from run-test.php to run-tests.php, to - match its name in php-src. +. The macro IGNORE_URL_WIN has been removed; it had no effect as of PHP 5.0.0. ======================================== 13. Other Changes ======================================== -- EBCDIC targets are no longer supported, though it's unlikely that they were - still working in the first place. - ======================================== 14. Performance Improvements ======================================== - -- A Just-In-Time (JIT) compiler has been added to the opcache extension. -- array_slice() on an array without gaps will no longer scan the whole array to - find the start offset. This may significantly reduce the runtime of the - function with large offsets and small lengths. -- strtolower() now uses a SIMD implementation when using the "C" LC_CTYPE - locale (which is the default). diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index c15cbef3b118c..3e2aeb70a4def 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -1,35 +1,8 @@ -PHP 8.0 INTERNALS UPGRADE NOTES +PHP 8.1 INTERNALS UPGRADE NOTES 1. Internal API changes - a. Object Handlers API - b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler - c. TSRM changes - d. get() and set() object handlers - e. zend_parse_parameters 'L' specifier - f. Arginfo argument types - g. zend_free_op type and should_free argument of zend_get_zval_ptr() - h. zend_value_error() - i. get_closure() object handler - j. compare_objects() and compare() object handlers - k. The 'I' length modifier - l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR - m. All internal functions must have arginfo - n. zend_hash_sort compare function and zend_hash_sort signature change - o. cast_object() object handler is now required - p. ARG_COUNT() macro removed - q. GC_COLLECTABLE flag - r. Cannot implement Traversable only - s. zend_fcall_info no_separation flag removed - t. Signature changes - u. Error Notification callbacks to replace zend_error_cb overwrite use-cases - v. Removed Zend APIs - w. Renamed Zend APIs - x. ZEND_EXT_NOP no longer emitted 2. Build system changes - a. Abstract - b. Unix build system changes - c. Windows build system changes 3. Module changes @@ -37,425 +10,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES 1. Internal API changes ======================== - a. The Object Handlers API was changed to receive zend_object* instead of - zval* and zend_string* instead of zval* for property names. See also - section t for other similar changes. - - b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler - were removed. ZEND_INTERNAL_FUNCTION with ZEND_ACC_CALL_VIA_HANDLER and - defined "handler" callback should be used instead. This "handler" callback - should also take care about function cleanup. See ext/zend_test/test.c - for example. - - c. The following things have been removed from TSRM: - - TSRMLS_DC - - TSRMLS_D - - TSRMLS_CC - - TSRMLS_C - - TSRMLS_FETCH - - TSRMLS_FETCH_FROM_CTX - - TSRMLS_SET_CTX - - tsrm_new_interpreter_context - - tsrm_set_interpreter_context - - tsrm_free_interpreter_context - - support for GNUPTH, SGI ST, and BETHREADS - - d. The get() and set() object handlers have been removed. The get() handler - can generally be replaced with cast_object(). Some uses of set() may be - replaced by do_operation(). If set() was used to overload direct - assignments using "=", then this is no longer supported and the - functionality should be provided in some other way (for example, as - modification of an object property). - - e. The zend_parse_parameters 'L' specifier and the Z_PARAM_STRICT_LONG() - family of macros have been removed. Use 'l' and Z_PARAM_LONG() instead, - which, despite the confusing name, actually have stricter input validation. - - f. Arginfo argument types for internal functions are no longer checked. - Instead type checks should be performed using the zend_parse_parameters() - or ZEND_PARSE_PARAMETERS_*() APIs. - - g. The zend_free_op type and the "should_free" and "type" arguments of - zend_get_zval_ptr() were removed. It's possible to get the old - "should_free" value using the following code: - - zval *ret = zend_get_zval_ptr( - opline, opline->op1_type, &opline->op1, execute_data); - zval *should_free = (op_type & (IS_TMP_VAR|IS_VAR)) ? ret : NULL; - - h. Added the zend_value_error() function, which is intended to be used - to raise ValueError when inappropriate argument values are passed - to functions. - - i. get_closure() object handlers now accept an additional zend_bool parameter - `check_only`. If it is true, the handler is called to check whether the - object is callable; in this case the handler should not throw an exception. - - j. compare_objects() handler was removed. Extensions should use compare() object - handler instead and check if both arguments are objects and have the same - compare handler, using ZEND_COMPARE_OBJECTS_FALLBACK() macro. - - k. The 'I' length modifier, used to denote 32 and 64bit integer from the custom - snprintf and spprintf implementations has been removed. - Use the ZEND_LONG_FMT, ZEND_ULONG_FMT and ZEND_XLONG_FMT macros defined in - php-src/Zend/zend_long.h - - The 'v' format from the custom snprintf and spprintf implementations has - been removed. Use the standard 's' format instead. - - l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR. - Actually, all assignments (ZEND_ASSIGN, ZEND_ASSIGN_DIM, ZEND_ASSIGN_OBJ, - ZEND_ASSIGN_STATIC_PROP), all compound assignments (ZEND_ASSIGN_OP, - ZEND_ASSIGN_DIM_OP, ZEND_ASSIGN_OBJ_OP, ZEND_ASSIGN_STATIC_PROP_OP) and all - pre increments/decrements (ZEND_PRE_INC, ZEND_PRE_DEC, ZEND_PRE_INC_OBJ - ZEND_PRE_DEC_OBJ, ZEND_PRE_INC_STATIC_PROP ZEND_PRE_DEC_STATIC_PROP). - - m. All internal functions and methods are now required to specify arginfo - information, otherwise warnings will be thrown on startup. - - n. The zend_hash_sort and zend_hash_minmax APIs now accept a comparison - function with the following signature: - - typedef int (*bucket_compare_func_t)(Bucket *a, Bucket *b); - - Previously compare_func_t was used, which accepted void pointers. - Furthermore, the return type of zend_hash_sort and zend_ts_hash_sort has - been changed from int to void; these functions always succeed. - - o. The cast_object() handler is now required, i.e. must be non-null. You can - indicate that casting is not supported by always returning FAILURE. - - p. The ARG_COUNT() macro has been removed use ZEND_NUM_ARGS() instead. - - q. GC_COLLECTABLE flag was inverted into GC_NOT_COLLECTABLE. - Assignments to GC_TYPE_INFO() might need to be changed to properly - set the value of the GC_NOT_COLLECTABLE flag. - - r. Just for for userland classes, it is no longer allowed to implement only - the Traversable interface. Instead, it is necessary to implement either - Iterator or IteratorAggregate. You can do the latter by implementing - zend_ce_aggregate and providing the following method implementation: - - ZEND_METHOD(MyClass, getIterator) { - ZEND_PARSE_PARAMETERS_NONE(); - zend_create_internal_iterator_zval(return_value, ZEND_THIS); - } - - s. The zend_fcall_info no_separation flag has been removed, and separation is - never allowed. If you wish to pass (or allow passing) arguments by - reference, explicitly create those arguments as references using - ZEND_MAKE_REF. This removal also affects call_user_function_ex(), which - should be replaced by call_user_function(). - - t. The following ZEND_API function have changed signature: - 1. Void in Zend Engine 4.0: - - add_assoc_*() - - add_index_*() - - add_property_*() - - object_init() - - zend_declare_class_constant*() - - zend_declare_property*() - - zend_startup_modules() - - zend_wrong_parameters_none_error() - - zend_fcall_info_argp() - - zend_fcall_info_argv() - - zend_fcall_info_argn() - - zend_startup() - - zend_set_memory_limit() - - pass_two() - - zend_startup_constants() - - zend_shutdown_constants() - - zend_startup_extensions_mechanism() - - zend_startup_extensions() - - zend_register_extension() - - highlight_string() - - zend_ini_startup() - - zend_ini_shutdown() - - zend_ini_global_shutdown() - - zend_ini_deactivate() - - zend_copy_ini_directives() - - zend_prepare_string_for_scanning() - - zend_init_rsrc_list() - - zend_list_close() - - zend_signal() - - zend_sigaction() - - zend_stack_init() - - zend_stack_del_top() - - zend_stack_destroy() - 2. Argument int to uint32_t in Zend Engine 4.0: - - _zend_get_parameters_array_ex() - - zend_copy_parameters_array() - - zend_fcall_info_args_save() - - zend_fcall_info_args_restore() - - zend_fcall_info_argp() - - zend_fcall_info_argv() - - zend_fcall_info_argn() - - zend_wrong_parameter*() - - zend_wrong_callback_error() - - zend_parse_arg_class() - 3. Argument int to bool in Zend Engine 4.0: - - add_next_index_bool() - - zend_register_class_alias_ex() - - add_assoc_bool_ex() - - add_index_bool() - - zend_fcall_info_args_clear() - - zend_set_local_var() - - zend_set_local_var_str() - - zend_parse_arg_*() - - shutdown_memory_manager() - - zend_memory_usage() - - zend_memory_peak_usage() - - zend_mm_shutdown() - - zend_eval_string*() - - zend_set_timeout() - - _zend_hash_append_ex() - - _zend_hash_append_ptr_ex() - - zend_alter_ini_entry_ex() - - (*zend_encoding_list_parser) typedef - - zend_multibyte_parse_encoding_list() - - zend_safe_address() - - zend_string_tolower_ex() - - zend_string_alloc() - - zend_string_safe_alloc() - - zend_string_init() - - zend_string_dup() - - zend_string_realloc() - - zend_string_extend() - - zend_string_truncate() - - zend_string_safe_realloc() - - zend_string_release_ex() - - zend_ts_hash_merge() - - zend_ts_hash_sort() - 4. Argument int to size_t in Zend Engine 4.0: - - zend_set_hash_symbol() - 5. Argument zval* to zend_object* in Zend Engine 4.0: - - zend_read_property() - - zend_update_property() - - zend_unset_property() - - zend_call_method() - - zend_objects_clone_obj() - - zend_get_closure_method_def() - - zend_throw_exception_hook() - - zend_throw_exception_internal() - - zend_get_exception_base() - 6. Argument zval* to zend_long in Zend Engine 4.0: - - _php_math_longtobase() - 7. Return type from int to zend_result in Zend Engine 4.0: - - (*stream_open_function) in _zend_utility_functions - - (*zend_post_startup_cb) - - (*zend_preload_autoload) - - zend_execute_scripts() - - zend_post_startup() - - _zend_get_parameters_array_ex() - - zend_copy_parameters_array() - - zend_parse_parameters() - - zend_parse_parameters_ex() - - zend_parse_method_parameters() - - zend_parse_method_parameters_ex() - - zend_parse_method_parameters() - - zend_register_functions() - - zend_startup_module() - - zend_startup_module_ex() - - zend_register_class_alias_ex() - - zend_disable_function() - - zend_disable_class() - - zend_update_class_constants() - - zend_update_static_property*() - - object_init_ex() - - object_and_properties_init() - - add_index_zval() - - add_next_index_long_*() - - array_set_zval_key() - - _call_user_function_impl() - - zend_fcall_info_*() - - zend_call_function() - - zend_set_hash_symbol() - - zend_delete_global_variable() - - zend_set_local_var() - - zend_set_local_var_str() - - zend_forbid_dynamic_call() - - zend_get_default_from_internal_arg_info() - - zend_try_assign_typed_ref*() - - zend_ast_evaluate() - - zend_startup_builtin_functions() - - do_bind_function() - - do_bind_class() - - zend_unmangle_property_name_ex() - - zend_register_auto_global() - - zend_register_constant() - - zend_exception_error() - - zend_eval_string*() - - zend_undefined_offset_write() - - zend_undefined_index_write() - - zval_update_constant(_ex)() - - zend_load_extension() - - zend_load_extension_handle() - - zend_hash_del(_ind)() - - zend_hash_str_del(_ind)() - - zend_hash_index_del() - - zend_hash_move_forward_ex() - - zend_hash_move_backward_ex() - - zend_hash_get_current_key_ex() - - zend_hash_get_current_key_type_ex() - - zend_symtable_del(_ind)() - - zend_symtable_str_del(_ind)() - - highlight_file() - - zend_do_link_class() - - zend_alter_ini_entry*() - - zend_restore_ini_entry() - - zend_ini_register_displayer() - - zend_ini_open_file_for_scanning() - - zend_ini_prepare_string_for_scanning() - - zend_user_it_valid() - - zend_create_internal_iterator_zval() - - zend_multibyte_set_filter() - - zend_lex_tstring() - - _zend_module_entry module_startup_func, module_shutdown_func, - request_startup_func, request_shutdown_func, and post_deactivate_func function pointers - - (*zend_encoding_list_parser) typedef - - (*zend_encoding_internal_encoding_setter) typedef - - zend_multibyte_set_functions() - - zend_multibyte_set_script_encoding_by_string() - - add_function() - - sub_function() - - mul_function() - - pow_function() - - div_function() - - mod_function() - - boolean_xor_function() - - boolean_not_function() - - bitwise_not_function() - - bitwise_or_function() - - bitwise_and_function() - - bitwise_xor_function() - - shift_left_function() - - shift_right_function() - - concat_function() - - is_equal_function( - - is_identical_function() - - is_not_identical_function() - - is_not_equal_function() - - is_smaller_function() - - is_smaller_or_equal_function(zv - - increment_function() - - decrement_function() - - zend_stream_open() - - zend_stream_fixup() - - zend_ts_hash_del() - - zend_ts_hash_index_del() - 8. Return type from int to bool in Zend Engine 4.0: - - zend_make_printable_zval() - - zend_parse_arg_*() - - is_zend_mm() - - is_zend_ptr() - - zend_mm_is_custom_heap() - - (*zend_mm_chunk_truncate_t) - - (*zend_mm_chunk_extend_t) - - zend_bitset_empty() - - zend_is_smart_branch() - - zend_check_arg_send_type() - - zend_verify_const_access() - - zend_gdb_register_code() - - zend_gdb_present() - - _zend_handle_numeric_str(_ex)() - - zend_hash_exists_ind() - - zend_hash_str_exists_ind() - - zend_symtable_exists(_ind)() - - zend_symtable_str_exists() - - (*zend_encoding_lexer_compatibility_checker) - - zend_object_is_true() - - i_zend_is_true() - - zendi_smart_streq() - - zend_stack_is_empty() - - zend_ts_hash_exists() - - zend_ts_hash_index_exists() - 9. Argument void to const char* in Zend Engine 4.0: - - zend_get_op_array_extension_handle() - 10. Argument zend_extension to const char* in Zend Engine 4.0: - - zend_get_resource_handle() - 11. Argument const char * to HMODULE in Zend Engine 4.0: - - php_win32_image_compatible() - 12. const char * argument dropped in Zend Engine 4.0: - - php_win32_crt_compatible() - - u. Instead of overwriting zend_error_cb extensions with debugging, monitoring - use-cases catching Errors/Exceptions are strongly encouraged to use - the new error observer API instead. - - Error observering callbacks are guaranteed to be called regardless of - the users error_reporting setting or userland error handler return values. - - Register observer callbacks during MINIT of an extension: - - void my_error_observer_cb(int type, - const char *error_filename, - uint32_t error_lineno, - zend_string *message) { - } - zend_observer_error_register(my_error_observer_cb); - - v. The following APIs have been removed from the Zend Engine: - - zend_ts_hash_init_ex(), drop the last argument and use zend_ts_hash_init() instead - - zend_hash_init_ex(), drop the last argument and use zend_hash_init() instead - - zval_internal_dtor(), use zval_internal_ptr_dtor() instead - - zval_dtor_func(), use rc_dtor_func() instead - - zval_ptr_dtor_wrapper(), use zval_ptr_dtor() instead - - zval_internal_ptr_dtor_wrapper(), use zval_internal_ptr_dtor() instead - - w. The following APIs have been renamed: - - _zend_ts_hash_init() to zend_ts_hash_init() - - x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be - generated at the start of a function. Use the new observer APIs or hook - into zend_execute_ex instead. - ======================== 2. Build system changes ======================== - a. Abstract - 1. Symbol HAVE_HASH_EXT is removed and is no longer defined. It should be - considered to have hash extension always available since PHP 7.4. - - 2. Symbol HAVE_PCRE is removed and is no longer defined. It should be - considered to have pcre extension always available since PHP 7.4. - - 3. Symbol HAVE_LOCALE_H has been removed and is no longer defined. - - 4. --disable-inline-optimization (which actually disabled all compiler - optimizations) has been removed. If you wish to build PHP on a host - with extremely constrained memory, and compilation fails with an "out - of memory" message, add "-O0" to CFLAGS. - - 5. build system and provider are displayed in phpinfo from environment: - - PHP_BUILD_SYSTEM (default is same as PHP_UNAME) - - PHP_BUILD_PROVIDER (no default) - - b. Unix build system changes - - 1. --enable-maintainer-zts is renamed --enable-zts for parity with Windows - and as recognition that ZTS is not a "maintainer" or experimental - feature. - - 2. The PHP_CHECK_GCC_ARG() m4 macro has been removed in favor of - AX_CHECK_COMPILE_FLAG(). - - 3. The 6th argument of PHP_ADD_SOURCES_X has been removed. - - 4. The 'special-flags' (3rd) argument of PHP_ADD_SOURCES_X are - now appended instead of prepended to previous compiler flags. - This means compiler flags passed to PHP_NEW_EXTENSION and PHP_ADD_SOURCES - are now appended, this allows to disable compiler flags set by Zend/Zend.m4 - (e.g. disable certain compiler flags enabled by -Wextra) - - c. Windows build system changes - - - The configuration option --enable-crt-debug has been removed. The VC - debug heap can now be enabled for debug builds by setting the environment - variable PHP_WIN32_DEBUG_HEAP to a non-negative number before PHP process - startup. - ======================== 3. Module changes ======================== - diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 3fdba96c97e70..0a9170709d85b 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -163,16 +163,16 @@ int main() double d = (double) LONG_MIN * LONG_MIN + 2e9; if ((long) d == 2e9 && (long) -d == -2e9) { - exit(0); + return 0; } } else if (sizeof(long) == 8) { double correct = 18e18 - ((double) LONG_MIN * -2); /* Subtract ULONG_MAX + 1 */ if ((long) 18e18 == correct) { /* On 64-bit, only check between LONG_MAX and ULONG_MAX */ - exit(0); + return 0; } } - exit(1); + return 1; } ]])], [ AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits]) @@ -215,6 +215,10 @@ fi test -n "$GCC" && CFLAGS="-Wall -Wextra -Wno-strict-aliasing -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-sign-compare $CFLAGS" dnl Check if compiler supports -Wno-clobbered (only GCC) AX_CHECK_COMPILE_FLAG([-Wno-clobbered], CFLAGS="-Wno-clobbered $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wduplicated-cond], CFLAGS="-Wduplicated-cond $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wlogical-op], CFLAGS="-Wlogical-op $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wformat-truncation], CFLAGS="-Wformat-truncation $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-fno-common], CFLAGS="-fno-common $CFLAGS", , [-Werror]) test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS" @@ -268,7 +272,7 @@ int main() fprintf(fp, "%d %d\n", ZEND_MM_ALIGNMENT, zeros); fclose(fp); - exit(0); + return 0; } ]])], [ LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1` diff --git a/Zend/tests/arginfo_zpp_mismatch.inc b/Zend/tests/arginfo_zpp_mismatch.inc new file mode 100644 index 0000000000000..2207d76db4f44 --- /dev/null +++ b/Zend/tests/arginfo_zpp_mismatch.inc @@ -0,0 +1,39 @@ + --FILE-- +===DONE=== --EXPECT-- -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL +===DONE=== diff --git a/Zend/tests/arginfo_zpp_mismatch_strict.phpt b/Zend/tests/arginfo_zpp_mismatch_strict.phpt new file mode 100644 index 0000000000000..8e77af9fb4d01 --- /dev/null +++ b/Zend/tests/arginfo_zpp_mismatch_strict.phpt @@ -0,0 +1,85 @@ +--TEST-- +Test that there is no arginfo/zpp mismatch in strict mode +--SKIPIF-- + +--FILE-- +newInstanceWithoutConstructor(); + } catch (Throwable) { + continue; + } + + foreach (get_class_methods($class) as $method) { + test([$obj, $method]); + } +} + +// var_dump() and debug_zval_dump() print all arguments +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/array_add_indirect.phpt b/Zend/tests/array_add_indirect.phpt new file mode 100644 index 0000000000000..821cc475b94db --- /dev/null +++ b/Zend/tests/array_add_indirect.phpt @@ -0,0 +1,16 @@ +--TEST-- +Array addition should not add INDIRECT elements +--FILE-- + 1]; +$ary += $GLOBALS; +var_dump($ary['x']); +$x = 2; +var_dump($ary['x']); + +?> +--EXPECT-- +int(1) +int(1) diff --git a/Zend/tests/array_self_add_globals.phpt b/Zend/tests/array_self_add_globals.phpt new file mode 100644 index 0000000000000..ebad7c3fdf198 --- /dev/null +++ b/Zend/tests/array_self_add_globals.phpt @@ -0,0 +1,10 @@ +--TEST-- +Add $GLOBALS to itself +--FILE-- + +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/bug69871.phpt b/Zend/tests/bug69871.phpt index 705d12e4887c9..937cee796aca2 100644 --- a/Zend/tests/bug69871.phpt +++ b/Zend/tests/bug69871.phpt @@ -1,7 +1,5 @@ --TEST-- Bug #69871 (Short-circuiting failure with smart_branch) ---INI-- -opcache.enable=0 --FILE-- +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/bug80126.phpt b/Zend/tests/bug80126.phpt new file mode 100644 index 0000000000000..3087a40629ab2 --- /dev/null +++ b/Zend/tests/bug80126.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #80126: Covariant return types failing compilation +--FILE-- + +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/bug80126_2.phpt b/Zend/tests/bug80126_2.phpt new file mode 100644 index 0000000000000..707d1b5a45733 --- /dev/null +++ b/Zend/tests/bug80126_2.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #80126: Covariant return types failing compilation (variation 2) +--FILE-- + +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/bug80184.phpt b/Zend/tests/bug80184.phpt new file mode 100644 index 0000000000000..1d12799f0c51b --- /dev/null +++ b/Zend/tests/bug80184.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #80184: Complex expression in while / if statements resolves to false incorrectly +--FILE-- + +--EXPECT-- +First item! +Second item! +Third item! +Fourth item! diff --git a/Zend/tests/bug80194.phpt b/Zend/tests/bug80194.phpt new file mode 100644 index 0000000000000..9a5cdcd718c21 --- /dev/null +++ b/Zend/tests/bug80194.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #80194: Assertion failure during block assembly of unreachable free with leading nop +--FILE-- +y) { + default: + throw new Exception; + case 'foobar': + return new stdClass(); + break; + } +} + +$x = (object)['y' => 'foobar']; +var_dump(test($x)); + +?> +--EXPECT-- +object(stdClass)#2 (0) { +} diff --git a/Zend/tests/bug80255.phpt b/Zend/tests/bug80255.phpt new file mode 100644 index 0000000000000..d3fc6b7abe29e --- /dev/null +++ b/Zend/tests/bug80255.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #80255: Opcache bug (bad condition result) in 8.0.0rc1 +--FILE-- + +--EXPECT-- +foo +bar +baz diff --git a/Zend/tests/dead_array_type_inference.phpt b/Zend/tests/dead_array_type_inference.phpt new file mode 100644 index 0000000000000..f0f9d51ee2d45 --- /dev/null +++ b/Zend/tests/dead_array_type_inference.phpt @@ -0,0 +1,18 @@ +--TEST-- +Make sure type inference upholds invariants for dead arrays +--FILE-- + +--EXPECTF-- +Warning: Undefined variable $a in %s on line %d + +Warning: foreach() argument must be of type array|object, null given in %s on line %d diff --git a/Zend/tests/dim_assign_001.phpt b/Zend/tests/dim_assign_001.phpt new file mode 100644 index 0000000000000..ca0654a4c0c05 --- /dev/null +++ b/Zend/tests/dim_assign_001.phpt @@ -0,0 +1,24 @@ +--TEST-- +JIT - Assigning to arrays using string key which parses to an integer +--FILE-- + +--EXPECT-- +string(56) "Values can be stored correctly using numeric string keys" diff --git a/Zend/tests/dim_assign_001.txt b/Zend/tests/dim_assign_001.txt new file mode 100644 index 0000000000000..f14f5c0cbe174 --- /dev/null +++ b/Zend/tests/dim_assign_001.txt @@ -0,0 +1,2 @@ +0x30 +0x31 diff --git a/Zend/tests/generators/backtrace_multi_yield_from.phpt b/Zend/tests/generators/backtrace_multi_yield_from.phpt new file mode 100644 index 0000000000000..6627fe8458a42 --- /dev/null +++ b/Zend/tests/generators/backtrace_multi_yield_from.phpt @@ -0,0 +1,32 @@ +--TEST-- +Generator backtrace with multi yield from +--FILE-- +current()); +$gen2->next(); +var_dump($gen2->current()); +$gen2->next(); +var_dump($gen2->current()); + +?> +--EXPECTF-- +int(1) +int(1) +#0 gen() called at [%s:10] +#1 from(Generator Object ()) +#2 Generator->next() called at [%s:19] +int(2) diff --git a/Zend/tests/generators/bug80240.phpt b/Zend/tests/generators/bug80240.phpt new file mode 100644 index 0000000000000..43cf3a94b554a --- /dev/null +++ b/Zend/tests/generators/bug80240.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #80240: Use after free multi yield from +--FILE-- +rewind(); +$b->rewind(); +$a->next(); +unset($gen); +unset($a); +unset($b); + +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/generators/dynamic_properties.phpt b/Zend/tests/generators/dynamic_properties.phpt index d42eed914abb0..08ceb7f581c69 100644 --- a/Zend/tests/generators/dynamic_properties.phpt +++ b/Zend/tests/generators/dynamic_properties.phpt @@ -9,7 +9,7 @@ function gen() { $gen = gen(); try { - $gen->prop = 42; + $gen->prop = new stdClass; } catch (Error $e) { echo $e->getMessage(), "\n"; } diff --git a/Zend/tests/generators/yield_from_chain_dtor_order.phpt b/Zend/tests/generators/yield_from_chain_dtor_order.phpt new file mode 100644 index 0000000000000..9c336b3475889 --- /dev/null +++ b/Zend/tests/generators/yield_from_chain_dtor_order.phpt @@ -0,0 +1,24 @@ +--TEST-- +Leaf link may need to be invalidated depending on dtor order +--FILE-- +current()); +$copy = $bar; +unset($gen); + +?> +--EXPECT-- +int(1) diff --git a/Zend/tests/method_static_var.phpt b/Zend/tests/method_static_var.phpt index b419647517d12..06574732d7560 100644 --- a/Zend/tests/method_static_var.phpt +++ b/Zend/tests/method_static_var.phpt @@ -1,31 +1,26 @@ --TEST-- Initial value of static var in method depends on the include time of the class definition ---XFAIL-- -Maybe not a bug --FILE-- --EXPECT-- int(1) int(2) -int(1) int(2) +int(3) diff --git a/Zend/tests/multibyte/multibyte_encoding_001.phpt b/Zend/tests/multibyte/multibyte_encoding_001.phpt index 3b26dcb9895ab..f95b4311a95b9 100644 --- a/Zend/tests/multibyte/multibyte_encoding_001.phpt +++ b/Zend/tests/multibyte/multibyte_encoding_001.phpt @@ -13,7 +13,7 @@ internal_encoding=SJIS --EXPECT-- 95:5c diff --git a/Zend/tests/multibyte/multibyte_encoding_003.phpt b/Zend/tests/multibyte/multibyte_encoding_003.phpt index a0983329f410f..f0fb60f6cdd41 100644 Binary files a/Zend/tests/multibyte/multibyte_encoding_003.phpt and b/Zend/tests/multibyte/multibyte_encoding_003.phpt differ diff --git a/Zend/tests/named_params/assert.phpt b/Zend/tests/named_params/assert.phpt new file mode 100644 index 0000000000000..40a92a2f1fecf --- /dev/null +++ b/Zend/tests/named_params/assert.phpt @@ -0,0 +1,30 @@ +--TEST-- +Calling assert with named params +--FILE-- +getMessage(), "\n"; +} + +assert(assertion: true, description: "Description"); +try { + assert(assertion: false, description: "Description"); +} catch (AssertionError $e) { + echo $e->getMessage(), "\n"; +} + +try { + assert(description: "Description"); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +assert(assertion: false) +Description +Named parameter $description overwrites previous argument diff --git a/Zend/tests/named_params/ctor_extra_named_args.phpt b/Zend/tests/named_params/ctor_extra_named_args.phpt new file mode 100644 index 0000000000000..ae569ea65d397 --- /dev/null +++ b/Zend/tests/named_params/ctor_extra_named_args.phpt @@ -0,0 +1,23 @@ +--TEST-- +Passing unknown named args to a non-existing ctor +--FILE-- +getMessage(), "\n"; +} + +try { + new Test(x: "nope"); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +Unknown named parameter $x +Unknown named parameter $x diff --git a/Zend/tests/namespace_first_stmt_nop.phpt b/Zend/tests/namespace_first_stmt_nop.phpt new file mode 100644 index 0000000000000..8f26fdc85932e --- /dev/null +++ b/Zend/tests/namespace_first_stmt_nop.phpt @@ -0,0 +1,10 @@ +--TEST-- +Nop statement before namespace +--FILE-- + +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/tests/nullable_types/union_nullable_property_fails.phpt b/Zend/tests/nullable_types/union_nullable_property_fails.phpt new file mode 100644 index 0000000000000..809f7d3032e40 --- /dev/null +++ b/Zend/tests/nullable_types/union_nullable_property_fails.phpt @@ -0,0 +1,15 @@ +--TEST-- +Nullable default property error message +--FILE-- +b; + +?> +--EXPECTF-- +Fatal error: Default value for property of type string|int may not be null. Use the nullable type string|int|null to allow null default value in %s on line %d diff --git a/Zend/tests/output_started_at_eval.phpt b/Zend/tests/output_started_at_eval.phpt new file mode 100644 index 0000000000000..4bb331c76f160 --- /dev/null +++ b/Zend/tests/output_started_at_eval.phpt @@ -0,0 +1,11 @@ +--TEST-- +Output start at eval() +--FILE-- + +--EXPECTF-- +Foo + +Warning: Cannot modify header information - headers already sent by (output started at %s(2) : eval()'d code:1) in %s on line %d diff --git a/Zend/tests/return_types/029.phpt b/Zend/tests/return_types/029.phpt index 1d17b5d770ec4..c6fb4432158c4 100644 --- a/Zend/tests/return_types/029.phpt +++ b/Zend/tests/return_types/029.phpt @@ -1,7 +1,5 @@ --TEST-- return type with finally ---INI-- -opcache.enable=0 --FILE-- +--EXPECTF-- +Fatal error: Uncaught ErrorException: Undefined variable $test in %s:%d +Stack trace: +#0 %s(%d): {closure}(2, 'Undefined varia...', '%s', 8) +#1 %s(%d): test() +#2 {main} + thrown in %s on line %d diff --git a/Zend/zend.h b/Zend/zend.h index c10fadd0d014c..f5d352cfe404a 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.0.0-dev" +#define ZEND_VERSION "4.1.0-dev" #define ZEND_ENGINE_3 diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 0b6808b678836..301b0400041e5 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -1311,6 +1311,7 @@ ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char * } while (0) #define ZEND_PARSE_PARAMETERS_END_EX(failure) \ + ZEND_ASSERT(_i == _max_num_args || _max_num_args == (uint32_t) -1); \ } while (0); \ if (UNEXPECTED(_error_code != ZPP_ERROR_OK)) { \ if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7debd55accf3b..dbb21944371f4 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1082,7 +1082,12 @@ ZEND_API zend_result do_bind_function(zval *lcname) /* {{{ */ return FAILURE; } function = (zend_function*)Z_PTR_P(zv); - zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname)); + if (UNEXPECTED(function->common.fn_flags & ZEND_ACC_PRELOADED) + && !(CG(compiler_options) & ZEND_COMPILE_PRELOAD)) { + zv = zend_hash_add(EG(function_table), Z_STR_P(lcname), zv); + } else { + zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname)); + } if (UNEXPECTED(!zv)) { do_bind_function_error(Z_STR_P(lcname), &function->op_array, 0); return FAILURE; @@ -3939,13 +3944,18 @@ static void zend_compile_assert(znode *result, zend_ast_list *args, zend_string } opline->result.num = zend_alloc_cache_slot(); - if (args->children == 1 && - (args->child[0]->kind != ZEND_AST_ZVAL || - Z_TYPE_P(zend_ast_get_zval(args->child[0])) != IS_STRING)) { + if (args->children == 1) { /* add "assert(condition) as assertion message */ - zend_ast_list_add((zend_ast*)args, - zend_ast_create_zval_from_str( - zend_ast_export("assert(", args->child[0], ")"))); + zend_ast *arg = zend_ast_create_zval_from_str( + zend_ast_export("assert(", args->child[0], ")")); + if (args->child[0]->kind == ZEND_AST_NAMED_ARG) { + /* If the original argument was named, add the new argument as named as well, + * as mixing named and positional is not allowed. */ + zend_ast *name = zend_ast_create_zval_from_str( + zend_string_init("description", sizeof("description") - 1, 0)); + arg = zend_ast_create(ZEND_AST_NAMED_ARG, name, arg); + } + zend_ast_list_add((zend_ast *) args, arg); } zend_compile_call_common(result, (zend_ast*)args, fbc); @@ -5865,7 +5875,7 @@ zend_bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ /* }}} */ /* Check whether this is the first statement, not counting declares. */ -static zend_result zend_is_first_statement(zend_ast *ast) /* {{{ */ +static zend_result zend_is_first_statement(zend_ast *ast, zend_bool allow_nop) /* {{{ */ { uint32_t i = 0; zend_ast_list *file_ast = zend_ast_get_list(CG(ast)); @@ -5874,8 +5884,9 @@ static zend_result zend_is_first_statement(zend_ast *ast) /* {{{ */ if (file_ast->child[i] == ast) { return SUCCESS; } else if (file_ast->child[i] == NULL) { - /* Empty statements count as statements. */ - return FAILURE; + if (!allow_nop) { + return FAILURE; + } } else if (file_ast->child[i]->kind != ZEND_AST_DECLARE) { return FAILURE; } @@ -5909,14 +5920,14 @@ void zend_compile_declare(zend_ast *ast) /* {{{ */ zval_ptr_dtor_nogc(&value_zv); } else if (zend_string_equals_literal_ci(name, "encoding")) { - if (FAILURE == zend_is_first_statement(ast)) { + if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { zend_error_noreturn(E_COMPILE_ERROR, "Encoding declaration pragma must be " "the very first statement in the script"); } } else if (zend_string_equals_literal_ci(name, "strict_types")) { zval value_zv; - if (FAILURE == zend_is_first_statement(ast)) { + if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { zend_error_noreturn(E_COMPILE_ERROR, "strict_types declaration must be " "the very first statement in the script"); } @@ -7037,10 +7048,13 @@ void zend_compile_prop_decl(zend_ast *ast, zend_ast *type_ast, uint32_t flags, z && !zend_is_valid_default_value(type, &value_zv)) { zend_string *str = zend_type_to_string(type); if (Z_TYPE(value_zv) == IS_NULL) { + ZEND_TYPE_FULL_MASK(type) |= MAY_BE_NULL; + zend_string *nullable_str = zend_type_to_string(type); + zend_error_noreturn(E_COMPILE_ERROR, "Default value for property of type %s may not be null. " - "Use the nullable type ?%s to allow null default value", - ZSTR_VAL(str), ZSTR_VAL(str)); + "Use the nullable type %s to allow null default value", + ZSTR_VAL(str), ZSTR_VAL(nullable_str)); } else { zend_error_noreturn(E_COMPILE_ERROR, "Cannot use %s as default value for property %s::$%s of type %s", @@ -7377,7 +7391,7 @@ void zend_compile_class_decl(znode *result, zend_ast *ast, zend_bool toplevel) / if (toplevel /* We currently don't early-bind classes that implement interfaces or use traits */ && !ce->num_interfaces && !ce->num_traits - && !(CG(compiler_options) & ZEND_COMPILE_PRELOAD)) { + && !(CG(compiler_options) & ZEND_COMPILE_WITHOUT_EXECUTION)) { if (extends_ast) { zend_class_entry *parent_ce = zend_lookup_class_ex( ce->parent_name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD); @@ -7669,7 +7683,7 @@ void zend_compile_namespace(zend_ast *ast) /* {{{ */ zend_bool is_first_namespace = (!with_bracket && !FC(current_namespace)) || (with_bracket && !FC(has_bracketed_namespaces)); - if (is_first_namespace && FAILURE == zend_is_first_statement(ast)) { + if (is_first_namespace && FAILURE == zend_is_first_statement(ast, /* allow_nop */ 1)) { zend_error_noreturn(E_COMPILE_ERROR, "Namespace declaration statement has to be " "the very first statement or after any declare call in the script"); } diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index f037f0399a11e..b52b1ab113ecb 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -144,6 +144,13 @@ void zend_exception_restore(void) /* {{{ */ } /* }}} */ +static zend_always_inline zend_bool is_handle_exception_set() { + zend_execute_data *execute_data = EG(current_execute_data); + return !execute_data->func + || !ZEND_USER_CODE(execute_data->func->common.type) + || execute_data->opline->opcode == ZEND_HANDLE_EXCEPTION; +} + ZEND_API ZEND_COLD void zend_throw_exception_internal(zend_object *exception) /* {{{ */ { #ifdef HAVE_DTRACE @@ -161,6 +168,7 @@ ZEND_API ZEND_COLD void zend_throw_exception_internal(zend_object *exception) /* zend_exception_set_previous(exception, EG(exception)); EG(exception) = exception; if (previous) { + ZEND_ASSERT(is_handle_exception_set() && "HANDLE_EXCEPTION not set?"); return; } } @@ -179,9 +187,7 @@ ZEND_API ZEND_COLD void zend_throw_exception_internal(zend_object *exception) /* zend_throw_exception_hook(exception); } - if (!EG(current_execute_data)->func || - !ZEND_USER_CODE(EG(current_execute_data)->func->common.type) || - EG(current_execute_data)->opline->opcode == ZEND_HANDLE_EXCEPTION) { + if (is_handle_exception_set()) { /* no need to rethrow the exception */ return; } diff --git a/Zend/zend_exceptions.stub.php b/Zend/zend_exceptions.stub.php index f22fb3eae5497..11c1d500d3075 100644 --- a/Zend/zend_exceptions.stub.php +++ b/Zend/zend_exceptions.stub.php @@ -22,10 +22,11 @@ public function getTraceAsString(): string; class Exception implements Throwable { - final private function __clone() {} + final private function __clone(): void {} public function __construct(string $message = "", int $code = 0, ?Throwable $previous = null) {} + /** @return void */ public function __wakeup() {} final public function getMessage(): string {} @@ -56,12 +57,15 @@ final public function getSeverity(): int {} class Error implements Throwable { /** @implementation-alias Exception::__clone */ - final private function __clone() {} + final private function __clone(): void {} /** @implementation-alias Exception::__construct */ public function __construct(string $message = "", int $code = 0, ?Throwable $previous = null) {} - /** @implementation-alias Exception::__wakeup */ + /** + * @return void + * @implementation-alias Exception::__wakeup + */ public function __wakeup() {} /** @implementation-alias Exception::getMessage */ diff --git a/Zend/zend_exceptions_arginfo.h b/Zend/zend_exceptions_arginfo.h index e8ea0a59a8a05..5b8dab9b4d36a 100644 --- a/Zend/zend_exceptions_arginfo.h +++ b/Zend/zend_exceptions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: bc49b326136997660887b12f0c59f8a57b17ecaf */ + * Stub hash: 3699b51b31e509c11435845c7e0d35a2608dd268 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Throwable_getMessage, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -20,7 +20,8 @@ ZEND_END_ARG_INFO() #define arginfo_class_Throwable_getTraceAsString arginfo_class_Throwable_getMessage -#define arginfo_class_Exception___clone arginfo_class_Throwable_getCode +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Exception___clone, 0, 0, IS_VOID, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Exception___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message, IS_STRING, 0, "\"\"") @@ -57,7 +58,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ErrorException_getSeverity arginfo_class_Throwable_getLine -#define arginfo_class_Error___clone arginfo_class_Throwable_getCode +#define arginfo_class_Error___clone arginfo_class_Exception___clone #define arginfo_class_Error___construct arginfo_class_Exception___construct diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index ab231f952f0ca..c58e1fa228e17 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -130,13 +130,12 @@ static ZEND_FUNCTION(pass) } ZEND_BEGIN_ARG_INFO_EX(zend_pass_function_arg_info, 0, 0, 0) - ZEND_ARG_VARIADIC_INFO(0, args) ZEND_END_ARG_INFO() ZEND_API const zend_internal_function zend_pass_function = { ZEND_INTERNAL_FUNCTION, /* type */ {0, 0, 0}, /* arg_flags */ - ZEND_ACC_VARIADIC, /* fn_flags */ + 0, /* fn_flags */ NULL, /* name */ NULL, /* scope */ NULL, /* prototype */ @@ -1097,6 +1096,11 @@ static zend_never_inline ZEND_ATTRIBUTE_UNUSED bool zend_verify_internal_arg_typ * trust that arginfo matches what is enforced by zend_parse_parameters. */ static zend_always_inline zend_bool zend_internal_call_should_throw(zend_function *fbc, zend_execute_data *call) { + if (fbc->internal_function.handler == ZEND_FN(pass)) { + /* Be lenient about the special pass function. */ + return 0; + } + if (fbc->common.required_num_args > ZEND_CALL_NUM_ARGS(call)) { /* Required argument not passed. */ return 1; @@ -1549,7 +1553,7 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, if ((size_t)offset >= Z_STRLEN_P(str)) { /* Extend string if needed */ zend_long old_len = Z_STRLEN_P(str); - ZVAL_NEW_STR(str, zend_string_extend(Z_STR_P(str), offset + 1, 0)); + ZVAL_NEW_STR(str, zend_string_extend(Z_STR_P(str), (size_t)offset + 1, 0)); memset(Z_STRVAL_P(str) + old_len, ' ', offset - old_len); Z_STRVAL_P(str)[offset+1] = 0; } else if (!Z_REFCOUNTED_P(str)) { diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index ab96d43c4c351..62cee344526fd 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -155,8 +155,8 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval return variable_ptr; } -ZEND_API zend_result zval_update_constant(zval *pp); -ZEND_API zend_result zval_update_constant_ex(zval *pp, zend_class_entry *scope); +ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp); +ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope); /* dedicated Zend executor functions - do not use! */ struct _zend_vm_stack { diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 7572a0d8900c6..8fb85f0d2f280 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -610,7 +610,7 @@ ZEND_API zend_bool zend_is_executing(void) /* {{{ */ } /* }}} */ -ZEND_API zend_result zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ +ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ { if (Z_TYPE_P(p) == IS_CONSTANT_AST) { zend_ast *ast = Z_ASTVAL_P(p); @@ -638,7 +638,7 @@ ZEND_API zend_result zval_update_constant_ex(zval *p, zend_class_entry *scope) / } /* }}} */ -ZEND_API zend_result zval_update_constant(zval *pp) /* {{{ */ +ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp) /* {{{ */ { return zval_update_constant_ex(pp, EG(current_execute_data) ? zend_get_executed_scope() : CG(active_class_entry)); } @@ -807,8 +807,8 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_ zval *arg; uint32_t arg_num = ZEND_CALL_NUM_ARGS(call) + 1; zend_bool have_named_params = 0; - zend_bool must_wrap = 0; ZEND_HASH_FOREACH_STR_KEY_VAL(fci->named_params, name, arg) { + zend_bool must_wrap = 0; zval *target; if (name) { void *cache_slot[2] = {NULL, NULL}; diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 9f96d3b0fadba..3f330d2a2c406 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -44,7 +44,7 @@ You can use the following macro to check the extension API version for compatibi /* The first number is the engine version and the rest is the date (YYYYMMDD). * This way engine 2/3 API no. is always greater than engine 1 API no.. */ -#define ZEND_EXTENSION_API_NO 420200930 +#define ZEND_EXTENSION_API_NO 420201009 typedef struct _zend_extension_version_info { int zend_extension_api_no; diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index aa9602ff04471..bfc124719cc2d 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -177,7 +177,7 @@ #define GC_MAX_UNCOMPRESSED (512 * 1024) #define GC_MAX_BUF_SIZE 0x40000000 -#define GC_THRESHOLD_DEFAULT 10000 +#define GC_THRESHOLD_DEFAULT (10000 + GC_FIRST_ROOT) #define GC_THRESHOLD_STEP 10000 #define GC_THRESHOLD_MAX 1000000000 #define GC_THRESHOLD_TRIGGER 100 @@ -501,7 +501,7 @@ ZEND_API zend_bool gc_enable(zend_bool enable) GC_G(buf) = (gc_root_buffer*) pemalloc(sizeof(gc_root_buffer) * GC_DEFAULT_BUF_SIZE, 1); GC_G(buf)[0].ref = NULL; GC_G(buf_size) = GC_DEFAULT_BUF_SIZE; - GC_G(gc_threshold) = GC_THRESHOLD_DEFAULT + GC_FIRST_ROOT; + GC_G(gc_threshold) = GC_THRESHOLD_DEFAULT; gc_reset(); } return old_enabled; diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 177cf5c75d199..ff3b66a13d85e 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -161,51 +161,43 @@ ZEND_API void zend_generator_close(zend_generator *generator, zend_bool finished } /* }}} */ -static zend_generator *zend_generator_get_child(zend_generator_node *node, zend_generator *leaf); - -static void zend_generator_update_leaf_of_child(zend_generator_node *node, zend_generator *from_leaf, zend_generator *to_leaf) +static void zend_generator_remove_child(zend_generator_node *node, zend_generator *child) { ZEND_ASSERT(node->children >= 1); - if (node->ptr.leaf == from_leaf) { - node->ptr.leaf = to_leaf; - } if (node->children == 1) { - node->child.single.leaf = to_leaf; + node->child.single = NULL; } else { HashTable *ht = node->child.ht; - zend_generator *child = zend_hash_index_find_ptr(ht, (zend_ulong) from_leaf); - ZEND_ASSERT(child != NULL); - zend_hash_index_del(ht, (zend_ulong) from_leaf); - zend_hash_index_add_ptr(ht, (zend_ulong) to_leaf, child); - } -} - -static void zend_generator_remove_leaf_child(zend_generator_node *node, zend_generator *leaf, zend_generator *replace_leaf) { - if (node->children > 1) { - HashTable *ht = node->child.ht; - zend_ulong child_leaf; - zend_generator *child_generator; - zend_hash_index_del(ht, (zend_ulong) leaf); - if (--node->children == 1) { - ZEND_HASH_FOREACH_NUM_KEY_PTR(ht, child_leaf, child_generator) { - node->child.single.leaf = (zend_generator *) child_leaf; - node->child.single.child = child_generator; - if (node->ptr.leaf == leaf) { - node->ptr.leaf = (zend_generator *) child_leaf; - } + zend_hash_index_del(ht, (zend_ulong) child); + if (node->children == 2) { + zend_generator *other_child; + ZEND_HASH_FOREACH_PTR(ht, other_child) { + node->child.single = other_child; break; } ZEND_HASH_FOREACH_END(); zend_hash_destroy(ht); efree(ht); - } else if (node->ptr.leaf == leaf) { - ZEND_HASH_FOREACH_NUM_KEY_PTR(ht, child_leaf, child_generator) { - node->ptr.leaf = (zend_generator *) child_leaf; - break; - } ZEND_HASH_FOREACH_END(); } - } else if (node->ptr.leaf == leaf) { - ZEND_ASSERT(replace_leaf != leaf); - node->ptr.leaf = replace_leaf; + } + node->children--; +} + +static zend_always_inline zend_generator *clear_link_to_leaf(zend_generator *generator) { + ZEND_ASSERT(!generator->node.parent); + zend_generator *leaf = generator->node.ptr.leaf; + if (leaf) { + leaf->node.ptr.root = NULL; + generator->node.ptr.leaf = NULL; + return leaf; + } + return NULL; +} + +static zend_always_inline void clear_link_to_root(zend_generator *generator) { + ZEND_ASSERT(generator->node.parent); + if (generator->node.ptr.root) { + generator->node.ptr.root->node.ptr.leaf = NULL; + generator->node.ptr.root = NULL; } } @@ -222,48 +214,14 @@ static void zend_generator_dtor_storage(zend_object *object) /* {{{ */ ZVAL_UNDEF(&generator->values); } - if (UNEXPECTED(generator->node.children != 0) && generator->node.parent) { - /* we're called out of order - this must only happen during shutdown sequence: we call our (direct) child nodes destructors first, to clean it from the bottom up */ - while (generator->node.children != 0) { - zend_generator *child; - if (generator->node.children == 1) { - child = generator->node.child.single.child; - } else { - child = (zend_generator *) Z_PTR_P(zend_hash_get_current_data(generator->node.child.ht)); - } - GC_ADD_FLAGS(&child->std, IS_OBJ_DESTRUCTOR_CALLED); - GC_ADDREF(&child->std); /* must not be released during destructor */ - zend_generator_dtor_storage(&child->std); - OBJ_RELEASE(&child->std); - } - } - if (EXPECTED(generator->node.children == 0)) { - zend_generator_update_current(generator, generator); /* ensure we remove it from a *live* root */ - zend_generator *root = generator->node.ptr.root, *parent = generator->node.parent, *next, *toproot = root; - if (parent) { - zend_bool parent_becomes_leaf = parent->node.children == 1; - if (parent_becomes_leaf) { - while (UNEXPECTED(root != generator)) { - next = zend_generator_get_child(&root->node, generator); - zend_generator_update_leaf_of_child(&root->node, generator, parent); - root = next; - } - parent->node.ptr.root = toproot; - parent->node.children = 0; - } else { - zend_generator_remove_leaf_child(&parent->node, generator, NULL); - while (UNEXPECTED(root != parent)) { - next = zend_generator_get_child(&root->node, generator); - zend_generator_remove_leaf_child(&root->node, generator, parent->node.ptr.leaf); - OBJ_RELEASE(&root->std); - root = next; - } - } - OBJ_RELEASE(&parent->std); - /* Reset for resuming in finally */ - generator->node.parent = NULL; - generator->node.ptr.root = generator; - } + zend_generator *parent = generator->node.parent; + if (parent) { + zend_generator_remove_child(&parent->node, generator); + clear_link_to_root(generator); + generator->node.parent = NULL; + OBJ_RELEASE(&parent->std); + } else { + clear_link_to_leaf(generator); } if (EXPECTED(!ex) || EXPECTED(!(ex->func->op_array.fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK)) @@ -418,12 +376,8 @@ static HashTable *zend_generator_get_gc(zend_object *object, zval **table, int * } } - if (generator->node.children == 0) { - zend_generator *root = generator->node.ptr.root; - while (root != generator) { - zend_get_gc_buffer_add_obj(gc_buffer, &root->std); - root = zend_generator_get_child(&root->node, generator); - } + if (generator->node.parent) { + zend_get_gc_buffer_add_obj(gc_buffer, &generator->node.parent->std); } zend_get_gc_buffer_use(gc_buffer, table, n); @@ -451,7 +405,7 @@ static zend_object *zend_generator_create(zend_class_entry *class_type) /* {{{ * /* By default we have a tree of only one node */ generator->node.parent = NULL; generator->node.children = 0; - generator->node.ptr.root = generator; + generator->node.ptr.root = NULL; zend_object_std_init(&generator->std, class_type); generator->std.handlers = &zend_generator_handlers; @@ -473,14 +427,12 @@ ZEND_API zend_execute_data *zend_generator_check_placeholder_frame(zend_execute_ if (!ptr->func && Z_TYPE(ptr->This) == IS_OBJECT) { if (Z_OBJCE(ptr->This) == zend_ce_generator) { zend_generator *generator = (zend_generator *) Z_OBJ(ptr->This); - zend_generator *root = (generator->node.children < 1 ? generator : generator->node.ptr.leaf)->node.ptr.root; zend_execute_data *prev = ptr->prev_execute_data; - if (generator->node.parent != root) { - do { - generator->execute_data->prev_execute_data = prev; - prev = generator->execute_data; - generator = generator->node.parent; - } while (generator->node.parent != root); + ZEND_ASSERT(generator->node.parent && "Placeholder only used with delegation"); + while (generator->node.parent->node.parent) { + generator->execute_data->prev_execute_data = prev; + prev = generator->execute_data; + generator = generator->node.parent; } generator->execute_data->prev_execute_data = prev; ptr = generator->execute_data; @@ -512,203 +464,128 @@ static void zend_generator_throw_exception(zend_generator *generator, zval *exce EG(current_execute_data) = original_execute_data; } -static zend_generator *zend_generator_get_child(zend_generator_node *node, zend_generator *leaf) -{ - ZEND_ASSERT(node->children != 0); - if (node->children == 1) { - return node->child.single.child; - } else { - return zend_hash_index_find_ptr(node->child.ht, (zend_ulong) leaf); - } -} - -static zend_generator_node *zend_generator_search_multi_children_node(zend_generator_node *node) +static void zend_generator_add_child(zend_generator *generator, zend_generator *child) { - while (node->children == 1) { - node = &node->child.single.child->node; - } - return node->children > 1 ? node : NULL; -} + zend_generator_node *node = &generator->node; -static void zend_generator_add_single_child(zend_generator_node *node, zend_generator *child, zend_generator *leaf) -{ if (node->children == 0) { - node->child.single.leaf = leaf; - node->child.single.child = child; + node->child.single = child; } else { if (node->children == 1) { HashTable *ht = emalloc(sizeof(HashTable)); zend_hash_init(ht, 0, NULL, NULL, 0); - zend_hash_index_add_ptr(ht, - (zend_ulong) node->child.single.leaf, node->child.single.child); + zend_hash_index_add_new_ptr(ht, + (zend_ulong) node->child.single, node->child.single); node->child.ht = ht; } - if (zend_hash_index_add_ptr(node->child.ht, (zend_ulong) leaf, child) == NULL) { - ZEND_ASSERT(node->children > 1); - return; - } + zend_hash_index_add_new_ptr(node->child.ht, (zend_ulong) child, child); } ++node->children; } -static void zend_generator_merge_child_nodes(zend_generator_node *dest, zend_generator_node *src, zend_generator *child) +void zend_generator_yield_from(zend_generator *generator, zend_generator *from) { - zend_ulong leaf; - ZEND_ASSERT(src->children > 1); - ZEND_HASH_FOREACH_NUM_KEY(src->child.ht, leaf) { - zend_generator_add_single_child(dest, child, (zend_generator *) leaf); - } ZEND_HASH_FOREACH_END(); + ZEND_ASSERT(!generator->node.parent && "Already has parent?"); + zend_generator *leaf = clear_link_to_leaf(generator); + if (leaf && !from->node.parent && !from->node.ptr.leaf) { + from->node.ptr.leaf = leaf; + leaf->node.ptr.root = from; + } + generator->node.parent = from; + zend_generator_add_child(from, generator); + generator->flags |= ZEND_GENERATOR_DO_INIT; } -/* Pay attention so that the root of each subtree of the Generators tree is referenced - * once per leaf */ -static void zend_generator_add_child(zend_generator *generator, zend_generator *child) +ZEND_API zend_generator *zend_generator_update_root(zend_generator *generator) { - zend_generator *leaf = child->node.children ? child->node.ptr.leaf : child; - zend_generator_node *multi_children_node; - zend_bool was_leaf = generator->node.children == 0; - - if (was_leaf) { - zend_generator *next = generator->node.parent; - leaf->node.ptr.root = generator->node.ptr.root; - GC_ADDREF(&generator->std); /* we need to increment the generator refcount here as it became integrated into the tree (no leaf), but we must not increment the refcount of the *whole* path in tree */ - generator->node.ptr.leaf = leaf; - - while (next) { - if (next->node.children > 1) { - zend_generator *child = zend_hash_index_find_ptr(next->node.child.ht, (zend_ulong) generator); - zend_hash_index_del(next->node.child.ht, (zend_ulong) generator); - zend_hash_index_add_ptr(next->node.child.ht, (zend_ulong) leaf, child); - } - - next->node.ptr.leaf = leaf; - next = next->node.parent; - } - } else if (generator->node.children == 1) { - multi_children_node = zend_generator_search_multi_children_node(&generator->node); - if (multi_children_node) { - zend_generator_merge_child_nodes(&generator->node, multi_children_node, generator->node.child.single.child); - } + zend_generator *root = generator->node.parent; + while (root->node.parent) { + root = root->node.parent; } - if (!was_leaf) { - multi_children_node = zend_generator_search_multi_children_node(&child->node); - } else { - multi_children_node = (zend_generator_node *) 0x1; + clear_link_to_leaf(root); + root->node.ptr.leaf = generator; + generator->node.ptr.root = root; + return root; +} + +static zend_generator *get_new_root(zend_generator *generator, zend_generator *root) +{ + while (!root->execute_data && root->node.children == 1) { + root = root->node.child.single; } - /* for allowing zend_generator_get_child() to work, we need every multi children node to have ALL its leaf descendents present, linking to their respective child */ - { - zend_generator *parent = generator->node.parent, *cur = generator; + if (root->execute_data) { + return root; + } - if (multi_children_node > (zend_generator_node *) 0x1) { - zend_generator_merge_child_nodes(&generator->node, multi_children_node, child); - } else { - zend_generator_add_single_child(&generator->node, child, leaf); - } - while (parent) { - if (parent->node.children > 1) { - if (multi_children_node == (zend_generator_node *) 0x1) { - multi_children_node = zend_generator_search_multi_children_node(&child->node); - } - if (multi_children_node) { - zend_generator_merge_child_nodes(&parent->node, multi_children_node, cur); - } else { - zend_generator_add_single_child(&parent->node, cur, leaf); - } - } - cur = parent; - parent = parent->node.parent; - } + /* We have reached a multi-child node haven't found the root yet. We don't know which + * child to follow, so perform the search from the other direction instead. */ + while (generator->node.parent->execute_data) { + generator = generator->node.parent; } + + return generator; } -void zend_generator_yield_from(zend_generator *generator, zend_generator *from) +ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator) { - zend_generator_add_child(from, generator); + zend_generator *old_root = generator->node.ptr.root; + ZEND_ASSERT(!old_root->execute_data && "Nothing to update?"); - generator->node.parent = from; - zend_generator_get_current(generator); - GC_DELREF(&from->std); - generator->flags |= ZEND_GENERATOR_DO_INIT; -} + zend_generator *new_root = get_new_root(generator, old_root); -ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator, zend_generator *leaf) -{ - zend_generator *old_root, *root = leaf->node.ptr.root; + ZEND_ASSERT(old_root->node.ptr.leaf == generator); + generator->node.ptr.root = new_root; + new_root->node.ptr.leaf = generator; + old_root->node.ptr.leaf = NULL; - /* generator at the root had stopped */ - if (root != generator) { - old_root = root; - root = zend_generator_get_child(&root->node, leaf); - } else { - old_root = NULL; - } + zend_generator *new_root_parent = new_root->node.parent; + ZEND_ASSERT(new_root_parent); + zend_generator_remove_child(&new_root_parent->node, new_root); - while (!root->execute_data && root != generator) { - OBJ_RELEASE(&old_root->std); - old_root = root; + if (EXPECTED(EG(exception) == NULL) && EXPECTED((OBJ_FLAGS(&generator->std) & IS_OBJ_DESTRUCTOR_CALLED) == 0)) { + zend_op *yield_from = (zend_op *) new_root->execute_data->opline - 1; - root = zend_generator_get_child(&root->node, leaf); - } + if (yield_from->opcode == ZEND_YIELD_FROM) { + if (Z_ISUNDEF(new_root_parent->retval)) { + /* Throw the exception in the context of the generator */ + zend_execute_data *original_execute_data = EG(current_execute_data); + EG(current_execute_data) = new_root->execute_data; - if (root->node.parent) { - if (root->node.parent->execute_data == NULL) { - if (EXPECTED(EG(exception) == NULL) && EXPECTED((OBJ_FLAGS(&generator->std) & IS_OBJ_DESTRUCTOR_CALLED) == 0)) { - zend_op *yield_from = (zend_op *) root->execute_data->opline - 1; - - if (yield_from->opcode == ZEND_YIELD_FROM) { - if (Z_ISUNDEF(root->node.parent->retval)) { - /* Throw the exception in the context of the generator */ - zend_execute_data *original_execute_data = EG(current_execute_data); - EG(current_execute_data) = root->execute_data; - - if (root == generator) { - root->execute_data->prev_execute_data = original_execute_data; - } else { - root->execute_data->prev_execute_data = &generator->execute_fake; - generator->execute_fake.prev_execute_data = original_execute_data; - } - - root->execute_data->opline--; /* ZEND_YIELD(_FROM) already advance, so decrement opline to throw from correct place */ - zend_throw_exception(zend_ce_ClosedGeneratorException, "Generator yielded from aborted, no return value available", 0); - - EG(current_execute_data) = original_execute_data; - - if (!((old_root ? old_root : generator)->flags & ZEND_GENERATOR_CURRENTLY_RUNNING)) { - leaf->node.ptr.root = root; - root->node.parent = NULL; - if (old_root) { - OBJ_RELEASE(&old_root->std); - } - zend_generator_resume(leaf); - return leaf->node.ptr.root; /* this may be updated during zend_generator_resume! */ - } - } else { - zval_ptr_dtor(&root->value); - ZVAL_COPY(&root->value, &root->node.parent->value); - ZVAL_COPY(ZEND_CALL_VAR(root->execute_data, yield_from->result.var), &root->node.parent->retval); - } + if (new_root == generator) { + new_root->execute_data->prev_execute_data = original_execute_data; + } else { + new_root->execute_data->prev_execute_data = &generator->execute_fake; + generator->execute_fake.prev_execute_data = original_execute_data; } - } - root->node.parent = NULL; - } else { - do { - root = root->node.parent; - GC_ADDREF(&root->std); - } while (root->node.parent); + /* ZEND_YIELD(_FROM) already advance, so decrement opline to throw from correct place */ + new_root->execute_data->opline--; + zend_throw_exception(zend_ce_ClosedGeneratorException, "Generator yielded from aborted, no return value available", 0); + + EG(current_execute_data) = original_execute_data; + + if (!((old_root ? old_root : generator)->flags & ZEND_GENERATOR_CURRENTLY_RUNNING)) { + new_root->node.parent = NULL; + OBJ_RELEASE(&new_root_parent->std); + zend_generator_resume(generator); + return zend_generator_get_current(generator); + } + } else { + zval_ptr_dtor(&new_root->value); + ZVAL_COPY(&new_root->value, &new_root_parent->value); + ZVAL_COPY(ZEND_CALL_VAR(new_root->execute_data, yield_from->result.var), &new_root_parent->retval); + } } } - leaf->node.ptr.root = root; - if (old_root) { - OBJ_RELEASE(&old_root->std); - } + new_root->node.parent = NULL; + OBJ_RELEASE(&new_root_parent->std); - return root; + return new_root; } static zend_result zend_generator_get_next_delegated_value(zend_generator *generator) /* {{{ */ diff --git a/Zend/zend_generators.h b/Zend/zend_generators.h index 036b47732bab7..a082e46114bbe 100644 --- a/Zend/zend_generators.h +++ b/Zend/zend_generators.h @@ -41,14 +41,13 @@ struct _zend_generator_node { uint32_t children; union { HashTable *ht; /* if multiple children */ - struct { /* if one child */ - zend_generator *leaf; - zend_generator *child; - } single; + zend_generator *single; /* if one child */ } child; + /* One generator can cache a direct pointer to the current root. + * The leaf member points back to the generator using the root cache. */ union { - zend_generator *leaf; /* if > 0 children */ - zend_generator *root; /* if 0 children */ + zend_generator *leaf; /* if parent != NULL */ + zend_generator *root; /* if parent == NULL */ } ptr; }; @@ -104,26 +103,26 @@ ZEND_API zend_execute_data* zend_generator_freeze_call_stack(zend_execute_data * void zend_generator_yield_from(zend_generator *generator, zend_generator *from); ZEND_API zend_execute_data *zend_generator_check_placeholder_frame(zend_execute_data *ptr); -ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator, zend_generator *leaf); +ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator); +ZEND_API zend_generator *zend_generator_update_root(zend_generator *generator); static zend_always_inline zend_generator *zend_generator_get_current(zend_generator *generator) { - zend_generator *leaf; - zend_generator *root; - if (EXPECTED(generator->node.parent == NULL)) { /* we're not in yield from mode */ return generator; } - leaf = generator->node.children ? generator->node.ptr.leaf : generator; - root = leaf->node.ptr.root; + zend_generator *root = generator->node.ptr.root; + if (!root) { + root = zend_generator_update_root(generator); + } - if (EXPECTED(root->execute_data && root->node.parent == NULL)) { + if (EXPECTED(root->execute_data)) { /* generator still running */ return root; } - return zend_generator_update_current(generator, leaf); + return zend_generator_update_current(generator); } END_EXTERN_C() diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index c92b869569fcb..6d065cd03ea27 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -2149,7 +2149,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source { uint32_t idx; Bucket *p; - zval *t; + zval *t, *s; IS_CONSISTENT(source); IS_CONSISTENT(target); @@ -2158,18 +2158,20 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source if (overwrite) { for (idx = 0; idx < source->nNumUsed; idx++) { p = source->arData + idx; - if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; - if (UNEXPECTED(Z_TYPE(p->val) == IS_INDIRECT) && - UNEXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) == IS_UNDEF)) { - continue; + s = &p->val; + if (UNEXPECTED(Z_TYPE_P(s) == IS_INDIRECT)) { + s = Z_INDIRECT_P(s); + } + if (UNEXPECTED(Z_TYPE_P(s) == IS_UNDEF)) { + continue; } if (p->key) { - t = _zend_hash_add_or_update_i(target, p->key, &p->val, HASH_UPDATE | HASH_UPDATE_INDIRECT); + t = _zend_hash_add_or_update_i(target, p->key, s, HASH_UPDATE | HASH_UPDATE_INDIRECT); if (pCopyConstructor) { pCopyConstructor(t); } } else { - t = zend_hash_index_update(target, p->h, &p->val); + t = zend_hash_index_update(target, p->h, s); if (pCopyConstructor) { pCopyConstructor(t); } @@ -2178,18 +2180,20 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source } else { for (idx = 0; idx < source->nNumUsed; idx++) { p = source->arData + idx; - if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; - if (UNEXPECTED(Z_TYPE(p->val) == IS_INDIRECT) && - UNEXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) == IS_UNDEF)) { - continue; + s = &p->val; + if (UNEXPECTED(Z_TYPE_P(s) == IS_INDIRECT)) { + s = Z_INDIRECT_P(s); + } + if (UNEXPECTED(Z_TYPE_P(s) == IS_UNDEF)) { + continue; } if (p->key) { - t = _zend_hash_add_or_update_i(target, p->key, &p->val, HASH_ADD | HASH_UPDATE_INDIRECT); + t = _zend_hash_add_or_update_i(target, p->key, s, HASH_ADD | HASH_UPDATE_INDIRECT); if (t && pCopyConstructor) { pCopyConstructor(t); } } else { - t = zend_hash_index_add(target, p->h, &p->val); + t = zend_hash_index_add(target, p->h, s); if (t && pCopyConstructor) { pCopyConstructor(t); } diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h index c4f819d508c1e..e54a339ec4bc3 100644 --- a/Zend/zend_highlight.h +++ b/Zend/zend_highlight.h @@ -40,7 +40,7 @@ BEGIN_EXTERN_C() ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini); ZEND_API void zend_strip(void); ZEND_API zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini); -ZEND_API void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name); +ZEND_API void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name); ZEND_API void zend_html_putc(char c); ZEND_API void zend_html_puts(const char *s, size_t len); END_EXTERN_C() diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 4d2e2d540074c..7401456d8f09b 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -29,8 +29,8 @@ static void add_dependency_obligation(zend_class_entry *ce, zend_class_entry *dependency_ce); static void add_compatibility_obligation( - zend_class_entry *ce, const zend_function *child_fn, const zend_function *parent_fn, - zend_class_entry *parent_scope); + zend_class_entry *ce, const zend_function *child_fn, zend_class_entry *child_scope, + const zend_function *parent_fn, zend_class_entry *parent_scope); static void add_property_compatibility_obligation( zend_class_entry *ce, const zend_property_info *child_prop, const zend_property_info *parent_prop); @@ -90,13 +90,6 @@ static zend_function *zend_duplicate_user_function(zend_function *func) /* {{{ * new_function = zend_arena_alloc(&CG(arena), sizeof(zend_op_array)); memcpy(new_function, func, sizeof(zend_op_array)); - if (ZEND_MAP_PTR_GET(func->op_array.static_variables_ptr)) { - /* See: Zend/tests/method_static_var.phpt */ - new_function->op_array.static_variables = ZEND_MAP_PTR_GET(func->op_array.static_variables_ptr); - } - if (!(GC_FLAGS(new_function->op_array.static_variables) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(new_function->op_array.static_variables); - } if (CG(compiler_options) & ZEND_COMPILE_PRELOAD) { ZEND_ASSERT(new_function->op_array.fn_flags & ZEND_ACC_PRELOADED); @@ -105,6 +98,15 @@ static zend_function *zend_duplicate_user_function(zend_function *func) /* {{{ * ZEND_MAP_PTR_INIT(new_function->op_array.static_variables_ptr, &new_function->op_array.static_variables); } + HashTable *static_properties_ptr = ZEND_MAP_PTR_GET(func->op_array.static_variables_ptr); + if (static_properties_ptr) { + /* See: Zend/tests/method_static_var.phpt */ + ZEND_MAP_PTR_SET(new_function->op_array.static_variables_ptr, static_properties_ptr); + GC_TRY_ADDREF(static_properties_ptr); + } else { + GC_TRY_ADDREF(new_function->op_array.static_variables); + } + return new_function; } /* }}} */ @@ -239,10 +241,9 @@ static zend_bool class_visible(zend_class_entry *ce) { static zend_class_entry *lookup_class( zend_class_entry *scope, zend_string *name, zend_bool register_unresolved) { - zend_class_entry *ce; + uint32_t flags = ZEND_FETCH_CLASS_ALLOW_UNLINKED | ZEND_FETCH_CLASS_NO_AUTOLOAD; + zend_class_entry *ce = zend_lookup_class_ex(name, NULL, flags); if (!CG(in_compilation)) { - uint32_t flags = ZEND_FETCH_CLASS_ALLOW_UNLINKED | ZEND_FETCH_CLASS_NO_AUTOLOAD; - ce = zend_lookup_class_ex(name, NULL, flags); if (ce) { return ce; } @@ -256,7 +257,6 @@ static zend_class_entry *lookup_class( zend_hash_add_empty_element(CG(delayed_autoloads), name); } } else { - ce = zend_lookup_class_ex(name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (ce && class_visible(ce)) { return ce; } @@ -272,8 +272,6 @@ static zend_class_entry *lookup_class( /* Instanceof that's safe to use on unlinked classes. */ static zend_bool unlinked_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) { - zend_class_entry *ce; - if (ce1 == ce2) { return 1; } @@ -282,18 +280,18 @@ static zend_bool unlinked_instanceof(zend_class_entry *ce1, zend_class_entry *ce return instanceof_function(ce1, ce2); } - ce = ce1; - while (ce->parent) { - if (ce->ce_flags & ZEND_ACC_RESOLVED_PARENT) { - ce = ce->parent; + if (ce1->parent) { + zend_class_entry *parent_ce; + if (ce1->ce_flags & ZEND_ACC_RESOLVED_PARENT) { + parent_ce = ce1->parent; } else { - ce = zend_lookup_class_ex(ce->parent_name, NULL, + parent_ce = zend_lookup_class_ex(ce1->parent_name, NULL, ZEND_FETCH_CLASS_ALLOW_UNLINKED | ZEND_FETCH_CLASS_NO_AUTOLOAD); - if (!ce) { - break; - } } - if (ce == ce2) { + + /* It's not sufficient to only check the parent chain itself, as need to do a full + * recursive instanceof in case the parent interfaces haven't been copied yet. */ + if (parent_ce && unlinked_instanceof(parent_ce, ce2)) { return 1; } } @@ -310,7 +308,7 @@ static zend_bool unlinked_instanceof(zend_class_entry *ce1, zend_class_entry *ce } } else { for (i = 0; i < ce1->num_interfaces; i++) { - ce = zend_lookup_class_ex( + zend_class_entry *ce = zend_lookup_class_ex( ce1->interface_names[i].name, ce1->interface_names[i].lc_name, ZEND_FETCH_CLASS_ALLOW_UNLINKED | ZEND_FETCH_CLASS_NO_AUTOLOAD); if (ce && unlinked_instanceof(ce, ce2)) { @@ -366,11 +364,10 @@ typedef enum { } inheritance_status; static inheritance_status zend_perform_covariant_class_type_check( - zend_class_entry *fe_scope, zend_string *fe_class_name, + zend_class_entry *fe_scope, zend_string *fe_class_name, zend_class_entry *fe_ce, zend_class_entry *proto_scope, zend_type proto_type, zend_bool register_unresolved) { zend_bool have_unresolved = 0; - zend_class_entry *fe_ce = NULL; if (ZEND_TYPE_FULL_MASK(proto_type) & MAY_BE_OBJECT) { /* Currently, any class name would be allowed here. We still perform a class lookup * for forward-compatibility reasons, as we may have named types in the future that @@ -393,6 +390,7 @@ static inheritance_status zend_perform_covariant_class_type_check( zend_type *single_type; ZEND_TYPE_FOREACH(proto_type, single_type) { + zend_class_entry *proto_ce; if (ZEND_TYPE_HAS_NAME(*single_type)) { zend_string *proto_class_name = resolve_class_name(proto_scope, ZEND_TYPE_NAME(*single_type)); @@ -400,16 +398,20 @@ static inheritance_status zend_perform_covariant_class_type_check( return INHERITANCE_SUCCESS; } - /* Make sure to always load both classes, to avoid only registering one of them as - * a delayed autoload. */ if (!fe_ce) fe_ce = lookup_class(fe_scope, fe_class_name, register_unresolved); - zend_class_entry *proto_ce = + proto_ce = lookup_class(proto_scope, proto_class_name, register_unresolved); - if (!fe_ce || !proto_ce) { - have_unresolved = 1; - } else if (unlinked_instanceof(fe_ce, proto_ce)) { - return INHERITANCE_SUCCESS; - } + } else if (ZEND_TYPE_HAS_CE(*single_type)) { + if (!fe_ce) fe_ce = lookup_class(fe_scope, fe_class_name, register_unresolved); + proto_ce = ZEND_TYPE_CE(*single_type); + } else { + continue; + } + + if (!fe_ce || !proto_ce) { + have_unresolved = 1; + } else if (unlinked_instanceof(fe_ce, proto_ce)) { + return INHERITANCE_SUCCESS; } } ZEND_TYPE_FOREACH_END(); @@ -450,56 +452,56 @@ static inheritance_status zend_perform_covariant_type_check( } } - if (ZEND_TYPE_HAS_NAME(fe_type)) { - zend_string *fe_class_name = resolve_class_name(fe_scope, ZEND_TYPE_NAME(fe_type)); - inheritance_status status = zend_perform_covariant_class_type_check( - fe_scope, fe_class_name, proto_scope, proto_type, /* register_unresolved */ 0); - if (status != INHERITANCE_UNRESOLVED) { - return status; - } - - zend_perform_covariant_class_type_check( - fe_scope, fe_class_name, proto_scope, proto_type, /* register_unresolved */ 1); - return INHERITANCE_UNRESOLVED; - } - - if (ZEND_TYPE_HAS_LIST(fe_type)) { - zend_type *list_type; - zend_bool all_success = 1; + zend_type *single_type; + zend_bool all_success = 1; - /* First try to check whether we can succeed without resolving anything */ - ZEND_TYPE_LIST_FOREACH(ZEND_TYPE_LIST(fe_type), list_type) { - ZEND_ASSERT(ZEND_TYPE_HAS_NAME(*list_type)); + /* First try to check whether we can succeed without resolving anything */ + ZEND_TYPE_FOREACH(fe_type, single_type) { + inheritance_status status; + if (ZEND_TYPE_HAS_NAME(*single_type)) { zend_string *fe_class_name = - resolve_class_name(fe_scope, ZEND_TYPE_NAME(*list_type)); - inheritance_status status = zend_perform_covariant_class_type_check( - fe_scope, fe_class_name, proto_scope, proto_type, /* register_unresolved */ 0); - if (status == INHERITANCE_ERROR) { - return INHERITANCE_ERROR; - } - - if (status != INHERITANCE_SUCCESS) { - all_success = 0; - } - } ZEND_TYPE_LIST_FOREACH_END(); + resolve_class_name(fe_scope, ZEND_TYPE_NAME(*single_type)); + status = zend_perform_covariant_class_type_check( + fe_scope, fe_class_name, NULL, + proto_scope, proto_type, /* register_unresolved */ 0); + } else if (ZEND_TYPE_HAS_CE(*single_type)) { + zend_class_entry *fe_ce = ZEND_TYPE_CE(*single_type); + status = zend_perform_covariant_class_type_check( + fe_scope, fe_ce->name, fe_ce, + proto_scope, proto_type, /* register_unresolved */ 0); + } else { + continue; + } - /* All individual checks succeeded, overall success */ - if (all_success) { - return INHERITANCE_SUCCESS; + if (status == INHERITANCE_ERROR) { + return INHERITANCE_ERROR; + } + if (status != INHERITANCE_SUCCESS) { + all_success = 0; } + } ZEND_TYPE_FOREACH_END(); - /* Register all classes that may have to be resolved */ - ZEND_TYPE_LIST_FOREACH(ZEND_TYPE_LIST(fe_type), list_type) { - ZEND_ASSERT(ZEND_TYPE_HAS_NAME(*list_type)); - zend_string *fe_class_name = - resolve_class_name(fe_scope, ZEND_TYPE_NAME(*list_type)); - zend_perform_covariant_class_type_check( - fe_scope, fe_class_name, proto_scope, proto_type, /* register_unresolved */ 1); - } ZEND_TYPE_LIST_FOREACH_END(); - return INHERITANCE_UNRESOLVED; + /* All individual checks succeeded, overall success */ + if (all_success) { + return INHERITANCE_SUCCESS; } - return INHERITANCE_SUCCESS; + /* Register all classes that may have to be resolved */ + ZEND_TYPE_FOREACH(fe_type, single_type) { + if (ZEND_TYPE_HAS_NAME(*single_type)) { + zend_string *fe_class_name = + resolve_class_name(fe_scope, ZEND_TYPE_NAME(*single_type)); + zend_perform_covariant_class_type_check( + fe_scope, fe_class_name, NULL, + proto_scope, proto_type, /* register_unresolved */ 1); + } else if (ZEND_TYPE_HAS_CE(*single_type)) { + zend_class_entry *fe_ce = ZEND_TYPE_CE(*single_type); + zend_perform_covariant_class_type_check( + fe_scope, fe_ce->name, fe_ce, + proto_scope, proto_type, /* register_unresolved */ 1); + } + } ZEND_TYPE_FOREACH_END(); + return INHERITANCE_UNRESOLVED; } /* }}} */ @@ -524,12 +526,12 @@ static inheritance_status zend_do_perform_arg_type_hint_check( } /* }}} */ -/* For abstract trait methods, proto_scope will differ from proto->common.scope, +/* For trait methods, fe_scope/proto_scope may differ from fe/proto->common.scope, * as self will refer to the self of the class the trait is used in, not the trait * the method was declared in. */ static inheritance_status zend_do_perform_implementation_check( - const zend_function *fe, const zend_function *proto, - zend_class_entry *proto_scope) /* {{{ */ + const zend_function *fe, zend_class_entry *fe_scope, + const zend_function *proto, zend_class_entry *proto_scope) /* {{{ */ { uint32_t i, num_args, proto_num_args, fe_num_args; inheritance_status status, local_status; @@ -591,7 +593,7 @@ static inheritance_status zend_do_perform_implementation_check( } local_status = zend_do_perform_arg_type_hint_check( - fe->common.scope, fe_arg_info, proto_scope, proto_arg_info); + fe_scope, fe_arg_info, proto_scope, proto_arg_info); if (UNEXPECTED(local_status != INHERITANCE_SUCCESS)) { if (UNEXPECTED(local_status == INHERITANCE_ERROR)) { @@ -616,7 +618,7 @@ static inheritance_status zend_do_perform_implementation_check( } local_status = zend_perform_covariant_type_check( - fe->common.scope, fe->common.arg_info[-1].type, + fe_scope, fe->common.arg_info[-1].type, proto_scope, proto->common.arg_info[-1].type); if (UNEXPECTED(local_status != INHERITANCE_SUCCESS)) { @@ -780,10 +782,11 @@ static zend_always_inline uint32_t func_lineno(const zend_function *fn) { } static void ZEND_COLD emit_incompatible_method_error( - const zend_function *child, const zend_function *parent, zend_class_entry *parent_scope, + const zend_function *child, zend_class_entry *child_scope, + const zend_function *parent, zend_class_entry *parent_scope, inheritance_status status) { zend_string *parent_prototype = zend_get_function_declaration(parent, parent_scope); - zend_string *child_prototype = zend_get_function_declaration(child, child->common.scope); + zend_string *child_prototype = zend_get_function_declaration(child, child_scope); if (status == INHERITANCE_UNRESOLVED) { /* Fetch the first unresolved class from registered autoloads */ zend_string *unresolved_class = NULL; @@ -805,23 +808,26 @@ static void ZEND_COLD emit_incompatible_method_error( } static void perform_delayable_implementation_check( - zend_class_entry *ce, const zend_function *fe, + zend_class_entry *ce, + const zend_function *fe, zend_class_entry *fe_scope, const zend_function *proto, zend_class_entry *proto_scope) { - inheritance_status status = zend_do_perform_implementation_check(fe, proto, proto_scope); + inheritance_status status = + zend_do_perform_implementation_check(fe, fe_scope, proto, proto_scope); if (UNEXPECTED(status != INHERITANCE_SUCCESS)) { if (EXPECTED(status == INHERITANCE_UNRESOLVED)) { - add_compatibility_obligation(ce, fe, proto, proto_scope); + add_compatibility_obligation(ce, fe, fe_scope, proto, proto_scope); } else { ZEND_ASSERT(status == INHERITANCE_ERROR); - emit_incompatible_method_error(fe, proto, proto_scope, status); + emit_incompatible_method_error(fe, fe_scope, proto, proto_scope, status); } } } static zend_always_inline inheritance_status do_inheritance_check_on_method_ex( - zend_function *child, zend_function *parent, - zend_class_entry *ce, zend_class_entry *parent_scope, zval *child_zv, + zend_function *child, zend_class_entry *child_scope, + zend_function *parent, zend_class_entry *parent_scope, + zend_class_entry *ce, zval *child_zv, zend_bool check_visibility, zend_bool check_only, zend_bool checked) /* {{{ */ { uint32_t child_flags; @@ -921,22 +927,21 @@ static zend_always_inline inheritance_status do_inheritance_check_on_method_ex( if (!checked) { if (check_only) { - return zend_do_perform_implementation_check(child, parent, parent_scope); + return zend_do_perform_implementation_check(child, child_scope, parent, parent_scope); } - perform_delayable_implementation_check(ce, child, parent, parent_scope); + perform_delayable_implementation_check(ce, child, child_scope, parent, parent_scope); } return INHERITANCE_SUCCESS; } /* }}} */ static zend_never_inline void do_inheritance_check_on_method( - zend_function *child, zend_function *parent, - zend_class_entry *ce, zend_class_entry *parent_scope, - zval *child_zv, zend_bool check_visibility) /* {{{ */ + zend_function *child, zend_class_entry *child_scope, + zend_function *parent, zend_class_entry *parent_scope, + zend_class_entry *ce, zval *child_zv, zend_bool check_visibility) { - do_inheritance_check_on_method_ex(child, parent, ce, parent_scope, child_zv, check_visibility, 0, 0); + do_inheritance_check_on_method_ex(child, child_scope, parent, parent_scope, ce, child_zv, check_visibility, 0, 0); } -/* }}} */ static zend_always_inline void do_inherit_method(zend_string *key, zend_function *parent, zend_class_entry *ce, zend_bool is_interface, zend_bool checked) /* {{{ */ { @@ -952,11 +957,12 @@ static zend_always_inline void do_inherit_method(zend_string *key, zend_function if (checked) { do_inheritance_check_on_method_ex( - func, parent, ce, parent->common.scope, child, + func, func->common.scope, parent, parent->common.scope, ce, child, /* check_visibility */ 1, 0, checked); } else { do_inheritance_check_on_method( - func, parent, ce, parent->common.scope, child, /* check_visibility */ 1); + func, func->common.scope, parent, parent->common.scope, ce, child, + /* check_visibility */ 1); } } else { @@ -1559,6 +1565,12 @@ static void zend_do_implement_interfaces(zend_class_entry *ce, zend_class_entry } /* }}} */ +static zend_class_entry *fixup_trait_scope(const zend_function *fn, zend_class_entry *ce) +{ + /* self in trait methods should be resolved to the using class, not the trait. */ + return fn->common.scope->ce_flags & ZEND_ACC_TRAIT ? ce : fn->common.scope; +} + static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_string *key, zend_function *fn) /* {{{ */ { zend_function *existing_fn = NULL; @@ -1579,12 +1591,10 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_ * As such, "abstract protected" was sometimes used to indicate trait requirements, * even though the "implementing" method was private. Do not check visibility * requirements to maintain backwards-compatibility with such usage. - * - * The parent_scope passed here is not fn->common.scope, because we want "self" to be - * resolved against the using class, not the declaring trait. */ do_inheritance_check_on_method( - existing_fn, fn, ce, /* parent_scope */ ce, NULL, /* check_visibility */ 0); + existing_fn, fixup_trait_scope(existing_fn, ce), fn, fixup_trait_scope(fn, ce), + ce, NULL, /* check_visibility */ 0); return; } @@ -1599,10 +1609,11 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_ ZSTR_VAL(ce->name), ZSTR_VAL(name), ZSTR_VAL(existing_fn->common.scope->name), ZSTR_VAL(existing_fn->common.function_name)); } else { - /* inherited members are overridden by members inserted by traits */ - /* check whether the trait method fulfills the inheritance requirements */ + /* Inherited members are overridden by members inserted by traits. + * Check whether the trait method fulfills the inheritance requirements. */ do_inheritance_check_on_method( - fn, existing_fn, ce, existing_fn->common.scope, NULL, /* check_visibility */ 1); + fn, fixup_trait_scope(fn, ce), existing_fn, fixup_trait_scope(existing_fn, ce), + ce, NULL, /* check_visibility */ 1); } } @@ -2040,8 +2051,9 @@ static void zend_do_traits_property_binding(zend_class_entry *ce, zend_class_ent Z_TRY_ADDREF_P(prop_value); doc_comment = property_info->doc_comment ? zend_string_copy(property_info->doc_comment) : NULL; - zend_type_copy_ctor(&property_info->type, /* persistent */ 0); - new_prop = zend_declare_typed_property(ce, prop_name, prop_value, flags, doc_comment, property_info->type); + zend_type type = property_info->type; + zend_type_copy_ctor(&type, /* persistent */ 0); + new_prop = zend_declare_typed_property(ce, prop_name, prop_value, flags, doc_comment, type); if (property_info->attributes) { new_prop->attributes = property_info->attributes; @@ -2188,6 +2200,7 @@ typedef struct { * so use copies of functions here as well. */ zend_function parent_fn; zend_function child_fn; + zend_class_entry *child_scope; zend_class_entry *parent_scope; }; struct { @@ -2236,8 +2249,9 @@ static void add_dependency_obligation(zend_class_entry *ce, zend_class_entry *de } static void add_compatibility_obligation( - zend_class_entry *ce, const zend_function *child_fn, const zend_function *parent_fn, - zend_class_entry *parent_scope) { + zend_class_entry *ce, + const zend_function *child_fn, zend_class_entry *child_scope, + const zend_function *parent_fn, zend_class_entry *parent_scope) { HashTable *obligations = get_or_init_obligations_for_class(ce); variance_obligation *obligation = emalloc(sizeof(variance_obligation)); obligation->type = OBLIGATION_COMPATIBILITY; @@ -2252,6 +2266,7 @@ static void add_compatibility_obligation( } else { memcpy(&obligation->parent_fn, parent_fn, sizeof(zend_op_array)); } + obligation->child_scope = child_scope; obligation->parent_scope = parent_scope; zend_hash_next_index_insert_ptr(obligations, obligation); } @@ -2281,14 +2296,16 @@ static int check_variance_obligation(zval *zv) { } } else if (obligation->type == OBLIGATION_COMPATIBILITY) { inheritance_status status = zend_do_perform_implementation_check( - &obligation->child_fn, &obligation->parent_fn, obligation->parent_scope); + &obligation->child_fn, obligation->child_scope, + &obligation->parent_fn, obligation->parent_scope); if (UNEXPECTED(status != INHERITANCE_SUCCESS)) { if (EXPECTED(status == INHERITANCE_UNRESOLVED)) { return ZEND_HASH_APPLY_KEEP; } ZEND_ASSERT(status == INHERITANCE_ERROR); emit_incompatible_method_error( - &obligation->child_fn, &obligation->parent_fn, obligation->parent_scope, status); + &obligation->child_fn, obligation->child_scope, + &obligation->parent_fn, obligation->parent_scope, status); } /* Either the compatibility check was successful or only threw a warning. */ } else { @@ -2355,10 +2372,12 @@ static void report_variance_errors(zend_class_entry *ce) { /* Just used to populate the delayed_autoloads table, * which will be used when printing the "unresolved" error. */ inheritance_status status = zend_do_perform_implementation_check( - &obligation->child_fn, &obligation->parent_fn, obligation->parent_scope); + &obligation->child_fn, obligation->child_scope, + &obligation->parent_fn, obligation->parent_scope); ZEND_ASSERT(status == INHERITANCE_UNRESOLVED); emit_incompatible_method_error( - &obligation->child_fn, &obligation->parent_fn, obligation->parent_scope, status); + &obligation->child_fn, obligation->child_scope, + &obligation->parent_fn, obligation->parent_scope, status); } else if (obligation->type == OBLIGATION_PROPERTY_COMPATIBILITY) { emit_incompatible_property_error(obligation->child_prop, obligation->parent_prop); } else { @@ -2484,8 +2503,9 @@ static inheritance_status zend_can_early_bind(zend_class_entry *ce, zend_class_e zend_function *child_func = Z_FUNC_P(zv); inheritance_status status = do_inheritance_check_on_method_ex( - child_func, parent_func, ce, parent_func->common.scope, NULL, - /* check_visibility */ 1, 1, 0); + child_func, child_func->common.scope, + parent_func, parent_func->common.scope, + ce, NULL, /* check_visibility */ 1, 1, 0); if (UNEXPECTED(status != INHERITANCE_SUCCESS)) { return status; diff --git a/Zend/zend_interfaces.stub.php b/Zend/zend_interfaces.stub.php index bb94190f8a23a..f58d8abc2058a 100644 --- a/Zend/zend_interfaces.stub.php +++ b/Zend/zend_interfaces.stub.php @@ -52,7 +52,7 @@ interface Serializable public function serialize(); /** @return void */ - public function unserialize(string $serialized); + public function unserialize(string $data); } interface Countable diff --git a/Zend/zend_interfaces_arginfo.h b/Zend/zend_interfaces_arginfo.h index 4b9d30ecd658a..71dc72b95c64b 100644 --- a/Zend/zend_interfaces_arginfo.h +++ b/Zend/zend_interfaces_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1aa9ef81a738328a334176d37683646b60b2f6fa */ + * Stub hash: 29a5ed0b859b0732074c81cf9d26047a6eb9059a */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IteratorAggregate_getIterator, 0, 0, 0) ZEND_END_ARG_INFO() @@ -30,7 +30,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_Serializable_serialize arginfo_class_IteratorAggregate_getIterator ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Serializable_unserialize, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Countable_count arginfo_class_IteratorAggregate_getIterator diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index d1c5b85cf248c..cd31878eb9d10 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -851,17 +851,13 @@ zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *sy return SUCCESS; } -void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name) +void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name) { zend_lex_state original_lex_state; - zval tmp; - - if (UNEXPECTED(Z_TYPE_P(str) != IS_STRING)) { - ZVAL_STR(&tmp, zval_get_string_func(str)); - str = &tmp; - } + zval str_zv; + ZVAL_STR_COPY(&str_zv, str); zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(str, str_name); + zend_prepare_string_for_scanning(&str_zv, str_name); BEGIN(INITIAL); zend_highlight(syntax_highlighter_ini); if (SCNG(script_filtered)) { @@ -869,9 +865,7 @@ void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter SCNG(script_filtered) = NULL; } zend_restore_lexical_state(&original_lex_state); - if (UNEXPECTED(str == &tmp)) { - zval_ptr_dtor(&tmp); - } + zval_ptr_dtor(&str_zv); } ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding) diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 30d70bbf53247..98957def7626a 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -31,7 +31,7 @@ #define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module #define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module -#define ZEND_MODULE_API_NO 20200930 +#define ZEND_MODULE_API_NO 20201009 #ifdef ZTS #define USING_ZTS 1 #else diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index ecf5c71ed8dd1..f091d679f681b 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -772,11 +772,10 @@ ZEND_API zval *zend_std_write_property(zend_object *zobj, zend_string *name, zva } else { ZEND_ASSERT(!IS_WRONG_PROPERTY_OFFSET(property_offset)); write_std_property: - Z_TRY_ADDREF_P(value); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(property_offset))) { - variable_ptr = OBJ_PROP(zobj, property_offset); + Z_TRY_ADDREF_P(value); if (UNEXPECTED(prop_info)) { ZVAL_COPY_VALUE(&tmp, value); if (UNEXPECTED(!zend_verify_property_type(prop_info, &tmp, property_uses_strict_types()))) { @@ -794,6 +793,8 @@ ZEND_API zval *zend_std_write_property(zend_object *zobj, zend_string *name, zva variable_ptr = &EG(error_zval); goto exit; } + + Z_TRY_ADDREF_P(value); if (!zobj->properties) { rebuild_object_properties(zobj); } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index e7fb82e04fe46..d1f2d553fceb1 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -950,7 +950,7 @@ static ZEND_COLD zend_never_inline void ZEND_FASTCALL zend_binop_error(const cha static zend_never_inline void ZEND_FASTCALL add_function_array(zval *result, zval *op1, zval *op2) /* {{{ */ { - if ((result == op1) && (result == op2)) { + if (result == op1 && Z_ARR_P(op1) == Z_ARR_P(op2)) { /* $a += $a */ return; } diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index 250d1704dcf19..71f9781442642 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -492,6 +492,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim HANDLE hFind = INVALID_HANDLE_VALUE; ALLOCA_FLAG(use_heap_large) wchar_t *pathw = NULL; + int may_retry_reparse_point; #define FREE_PATHW() \ do { free(pathw); } while(0); @@ -591,6 +592,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim #ifdef ZEND_WIN32 retry_reparse_point: + may_retry_reparse_point = 0; if (save) { pathw = php_win32_ioutil_any_to_w(path); if (!pathw) { @@ -685,6 +687,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim CloseHandle(hLink); if(pbuffer->ReparseTag == IO_REPARSE_TAG_SYMLINK) { + may_retry_reparse_point = 1; reparsetarget = pbuffer->SymbolicLinkReparseBuffer.ReparseTarget; isabsolute = pbuffer->SymbolicLinkReparseBuffer.Flags == 0; #if VIRTUAL_CWD_DEBUG @@ -821,7 +824,7 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim free_alloca(pbuffer, use_heap_large); free(substitutename); - { + if (may_retry_reparse_point) { DWORD attrs; FREE_PATHW() diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 1c06bb42e91c0..c8e7774efcbe3 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3956,8 +3956,9 @@ ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - ZEND_OBSERVER_FCALL_BEGIN(execute_data); LOAD_OPLINE_EX(); + ZEND_OBSERVER_SAVE_OPLINE(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); ZEND_VM_ENTER_EX(); } @@ -3981,8 +3982,9 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - ZEND_OBSERVER_FCALL_BEGIN(execute_data); LOAD_OPLINE_EX(); + ZEND_OBSERVER_SAVE_OPLINE(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); ZEND_VM_ENTER_EX(); } else { @@ -4075,13 +4077,15 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER)) call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); - ZEND_OBSERVER_FCALL_BEGIN(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + ZEND_OBSERVER_SAVE_OPLINE(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -4195,8 +4199,11 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV if (OP1_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -4296,6 +4303,7 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER)) } } } + ZEND_OBSERVER_SAVE_OPLINE(); ZEND_OBSERVER_FCALL_END(execute_data, return_value); ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } @@ -6484,14 +6492,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR) } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { zend_object *zobj = Z_OBJ_P(array_ptr); if (!zobj->ce->get_iterator) { - HashTable *properties; - - result = EX_VAR(opline->result.var); - ZVAL_OBJ(result, zobj); - if (OP1_TYPE != IS_TMP_VAR) { - GC_ADDREF(zobj); - } - properties = zobj->properties; + HashTable *properties = zobj->properties; if (properties) { if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { @@ -6502,8 +6503,20 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR) } else { properties = zobj->handlers->get_properties(zobj); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); + result = EX_VAR(opline->result.var); + ZVAL_COPY_VALUE(result, array_ptr); + if (OP1_TYPE != IS_TMP_VAR) { + Z_ADDREF_P(array_ptr); + } + + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(result) = (uint32_t) -1; + FREE_OP1_IF_VAR(); + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0); FREE_OP1_IF_VAR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -6569,6 +6582,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR) ZEND_VM_NEXT_OPCODE(); } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { + HashTable *properties; if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); @@ -6587,8 +6601,15 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR) } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); + properties = Z_OBJPROP_P(array_ptr); + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1; + FREE_OP1_VAR_PTR(); + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -7688,6 +7709,9 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca } /* Uncaught exception */ + if (zend_observer_fcall_op_array_extension != -1) { + zend_observer_fcall_end(execute_data, EX(return_value)); + } cleanup_live_vars(execute_data, op_num, 0); if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); @@ -7702,7 +7726,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca } } -ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY, SPEC(OBSERVER)) +ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY) { const zend_op *throw_op = EG(opline_before_exception); uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes; @@ -7731,7 +7755,6 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY, SPEC(OBSERVER)) } } - ZEND_OBSERVER_FCALL_END(execute_data, EX(return_value)); cleanup_unfinished_calls(execute_data, throw_op_num); if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { @@ -8493,12 +8516,14 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY, SPEC(OBSERVER)) } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - ZEND_OBSERVER_FCALL_BEGIN(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + ZEND_OBSERVER_SAVE_OPLINE(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + ZEND_OBSERVER_FCALL_BEGIN(execute_data); execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index f43fc024b9c31..6fca6f4d138c9 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1350,9 +1350,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - LOAD_OPLINE_EX(); + ZEND_VM_ENTER_EX(); } @@ -1374,9 +1374,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - LOAD_OPLINE_EX(); + ZEND_VM_ENTER_EX(); } @@ -1398,8 +1398,9 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBS call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_fcall_begin(execute_data); LOAD_OPLINE_EX(); + SAVE_OPLINE(); + zend_observer_fcall_begin(execute_data); ZEND_VM_ENTER_EX(); } @@ -1423,9 +1424,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - LOAD_OPLINE_EX(); + ZEND_VM_ENTER_EX(); } else { zval retval; @@ -1517,9 +1518,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - LOAD_OPLINE_EX(); + ZEND_VM_ENTER_EX(); } else { zval retval; @@ -1611,8 +1612,9 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_ call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_fcall_begin(execute_data); LOAD_OPLINE_EX(); + SAVE_OPLINE(); + zend_observer_fcall_begin(execute_data); ZEND_VM_ENTER_EX(); } else { @@ -1708,9 +1710,12 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + + ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -1813,9 +1818,12 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETV if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + + ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -1915,13 +1923,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBS call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); - zend_observer_fcall_begin(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + SAVE_OPLINE(); + zend_observer_fcall_begin(execute_data); ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + zend_observer_fcall_begin(execute_data); execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -2894,6 +2904,9 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try } /* Uncaught exception */ + if (zend_observer_fcall_op_array_extension != -1) { + zend_observer_fcall_end(execute_data, EX(return_value)); + } cleanup_live_vars(execute_data, op_num, 0); if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); @@ -2962,61 +2975,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER( ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } -static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - const zend_op *throw_op = EG(opline_before_exception); - uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes; - int i, current_try_catch_offset = -1; - - if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE) - && throw_op->extended_value & ZEND_FREE_ON_RETURN) { - /* exceptions thrown because of loop var destruction on return/break/... - * are logically thrown at the end of the foreach loop, so adjust the - * throw_op_num. - */ - const zend_live_range *range = find_live_range( - &EX(func)->op_array, throw_op_num, throw_op->op1.var); - throw_op_num = range->end; - } - - /* Find the innermost try/catch/finally the exception was thrown in */ - for (i = 0; i < EX(func)->op_array.last_try_catch; i++) { - zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i]; - if (try_catch->try_op > throw_op_num) { - /* further blocks will not be relevant... */ - break; - } - if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) { - current_try_catch_offset = i; - } - } - - zend_observer_fcall_end(execute_data, EX(return_value)); - cleanup_unfinished_calls(execute_data, throw_op_num); - - if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { - switch (throw_op->opcode) { - case ZEND_ADD_ARRAY_ELEMENT: - case ZEND_ADD_ARRAY_UNPACK: - case ZEND_ROPE_INIT: - case ZEND_ROPE_ADD: - break; /* exception while building structures, live range handling will free those */ - - case ZEND_FETCH_CLASS: - case ZEND_DECLARE_ANON_CLASS: - break; /* return value is zend_class_entry pointer */ - - default: - /* smart branch opcodes may not initialize result */ - if (!zend_is_smart_branch(throw_op)) { - zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var)); - } - } - } - - ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); -} - static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -3188,12 +3146,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + + ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -3322,12 +3282,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_ } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); - zend_observer_fcall_begin(execute_data); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE_EX(); + SAVE_OPLINE(); + zend_observer_fcall_begin(execute_data); ZEND_VM_ENTER_EX(); } else { SAVE_OPLINE_EX(); + zend_observer_fcall_begin(execute_data); execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); @@ -4121,6 +4083,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_ } } + ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -4193,6 +4156,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSER } } } + SAVE_OPLINE(); zend_observer_fcall_end(execute_data, return_value); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -4845,14 +4809,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER( } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { zend_object *zobj = Z_OBJ_P(array_ptr); if (!zobj->ce->get_iterator) { - HashTable *properties; - - result = EX_VAR(opline->result.var); - ZVAL_OBJ(result, zobj); - if (IS_CONST != IS_TMP_VAR) { - GC_ADDREF(zobj); - } - properties = zobj->properties; + HashTable *properties = zobj->properties; if (properties) { if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { @@ -4863,7 +4820,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER( } else { properties = zobj->handlers->get_properties(zobj); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); + + result = EX_VAR(opline->result.var); + ZVAL_COPY_VALUE(result, array_ptr); + if (IS_CONST != IS_TMP_VAR) { + Z_ADDREF_P(array_ptr); + } + + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(result) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -4928,6 +4898,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_ ZEND_VM_NEXT_OPCODE(); } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { + HashTable *properties; if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); @@ -4946,7 +4917,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_ } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); + + properties = Z_OBJPROP_P(array_ptr); + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -9744,8 +9723,11 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYP if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -18608,6 +18590,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA } } + ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -18840,14 +18823,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { zend_object *zobj = Z_OBJ_P(array_ptr); if (!zobj->ce->get_iterator) { - HashTable *properties; - - result = EX_VAR(opline->result.var); - ZVAL_OBJ(result, zobj); - if (IS_TMP_VAR != IS_TMP_VAR) { - GC_ADDREF(zobj); - } - properties = zobj->properties; + HashTable *properties = zobj->properties; if (properties) { if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { @@ -18858,7 +18834,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE } else { properties = zobj->handlers->get_properties(zobj); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); + + result = EX_VAR(opline->result.var); + ZVAL_COPY_VALUE(result, array_ptr); + if (IS_TMP_VAR != IS_TMP_VAR) { + Z_ADDREF_P(array_ptr); + } + + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(result) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -18924,6 +18913,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z ZEND_VM_NEXT_OPCODE(); } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { + HashTable *properties; if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); @@ -18942,7 +18932,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); + + properties = Z_OBJPROP_P(array_ptr); + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -20073,8 +20071,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -21155,6 +21156,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA } } + ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -21390,14 +21392,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { zend_object *zobj = Z_OBJ_P(array_ptr); if (!zobj->ce->get_iterator) { - HashTable *properties; - - result = EX_VAR(opline->result.var); - ZVAL_OBJ(result, zobj); - if (IS_VAR != IS_TMP_VAR) { - GC_ADDREF(zobj); - } - properties = zobj->properties; + HashTable *properties = zobj->properties; if (properties) { if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { @@ -21408,8 +21403,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE } else { properties = zobj->handlers->get_properties(zobj); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); + result = EX_VAR(opline->result.var); + ZVAL_COPY_VALUE(result, array_ptr); + if (IS_VAR != IS_TMP_VAR) { + Z_ADDREF_P(array_ptr); + } + + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(result) = (uint32_t) -1; + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -21475,6 +21482,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z ZEND_VM_NEXT_OPCODE(); } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { + HashTable *properties; if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); @@ -21493,8 +21501,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); + properties = Z_OBJPROP_P(array_ptr); + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1; + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -27665,8 +27680,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -34862,8 +34880,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -37667,6 +37688,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN } } + ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } @@ -38092,14 +38114,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { zend_object *zobj = Z_OBJ_P(array_ptr); if (!zobj->ce->get_iterator) { - HashTable *properties; - - result = EX_VAR(opline->result.var); - ZVAL_OBJ(result, zobj); - if (IS_CV != IS_TMP_VAR) { - GC_ADDREF(zobj); - } - properties = zobj->properties; + HashTable *properties = zobj->properties; if (properties) { if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { @@ -38110,7 +38125,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN } else { properties = zobj->handlers->get_properties(zobj); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); + + result = EX_VAR(opline->result.var); + ZVAL_COPY_VALUE(result, array_ptr); + if (IS_CV != IS_TMP_VAR) { + Z_ADDREF_P(array_ptr); + } + + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(result) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -38175,6 +38203,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE ZEND_VM_NEXT_OPCODE(); } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { + HashTable *properties; if (IS_CV == IS_VAR || IS_CV == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); @@ -38193,7 +38222,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } - Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); + + properties = Z_OBJPROP_P(array_ptr); + if (zend_hash_num_elements(properties) == 0) { + Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1; + + ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); + } + + Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { @@ -46539,8 +46576,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { SAVE_OPLINE(); retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); + } if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } } @@ -53089,7 +53129,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL, - (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_LABEL, (void*)&&ZEND_USER_OPCODE_SPEC_LABEL, (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL, (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL, @@ -54545,10 +54584,6 @@ ZEND_API void execute_ex(zend_execute_data *ex) VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC) ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); - HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER): - VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER) - ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - HYBRID_BREAK(); HYBRID_CASE(ZEND_USER_OPCODE_SPEC): VM_TRACE(ZEND_USER_OPCODE_SPEC) ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); @@ -54720,6 +54755,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } + goto zend_leave_helper_SPEC_LABEL; } @@ -54793,6 +54829,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } } + SAVE_OPLINE(); zend_observer_fcall_end(execute_data, return_value); goto zend_leave_helper_SPEC_LABEL; } @@ -56328,6 +56365,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } + goto zend_leave_helper_SPEC_LABEL; } @@ -56626,6 +56664,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } + goto zend_leave_helper_SPEC_LABEL; } @@ -57740,6 +57779,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) } } + goto zend_leave_helper_SPEC_LABEL; } @@ -61101,7 +61141,6 @@ void zend_vm_init(void) ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER, ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER, ZEND_USER_OPCODE_SPEC_HANDLER, ZEND_ASSERT_CHECK_SPEC_HANDLER, ZEND_JMP_SET_SPEC_CONST_HANDLER, @@ -62382,30 +62421,31 @@ void zend_vm_init(void) 2294, 2295, 2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2, - 2321 | SPEC_RULE_OBSERVER, + 2321, + 2322, 2323, - 2324, - 2325 | SPEC_RULE_OP1, - 2330, - 2331 | SPEC_RULE_ISSET, - 2333 | SPEC_RULE_OP2, - 2338, - 2339 | SPEC_RULE_OP1, - 2344 | SPEC_RULE_OBSERVER, - 2346, - 2347 | SPEC_RULE_OP1 | SPEC_RULE_OP2, - 2372 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER, + 2324 | SPEC_RULE_OP1, + 2329, + 2330 | SPEC_RULE_ISSET, + 2332 | SPEC_RULE_OP2, + 2337, + 2338 | SPEC_RULE_OP1, + 2343 | SPEC_RULE_OBSERVER, + 2345, + 2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2, + 2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER, + 2381, 2382, 2383, 2384, - 2385, - 2386 | SPEC_RULE_OP1, + 2385 | SPEC_RULE_OP1, + 2390, 2391, - 2392, - 2393 | SPEC_RULE_OP1, - 2398 | SPEC_RULE_OP1 | SPEC_RULE_OP2, - 2423, - 2424 | SPEC_RULE_OP1, + 2392 | SPEC_RULE_OP1, + 2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2, + 2422, + 2423 | SPEC_RULE_OP1, + 2428, 2429, 2430, 2431, @@ -62413,27 +62453,26 @@ void zend_vm_init(void) 2433, 2434, 2435, - 2436, - 2437 | SPEC_RULE_OP1, + 2436 | SPEC_RULE_OP1, + 2441, 2442, 2443, - 2444, - 2445 | SPEC_RULE_OP2, - 2450, - 2451 | SPEC_RULE_OP1, - 2456 | SPEC_RULE_OP1, - 2461 | SPEC_RULE_OP1, - 2466 | SPEC_RULE_OP1, - 2471 | SPEC_RULE_OP1, - 2476, - 2477 | SPEC_RULE_OP1, - 2482 | SPEC_RULE_OP1 | SPEC_RULE_OP2, - 2507 | SPEC_RULE_OP1, - 2512 | SPEC_RULE_OP1 | SPEC_RULE_OP2, - 2537 | SPEC_RULE_OP1, - 2542 | SPEC_RULE_OP1, - 2547, - 3451 + 2444 | SPEC_RULE_OP2, + 2449, + 2450 | SPEC_RULE_OP1, + 2455 | SPEC_RULE_OP1, + 2460 | SPEC_RULE_OP1, + 2465 | SPEC_RULE_OP1, + 2470 | SPEC_RULE_OP1, + 2475, + 2476 | SPEC_RULE_OP1, + 2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2, + 2506 | SPEC_RULE_OP1, + 2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2, + 2536 | SPEC_RULE_OP1, + 2541 | SPEC_RULE_OP1, + 2546, + 3450 }; #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) zend_opcode_handler_funcs = labels; @@ -62606,7 +62645,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2550 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2549 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } @@ -62614,7 +62653,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2575 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2574 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } @@ -62622,7 +62661,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2600 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2599 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } @@ -62633,17 +62672,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2625 | SPEC_RULE_OP1 | SPEC_RULE_OP2; + spec = 2624 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2650 | SPEC_RULE_OP1 | SPEC_RULE_OP2; + spec = 2649 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2675 | SPEC_RULE_OP1 | SPEC_RULE_OP2; + spec = 2674 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } break; case ZEND_MUL: @@ -62654,17 +62693,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2700 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2699 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2725 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2724 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2750 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 2749 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_IDENTICAL: @@ -62675,14 +62714,14 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2775 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2850 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) { - spec = 3075 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 3074 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_NOT_IDENTICAL: @@ -62693,14 +62732,14 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2925 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3000 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) { - spec = 3080 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; + spec = 3079 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_EQUAL: @@ -62711,12 +62750,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2775 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2850 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_NOT_EQUAL: @@ -62727,12 +62766,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 2925 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3000 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; + spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_SMALLER: @@ -62740,12 +62779,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3085 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; + spec = 3084 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3160 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; + spec = 3159 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } break; case ZEND_IS_SMALLER_OR_EQUAL: @@ -62753,74 +62792,74 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3235 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; + spec = 3234 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3310 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; + spec = 3309 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } break; case ZEND_QM_ASSIGN: if (op1_info == MAY_BE_LONG) { - spec = 3397 | SPEC_RULE_OP1; + spec = 3396 | SPEC_RULE_OP1; } else if (op1_info == MAY_BE_DOUBLE) { - spec = 3402 | SPEC_RULE_OP1; + spec = 3401 | SPEC_RULE_OP1; } else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) { - spec = 3407 | SPEC_RULE_OP1; + spec = 3406 | SPEC_RULE_OP1; } break; case ZEND_PRE_INC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { - spec = 3385 | SPEC_RULE_RETVAL; + spec = 3384 | SPEC_RULE_RETVAL; } else if (op1_info == MAY_BE_LONG) { - spec = 3387 | SPEC_RULE_RETVAL; + spec = 3386 | SPEC_RULE_RETVAL; } break; case ZEND_PRE_DEC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { - spec = 3389 | SPEC_RULE_RETVAL; + spec = 3388 | SPEC_RULE_RETVAL; } else if (op1_info == MAY_BE_LONG) { - spec = 3391 | SPEC_RULE_RETVAL; + spec = 3390 | SPEC_RULE_RETVAL; } break; case ZEND_POST_INC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { - spec = 3393; + spec = 3392; } else if (op1_info == MAY_BE_LONG) { - spec = 3394; + spec = 3393; } break; case ZEND_POST_DEC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { - spec = 3395; + spec = 3394; } else if (op1_info == MAY_BE_LONG) { - spec = 3396; + spec = 3395; } break; case ZEND_JMP: if (OP_JMP_ADDR(op, op->op1) > op) { - spec = 2549; + spec = 2548; } break; case ZEND_RECV: if (op->op2.num == MAY_BE_ANY) { - spec = 2548; + spec = 2547; } break; case ZEND_SEND_VAL: if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) { - spec = 3447; + spec = 3446; } break; case ZEND_SEND_VAR_EX: if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) { - spec = 3442 | SPEC_RULE_OP1; + spec = 3441 | SPEC_RULE_OP1; } break; case ZEND_FE_FETCH_R: if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) { - spec = 3449 | SPEC_RULE_RETVAL; + spec = 3448 | SPEC_RULE_RETVAL; } break; case ZEND_FETCH_DIM_R: @@ -62828,17 +62867,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } - spec = 3412 | SPEC_RULE_OP1 | SPEC_RULE_OP2; + spec = 3411 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } break; case ZEND_SEND_VAL_EX: if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) { - spec = 3448; + spec = 3447; } break; case ZEND_SEND_VAR: if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) { - spec = 3437 | SPEC_RULE_OP1; + spec = 3436 | SPEC_RULE_OP1; } break; case ZEND_BW_OR: diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 3346a59cfa620..f8baea0d053c7 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -794,6 +794,7 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null) ($extra_spec['ISSET'] == 0 ? "\\0" : "opline->extended_value") : "\\0", "/ZEND_OBSERVER_ENABLED/" => isset($extra_spec['OBSERVER']) && $extra_spec['OBSERVER'] == 1 ? "1" : "0", + "/ZEND_OBSERVER_SAVE_OPLINE\(\)/" => isset($extra_spec['OBSERVER']) && $extra_spec['OBSERVER'] == 1 ? "SAVE_OPLINE()" : "", "/ZEND_OBSERVER_FCALL_BEGIN\(\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ? ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_fcall_begin(\\1)") : "", diff --git a/Zend/zend_vm_handlers.h b/Zend/zend_vm_handlers.h index fb1251a185321..a2e85dde9b16b 100644 --- a/Zend/zend_vm_handlers.h +++ b/Zend/zend_vm_handlers.h @@ -1185,666 +1185,665 @@ _(2318, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \ _(2320, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \ _(2321, ZEND_HANDLE_EXCEPTION_SPEC) \ - _(2322, ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER) \ - _(2323, ZEND_USER_OPCODE_SPEC) \ - _(2324, ZEND_ASSERT_CHECK_SPEC) \ - _(2325, ZEND_JMP_SET_SPEC_CONST) \ - _(2326, ZEND_JMP_SET_SPEC_TMP) \ - _(2327, ZEND_JMP_SET_SPEC_VAR) \ - _(2329, ZEND_JMP_SET_SPEC_CV) \ - _(2330, ZEND_UNSET_CV_SPEC_CV_UNUSED) \ - _(2331, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \ - _(2332, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \ - _(2333, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \ + _(2322, ZEND_USER_OPCODE_SPEC) \ + _(2323, ZEND_ASSERT_CHECK_SPEC) \ + _(2324, ZEND_JMP_SET_SPEC_CONST) \ + _(2325, ZEND_JMP_SET_SPEC_TMP) \ + _(2326, ZEND_JMP_SET_SPEC_VAR) \ + _(2328, ZEND_JMP_SET_SPEC_CV) \ + _(2329, ZEND_UNSET_CV_SPEC_CV_UNUSED) \ + _(2330, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \ + _(2331, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \ + _(2332, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \ + _(2333, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \ _(2334, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \ - _(2335, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \ - _(2337, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \ - _(2338, ZEND_SEPARATE_SPEC_VAR_UNUSED) \ + _(2336, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \ + _(2337, ZEND_SEPARATE_SPEC_VAR_UNUSED) \ + _(2339, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \ _(2340, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \ - _(2341, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \ - _(2342, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \ - _(2343, ZEND_FETCH_CLASS_NAME_SPEC_CV) \ - _(2344, ZEND_CALL_TRAMPOLINE_SPEC) \ - _(2345, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \ - _(2346, ZEND_DISCARD_EXCEPTION_SPEC) \ - _(2347, ZEND_YIELD_SPEC_CONST_CONST) \ + _(2341, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \ + _(2342, ZEND_FETCH_CLASS_NAME_SPEC_CV) \ + _(2343, ZEND_CALL_TRAMPOLINE_SPEC) \ + _(2344, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \ + _(2345, ZEND_DISCARD_EXCEPTION_SPEC) \ + _(2346, ZEND_YIELD_SPEC_CONST_CONST) \ + _(2347, ZEND_YIELD_SPEC_CONST_TMPVAR) \ _(2348, ZEND_YIELD_SPEC_CONST_TMPVAR) \ - _(2349, ZEND_YIELD_SPEC_CONST_TMPVAR) \ - _(2350, ZEND_YIELD_SPEC_CONST_UNUSED) \ - _(2351, ZEND_YIELD_SPEC_CONST_CV) \ - _(2352, ZEND_YIELD_SPEC_TMP_CONST) \ + _(2349, ZEND_YIELD_SPEC_CONST_UNUSED) \ + _(2350, ZEND_YIELD_SPEC_CONST_CV) \ + _(2351, ZEND_YIELD_SPEC_TMP_CONST) \ + _(2352, ZEND_YIELD_SPEC_TMP_TMPVAR) \ _(2353, ZEND_YIELD_SPEC_TMP_TMPVAR) \ - _(2354, ZEND_YIELD_SPEC_TMP_TMPVAR) \ - _(2355, ZEND_YIELD_SPEC_TMP_UNUSED) \ - _(2356, ZEND_YIELD_SPEC_TMP_CV) \ - _(2357, ZEND_YIELD_SPEC_VAR_CONST) \ + _(2354, ZEND_YIELD_SPEC_TMP_UNUSED) \ + _(2355, ZEND_YIELD_SPEC_TMP_CV) \ + _(2356, ZEND_YIELD_SPEC_VAR_CONST) \ + _(2357, ZEND_YIELD_SPEC_VAR_TMPVAR) \ _(2358, ZEND_YIELD_SPEC_VAR_TMPVAR) \ - _(2359, ZEND_YIELD_SPEC_VAR_TMPVAR) \ - _(2360, ZEND_YIELD_SPEC_VAR_UNUSED) \ - _(2361, ZEND_YIELD_SPEC_VAR_CV) \ - _(2362, ZEND_YIELD_SPEC_UNUSED_CONST) \ + _(2359, ZEND_YIELD_SPEC_VAR_UNUSED) \ + _(2360, ZEND_YIELD_SPEC_VAR_CV) \ + _(2361, ZEND_YIELD_SPEC_UNUSED_CONST) \ + _(2362, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \ _(2363, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \ - _(2364, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \ - _(2365, ZEND_YIELD_SPEC_UNUSED_UNUSED) \ - _(2366, ZEND_YIELD_SPEC_UNUSED_CV) \ - _(2367, ZEND_YIELD_SPEC_CV_CONST) \ + _(2364, ZEND_YIELD_SPEC_UNUSED_UNUSED) \ + _(2365, ZEND_YIELD_SPEC_UNUSED_CV) \ + _(2366, ZEND_YIELD_SPEC_CV_CONST) \ + _(2367, ZEND_YIELD_SPEC_CV_TMPVAR) \ _(2368, ZEND_YIELD_SPEC_CV_TMPVAR) \ - _(2369, ZEND_YIELD_SPEC_CV_TMPVAR) \ - _(2370, ZEND_YIELD_SPEC_CV_UNUSED) \ - _(2371, ZEND_YIELD_SPEC_CV_CV) \ - _(2372, ZEND_GENERATOR_RETURN_SPEC_CONST) \ - _(2373, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ - _(2374, ZEND_GENERATOR_RETURN_SPEC_TMP) \ - _(2375, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ - _(2376, ZEND_GENERATOR_RETURN_SPEC_VAR) \ - _(2377, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ - _(2380, ZEND_GENERATOR_RETURN_SPEC_CV) \ - _(2381, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ - _(2382, ZEND_FAST_CALL_SPEC) \ - _(2383, ZEND_FAST_RET_SPEC) \ - _(2384, ZEND_RECV_VARIADIC_SPEC_UNUSED) \ - _(2385, ZEND_SEND_UNPACK_SPEC) \ - _(2386, ZEND_YIELD_FROM_SPEC_CONST) \ + _(2369, ZEND_YIELD_SPEC_CV_UNUSED) \ + _(2370, ZEND_YIELD_SPEC_CV_CV) \ + _(2371, ZEND_GENERATOR_RETURN_SPEC_CONST) \ + _(2372, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ + _(2373, ZEND_GENERATOR_RETURN_SPEC_TMP) \ + _(2374, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ + _(2375, ZEND_GENERATOR_RETURN_SPEC_VAR) \ + _(2376, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ + _(2379, ZEND_GENERATOR_RETURN_SPEC_CV) \ + _(2380, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \ + _(2381, ZEND_FAST_CALL_SPEC) \ + _(2382, ZEND_FAST_RET_SPEC) \ + _(2383, ZEND_RECV_VARIADIC_SPEC_UNUSED) \ + _(2384, ZEND_SEND_UNPACK_SPEC) \ + _(2385, ZEND_YIELD_FROM_SPEC_CONST) \ + _(2386, ZEND_YIELD_FROM_SPEC_TMPVAR) \ _(2387, ZEND_YIELD_FROM_SPEC_TMPVAR) \ - _(2388, ZEND_YIELD_FROM_SPEC_TMPVAR) \ - _(2390, ZEND_YIELD_FROM_SPEC_CV) \ - _(2391, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \ - _(2392, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \ - _(2393, ZEND_COALESCE_SPEC_CONST) \ - _(2394, ZEND_COALESCE_SPEC_TMP) \ - _(2395, ZEND_COALESCE_SPEC_VAR) \ - _(2397, ZEND_COALESCE_SPEC_CV) \ - _(2398, ZEND_SPACESHIP_SPEC_CONST_CONST) \ + _(2389, ZEND_YIELD_FROM_SPEC_CV) \ + _(2390, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \ + _(2391, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \ + _(2392, ZEND_COALESCE_SPEC_CONST) \ + _(2393, ZEND_COALESCE_SPEC_TMP) \ + _(2394, ZEND_COALESCE_SPEC_VAR) \ + _(2396, ZEND_COALESCE_SPEC_CV) \ + _(2397, ZEND_SPACESHIP_SPEC_CONST_CONST) \ + _(2398, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \ _(2399, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \ - _(2400, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \ - _(2402, ZEND_SPACESHIP_SPEC_CONST_CV) \ - _(2403, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ + _(2401, ZEND_SPACESHIP_SPEC_CONST_CV) \ + _(2402, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ + _(2403, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2404, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ - _(2405, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ - _(2407, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ - _(2408, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ + _(2406, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ + _(2407, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ + _(2408, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2409, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ - _(2410, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ - _(2412, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ - _(2418, ZEND_SPACESHIP_SPEC_CV_CONST) \ + _(2411, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ + _(2417, ZEND_SPACESHIP_SPEC_CV_CONST) \ + _(2418, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \ _(2419, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \ - _(2420, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \ - _(2422, ZEND_SPACESHIP_SPEC_CV_CV) \ - _(2423, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \ - _(2424, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \ - _(2427, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \ - _(2429, ZEND_FETCH_STATIC_PROP_R_SPEC) \ - _(2430, ZEND_FETCH_STATIC_PROP_W_SPEC) \ - _(2431, ZEND_FETCH_STATIC_PROP_RW_SPEC) \ - _(2432, ZEND_FETCH_STATIC_PROP_IS_SPEC) \ - _(2433, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \ - _(2434, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \ - _(2435, ZEND_UNSET_STATIC_PROP_SPEC) \ - _(2436, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \ - _(2437, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \ - _(2439, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \ - _(2440, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \ - _(2442, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \ - _(2443, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \ - _(2444, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \ - _(2445, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \ - _(2448, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \ - _(2450, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \ - _(2451, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \ + _(2421, ZEND_SPACESHIP_SPEC_CV_CV) \ + _(2422, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \ + _(2423, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \ + _(2426, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \ + _(2428, ZEND_FETCH_STATIC_PROP_R_SPEC) \ + _(2429, ZEND_FETCH_STATIC_PROP_W_SPEC) \ + _(2430, ZEND_FETCH_STATIC_PROP_RW_SPEC) \ + _(2431, ZEND_FETCH_STATIC_PROP_IS_SPEC) \ + _(2432, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \ + _(2433, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \ + _(2434, ZEND_UNSET_STATIC_PROP_SPEC) \ + _(2435, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \ + _(2436, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \ + _(2438, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \ + _(2439, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \ + _(2441, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \ + _(2442, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \ + _(2443, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \ + _(2444, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \ + _(2447, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \ + _(2449, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \ + _(2450, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \ + _(2451, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ _(2452, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ - _(2453, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ - _(2455, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ - _(2456, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \ + _(2454, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ + _(2455, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \ + _(2456, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ _(2457, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ - _(2458, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ - _(2460, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ - _(2461, ZEND_IN_ARRAY_SPEC_CONST_CONST) \ - _(2462, ZEND_IN_ARRAY_SPEC_TMP_CONST) \ - _(2463, ZEND_IN_ARRAY_SPEC_VAR_CONST) \ - _(2465, ZEND_IN_ARRAY_SPEC_CV_CONST) \ - _(2466, ZEND_COUNT_SPEC_CONST_UNUSED) \ + _(2459, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ + _(2460, ZEND_IN_ARRAY_SPEC_CONST_CONST) \ + _(2461, ZEND_IN_ARRAY_SPEC_TMP_CONST) \ + _(2462, ZEND_IN_ARRAY_SPEC_VAR_CONST) \ + _(2464, ZEND_IN_ARRAY_SPEC_CV_CONST) \ + _(2465, ZEND_COUNT_SPEC_CONST_UNUSED) \ + _(2466, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \ _(2467, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \ - _(2468, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \ - _(2470, ZEND_COUNT_SPEC_CV_UNUSED) \ - _(2471, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \ + _(2469, ZEND_COUNT_SPEC_CV_UNUSED) \ + _(2470, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \ + _(2471, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \ _(2472, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \ - _(2473, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \ - _(2474, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \ - _(2475, ZEND_GET_CLASS_SPEC_CV_UNUSED) \ - _(2476, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \ - _(2477, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \ - _(2478, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \ - _(2479, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \ - _(2481, ZEND_GET_TYPE_SPEC_CV_UNUSED) \ - _(2482, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \ + _(2473, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \ + _(2474, ZEND_GET_CLASS_SPEC_CV_UNUSED) \ + _(2475, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \ + _(2476, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \ + _(2477, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \ + _(2478, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \ + _(2480, ZEND_GET_TYPE_SPEC_CV_UNUSED) \ + _(2481, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \ + _(2482, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \ _(2483, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \ - _(2484, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \ - _(2486, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \ - _(2487, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \ + _(2485, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \ + _(2486, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \ + _(2487, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ _(2488, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ - _(2489, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ - _(2491, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \ - _(2492, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \ + _(2490, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \ + _(2491, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \ + _(2492, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ _(2493, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ - _(2494, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \ - _(2496, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \ - _(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \ + _(2495, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \ + _(2501, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \ + _(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \ _(2503, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \ - _(2504, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \ - _(2506, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \ - _(2507, ZEND_MATCH_SPEC_CONST_CONST) \ + _(2505, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \ + _(2506, ZEND_MATCH_SPEC_CONST_CONST) \ + _(2507, ZEND_MATCH_SPEC_TMPVARCV_CONST) \ _(2508, ZEND_MATCH_SPEC_TMPVARCV_CONST) \ - _(2509, ZEND_MATCH_SPEC_TMPVARCV_CONST) \ - _(2511, ZEND_MATCH_SPEC_TMPVARCV_CONST) \ - _(2517, ZEND_CASE_STRICT_SPEC_TMP_CONST) \ - _(2518, ZEND_CASE_STRICT_SPEC_TMP_TMP) \ - _(2519, ZEND_CASE_STRICT_SPEC_TMP_VAR) \ - _(2521, ZEND_CASE_STRICT_SPEC_TMP_CV) \ - _(2522, ZEND_CASE_STRICT_SPEC_VAR_CONST) \ - _(2523, ZEND_CASE_STRICT_SPEC_VAR_TMP) \ - _(2524, ZEND_CASE_STRICT_SPEC_VAR_VAR) \ - _(2526, ZEND_CASE_STRICT_SPEC_VAR_CV) \ - _(2537, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \ + _(2510, ZEND_MATCH_SPEC_TMPVARCV_CONST) \ + _(2516, ZEND_CASE_STRICT_SPEC_TMP_CONST) \ + _(2517, ZEND_CASE_STRICT_SPEC_TMP_TMP) \ + _(2518, ZEND_CASE_STRICT_SPEC_TMP_VAR) \ + _(2520, ZEND_CASE_STRICT_SPEC_TMP_CV) \ + _(2521, ZEND_CASE_STRICT_SPEC_VAR_CONST) \ + _(2522, ZEND_CASE_STRICT_SPEC_VAR_TMP) \ + _(2523, ZEND_CASE_STRICT_SPEC_VAR_VAR) \ + _(2525, ZEND_CASE_STRICT_SPEC_VAR_CV) \ + _(2536, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \ + _(2537, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \ _(2538, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \ - _(2539, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \ - _(2541, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \ - _(2542, ZEND_JMP_NULL_SPEC_CONST) \ + _(2540, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \ + _(2541, ZEND_JMP_NULL_SPEC_CONST) \ + _(2542, ZEND_JMP_NULL_SPEC_TMPVARCV) \ _(2543, ZEND_JMP_NULL_SPEC_TMPVARCV) \ - _(2544, ZEND_JMP_NULL_SPEC_TMPVARCV) \ - _(2546, ZEND_JMP_NULL_SPEC_TMPVARCV) \ - _(2547, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \ - _(2548, ZEND_RECV_NOTYPE_SPEC) \ - _(2549, ZEND_JMP_FORWARD_SPEC) \ - _(2555, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2545, ZEND_JMP_NULL_SPEC_TMPVARCV) \ + _(2546, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \ + _(2547, ZEND_RECV_NOTYPE_SPEC) \ + _(2548, ZEND_JMP_FORWARD_SPEC) \ + _(2554, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2555, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2556, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2557, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2559, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2560, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2558, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2559, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2560, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2561, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2562, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2564, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2570, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2563, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2569, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2570, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2571, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2572, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2574, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2580, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2573, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2579, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2580, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2581, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2582, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2584, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2585, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2583, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2584, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2585, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2586, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2587, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2589, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2595, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2588, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2594, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ + _(2595, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2596, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2597, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2599, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2605, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2598, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2604, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2605, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2606, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2607, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2609, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2610, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2608, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2609, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2610, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2611, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2612, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2614, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2620, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2613, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2619, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2620, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2621, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2622, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2624, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2623, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2625, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ _(2626, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ - _(2627, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ - _(2629, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ - _(2630, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2628, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ + _(2629, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2630, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2631, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2632, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2634, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2635, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2633, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2634, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2635, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2636, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2637, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2639, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2645, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2638, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2644, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2645, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2646, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2647, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2649, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2648, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2650, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ _(2651, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ - _(2652, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ - _(2654, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ - _(2655, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2653, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ + _(2654, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2655, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2656, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2657, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2659, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2660, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2658, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2659, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2660, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2661, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2662, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2664, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2670, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2663, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2669, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ + _(2670, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2671, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2672, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2674, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2673, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2675, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ _(2676, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(2677, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(2679, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(2680, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2678, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(2679, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2680, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2681, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2682, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2684, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2685, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2683, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2684, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2685, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2686, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2687, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2689, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2695, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2688, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2694, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2695, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2696, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2697, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2699, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2705, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2698, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2704, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2705, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2706, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2707, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2709, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2710, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2708, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2709, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2710, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2711, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2712, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2714, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2720, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2713, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2719, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ + _(2720, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(2721, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2722, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2724, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ - _(2730, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2723, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ + _(2729, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2730, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2731, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2732, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2734, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2735, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2733, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2734, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2735, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2736, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2737, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2739, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2745, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2738, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2744, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ + _(2745, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(2746, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2747, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2749, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2755, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2748, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2754, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2755, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2756, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2757, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2759, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2760, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2758, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2759, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2760, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2761, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2762, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2764, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2770, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2763, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2769, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2770, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(2771, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2772, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2774, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2790, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2791, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2792, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2793, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2794, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2795, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2796, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2797, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2798, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2802, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2803, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2804, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2805, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2806, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2810, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2811, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2812, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2813, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2817, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2818, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2819, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2835, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2836, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2837, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2840, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2841, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2842, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2843, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2847, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2848, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2849, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2865, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(2866, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2867, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2868, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2869, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2870, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2871, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2872, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2873, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2877, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2878, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2879, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2880, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(2881, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2885, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2886, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2887, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2888, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2892, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2893, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2894, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2910, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(2911, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2912, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2915, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2916, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2917, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2918, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2922, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(2923, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2924, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2940, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2941, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2942, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2943, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2944, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2945, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2946, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2947, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2948, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2952, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2953, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2954, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2955, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2956, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2960, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2961, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2962, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2963, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2967, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2968, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2969, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2985, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(2986, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(2987, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2990, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2991, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2992, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2993, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(2997, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(2998, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(2999, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3015, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3016, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3017, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3018, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3019, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3020, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3021, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3022, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3023, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3027, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3028, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3029, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3030, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3031, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3035, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3036, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3037, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3038, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3042, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3043, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3044, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3060, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3061, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3062, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3065, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3066, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3067, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3068, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3072, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3073, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3074, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3075, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \ - _(3079, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \ - _(3080, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \ - _(3084, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \ - _(3088, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ - _(3089, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3090, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3091, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ - _(3092, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3093, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3097, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ - _(3098, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3099, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3100, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ - _(3101, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3102, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3103, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3104, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3105, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3106, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3107, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3108, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3112, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3113, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3114, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3115, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ - _(3116, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3120, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3121, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3122, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3123, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3127, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3128, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3129, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3145, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ - _(3146, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3150, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3151, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3152, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3153, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3157, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3158, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3159, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3163, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3164, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3165, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3166, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3167, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3168, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3172, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3173, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3177, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3178, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3179, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3180, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3181, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3182, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3183, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3187, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3188, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3189, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3190, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3191, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3195, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3196, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3197, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3198, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3202, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3203, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3204, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3220, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3221, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3225, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3226, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3227, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3228, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3232, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3233, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3234, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3238, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ - _(3239, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3240, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3241, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ - _(3242, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3243, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3247, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ - _(3248, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3252, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3253, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3254, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3255, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3256, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3257, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3258, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3262, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3263, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3264, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3265, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(3266, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3270, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3271, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3272, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3273, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3277, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3278, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3279, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3295, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ - _(3296, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3300, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3301, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3302, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3303, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3307, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ - _(3308, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3309, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3313, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3314, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3315, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3316, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3317, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3318, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3322, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ - _(3323, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ - _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ - _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3327, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3328, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3329, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3330, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3331, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3332, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3333, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3337, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3338, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3339, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3340, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3341, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3345, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3346, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3347, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3348, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3352, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3353, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3354, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3370, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ - _(3371, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ - _(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ - _(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3375, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3376, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3377, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3378, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3382, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ - _(3383, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ - _(3384, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ - _(3385, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ - _(3386, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ - _(3387, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \ - _(3388, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \ - _(3389, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ - _(3390, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ - _(3391, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \ - _(3392, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \ - _(3393, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \ - _(3394, ZEND_POST_INC_LONG_SPEC_CV) \ - _(3395, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \ - _(3396, ZEND_POST_DEC_LONG_SPEC_CV) \ - _(3397, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \ + _(2773, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2789, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2790, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2791, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2792, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2793, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2794, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2795, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2796, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2797, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2801, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2802, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2803, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2804, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2805, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2806, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2810, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2811, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2812, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2816, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2817, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2818, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2834, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2835, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2836, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2837, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2840, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2841, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2842, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2846, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2847, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2848, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2864, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2865, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2866, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2867, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2868, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2869, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2870, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2871, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2872, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2876, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2877, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2878, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2879, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2880, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2881, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2885, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2886, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2887, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2891, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2892, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2893, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2909, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(2910, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2911, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2912, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2915, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2916, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2917, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2921, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(2922, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2923, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2939, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2940, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2941, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2942, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2943, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2944, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2945, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2946, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2947, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2951, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2952, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2953, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2954, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2955, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2956, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2960, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2961, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2962, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2966, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2967, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2968, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2984, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(2985, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(2986, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(2987, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2990, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2991, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2992, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(2996, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(2997, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(2998, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3014, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3015, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3016, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3017, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3018, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3019, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3020, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3021, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3022, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3026, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3027, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3028, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3029, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3030, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3031, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3035, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3036, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3037, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3041, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3042, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3043, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3059, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3060, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3061, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3062, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3065, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3066, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3067, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3071, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3072, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3073, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3074, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \ + _(3078, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \ + _(3079, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \ + _(3083, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \ + _(3087, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ + _(3088, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3089, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3090, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ + _(3091, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3092, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3096, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ + _(3097, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3098, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3099, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ + _(3100, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3101, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3102, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3103, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3104, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3105, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3106, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3107, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3111, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3112, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3113, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3114, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ + _(3115, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3116, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3120, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3121, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3122, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3126, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3127, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3128, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3144, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ + _(3145, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3146, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3150, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3151, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3152, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3156, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3157, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3158, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3162, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3163, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3164, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3165, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3166, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3167, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3171, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3172, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3173, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3177, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3178, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3179, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3180, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3181, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3182, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3186, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3187, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3188, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3189, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3190, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3191, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3195, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3196, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3197, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3201, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3202, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3203, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3219, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3220, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3221, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3225, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3226, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3227, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3231, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3232, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3233, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3237, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ + _(3238, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3239, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3240, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ + _(3241, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3242, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3246, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ + _(3247, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3248, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3252, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3253, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3254, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3255, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3256, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3257, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3261, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3262, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3263, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3264, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(3265, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3266, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3270, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3271, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3272, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3276, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3277, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3278, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3294, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ + _(3295, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3296, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3300, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3301, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3302, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3306, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ + _(3307, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3308, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3312, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3313, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3314, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3315, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3316, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3317, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3321, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ + _(3322, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ + _(3323, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ + _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3327, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3328, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3329, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3330, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3331, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3332, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3336, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3337, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3338, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3339, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3340, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3341, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3345, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3346, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3347, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3351, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3352, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3353, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3369, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ + _(3370, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ + _(3371, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ + _(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3375, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3376, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3377, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3381, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ + _(3382, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ + _(3383, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ + _(3384, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ + _(3385, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ + _(3386, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \ + _(3387, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \ + _(3388, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ + _(3389, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ + _(3390, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \ + _(3391, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \ + _(3392, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \ + _(3393, ZEND_POST_INC_LONG_SPEC_CV) \ + _(3394, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \ + _(3395, ZEND_POST_DEC_LONG_SPEC_CV) \ + _(3396, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \ + _(3397, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \ _(3398, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \ - _(3399, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \ - _(3401, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \ - _(3402, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \ + _(3400, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \ + _(3401, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \ + _(3402, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ _(3403, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ - _(3404, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ - _(3406, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ - _(3407, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \ + _(3405, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ + _(3406, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \ + _(3407, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ _(3408, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ - _(3409, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ - _(3411, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ + _(3410, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ + _(3412, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ _(3413, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ - _(3414, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ - _(3416, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ - _(3417, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ + _(3415, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ + _(3416, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ + _(3417, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3418, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3419, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3421, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3422, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ + _(3420, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ + _(3421, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ + _(3422, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3423, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3424, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3426, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ - _(3432, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \ + _(3425, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ + _(3431, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \ + _(3432, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ _(3433, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ - _(3434, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ - _(3436, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ - _(3439, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \ - _(3441, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \ - _(3444, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \ - _(3446, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \ - _(3447, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \ - _(3448, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \ - _(3449, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \ - _(3450, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \ - _(3450+1, ZEND_NULL) + _(3435, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ + _(3438, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \ + _(3440, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \ + _(3443, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \ + _(3445, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \ + _(3446, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \ + _(3447, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \ + _(3448, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \ + _(3449, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \ + _(3449+1, ZEND_NULL) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 20198f888be42..1932b1cdeeebb 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -3,6 +3,7 @@ trigger: branches: include: - PHP-7.4 + - PHP-8.0 - master paths: exclude: @@ -11,6 +12,15 @@ trigger: - UPGRADING - UPGRADING.INTERNALS +schedules: + - cron: "0 1 * * *" + displayName: Nightly build + branches: + include: + - PHP-7.4 + - PHP-8.0 + - master + jobs: - template: azure/job.yml parameters: @@ -74,7 +84,7 @@ jobs: parameters: configurationName: DEBUG_ZTS_MSAN configurationParameters: '--enable-debug --enable-zts' - runTestsParameters: --asan + runTestsParameters: --msan timeoutInMinutes: 90 - template: azure/community_job.yml parameters: @@ -92,3 +102,9 @@ jobs: parameters: configurationName: DEBUG_NTS_FILE_CACHE configurationParameters: '--enable-debug --disable-zts' + timeoutInMinutes: 90 + - template: azure/job.yml + parameters: + configurationName: DEBUG_NTS_REPEAT + configurationParameters: '--enable-debug --disable-zts' + runTestsParameters: '--repeat 2' diff --git a/azure/apt.yml b/azure/apt.yml index 71f58ce8da2ad..aa27d4a5513d5 100644 --- a/azure/apt.yml +++ b/azure/apt.yml @@ -42,6 +42,11 @@ steps: snmp-mibs-downloader \ unixodbc-dev \ llvm \ - libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd \ + libc-client-dev \ + libkrb5-dev \ + dovecot-core \ + dovecot-pop3d \ + dovecot-imapd \ + sendmail \ ${{ parameters.packages }} displayName: 'APT' diff --git a/azure/community_job.yml b/azure/community_job.yml index ade2603976ce9..3552326bb955e 100644 --- a/azure/community_job.yml +++ b/azure/community_job.yml @@ -51,25 +51,22 @@ jobs: - script: | git clone https://github.com/laravel/framework.git --branch=master --depth=1 cd framework + #php7.3 /usr/bin/composer require "doctrine/dbal:^3.0" --no-interaction php7.3 /usr/bin/composer install --no-progress + # Hack to disable a test that hangs on azure + sed -i 's/PHP_OS/"Darwin"/' tests/Filesystem/FilesystemTest.php export USE_ZEND_ALLOC=0 - sed -i 's/$exit = true/$exit = false/g' vendor/phpunit/phpunit/src/TextUI/Command.php - # Avoid test using exit(), which thus leaks. - # We can use USE_TRACKED_ALLOC=1 if more of these show up. - sed -i "s/function_exists('pcntl_fork')/false/" tests/Filesystem/FilesystemTest.php - # Work around PHP 8 incompatibility in Doctrine - sed -i 's/function query()/function query(...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php - sed -i 's/function setFetchMode($fetchMode, $arg2 = null, $arg3 = null)/function setFetchMode($fetchMode, $arg2 = null, $arg3 = null, ...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php - sed -i 's/public function getMessage();//' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php + export ASAN_OPTIONS=exitcode=139 php vendor/bin/phpunit + if [ $? -gt 128 ]; then + exit 1 + fi displayName: 'Test Laravel' - script: | - git clone https://github.com/symfony/symfony.git --branch=master --depth=1 + git clone https://github.com/symfony/symfony.git --depth=1 cd symfony php7.3 /usr/bin/composer install --no-progress php7.3 ./phpunit install - # Work around PHP 8 incompatibility in Doctrine - sed -i 's/function query()/function query(...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php export USE_ZEND_ALLOC=0 export USE_TRACKED_ALLOC=1 export ASAN_OPTIONS=exitcode=139 @@ -105,4 +102,12 @@ jobs: exit 1 fi displayName: 'Test PHPUnit' + - script: | + php7.3 /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress + cd symfony_demo + export USE_ZEND_ALLOC=0 + export USE_TRACKED_ALLOC=1 + sed -i 's/PHP_SAPI/"cli-server"/g' var/cache/dev/App_KernelDevDebugContainer.preload.php + php -d opcache.preload=var/cache/dev/App_KernelDevDebugContainer.preload.php public/index.php + displayName: 'Symfony Preloading' condition: or(succeeded(), failed()) diff --git a/azure/setup.yml b/azure/setup.yml index e0b4dc79da991..489df881596fb 100644 --- a/azure/setup.yml +++ b/azure/setup.yml @@ -20,8 +20,8 @@ steps: set -e sudo groupadd -g 5000 vmail sudo useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail - sudo cp ext/imap/tests/dovecot.conf /etc/dovecot/dovecot.conf - sudo cp ext/imap/tests/dovecotpass /etc/dovecot/dovecotpass + sudo cp ext/imap/tests/setup/dovecot.conf /etc/dovecot/dovecot.conf + sudo cp ext/imap/tests/setup/dovecotpass /etc/dovecot/dovecotpass sudo service dovecot restart displayName: 'Configure IMAP' diff --git a/build/gen_stub.php b/build/gen_stub.php index 56106dec90284..f8fce7fa01095 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -12,7 +12,12 @@ error_reporting(E_ALL); -function processDirectory(string $dir, Context $context) { +/** + * @return FileInfo[] + */ +function processDirectory(string $dir, Context $context): array { + $fileInfos = []; + $it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY @@ -20,47 +25,51 @@ function processDirectory(string $dir, Context $context) { foreach ($it as $file) { $pathName = $file->getPathName(); if (preg_match('/\.stub\.php$/', $pathName)) { - processStubFile($pathName, $context); + $fileInfo = processStubFile($pathName, $context); + if ($fileInfo) { + $fileInfos[] = $fileInfo; + } } } + + return $fileInfos; } -function processStubFile(string $stubFile, Context $context) { +function processStubFile(string $stubFile, Context $context): ?FileInfo { try { if (!file_exists($stubFile)) { throw new Exception("File $stubFile does not exist"); } - $arginfoFile = str_replace('.stub.php', '', $stubFile) - . ($context->legacy ? '_legacy' : '') . '_arginfo.h'; + $arginfoFile = str_replace('.stub.php', '_arginfo.h', $stubFile); + $legacyFile = str_replace('.stub.php', '_legacy_arginfo.h', $stubFile); + $stubCode = file_get_contents($stubFile); $stubHash = computeStubHash($stubCode); $oldStubHash = extractStubHash($arginfoFile); - if ($stubHash === $oldStubHash && $context->forceRegeneration === false) { + if ($stubHash === $oldStubHash && !$context->forceParse) { /* Stub file did not change, do not regenerate. */ - return; + return null; } initPhpParser(); $fileInfo = parseStubFile($stubCode); - if ($context->legacy) { + $arginfoCode = generateArgInfoCode($fileInfo, $stubHash); + if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($arginfoFile, $arginfoCode)) { + echo "Saved $arginfoFile\n"; + } + + if ($fileInfo->generateLegacyArginfo) { foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { $funcInfo->discardInfoForOldPhpVersions(); } - } - - $arginfoCode = generateArgInfoCode($fileInfo, $stubHash); - file_put_contents($arginfoFile, $arginfoCode); - - // Collect parameter name statistics. - foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { - foreach ($funcInfo->args as $argInfo) { - if (!isset($context->parameterStats[$argInfo->name])) { - $context->parameterStats[$argInfo->name] = 0; - } - $context->parameterStats[$argInfo->name]++; + $arginfoCode = generateArgInfoCode($fileInfo, $stubHash); + if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($legacyFile, $arginfoCode)) { + echo "Saved $legacyFile\n"; } - } + } + + return $fileInfo; } catch (Exception $e) { echo "In $stubFile:\n{$e->getMessage()}\n"; exit(1); @@ -85,10 +94,10 @@ function extractStubHash(string $arginfoFile): ?string { } class Context { + /** @var bool */ + public $forceParse = false; /** @var bool */ public $forceRegeneration = false; - /** @var array */ - public $parameterStats = []; } class SimpleType { @@ -104,6 +113,11 @@ public function __construct(string $name, bool $isBuiltin) { public static function fromNode(Node $node) { if ($node instanceof Node\Name) { + if ($node->toLowerString() === 'static') { + // PHP internally considers "static" a builtin type. + return new SimpleType($node->toString(), true); + } + assert($node->isFullyQualified()); return new SimpleType($node->toString(), false); } @@ -140,6 +154,8 @@ public function toTypeCode() { return "IS_ITERABLE"; case "mixed": return "IS_MIXED"; + case "static": + return "IS_STATIC"; default: throw new Exception("Not implemented: $this->name"); } @@ -168,6 +184,8 @@ public function toTypeMask() { return "MAY_BE_CALLABLE"; case "mixed": return "MAY_BE_ANY"; + case "static": + return "MAY_BE_STATIC"; default: throw new Exception("Not implemented: $this->name"); } @@ -341,6 +359,9 @@ interface FunctionOrMethodName { public function getDeclaration(): string; public function getArgInfoName(): string; public function __toString(): string; + public function isMethod(): bool; + public function isConstructor(): bool; + public function isDestructor(): bool; } class FunctionName implements FunctionOrMethodName { @@ -358,10 +379,6 @@ public function getNamespace(): ?string { return null; } - public function getShortName(): string { - return $this->name->getLast(); - } - public function getNonNamespacedName(): string { if ($this->name->isQualified()) { throw new Exception("Namespaced name not supported here"); @@ -369,8 +386,12 @@ public function getNonNamespacedName(): string { return $this->name->toString(); } + public function getDeclarationName(): string { + return $this->name->getLast(); + } + public function getDeclaration(): string { - return "ZEND_FUNCTION({$this->name->getLast()});\n"; + return "ZEND_FUNCTION({$this->getDeclarationName()});\n"; } public function getArgInfoName(): string { @@ -381,29 +402,57 @@ public function getArgInfoName(): string { public function __toString(): string { return $this->name->toString(); } + + public function isMethod(): bool { + return false; + } + + public function isConstructor(): bool { + return false; + } + + public function isDestructor(): bool { + return false; + } } class MethodName implements FunctionOrMethodName { + /** @var Name */ + private $className; /** @var string */ - public $className; - /** @var string */ - public $name; + public $methodName; - public function __construct(string $className, string $name) { + public function __construct(Name $className, string $methodName) { $this->className = $className; - $this->name = $name; + $this->methodName = $methodName; + } + + public function getDeclarationClassName(): string { + return implode('_', $this->className->parts); } public function getDeclaration(): string { - return "ZEND_METHOD($this->className, $this->name);\n"; + return "ZEND_METHOD({$this->getDeclarationClassName()}, $this->methodName);\n"; } public function getArgInfoName(): string { - return "arginfo_class_{$this->className}_{$this->name}"; + return "arginfo_class_{$this->getDeclarationClassName()}_{$this->methodName}"; } public function __toString(): string { - return "$this->className::$this->name"; + return "$this->className::$this->methodName"; + } + + public function isMethod(): bool { + return true; + } + + public function isConstructor(): bool { + return $this->methodName === "__construct"; + } + + public function isDestructor(): bool { + return $this->methodName === "__destruct"; } } @@ -428,6 +477,8 @@ class FuncInfo { /** @var FunctionOrMethodName */ public $name; /** @var int */ + public $classFlags; + /** @var int */ public $flags; /** @var string|null */ public $aliasType; @@ -435,6 +486,8 @@ class FuncInfo { public $alias; /** @var bool */ public $isDeprecated; + /** @var bool */ + public $verify; /** @var ArgInfo[] */ public $args; /** @var ReturnInfo */ @@ -446,26 +499,45 @@ class FuncInfo { public function __construct( FunctionOrMethodName $name, + int $classFlags, int $flags, ?string $aliasType, ?FunctionOrMethodName $alias, bool $isDeprecated, + bool $verify, array $args, ReturnInfo $return, int $numRequiredArgs, ?string $cond ) { $this->name = $name; + $this->classFlags = $classFlags; $this->flags = $flags; $this->aliasType = $aliasType; $this->alias = $alias; $this->isDeprecated = $isDeprecated; + $this->verify = $verify; $this->args = $args; $this->return = $return; $this->numRequiredArgs = $numRequiredArgs; $this->cond = $cond; } + public function isMethod(): bool + { + return $this->name->isMethod(); + } + + public function isFinalMethod(): bool + { + return ($this->flags & Class_::MODIFIER_FINAL) || ($this->classFlags & Class_::MODIFIER_FINAL); + } + + public function isInstanceMethod(): bool + { + return !($this->flags & Class_::MODIFIER_STATIC) && $this->isMethod() && !$this->name->isConstructor(); + } + public function equalsApartFromName(FuncInfo $other): bool { if (count($this->args) !== count($other->args)) { return false; @@ -510,58 +582,63 @@ public function getFunctionEntry(): string { if ($this->alias instanceof MethodName) { return sprintf( "\tZEND_MALIAS(%s, %s, %s, %s, %s)\n", - $this->alias->className, $this->name->name, $this->alias->name, $this->getArgInfoName(), $this->getFlagsAsString() + $this->alias->getDeclarationClassName(), $this->name->methodName, + $this->alias->methodName, $this->getArgInfoName(), $this->getFlagsAsString() ); } else if ($this->alias instanceof FunctionName) { return sprintf( "\tZEND_ME_MAPPING(%s, %s, %s, %s)\n", - $this->name->name, $this->alias->getNonNamespacedName(), + $this->name->methodName, $this->alias->getNonNamespacedName(), $this->getArgInfoName(), $this->getFlagsAsString() ); } else { throw new Error("Cannot happen"); } } else { + $declarationClassName = $this->name->getDeclarationClassName(); if ($this->flags & Class_::MODIFIER_ABSTRACT) { return sprintf( "\tZEND_ABSTRACT_ME_WITH_FLAGS(%s, %s, %s, %s)\n", - $this->name->className, $this->name->name, $this->getArgInfoName(), $this->getFlagsAsString() + $declarationClassName, $this->name->methodName, $this->getArgInfoName(), + $this->getFlagsAsString() ); } return sprintf( "\tZEND_ME(%s, %s, %s, %s)\n", - $this->name->className, $this->name->name, $this->getArgInfoName(), $this->getFlagsAsString() + $declarationClassName, $this->name->methodName, $this->getArgInfoName(), + $this->getFlagsAsString() ); } } else if ($this->name instanceof FunctionName) { $namespace = $this->name->getNamespace(); - $shortName = $this->name->getShortName(); + $declarationName = $this->name->getDeclarationName(); if ($this->alias && $this->isDeprecated) { return sprintf( "\tZEND_DEP_FALIAS(%s, %s, %s)\n", - $shortName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() + $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() ); } if ($this->alias) { return sprintf( "\tZEND_FALIAS(%s, %s, %s)\n", - $shortName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() + $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() ); } if ($this->isDeprecated) { - return sprintf("\tZEND_DEP_FE(%s, %s)\n", $shortName, $this->getArgInfoName()); + return sprintf( + "\tZEND_DEP_FE(%s, %s)\n", $declarationName, $this->getArgInfoName()); } if ($namespace) { return sprintf( "\tZEND_NS_FE(\"%s\", %s, %s)\n", - $namespace, $shortName, $this->getArgInfoName()); + $namespace, $declarationName, $this->getArgInfoName()); } else { - return sprintf("\tZEND_FE(%s, %s)\n", $shortName, $this->getArgInfoName()); + return sprintf("\tZEND_FE(%s, %s)\n", $declarationName, $this->getArgInfoName()); } } else { throw new Error("Cannot happen"); @@ -606,12 +683,12 @@ public function discardInfoForOldPhpVersions(): void { } class ClassInfo { - /** @var string */ + /** @var Name */ public $name; /** @var FuncInfo[] */ public $funcInfos; - public function __construct(string $name, array $funcInfos) { + public function __construct(Name $name, array $funcInfos) { $this->name = $name; $this->funcInfos = $funcInfos; } @@ -626,6 +703,8 @@ class FileInfo { public $generateFunctionEntries = false; /** @var string */ public $declarationPrefix = ""; + /** @var bool */ + public $generateLegacyArginfo = false; /** * @return iterable @@ -696,6 +775,7 @@ function parseDocComment(DocComment $comment): array { function parseFunctionLike( PrettyPrinterAbstract $prettyPrinter, FunctionOrMethodName $name, + int $classFlags, int $flags, Node\FunctionLike $func, ?string $cond @@ -705,6 +785,7 @@ function parseFunctionLike( $aliasType = null; $alias = null; $isDeprecated = false; + $verify = true; $haveDocReturnType = false; $docParamTypes = []; @@ -723,10 +804,12 @@ function parseFunctionLike( if (count($aliasParts) === 1) { $alias = new FunctionName(new Name($aliasParts[0])); } else { - $alias = new MethodName($aliasParts[0], $aliasParts[1]); + $alias = new MethodName(new Name($aliasParts[0]), $aliasParts[1]); } } else if ($tag->name === 'deprecated') { $isDeprecated = true; + } else if ($tag->name === 'no-verify') { + $verify = false; } else if ($tag->name === 'return') { $haveDocReturnType = true; } else if ($tag->name === 'param') { @@ -796,7 +879,7 @@ function parseFunctionLike( } $returnType = $func->getReturnType(); - if ($returnType === null && !$haveDocReturnType && strpos($name->name, '__') !== 0) { + if ($returnType === null && !$haveDocReturnType && !$name->isConstructor() && !$name->isDestructor()) { throw new Exception("Missing return type for function $name()"); } @@ -807,10 +890,12 @@ function parseFunctionLike( return new FuncInfo( $name, + $classFlags, $flags, $aliasType, $alias, $isDeprecated, + $verify, $args, $return, $numRequiredArgs, @@ -881,6 +966,7 @@ function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstrac $prettyPrinter, new FunctionName($stmt->namespacedName), 0, + 0, $stmt, $cond ); @@ -888,7 +974,7 @@ function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstrac } if ($stmt instanceof Stmt\ClassLike) { - $className = $stmt->name->toString(); + $className = $stmt->namespacedName; $methodInfos = []; foreach ($stmt->stmts as $classStmt) { $cond = handlePreprocessorConditions($conds, $classStmt); @@ -900,6 +986,11 @@ function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstrac throw new Exception("Not implemented {$classStmt->getType()}"); } + $classFlags = 0; + if ($stmt instanceof Class_) { + $classFlags = $stmt->flags; + } + $flags = $classStmt->flags; if ($stmt instanceof Stmt\Interface_) { $flags |= Class_::MODIFIER_ABSTRACT; @@ -912,6 +1003,7 @@ function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstrac $methodInfos[] = parseFunctionLike( $prettyPrinter, new MethodName($className, $classStmt->name->toString()), + $classFlags, $flags, $classStmt, $cond @@ -948,6 +1040,8 @@ protected function pName_FullyQualified(Name\FullyQualified $node) { if ($tag->name === 'generate-function-entries') { $fileInfo->generateFunctionEntries = true; $fileInfo->declarationPrefix = $tag->value ? $tag->value . " " : ""; + } else if ($tag->name === 'generate-legacy-arginfo') { + $fileInfo->generateLegacyArginfo = true; } } } @@ -1140,10 +1234,14 @@ function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) { } /** @param FuncInfo[] $funcInfos */ -function generateFunctionEntries(?string $className, array $funcInfos): string { +function generateFunctionEntries(?Name $className, array $funcInfos): string { $code = ""; - $functionEntryName = $className ? "class_{$className}_methods" : "ext_functions"; + $functionEntryName = "ext_functions"; + if ($className) { + $underscoreName = implode("_", $className->parts); + $functionEntryName = "class_{$underscoreName}_methods"; + } $code .= "\n\nstatic const zend_function_entry {$functionEntryName}[] = {\n"; $code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) { @@ -1220,26 +1318,132 @@ function initPhpParser() { } $optind = null; -$options = getopt("f", ["force-regeneration", "parameter-stats", "legacy"], $optind); +$options = getopt("fh", ["force-regeneration", "parameter-stats", "help", "verify"], $optind); $context = new Context; $printParameterStats = isset($options["parameter-stats"]); -$context->legacy = isset($options["legacy"]); -$context->forceRegeneration = - isset($options["f"]) || isset($options["force-regeneration"]) || $printParameterStats; +$verify = isset($options["verify"]); +$context->forceRegeneration = isset($options["f"]) || isset($options["force-regeneration"]); +$context->forceParse = $context->forceRegeneration || $printParameterStats || $verify; +if (isset($options["h"]) || isset($options["help"])) { + die("\nusage: gen-stub.php [ -f | --force-regeneration ] [ --parameter-stats ] [ --verify ] [ -h | --help ] [ name.stub.php | directory ]\n\n"); +} + +$fileInfos = []; $location = $argv[$optind] ?? "."; if (is_file($location)) { // Generate single file. - processStubFile($location, $context); + $fileInfo = processStubFile($location, $context); + if ($fileInfo) { + $fileInfos[] = $fileInfo; + } } else if (is_dir($location)) { - processDirectory($location, $context); + $fileInfos = processDirectory($location, $context); } else { echo "$location is neither a file nor a directory.\n"; exit(1); } if ($printParameterStats) { - arsort($context->parameterStats); - echo json_encode($context->parameterStats, JSON_PRETTY_PRINT), "\n"; + $parameterStats = []; + + foreach ($fileInfos as $fileInfo) { + foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { + foreach ($funcInfo->args as $argInfo) { + if (!isset($parameterStats[$argInfo->name])) { + $parameterStats[$argInfo->name] = 0; + } + $parameterStats[$argInfo->name]++; + } + } + } + + arsort($parameterStats); + echo json_encode($parameterStats, JSON_PRETTY_PRINT), "\n"; +} + +if ($verify) { + $errors = []; + $funcMap = []; + $aliases = []; + + foreach ($fileInfos as $fileInfo) { + foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { + /** @var FuncInfo $funcInfo */ + $funcMap[$funcInfo->name->__toString()] = $funcInfo; + + if ($funcInfo->aliasType === "alias") { + $aliases[] = $funcInfo; + } + } + } + + foreach ($aliases as $aliasFunc) { + if (!isset($funcMap[$aliasFunc->alias->__toString()])) { + $errors[] = "Aliased function {$aliasFunc->alias}() cannot be found"; + continue; + } + + if (!$aliasFunc->verify) { + continue; + } + + $aliasedFunc = $funcMap[$aliasFunc->alias->__toString()]; + $aliasedArgs = $aliasedFunc->args; + $aliasArgs = $aliasFunc->args; + + if ($aliasFunc->isInstanceMethod() !== $aliasedFunc->isInstanceMethod()) { + if ($aliasFunc->isInstanceMethod()) { + $aliasedArgs = array_slice($aliasedArgs, 1); + } + + if ($aliasedFunc->isInstanceMethod()) { + $aliasArgs = array_slice($aliasArgs, 1); + } + } + + array_map( + function(?ArgInfo $aliasArg, ?ArgInfo $aliasedArg) use ($aliasFunc, $aliasedFunc, &$errors) { + if ($aliasArg === null) { + assert($aliasedArg !== null); + $errors[] = "{$aliasFunc->name}(): Argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() is missing"; + return null; + } + + if ($aliasedArg === null) { + assert($aliasArg !== null); + $errors[] = "{$aliasedFunc->name}(): Argument \$$aliasArg->name of alias function {$aliasFunc->name}() is missing"; + return null; + } + + if ($aliasArg->name !== $aliasedArg->name) { + $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same name"; + return null; + } + + if ($aliasArg->type != $aliasedArg->type) { + $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same type"; + } + + if ($aliasArg->defaultValue !== $aliasedArg->defaultValue) { + $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same default value"; + } + }, + $aliasArgs, $aliasedArgs + ); + + if ((!$aliasedFunc->isMethod() || $aliasedFunc->isFinalMethod()) && + (!$aliasFunc->isMethod() || $aliasFunc->isFinalMethod()) && + $aliasFunc->return != $aliasedFunc->return + ) { + $errors[] = "{$aliasFunc->name}() and {$aliasedFunc->name}() must have the same return type"; + } + } + + echo implode("\n", $errors); + if (!empty($errors)) { + echo "\n"; + exit(1); + } } diff --git a/build/libtool.m4 b/build/libtool.m4 index 577dad4cbe313..97cd79029efc2 100644 --- a/build/libtool.m4 +++ b/build/libtool.m4 @@ -994,7 +994,7 @@ int main () else puts (dlerror ()); - exit (status); + return (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then diff --git a/build/php.m4 b/build/php.m4 index b4cf3edcf3fda..fe2f176e3cb33 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -1158,11 +1158,11 @@ $1 int main() { int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600); - if (fd < 0) exit(1); - if (pwrite(fd, "text", 4, 0) != 4) exit(1); + if (fd < 0) return 1; + if (pwrite(fd, "text", 4, 0) != 4) return 1; /* Linux glibc breakage until 2.2.5 */ - if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) exit(1); - exit(0); + if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) return 1; + return 0; } ]])],[ @@ -1192,11 +1192,11 @@ $1 int main() { char buf[3]; int fd = open("conftest_in", O_RDONLY); - if (fd < 0) exit(1); - if (pread(fd, buf, 2, 0) != 2) exit(1); + if (fd < 0) return 1; + if (pread(fd, buf, 2, 0) != 2) return 1; /* Linux glibc breakage until 2.2.5 */ - if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) exit(1); - exit(0); + if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) return 1; + return 0; } ]])],[ ac_cv_pread=yes @@ -1464,8 +1464,8 @@ int main() { FILE *fp = fopencookie(&g, "r", funcs); if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192) - exit(0); - exit(1); + return 0; + return 1; } ]])], [ @@ -1903,7 +1903,7 @@ dnl AC_DEFUN([PHP_SETUP_OPENSSL],[ found_openssl=no - PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1], [found_openssl=yes]) + PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.2], [found_openssl=yes]) if test "$found_openssl" = "yes"; then PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) diff --git a/configure.ac b/configure.ac index a6ff4e707aa38..6b33047538fe2 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.0.0-dev],[https://bugs.php.net],[php],[https://www.php.net]) +AC_INIT([PHP],[8.1.0-dev],[https://bugs.php.net],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER @@ -612,6 +612,7 @@ dnl getaddrinfo. AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo, [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);]])],[AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include #include #include #include @@ -626,11 +627,11 @@ int main(void) { hints.ai_flags = AI_NUMERICHOST; if (getaddrinfo("127.0.0.1", 0, &hints, &ai) < 0) { - exit(1); + return 1; } if (ai == 0) { - exit(1); + return 1; } pai = ai; @@ -638,16 +639,16 @@ int main(void) { while (pai) { if (pai->ai_family != AF_INET) { /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ - exit(1); + return 1; } if (pai->ai_addr->sa_family != AF_INET) { /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ - exit(1); + return 1; } pai = pai->ai_next; } freeaddrinfo(ai); - exit(0); + return 0; } ]])],[ac_cv_func_getaddrinfo=yes], [ac_cv_func_getaddrinfo=no], [ac_cv_func_getaddrinfo=no])], [ac_cv_func_getaddrinfo=no])]) diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c index f20dda534fd26..95b820e4c4dfd 100644 --- a/ext/bcmath/bcmath.c +++ b/ext/bcmath/bcmath.c @@ -542,7 +542,11 @@ PHP_FUNCTION(bcscale) RETURN_THROWS(); } - BCG(bc_precision) = (int) new_scale; + zend_string *ini_name = zend_string_init("bcmath.scale", sizeof("bcmath.scale") - 1, 0); + zend_string *new_scale_str = zend_long_to_str(new_scale); + zend_alter_ini_entry(ini_name, new_scale_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + zend_string_release(new_scale_str); + zend_string_release(ini_name); } RETURN_LONG(old_scale); diff --git a/ext/bcmath/tests/bcscale_variation003.phpt b/ext/bcmath/tests/bcscale_variation003.phpt index b1c541644c6d8..0812aadab6c73 100644 --- a/ext/bcmath/tests/bcscale_variation003.phpt +++ b/ext/bcmath/tests/bcscale_variation003.phpt @@ -6,13 +6,21 @@ bcscale() return value bcmath.scale=0 --FILE-- --EXPECT-- int(0) +int(0) +int(1) int(1) int(4) int(4) +int(4) +int(4) diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c index 9a8d956e4fd10..d83853aef9d3e 100644 --- a/ext/bz2/bz2.c +++ b/ext/bz2/bz2.c @@ -496,7 +496,7 @@ PHP_FUNCTION(bzdecompress) zend_string *dest; size_t source_len; int error; - zend_long small = 0; + zend_bool small = 0; #ifdef PHP_WIN32 unsigned __int64 size = 0; #else @@ -504,7 +504,7 @@ PHP_FUNCTION(bzdecompress) #endif bz_stream bzs; - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &source, &source_len, &small)) { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "s|b", &source, &source_len, &small)) { RETURN_THROWS(); } diff --git a/ext/bz2/bz2.stub.php b/ext/bz2/bz2.stub.php index 1f8b011059967..ebedfea799ee8 100644 --- a/ext/bz2/bz2.stub.php +++ b/ext/bz2/bz2.stub.php @@ -13,19 +13,19 @@ function bzread($bz, int $length = 1024): string|false {} /** * @param resource $bz - * @alias fwrite + * @implementation-alias fwrite */ -function bzwrite($bz, string $str, ?int $length = null): int|false {} +function bzwrite($bz, string $data, ?int $length = null): int|false {} /** * @param resource $bz - * @alias fflush + * @implementation-alias fflush */ function bzflush($bz): bool {} /** * @param resource $bz - * @alias fclose + * @implementation-alias fclose */ function bzclose($bz): bool {} @@ -38,6 +38,6 @@ function bzerrstr($bz): string {} /** @param resource $bz */ function bzerror($bz): array {} -function bzcompress(string $source, int $blocksize = 4, int $workfactor = 0): string|int {} +function bzcompress(string $data, int $block_size = 4, int $work_factor = 0): string|int {} -function bzdecompress(string $source, int $small = 0): string|int|false {} +function bzdecompress(string $data, bool $use_less_memory = false): string|int|false {} diff --git a/ext/bz2/bz2_arginfo.h b/ext/bz2/bz2_arginfo.h index 902553002edc6..f3c2d86320e9c 100644 --- a/ext/bz2/bz2_arginfo.h +++ b/ext/bz2/bz2_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9bcd75ddbde225e65ee9f00d86d16677d671b4e4 */ + * Stub hash: 0cd7792480671883ebae30ae8358b8f8e3390474 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_bzopen, 0, 0, 2) ZEND_ARG_INFO(0, file) @@ -13,7 +13,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_bzwrite, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, bz) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() @@ -36,14 +36,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bzerror, 0, 1, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_bzcompress, 0, 1, MAY_BE_STRING|MAY_BE_LONG) - ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, blocksize, IS_LONG, 0, "4") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, workfactor, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, block_size, IS_LONG, 0, "4") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, work_factor, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_bzdecompress, 0, 1, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, small, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_less_memory, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() diff --git a/ext/bz2/tests/005.phpt b/ext/bz2/tests/005.phpt index ff14e65659d15..5fc7ef0b7c2af 100644 --- a/ext/bz2/tests/005.phpt +++ b/ext/bz2/tests/005.phpt @@ -26,9 +26,8 @@ var_dump(bzdecompress(1,1)); var_dump(bzdecompress($data3)); var_dump(bzdecompress($data3,1)); -var_dump(bzdecompress($data, -1)); var_dump(bzdecompress($data, 0)); -var_dump(bzdecompress($data, 1000)); +var_dump(bzdecompress($data, 1)); var_dump(bzdecompress($data)); var_dump(bzdecompress($data2)); @@ -43,12 +42,14 @@ int(-2) int(-5) int(-5) int(-5) -bool(false) string(110) "Life it seems, will fade away Drifting further everyday Getting lost within myself Nothing matters no one else" -bool(false) +string(110) "Life it seems, will fade away +Drifting further everyday +Getting lost within myself +Nothing matters no one else" string(110) "Life it seems, will fade away Drifting further everyday Getting lost within myself diff --git a/ext/calendar/cal_unix.c b/ext/calendar/cal_unix.c index 55d67823ff97a..f1740c86afa6f 100644 --- a/ext/calendar/cal_unix.c +++ b/ext/calendar/cal_unix.c @@ -21,6 +21,8 @@ #include "sdncal.h" #include +#define SECS_PER_DAY (24 * 3600) + /* {{{ Convert UNIX timestamp to Julian Day */ PHP_FUNCTION(unixtojd) { @@ -60,11 +62,11 @@ PHP_FUNCTION(jdtounix) } uday -= 2440588 /* J.D. of 1.1.1970 */; - if (uday < 0 || uday > 24755) { - zend_value_error("jday must be within the Unix epoch"); + if (uday < 0 || uday > ZEND_LONG_MAX / SECS_PER_DAY) { /* before beginning of unix epoch or greater than representable */ + zend_value_error("jday must be between 2440588 and " ZEND_LONG_FMT, ZEND_LONG_MAX / SECS_PER_DAY + 2440588); RETURN_THROWS(); } - RETURN_LONG(uday * 24 * 3600); + RETURN_LONG(uday * SECS_PER_DAY); } /* }}} */ diff --git a/ext/calendar/calendar.stub.php b/ext/calendar/calendar.stub.php index baa2075beefd9..575784df37b92 100644 --- a/ext/calendar/calendar.stub.php +++ b/ext/calendar/calendar.stub.php @@ -4,33 +4,33 @@ function cal_days_in_month(int $calendar, int $month, int $year): int {} -function cal_from_jd(int $jd, int $calendar): array {} +function cal_from_jd(int $julian_day, int $calendar): array {} function cal_info(int $calendar = -1): array {} function cal_to_jd(int $calendar, int $month, int $day, int $year): int {} -function easter_date(?int $year = null, int $method = CAL_EASTER_DEFAULT): int {} +function easter_date(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int {} -function easter_days(?int $year = null, int $method = CAL_EASTER_DEFAULT): int {} +function easter_days(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int {} function frenchtojd(int $month, int $day, int $year): int {} function gregoriantojd(int $month, int $day, int $year): int {} -function jddayofweek(int $juliandaycount, int $mode = CAL_DOW_DAYNO): int|string {} +function jddayofweek(int $julian_day, int $mode = CAL_DOW_DAYNO): int|string {} -function jdmonthname(int $juliandaycount, int $mode): string {} +function jdmonthname(int $julian_day, int $mode): string {} -function jdtofrench(int $juliandaycount): string {} +function jdtofrench(int $julian_day): string {} -function jdtogregorian(int $juliandaycount): string {} +function jdtogregorian(int $julian_day): string {} -function jdtojewish(int $juliandaycount, bool $hebrew = false, int $fl = 0): string {} +function jdtojewish(int $julian_day, bool $hebrew = false, int $flags = 0): string {} -function jdtojulian(int $juliandaycount): string {} +function jdtojulian(int $julian_day): string {} -function jdtounix(int $jday): int {} +function jdtounix(int $julian_day): int {} function jewishtojd(int $month, int $day, int $year): int {} diff --git a/ext/calendar/calendar_arginfo.h b/ext/calendar/calendar_arginfo.h index 22f259833b6cc..b8d5bfc95fec2 100644 --- a/ext/calendar/calendar_arginfo.h +++ b/ext/calendar/calendar_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1ace9d7ae3e505ae2e14323e21fa6ac0a490896d */ + * Stub hash: ced2659f54bb25693831315625fe90b33e2f7cbe */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_cal_days_in_month, 0, 3, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, calendar, IS_LONG, 0) @@ -8,7 +8,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_cal_days_in_month, 0, 3, IS_LONG ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_cal_from_jd, 0, 2, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, jd, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, calendar, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -25,7 +25,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_easter_date, 0, 0, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, year, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, method, IS_LONG, 0, "CAL_EASTER_DEFAULT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "CAL_EASTER_DEFAULT") ZEND_END_ARG_INFO() #define arginfo_easter_days arginfo_easter_date @@ -39,31 +39,31 @@ ZEND_END_ARG_INFO() #define arginfo_gregoriantojd arginfo_frenchtojd ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_jddayofweek, 0, 1, MAY_BE_LONG|MAY_BE_STRING) - ZEND_ARG_TYPE_INFO(0, juliandaycount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "CAL_DOW_DAYNO") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_jdmonthname, 0, 2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, juliandaycount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_jdtofrench, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, juliandaycount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_jdtogregorian arginfo_jdtofrench ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_jdtojewish, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, juliandaycount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, hebrew, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fl, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_jdtojulian arginfo_jdtofrench ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_jdtounix, 0, 1, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, jday, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, julian_day, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_jewishtojd arginfo_frenchtojd diff --git a/ext/calendar/tests/bug80185.phpt b/ext/calendar/tests/bug80185.phpt new file mode 100644 index 0000000000000..eab5cf1c4bf9b --- /dev/null +++ b/ext/calendar/tests/bug80185.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #80185 (jdtounix() fails after 2037) +--SKIPIF-- + +--FILE-- +getMessage(), PHP_EOL; +} +?> +--EXPECT-- +int(2170713600) +int(9223372036854720000) +jday must be between 2440588 and 106751993607888 diff --git a/ext/calendar/tests/bug80185_32bit.phpt b/ext/calendar/tests/bug80185_32bit.phpt new file mode 100644 index 0000000000000..98a1bea2a3d63 --- /dev/null +++ b/ext/calendar/tests/bug80185_32bit.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #80185 (jdtounix() fails after 2037) +--SKIPIF-- + +--FILE-- +getMessage(), PHP_EOL; +} +var_dump(jdtounix(PHP_INT_MAX / 86400 + 2440588)); +try { + var_dump(jdtounix(PHP_INT_MAX / 86400 + 2440589)); +} catch (ValueError $ex) { + echo $ex->getMessage(), PHP_EOL; +} +?> +--EXPECT-- +jday must be between 2440588 and 2465443 +int(2147472000) +jday must be between 2440588 and 2465443 diff --git a/ext/calendar/tests/jdtounix_error1.phpt b/ext/calendar/tests/jdtounix_error1.phpt index e47cced1b1acc..ba85958ec857e 100644 --- a/ext/calendar/tests/jdtounix_error1.phpt +++ b/ext/calendar/tests/jdtounix_error1.phpt @@ -14,5 +14,5 @@ try { echo $ex->getMessage(), PHP_EOL; } ?> ---EXPECT-- -jday must be within the Unix epoch +--EXPECTF-- +jday must be between 2440588 and %d diff --git a/ext/com_dotnet/com_extension.stub.php b/ext/com_dotnet/com_extension.stub.php index 7d451e5baf525..29c382db33f6a 100644 --- a/ext/com_dotnet/com_extension.stub.php +++ b/ext/com_dotnet/com_extension.stub.php @@ -30,19 +30,19 @@ function variant_pow(mixed $left, mixed $right): variant {} function variant_xor(mixed $left, mixed $right): variant {} -function variant_abs(mixed $left): variant {} +function variant_abs(mixed $value): variant {} -function variant_fix(mixed $left): variant {} +function variant_fix(mixed $value): variant {} -function variant_int(mixed $left): variant {} +function variant_int(mixed $value): variant {} -function variant_neg(mixed $left): variant {} +function variant_neg(mixed $value): variant {} -function variant_not(mixed $left): variant {} +function variant_not(mixed $value): variant {} -function variant_round(mixed $left, int $decimals): ?variant {} +function variant_round(mixed $value, int $decimals): ?variant {} -function variant_cmp(mixed $left, mixed $right, int $lcid = LOCALE_SYSTEM_DEFAULT, int $flags = 0): int {} +function variant_cmp(mixed $left, mixed $right, int $locale_id = LOCALE_SYSTEM_DEFAULT, int $flags = 0): int {} function variant_date_to_timestamp(variant $variant): ?int {} @@ -54,18 +54,17 @@ function variant_set_type(variant $variant, int $type): void {} function variant_cast(variant $variant, int $type): variant {} -function com_get_active_object(string $progid, ?int $code_page = null): variant {} +function com_get_active_object(string $prog_id, ?int $codepage = null): variant {} function com_create_guid(): string|false {} -function com_event_sink(variant $comobject, object $sinkobject, array|string|null $sinkinterface = null): bool {} +function com_event_sink(variant $variant, object $sink_object, array|string|null $sink_interface = null): bool {} -/** @param com|dotnet|variant|string $comobject */ -function com_print_typeinfo($comobject, ?string $dispinterface = null, bool $wantsink = false): bool {} +function com_print_typeinfo(variant|string $variant, ?string $dispatch_interface = null, bool $display_sink = false): bool {} -function com_message_pump(int $timeoutms = 0): bool {} +function com_message_pump(int $timeout_milliseconds = 0): bool {} -function com_load_typelib(string $typelib_name, bool $case_insensitive = true): bool {} +function com_load_typelib(string $typelib, bool $case_insensitive = true): bool {} class variant { diff --git a/ext/com_dotnet/com_extension_arginfo.h b/ext/com_dotnet/com_extension_arginfo.h index 074cb8575006d..cca7769c34248 100644 --- a/ext/com_dotnet/com_extension_arginfo.h +++ b/ext/com_dotnet/com_extension_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 637bee9d71fb0d566ce38004eec8bc6f75656837 */ + * Stub hash: da1da8fcfe8a04d08d354ad2cc5a3658d16c3076 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_variant_set, 0, 2, IS_VOID, 0) ZEND_ARG_OBJ_INFO(0, variant, variant, 0) @@ -36,7 +36,7 @@ ZEND_END_ARG_INFO() #define arginfo_variant_xor arginfo_variant_add ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_variant_abs, 0, 1, variant, 0) - ZEND_ARG_TYPE_INFO(0, left, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() #define arginfo_variant_fix arginfo_variant_abs @@ -48,14 +48,14 @@ ZEND_END_ARG_INFO() #define arginfo_variant_not arginfo_variant_abs ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_variant_round, 0, 2, variant, 1) - ZEND_ARG_TYPE_INFO(0, left, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, decimals, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_variant_cmp, 0, 2, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, left, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, right, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, lcid, IS_LONG, 0, "LOCALE_SYSTEM_DEFAULT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale_id, IS_LONG, 0, "LOCALE_SYSTEM_DEFAULT") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -82,31 +82,31 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_variant_cast, 0, 2, variant, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_com_get_active_object, 0, 1, variant, 0) - ZEND_ARG_TYPE_INFO(0, progid, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code_page, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO(0, prog_id, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, codepage, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_com_create_guid, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_com_event_sink, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, comobject, variant, 0) - ZEND_ARG_TYPE_INFO(0, sinkobject, IS_OBJECT, 0) - ZEND_ARG_TYPE_MASK(0, sinkinterface, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_OBJ_INFO(0, variant, variant, 0) + ZEND_ARG_TYPE_INFO(0, sink_object, IS_OBJECT, 0) + ZEND_ARG_TYPE_MASK(0, sink_interface, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_com_print_typeinfo, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, comobject) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dispinterface, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, wantsink, _IS_BOOL, 0, "false") + ZEND_ARG_OBJ_TYPE_MASK(0, variant, variant, MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dispatch_interface, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, display_sink, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_com_message_pump, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeoutms, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout_milliseconds, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_com_load_typelib, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, typelib_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, typelib, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, case_insensitive, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() diff --git a/ext/com_dotnet/com_persist.stub.php b/ext/com_dotnet/com_persist.stub.php index 09a842d8fb264..381c086188492 100644 --- a/ext/com_dotnet/com_persist.stub.php +++ b/ext/com_dotnet/com_persist.stub.php @@ -4,13 +4,13 @@ final class COMPersistHelper { - public function __construct(?VARIANT $com_object) {} + public function __construct(?variant $variant) {} public function GetCurFileName(): string|false {} public function SaveToFile(?string $filename, bool $remember = true): bool {} - public function LoadFromFile(string $path, int $flags = 0): bool {} + public function LoadFromFile(string $filename, int $flags = 0): bool {} public function GetMaxStreamSize(): int {} diff --git a/ext/com_dotnet/com_persist_arginfo.h b/ext/com_dotnet/com_persist_arginfo.h index 0665dc343bb02..7c4a964545d67 100644 --- a/ext/com_dotnet/com_persist_arginfo.h +++ b/ext/com_dotnet/com_persist_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 47d926b2ba30bb3616f4175664723352fff164e7 */ + * Stub hash: d04d007cac328014c6cc76a00cc291237965d56d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_COMPersistHelper___construct, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, com_object, VARIANT, 1) + ZEND_ARG_OBJ_INFO(0, variant, variant, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_COMPersistHelper_GetCurFileName, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) @@ -14,7 +14,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_COMPersistHelper_SaveToFil ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_COMPersistHelper_LoadFromFile, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c index a036526d8bed6..862a1263a5b1a 100644 --- a/ext/com_dotnet/com_typeinfo.c +++ b/ext/com_dotnet/com_typeinfo.c @@ -306,18 +306,20 @@ ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj if (obj) { if (dispname == NULL && sink) { - IProvideClassInfo2 *pci2; - IProvideClassInfo *pci; + if (V_VT(&obj->v) == VT_DISPATCH) { + IProvideClassInfo2 *pci2; + IProvideClassInfo *pci; - if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) { - gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid)); - IProvideClassInfo2_Release(pci2); - } - if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) { - /* examine the available interfaces */ - /* TODO: write some code here */ - php_error_docref(NULL, E_WARNING, "IProvideClassInfo: this code not yet written!"); - IProvideClassInfo_Release(pci); + if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) { + gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid)); + IProvideClassInfo2_Release(pci2); + } + if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) { + /* examine the available interfaces */ + /* TODO: write some code here */ + php_error_docref(NULL, E_WARNING, "IProvideClassInfo: this code not yet written!"); + IProvideClassInfo_Release(pci); + } } } else if (dispname == NULL) { if (obj->typeinfo) { @@ -334,15 +336,17 @@ ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj /* get the library from the object; the rest will be dealt with later */ ITypeInfo_GetContainingTypeLib(obj->typeinfo, &typelib, &idx); } else if (typelibname == NULL) { - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo); - if (dispname) { - unsigned int idx; - /* get the library from the object; the rest will be dealt with later */ - ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx); - - if (typelib) { - ITypeInfo_Release(typeinfo); - typeinfo = NULL; + if (V_VT(&obj->v) == VT_DISPATCH) { + IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo); + if (dispname) { + unsigned int idx; + /* get the library from the object; the rest will be dealt with later */ + ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx); + + if (typelib) { + ITypeInfo_Release(typeinfo); + typeinfo = NULL; + } } } } diff --git a/ext/com_dotnet/tests/bug62474.phpt b/ext/com_dotnet/tests/bug62474.phpt new file mode 100644 index 0000000000000..cc8e252224a10 --- /dev/null +++ b/ext/com_dotnet/tests/bug62474.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #62474 (com_event_sink crashes on certain arguments) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(false) +bool(false) diff --git a/ext/curl/curl_private.h b/ext/curl/curl_private.h index 8ff0aef605c8e..6ed2eba3c3080 100644 --- a/ext/curl/curl_private.h +++ b/ext/curl/curl_private.h @@ -104,6 +104,8 @@ typedef struct { zend_bool in_callback; uint32_t* clone; zval postfields; + /* CurlShareHandle object set using CURLOPT_SHARE. */ + struct _php_curlsh *share; zend_object std; } php_curl; @@ -124,7 +126,7 @@ typedef struct { zend_object std; } php_curlm; -typedef struct { +typedef struct _php_curlsh { CURLSH *share; struct { int no; diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 8ff3e0f37471f..f01f6f775a22a 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2832,6 +2832,12 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue, bool i if (Z_TYPE_P(zvalue) == IS_OBJECT && Z_OBJCE_P(zvalue) == curl_share_ce) { php_curlsh *sh = Z_CURL_SHARE_P(zvalue); curl_easy_setopt(ch->cp, CURLOPT_SHARE, sh->share); + + if (ch->share) { + OBJ_RELEASE(&ch->share->std); + } + GC_ADDREF(&sh->std); + ch->share = sh; } } break; @@ -3373,6 +3379,10 @@ static void curl_free_obj(zend_object *object) efree(ch->handlers); zval_ptr_dtor(&ch->postfields); + if (ch->share) { + OBJ_RELEASE(&ch->share->std); + } + zend_object_std_dtor(&ch->std); } /* }}} */ diff --git a/ext/curl/tests/check_win_config.phpt b/ext/curl/tests/check_win_config.phpt index f1c61fbf3bebd..1809df7337b54 100644 --- a/ext/curl/tests/check_win_config.phpt +++ b/ext/curl/tests/check_win_config.phpt @@ -48,7 +48,7 @@ PSL => No HTTPS_PROXY => Yes MULTI_SSL => %s BROTLI => %s -Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp +Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, %r(mqtt, )?%rpop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp Host => %s-pc-win32 SSL Version => OpenSSL/%s ZLib Version => %s diff --git a/ext/curl/tests/curl_share_basic.phpt b/ext/curl/tests/curl_share_basic.phpt new file mode 100644 index 0000000000000..2a37fce16ad0e --- /dev/null +++ b/ext/curl/tests/curl_share_basic.phpt @@ -0,0 +1,29 @@ +--TEST-- +Basic curl_share test +--FILE-- + +--EXPECT-- +string(6) "CURL1 +" +string(6) "CURL2 +" diff --git a/ext/date/config.w32 b/ext/date/config.w32 index abf12dc7320fd..bec0d709cff4c 100644 --- a/ext/date/config.w32 +++ b/ext/date/config.w32 @@ -1,6 +1,7 @@ // vim:ft=javascript EXTENSION("date", "php_date.c", false, "/Iext/date/lib /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DHAVE_TIMELIB_CONFIG_H=1"); +PHP_DATE = "yes"; ADD_SOURCES("ext/date/lib", "astro.c timelib.c dow.c parse_date.c parse_tz.c tm2unixtime.c unixtime2tm.c parse_iso_intervals.c interval.c", "date"); ADD_FLAG('CFLAGS_DATE', "/wd4244"); diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index aa1656ab3a357..34f53910a936e 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -1,5 +1,5 @@ /* This is a generated file, do not modify */ -const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { +const timelib_tzdb_index_entry timezonedb_idx_builtin[594] = { #ifdef TIMELIB_SUPPORTS_V2DATA # define FOR_V2(v2,v1) v2 #else @@ -108,503 +108,502 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "America/Curacao" , FOR_V2(0x011892, 0x006EAE) }, { "America/Danmarkshavn" , FOR_V2(0x011958, 0x006F10) }, { "America/Dawson" , FOR_V2(0x011C38, 0x00704C) }, - { "America/Dawson_Creek" , FOR_V2(0x01229A, 0x0072D3) }, - { "America/Denver" , FOR_V2(0x0126E0, 0x007495) }, - { "America/Detroit" , FOR_V2(0x01308D, 0x007834) }, - { "America/Dominica" , FOR_V2(0x013968, 0x007B8E) }, - { "America/Edmonton" , FOR_V2(0x013A08, 0x007BDF) }, - { "America/Eirunepe" , FOR_V2(0x01434D, 0x007F5E) }, - { "America/El_Salvador" , FOR_V2(0x0145F8, 0x008079) }, - { "America/Ensenada" , FOR_V2(0x0146E4, 0x0080E8) }, - { "America/Fort_Nelson" , FOR_V2(0x015016, 0x008451) }, - { "America/Fort_Wayne" , FOR_V2(0x0158F6, 0x0087B0) }, - { "America/Fortaleza" , FOR_V2(0x015F84, 0x008A2B) }, - { "America/Glace_Bay" , FOR_V2(0x016282, 0x008B6F) }, - { "America/Godthab" , FOR_V2(0x016B39, 0x008EBA) }, - { "America/Goose_Bay" , FOR_V2(0x01729B, 0x009174) }, - { "America/Grand_Turk" , FOR_V2(0x017F51, 0x009641) }, - { "America/Grenada" , FOR_V2(0x018695, 0x0098F5) }, - { "America/Guadeloupe" , FOR_V2(0x018735, 0x009946) }, - { "America/Guatemala" , FOR_V2(0x0187D5, 0x009997) }, - { "America/Guayaquil" , FOR_V2(0x0188F9, 0x009A1A) }, - { "America/Guyana" , FOR_V2(0x018A0D, 0x009AA5) }, - { "America/Halifax" , FOR_V2(0x018B05, 0x009B1B) }, - { "America/Havana" , FOR_V2(0x01988F, 0x00A021) }, - { "America/Hermosillo" , FOR_V2(0x01A20B, 0x00A39F) }, - { "America/Indiana/Indianapolis" , FOR_V2(0x01A3D6, 0x00A479) }, - { "America/Indiana/Knox" , FOR_V2(0x01AA7D, 0x00A70D) }, - { "America/Indiana/Marengo" , FOR_V2(0x01B41A, 0x00AAAC) }, - { "America/Indiana/Petersburg" , FOR_V2(0x01BAF7, 0x00AD52) }, - { "America/Indiana/Tell_City" , FOR_V2(0x01C286, 0x00B035) }, - { "America/Indiana/Vevay" , FOR_V2(0x01C93A, 0x00B2CF) }, - { "America/Indiana/Vincennes" , FOR_V2(0x01CEE6, 0x00B50A) }, - { "America/Indiana/Winamac" , FOR_V2(0x01D5AC, 0x00B7AB) }, - { "America/Indianapolis" , FOR_V2(0x01DCC0, 0x00BA64) }, - { "America/Inuvik" , FOR_V2(0x01E34E, 0x00BCDF) }, - { "America/Iqaluit" , FOR_V2(0x01EAD4, 0x00BFB6) }, - { "America/Jamaica" , FOR_V2(0x01F2EE, 0x00C2DA) }, - { "America/Jujuy" , FOR_V2(0x01F4DC, 0x00C3A8) }, - { "America/Juneau" , FOR_V2(0x01F900, 0x00C544) }, - { "America/Kentucky/Louisville" , FOR_V2(0x020251, 0x00C8C9) }, - { "America/Kentucky/Monticello" , FOR_V2(0x020D4F, 0x00CCED) }, - { "America/Knox_IN" , FOR_V2(0x02169F, 0x00D071) }, - { "America/Kralendijk" , FOR_V2(0x022027, 0x00D3FB) }, - { "America/La_Paz" , FOR_V2(0x0220ED, 0x00D45D) }, - { "America/Lima" , FOR_V2(0x0221E1, 0x00D4D1) }, - { "America/Los_Angeles" , FOR_V2(0x022383, 0x00D582) }, - { "America/Louisville" , FOR_V2(0x022EAA, 0x00D99F) }, - { "America/Lower_Princes" , FOR_V2(0x02398A, 0x00DDA5) }, - { "America/Maceio" , FOR_V2(0x023A50, 0x00DE07) }, - { "America/Managua" , FOR_V2(0x023D54, 0x00DF3F) }, - { "America/Manaus" , FOR_V2(0x023F0E, 0x00DFFF) }, - { "America/Marigot" , FOR_V2(0x024185, 0x00E104) }, - { "America/Martinique" , FOR_V2(0x024225, 0x00E155) }, - { "America/Matamoros" , FOR_V2(0x024319, 0x00E1CA) }, - { "America/Mazatlan" , FOR_V2(0x0248D1, 0x00E411) }, - { "America/Mendoza" , FOR_V2(0x024F08, 0x00E687) }, - { "America/Menominee" , FOR_V2(0x025348, 0x00E82D) }, - { "America/Merida" , FOR_V2(0x025C55, 0x00EB9F) }, - { "America/Metlakatla" , FOR_V2(0x02620F, 0x00EDD8) }, - { "America/Mexico_City" , FOR_V2(0x0267C1, 0x00F00D) }, - { "America/Miquelon" , FOR_V2(0x026E09, 0x00F26D) }, - { "America/Moncton" , FOR_V2(0x027497, 0x00F4DA) }, - { "America/Monterrey" , FOR_V2(0x02810D, 0x00F97D) }, - { "America/Montevideo" , FOR_V2(0x0286CC, 0x00FBCB) }, - { "America/Montreal" , FOR_V2(0x028CBE, 0x00FE18) }, - { "America/Montserrat" , FOR_V2(0x029A70, 0x010319) }, - { "America/Nassau" , FOR_V2(0x029B10, 0x01036A) }, - { "America/New_York" , FOR_V2(0x02A3EE, 0x0106A9) }, - { "America/Nipigon" , FOR_V2(0x02B1DE, 0x010BCD) }, - { "America/Nome" , FOR_V2(0x02BA55, 0x010F05) }, - { "America/Noronha" , FOR_V2(0x02C3AD, 0x011288) }, - { "America/North_Dakota/Beulah" , FOR_V2(0x02C695, 0x0113B6) }, - { "America/North_Dakota/Center" , FOR_V2(0x02D002, 0x011745) }, - { "America/North_Dakota/New_Salem" , FOR_V2(0x02D96F, 0x011AD4) }, - { "America/Nuuk" , FOR_V2(0x02E2E2, 0x011E69) }, - { "America/Ojinaga" , FOR_V2(0x02EA5A, 0x012139) }, - { "America/Panama" , FOR_V2(0x02F05A, 0x012393) }, - { "America/Pangnirtung" , FOR_V2(0x02F11C, 0x0123F3) }, - { "America/Paramaribo" , FOR_V2(0x02F970, 0x012730) }, - { "America/Phoenix" , FOR_V2(0x02FA82, 0x0127B1) }, - { "America/Port-au-Prince" , FOR_V2(0x02FBF3, 0x012865) }, - { "America/Port_of_Spain" , FOR_V2(0x030199, 0x012A86) }, - { "America/Porto_Acre" , FOR_V2(0x030239, 0x012AD7) }, - { "America/Porto_Velho" , FOR_V2(0x0304B9, 0x012BD9) }, - { "America/Puerto_Rico" , FOR_V2(0x03070D, 0x012CCD) }, - { "America/Punta_Arenas" , FOR_V2(0x03080F, 0x012D49) }, - { "America/Rainy_River" , FOR_V2(0x030F9D, 0x013032) }, - { "America/Rankin_Inlet" , FOR_V2(0x031815, 0x01336B) }, - { "America/Recife" , FOR_V2(0x031F9B, 0x013645) }, - { "America/Regina" , FOR_V2(0x03227D, 0x01376D) }, - { "America/Resolute" , FOR_V2(0x032672, 0x01390B) }, - { "America/Rio_Branco" , FOR_V2(0x032DF9, 0x013BE6) }, - { "America/Rosario" , FOR_V2(0x03307D, 0x013CEC) }, - { "America/Santa_Isabel" , FOR_V2(0x0334BD, 0x013E92) }, - { "America/Santarem" , FOR_V2(0x033DEF, 0x0141FB) }, - { "America/Santiago" , FOR_V2(0x034060, 0x0142FD) }, - { "America/Santo_Domingo" , FOR_V2(0x034A5F, 0x0146BB) }, - { "America/Sao_Paulo" , FOR_V2(0x034C35, 0x014787) }, - { "America/Scoresbysund" , FOR_V2(0x03521B, 0x0149DF) }, - { "America/Shiprock" , FOR_V2(0x0359C0, 0x014CCA) }, - { "America/Sitka" , FOR_V2(0x036358, 0x015054) }, - { "America/St_Barthelemy" , FOR_V2(0x036C90, 0x0153CC) }, - { "America/St_Johns" , FOR_V2(0x036D30, 0x01541D) }, - { "America/St_Kitts" , FOR_V2(0x037BA5, 0x015983) }, - { "America/St_Lucia" , FOR_V2(0x037C45, 0x0159D4) }, - { "America/St_Thomas" , FOR_V2(0x037CE5, 0x015A25) }, - { "America/St_Vincent" , FOR_V2(0x037D85, 0x015A76) }, - { "America/Swift_Current" , FOR_V2(0x037E25, 0x015AC7) }, - { "America/Tegucigalpa" , FOR_V2(0x038073, 0x015BCC) }, - { "America/Thule" , FOR_V2(0x03817B, 0x015C45) }, - { "America/Thunder_Bay" , FOR_V2(0x038773, 0x015E84) }, - { "America/Tijuana" , FOR_V2(0x039033, 0x0161D5) }, - { "America/Toronto" , FOR_V2(0x039986, 0x01655F) }, - { "America/Tortola" , FOR_V2(0x03A755, 0x016A7D) }, - { "America/Vancouver" , FOR_V2(0x03A7F5, 0x016ACE) }, - { "America/Virgin" , FOR_V2(0x03B366, 0x016F11) }, - { "America/Whitehorse" , FOR_V2(0x03B406, 0x016F62) }, - { "America/Winnipeg" , FOR_V2(0x03BA68, 0x0171E9) }, - { "America/Yakutat" , FOR_V2(0x03C5C5, 0x01762C) }, - { "America/Yellowknife" , FOR_V2(0x03CEE2, 0x017995) }, - { "Antarctica/Casey" , FOR_V2(0x03D6B3, 0x017C8F) }, - { "Antarctica/Davis" , FOR_V2(0x03D7ED, 0x017D20) }, - { "Antarctica/DumontDUrville" , FOR_V2(0x03D927, 0x017DB1) }, - { "Antarctica/Macquarie" , FOR_V2(0x03DA05, 0x017E21) }, - { "Antarctica/Mawson" , FOR_V2(0x03E011, 0x018078) }, - { "Antarctica/McMurdo" , FOR_V2(0x03E0EA, 0x0180E3) }, - { "Antarctica/Palmer" , FOR_V2(0x03EAA1, 0x018491) }, - { "Antarctica/Rothera" , FOR_V2(0x03F03D, 0x0186BE) }, - { "Antarctica/South_Pole" , FOR_V2(0x03F0F4, 0x01871B) }, - { "Antarctica/Syowa" , FOR_V2(0x03FA85, 0x018AA3) }, - { "Antarctica/Troll" , FOR_V2(0x03FB3B, 0x018AFE) }, - { "Antarctica/Vostok" , FOR_V2(0x03FFD6, 0x018CBB) }, - { "Arctic/Longyearbyen" , FOR_V2(0x04008D, 0x018D17) }, - { "Asia/Aden" , FOR_V2(0x04094D, 0x019055) }, - { "Asia/Almaty" , FOR_V2(0x0409FE, 0x0190AB) }, - { "Asia/Amman" , FOR_V2(0x040E06, 0x019254) }, - { "Asia/Anadyr" , FOR_V2(0x04154F, 0x019505) }, - { "Asia/Aqtau" , FOR_V2(0x041A12, 0x0196EF) }, - { "Asia/Aqtobe" , FOR_V2(0x041E0A, 0x019891) }, - { "Asia/Ashgabat" , FOR_V2(0x042216, 0x019A37) }, - { "Asia/Ashkhabad" , FOR_V2(0x04248D, 0x019B40) }, - { "Asia/Atyrau" , FOR_V2(0x042704, 0x019C49) }, - { "Asia/Baghdad" , FOR_V2(0x042B04, 0x019DEF) }, - { "Asia/Bahrain" , FOR_V2(0x042EE7, 0x019F74) }, - { "Asia/Baku" , FOR_V2(0x042FBA, 0x019FD9) }, - { "Asia/Bangkok" , FOR_V2(0x043491, 0x01A1C0) }, - { "Asia/Barnaul" , FOR_V2(0x043564, 0x01A225) }, - { "Asia/Beirut" , FOR_V2(0x043A43, 0x01A415) }, - { "Asia/Bishkek" , FOR_V2(0x0442B9, 0x01A72D) }, - { "Asia/Brunei" , FOR_V2(0x04469C, 0x01A8B6) }, - { "Asia/Calcutta" , FOR_V2(0x044773, 0x01A91D) }, - { "Asia/Chita" , FOR_V2(0x04489C, 0x01A99D) }, - { "Asia/Choibalsan" , FOR_V2(0x044D81, 0x01AB95) }, - { "Asia/Chongqing" , FOR_V2(0x045154, 0x01AD21) }, - { "Asia/Chungking" , FOR_V2(0x045391, 0x01AE08) }, - { "Asia/Colombo" , FOR_V2(0x0455CE, 0x01AEEF) }, - { "Asia/Dacca" , FOR_V2(0x04574E, 0x01AF9C) }, - { "Asia/Damascus" , FOR_V2(0x0458AB, 0x01B03C) }, - { "Asia/Dhaka" , FOR_V2(0x0461AD, 0x01B386) }, - { "Asia/Dili" , FOR_V2(0x04630A, 0x01B426) }, - { "Asia/Dubai" , FOR_V2(0x0463F9, 0x01B495) }, - { "Asia/Dushanbe" , FOR_V2(0x0464AA, 0x01B4EB) }, - { "Asia/Famagusta" , FOR_V2(0x046705, 0x01B5E8) }, - { "Asia/Gaza" , FOR_V2(0x046F0C, 0x01B8EE) }, - { "Asia/Harbin" , FOR_V2(0x04782E, 0x01BC53) }, - { "Asia/Hebron" , FOR_V2(0x047A6B, 0x01BD3A) }, - { "Asia/Ho_Chi_Minh" , FOR_V2(0x0483A8, 0x01C0A8) }, - { "Asia/Hong_Kong" , FOR_V2(0x048513, 0x01C14B) }, - { "Asia/Hovd" , FOR_V2(0x0489D2, 0x01C323) }, - { "Asia/Irkutsk" , FOR_V2(0x048D84, 0x01C4AD) }, - { "Asia/Istanbul" , FOR_V2(0x049285, 0x01C6B6) }, - { "Asia/Jakarta" , FOR_V2(0x049A2C, 0x01C9A3) }, - { "Asia/Jayapura" , FOR_V2(0x049BA8, 0x01CA5A) }, - { "Asia/Jerusalem" , FOR_V2(0x049CC7, 0x01CB01) }, - { "Asia/Kabul" , FOR_V2(0x04A5C3, 0x01CE51) }, - { "Asia/Kamchatka" , FOR_V2(0x04A69F, 0x01CEB8) }, - { "Asia/Karachi" , FOR_V2(0x04AB4B, 0x01D096) }, - { "Asia/Kashgar" , FOR_V2(0x04ACD2, 0x01D146) }, - { "Asia/Kathmandu" , FOR_V2(0x04AD83, 0x01D19C) }, - { "Asia/Katmandu" , FOR_V2(0x04AE63, 0x01D205) }, - { "Asia/Khandyga" , FOR_V2(0x04AF43, 0x01D26E) }, - { "Asia/Kolkata" , FOR_V2(0x04B464, 0x01D487) }, - { "Asia/Krasnoyarsk" , FOR_V2(0x04B58D, 0x01D507) }, - { "Asia/Kuala_Lumpur" , FOR_V2(0x04BA69, 0x01D6FF) }, - { "Asia/Kuching" , FOR_V2(0x04BC08, 0x01D7C8) }, - { "Asia/Kuwait" , FOR_V2(0x04BE05, 0x01D8A9) }, - { "Asia/Macao" , FOR_V2(0x04BEB6, 0x01D8FF) }, - { "Asia/Macau" , FOR_V2(0x04C38D, 0x01DADF) }, - { "Asia/Magadan" , FOR_V2(0x04C864, 0x01DCBF) }, - { "Asia/Makassar" , FOR_V2(0x04CD46, 0x01DEB3) }, - { "Asia/Manila" , FOR_V2(0x04CE99, 0x01DF7B) }, - { "Asia/Muscat" , FOR_V2(0x04CFED, 0x01E00E) }, - { "Asia/Nicosia" , FOR_V2(0x04D09E, 0x01E064) }, - { "Asia/Novokuznetsk" , FOR_V2(0x04D88F, 0x01E35F) }, - { "Asia/Novosibirsk" , FOR_V2(0x04DD39, 0x01E53C) }, - { "Asia/Omsk" , FOR_V2(0x04E21E, 0x01E732) }, - { "Asia/Oral" , FOR_V2(0x04E6EE, 0x01E91E) }, - { "Asia/Phnom_Penh" , FOR_V2(0x04EAF6, 0x01EAC3) }, - { "Asia/Pontianak" , FOR_V2(0x04EBC9, 0x01EB28) }, - { "Asia/Pyongyang" , FOR_V2(0x04ED4C, 0x01EBE7) }, - { "Asia/Qatar" , FOR_V2(0x04EE45, 0x01EC5C) }, - { "Asia/Qostanay" , FOR_V2(0x04EF18, 0x01ECC1) }, - { "Asia/Qyzylorda" , FOR_V2(0x04F331, 0x01EE74) }, - { "Asia/Rangoon" , FOR_V2(0x04F75B, 0x01F02F) }, - { "Asia/Riyadh" , FOR_V2(0x04F873, 0x01F0B0) }, - { "Asia/Saigon" , FOR_V2(0x04F924, 0x01F106) }, - { "Asia/Sakhalin" , FOR_V2(0x04FA8F, 0x01F1A9) }, - { "Asia/Samarkand" , FOR_V2(0x04FF65, 0x01F39B) }, - { "Asia/Seoul" , FOR_V2(0x0501C3, 0x01F4A2) }, - { "Asia/Shanghai" , FOR_V2(0x050438, 0x01F5A5) }, - { "Asia/Singapore" , FOR_V2(0x050681, 0x01F698) }, - { "Asia/Srednekolymsk" , FOR_V2(0x05080C, 0x01F74D) }, - { "Asia/Taipei" , FOR_V2(0x050CF2, 0x01F94E) }, - { "Asia/Tashkent" , FOR_V2(0x050FF7, 0x01FA81) }, - { "Asia/Tbilisi" , FOR_V2(0x051263, 0x01FB8F) }, - { "Asia/Tehran" , FOR_V2(0x05167A, 0x01FD32) }, - { "Asia/Tel_Aviv" , FOR_V2(0x05209C, 0x01FFA4) }, - { "Asia/Thimbu" , FOR_V2(0x052998, 0x0202F4) }, - { "Asia/Thimphu" , FOR_V2(0x052A6F, 0x02035B) }, - { "Asia/Tokyo" , FOR_V2(0x052B46, 0x0203C2) }, - { "Asia/Tomsk" , FOR_V2(0x052C87, 0x020453) }, - { "Asia/Ujung_Pandang" , FOR_V2(0x053166, 0x020643) }, - { "Asia/Ulaanbaatar" , FOR_V2(0x053270, 0x0206C2) }, - { "Asia/Ulan_Bator" , FOR_V2(0x05360C, 0x020836) }, - { "Asia/Urumqi" , FOR_V2(0x053993, 0x020995) }, - { "Asia/Ust-Nera" , FOR_V2(0x053A51, 0x0209F8) }, - { "Asia/Vientiane" , FOR_V2(0x053F55, 0x020BFF) }, - { "Asia/Vladivostok" , FOR_V2(0x054028, 0x020C64) }, - { "Asia/Yakutsk" , FOR_V2(0x0544FF, 0x020E56) }, - { "Asia/Yangon" , FOR_V2(0x0549D5, 0x021048) }, - { "Asia/Yekaterinburg" , FOR_V2(0x054AED, 0x0210C9) }, - { "Asia/Yerevan" , FOR_V2(0x054FE2, 0x0212C6) }, - { "Atlantic/Azores" , FOR_V2(0x05546D, 0x02148F) }, - { "Atlantic/Bermuda" , FOR_V2(0x05621B, 0x0219A3) }, - { "Atlantic/Canary" , FOR_V2(0x0569E1, 0x021C7E) }, - { "Atlantic/Cape_Verde" , FOR_V2(0x057164, 0x021F53) }, - { "Atlantic/Faeroe" , FOR_V2(0x05727E, 0x021FD8) }, - { "Atlantic/Faroe" , FOR_V2(0x0579A1, 0x02227C) }, - { "Atlantic/Jan_Mayen" , FOR_V2(0x0580C4, 0x022520) }, - { "Atlantic/Madeira" , FOR_V2(0x058984, 0x02285E) }, - { "Atlantic/Reykjavik" , FOR_V2(0x059732, 0x022D7B) }, - { "Atlantic/South_Georgia" , FOR_V2(0x059BC8, 0x022F41) }, - { "Atlantic/St_Helena" , FOR_V2(0x059C78, 0x022F97) }, - { "Atlantic/Stanley" , FOR_V2(0x059D18, 0x022FE8) }, - { "Australia/ACT" , FOR_V2(0x05A1E2, 0x0231C1) }, - { "Australia/Adelaide" , FOR_V2(0x05AA8A, 0x0234F0) }, - { "Australia/Brisbane" , FOR_V2(0x05B353, 0x02382E) }, - { "Australia/Broken_Hill" , FOR_V2(0x05B527, 0x023903) }, - { "Australia/Canberra" , FOR_V2(0x05BE12, 0x023C4E) }, - { "Australia/Currie" , FOR_V2(0x05C6BA, 0x023F7D) }, - { "Australia/Darwin" , FOR_V2(0x05CF78, 0x0242C2) }, - { "Australia/Eucla" , FOR_V2(0x05D0C6, 0x024359) }, - { "Australia/Hobart" , FOR_V2(0x05D2CF, 0x024441) }, - { "Australia/LHI" , FOR_V2(0x05DBFC, 0x0247AD) }, - { "Australia/Lindeman" , FOR_V2(0x05E34C, 0x024A60) }, - { "Australia/Lord_Howe" , FOR_V2(0x05E560, 0x024B51) }, - { "Australia/Melbourne" , FOR_V2(0x05ECC0, 0x024E14) }, - { "Australia/North" , FOR_V2(0x05F570, 0x02514B) }, - { "Australia/NSW" , FOR_V2(0x05F6AC, 0x0251D0) }, - { "Australia/Perth" , FOR_V2(0x05FF54, 0x0254FF) }, - { "Australia/Queensland" , FOR_V2(0x06014A, 0x0255E5) }, - { "Australia/South" , FOR_V2(0x060307, 0x0256A3) }, - { "Australia/Sydney" , FOR_V2(0x060BC1, 0x0259D2) }, - { "Australia/Tasmania" , FOR_V2(0x061485, 0x025D1D) }, - { "Australia/Victoria" , FOR_V2(0x061D9D, 0x026074) }, - { "Australia/West" , FOR_V2(0x062645, 0x0263A3) }, - { "Australia/Yancowinna" , FOR_V2(0x06281D, 0x02646B) }, - { "Brazil/Acre" , FOR_V2(0x0630EC, 0x02679A) }, - { "Brazil/DeNoronha" , FOR_V2(0x06336C, 0x02689C) }, - { "Brazil/East" , FOR_V2(0x063644, 0x0269BA) }, - { "Brazil/West" , FOR_V2(0x063BF4, 0x026BDC) }, - { "Canada/Atlantic" , FOR_V2(0x063E5C, 0x026CD2) }, - { "Canada/Central" , FOR_V2(0x064BC8, 0x0271BA) }, - { "Canada/Eastern" , FOR_V2(0x065708, 0x0275E0) }, - { "Canada/Mountain" , FOR_V2(0x0664BA, 0x027AE1) }, - { "Canada/Newfoundland" , FOR_V2(0x066DE2, 0x027E43) }, - { "Canada/Pacific" , FOR_V2(0x067C35, 0x028387) }, - { "Canada/Saskatchewan" , FOR_V2(0x06878D, 0x0287B1) }, - { "Canada/Yukon" , FOR_V2(0x068B6D, 0x02893A) }, - { "CET" , FOR_V2(0x0691B9, 0x028BAB) }, - { "Chile/Continental" , FOR_V2(0x0699F3, 0x028EB0) }, - { "Chile/EasterIsland" , FOR_V2(0x06A3E0, 0x02925C) }, - { "CST6CDT" , FOR_V2(0x06ACA5, 0x02959C) }, - { "Cuba" , FOR_V2(0x06B5B7, 0x0298F5) }, - { "EET" , FOR_V2(0x06BF33, 0x029C73) }, - { "Egypt" , FOR_V2(0x06C6B3, 0x029F36) }, - { "Eire" , FOR_V2(0x06CE62, 0x02A212) }, - { "EST" , FOR_V2(0x06DC12, 0x02A71A) }, - { "EST5EDT" , FOR_V2(0x06DC90, 0x02A75C) }, - { "Etc/GMT" , FOR_V2(0x06E5A2, 0x02AAB5) }, - { "Etc/GMT+0" , FOR_V2(0x06E620, 0x02AAF7) }, - { "Etc/GMT+1" , FOR_V2(0x06E69E, 0x02AB39) }, - { "Etc/GMT+10" , FOR_V2(0x06E71E, 0x02AB7B) }, - { "Etc/GMT+11" , FOR_V2(0x06E79F, 0x02ABBD) }, - { "Etc/GMT+12" , FOR_V2(0x06E820, 0x02ABFF) }, - { "Etc/GMT+2" , FOR_V2(0x06E8A1, 0x02AC41) }, - { "Etc/GMT+3" , FOR_V2(0x06E921, 0x02AC83) }, - { "Etc/GMT+4" , FOR_V2(0x06E9A1, 0x02ACC5) }, - { "Etc/GMT+5" , FOR_V2(0x06EA21, 0x02AD07) }, - { "Etc/GMT+6" , FOR_V2(0x06EAA1, 0x02AD49) }, - { "Etc/GMT+7" , FOR_V2(0x06EB21, 0x02AD8B) }, - { "Etc/GMT+8" , FOR_V2(0x06EBA1, 0x02ADCD) }, - { "Etc/GMT+9" , FOR_V2(0x06EC21, 0x02AE0F) }, - { "Etc/GMT-0" , FOR_V2(0x06ECA1, 0x02AE51) }, - { "Etc/GMT-1" , FOR_V2(0x06ED1F, 0x02AE93) }, - { "Etc/GMT-10" , FOR_V2(0x06EDA0, 0x02AED5) }, - { "Etc/GMT-11" , FOR_V2(0x06EE22, 0x02AF17) }, - { "Etc/GMT-12" , FOR_V2(0x06EEA4, 0x02AF59) }, - { "Etc/GMT-13" , FOR_V2(0x06EF26, 0x02AF9B) }, - { "Etc/GMT-14" , FOR_V2(0x06EFA8, 0x02AFDD) }, - { "Etc/GMT-2" , FOR_V2(0x06F02A, 0x02B01F) }, - { "Etc/GMT-3" , FOR_V2(0x06F0AB, 0x02B061) }, - { "Etc/GMT-4" , FOR_V2(0x06F12C, 0x02B0A3) }, - { "Etc/GMT-5" , FOR_V2(0x06F1AD, 0x02B0E5) }, - { "Etc/GMT-6" , FOR_V2(0x06F22E, 0x02B127) }, - { "Etc/GMT-7" , FOR_V2(0x06F2AF, 0x02B169) }, - { "Etc/GMT-8" , FOR_V2(0x06F330, 0x02B1AB) }, - { "Etc/GMT-9" , FOR_V2(0x06F3B1, 0x02B1ED) }, - { "Etc/GMT0" , FOR_V2(0x06F432, 0x02B22F) }, - { "Etc/Greenwich" , FOR_V2(0x06F4B0, 0x02B271) }, - { "Etc/UCT" , FOR_V2(0x06F52E, 0x02B2B3) }, - { "Etc/Universal" , FOR_V2(0x06F5AC, 0x02B2F5) }, - { "Etc/UTC" , FOR_V2(0x06F62A, 0x02B337) }, - { "Etc/Zulu" , FOR_V2(0x06F6A8, 0x02B379) }, - { "Europe/Amsterdam" , FOR_V2(0x06F726, 0x02B3BB) }, - { "Europe/Andorra" , FOR_V2(0x070290, 0x02B800) }, - { "Europe/Astrakhan" , FOR_V2(0x07096A, 0x02BA8D) }, - { "Europe/Athens" , FOR_V2(0x070E15, 0x02BC6B) }, - { "Europe/Belfast" , FOR_V2(0x0716F7, 0x02BFBF) }, - { "Europe/Belgrade" , FOR_V2(0x072543, 0x02C4FA) }, - { "Europe/Berlin" , FOR_V2(0x072CCF, 0x02C7CA) }, - { "Europe/Bratislava" , FOR_V2(0x0735E9, 0x02CB3B) }, - { "Europe/Brussels" , FOR_V2(0x073EF2, 0x02CE8F) }, - { "Europe/Bucharest" , FOR_V2(0x074A73, 0x02D2CD) }, - { "Europe/Budapest" , FOR_V2(0x075307, 0x02D5FE) }, - { "Europe/Busingen" , FOR_V2(0x075C53, 0x02D96E) }, - { "Europe/Chisinau" , FOR_V2(0x0763DC, 0x02DC36) }, - { "Europe/Copenhagen" , FOR_V2(0x076D3E, 0x02DFC5) }, - { "Europe/Dublin" , FOR_V2(0x0775A3, 0x02E2DB) }, - { "Europe/Gibraltar" , FOR_V2(0x078353, 0x02E7E3) }, - { "Europe/Guernsey" , FOR_V2(0x078F4B, 0x02EC4B) }, - { "Europe/Helsinki" , FOR_V2(0x079D97, 0x02F186) }, - { "Europe/Isle_of_Man" , FOR_V2(0x07A50F, 0x02F44D) }, - { "Europe/Istanbul" , FOR_V2(0x07B35B, 0x02F988) }, - { "Europe/Jersey" , FOR_V2(0x07BB02, 0x02FC75) }, - { "Europe/Kaliningrad" , FOR_V2(0x07C94E, 0x0301B0) }, - { "Europe/Kiev" , FOR_V2(0x07CF43, 0x030417) }, - { "Europe/Kirov" , FOR_V2(0x07D78B, 0x03074A) }, - { "Europe/Lisbon" , FOR_V2(0x07DC26, 0x030920) }, - { "Europe/Ljubljana" , FOR_V2(0x07E9D2, 0x030E3C) }, - { "Europe/London" , FOR_V2(0x07F15E, 0x03110C) }, - { "Europe/Luxembourg" , FOR_V2(0x07FFAA, 0x031647) }, - { "Europe/Madrid" , FOR_V2(0x080B38, 0x031A98) }, - { "Europe/Malta" , FOR_V2(0x08158A, 0x031E7D) }, - { "Europe/Mariehamn" , FOR_V2(0x081FD2, 0x032247) }, - { "Europe/Minsk" , FOR_V2(0x08274A, 0x03250E) }, - { "Europe/Monaco" , FOR_V2(0x082C7F, 0x032720) }, - { "Europe/Moscow" , FOR_V2(0x08380B, 0x032B6C) }, - { "Europe/Nicosia" , FOR_V2(0x083E2A, 0x032DEC) }, - { "Europe/Oslo" , FOR_V2(0x084608, 0x0330D4) }, - { "Europe/Paris" , FOR_V2(0x084EC8, 0x033412) }, - { "Europe/Podgorica" , FOR_V2(0x085A66, 0x033869) }, - { "Europe/Prague" , FOR_V2(0x0861F2, 0x033B39) }, - { "Europe/Riga" , FOR_V2(0x086AFB, 0x033E8D) }, - { "Europe/Rome" , FOR_V2(0x08739D, 0x0341D9) }, - { "Europe/Samara" , FOR_V2(0x087DFA, 0x0345A3) }, - { "Europe/San_Marino" , FOR_V2(0x0882DE, 0x0347A1) }, - { "Europe/Sarajevo" , FOR_V2(0x088D3B, 0x034B6B) }, - { "Europe/Saratov" , FOR_V2(0x0894C7, 0x034E3B) }, - { "Europe/Simferopol" , FOR_V2(0x089982, 0x035020) }, - { "Europe/Skopje" , FOR_V2(0x089F41, 0x03526F) }, - { "Europe/Sofia" , FOR_V2(0x08A6CD, 0x03553F) }, - { "Europe/Stockholm" , FOR_V2(0x08AEF6, 0x035846) }, - { "Europe/Tallinn" , FOR_V2(0x08B677, 0x035B06) }, - { "Europe/Tirane" , FOR_V2(0x08BEE7, 0x035E3F) }, - { "Europe/Tiraspol" , FOR_V2(0x08C717, 0x036145) }, - { "Europe/Ulyanovsk" , FOR_V2(0x08D079, 0x0364D4) }, - { "Europe/Uzhgorod" , FOR_V2(0x08D58A, 0x0366E1) }, - { "Europe/Vaduz" , FOR_V2(0x08DDA6, 0x0369FD) }, - { "Europe/Vatican" , FOR_V2(0x08E527, 0x036CBD) }, - { "Europe/Vienna" , FOR_V2(0x08EF84, 0x037087) }, - { "Europe/Vilnius" , FOR_V2(0x08F828, 0x0373BB) }, - { "Europe/Volgograd" , FOR_V2(0x0900A6, 0x037701) }, - { "Europe/Warsaw" , FOR_V2(0x090551, 0x0378DF) }, - { "Europe/Zagreb" , FOR_V2(0x090FBB, 0x037CC2) }, - { "Europe/Zaporozhye" , FOR_V2(0x091747, 0x037F92) }, - { "Europe/Zurich" , FOR_V2(0x091FA8, 0x0382D3) }, - { "Factory" , FOR_V2(0x092729, 0x038593) }, - { "GB" , FOR_V2(0x0927A9, 0x0385D5) }, - { "GB-Eire" , FOR_V2(0x0935F5, 0x038B10) }, - { "GMT" , FOR_V2(0x094441, 0x03904B) }, - { "GMT+0" , FOR_V2(0x0944BF, 0x03908D) }, - { "GMT-0" , FOR_V2(0x09453D, 0x0390CF) }, - { "GMT0" , FOR_V2(0x0945BB, 0x039111) }, - { "Greenwich" , FOR_V2(0x094639, 0x039153) }, - { "Hongkong" , FOR_V2(0x0946B7, 0x039195) }, - { "HST" , FOR_V2(0x094B76, 0x03936D) }, - { "Iceland" , FOR_V2(0x094BF5, 0x0393AF) }, - { "Indian/Antananarivo" , FOR_V2(0x09508B, 0x039575) }, - { "Indian/Chagos" , FOR_V2(0x095192, 0x0395F3) }, - { "Indian/Christmas" , FOR_V2(0x095265, 0x039658) }, - { "Indian/Cocos" , FOR_V2(0x095316, 0x0396AE) }, - { "Indian/Comoro" , FOR_V2(0x0953D0, 0x039706) }, - { "Indian/Kerguelen" , FOR_V2(0x0954D7, 0x039784) }, - { "Indian/Mahe" , FOR_V2(0x095588, 0x0397DA) }, - { "Indian/Maldives" , FOR_V2(0x095639, 0x039830) }, - { "Indian/Mauritius" , FOR_V2(0x09570C, 0x039895) }, - { "Indian/Mayotte" , FOR_V2(0x095809, 0x039909) }, - { "Indian/Reunion" , FOR_V2(0x095910, 0x039987) }, - { "Iran" , FOR_V2(0x0959C1, 0x0399DD) }, - { "Israel" , FOR_V2(0x0963E3, 0x039C4F) }, - { "Jamaica" , FOR_V2(0x096CDF, 0x039F9F) }, - { "Japan" , FOR_V2(0x096ECD, 0x03A06D) }, - { "Kwajalein" , FOR_V2(0x09700E, 0x03A0FE) }, - { "Libya" , FOR_V2(0x097156, 0x03A195) }, - { "MET" , FOR_V2(0x0973D3, 0x03A296) }, - { "Mexico/BajaNorte" , FOR_V2(0x097C0D, 0x03A59B) }, - { "Mexico/BajaSur" , FOR_V2(0x09853F, 0x03A904) }, - { "Mexico/General" , FOR_V2(0x098B41, 0x03AB45) }, - { "MST" , FOR_V2(0x09917D, 0x03AD99) }, - { "MST7MDT" , FOR_V2(0x0991FB, 0x03ADDB) }, - { "Navajo" , FOR_V2(0x099B0D, 0x03B134) }, - { "NZ" , FOR_V2(0x09A4A5, 0x03B4BE) }, - { "NZ-CHAT" , FOR_V2(0x09AE36, 0x03B846) }, - { "Pacific/Apia" , FOR_V2(0x09B656, 0x03BB41) }, - { "Pacific/Auckland" , FOR_V2(0x09BAAB, 0x03BCE9) }, - { "Pacific/Bougainville" , FOR_V2(0x09C454, 0x03C089) }, - { "Pacific/Chatham" , FOR_V2(0x09C578, 0x03C10E) }, - { "Pacific/Chuuk" , FOR_V2(0x09CDA7, 0x03C418) }, - { "Pacific/Easter" , FOR_V2(0x09CECF, 0x03C4A1) }, - { "Pacific/Efate" , FOR_V2(0x09D7A1, 0x03C7EE) }, - { "Pacific/Enderbury" , FOR_V2(0x09D97F, 0x03C8B2) }, - { "Pacific/Fakaofo" , FOR_V2(0x09DA84, 0x03C935) }, - { "Pacific/Fiji" , FOR_V2(0x09DB58, 0x03C99A) }, - { "Pacific/Funafuti" , FOR_V2(0x09DF99, 0x03CB30) }, - { "Pacific/Galapagos" , FOR_V2(0x09E04B, 0x03CB86) }, - { "Pacific/Gambier" , FOR_V2(0x09E156, 0x03CC0C) }, - { "Pacific/Guadalcanal" , FOR_V2(0x09E215, 0x03CC71) }, - { "Pacific/Guam" , FOR_V2(0x09E2C7, 0x03CCC7) }, - { "Pacific/Honolulu" , FOR_V2(0x09E4C1, 0x03CD96) }, - { "Pacific/Johnston" , FOR_V2(0x09E61C, 0x03CE3B) }, - { "Pacific/Kiritimati" , FOR_V2(0x09E771, 0x03CEDA) }, - { "Pacific/Kosrae" , FOR_V2(0x09E877, 0x03CF5C) }, - { "Pacific/Kwajalein" , FOR_V2(0x09E9E8, 0x03CFFF) }, - { "Pacific/Majuro" , FOR_V2(0x09EB39, 0x03D09F) }, - { "Pacific/Marquesas" , FOR_V2(0x09EC98, 0x03D14E) }, - { "Pacific/Midway" , FOR_V2(0x09ED62, 0x03D1B7) }, - { "Pacific/Nauru" , FOR_V2(0x09EE2B, 0x03D221) }, - { "Pacific/Niue" , FOR_V2(0x09EF33, 0x03D29C) }, - { "Pacific/Norfolk" , FOR_V2(0x09F030, 0x03D314) }, - { "Pacific/Noumea" , FOR_V2(0x09F3AC, 0x03D472) }, - { "Pacific/Pago_Pago" , FOR_V2(0x09F4E8, 0x03D501) }, - { "Pacific/Palau" , FOR_V2(0x09F5A3, 0x03D55D) }, - { "Pacific/Pitcairn" , FOR_V2(0x09F663, 0x03D5B3) }, - { "Pacific/Pohnpei" , FOR_V2(0x09F739, 0x03D61A) }, - { "Pacific/Ponape" , FOR_V2(0x09F882, 0x03D6B1) }, - { "Pacific/Port_Moresby" , FOR_V2(0x09F9BD, 0x03D73A) }, - { "Pacific/Rarotonga" , FOR_V2(0x09FAA0, 0x03D7AD) }, - { "Pacific/Saipan" , FOR_V2(0x09FCED, 0x03D89D) }, - { "Pacific/Samoa" , FOR_V2(0x09FEE7, 0x03D96C) }, - { "Pacific/Tahiti" , FOR_V2(0x09FFA2, 0x03D9C8) }, - { "Pacific/Tarawa" , FOR_V2(0x0A0062, 0x03DA2D) }, - { "Pacific/Tongatapu" , FOR_V2(0x0A0123, 0x03DA92) }, - { "Pacific/Truk" , FOR_V2(0x0A02A3, 0x03DB3D) }, - { "Pacific/Wake" , FOR_V2(0x0A03BC, 0x03DBB7) }, - { "Pacific/Wallis" , FOR_V2(0x0A0479, 0x03DC18) }, - { "Pacific/Yap" , FOR_V2(0x0A052B, 0x03DC6E) }, - { "Poland" , FOR_V2(0x0A0644, 0x03DCE8) }, - { "Portugal" , FOR_V2(0x0A10AE, 0x03E0CB) }, - { "PRC" , FOR_V2(0x0A1E47, 0x03E5D4) }, - { "PST8PDT" , FOR_V2(0x0A2084, 0x03E6BB) }, - { "ROC" , FOR_V2(0x0A2996, 0x03EA14) }, - { "ROK" , FOR_V2(0x0A2C9B, 0x03EB47) }, - { "Singapore" , FOR_V2(0x0A2F10, 0x03EC4A) }, - { "Turkey" , FOR_V2(0x0A309B, 0x03ECFF) }, - { "UCT" , FOR_V2(0x0A3842, 0x03EFEC) }, - { "Universal" , FOR_V2(0x0A38C0, 0x03F02E) }, - { "US/Alaska" , FOR_V2(0x0A393E, 0x03F070) }, - { "US/Aleutian" , FOR_V2(0x0A428D, 0x03F3E8) }, - { "US/Arizona" , FOR_V2(0x0A4BCD, 0x03F759) }, - { "US/Central" , FOR_V2(0x0A4D21, 0x03F7F0) }, - { "US/East-Indiana" , FOR_V2(0x0A5B25, 0x03FD14) }, - { "US/Eastern" , FOR_V2(0x0A61B3, 0x03FF8F) }, - { "US/Hawaii" , FOR_V2(0x0A6F8F, 0x04049F) }, - { "US/Indiana-Starke" , FOR_V2(0x0A70E4, 0x04053E) }, - { "US/Michigan" , FOR_V2(0x0A7A6C, 0x0408C8) }, - { "US/Mountain" , FOR_V2(0x0A832E, 0x040C09) }, - { "US/Pacific" , FOR_V2(0x0A8CC6, 0x040F93) }, - { "US/Pacific-New" , FOR_V2(0x0A97E6, 0x0413A9) }, - { "US/Samoa" , FOR_V2(0x0AA306, 0x0417BF) }, - { "UTC" , FOR_V2(0x0AA3C1, 0x04181B) }, - { "W-SU" , FOR_V2(0x0AA43F, 0x04185D) }, - { "WET" , FOR_V2(0x0AAA4A, 0x041AC9) }, - { "Zulu" , FOR_V2(0x0AB1C7, 0x041D8C) }, + { "America/Dawson_Creek" , FOR_V2(0x0122A8, 0x0072D8) }, + { "America/Denver" , FOR_V2(0x0126EE, 0x00749A) }, + { "America/Detroit" , FOR_V2(0x01309B, 0x007839) }, + { "America/Dominica" , FOR_V2(0x013976, 0x007B93) }, + { "America/Edmonton" , FOR_V2(0x013A16, 0x007BE4) }, + { "America/Eirunepe" , FOR_V2(0x01435B, 0x007F63) }, + { "America/El_Salvador" , FOR_V2(0x014606, 0x00807E) }, + { "America/Ensenada" , FOR_V2(0x0146F2, 0x0080ED) }, + { "America/Fort_Nelson" , FOR_V2(0x015024, 0x008456) }, + { "America/Fort_Wayne" , FOR_V2(0x015904, 0x0087B5) }, + { "America/Fortaleza" , FOR_V2(0x015F92, 0x008A30) }, + { "America/Glace_Bay" , FOR_V2(0x016290, 0x008B74) }, + { "America/Godthab" , FOR_V2(0x016B47, 0x008EBF) }, + { "America/Goose_Bay" , FOR_V2(0x0172A9, 0x009179) }, + { "America/Grand_Turk" , FOR_V2(0x017F5F, 0x009646) }, + { "America/Grenada" , FOR_V2(0x0186A3, 0x0098FA) }, + { "America/Guadeloupe" , FOR_V2(0x018743, 0x00994B) }, + { "America/Guatemala" , FOR_V2(0x0187E3, 0x00999C) }, + { "America/Guayaquil" , FOR_V2(0x018907, 0x009A1F) }, + { "America/Guyana" , FOR_V2(0x018A1B, 0x009AAA) }, + { "America/Halifax" , FOR_V2(0x018B13, 0x009B20) }, + { "America/Havana" , FOR_V2(0x01989D, 0x00A026) }, + { "America/Hermosillo" , FOR_V2(0x01A219, 0x00A3A4) }, + { "America/Indiana/Indianapolis" , FOR_V2(0x01A3E4, 0x00A47E) }, + { "America/Indiana/Knox" , FOR_V2(0x01AA8B, 0x00A712) }, + { "America/Indiana/Marengo" , FOR_V2(0x01B428, 0x00AAB1) }, + { "America/Indiana/Petersburg" , FOR_V2(0x01BB05, 0x00AD57) }, + { "America/Indiana/Tell_City" , FOR_V2(0x01C294, 0x00B03A) }, + { "America/Indiana/Vevay" , FOR_V2(0x01C948, 0x00B2D4) }, + { "America/Indiana/Vincennes" , FOR_V2(0x01CEF4, 0x00B50F) }, + { "America/Indiana/Winamac" , FOR_V2(0x01D5BA, 0x00B7B0) }, + { "America/Indianapolis" , FOR_V2(0x01DCCE, 0x00BA69) }, + { "America/Inuvik" , FOR_V2(0x01E35C, 0x00BCE4) }, + { "America/Iqaluit" , FOR_V2(0x01EAE2, 0x00BFBB) }, + { "America/Jamaica" , FOR_V2(0x01F2FC, 0x00C2DF) }, + { "America/Jujuy" , FOR_V2(0x01F4EA, 0x00C3AD) }, + { "America/Juneau" , FOR_V2(0x01F90E, 0x00C549) }, + { "America/Kentucky/Louisville" , FOR_V2(0x02025F, 0x00C8CE) }, + { "America/Kentucky/Monticello" , FOR_V2(0x020D5D, 0x00CCF2) }, + { "America/Knox_IN" , FOR_V2(0x0216AD, 0x00D076) }, + { "America/Kralendijk" , FOR_V2(0x022035, 0x00D400) }, + { "America/La_Paz" , FOR_V2(0x0220FB, 0x00D462) }, + { "America/Lima" , FOR_V2(0x0221EF, 0x00D4D6) }, + { "America/Los_Angeles" , FOR_V2(0x022391, 0x00D587) }, + { "America/Louisville" , FOR_V2(0x022EB8, 0x00D9A4) }, + { "America/Lower_Princes" , FOR_V2(0x023998, 0x00DDAA) }, + { "America/Maceio" , FOR_V2(0x023A5E, 0x00DE0C) }, + { "America/Managua" , FOR_V2(0x023D62, 0x00DF44) }, + { "America/Manaus" , FOR_V2(0x023F1C, 0x00E004) }, + { "America/Marigot" , FOR_V2(0x024193, 0x00E109) }, + { "America/Martinique" , FOR_V2(0x024233, 0x00E15A) }, + { "America/Matamoros" , FOR_V2(0x024327, 0x00E1CF) }, + { "America/Mazatlan" , FOR_V2(0x0248DF, 0x00E416) }, + { "America/Mendoza" , FOR_V2(0x024F16, 0x00E68C) }, + { "America/Menominee" , FOR_V2(0x025356, 0x00E832) }, + { "America/Merida" , FOR_V2(0x025C63, 0x00EBA4) }, + { "America/Metlakatla" , FOR_V2(0x02621D, 0x00EDDD) }, + { "America/Mexico_City" , FOR_V2(0x0267CF, 0x00F012) }, + { "America/Miquelon" , FOR_V2(0x026E17, 0x00F272) }, + { "America/Moncton" , FOR_V2(0x0274A5, 0x00F4DF) }, + { "America/Monterrey" , FOR_V2(0x02811B, 0x00F982) }, + { "America/Montevideo" , FOR_V2(0x0286DA, 0x00FBD0) }, + { "America/Montreal" , FOR_V2(0x028CCC, 0x00FE1D) }, + { "America/Montserrat" , FOR_V2(0x029A7E, 0x01031E) }, + { "America/Nassau" , FOR_V2(0x029B1E, 0x01036F) }, + { "America/New_York" , FOR_V2(0x02A3FC, 0x0106AE) }, + { "America/Nipigon" , FOR_V2(0x02B1EC, 0x010BD2) }, + { "America/Nome" , FOR_V2(0x02BA63, 0x010F0A) }, + { "America/Noronha" , FOR_V2(0x02C3BB, 0x01128D) }, + { "America/North_Dakota/Beulah" , FOR_V2(0x02C6A3, 0x0113BB) }, + { "America/North_Dakota/Center" , FOR_V2(0x02D010, 0x01174A) }, + { "America/North_Dakota/New_Salem" , FOR_V2(0x02D97D, 0x011AD9) }, + { "America/Nuuk" , FOR_V2(0x02E2F0, 0x011E6E) }, + { "America/Ojinaga" , FOR_V2(0x02EA68, 0x01213E) }, + { "America/Panama" , FOR_V2(0x02F068, 0x012398) }, + { "America/Pangnirtung" , FOR_V2(0x02F12A, 0x0123F8) }, + { "America/Paramaribo" , FOR_V2(0x02F97E, 0x012735) }, + { "America/Phoenix" , FOR_V2(0x02FA90, 0x0127B6) }, + { "America/Port-au-Prince" , FOR_V2(0x02FC01, 0x01286A) }, + { "America/Port_of_Spain" , FOR_V2(0x0301A7, 0x012A8B) }, + { "America/Porto_Acre" , FOR_V2(0x030247, 0x012ADC) }, + { "America/Porto_Velho" , FOR_V2(0x0304C7, 0x012BDE) }, + { "America/Puerto_Rico" , FOR_V2(0x03071B, 0x012CD2) }, + { "America/Punta_Arenas" , FOR_V2(0x03081D, 0x012D4E) }, + { "America/Rainy_River" , FOR_V2(0x030FAB, 0x013037) }, + { "America/Rankin_Inlet" , FOR_V2(0x031823, 0x013370) }, + { "America/Recife" , FOR_V2(0x031FA9, 0x01364A) }, + { "America/Regina" , FOR_V2(0x03228B, 0x013772) }, + { "America/Resolute" , FOR_V2(0x032680, 0x013910) }, + { "America/Rio_Branco" , FOR_V2(0x032E07, 0x013BEB) }, + { "America/Rosario" , FOR_V2(0x03308B, 0x013CF1) }, + { "America/Santa_Isabel" , FOR_V2(0x0334CB, 0x013E97) }, + { "America/Santarem" , FOR_V2(0x033DFD, 0x014200) }, + { "America/Santiago" , FOR_V2(0x03406E, 0x014302) }, + { "America/Santo_Domingo" , FOR_V2(0x034A6D, 0x0146C0) }, + { "America/Sao_Paulo" , FOR_V2(0x034C43, 0x01478C) }, + { "America/Scoresbysund" , FOR_V2(0x035229, 0x0149E4) }, + { "America/Shiprock" , FOR_V2(0x0359CE, 0x014CCF) }, + { "America/Sitka" , FOR_V2(0x036366, 0x015059) }, + { "America/St_Barthelemy" , FOR_V2(0x036C9E, 0x0153D1) }, + { "America/St_Johns" , FOR_V2(0x036D3E, 0x015422) }, + { "America/St_Kitts" , FOR_V2(0x037BB3, 0x015988) }, + { "America/St_Lucia" , FOR_V2(0x037C53, 0x0159D9) }, + { "America/St_Thomas" , FOR_V2(0x037CF3, 0x015A2A) }, + { "America/St_Vincent" , FOR_V2(0x037D93, 0x015A7B) }, + { "America/Swift_Current" , FOR_V2(0x037E33, 0x015ACC) }, + { "America/Tegucigalpa" , FOR_V2(0x038081, 0x015BD1) }, + { "America/Thule" , FOR_V2(0x038189, 0x015C4A) }, + { "America/Thunder_Bay" , FOR_V2(0x038781, 0x015E89) }, + { "America/Tijuana" , FOR_V2(0x039041, 0x0161DA) }, + { "America/Toronto" , FOR_V2(0x039994, 0x016564) }, + { "America/Tortola" , FOR_V2(0x03A763, 0x016A82) }, + { "America/Vancouver" , FOR_V2(0x03A803, 0x016AD3) }, + { "America/Virgin" , FOR_V2(0x03B374, 0x016F16) }, + { "America/Whitehorse" , FOR_V2(0x03B414, 0x016F67) }, + { "America/Winnipeg" , FOR_V2(0x03BA84, 0x0171F3) }, + { "America/Yakutat" , FOR_V2(0x03C5E1, 0x017636) }, + { "America/Yellowknife" , FOR_V2(0x03CEFE, 0x01799F) }, + { "Antarctica/Casey" , FOR_V2(0x03D6CF, 0x017C99) }, + { "Antarctica/Davis" , FOR_V2(0x03D860, 0x017D4B) }, + { "Antarctica/DumontDUrville" , FOR_V2(0x03D99A, 0x017DDC) }, + { "Antarctica/Macquarie" , FOR_V2(0x03DA78, 0x017E4C) }, + { "Antarctica/Mawson" , FOR_V2(0x03E35A, 0x01819C) }, + { "Antarctica/McMurdo" , FOR_V2(0x03E433, 0x018207) }, + { "Antarctica/Palmer" , FOR_V2(0x03EDEA, 0x0185B5) }, + { "Antarctica/Rothera" , FOR_V2(0x03F386, 0x0187E2) }, + { "Antarctica/South_Pole" , FOR_V2(0x03F43D, 0x01883F) }, + { "Antarctica/Syowa" , FOR_V2(0x03FDCE, 0x018BC7) }, + { "Antarctica/Troll" , FOR_V2(0x03FE84, 0x018C22) }, + { "Antarctica/Vostok" , FOR_V2(0x04031F, 0x018DDF) }, + { "Arctic/Longyearbyen" , FOR_V2(0x0403D6, 0x018E3B) }, + { "Asia/Aden" , FOR_V2(0x040C96, 0x019179) }, + { "Asia/Almaty" , FOR_V2(0x040D47, 0x0191CF) }, + { "Asia/Amman" , FOR_V2(0x04114F, 0x019378) }, + { "Asia/Anadyr" , FOR_V2(0x041898, 0x019629) }, + { "Asia/Aqtau" , FOR_V2(0x041D5B, 0x019813) }, + { "Asia/Aqtobe" , FOR_V2(0x042153, 0x0199B5) }, + { "Asia/Ashgabat" , FOR_V2(0x04255F, 0x019B5B) }, + { "Asia/Ashkhabad" , FOR_V2(0x0427D6, 0x019C64) }, + { "Asia/Atyrau" , FOR_V2(0x042A4D, 0x019D6D) }, + { "Asia/Baghdad" , FOR_V2(0x042E4D, 0x019F13) }, + { "Asia/Bahrain" , FOR_V2(0x043230, 0x01A098) }, + { "Asia/Baku" , FOR_V2(0x043303, 0x01A0FD) }, + { "Asia/Bangkok" , FOR_V2(0x0437DA, 0x01A2E4) }, + { "Asia/Barnaul" , FOR_V2(0x0438AD, 0x01A349) }, + { "Asia/Beirut" , FOR_V2(0x043D8C, 0x01A539) }, + { "Asia/Bishkek" , FOR_V2(0x044602, 0x01A851) }, + { "Asia/Brunei" , FOR_V2(0x0449E5, 0x01A9DA) }, + { "Asia/Calcutta" , FOR_V2(0x044ABC, 0x01AA41) }, + { "Asia/Chita" , FOR_V2(0x044BE5, 0x01AAC1) }, + { "Asia/Choibalsan" , FOR_V2(0x0450CA, 0x01ACB9) }, + { "Asia/Chongqing" , FOR_V2(0x04549D, 0x01AE45) }, + { "Asia/Chungking" , FOR_V2(0x0456DA, 0x01AF2C) }, + { "Asia/Colombo" , FOR_V2(0x045917, 0x01B013) }, + { "Asia/Dacca" , FOR_V2(0x045A97, 0x01B0C0) }, + { "Asia/Damascus" , FOR_V2(0x045BF4, 0x01B160) }, + { "Asia/Dhaka" , FOR_V2(0x0464F6, 0x01B4AA) }, + { "Asia/Dili" , FOR_V2(0x046653, 0x01B54A) }, + { "Asia/Dubai" , FOR_V2(0x046742, 0x01B5B9) }, + { "Asia/Dushanbe" , FOR_V2(0x0467F3, 0x01B60F) }, + { "Asia/Famagusta" , FOR_V2(0x046A4E, 0x01B70C) }, + { "Asia/Gaza" , FOR_V2(0x047255, 0x01BA12) }, + { "Asia/Harbin" , FOR_V2(0x047B79, 0x01BD77) }, + { "Asia/Hebron" , FOR_V2(0x047DB6, 0x01BE5E) }, + { "Asia/Ho_Chi_Minh" , FOR_V2(0x0486F5, 0x01C1CC) }, + { "Asia/Hong_Kong" , FOR_V2(0x048860, 0x01C26F) }, + { "Asia/Hovd" , FOR_V2(0x048D1F, 0x01C447) }, + { "Asia/Irkutsk" , FOR_V2(0x0490D1, 0x01C5D1) }, + { "Asia/Istanbul" , FOR_V2(0x0495D2, 0x01C7DA) }, + { "Asia/Jakarta" , FOR_V2(0x049D79, 0x01CAC7) }, + { "Asia/Jayapura" , FOR_V2(0x049EF5, 0x01CB7E) }, + { "Asia/Jerusalem" , FOR_V2(0x04A014, 0x01CC25) }, + { "Asia/Kabul" , FOR_V2(0x04A910, 0x01CF75) }, + { "Asia/Kamchatka" , FOR_V2(0x04A9EC, 0x01CFDC) }, + { "Asia/Karachi" , FOR_V2(0x04AE98, 0x01D1BA) }, + { "Asia/Kashgar" , FOR_V2(0x04B01F, 0x01D26A) }, + { "Asia/Kathmandu" , FOR_V2(0x04B0D0, 0x01D2C0) }, + { "Asia/Katmandu" , FOR_V2(0x04B1B0, 0x01D329) }, + { "Asia/Khandyga" , FOR_V2(0x04B290, 0x01D392) }, + { "Asia/Kolkata" , FOR_V2(0x04B7B1, 0x01D5AB) }, + { "Asia/Krasnoyarsk" , FOR_V2(0x04B8DA, 0x01D62B) }, + { "Asia/Kuala_Lumpur" , FOR_V2(0x04BDB6, 0x01D823) }, + { "Asia/Kuching" , FOR_V2(0x04BF55, 0x01D8EC) }, + { "Asia/Kuwait" , FOR_V2(0x04C152, 0x01D9CD) }, + { "Asia/Macao" , FOR_V2(0x04C203, 0x01DA23) }, + { "Asia/Macau" , FOR_V2(0x04C6DA, 0x01DC03) }, + { "Asia/Magadan" , FOR_V2(0x04CBB1, 0x01DDE3) }, + { "Asia/Makassar" , FOR_V2(0x04D093, 0x01DFD7) }, + { "Asia/Manila" , FOR_V2(0x04D1E6, 0x01E09F) }, + { "Asia/Muscat" , FOR_V2(0x04D33A, 0x01E132) }, + { "Asia/Nicosia" , FOR_V2(0x04D3EB, 0x01E188) }, + { "Asia/Novokuznetsk" , FOR_V2(0x04DBDC, 0x01E483) }, + { "Asia/Novosibirsk" , FOR_V2(0x04E086, 0x01E660) }, + { "Asia/Omsk" , FOR_V2(0x04E56B, 0x01E856) }, + { "Asia/Oral" , FOR_V2(0x04EA3B, 0x01EA42) }, + { "Asia/Phnom_Penh" , FOR_V2(0x04EE43, 0x01EBE7) }, + { "Asia/Pontianak" , FOR_V2(0x04EF16, 0x01EC4C) }, + { "Asia/Pyongyang" , FOR_V2(0x04F099, 0x01ED0B) }, + { "Asia/Qatar" , FOR_V2(0x04F192, 0x01ED80) }, + { "Asia/Qostanay" , FOR_V2(0x04F265, 0x01EDE5) }, + { "Asia/Qyzylorda" , FOR_V2(0x04F67E, 0x01EF98) }, + { "Asia/Rangoon" , FOR_V2(0x04FAA8, 0x01F153) }, + { "Asia/Riyadh" , FOR_V2(0x04FBC0, 0x01F1D4) }, + { "Asia/Saigon" , FOR_V2(0x04FC71, 0x01F22A) }, + { "Asia/Sakhalin" , FOR_V2(0x04FDDC, 0x01F2CD) }, + { "Asia/Samarkand" , FOR_V2(0x0502B2, 0x01F4BF) }, + { "Asia/Seoul" , FOR_V2(0x050510, 0x01F5C6) }, + { "Asia/Shanghai" , FOR_V2(0x050785, 0x01F6C9) }, + { "Asia/Singapore" , FOR_V2(0x0509CE, 0x01F7BC) }, + { "Asia/Srednekolymsk" , FOR_V2(0x050B59, 0x01F871) }, + { "Asia/Taipei" , FOR_V2(0x05103F, 0x01FA72) }, + { "Asia/Tashkent" , FOR_V2(0x051344, 0x01FBA5) }, + { "Asia/Tbilisi" , FOR_V2(0x0515B0, 0x01FCB3) }, + { "Asia/Tehran" , FOR_V2(0x0519C7, 0x01FE56) }, + { "Asia/Tel_Aviv" , FOR_V2(0x0523E9, 0x0200C8) }, + { "Asia/Thimbu" , FOR_V2(0x052CE5, 0x020418) }, + { "Asia/Thimphu" , FOR_V2(0x052DBC, 0x02047F) }, + { "Asia/Tokyo" , FOR_V2(0x052E93, 0x0204E6) }, + { "Asia/Tomsk" , FOR_V2(0x052FD4, 0x020577) }, + { "Asia/Ujung_Pandang" , FOR_V2(0x0534B3, 0x020767) }, + { "Asia/Ulaanbaatar" , FOR_V2(0x0535BD, 0x0207E6) }, + { "Asia/Ulan_Bator" , FOR_V2(0x053959, 0x02095A) }, + { "Asia/Urumqi" , FOR_V2(0x053CE0, 0x020AB9) }, + { "Asia/Ust-Nera" , FOR_V2(0x053D9E, 0x020B1C) }, + { "Asia/Vientiane" , FOR_V2(0x0542A2, 0x020D23) }, + { "Asia/Vladivostok" , FOR_V2(0x054375, 0x020D88) }, + { "Asia/Yakutsk" , FOR_V2(0x05484C, 0x020F7A) }, + { "Asia/Yangon" , FOR_V2(0x054D22, 0x02116C) }, + { "Asia/Yekaterinburg" , FOR_V2(0x054E3A, 0x0211ED) }, + { "Asia/Yerevan" , FOR_V2(0x05532F, 0x0213EA) }, + { "Atlantic/Azores" , FOR_V2(0x0557BA, 0x0215B3) }, + { "Atlantic/Bermuda" , FOR_V2(0x056568, 0x021AC7) }, + { "Atlantic/Canary" , FOR_V2(0x056D2E, 0x021DA2) }, + { "Atlantic/Cape_Verde" , FOR_V2(0x0574B1, 0x022077) }, + { "Atlantic/Faeroe" , FOR_V2(0x0575CB, 0x0220FC) }, + { "Atlantic/Faroe" , FOR_V2(0x057CEE, 0x0223A0) }, + { "Atlantic/Jan_Mayen" , FOR_V2(0x058411, 0x022644) }, + { "Atlantic/Madeira" , FOR_V2(0x058CD1, 0x022982) }, + { "Atlantic/Reykjavik" , FOR_V2(0x059A7F, 0x022E9F) }, + { "Atlantic/South_Georgia" , FOR_V2(0x059F15, 0x023065) }, + { "Atlantic/St_Helena" , FOR_V2(0x059FC5, 0x0230BB) }, + { "Atlantic/Stanley" , FOR_V2(0x05A065, 0x02310C) }, + { "Australia/ACT" , FOR_V2(0x05A52F, 0x0232E5) }, + { "Australia/Adelaide" , FOR_V2(0x05ADD7, 0x023614) }, + { "Australia/Brisbane" , FOR_V2(0x05B6A0, 0x023952) }, + { "Australia/Broken_Hill" , FOR_V2(0x05B874, 0x023A27) }, + { "Australia/Canberra" , FOR_V2(0x05C15F, 0x023D72) }, + { "Australia/Currie" , FOR_V2(0x05CA07, 0x0240A1) }, + { "Australia/Darwin" , FOR_V2(0x05D2C5, 0x0243E6) }, + { "Australia/Eucla" , FOR_V2(0x05D413, 0x02447D) }, + { "Australia/Hobart" , FOR_V2(0x05D61C, 0x024565) }, + { "Australia/LHI" , FOR_V2(0x05DF49, 0x0248D1) }, + { "Australia/Lindeman" , FOR_V2(0x05E699, 0x024B84) }, + { "Australia/Lord_Howe" , FOR_V2(0x05E8AD, 0x024C75) }, + { "Australia/Melbourne" , FOR_V2(0x05F00D, 0x024F38) }, + { "Australia/North" , FOR_V2(0x05F8BD, 0x02526F) }, + { "Australia/NSW" , FOR_V2(0x05F9F9, 0x0252F4) }, + { "Australia/Perth" , FOR_V2(0x0602A1, 0x025623) }, + { "Australia/Queensland" , FOR_V2(0x060497, 0x025709) }, + { "Australia/South" , FOR_V2(0x060654, 0x0257C7) }, + { "Australia/Sydney" , FOR_V2(0x060F0E, 0x025AF6) }, + { "Australia/Tasmania" , FOR_V2(0x0617D2, 0x025E41) }, + { "Australia/Victoria" , FOR_V2(0x0620EA, 0x026198) }, + { "Australia/West" , FOR_V2(0x062992, 0x0264C7) }, + { "Australia/Yancowinna" , FOR_V2(0x062B6A, 0x02658F) }, + { "Brazil/Acre" , FOR_V2(0x063439, 0x0268BE) }, + { "Brazil/DeNoronha" , FOR_V2(0x0636B9, 0x0269C0) }, + { "Brazil/East" , FOR_V2(0x063991, 0x026ADE) }, + { "Brazil/West" , FOR_V2(0x063F41, 0x026D00) }, + { "Canada/Atlantic" , FOR_V2(0x0641A9, 0x026DF6) }, + { "Canada/Central" , FOR_V2(0x064F15, 0x0272DE) }, + { "Canada/Eastern" , FOR_V2(0x065A55, 0x027704) }, + { "Canada/Mountain" , FOR_V2(0x066807, 0x027C05) }, + { "Canada/Newfoundland" , FOR_V2(0x06712F, 0x027F67) }, + { "Canada/Pacific" , FOR_V2(0x067F82, 0x0284AB) }, + { "Canada/Saskatchewan" , FOR_V2(0x068ADA, 0x0288D5) }, + { "Canada/Yukon" , FOR_V2(0x068EBA, 0x028A5E) }, + { "CET" , FOR_V2(0x069514, 0x028CD4) }, + { "Chile/Continental" , FOR_V2(0x069D4E, 0x028FD9) }, + { "Chile/EasterIsland" , FOR_V2(0x06A73B, 0x029385) }, + { "CST6CDT" , FOR_V2(0x06B000, 0x0296C5) }, + { "Cuba" , FOR_V2(0x06B912, 0x029A1E) }, + { "EET" , FOR_V2(0x06C28E, 0x029D9C) }, + { "Egypt" , FOR_V2(0x06CA0E, 0x02A05F) }, + { "Eire" , FOR_V2(0x06D1BD, 0x02A33B) }, + { "EST" , FOR_V2(0x06DF6D, 0x02A843) }, + { "EST5EDT" , FOR_V2(0x06DFEB, 0x02A885) }, + { "Etc/GMT" , FOR_V2(0x06E8FD, 0x02ABDE) }, + { "Etc/GMT+0" , FOR_V2(0x06E97B, 0x02AC20) }, + { "Etc/GMT+1" , FOR_V2(0x06E9F9, 0x02AC62) }, + { "Etc/GMT+10" , FOR_V2(0x06EA79, 0x02ACA4) }, + { "Etc/GMT+11" , FOR_V2(0x06EAFA, 0x02ACE6) }, + { "Etc/GMT+12" , FOR_V2(0x06EB7B, 0x02AD28) }, + { "Etc/GMT+2" , FOR_V2(0x06EBFC, 0x02AD6A) }, + { "Etc/GMT+3" , FOR_V2(0x06EC7C, 0x02ADAC) }, + { "Etc/GMT+4" , FOR_V2(0x06ECFC, 0x02ADEE) }, + { "Etc/GMT+5" , FOR_V2(0x06ED7C, 0x02AE30) }, + { "Etc/GMT+6" , FOR_V2(0x06EDFC, 0x02AE72) }, + { "Etc/GMT+7" , FOR_V2(0x06EE7C, 0x02AEB4) }, + { "Etc/GMT+8" , FOR_V2(0x06EEFC, 0x02AEF6) }, + { "Etc/GMT+9" , FOR_V2(0x06EF7C, 0x02AF38) }, + { "Etc/GMT-0" , FOR_V2(0x06EFFC, 0x02AF7A) }, + { "Etc/GMT-1" , FOR_V2(0x06F07A, 0x02AFBC) }, + { "Etc/GMT-10" , FOR_V2(0x06F0FB, 0x02AFFE) }, + { "Etc/GMT-11" , FOR_V2(0x06F17D, 0x02B040) }, + { "Etc/GMT-12" , FOR_V2(0x06F1FF, 0x02B082) }, + { "Etc/GMT-13" , FOR_V2(0x06F281, 0x02B0C4) }, + { "Etc/GMT-14" , FOR_V2(0x06F303, 0x02B106) }, + { "Etc/GMT-2" , FOR_V2(0x06F385, 0x02B148) }, + { "Etc/GMT-3" , FOR_V2(0x06F406, 0x02B18A) }, + { "Etc/GMT-4" , FOR_V2(0x06F487, 0x02B1CC) }, + { "Etc/GMT-5" , FOR_V2(0x06F508, 0x02B20E) }, + { "Etc/GMT-6" , FOR_V2(0x06F589, 0x02B250) }, + { "Etc/GMT-7" , FOR_V2(0x06F60A, 0x02B292) }, + { "Etc/GMT-8" , FOR_V2(0x06F68B, 0x02B2D4) }, + { "Etc/GMT-9" , FOR_V2(0x06F70C, 0x02B316) }, + { "Etc/GMT0" , FOR_V2(0x06F78D, 0x02B358) }, + { "Etc/Greenwich" , FOR_V2(0x06F80B, 0x02B39A) }, + { "Etc/UCT" , FOR_V2(0x06F889, 0x02B3DC) }, + { "Etc/Universal" , FOR_V2(0x06F907, 0x02B41E) }, + { "Etc/UTC" , FOR_V2(0x06F985, 0x02B460) }, + { "Etc/Zulu" , FOR_V2(0x06FA03, 0x02B4A2) }, + { "Europe/Amsterdam" , FOR_V2(0x06FA81, 0x02B4E4) }, + { "Europe/Andorra" , FOR_V2(0x0705EB, 0x02B929) }, + { "Europe/Astrakhan" , FOR_V2(0x070CC5, 0x02BBB6) }, + { "Europe/Athens" , FOR_V2(0x071170, 0x02BD94) }, + { "Europe/Belfast" , FOR_V2(0x071A52, 0x02C0E8) }, + { "Europe/Belgrade" , FOR_V2(0x07289E, 0x02C623) }, + { "Europe/Berlin" , FOR_V2(0x07302A, 0x02C8F3) }, + { "Europe/Bratislava" , FOR_V2(0x073944, 0x02CC64) }, + { "Europe/Brussels" , FOR_V2(0x07424D, 0x02CFB8) }, + { "Europe/Bucharest" , FOR_V2(0x074DCE, 0x02D3F6) }, + { "Europe/Budapest" , FOR_V2(0x075662, 0x02D727) }, + { "Europe/Busingen" , FOR_V2(0x075FAE, 0x02DA97) }, + { "Europe/Chisinau" , FOR_V2(0x076737, 0x02DD5F) }, + { "Europe/Copenhagen" , FOR_V2(0x077099, 0x02E0EE) }, + { "Europe/Dublin" , FOR_V2(0x0778FE, 0x02E404) }, + { "Europe/Gibraltar" , FOR_V2(0x0786AE, 0x02E90C) }, + { "Europe/Guernsey" , FOR_V2(0x0792A6, 0x02ED74) }, + { "Europe/Helsinki" , FOR_V2(0x07A0F2, 0x02F2AF) }, + { "Europe/Isle_of_Man" , FOR_V2(0x07A86A, 0x02F576) }, + { "Europe/Istanbul" , FOR_V2(0x07B6B6, 0x02FAB1) }, + { "Europe/Jersey" , FOR_V2(0x07BE5D, 0x02FD9E) }, + { "Europe/Kaliningrad" , FOR_V2(0x07CCA9, 0x0302D9) }, + { "Europe/Kiev" , FOR_V2(0x07D29E, 0x030540) }, + { "Europe/Kirov" , FOR_V2(0x07DAE6, 0x030873) }, + { "Europe/Lisbon" , FOR_V2(0x07DF81, 0x030A49) }, + { "Europe/Ljubljana" , FOR_V2(0x07ED2D, 0x030F65) }, + { "Europe/London" , FOR_V2(0x07F4B9, 0x031235) }, + { "Europe/Luxembourg" , FOR_V2(0x080305, 0x031770) }, + { "Europe/Madrid" , FOR_V2(0x080E93, 0x031BC1) }, + { "Europe/Malta" , FOR_V2(0x0818E5, 0x031FA6) }, + { "Europe/Mariehamn" , FOR_V2(0x08232D, 0x032370) }, + { "Europe/Minsk" , FOR_V2(0x082AA5, 0x032637) }, + { "Europe/Monaco" , FOR_V2(0x082FDA, 0x032849) }, + { "Europe/Moscow" , FOR_V2(0x083B66, 0x032C95) }, + { "Europe/Nicosia" , FOR_V2(0x084185, 0x032F15) }, + { "Europe/Oslo" , FOR_V2(0x084963, 0x0331FD) }, + { "Europe/Paris" , FOR_V2(0x085223, 0x03353B) }, + { "Europe/Podgorica" , FOR_V2(0x085DC1, 0x033992) }, + { "Europe/Prague" , FOR_V2(0x08654D, 0x033C62) }, + { "Europe/Riga" , FOR_V2(0x086E56, 0x033FB6) }, + { "Europe/Rome" , FOR_V2(0x0876F8, 0x034302) }, + { "Europe/Samara" , FOR_V2(0x088155, 0x0346CC) }, + { "Europe/San_Marino" , FOR_V2(0x088639, 0x0348CA) }, + { "Europe/Sarajevo" , FOR_V2(0x089096, 0x034C94) }, + { "Europe/Saratov" , FOR_V2(0x089822, 0x034F64) }, + { "Europe/Simferopol" , FOR_V2(0x089CDD, 0x035149) }, + { "Europe/Skopje" , FOR_V2(0x08A29C, 0x035398) }, + { "Europe/Sofia" , FOR_V2(0x08AA28, 0x035668) }, + { "Europe/Stockholm" , FOR_V2(0x08B251, 0x03596F) }, + { "Europe/Tallinn" , FOR_V2(0x08B9D2, 0x035C2F) }, + { "Europe/Tirane" , FOR_V2(0x08C242, 0x035F68) }, + { "Europe/Tiraspol" , FOR_V2(0x08CA72, 0x03626E) }, + { "Europe/Ulyanovsk" , FOR_V2(0x08D3D4, 0x0365FD) }, + { "Europe/Uzhgorod" , FOR_V2(0x08D8E5, 0x03680A) }, + { "Europe/Vaduz" , FOR_V2(0x08E101, 0x036B26) }, + { "Europe/Vatican" , FOR_V2(0x08E882, 0x036DE6) }, + { "Europe/Vienna" , FOR_V2(0x08F2DF, 0x0371B0) }, + { "Europe/Vilnius" , FOR_V2(0x08FB83, 0x0374E4) }, + { "Europe/Volgograd" , FOR_V2(0x090401, 0x03782A) }, + { "Europe/Warsaw" , FOR_V2(0x0908AC, 0x037A08) }, + { "Europe/Zagreb" , FOR_V2(0x091316, 0x037DEB) }, + { "Europe/Zaporozhye" , FOR_V2(0x091AA2, 0x0380BB) }, + { "Europe/Zurich" , FOR_V2(0x092303, 0x0383FC) }, + { "Factory" , FOR_V2(0x092A84, 0x0386BC) }, + { "GB" , FOR_V2(0x092B04, 0x0386FE) }, + { "GB-Eire" , FOR_V2(0x093950, 0x038C39) }, + { "GMT" , FOR_V2(0x09479C, 0x039174) }, + { "GMT+0" , FOR_V2(0x09481A, 0x0391B6) }, + { "GMT-0" , FOR_V2(0x094898, 0x0391F8) }, + { "GMT0" , FOR_V2(0x094916, 0x03923A) }, + { "Greenwich" , FOR_V2(0x094994, 0x03927C) }, + { "Hongkong" , FOR_V2(0x094A12, 0x0392BE) }, + { "HST" , FOR_V2(0x094ED1, 0x039496) }, + { "Iceland" , FOR_V2(0x094F50, 0x0394D8) }, + { "Indian/Antananarivo" , FOR_V2(0x0953E6, 0x03969E) }, + { "Indian/Chagos" , FOR_V2(0x0954ED, 0x03971C) }, + { "Indian/Christmas" , FOR_V2(0x0955C0, 0x039781) }, + { "Indian/Cocos" , FOR_V2(0x095671, 0x0397D7) }, + { "Indian/Comoro" , FOR_V2(0x09572B, 0x03982F) }, + { "Indian/Kerguelen" , FOR_V2(0x095832, 0x0398AD) }, + { "Indian/Mahe" , FOR_V2(0x0958E3, 0x039903) }, + { "Indian/Maldives" , FOR_V2(0x095994, 0x039959) }, + { "Indian/Mauritius" , FOR_V2(0x095A67, 0x0399BE) }, + { "Indian/Mayotte" , FOR_V2(0x095B64, 0x039A32) }, + { "Indian/Reunion" , FOR_V2(0x095C6B, 0x039AB0) }, + { "Iran" , FOR_V2(0x095D1C, 0x039B06) }, + { "Israel" , FOR_V2(0x09673E, 0x039D78) }, + { "Jamaica" , FOR_V2(0x09703A, 0x03A0C8) }, + { "Japan" , FOR_V2(0x097228, 0x03A196) }, + { "Kwajalein" , FOR_V2(0x097369, 0x03A227) }, + { "Libya" , FOR_V2(0x0974B1, 0x03A2BE) }, + { "MET" , FOR_V2(0x09772E, 0x03A3BF) }, + { "Mexico/BajaNorte" , FOR_V2(0x097F68, 0x03A6C4) }, + { "Mexico/BajaSur" , FOR_V2(0x09889A, 0x03AA2D) }, + { "Mexico/General" , FOR_V2(0x098E9C, 0x03AC6E) }, + { "MST" , FOR_V2(0x0994D8, 0x03AEC2) }, + { "MST7MDT" , FOR_V2(0x099556, 0x03AF04) }, + { "Navajo" , FOR_V2(0x099E68, 0x03B25D) }, + { "NZ" , FOR_V2(0x09A800, 0x03B5E7) }, + { "NZ-CHAT" , FOR_V2(0x09B191, 0x03B96F) }, + { "Pacific/Apia" , FOR_V2(0x09B9B1, 0x03BC6A) }, + { "Pacific/Auckland" , FOR_V2(0x09BE06, 0x03BE12) }, + { "Pacific/Bougainville" , FOR_V2(0x09C7AF, 0x03C1B2) }, + { "Pacific/Chatham" , FOR_V2(0x09C8D3, 0x03C237) }, + { "Pacific/Chuuk" , FOR_V2(0x09D102, 0x03C541) }, + { "Pacific/Easter" , FOR_V2(0x09D22A, 0x03C5CA) }, + { "Pacific/Efate" , FOR_V2(0x09DAFC, 0x03C917) }, + { "Pacific/Enderbury" , FOR_V2(0x09DCDA, 0x03C9DB) }, + { "Pacific/Fakaofo" , FOR_V2(0x09DDDF, 0x03CA5E) }, + { "Pacific/Fiji" , FOR_V2(0x09DEB3, 0x03CAC3) }, + { "Pacific/Funafuti" , FOR_V2(0x09E2F4, 0x03CC59) }, + { "Pacific/Galapagos" , FOR_V2(0x09E3A6, 0x03CCAF) }, + { "Pacific/Gambier" , FOR_V2(0x09E4B1, 0x03CD35) }, + { "Pacific/Guadalcanal" , FOR_V2(0x09E570, 0x03CD9A) }, + { "Pacific/Guam" , FOR_V2(0x09E622, 0x03CDF0) }, + { "Pacific/Honolulu" , FOR_V2(0x09E81C, 0x03CEBF) }, + { "Pacific/Johnston" , FOR_V2(0x09E977, 0x03CF64) }, + { "Pacific/Kiritimati" , FOR_V2(0x09EACC, 0x03D003) }, + { "Pacific/Kosrae" , FOR_V2(0x09EBD2, 0x03D085) }, + { "Pacific/Kwajalein" , FOR_V2(0x09ED43, 0x03D128) }, + { "Pacific/Majuro" , FOR_V2(0x09EE94, 0x03D1C8) }, + { "Pacific/Marquesas" , FOR_V2(0x09EFF3, 0x03D277) }, + { "Pacific/Midway" , FOR_V2(0x09F0BD, 0x03D2E0) }, + { "Pacific/Nauru" , FOR_V2(0x09F186, 0x03D34A) }, + { "Pacific/Niue" , FOR_V2(0x09F28E, 0x03D3C5) }, + { "Pacific/Norfolk" , FOR_V2(0x09F38B, 0x03D43D) }, + { "Pacific/Noumea" , FOR_V2(0x09F707, 0x03D59B) }, + { "Pacific/Pago_Pago" , FOR_V2(0x09F843, 0x03D62A) }, + { "Pacific/Palau" , FOR_V2(0x09F8FE, 0x03D686) }, + { "Pacific/Pitcairn" , FOR_V2(0x09F9BE, 0x03D6DC) }, + { "Pacific/Pohnpei" , FOR_V2(0x09FA94, 0x03D743) }, + { "Pacific/Ponape" , FOR_V2(0x09FBDD, 0x03D7DA) }, + { "Pacific/Port_Moresby" , FOR_V2(0x09FD18, 0x03D863) }, + { "Pacific/Rarotonga" , FOR_V2(0x09FDFB, 0x03D8D6) }, + { "Pacific/Saipan" , FOR_V2(0x0A0048, 0x03D9C6) }, + { "Pacific/Samoa" , FOR_V2(0x0A0242, 0x03DA95) }, + { "Pacific/Tahiti" , FOR_V2(0x0A02FD, 0x03DAF1) }, + { "Pacific/Tarawa" , FOR_V2(0x0A03BD, 0x03DB56) }, + { "Pacific/Tongatapu" , FOR_V2(0x0A047E, 0x03DBBB) }, + { "Pacific/Truk" , FOR_V2(0x0A05FE, 0x03DC66) }, + { "Pacific/Wake" , FOR_V2(0x0A0717, 0x03DCE0) }, + { "Pacific/Wallis" , FOR_V2(0x0A07D4, 0x03DD41) }, + { "Pacific/Yap" , FOR_V2(0x0A0886, 0x03DD97) }, + { "Poland" , FOR_V2(0x0A099F, 0x03DE11) }, + { "Portugal" , FOR_V2(0x0A1409, 0x03E1F4) }, + { "PRC" , FOR_V2(0x0A21A2, 0x03E6FD) }, + { "PST8PDT" , FOR_V2(0x0A23DF, 0x03E7E4) }, + { "ROC" , FOR_V2(0x0A2CF1, 0x03EB3D) }, + { "ROK" , FOR_V2(0x0A2FF6, 0x03EC70) }, + { "Singapore" , FOR_V2(0x0A326B, 0x03ED73) }, + { "Turkey" , FOR_V2(0x0A33F6, 0x03EE28) }, + { "UCT" , FOR_V2(0x0A3B9D, 0x03F115) }, + { "Universal" , FOR_V2(0x0A3C1B, 0x03F157) }, + { "US/Alaska" , FOR_V2(0x0A3C99, 0x03F199) }, + { "US/Aleutian" , FOR_V2(0x0A45E8, 0x03F511) }, + { "US/Arizona" , FOR_V2(0x0A4F28, 0x03F882) }, + { "US/Central" , FOR_V2(0x0A507C, 0x03F919) }, + { "US/East-Indiana" , FOR_V2(0x0A5E80, 0x03FE3D) }, + { "US/Eastern" , FOR_V2(0x0A650E, 0x0400B8) }, + { "US/Hawaii" , FOR_V2(0x0A72EA, 0x0405C8) }, + { "US/Indiana-Starke" , FOR_V2(0x0A743F, 0x040667) }, + { "US/Michigan" , FOR_V2(0x0A7DC7, 0x0409F1) }, + { "US/Mountain" , FOR_V2(0x0A8689, 0x040D32) }, + { "US/Pacific" , FOR_V2(0x0A9021, 0x0410BC) }, + { "US/Samoa" , FOR_V2(0x0A9B41, 0x0414D2) }, + { "UTC" , FOR_V2(0x0A9BFC, 0x04152E) }, + { "W-SU" , FOR_V2(0x0A9C7A, 0x041570) }, + { "WET" , FOR_V2(0x0AA285, 0x0417DC) }, + { "Zulu" , FOR_V2(0x0AAA02, 0x041A9F) }, }; #ifdef TIMELIB_SUPPORTS_V2DATA -const unsigned char timelib_timezone_db_data_builtin[700997] = { +const unsigned char timelib_timezone_db_data_builtin[699008] = { #else -const unsigned char timelib_timezone_db_data_builtin[269774] = { +const unsigned char timelib_timezone_db_data_builtin[269025] = { #endif @@ -726,7 +725,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, -0x6B, 0xC8, 0x49, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x60, 0x50, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, +0x6B, 0xC9, 0x9B, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x60, 0x50, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x47, 0x78, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xD7, 0x2C, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xBC, 0x91, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0xC0, 0x48, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0x89, 0xFE, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xA0, 0x2A, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -1053,11 +1052,11 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x59, 0x58, 0x53, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xF7, 0x9C, 0x20, 0x5B, 0x25, 0xC0, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xCE, 0x43, 0xA0, 0x5C, 0xFC, 0x68, 0x20, 0x5E, 0x9B, 0xB0, 0xA0, 0x5E, 0xD3, 0x0F, 0xA0, 0x60, 0x72, 0x58, 0x20, 0x60, 0xA0, 0x7C, 0xA0, -0x62, 0x3F, 0xC5, 0x20, 0x62, 0x77, 0x24, 0x20, 0x64, 0x16, 0x6C, 0xA0, 0x64, 0x44, 0x91, 0x20, +0x62, 0x3F, 0xC5, 0x20, 0x62, 0x77, 0x24, 0x20, 0x64, 0x16, 0x6C, 0xA0, 0x64, 0x4D, 0xCB, 0xA0, 0x65, 0xED, 0x14, 0x20, 0x66, 0x1B, 0x38, 0xA0, 0x67, 0xBA, 0x81, 0x20, 0x67, 0xF1, 0xE0, 0x20, 0x69, 0x91, 0x28, 0xA0, 0x69, 0xBF, 0x4D, 0x20, 0x6B, 0x67, 0xD0, 0x20, 0x6B, 0x95, 0xF4, 0xA0, 0x6D, 0x35, 0x3D, 0x20, 0x6D, 0x6C, 0x9C, 0x20, 0x6F, 0x0B, 0xE4, 0xA0, 0x6F, 0x3A, 0x09, 0x20, -0x70, 0xD9, 0x51, 0xA0, 0x71, 0x10, 0xB0, 0xA0, 0x72, 0xAF, 0xF9, 0x20, 0x72, 0xDE, 0x1D, 0xA0, +0x70, 0xD9, 0x51, 0xA0, 0x71, 0x10, 0xB0, 0xA0, 0x72, 0xAF, 0xF9, 0x20, 0x72, 0xE7, 0x58, 0x20, 0x74, 0x86, 0xA0, 0xA0, 0x74, 0xB4, 0xC5, 0x20, 0x76, 0x54, 0x0D, 0xA0, 0x76, 0x8B, 0x6C, 0xA0, 0x78, 0x2A, 0xB5, 0x20, 0x78, 0x58, 0xD9, 0xA0, 0x79, 0xF8, 0x22, 0x20, 0x7A, 0x2F, 0x81, 0x20, 0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x06, 0x28, 0xA0, 0x7D, 0xA5, 0x71, 0x20, 0x7D, 0xD3, 0x95, 0xA0, @@ -1107,7 +1106,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x5E, 0xD3, 0x0F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x72, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0xA0, 0x7C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xC5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x62, 0x77, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x64, 0x16, 0x6C, 0xA0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x44, 0x91, 0x20, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, +0x64, 0x4D, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x66, 0x1B, 0x38, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0xBA, 0x81, 0x20, 0x00, 0x00, 0x00, 0x00, 0x67, 0xF1, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x69, 0x91, 0x28, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xBF, 0x4D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x67, 0xD0, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1115,7 +1114,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x6D, 0x6C, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x0B, 0xE4, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x3A, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0xD9, 0x51, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x10, 0xB0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x72, 0xAF, 0xF9, 0x20, 0x00, 0x00, 0x00, 0x00, -0x72, 0xDE, 0x1D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x86, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, +0x72, 0xE7, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x74, 0x86, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xB4, 0xC5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x76, 0x54, 0x0D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x8B, 0x6C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x2A, 0xB5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x78, 0x58, 0xD9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x79, 0xF8, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1123,7 +1122,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x7C, 0x06, 0x28, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xA5, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xD3, 0x95, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x72, 0xDE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xAA, 0x3D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x81, 0x49, 0x85, 0xA0, 0x00, 0x00, 0x00, 0x00, -0x81, 0x77, 0xAA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x83, 0x20, 0x2D, 0x20, 0x00, 0x00, 0x00, 0x00, +0x81, 0x80, 0xE4, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x83, 0x20, 0x2D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x83, 0x4E, 0x51, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x84, 0xED, 0x9A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x85, 0x24, 0xF9, 0x20, 0x00, 0x00, 0x00, 0x00, 0x86, 0xC4, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x86, 0xF2, 0x66, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x91, 0xAE, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1131,7 +1130,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x8A, 0x9F, 0xB5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x3E, 0xFD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x6D, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0C, 0x6A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x43, 0xC9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xE3, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, -0x90, 0x11, 0x36, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x91, 0xB9, 0xB9, 0xA0, 0x00, 0x00, 0x00, 0x00, +0x90, 0x1A, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x91, 0xB9, 0xB9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x91, 0xE7, 0xDE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x93, 0x87, 0x26, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x93, 0xBE, 0x85, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x95, 0x5D, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x95, 0x8B, 0xF2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x97, 0x2B, 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1139,7 +1138,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x99, 0x39, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xD8, 0x8A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x06, 0xAE, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xA5, 0xF7, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xDD, 0x56, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x7C, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, -0x9E, 0xAA, 0xC3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x53, 0x46, 0x20, 0x00, 0x00, 0x00, 0x00, +0x9E, 0xB3, 0xFD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x53, 0x46, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x81, 0x6A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x20, 0xB3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x58, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xF7, 0x5A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x7F, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC4, 0xC7, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1147,7 +1146,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xA7, 0xD2, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x72, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA0, 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x3F, 0x83, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x76, 0xE2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x16, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, -0xAD, 0x44, 0x4F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAE, 0xEC, 0xD2, 0xA0, 0x00, 0x00, 0x00, 0x00, +0xAD, 0x4D, 0x8A, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAE, 0xEC, 0xD2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x1A, 0xF7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xBA, 0x3F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xF1, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x90, 0xE7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xBF, 0x0B, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x5E, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1155,7 +1154,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xB6, 0x6C, 0x5A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x0B, 0xA3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x39, 0xC7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB9, 0xD9, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x10, 0x6F, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xAF, 0xB7, 0xA0, 0x00, 0x00, 0x00, 0x00, -0xBB, 0xDD, 0xDC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x86, 0x5F, 0x20, 0x00, 0x00, 0x00, 0x00, +0xBB, 0xE7, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x86, 0x5F, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xB4, 0x83, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x53, 0xCC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x8B, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x2A, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x58, 0x98, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xF7, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1163,15 +1162,15 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xC5, 0x05, 0xE7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA5, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xD3, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x72, 0x9C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xA9, 0xFB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x49, 0x44, 0x20, 0x00, 0x00, 0x00, 0x00, -0xCA, 0x77, 0x68, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1F, 0xEB, 0xA0, 0x00, 0x00, 0x00, 0x00, +0xCA, 0x80, 0xA3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1F, 0xEB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x4E, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xED, 0x58, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x24, 0xB7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xF2, 0x24, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x91, 0x6D, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xC8, 0xCC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x68, 0x14, 0xA0, 0x00, 0x00, 0x00, 0x00, -0xD3, 0x96, 0x39, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x3E, 0xBC, 0x20, 0x00, 0x00, 0x00, 0x00, +0xD3, 0x9F, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x3E, 0xBC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x6C, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x0C, 0x29, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x43, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xE2, 0xD0, 0xA0, 0x00, 0x00, 0x00, 0x00, -0xD9, 0x10, 0xF5, 0x20, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB9, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, +0xD9, 0x1A, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB9, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xE7, 0x9C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x86, 0xE5, 0x20, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xBE, 0x44, 0x20, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, @@ -1432,11 +1431,11 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x5A, 0xF7, 0x9C, 0x20, 0x5B, 0x25, 0xC0, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xCE, 0x43, 0xA0, 0x5C, 0xFC, 0x68, 0x20, 0x5E, 0x9B, 0xB0, 0xA0, 0x5E, 0xD3, 0x0F, 0xA0, 0x60, 0x72, 0x58, 0x20, 0x60, 0xA0, 0x7C, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x77, 0x24, 0x20, 0x64, 0x16, 0x6C, 0xA0, -0x64, 0x44, 0x91, 0x20, 0x65, 0xED, 0x14, 0x20, 0x66, 0x1B, 0x38, 0xA0, 0x67, 0xBA, 0x81, 0x20, +0x64, 0x4D, 0xCB, 0xA0, 0x65, 0xED, 0x14, 0x20, 0x66, 0x1B, 0x38, 0xA0, 0x67, 0xBA, 0x81, 0x20, 0x67, 0xF1, 0xE0, 0x20, 0x69, 0x91, 0x28, 0xA0, 0x69, 0xBF, 0x4D, 0x20, 0x6B, 0x67, 0xD0, 0x20, 0x6B, 0x95, 0xF4, 0xA0, 0x6D, 0x35, 0x3D, 0x20, 0x6D, 0x6C, 0x9C, 0x20, 0x6F, 0x0B, 0xE4, 0xA0, 0x6F, 0x3A, 0x09, 0x20, 0x70, 0xD9, 0x51, 0xA0, 0x71, 0x10, 0xB0, 0xA0, 0x72, 0xAF, 0xF9, 0x20, -0x72, 0xDE, 0x1D, 0xA0, 0x74, 0x86, 0xA0, 0xA0, 0x74, 0xB4, 0xC5, 0x20, 0x76, 0x54, 0x0D, 0xA0, +0x72, 0xE7, 0x58, 0x20, 0x74, 0x86, 0xA0, 0xA0, 0x74, 0xB4, 0xC5, 0x20, 0x76, 0x54, 0x0D, 0xA0, 0x76, 0x8B, 0x6C, 0xA0, 0x78, 0x2A, 0xB5, 0x20, 0x78, 0x58, 0xD9, 0xA0, 0x79, 0xF8, 0x22, 0x20, 0x7A, 0x2F, 0x81, 0x20, 0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x06, 0x28, 0xA0, 0x7D, 0xA5, 0x71, 0x20, 0x7D, 0xD3, 0x95, 0xA0, 0x7F, 0x72, 0xDE, 0x20, 0x7F, 0xAA, 0x3D, 0x20, 0x01, 0x03, 0x02, 0x03, @@ -1479,7 +1478,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x5E, 0x9B, 0xB0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xD3, 0x0F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x72, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0xA0, 0x7C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xC5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x62, 0x77, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, -0x64, 0x16, 0x6C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x64, 0x44, 0x91, 0x20, 0x00, 0x00, 0x00, 0x00, +0x64, 0x16, 0x6C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x64, 0x4D, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x66, 0x1B, 0x38, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0xBA, 0x81, 0x20, 0x00, 0x00, 0x00, 0x00, 0x67, 0xF1, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x69, 0x91, 0x28, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xBF, 0x4D, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1487,7 +1486,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x6D, 0x35, 0x3D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x6C, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x0B, 0xE4, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x3A, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0xD9, 0x51, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x10, 0xB0, 0xA0, 0x00, 0x00, 0x00, 0x00, -0x72, 0xAF, 0xF9, 0x20, 0x00, 0x00, 0x00, 0x00, 0x72, 0xDE, 0x1D, 0xA0, 0x00, 0x00, 0x00, 0x00, +0x72, 0xAF, 0xF9, 0x20, 0x00, 0x00, 0x00, 0x00, 0x72, 0xE7, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x74, 0x86, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xB4, 0xC5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x76, 0x54, 0x0D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x8B, 0x6C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x2A, 0xB5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x78, 0x58, 0xD9, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1495,7 +1494,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x7B, 0xCE, 0xC9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x06, 0x28, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xA5, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xD3, 0x95, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x72, 0xDE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xAA, 0x3D, 0x20, 0x00, 0x00, 0x00, 0x00, -0x81, 0x49, 0x85, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x81, 0x77, 0xAA, 0x20, 0x00, 0x00, 0x00, 0x00, +0x81, 0x49, 0x85, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0xE4, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x83, 0x20, 0x2D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x83, 0x4E, 0x51, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x84, 0xED, 0x9A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x85, 0x24, 0xF9, 0x20, 0x00, 0x00, 0x00, 0x00, 0x86, 0xC4, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x86, 0xF2, 0x66, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1503,7 +1502,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x8A, 0x68, 0x56, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x9F, 0xB5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x3E, 0xFD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x6D, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0C, 0x6A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x43, 0xC9, 0xA0, 0x00, 0x00, 0x00, 0x00, -0x8F, 0xE3, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x90, 0x11, 0x36, 0xA0, 0x00, 0x00, 0x00, 0x00, +0x8F, 0xE3, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x90, 0x1A, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x91, 0xB9, 0xB9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x91, 0xE7, 0xDE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x93, 0x87, 0x26, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x93, 0xBE, 0x85, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x95, 0x5D, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x95, 0x8B, 0xF2, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1511,7 +1510,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x99, 0x01, 0xE2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x99, 0x39, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xD8, 0x8A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x06, 0xAE, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xA5, 0xF7, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xDD, 0x56, 0x20, 0x00, 0x00, 0x00, 0x00, -0x9E, 0x7C, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xAA, 0xC3, 0x20, 0x00, 0x00, 0x00, 0x00, +0x9E, 0x7C, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xB3, 0xFD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x53, 0x46, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x81, 0x6A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x20, 0xB3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x58, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xF7, 0x5A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x7F, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1519,7 +1518,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xA7, 0x9B, 0x6F, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xD2, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x72, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA0, 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x3F, 0x83, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x76, 0xE2, 0xA0, 0x00, 0x00, 0x00, 0x00, -0xAD, 0x16, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x44, 0x4F, 0xA0, 0x00, 0x00, 0x00, 0x00, +0xAD, 0x16, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x4D, 0x8A, 0x20, 0x00, 0x00, 0x00, 0x00, 0xAE, 0xEC, 0xD2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x1A, 0xF7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xBA, 0x3F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xF1, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x90, 0xE7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xBF, 0x0B, 0xA0, 0x00, 0x00, 0x00, 0x00, @@ -1527,7 +1526,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xB6, 0x34, 0xFB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x6C, 0x5A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x0B, 0xA3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x39, 0xC7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xB9, 0xD9, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x10, 0x6F, 0x20, 0x00, 0x00, 0x00, 0x00, -0xBB, 0xAF, 0xB7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xDD, 0xDC, 0x20, 0x00, 0x00, 0x00, 0x00, +0xBB, 0xAF, 0xB7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xE7, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x86, 0x5F, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xB4, 0x83, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x53, 0xCC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x8B, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x2A, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x58, 0x98, 0x20, 0x00, 0x00, 0x00, 0x00, @@ -1535,15 +1534,15 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0xC4, 0xCE, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x05, 0xE7, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA5, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xD3, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x72, 0x9C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xA9, 0xFB, 0xA0, 0x00, 0x00, 0x00, 0x00, -0xCA, 0x49, 0x44, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x77, 0x68, 0xA0, 0x00, 0x00, 0x00, 0x00, +0xCA, 0x49, 0x44, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x80, 0xA3, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1F, 0xEB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x4E, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xED, 0x58, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x24, 0xB7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xF2, 0x24, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x91, 0x6D, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xC8, 0xCC, 0x20, 0x00, 0x00, 0x00, 0x00, -0xD3, 0x68, 0x14, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x96, 0x39, 0x20, 0x00, 0x00, 0x00, 0x00, +0xD3, 0x68, 0x14, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x9F, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x3E, 0xBC, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x6C, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x0C, 0x29, 0x20, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x43, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, -0xD8, 0xE2, 0xD0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x10, 0xF5, 0x20, 0x00, 0x00, 0x00, 0x00, +0xD8, 0xE2, 0xD0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x1A, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB9, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xE7, 0x9C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x86, 0xE5, 0x20, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xBE, 0x44, 0x20, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, @@ -5689,7 +5688,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { /* America/Dawson */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, 0x9E, 0xB8, 0xCB, 0xB0, 0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, 0x07, 0x30, 0xEC, 0x90, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, @@ -5712,24 +5711,24 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, -0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x5C, 0xF0, +0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x7D, 0x4C, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x08, 0xFF, 0xFF, 0x7D, +0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, +0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, +0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, +0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, +0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x86, 0x8E, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xCB, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBB, 0x23, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xD0, 0x0C, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0xA2, 0xD2, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x89, 0x28, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -5775,20 +5774,21 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x58, 0x1E, 0xF1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xD3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xFE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0xB5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, -0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x7D, 0x4C, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x0A, +0x08, 0xFF, 0xFF, 0x7D, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, +0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, +0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, +0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, +0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, +0x53, 0x54, 0x37, 0x0A, #endif 0x00, 0xEB, 0x16, 0x4A, 0x00, 0x3D, 0xEC, 0xDD, 0x00, 0x00, 0x00, 0x16, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x2D, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E, 0x20, 0x28, 0x77, 0x65, 0x73, @@ -16923,7 +16923,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { /* America/Whitehorse */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, 0x9E, 0xB8, 0xCB, 0xB0, 0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, 0xFB, 0x1D, 0x5F, 0x10, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, @@ -16946,24 +16946,24 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, -0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x5C, 0xF0, +0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x08, 0xFF, 0xFF, 0x81, +0x64, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, +0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, +0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, +0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, +0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x86, 0x8A, 0x9C, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xCB, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBB, 0x23, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xD0, 0x0C, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0xA2, 0xD2, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x89, 0x28, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -17009,20 +17009,21 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x58, 0x1E, 0xF1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xD3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xFE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0xB5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, -0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x0A, +0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, +0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, +0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, +0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, +0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, +0x53, 0x54, 0x37, 0x0A, #endif 0x00, 0xE5, 0xF9, 0xB2, 0x00, 0x44, 0x96, 0x97, 0x00, 0x00, 0x00, 0x16, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x2D, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E, 0x20, 0x28, 0x65, 0x61, 0x73, @@ -17499,25 +17500,31 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { /* Antarctica/Casey */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0x1E, 0xCC, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0x1E, 0xCC, 0x80, 0x4A, 0xDA, 0x06, 0x20, 0x4B, 0x8F, 0xCA, 0xF0, 0x4E, 0xA9, 0x9C, 0x20, 0x4F, 0x43, 0xCD, 0x90, -0x58, 0x0A, 0x3B, 0x80, 0x5A, 0xA4, 0x0F, 0x10, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x01, 0x02, -0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, -0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, +0x58, 0x0A, 0x3B, 0x80, 0x5A, 0xA4, 0x0F, 0x10, 0x5B, 0xB9, 0x14, 0x40, 0x5C, 0x8D, 0x1D, 0x80, +0x5D, 0x96, 0x45, 0x30, 0x5E, 0x63, 0xC5, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x7F, 0xFF, 0xFF, 0xFF, +0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x00, +0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, +0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, +0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xDA, 0x06, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x8F, 0xCA, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xA9, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x43, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x0A, 0x3B, 0x80, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xA4, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x01, 0x02, -0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, -0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, -0x0A, 0x3C, 0x2B, 0x30, 0x38, 0x3E, 0x2D, 0x38, 0x0A, +0x5A, 0xA4, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xB9, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, +0x5C, 0x8D, 0x1D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x96, 0x45, 0x30, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x63, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0x00, +0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, +0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x2D, +0x30, 0x30, 0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, +0x00, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, 0x31, 0x31, 0x0A, #endif 0x00, 0x24, 0x30, 0x52, 0x01, 0xBB, 0x4B, 0x12, 0x00, 0x00, 0x00, 0x05, 0x43, 0x61, 0x73, 0x65, 0x79, @@ -17568,8 +17575,8 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { /* Antarctica/Macquarie */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E, 0x80, 0x00, 0x00, 0x00, 0x9B, 0xD5, 0x78, 0x80, 0x9C, 0xBC, 0x20, 0xF0, 0xA0, 0x87, 0xB4, 0x60, 0xD7, 0x0C, 0x68, 0x00, 0xFB, 0xC2, 0x8D, 0x00, 0xFC, 0xB2, 0x7E, 0x00, 0xFD, 0xC7, 0x59, 0x00, 0xFE, 0x76, 0xB0, 0x80, 0xFF, 0xA7, 0x3B, 0x00, 0x00, 0x56, 0x92, 0x80, 0x01, 0x87, 0x1D, 0x00, 0x02, 0x3F, 0xAF, 0x00, @@ -17592,21 +17599,37 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x3F, 0x7E, 0xEE, 0x80, 0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x3E, 0xB2, 0x80, 0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x07, 0xB1, 0x00, 0x47, 0xF7, 0xA2, 0x00, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xD7, 0x84, 0x00, -0x4A, 0xC7, 0x75, 0x00, 0x4B, 0xB7, 0x66, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x01, 0x03, +0x4A, 0xC7, 0x75, 0x00, 0x4D, 0x97, 0x48, 0x00, 0x4E, 0x87, 0x39, 0x00, 0x4F, 0x77, 0x2A, 0x00, +0x50, 0x70, 0x55, 0x80, 0x51, 0x60, 0x46, 0x80, 0x52, 0x50, 0x37, 0x80, 0x53, 0x40, 0x28, 0x80, +0x54, 0x30, 0x19, 0x80, 0x55, 0x20, 0x0A, 0x80, 0x56, 0x0F, 0xFB, 0x80, 0x56, 0xFF, 0xEC, 0x80, +0x57, 0xEF, 0xDD, 0x80, 0x58, 0xDF, 0xCE, 0x80, 0x59, 0xCF, 0xBF, 0x80, 0x5A, 0xBF, 0xB0, 0x80, +0x5B, 0xB8, 0xDC, 0x00, 0x5C, 0xA8, 0xCD, 0x00, 0x5D, 0x98, 0xBE, 0x00, 0x5E, 0x88, 0xAF, 0x00, +0x5F, 0x78, 0xA0, 0x00, 0x60, 0x68, 0x91, 0x00, 0x61, 0x58, 0x82, 0x00, 0x62, 0x48, 0x73, 0x00, +0x63, 0x38, 0x64, 0x00, 0x64, 0x28, 0x55, 0x00, 0x65, 0x18, 0x46, 0x00, 0x66, 0x11, 0x71, 0x80, +0x67, 0x01, 0x62, 0x80, 0x67, 0xF1, 0x53, 0x80, 0x68, 0xE1, 0x44, 0x80, 0x69, 0xD1, 0x35, 0x80, +0x6A, 0xC1, 0x26, 0x80, 0x6B, 0xB1, 0x17, 0x80, 0x6C, 0xA1, 0x08, 0x80, 0x6D, 0x90, 0xF9, 0x80, +0x6E, 0x80, 0xEA, 0x80, 0x6F, 0x70, 0xDB, 0x80, 0x70, 0x6A, 0x07, 0x00, 0x71, 0x59, 0xF8, 0x00, +0x72, 0x49, 0xE9, 0x00, 0x73, 0x39, 0xDA, 0x00, 0x74, 0x29, 0xCB, 0x00, 0x75, 0x19, 0xBC, 0x00, +0x76, 0x09, 0xAD, 0x00, 0x76, 0xF9, 0x9E, 0x00, 0x77, 0xE9, 0x8F, 0x00, 0x78, 0xD9, 0x80, 0x00, +0x79, 0xC9, 0x71, 0x00, 0x7A, 0xB9, 0x62, 0x00, 0x7B, 0xB2, 0x8D, 0x80, 0x7C, 0xA2, 0x7E, 0x80, +0x7D, 0x92, 0x6F, 0x80, 0x7E, 0x82, 0x60, 0x80, 0x7F, 0x72, 0x51, 0x80, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, -0x00, 0x0E, 0x2D, 0x30, 0x30, 0x00, 0x41, 0x45, 0x53, 0x54, 0x00, 0x41, 0x45, 0x44, 0x54, 0x00, -0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, +0x2D, 0x30, 0x30, 0x00, 0x41, 0x45, 0x53, 0x54, 0x00, 0x41, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, +0x00, 0x01, 0x01, 0x01, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0x05, 0x16, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xD5, 0x78, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xBC, 0x20, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x87, 0xB4, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x0C, 0x68, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xC2, 0x8D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, @@ -17652,18 +17675,48 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x46, 0x05, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF7, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xE7, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD7, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xC7, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, -0x4B, 0xB7, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x01, 0x03, +0x4D, 0x97, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x87, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, +0x4F, 0x77, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x70, 0x55, 0x80, 0x00, 0x00, 0x00, 0x00, +0x51, 0x60, 0x46, 0x80, 0x00, 0x00, 0x00, 0x00, 0x52, 0x50, 0x37, 0x80, 0x00, 0x00, 0x00, 0x00, +0x53, 0x40, 0x28, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x30, 0x19, 0x80, 0x00, 0x00, 0x00, 0x00, +0x55, 0x20, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0F, 0xFB, 0x80, 0x00, 0x00, 0x00, 0x00, +0x56, 0xFF, 0xEC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x57, 0xEF, 0xDD, 0x80, 0x00, 0x00, 0x00, 0x00, +0x58, 0xDF, 0xCE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x59, 0xCF, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xBF, 0xB0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xB8, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5C, 0xA8, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x98, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x88, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x60, 0x68, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x58, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, +0x62, 0x48, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x38, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, +0x64, 0x28, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x18, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, +0x66, 0x11, 0x71, 0x80, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x62, 0x80, 0x00, 0x00, 0x00, 0x00, +0x67, 0xF1, 0x53, 0x80, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE1, 0x44, 0x80, 0x00, 0x00, 0x00, 0x00, +0x69, 0xD1, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xC1, 0x26, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xB1, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xA1, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x90, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x80, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x70, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, +0x71, 0x59, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x49, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, +0x73, 0x39, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x29, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, +0x75, 0x19, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x09, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, +0x76, 0xF9, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xE9, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x78, 0xD9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xC9, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xB9, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xB2, 0x8D, 0x80, 0x00, 0x00, 0x00, 0x00, +0x7C, 0xA2, 0x7E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x92, 0x6F, 0x80, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x82, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x72, 0x51, 0x80, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, -0x00, 0x0E, 0x2D, 0x30, 0x30, 0x00, 0x41, 0x45, 0x53, 0x54, 0x00, 0x41, 0x45, 0x44, 0x54, 0x00, -0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, -0x3E, 0x2D, 0x31, 0x31, 0x0A, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, +0x2D, 0x30, 0x30, 0x00, 0x41, 0x45, 0x53, 0x54, 0x00, 0x41, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, +0x00, 0x01, 0x01, 0x01, 0x0A, 0x41, 0x45, 0x53, 0x54, 0x2D, 0x31, 0x30, 0x41, 0x45, 0x44, 0x54, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x31, 0x2E, 0x30, 0x2C, 0x4D, 0x34, 0x2E, 0x31, 0x2E, 0x30, 0x2F, +0x33, 0x0A, #endif 0x00, 0x36, 0x2B, 0x30, 0x02, 0x05, 0x32, 0x58, 0x00, 0x00, 0x00, 0x10, 0x4D, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, @@ -20188,18 +20241,18 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xA0, 0x3C, 0x60, 0x4B, 0xAD, 0x2E, 0x9C, 0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x94, 0xF9, 0x9C, 0x4E, 0x35, 0xC2, 0x50, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x5B, 0x91, 0xE0, 0x51, 0x54, 0xBD, 0x60, 0x52, 0x44, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, -0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, +0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, -0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7D, 0x25, 0xE0, -0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5D, 0x07, 0xE0, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3C, 0xE9, 0xE0, -0x63, 0x5C, 0x50, 0xE0, 0x64, 0x26, 0x06, 0x60, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x05, 0xE8, 0x60, -0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE5, 0xCA, 0x60, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC5, 0xAC, 0x60, -0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x8E, 0xAA, 0xE0, -0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4E, 0x6E, 0xE0, -0x72, 0x64, 0x9B, 0x60, 0x73, 0x2E, 0x50, 0xE0, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0E, 0x32, 0xE0, -0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEE, 0x14, 0xE0, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xD7, 0x31, 0x60, -0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB7, 0x13, 0x60, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x96, 0xF5, 0x60, -0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, +0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, +0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x3B, 0x60, +0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x1D, 0x60, 0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x39, 0xE0, +0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x1B, 0xE0, 0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, +0x6A, 0xDB, 0xD8, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, 0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xC1, 0xE0, +0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x66, 0xA3, 0xE0, 0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xC0, 0x60, +0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xA2, 0x60, 0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x84, 0x60, +0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x66, 0x60, 0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x48, 0x60, +0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xAF, 0x2A, 0x60, 0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x46, 0xE0, +0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x28, 0xE0, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, @@ -20214,7 +20267,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xB2, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20268,29 +20321,29 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x4F, 0x74, 0xDB, 0x60, 0x00, 0x00, 0x00, 0x00, 0x50, 0x5B, 0x91, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, -0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, +0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x5C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7D, 0x25, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5D, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3C, 0xE9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x26, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x66, 0x05, 0xE8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE5, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC5, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA5, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x8E, 0xAA, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6E, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4E, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2E, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0E, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEE, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xD7, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB7, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x96, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x76, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, +0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDB, 0xD8, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, @@ -20304,8 +20357,8 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, -0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x35, -0x2F, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, +0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, +0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x39, 0x0A, #endif 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, @@ -20381,18 +20434,18 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x4C, 0x61, 0xBD, 0xD0, 0x4D, 0x94, 0xF9, 0x9C, 0x4E, 0x35, 0xC2, 0x50, 0x4E, 0x5C, 0x0B, 0xE0, 0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x5B, 0x91, 0xE0, 0x51, 0x54, 0xBD, 0x60, 0x52, 0x44, 0xA0, 0x50, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, -0x56, 0x29, 0x4E, 0x50, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, +0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, -0x5D, 0xB3, 0x70, 0x60, 0x5E, 0x7D, 0x25, 0xE0, 0x5F, 0x9C, 0x8C, 0xE0, 0x60, 0x5D, 0x07, 0xE0, -0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3C, 0xE9, 0xE0, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x26, 0x06, 0x60, -0x65, 0x3C, 0x32, 0xE0, 0x66, 0x05, 0xE8, 0x60, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE5, 0xCA, 0x60, -0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC5, 0xAC, 0x60, 0x6A, 0xE5, 0x13, 0x60, 0x6B, 0xA5, 0x8E, 0x60, -0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x8E, 0xAA, 0xE0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x6E, 0x8C, 0xE0, -0x70, 0x84, 0xB9, 0x60, 0x71, 0x4E, 0x6E, 0xE0, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2E, 0x50, 0xE0, -0x74, 0x44, 0x7D, 0x60, 0x75, 0x0E, 0x32, 0xE0, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEE, 0x14, 0xE0, -0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xD7, 0x31, 0x60, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xB7, 0x13, 0x60, -0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x96, 0xF5, 0x60, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x76, 0xD7, 0x60, -0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, 0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, +0x61, 0x7C, 0x6E, 0xE0, 0x62, 0x3E, 0x3B, 0x60, 0x63, 0x5C, 0x50, 0xE0, 0x64, 0x1E, 0x1D, 0x60, +0x65, 0x3C, 0x32, 0xE0, 0x66, 0x07, 0x39, 0xE0, 0x67, 0x1C, 0x14, 0xE0, 0x67, 0xE7, 0x1B, 0xE0, +0x68, 0xFB, 0xF6, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, 0x6A, 0xDB, 0xD8, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, +0x6C, 0xC4, 0xF5, 0x60, 0x6D, 0x86, 0xC1, 0xE0, 0x6E, 0xA4, 0xD7, 0x60, 0x6F, 0x66, 0xA3, 0xE0, +0x70, 0x84, 0xB9, 0x60, 0x71, 0x4F, 0xC0, 0x60, 0x72, 0x64, 0x9B, 0x60, 0x73, 0x2F, 0xA2, 0x60, +0x74, 0x44, 0x7D, 0x60, 0x75, 0x0F, 0x84, 0x60, 0x76, 0x2D, 0x99, 0xE0, 0x76, 0xEF, 0x66, 0x60, +0x78, 0x0D, 0x7B, 0xE0, 0x78, 0xCF, 0x48, 0x60, 0x79, 0xED, 0x5D, 0xE0, 0x7A, 0xAF, 0x2A, 0x60, +0x7B, 0xCD, 0x3F, 0xE0, 0x7C, 0x98, 0x46, 0xE0, 0x7D, 0xAD, 0x21, 0xE0, 0x7E, 0x78, 0x28, 0xE0, +0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, @@ -20407,7 +20460,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, #ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xB2, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -20462,29 +20515,29 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x4F, 0x74, 0xDB, 0x60, 0x00, 0x00, 0x00, 0x00, 0x50, 0x5B, 0x91, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x54, 0xBD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0xA0, 0x50, 0x00, 0x00, 0x00, 0x00, 0x53, 0x34, 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x54, 0x49, 0x6C, 0x50, 0x00, 0x00, 0x00, 0x00, -0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x4E, 0x50, 0x00, 0x00, 0x00, 0x00, +0x55, 0x15, 0xD2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x29, 0x5C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF5, 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x13, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD5, 0xA4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF3, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x7D, 0x25, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9C, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x60, 0x5D, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x62, 0x3C, 0xE9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x64, 0x26, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x66, 0x05, 0xE8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x67, 0xE5, 0xCA, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x69, 0xC5, 0xAC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE5, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6B, 0xA5, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x8E, 0xAA, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x6E, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, -0x71, 0x4E, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, -0x73, 0x2E, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, -0x75, 0x0E, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x76, 0xEE, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x78, 0xD7, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7A, 0xB7, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x96, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x76, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x96, 0x3E, 0x60, 0x02, 0x01, 0x02, 0x01, +0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7C, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5C, 0x50, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3C, 0x32, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1C, 0x14, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFB, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDB, 0xD8, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC4, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA4, 0xD7, 0x60, 0x00, 0x00, 0x00, 0x00, +0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x84, 0xB9, 0x60, 0x00, 0x00, 0x00, 0x00, +0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x64, 0x9B, 0x60, 0x00, 0x00, 0x00, 0x00, +0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x44, 0x7D, 0x60, 0x00, 0x00, 0x00, 0x00, +0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2D, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0D, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xED, 0x5D, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAD, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8D, 0x03, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, @@ -20498,8 +20551,9 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, -0x2E, 0x35, 0x2F, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x36, 0x2F, 0x31, 0x0A, +0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, +0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x39, +0x0A, #endif 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, @@ -29421,7 +29475,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { /* Canada/Yukon */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x80, 0x00, 0x00, 0x00, 0x9E, 0xB8, 0xCB, 0xB0, 0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, 0xFB, 0x1D, 0x5F, 0x10, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, @@ -29444,24 +29498,24 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, -0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x5C, 0xF0, +0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x08, 0xFF, 0xFF, 0x81, +0x64, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, +0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, +0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, +0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, +0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x86, 0x8A, 0x9C, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xCB, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBB, 0x23, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xD0, 0x0C, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0xA2, 0xD2, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x89, 0x28, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -29507,20 +29561,21 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x58, 0x1E, 0xF1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xD3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xFE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0xB5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, -0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x0A, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x08, 0xFF, 0xFF, 0x81, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, 0x81, +0x70, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 0xFF, +0xFF, 0x9D, 0x90, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x19, 0xFF, 0xFF, 0x9D, 0x90, 0x01, +0x1D, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x21, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, +0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 0x00, +0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4D, +0x53, 0x54, 0x37, 0x0A, #endif 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, @@ -32902,16 +32957,16 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, -0x9E, 0xA7, 0x29, 0xA0, 0x9F, 0x84, 0x97, 0x90, 0xA0, 0x9A, 0xD2, 0x20, 0xA1, 0xC0, 0xC2, 0x90, -0xC9, 0xF3, 0xC3, 0x70, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, -0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x99, 0x78, 0xE0, 0xD2, 0x8A, 0xBB, 0x60, -0xD3, 0x50, 0xA6, 0x90, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x39, 0xC3, 0x10, 0xD6, 0x29, 0xB4, 0x10, -0xD7, 0x19, 0xA5, 0x10, 0xD8, 0x09, 0x96, 0x10, 0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, -0xDA, 0xED, 0x2F, 0x90, 0xDB, 0xE6, 0x5B, 0x10, 0xE2, 0xA2, 0xA8, 0xF0, 0xE3, 0x51, 0xF2, 0x60, -0xE4, 0x83, 0xDC, 0x70, 0xE5, 0x33, 0x25, 0xE0, 0xE6, 0x74, 0xE1, 0xF0, 0xE7, 0x11, 0xB6, 0x60, -0xE8, 0x54, 0xD2, 0x00, 0xE8, 0xF1, 0xC2, 0x90, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, +0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0xA0, 0x9A, 0xC4, 0x10, 0xA1, 0x64, 0x79, 0x90, +0xA2, 0x70, 0x1A, 0x10, 0xA3, 0x4D, 0x96, 0x10, 0xC9, 0xF3, 0xB5, 0x60, 0xCC, 0xE7, 0x4B, 0x10, +0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, +0xD1, 0x99, 0x78, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, 0xD3, 0x50, 0xA6, 0x90, 0xD4, 0x4B, 0x15, 0x80, +0xD5, 0x39, 0xC3, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x19, 0xA5, 0x10, 0xD8, 0x09, 0x96, 0x10, +0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xE2, 0xA2, 0xA8, 0xF0, 0xE3, 0x51, 0xF2, 0x60, +0xE4, 0x82, 0xA7, 0x10, 0xE5, 0x31, 0xFE, 0x90, 0xE6, 0x74, 0xFE, 0x10, 0xE7, 0x11, 0xE0, 0x90, +0xE8, 0x54, 0xE0, 0x10, 0xE8, 0xF1, 0xC2, 0x90, 0x13, 0x4D, 0x27, 0xF0, 0x14, 0x33, 0xDE, 0x70, +0x15, 0x23, 0xCF, 0x70, 0x16, 0x13, 0xC0, 0x70, 0x17, 0x03, 0xB1, 0x70, 0x17, 0xF3, 0xA2, 0x70, +0x18, 0xE3, 0x93, 0x70, 0x19, 0xD3, 0x84, 0x70, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, @@ -32939,46 +32994,46 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x01, -0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x00, +0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x03, 0x02, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x11, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, +0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, +0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, #ifdef TIMELIB_SUPPORTS_V2DATA 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, -0x6A, 0xEE, 0xB3, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x0C, 0x17, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, +0x6B, 0x17, 0x91, 0x9C, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x0C, 0x17, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xD5, 0xDA, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xD9, 0xAE, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0x9D, 0xA4, 0xB5, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xA7, 0x29, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, -0x9F, 0x84, 0x97, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x9A, 0xD2, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0xC0, 0xC2, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xF3, 0xC3, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0x9D, 0xA4, 0xB5, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB9, 0x90, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, +0x9F, 0x84, 0x97, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x9A, 0xC4, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x64, 0x79, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xA2, 0x70, 0x1A, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xA3, 0x4D, 0x96, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xF3, 0xB5, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0x82, 0x25, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0x99, 0x78, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, -0xD2, 0x8A, 0xBB, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x50, 0xA6, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xD4, 0x49, 0xD2, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x39, 0xC3, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xD2, 0x8A, 0xC9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x50, 0xA6, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, +0xD4, 0x4B, 0x15, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x39, 0xC3, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0x29, 0xB4, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x19, 0xA5, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD8, 0x09, 0x96, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x02, 0xC1, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xD9, 0xE9, 0x78, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xDA, 0xED, 0x2F, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xDB, 0xE6, 0x5B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0xA2, 0xA8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, -0xE3, 0x51, 0xF2, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x83, 0xDC, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, -0xE5, 0x33, 0x25, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x74, 0xE1, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, -0xE7, 0x11, 0xB6, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x54, 0xD2, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, -0xE8, 0xF1, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, -0x14, 0x33, 0xFA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xEB, 0x90, 0x00, 0x00, 0x00, 0x00, -0x16, 0x13, 0xDC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, -0x17, 0xF3, 0xBE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xAF, 0x90, 0x00, 0x00, 0x00, 0x00, -0x19, 0xD3, 0xA0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, +0xD9, 0xE9, 0x78, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0xA2, 0xA8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, +0xE3, 0x51, 0xF2, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x82, 0xA7, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xE5, 0x31, 0xFE, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x74, 0xFE, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xE7, 0x11, 0xE0, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x54, 0xE0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, +0xE8, 0xF1, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x00, +0x14, 0x33, 0xDE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xCF, 0x70, 0x00, 0x00, 0x00, 0x00, +0x16, 0x13, 0xC0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xB1, 0x70, 0x00, 0x00, 0x00, 0x00, +0x17, 0xF3, 0xA2, 0x70, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0x93, 0x70, 0x00, 0x00, 0x00, 0x00, +0x19, 0xD3, 0x84, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xBD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0xAE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x9F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x81, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x72, 0x10, 0x00, 0x00, 0x00, 0x00, @@ -33032,19 +33087,19 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, -0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, -0x04, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0x11, 0xE4, 0x00, +0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x03, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x11, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, +0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, +0x00, 0x0E, 0x10, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x43, 0x45, 0x54, 0x2D, 0x31, 0x43, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x0A, @@ -36497,7 +36552,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x4D, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, -0x91, 0x60, 0x50, 0x4F, 0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, +0x91, 0x78, 0x0B, 0x4F, 0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0, 0x9E, 0x89, 0xFE, 0x70, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x80, 0x0C, 0xF0, 0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, 0xA5, 0x5E, 0x23, 0x70, 0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0x9B, 0xF0, 0xA8, 0x58, 0x26, 0x70, @@ -36566,7 +36621,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, -0x6B, 0xC8, 0x45, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x60, 0x50, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, +0x6E, 0x11, 0x9F, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x78, 0x0B, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x47, 0x78, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xD7, 0x2C, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xBC, 0x91, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0xC0, 0x48, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0x89, 0xFE, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xA0, 0x2A, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -37066,7 +37121,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x46, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, -0x91, 0x60, 0x50, 0x8B, 0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, +0x91, 0x60, 0x50, 0x4F, 0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0, 0x9E, 0x89, 0xFE, 0x70, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x80, 0x0C, 0xF0, 0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, 0xA5, 0x5E, 0x23, 0x70, 0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0x9B, 0xF0, 0xA8, 0x58, 0x26, 0x70, @@ -37136,7 +37191,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, -0x6B, 0xC8, 0x4A, 0x8B, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x60, 0x50, 0x8B, 0xFF, 0xFF, 0xFF, 0xFF, +0x6B, 0xC9, 0x9B, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x60, 0x50, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x47, 0x78, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xD7, 0x2C, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xBC, 0x91, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0xC0, 0x48, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0x89, 0xFE, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xA0, 0x2A, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -43794,7 +43849,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x52, 0x6B, 0xCA, 0xE0, 0x52, 0xDA, 0x7A, 0xD0, 0x54, 0x54, 0xE7, 0x60, 0x54, 0xBA, 0x6A, 0xE0, 0x56, 0x34, 0xC9, 0x60, 0x56, 0x9A, 0x4C, 0xE0, 0x58, 0x1D, 0xE5, 0xE0, 0x58, 0x7A, 0x2E, 0xE0, 0x59, 0xFD, 0xC7, 0xE0, 0x5A, 0x5A, 0x10, 0xE0, 0x5B, 0xDD, 0xA9, 0xE0, 0x5C, 0x39, 0xF2, 0xE0, -0x5D, 0xC6, 0xC6, 0x60, 0x5E, 0x19, 0xD4, 0xE0, 0x5F, 0xA6, 0xA8, 0x60, 0x60, 0x02, 0xF1, 0x60, +0x5D, 0xC6, 0xC6, 0x60, 0x5E, 0x19, 0xD4, 0xE0, 0x5F, 0xDE, 0x07, 0x60, 0x60, 0x02, 0xF1, 0x60, 0x61, 0x8F, 0xC4, 0xE0, 0x61, 0xE2, 0xD3, 0x60, 0x63, 0x6F, 0xA6, 0xE0, 0x63, 0xC2, 0xB5, 0x60, 0x65, 0x4F, 0x88, 0xE0, 0x65, 0xA2, 0x97, 0x60, 0x67, 0x2F, 0x6A, 0xE0, 0x67, 0x82, 0x79, 0x60, 0x69, 0x0F, 0x4C, 0xE0, 0x69, 0x6B, 0x95, 0xE0, 0x6A, 0xEF, 0x2E, 0xE0, 0x6B, 0x4B, 0x77, 0xE0, @@ -43827,7 +43882,7 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { 0x58, 0x7A, 0x2E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFD, 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x5A, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDD, 0xA9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x39, 0xF2, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xC6, 0xC6, 0x60, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x19, 0xD4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xA6, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x19, 0xD4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xDE, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x02, 0xF1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x8F, 0xC4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0xE2, 0xD3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6F, 0xA6, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0xC2, 0xB5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x4F, 0x88, 0xE0, 0x00, 0x00, 0x00, 0x00, @@ -47082,189 +47137,6 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { #endif 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, -/* US/Pacific-New */ -0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x9E, 0xA6, 0x48, 0xA0, 0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, -0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xD6, 0xFE, 0x74, 0x5C, -0xD8, 0x80, 0xAD, 0x90, 0xDA, 0xFE, 0xC3, 0x90, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xA5, 0x90, -0xDD, 0xA9, 0xAC, 0x90, 0xDE, 0xBE, 0x87, 0x90, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x69, 0x90, -0xE1, 0x69, 0x70, 0x90, 0xE2, 0x7E, 0x4B, 0x90, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x2D, 0x90, -0xE5, 0x29, 0x34, 0x90, 0xE6, 0x47, 0x4A, 0x10, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x2C, 0x10, -0xE8, 0xF2, 0x33, 0x10, 0xEA, 0x07, 0x0E, 0x10, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xF0, 0x10, -0xEC, 0xB1, 0xF7, 0x10, 0xED, 0xC6, 0xD2, 0x10, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xEE, 0x90, -0xF0, 0x71, 0xBB, 0x10, 0xF1, 0x8F, 0xD0, 0x90, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xB2, 0x90, -0xF4, 0x5F, 0xA3, 0x90, 0xF5, 0x4F, 0x94, 0x90, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x76, 0x90, -0xF8, 0x28, 0xA2, 0x10, 0xF9, 0x0F, 0x58, 0x90, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, -0xFB, 0xE8, 0x66, 0x10, 0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, -0xFF, 0xA8, 0x2A, 0x10, 0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, -0x03, 0x71, 0x28, 0x90, 0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, -0x07, 0x30, 0xEC, 0x90, 0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, -0x0A, 0xF0, 0xB0, 0x90, 0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, -0x0E, 0xB9, 0xAF, 0x10, 0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, -0x12, 0x79, 0x73, 0x10, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, -0x16, 0x39, 0x37, 0x10, 0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, -0x1A, 0x02, 0x35, 0x90, 0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, -0x1D, 0xC1, 0xF9, 0x90, 0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, -0x21, 0x81, 0xBD, 0x90, 0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, -0x25, 0x4A, 0xBC, 0x10, 0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, -0x29, 0x0A, 0x80, 0x10, 0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, -0x2C, 0xD3, 0x7E, 0x90, 0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, -0x30, 0x93, 0x42, 0x90, 0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, -0x34, 0x53, 0x06, 0x90, 0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, -0x38, 0x1C, 0x05, 0x10, 0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, -0x3B, 0xDB, 0xC9, 0x10, 0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, -0x3F, 0x9B, 0x8D, 0x10, 0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, -0x43, 0x64, 0x8B, 0x90, 0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, -0x47, 0x2D, 0x8A, 0x10, 0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, -0x4A, 0xED, 0x4E, 0x10, 0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, -0x4E, 0xB6, 0x4C, 0x90, 0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, -0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, -0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, -0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, -0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, -0x61, 0x87, 0x95, 0x90, 0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, -0x65, 0x47, 0x59, 0x90, 0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, -0x69, 0x07, 0x1D, 0x90, 0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, -0x6C, 0xD0, 0x1C, 0x10, 0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, -0x70, 0x8F, 0xE0, 0x10, 0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, -0x74, 0x4F, 0xA4, 0x10, 0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, -0x78, 0x18, 0xA2, 0x90, 0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, -0x7B, 0xD8, 0x66, 0x90, 0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, -0x7F, 0x98, 0x2A, 0x90, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0x91, 0x26, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, -0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, -0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, -#ifdef TIMELIB_SUPPORTS_V2DATA -0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x5E, 0x04, 0x1A, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xA6, 0x48, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, -0x9F, 0xBB, 0x15, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x86, 0x2A, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x9A, 0xF7, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x89, 0x1A, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, -0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x61, 0x26, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xD6, 0xFE, 0x74, 0x5C, 0xFF, 0xFF, 0xFF, 0xFF, 0xD8, 0x80, 0xAD, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xDA, 0xFE, 0xC3, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0xC0, 0x90, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xDC, 0xDE, 0xA5, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xA9, 0xAC, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xDE, 0xBE, 0x87, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x89, 0x8E, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xE0, 0x9E, 0x69, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x69, 0x70, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xE2, 0x7E, 0x4B, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0x49, 0x52, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xE4, 0x5E, 0x2D, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xE5, 0x29, 0x34, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xE6, 0x47, 0x4A, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x12, 0x51, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xE8, 0x27, 0x2C, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xF2, 0x33, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xEA, 0x07, 0x0E, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0xD2, 0x15, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xEB, 0xE6, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xB1, 0xF7, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xED, 0xC6, 0xD2, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE, 0x91, 0xD9, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xEF, 0xAF, 0xEE, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x71, 0xBB, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xF1, 0x8F, 0xD0, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 0x7F, 0xC1, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xF3, 0x6F, 0xB2, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xF4, 0x5F, 0xA3, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xF5, 0x4F, 0x94, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0x3F, 0x85, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, -0xF7, 0x2F, 0x76, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x28, 0xA2, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xF9, 0x0F, 0x58, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x08, 0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xFA, 0xF8, 0x83, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xE8, 0x66, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xFC, 0xD8, 0x65, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC8, 0x48, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, -0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0x2A, 0x10, 0x00, 0x00, 0x00, 0x00, -0x00, 0x98, 0x29, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, -0x02, 0x78, 0x0B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x71, 0x28, 0x90, 0x00, 0x00, 0x00, 0x00, -0x04, 0x61, 0x27, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x05, 0x51, 0x0A, 0x90, 0x00, 0x00, 0x00, 0x00, -0x06, 0x41, 0x09, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0xEC, 0x90, 0x00, 0x00, 0x00, 0x00, -0x07, 0x8D, 0x43, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x10, 0xCE, 0x90, 0x00, 0x00, 0x00, 0x00, -0x09, 0xAD, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xF0, 0xB0, 0x90, 0x00, 0x00, 0x00, 0x00, -0x0B, 0xE0, 0xAF, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xD9, 0xCD, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0D, 0xC0, 0x91, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xB9, 0xAF, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0F, 0xA9, 0xAE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x99, 0x91, 0x10, 0x00, 0x00, 0x00, 0x00, -0x11, 0x89, 0x90, 0x20, 0x00, 0x00, 0x00, 0x00, 0x12, 0x79, 0x73, 0x10, 0x00, 0x00, 0x00, 0x00, -0x13, 0x69, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00, 0x14, 0x59, 0x55, 0x10, 0x00, 0x00, 0x00, 0x00, -0x15, 0x49, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x16, 0x39, 0x37, 0x10, 0x00, 0x00, 0x00, 0x00, -0x17, 0x29, 0x36, 0x20, 0x00, 0x00, 0x00, 0x00, 0x18, 0x22, 0x53, 0x90, 0x00, 0x00, 0x00, 0x00, -0x19, 0x09, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x02, 0x35, 0x90, 0x00, 0x00, 0x00, 0x00, -0x1A, 0xF2, 0x34, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xE2, 0x17, 0x90, 0x00, 0x00, 0x00, 0x00, -0x1C, 0xD2, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xC1, 0xF9, 0x90, 0x00, 0x00, 0x00, 0x00, -0x1E, 0xB1, 0xF8, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xA1, 0xDB, 0x90, 0x00, 0x00, 0x00, 0x00, -0x20, 0x76, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x21, 0x81, 0xBD, 0x90, 0x00, 0x00, 0x00, 0x00, -0x22, 0x56, 0x0D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x23, 0x6A, 0xDA, 0x10, 0x00, 0x00, 0x00, 0x00, -0x24, 0x35, 0xEF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4A, 0xBC, 0x10, 0x00, 0x00, 0x00, 0x00, -0x26, 0x15, 0xD1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x27, 0x2A, 0x9E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x27, 0xFE, 0xED, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x29, 0x0A, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, -0x29, 0xDE, 0xCF, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xEA, 0x62, 0x10, 0x00, 0x00, 0x00, 0x00, -0x2B, 0xBE, 0xB1, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xD3, 0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, -0x2D, 0x9E, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xB3, 0x60, 0x90, 0x00, 0x00, 0x00, 0x00, -0x2F, 0x7E, 0x75, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x93, 0x42, 0x90, 0x00, 0x00, 0x00, 0x00, -0x31, 0x67, 0x92, 0x20, 0x00, 0x00, 0x00, 0x00, 0x32, 0x73, 0x24, 0x90, 0x00, 0x00, 0x00, 0x00, -0x33, 0x47, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x34, 0x53, 0x06, 0x90, 0x00, 0x00, 0x00, 0x00, -0x35, 0x27, 0x56, 0x20, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0xE8, 0x90, 0x00, 0x00, 0x00, 0x00, -0x37, 0x07, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1C, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, -0x38, 0xE7, 0x1A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0xE7, 0x10, 0x00, 0x00, 0x00, 0x00, -0x3A, 0xC6, 0xFC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0xC9, 0x10, 0x00, 0x00, 0x00, 0x00, -0x3C, 0xB0, 0x18, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0xAB, 0x10, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x8F, 0xFA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x8D, 0x10, 0x00, 0x00, 0x00, 0x00, -0x40, 0x6F, 0xDC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0xA9, 0x90, 0x00, 0x00, 0x00, 0x00, -0x42, 0x4F, 0xBE, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x8B, 0x90, 0x00, 0x00, 0x00, 0x00, -0x44, 0x2F, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x45, 0x44, 0x6D, 0x90, 0x00, 0x00, 0x00, 0x00, -0x45, 0xF3, 0xD3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x8A, 0x10, 0x00, 0x00, 0x00, 0x00, -0x47, 0xD3, 0xB5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0D, 0x6C, 0x10, 0x00, 0x00, 0x00, 0x00, -0x49, 0xB3, 0x97, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xED, 0x4E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x4B, 0x9C, 0xB3, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x6A, 0x90, 0x00, 0x00, 0x00, 0x00, -0x4D, 0x7C, 0x95, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xB6, 0x4C, 0x90, 0x00, 0x00, 0x00, 0x00, -0x4F, 0x5C, 0x77, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x96, 0x2E, 0x90, 0x00, 0x00, 0x00, 0x00, -0x51, 0x3C, 0x59, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x52, 0x76, 0x10, 0x90, 0x00, 0x00, 0x00, 0x00, -0x53, 0x1C, 0x3B, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0xF2, 0x90, 0x00, 0x00, 0x00, 0x00, -0x54, 0xFC, 0x1D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x35, 0xD4, 0x90, 0x00, 0x00, 0x00, 0x00, -0x56, 0xE5, 0x3A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0xF1, 0x10, 0x00, 0x00, 0x00, 0x00, -0x58, 0xC5, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xD3, 0x10, 0x00, 0x00, 0x00, 0x00, -0x5A, 0xA4, 0xFE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0xB5, 0x10, 0x00, 0x00, 0x00, 0x00, -0x5C, 0x84, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xBE, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00, -0x5E, 0x64, 0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9E, 0x79, 0x10, 0x00, 0x00, 0x00, 0x00, -0x60, 0x4D, 0xDE, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x87, 0x95, 0x90, 0x00, 0x00, 0x00, 0x00, -0x62, 0x2D, 0xC0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x77, 0x90, 0x00, 0x00, 0x00, 0x00, -0x64, 0x0D, 0xA2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x65, 0x47, 0x59, 0x90, 0x00, 0x00, 0x00, 0x00, -0x65, 0xED, 0x84, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x27, 0x3B, 0x90, 0x00, 0x00, 0x00, 0x00, -0x67, 0xCD, 0x66, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x69, 0x07, 0x1D, 0x90, 0x00, 0x00, 0x00, 0x00, -0x69, 0xAD, 0x48, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE6, 0xFF, 0x90, 0x00, 0x00, 0x00, 0x00, -0x6B, 0x96, 0x65, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xD0, 0x1C, 0x10, 0x00, 0x00, 0x00, 0x00, -0x6D, 0x76, 0x47, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xAF, 0xFE, 0x10, 0x00, 0x00, 0x00, 0x00, -0x6F, 0x56, 0x29, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8F, 0xE0, 0x10, 0x00, 0x00, 0x00, 0x00, -0x71, 0x36, 0x0B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x72, 0x6F, 0xC2, 0x10, 0x00, 0x00, 0x00, 0x00, -0x73, 0x15, 0xED, 0x20, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4F, 0xA4, 0x10, 0x00, 0x00, 0x00, 0x00, -0x74, 0xFF, 0x09, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x38, 0xC0, 0x90, 0x00, 0x00, 0x00, 0x00, -0x76, 0xDE, 0xEB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0xA2, 0x90, 0x00, 0x00, 0x00, 0x00, -0x78, 0xBE, 0xCD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x79, 0xF8, 0x84, 0x90, 0x00, 0x00, 0x00, 0x00, -0x7A, 0x9E, 0xAF, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xD8, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00, -0x7C, 0x7E, 0x91, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xB8, 0x48, 0x90, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x5E, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x98, 0x2A, 0x90, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0x91, 0x26, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, -0x01, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, -0x9D, 0x90, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, -0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x01, 0x0A, 0x50, 0x53, 0x54, 0x38, 0x50, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, -0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, -#endif -0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, - /* US/Samoa */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -47533,4 +47405,4 @@ const unsigned char timelib_timezone_db_data_builtin[269774] = { #endif 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,}; -const timelib_tzdb timezonedb_builtin = { "2020.1", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2020.4", 594, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index 8a1e86a3a0547..d54d7b4566381 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -69,7 +69,7 @@ function date_time_set( function date_date_set(DateTime $object, int $year, int $month, int $day): DateTime {} -function date_isodate_set(DateTime $object, int $year, int $week, int $day = 1): DateTime {} +function date_isodate_set(DateTime $object, int $year, int $week, int $dayOfWeek = 1): DateTime {} function date_timestamp_set(DateTime $object, int $timestamp): DateTime {} @@ -98,7 +98,7 @@ function date_interval_create_from_date_string(string $datetime): DateInterval|f function date_interval_format(DateInterval $object, string $format): string {} -function date_default_timezone_set(string $timezoneID): bool {} +function date_default_timezone_set(string $timezoneId): bool {} function date_default_timezone_get(): string {} @@ -134,6 +134,7 @@ public function getTimestamp(); /** @return DateInterval|false */ public function diff(DateTimeInterface $targetObject, bool $absolute = false); + /** @return void */ public function __wakeup(); } @@ -141,6 +142,7 @@ class DateTime implements DateTimeInterface { public function __construct(string $datetime = "now", ?DateTimeZone $timezone = null) {} + /** @return void */ public function __wakeup() {} /** @return DateTime */ @@ -246,6 +248,7 @@ class DateTimeImmutable implements DateTimeInterface { public function __construct(string $datetime = "now", ?DateTimeZone $timezone = null) {} + /** @return void */ public function __wakeup() {} /** @return DateTimeZone */ @@ -291,7 +294,7 @@ public function getTimestamp() {} * @return DateInterval|false * @alias date_diff */ - public function diff(DateTimeInterface $object, bool $absolute = false) {} + public function diff(DateTimeInterface $targetObject, bool $absolute = false) {} /** @return DateTimeImmutable|false */ public function modify(string $modifier) {} @@ -337,7 +340,7 @@ public function getName() {} * @return int * @alias timezone_offset_get */ - public function getOffset(DateTimeInterface $object) {} + public function getOffset(DateTimeInterface $datetime) {} /** * @return array|false @@ -363,6 +366,7 @@ public static function listAbbreviations() {} */ public static function listIdentifiers(int $timezoneGroup = DateTimeZone::ALL, ?string $countryCode = null) {} + /** @return void */ public function __wakeup() {} /** @return DateTimeZone */ @@ -385,6 +389,7 @@ public static function createFromDateString(string $datetime) {} */ public function format(string $format) {} + /** @return void */ public function __wakeup() {} /** @return DateInterval */ @@ -413,6 +418,7 @@ public function getDateInterval() {} /** @return int|null */ public function getRecurrences() {} + /** @return void */ public function __wakeup() {} /** @return DatePeriod */ diff --git a/ext/date/php_date_arginfo.h b/ext/date/php_date_arginfo.h index 19ee60f5c1c99..181799e1a1b92 100644 --- a/ext/date/php_date_arginfo.h +++ b/ext/date/php_date_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: cb1532309655d85eb2644cdcfbf23063dfa1ddaf */ + * Stub hash: 07d0e6179d838847d4a5d454f8b56438f8df19c0 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strtotime, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, datetime, IS_STRING, 0) @@ -143,7 +143,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_date_isodate_set, 0, 3, DateTime, ZEND_ARG_OBJ_INFO(0, object, DateTime, 0) ZEND_ARG_TYPE_INFO(0, year, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, week, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, day, IS_LONG, 0, "1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dayOfWeek, IS_LONG, 0, "1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_date_timestamp_set, 0, 2, DateTime, 0) @@ -203,7 +203,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_date_interval_format, 0, 2, IS_S ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_date_default_timezone_set, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, timezoneID, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_date_default_timezone_get arginfo_timezone_version_get @@ -335,10 +335,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_DateTimeImmutable_getTimestamp arginfo_class_DateTimeInterface_getTimezone -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DateTimeImmutable_diff, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, object, DateTimeInterface, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, absolute, _IS_BOOL, 0, "false") -ZEND_END_ARG_INFO() +#define arginfo_class_DateTimeImmutable_diff arginfo_class_DateTimeInterface_diff #define arginfo_class_DateTimeImmutable_modify arginfo_class_DateTime_modify @@ -371,7 +368,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_DateTimeZone_getName arginfo_class_DateTimeInterface_getTimezone ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DateTimeZone_getOffset, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, object, DateTimeInterface, 0) + ZEND_ARG_OBJ_INFO(0, datetime, DateTimeInterface, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DateTimeZone_getTransitions, 0, 0, 0) diff --git a/ext/date/tests/68062.phpt b/ext/date/tests/68062.phpt index 3a185e0c7160a..66f7692cf4f30 100644 --- a/ext/date/tests/68062.phpt +++ b/ext/date/tests/68062.phpt @@ -15,4 +15,4 @@ try { ?> --EXPECT-- 3600 -DateTimeZone::getOffset(): Argument #1 ($object) must be of type DateTimeInterface, int given +DateTimeZone::getOffset(): Argument #1 ($datetime) must be of type DateTimeInterface, int given diff --git a/ext/date/tests/bug48097.phpt b/ext/date/tests/bug48097.phpt index 02f72f2f9918e..f5fbcf3ed9374 100644 --- a/ext/date/tests/bug48097.phpt +++ b/ext/date/tests/bug48097.phpt @@ -4,7 +4,7 @@ Bug #48097 (date_timezone_set function produces wrong datetime result) date.timezone=UTC --FILE-- format( DATE_ISO8601 ), "\n"; echo $d->format( 'U' ), "\n\n"; @@ -17,23 +17,23 @@ echo $d->format( 'U' ), "\n\n"; --EXPECT-- object(DateTime)#1 (3) { ["date"]=> - string(26) "1955-05-23 00:00:00.000000" + string(26) "1955-05-22 02:00:00.000000" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "+02:00" } -1955-05-23T00:00:00+0200 --461124000 +1955-05-22T02:00:00+0200 +-461203200 object(DateTime)#1 (3) { ["date"]=> - string(26) "1955-05-22 23:00:00.000000" + string(26) "1955-05-22 01:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(15) "Europe/Budapest" } -1955-05-22T23:00:00+0100 +1955-05-22T01:00:00+0100 --461124000 +-461203200 diff --git a/ext/dba/dba.stub.php b/ext/dba/dba.stub.php index c79594b3b1c19..12cccbe506c88 100644 --- a/ext/dba/dba.stub.php +++ b/ext/dba/dba.stub.php @@ -5,68 +5,68 @@ /** * @param string $path * @param string $mode - * @param string $handlername - * @param string $handler_parameters + * @param string $handler + * @param string $handler_params * @return resource|false */ -function dba_popen($path, $mode, $handlername = UNKNOWN, ...$handler_parameters) {} +function dba_popen($path, $mode, $handler = UNKNOWN, ...$handler_params) {} /** * @param string $path * @param string $mode - * @param string $handlername - * @param string $handler_parameters + * @param string $handler + * @param string $handler_params * @return resource|false */ -function dba_open($path, $mode, $handlername = UNKNOWN, ...$handler_parameters) {} +function dba_open($path, $mode, $handler = UNKNOWN, ...$handler_params) {} -/** @param resource $handle */ -function dba_close($handle): void {} +/** @param resource $dba */ +function dba_close($dba): void {} /** * @param string|array $key - * @param resource $handle + * @param resource $dba */ -function dba_exists($key, $handle): bool {} +function dba_exists($key, $dba): bool {} /** * @param string|array $key - * @param int|resource $skip actually this parameter is optional, not $handle - * @param resource $handle + * @param int|resource $skip actually this parameter is optional, not $dba + * @param resource $dba */ -function dba_fetch($key, $skip, $handle = UNKNOWN): string|false {} +function dba_fetch($key, $skip, $dba = UNKNOWN): string|false {} -function dba_key_split(string $key): array|false {} +function dba_key_split(string|false|null $key): array|false {} -/** @param resource $handle */ -function dba_firstkey($handle): string|false {} +/** @param resource $dba */ +function dba_firstkey($dba): string|false {} -/** @param resource $handle */ -function dba_nextkey($handle): string|false {} +/** @param resource $dba */ +function dba_nextkey($dba): string|false {} /** * @param string|array $key - * @param resource $handle + * @param resource $dba */ -function dba_delete($key, $handle): bool {} +function dba_delete($key, $dba): bool {} /** * @param string|array $key - * @param resource $handle + * @param resource $dba */ -function dba_insert($key, string $value, $handle): bool {} +function dba_insert($key, string $value, $dba): bool {} /** * @param string|array $key - * @param resource $handle + * @param resource $dba */ -function dba_replace($key, string $value, $handle): bool {} +function dba_replace($key, string $value, $dba): bool {} -/** @param resource $handle */ -function dba_optimize($handle): bool {} +/** @param resource $dba */ +function dba_optimize($dba): bool {} -/** @param resource $handle */ -function dba_sync($handle): bool {} +/** @param resource $dba */ +function dba_sync($dba): bool {} function dba_handlers(bool $full_info = false): array {} diff --git a/ext/dba/dba_arginfo.h b/ext/dba/dba_arginfo.h index bada5c39f26c2..d92eae0448cc3 100644 --- a/ext/dba/dba_arginfo.h +++ b/ext/dba/dba_arginfo.h @@ -1,36 +1,36 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5b43c7cfcb48f3081d5585192eaaa5185df036f8 */ + * Stub hash: 63980c2a7227d1b5dbd566efb3efbf8c45c55c0d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_popen, 0, 0, 2) ZEND_ARG_INFO(0, path) ZEND_ARG_INFO(0, mode) - ZEND_ARG_INFO(0, handlername) - ZEND_ARG_VARIADIC_INFO(0, handler_parameters) + ZEND_ARG_INFO(0, handler) + ZEND_ARG_VARIADIC_INFO(0, handler_params) ZEND_END_ARG_INFO() #define arginfo_dba_open arginfo_dba_popen ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dba_close, 0, 1, IS_VOID, 0) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dba_exists, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_dba_fetch, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, key) ZEND_ARG_INFO(0, skip) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_dba_key_split, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_FALSE|MAY_BE_NULL, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_dba_firstkey, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() #define arginfo_dba_nextkey arginfo_dba_firstkey @@ -40,13 +40,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dba_insert, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, key) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() #define arginfo_dba_replace arginfo_dba_insert ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dba_optimize, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, handle) + ZEND_ARG_INFO(0, dba) ZEND_END_ARG_INFO() #define arginfo_dba_sync arginfo_dba_optimize diff --git a/ext/dba/tests/dba_split.phpt b/ext/dba/tests/dba_split.phpt index 246018715033b..7aafd938d8fd4 100644 --- a/ext/dba/tests/dba_split.phpt +++ b/ext/dba/tests/dba_split.phpt @@ -7,8 +7,9 @@ DBA Split Test ?> --FILE-- --EXPECT-- +bool(false) +bool(false) array(2) { [0]=> string(0) "" [1]=> string(1) "1" } -bool(false) array(2) { [0]=> string(0) "" diff --git a/ext/dom/document.c b/ext/dom/document.c index 23bdcae1e0c1a..c6d0f723f89cb 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1840,7 +1840,6 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */ } ctxt = htmlCreateFileParserCtxt(source, NULL); } else { - source_len = xmlStrlen((xmlChar *) source); if (ZEND_SIZE_T_INT_OVFL(source_len)) { php_error_docref(NULL, E_WARNING, "Input string is too long"); RETURN_FALSE; diff --git a/ext/dom/tests/bug80268.phpt b/ext/dom/tests/bug80268.phpt new file mode 100644 index 0000000000000..0fe50b85e8611 --- /dev/null +++ b/ext/dom/tests/bug80268.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #80268 (loadHTML() truncates at NUL bytes) +--SKIPIF-- + +--FILE-- +loadHTML("

foo\0bar

"); +$html = $doc->saveHTML(); +var_dump(strpos($html, '

foo

') !== false); + +file_put_contents(__DIR__ . '/80268.html', "

foo\0bar

"); +$doc = new DOMDocument; +$doc->loadHTMLFile(__DIR__ . '/80268.html'); +$html = $doc->saveHTML(); +var_dump(strpos($html, '

foo

') !== false); +?> +--CLEAN-- + +--EXPECT-- +bool(true) +bool(true) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 044bb61699560..1b5784102d4e8 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -885,6 +885,10 @@ static void zend_ffi_callback_trampoline(ffi_cif* cif, void* ret, void** args, v } free_alloca(fci.params, use_heap); + if (EG(exception)) { + zend_error(E_ERROR, "Throwing from FFI callbacks is not allowed"); + } + ret_type = ZEND_FFI_TYPE(callback_data->type->func.ret_type); if (ret_type->kind != ZEND_FFI_TYPE_VOID) { zend_ffi_zval_to_cdata(ret, ret_type, &retval); @@ -4428,7 +4432,7 @@ ZEND_METHOD(FFI, isNull) /* {{{ */ /* }}} */ -ZEND_METHOD(CType, getName) /* {{{ */ +ZEND_METHOD(FFI_CType, getName) /* {{{ */ { zend_ffi_ctype *ctype = (zend_ffi_ctype*)(Z_OBJ_P(ZEND_THIS)); if (zend_parse_parameters_none() == FAILURE) { @@ -5004,7 +5008,7 @@ ZEND_MINIT_FUNCTION(ffi) zend_ffi_cdata_free_handlers.get_properties = zend_fake_get_properties; zend_ffi_cdata_free_handlers.get_gc = zend_fake_get_gc; - INIT_NS_CLASS_ENTRY(ce, "FFI", "CType", class_CType_methods); + INIT_NS_CLASS_ENTRY(ce, "FFI", "CType", class_FFI_CType_methods); zend_ffi_ctype_ce = zend_register_internal_class(&ce); zend_ffi_ctype_ce->ce_flags |= ZEND_ACC_FINAL; zend_ffi_ctype_ce->create_object = zend_ffi_ctype_new; diff --git a/ext/ffi/ffi.stub.php b/ext/ffi/ffi.stub.php index 1662caa41b92c..0a347b2aa123b 100644 --- a/ext/ffi/ffi.stub.php +++ b/ext/ffi/ffi.stub.php @@ -10,7 +10,7 @@ public static function cdef(string $code = "", ?string $lib = null): FFI {} public static function load(string $filename): ?FFI {} - public static function scope(string $scope_name): ?FFI {} + public static function scope(string $name): ?FFI {} public static function new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData {} @@ -28,7 +28,7 @@ public static function type(string $type): ?FFI\CType {} /** @prefer-ref $ptr */ public static function typeof(FFI\CData $ptr): ?FFI\CType {} - public static function arrayType(FFI\CType $type, array $dims): ?FFI\CType {} + public static function arrayType(FFI\CType $type, array $dimensions): ?FFI\CType {} /** @prefer-ref $ptr */ public static function addr(FFI\CData $ptr): FFI\CData {} @@ -40,11 +40,11 @@ public static function sizeof(object $ptr): ?int {} public static function alignof(object $ptr): ?int {} /** - * @param FFI\CData|string $src - * @prefer-ref $dst - * @prefer-ref $src + * @param FFI\CData|string $from + * @prefer-ref $to + * @prefer-ref $from */ - public static function memcpy(FFI\CData $dst, $src, int $size): void {} + public static function memcpy(FFI\CData $to, $from, int $size): void {} /** * @prefer-ref $ptr1 @@ -55,7 +55,7 @@ public static function memcpy(FFI\CData $dst, $src, int $size): void {} public static function memcmp($ptr1, $ptr2, int $size): ?int {} /** @prefer-ref $ptr */ - public static function memset(FFI\CData $ptr, int $ch, int $size): void {} + public static function memset(FFI\CData $ptr, int $value, int $size): void {} /** @prefer-ref $ptr */ public static function string(FFI\CData $ptr, ?int $size = null): ?string {} diff --git a/ext/ffi/ffi_arginfo.h b/ext/ffi/ffi_arginfo.h index b5162fcce7a0d..19e0adb25d7a6 100644 --- a/ext/ffi/ffi_arginfo.h +++ b/ext/ffi/ffi_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 63219df3f7ccf823350d288bf2dfeba5291a3e51 */ + * Stub hash: abd3bc186ae3f71f2b7eb1d47f3b6bab84fb2bda */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_STRING, 0, "\"\"") @@ -11,7 +11,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_scope, 0, 1, FFI, 1) - ZEND_ARG_TYPE_INFO(0, scope_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_new, 0, 1, FFI\\CData, 1) @@ -39,7 +39,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_arrayType, 0, 2, FFI\\CType, 1) ZEND_ARG_OBJ_INFO(0, type, FFI\\CType, 0) - ZEND_ARG_TYPE_INFO(0, dims, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, dimensions, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_addr, 0, 1, FFI\\CData, 0) @@ -53,8 +53,8 @@ ZEND_END_ARG_INFO() #define arginfo_class_FFI_alignof arginfo_class_FFI_sizeof ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memcpy, 0, 3, IS_VOID, 0) - ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, dst, FFI\\CData, 0) - ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, src) + ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, to, FFI\\CData, 0) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, from) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -66,7 +66,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memset, 0, 3, IS_VOID, 0) ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) - ZEND_ARG_TYPE_INFO(0, ch, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -79,7 +79,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_isNull, 0, 1, _IS_BOOL ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_CType_getName, 0, 0, IS_STRING, 0) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_CType_getName, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -100,7 +100,7 @@ ZEND_METHOD(FFI, memcmp); ZEND_METHOD(FFI, memset); ZEND_METHOD(FFI, string); ZEND_METHOD(FFI, isNull); -ZEND_METHOD(CType, getName); +ZEND_METHOD(FFI_CType, getName); static const zend_function_entry class_FFI_methods[] = { @@ -125,7 +125,7 @@ static const zend_function_entry class_FFI_methods[] = { }; -static const zend_function_entry class_CType_methods[] = { - ZEND_ME(CType, getName, arginfo_class_CType_getName, ZEND_ACC_PUBLIC) +static const zend_function_entry class_FFI_CType_methods[] = { + ZEND_ME(FFI_CType, getName, arginfo_class_FFI_CType_getName, ZEND_ACC_PUBLIC) ZEND_FE_END }; diff --git a/ext/ffi/tests/bug79177.phpt b/ext/ffi/tests/bug79177.phpt new file mode 100644 index 0000000000000..0667faa52dee9 --- /dev/null +++ b/ext/ffi/tests/bug79177.phpt @@ -0,0 +1,42 @@ +--TEST-- +Bug #79177 (FFI doesn't handle well PHP exceptions within callback) +--SKIPIF-- + +--FILE-- +bug79177_cb = function() { + throw new \RuntimeException('Not allowed'); +}; +try { + $ffi->bug79177(); // this is supposed to raise a fatal error +} catch (\Throwable $exception) {} +echo "done\n"; +?> +--EXPECTF-- +Warning: Uncaught RuntimeException: Not allowed in %s:%d +Stack trace: +#0 %s(%d): {closure}() +#1 %s(%d): FFI->bug79177() +#2 {main} + thrown in %s on line %d + +Fatal error: Throwing from FFI callbacks is not allowed in %s on line %d diff --git a/ext/ffi/tests/bug80186.phpt b/ext/ffi/tests/bug80186.phpt new file mode 100644 index 0000000000000..7bd9984e9a44e --- /dev/null +++ b/ext/ffi/tests/bug80186.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #80186 (Segfault when iterating over FFI object) +--SKIPIF-- + +--FILE-- + +===DONE=== +--EXPECT-- +===DONE=== diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c index 0a4ee3c34eebb..add971b6d643c 100644 --- a/ext/fileinfo/fileinfo.c +++ b/ext/fileinfo/fileinfo.c @@ -35,6 +35,7 @@ #include "fileinfo_arginfo.h" #include "fopen_wrappers.h" /* needed for is_url */ #include "Zend/zend_exceptions.h" +#include "Zend/zend_interfaces.h" /* {{{ macros and type definitions */ typedef struct _php_fileinfo { @@ -132,13 +133,16 @@ PHP_MINIT_FUNCTION(finfo) { zend_class_entry _finfo_class_entry; INIT_CLASS_ENTRY(_finfo_class_entry, "finfo", class_finfo_methods); - _finfo_class_entry.create_object = finfo_objects_new; finfo_class_entry = zend_register_internal_class(&_finfo_class_entry); + finfo_class_entry->create_object = finfo_objects_new; + finfo_class_entry->serialize = zend_class_serialize_deny; + finfo_class_entry->unserialize = zend_class_unserialize_deny; /* copy the standard object handlers to you handler table */ memcpy(&finfo_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); finfo_object_handlers.offset = XtOffsetOf(finfo_object, zo); finfo_object_handlers.free_obj = finfo_objects_free; + finfo_object_handlers.clone_obj = NULL; le_fileinfo = zend_register_list_destructors_ex(finfo_resource_destructor, NULL, "file_info", module_number); diff --git a/ext/fileinfo/tests/clone_serialize.phpt b/ext/fileinfo/tests/clone_serialize.phpt new file mode 100644 index 0000000000000..a249819796b65 --- /dev/null +++ b/ext/fileinfo/tests/clone_serialize.phpt @@ -0,0 +1,25 @@ +--TEST-- +Cloning and serializing finfo is not supported +--FILE-- +buffer("Test string")); +try { + $finfo2 = clone $finfo; + var_dump($finfo2->buffer("Test string")); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + $finfo3 = unserialize(serialize($finfo)); + var_dump($finfo3->buffer("Test string")); +} catch (Exception $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECTF-- +string(%d) "%s" +Trying to clone an uncloneable object of class finfo +Serialization of 'finfo' is not allowed diff --git a/ext/ftp/ftp.stub.php b/ext/ftp/ftp.stub.php index f4812655a4c50..698cfe215c3ec 100644 --- a/ext/ftp/ftp.stub.php +++ b/ext/ftp/ftp.stub.php @@ -2,133 +2,57 @@ /** @generate-function-entries */ -/** @return resource|false */ -function ftp_connect(string $hostname, int $port = 21, int $timeout = 90) {} +function ftp_connect(string $hostname, int $port = 21, int $timeout = 90): FTPConnection|false {} #ifdef HAVE_FTP_SSL -/** @return resource|false */ -function ftp_ssl_connect(string $hostname, int $port = 21, int $timeout = 90) {} +function ftp_ssl_connect(string $hostname, int $port = 21, int $timeout = 90): FTPConnection|false {} #endif -/** @param resource $ftp */ -function ftp_login($ftp, string $username, string $password): bool {} - -/** @param resource $ftp */ -function ftp_pwd($ftp): string|false {} - -/** @param resource $ftp */ -function ftp_cdup($ftp): bool {} - -/** @param resource $ftp */ -function ftp_chdir($ftp, string $directory): bool {} - -/** @param resource $ftp */ -function ftp_exec($ftp, string $command): bool {} - -/** @param resource $ftp */ -function ftp_raw($ftp, string $command): array {} - -/** @param resource $ftp */ -function ftp_mkdir($ftp, string $directory): string|false {} - -/** @param resource $ftp */ -function ftp_rmdir($ftp, string $directory): bool {} - -/** @param resource $ftp */ -function ftp_chmod($ftp, int $permissions, string $filename): int|false {} - -/** - * @param resource $ftp - * @param string $response - */ -function ftp_alloc($ftp, int $size, &$response = null): bool {} - -/** @param resource $ftp */ -function ftp_nlist($ftp, string $directory): array|false {} - -/** @param resource $ftp */ -function ftp_rawlist($ftp, string $directory, bool $recursive = false): array|false {} - -/** @param resource $ftp */ -function ftp_mlsd($ftp, string $directory): array|false {} - -/** @param resource $ftp */ -function ftp_systype($ftp): string|false {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_fget($ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_nb_fget($ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_pasv($ftp, bool $enable): bool {} - -/** @param resource $ftp */ -function ftp_get($ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** @param resource $ftp */ -function ftp_nb_get($ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_nb_continue($ftp): int {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_fput($ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_nb_fput($ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_put($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** @param resource $ftp */ -function ftp_append($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool {} - -/** @param resource $ftp */ -function ftp_nb_put($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): int|false {} - -/** @param resource $ftp */ -function ftp_size($ftp, string $filename): int {} - -/** @param resource $ftp */ -function ftp_mdtm($ftp, string $filename): int {} - -/** @param resource $ftp */ -function ftp_rename($ftp, string $from, string $to): bool {} - -/** @param resource $ftp */ -function ftp_delete($ftp, string $filename): bool {} - -/** @param resource $ftp */ -function ftp_site($ftp, string $command): bool {} - -/** @param resource $ftp */ -function ftp_close($ftp): bool {} - -/** - * @param resource $ftp - * @alias ftp_close - */ -function ftp_quit($ftp): bool {} - -/** - * @param resource $ftp - * @param int|bool $value - */ -function ftp_set_option($ftp, int $option, $value): bool {} - -/** @param resource $ftp */ -function ftp_get_option($ftp, int $option): int|bool {} +function ftp_login(FTPConnection $ftp, string $username, string $password): bool {} +function ftp_pwd(FTPConnection $ftp): string|false {} +function ftp_cdup(FTPConnection $ftp): bool {} +function ftp_chdir(FTPConnection $ftp, string $directory): bool {} +function ftp_exec(FTPConnection $ftp, string $command): bool {} +function ftp_raw(FTPConnection $ftp, string $command): array {} +function ftp_mkdir(FTPConnection $ftp, string $directory): string|false {} +function ftp_rmdir(FTPConnection $ftp, string $directory): bool {} +function ftp_chmod(FTPConnection $ftp, int $permissions, string $filename): int|false {} + +/** @param string $response */ +function ftp_alloc(FTPConnection $ftp, int $size, &$response = null): bool {} +function ftp_nlist(FTPConnection $ftp, string $directory): array|false {} +function ftp_rawlist(FTPConnection $ftp, string $directory, bool $recursive = false): array|false {} +function ftp_mlsd(FTPConnection $ftp, string $directory): array|false {} +function ftp_systype(FTPConnection $ftp): string|false {} + +/** @param resource $stream */ +function ftp_fget(FTPConnection $ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} + +/** @param resource $stream */ +function ftp_nb_fget(FTPConnection $ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_pasv(FTPConnection $ftp, bool $enable): bool {} +function ftp_get(FTPConnection $ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} +function ftp_nb_get(FTPConnection $ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_nb_continue(FTPConnection $ftp): int {} + +/** @param resource $stream */ +function ftp_fput(FTPConnection $ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): bool {} + +/** @param resource $stream */ +function ftp_nb_fput(FTPConnection $ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_put(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} +function ftp_append(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool {} +function ftp_nb_put(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): int|false {} +function ftp_size(FTPConnection $ftp, string $filename): int {} +function ftp_mdtm(FTPConnection $ftp, string $filename): int {} +function ftp_rename(FTPConnection $ftp, string $from, string $to): bool {} +function ftp_delete(FTPConnection $ftp, string $filename): bool {} +function ftp_site(FTPConnection $ftp, string $command): bool {} +function ftp_close(FTPConnection $ftp): bool {} + +/** @alias ftp_close */ +function ftp_quit(FTPConnection $ftp): bool {} + +/** @param int|bool $value */ +function ftp_set_option(FTPConnection $ftp, int $option, $value): bool {} +function ftp_get_option(FTPConnection $ftp, int $option): int|bool {} diff --git a/ext/ftp/ftp_arginfo.h b/ext/ftp/ftp_arginfo.h index e1a9d770bc34b..30251b87ee337 100644 --- a/ext/ftp/ftp_arginfo.h +++ b/ext/ftp/ftp_arginfo.h @@ -1,14 +1,14 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4957601533b387d70ebb15811821fc06507cdbc2 */ + * Stub hash: 151310a13eeeb2bbf4df1ab38a3a29506b26a570 */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_connect, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ftp_connect, 0, 1, FTPConnection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90") ZEND_END_ARG_INFO() #if defined(HAVE_FTP_SSL) -ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_ssl_connect, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ftp_ssl_connect, 0, 1, FTPConnection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90") @@ -16,60 +16,60 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_login, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_pwd, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_cdup, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_chdir, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_exec, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_raw, 0, 2, IS_ARRAY, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_mkdir, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ftp_rmdir arginfo_ftp_chdir ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_chmod, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_alloc, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_rawlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, recursive, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -79,7 +79,7 @@ ZEND_END_ARG_INFO() #define arginfo_ftp_systype arginfo_ftp_pwd ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fget, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -87,7 +87,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fget, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fget, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -95,12 +95,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fget, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_pasv, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_get, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -108,7 +108,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_get, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_get, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -116,11 +116,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_get, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_continue, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fput, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -128,7 +128,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fput, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fput, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -136,7 +136,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fput, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_put, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -144,14 +144,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_put, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_append, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_put, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -159,20 +159,20 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_put, 0, 3, MAY_BE_LONG|MA ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_size, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ftp_mdtm arginfo_ftp_size ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_rename, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_delete, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -183,13 +183,13 @@ ZEND_END_ARG_INFO() #define arginfo_ftp_quit arginfo_ftp_cdup ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_set_option, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_get_option, 0, 2, MAY_BE_LONG|MAY_BE_BOOL) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c index a6dca8c874bf7..30bffbdd8c87d 100644 --- a/ext/ftp/php_ftp.c +++ b/ext/ftp/php_ftp.c @@ -29,13 +29,15 @@ #include "ext/standard/info.h" #include "ext/standard/file.h" +#include "Zend/zend_exceptions.h" +#include "Zend/zend_interfaces.h" #include "php_ftp.h" #include "ftp.h" #include "ftp_arginfo.h" -static int le_ftpbuf; -#define le_ftpbuf_name "FTP Buffer" +static zend_class_entry *php_ftp_ce = NULL; +static zend_object_handlers ftp_object_handlers; zend_module_entry php_ftp_module_entry = { STANDARD_MODULE_HEADER_EX, @@ -56,15 +58,42 @@ zend_module_entry php_ftp_module_entry = { ZEND_GET_MODULE(php_ftp) #endif -static void ftp_destructor_ftpbuf(zend_resource *rsrc) -{ - ftpbuf_t *ftp = (ftpbuf_t *)rsrc->ptr; +typedef struct _php_ftp_object { + ftpbuf_t *ftp; + zend_object std; +} php_ftp_object; + +static inline zend_object *ftp_object_to_zend_object(php_ftp_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static inline php_ftp_object *ftp_object_from_zend_object(zend_object *zobj) { + return ((php_ftp_object*)(zobj + 1)) - 1; +} + +static zend_object* ftp_object_create(zend_class_entry* ce) { + php_ftp_object *obj = zend_object_alloc(sizeof(php_ftp_object), ce); + zend_object *zobj = ftp_object_to_zend_object(obj); + obj->ftp = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &ftp_object_handlers; - ftp_close(ftp); + return zobj; +} + +static void ftp_object_destroy(zend_object *zobj) { + php_ftp_object *obj = ftp_object_from_zend_object(zobj); + + if (obj->ftp) { + ftp_close(obj->ftp); + } } PHP_MINIT_FUNCTION(ftp) { + zend_class_entry ce; + #ifdef HAVE_FTP_SSL #if OPENSSL_VERSION_NUMBER < 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) SSL_library_init(); @@ -76,7 +105,18 @@ PHP_MINIT_FUNCTION(ftp) #endif #endif - le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number); + INIT_CLASS_ENTRY(ce, "FTPConnection", NULL); + php_ftp_ce = zend_register_internal_class(&ce); + php_ftp_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_ftp_ce->create_object = ftp_object_create; + php_ftp_ce->serialize = zend_class_serialize_deny; + php_ftp_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&ftp_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + ftp_object_handlers.offset = XtOffsetOf(php_ftp_object, std); + ftp_object_handlers.dtor_obj = ftp_object_destroy; + ftp_object_handlers.clone_obj = NULL; + REGISTER_LONG_CONSTANT("FTP_ASCII", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_TEXT", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_BINARY", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS); @@ -143,7 +183,8 @@ PHP_FUNCTION(ftp_connect) ftp->use_ssl = 0; #endif - RETURN_RES(zend_register_resource(ftp, le_ftpbuf)); + object_init_ex(return_value, php_ftp_ce); + ftp_object_from_zend_object(Z_OBJ_P(return_value))->ftp = ftp; } /* }}} */ @@ -177,11 +218,19 @@ PHP_FUNCTION(ftp_ssl_connect) /* enable ssl */ ftp->use_ssl = 1; - RETURN_RES(zend_register_resource(ftp, le_ftpbuf)); + object_init_ex(return_value, php_ftp_ce); + ftp_object_from_zend_object(Z_OBJ_P(return_value))->ftp = ftp; } /* }}} */ #endif +#define GET_FTPBUF(ftpbuf, zftp) \ + ftpbuf = ftp_object_from_zend_object(Z_OBJ_P(zftp))->ftp; \ + if (!ftpbuf) { \ + zend_throw_exception(zend_ce_value_error, "FTPConnection is already closed", 0); \ + RETURN_THROWS(); \ + } + /* {{{ Logs into the FTP server */ PHP_FUNCTION(ftp_login) { @@ -190,13 +239,10 @@ PHP_FUNCTION(ftp_login) char *user, *pass; size_t user_len, pass_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &z_ftp, php_ftp_ce, &user, &user_len, &pass, &pass_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* log in */ if (!ftp_login(ftp, user, user_len, pass, pass_len)) { @@ -215,13 +261,10 @@ PHP_FUNCTION(ftp_pwd) ftpbuf_t *ftp; const char *pwd; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!(pwd = ftp_pwd(ftp))) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -238,13 +281,10 @@ PHP_FUNCTION(ftp_cdup) zval *z_ftp; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_cdup(ftp)) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -263,13 +303,10 @@ PHP_FUNCTION(ftp_chdir) char *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* change directories */ if (!ftp_chdir(ftp, dir, dir_len)) { @@ -289,13 +326,10 @@ PHP_FUNCTION(ftp_exec) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* execute serverside command */ if (!ftp_exec(ftp, cmd, cmd_len)) { @@ -315,13 +349,10 @@ PHP_FUNCTION(ftp_raw) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* execute arbitrary ftp command */ ftp_raw(ftp, cmd, cmd_len, return_value); @@ -337,13 +368,10 @@ PHP_FUNCTION(ftp_mkdir) zend_string *tmp; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* create directory */ if (NULL == (tmp = ftp_mkdir(ftp, dir, dir_len))) { @@ -363,13 +391,10 @@ PHP_FUNCTION(ftp_rmdir) char *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* remove directorie */ if (!ftp_rmdir(ftp, dir, dir_len)) { @@ -390,13 +415,10 @@ PHP_FUNCTION(ftp_chmod) size_t filename_len; zend_long mode; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlp", &z_ftp, &mode, &filename, &filename_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olp", &z_ftp, php_ftp_ce, &mode, &filename, &filename_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_chmod(ftp, mode, filename, filename_len)) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -415,13 +437,10 @@ PHP_FUNCTION(ftp_alloc) zend_long size, ret; zend_string *response = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl|z", &z_ftp, &size, &zresponse) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol|z", &z_ftp, php_ftp_ce, &size, &zresponse) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); ret = ftp_alloc(ftp, size, zresponse ? &response : NULL); @@ -445,13 +464,10 @@ PHP_FUNCTION(ftp_nlist) char **nlist, **ptr, *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get list of files */ if (NULL == (nlist = ftp_nlist(ftp, dir, dir_len))) { @@ -475,13 +491,10 @@ PHP_FUNCTION(ftp_rawlist) size_t dir_len; zend_bool recursive = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b", &z_ftp, &dir, &dir_len, &recursive) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|b", &z_ftp, php_ftp_ce, &dir, &dir_len, &recursive) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get raw directory listing */ if (NULL == (llist = ftp_list(ftp, dir, dir_len, recursive))) { @@ -505,13 +518,10 @@ PHP_FUNCTION(ftp_mlsd) size_t dir_len; zval entry; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get raw directory listing */ if (NULL == (llist = ftp_mlsd(ftp, dir, dir_len))) { @@ -539,13 +549,10 @@ PHP_FUNCTION(ftp_systype) ftpbuf_t *ftp; const char *syst; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (NULL == (syst = ftp_syst(ftp))) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -567,13 +574,10 @@ PHP_FUNCTION(ftp_fget) size_t file_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ors|ll", &z_ftp, php_ftp_ce, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -612,13 +616,10 @@ PHP_FUNCTION(ftp_nb_fget) size_t file_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0, ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ors|ll", &z_ftp, php_ftp_ce, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -657,13 +658,10 @@ PHP_FUNCTION(ftp_pasv) ftpbuf_t *ftp; zend_bool pasv; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rb", &z_ftp, &pasv) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &z_ftp, php_ftp_ce, &pasv) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_pasv(ftp, pasv ? 1 : 0)) { RETURN_FALSE; @@ -684,13 +682,10 @@ PHP_FUNCTION(ftp_get) size_t local_len, remote_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); /* ignore autoresume if autoseek is switched off */ @@ -749,13 +744,10 @@ PHP_FUNCTION(ftp_nb_get) int ret; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss|ll", &z_ftp, php_ftp_ce, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); /* ignore autoresume if autoseek is switched off */ @@ -816,13 +808,10 @@ PHP_FUNCTION(ftp_nb_continue) ftpbuf_t *ftp; zend_long ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp->nb) { php_error_docref(NULL, E_WARNING, "No nbronous transfer to continue"); @@ -859,13 +848,10 @@ PHP_FUNCTION(ftp_fput) php_stream *stream; char *remote; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osr|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_zval(stream, z_file); XTYPE(xtype, mode); @@ -908,13 +894,10 @@ PHP_FUNCTION(ftp_nb_fput) php_stream *stream; char *remote; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osr|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -961,13 +944,10 @@ PHP_FUNCTION(ftp_put) zend_long mode=FTPTYPE_IMAGE, startpos=0; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1014,13 +994,10 @@ PHP_FUNCTION(ftp_append) zend_long mode=FTPTYPE_IMAGE; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|l", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1049,13 +1026,10 @@ PHP_FUNCTION(ftp_nb_put) zend_long mode=FTPTYPE_IMAGE, startpos=0, ret; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1107,13 +1081,10 @@ PHP_FUNCTION(ftp_size) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get file size */ RETURN_LONG(ftp_size(ftp, file, file_len)); @@ -1128,13 +1099,10 @@ PHP_FUNCTION(ftp_mdtm) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get file mod time */ RETURN_LONG(ftp_mdtm(ftp, file, file_len)); @@ -1149,13 +1117,10 @@ PHP_FUNCTION(ftp_rename) char *src, *dest; size_t src_len, dest_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &z_ftp, php_ftp_ce, &src, &src_len, &dest, &dest_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* rename the file */ if (!ftp_rename(ftp, src, src_len, dest, dest_len)) { @@ -1175,13 +1140,10 @@ PHP_FUNCTION(ftp_delete) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* delete the file */ if (!ftp_delete(ftp, file, file_len)) { @@ -1201,13 +1163,10 @@ PHP_FUNCTION(ftp_site) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* send the site command */ if (!ftp_site(ftp, cmd, cmd_len)) { @@ -1223,18 +1182,19 @@ PHP_FUNCTION(ftp_site) PHP_FUNCTION(ftp_close) { zval *z_ftp; - ftpbuf_t *ftp; + php_ftp_object *obj; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { - RETURN_THROWS(); + obj = ftp_object_from_zend_object(Z_OBJ_P(z_ftp)); + if (obj->ftp) { + ftp_quit(obj->ftp); + ftp_close(obj->ftp); + obj->ftp = NULL; } - ftp_quit(ftp); - RETURN_TRUE; } /* }}} */ @@ -1246,13 +1206,10 @@ PHP_FUNCTION(ftp_set_option) zend_long option; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlz", &z_ftp, &option, &z_value) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olz", &z_ftp, php_ftp_ce, &option, &z_value) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: @@ -1298,13 +1255,10 @@ PHP_FUNCTION(ftp_get_option) zend_long option; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &z_ftp, &option) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &z_ftp, php_ftp_ce, &option) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: diff --git a/ext/ftp/tests/007.phpt b/ext/ftp/tests/007.phpt index 0520b37293fcf..1ae879f901e61 100644 --- a/ext/ftp/tests/007.phpt +++ b/ext/ftp/tests/007.phpt @@ -180,36 +180,36 @@ try { fclose($ftp); ?> --EXPECT-- -ftp_login(): supplied resource is not a valid FTP Buffer resource -ftp_pwd(): supplied resource is not a valid FTP Buffer resource -ftp_cdup(): supplied resource is not a valid FTP Buffer resource -ftp_chdir(): supplied resource is not a valid FTP Buffer resource -ftp_exec(): supplied resource is not a valid FTP Buffer resource -ftp_raw(): supplied resource is not a valid FTP Buffer resource -ftp_mkdir(): supplied resource is not a valid FTP Buffer resource -ftp_rmdir(): supplied resource is not a valid FTP Buffer resource -ftp_chmod(): supplied resource is not a valid FTP Buffer resource -ftp_alloc(): supplied resource is not a valid FTP Buffer resource -ftp_nlist(): supplied resource is not a valid FTP Buffer resource -ftp_rawlist(): supplied resource is not a valid FTP Buffer resource -ftp_mlsd(): supplied resource is not a valid FTP Buffer resource -ftp_systype(): supplied resource is not a valid FTP Buffer resource -ftp_fget(): supplied resource is not a valid FTP Buffer resource -ftp_nb_fget(): supplied resource is not a valid FTP Buffer resource -ftp_pasv(): supplied resource is not a valid FTP Buffer resource -ftp_get(): supplied resource is not a valid FTP Buffer resource -ftp_nb_get(): supplied resource is not a valid FTP Buffer resource -ftp_nb_continue(): supplied resource is not a valid FTP Buffer resource -ftp_fput(): supplied resource is not a valid FTP Buffer resource -ftp_nb_fput(): supplied resource is not a valid FTP Buffer resource -ftp_put(): supplied resource is not a valid FTP Buffer resource -ftp_append(): supplied resource is not a valid FTP Buffer resource -ftp_nb_put(): supplied resource is not a valid FTP Buffer resource -ftp_size(): supplied resource is not a valid FTP Buffer resource -ftp_mdtm(): supplied resource is not a valid FTP Buffer resource -ftp_rename(): supplied resource is not a valid FTP Buffer resource -ftp_delete(): supplied resource is not a valid FTP Buffer resource -ftp_site(): supplied resource is not a valid FTP Buffer resource -ftp_close(): supplied resource is not a valid FTP Buffer resource -ftp_set_option(): supplied resource is not a valid FTP Buffer resource -ftp_get_option(): supplied resource is not a valid FTP Buffer resource +ftp_login(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_pwd(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_cdup(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_chdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_exec(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_raw(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mkdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rmdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_chmod(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_alloc(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nlist(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rawlist(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mlsd(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_systype(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_fget(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_fget(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_pasv(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_get(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_get(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_continue(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_fput(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_fput(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_put(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_append(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_put(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_size(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mdtm(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rename(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_delete(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_site(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_close(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_set_option(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_get_option(): Argument #1 ($ftp) must be of type FTPConnection, resource given diff --git a/ext/ftp/tests/CONFLICTS b/ext/ftp/tests/CONFLICTS deleted file mode 100644 index 254defddb53c5..0000000000000 --- a/ext/ftp/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/ext/ftp/tests/dead-resource.phpt b/ext/ftp/tests/dead-resource.phpt new file mode 100644 index 0000000000000..75a9931d547d4 --- /dev/null +++ b/ext/ftp/tests/dead-resource.phpt @@ -0,0 +1,24 @@ +--TEST-- +Attempt to use a closed FTPConnection +--SKIPIF-- +getMessage(), "\n"; +} +--EXPECT-- +bool(true) +bool(true) +Exception: FTPConnection is already closed diff --git a/ext/ftp/tests/ftp_set_option_errors.phpt b/ext/ftp/tests/ftp_set_option_errors.phpt index 3f5476f6c32f0..5e5ef328f3103 100644 --- a/ext/ftp/tests/ftp_set_option_errors.phpt +++ b/ext/ftp/tests/ftp_set_option_errors.phpt @@ -13,40 +13,22 @@ $ftp = ftp_connect('127.0.0.1', $port); ftp_login($ftp, 'user', 'pass'); $ftp or die("Couldn't connect to the server"); -try { - ftp_set_option($ftp, FTP_TIMEOUT_SEC, 0); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; +$options = [ + [ 'option' => FTP_TIMEOUT_SEC, 'value' => 0 ], + [ 'option' => FTP_TIMEOUT_SEC, 'value' => '0' ], + [ 'option' => FTP_USEPASVADDRESS, 'value' => ['1'] ], + [ 'option' => FTP_AUTOSEEK, 'value' => 'true' ], + [ 'option' => FOO_BAR, 'value' => 1 ], +]; +foreach ($options as $option) try { + var_dump(ftp_set_option($ftp, $option['option'], $option['value'])); +} catch (\Throwable $ex) { + echo "Exception: ", $ex->getMessage(), "\n"; } -try { - ftp_set_option($ftp, FTP_TIMEOUT_SEC, '0'); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FTP_USEPASVADDRESS, ['1']); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FTP_AUTOSEEK, 'true'); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FOO_BAR, 1); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; -} - -?> --EXPECT-- -ftp_set_option(): Argument #3 ($value) must be greater than 0 for the FTP_TIMEOUT_SEC option -ftp_set_option(): Argument #3 ($value) must be of type int for the FTP_TIMEOUT_SEC option, string given -ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_USEPASVADDRESS option, array given -ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_AUTOSEEK option, string given -ftp_set_option(): Argument #2 ($option) must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS +Exception: ftp_set_option(): Argument #3 ($value) must be greater than 0 for the FTP_TIMEOUT_SEC option +Exception: ftp_set_option(): Argument #3 ($value) must be of type int for the FTP_TIMEOUT_SEC option, string given +Exception: ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_USEPASVADDRESS option, array given +Exception: ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_AUTOSEEK option, string given +Exception: ftp_set_option(): Argument #2 ($option) must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index 38599391d6169..8bc836fc40e32 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -4,59 +4,21 @@ $socket = null; $errno = 0; $context = stream_context_create(array('ssl' => array('local_cert' => dirname(__FILE__).'/cert.pem'))); -for ($i=0; $i<10 && !$socket; ++$i) { - $port = rand(50000, 65535); - - $socket = @stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); -} -//set anther random port that is not the same as $port -do{ - $pasv_port = rand(50000, 65535); -}while($pasv_port == $port); - +$socket = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); if (!$socket) { echo "$errstr ($errno)\n"; die("could not start/bind the ftp server\n"); } -$pid = pcntl_fork(); +$socket_name = stream_socket_get_name($socket, false); +$port = (int) substr($socket_name, strrpos($socket_name, ':') + 1); -function pasv_listen($action){ - global $pasv_port, $tmp_file; - $tmp_file = 'nm2.php'; - $pid = pcntl_fork(); - if($pid === 0){ - $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); - $fs = stream_socket_accept($soc, 3); - switch ($action) { - case 'fget': - case 'get': - //listen for 3 seconds 3 seconds - fputs($fs, "I am passive.\r\n"); - break; - case 'put': - file_put_contents($tmp_file, stream_get_contents($fs)); - break; - case 'list': - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 .\r\n"); - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 ..\r\n"); - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 public_ftp\r\n"); - break; - case 'list_null': - fputs($fs, "\r\n"); - break; - } - fclose($fs); - exit; - } -} +$pid = pcntl_fork(); if ($pid) { - function dump_and_exit($buf) { var_dump($buf); - fclose($GLOBALS['s']); exit; } @@ -90,10 +52,14 @@ if ($pid) { if (!$s) die("Error accepting a new connection\n"); + register_shutdown_function(function() use($pid, $s) { + fclose($s); + pcntl_waitpid($pid, $status); + }); + fputs($s, "220----- PHP FTP server 0.3 -----\r\n220 Service ready\r\n"); $buf = fread($s, 2048); - function user_auth($buf) { global $user, $s, $ssl, $bug37799; @@ -143,7 +109,6 @@ if ($pid) { $user = $m[1]; if ($user !== 'user' && $user !== 'anonymous') { fputs($s, "530 Not logged in.\r\n"); - fclose($s); exit; } @@ -163,7 +128,6 @@ if ($pid) { fputs($s, "230 User logged in\r\n"); } else { fputs($s, "530 Not logged in.\r\n"); - fclose($s); exit; } } @@ -432,25 +396,20 @@ if ($pid) { $i=0; if (empty($bug73457)) { - do { - if (!empty($ssl)) { - $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); - } else { - $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port"); - } - /* Could bind port, Try another port */ - if (!$soc) { - $pasv_port = rand(50000, 65535); - } - $i++; - } while ($i<10 && !$soc); - + if (!empty($ssl)) { + $soc = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); + } else { + $soc = stream_socket_server("tcp://127.0.0.1:0"); + } if (!$soc) { echo "$errstr ($errno)\n"; die("could not bind passive port\n"); } + + $soc_name = stream_socket_get_name($soc, false); + $pasv_port = (int) substr($soc_name, strrpos($soc_name, ':') + 1); } else { - $pasv_port=1234; + $pasv_port = 1234; } $p2 = $pasv_port % ((int) 1 << 8); @@ -548,7 +507,6 @@ if ($pid) { dump_and_exit($buf); } } - fclose($s); exit; } diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 462b1259689b5..d811b66866482 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -57,8 +57,6 @@ #include "gd_compat.h" -static int le_gd_font; - #include #include #include /* 1 Tiny font */ @@ -222,7 +220,7 @@ static void php_gd_object_minit_helper() zend_class_entry ce; INIT_CLASS_ENTRY(ce, "GdImage", class_GdImage_methods); gd_image_ce = zend_register_internal_class(&ce); - gd_image_ce->ce_flags |= ZEND_ACC_FINAL; + gd_image_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; gd_image_ce->create_object = php_gd_image_object_create; gd_image_ce->serialize = zend_class_serialize_deny; gd_image_ce->unserialize = zend_class_unserialize_deny; @@ -235,6 +233,75 @@ static void php_gd_object_minit_helper() php_gd_image_object_handlers.offset = XtOffsetOf(php_gd_image_object, std); } +static zend_class_entry *gd_font_ce = NULL; +static zend_object_handlers php_gd_font_object_handlers; + +typedef struct _php_gd_font_object { + gdFontPtr font; + zend_object std; +} php_gd_font_object; + +static php_gd_font_object *php_gd_font_object_from_zend_object(zend_object *zobj) +{ + return ((php_gd_font_object*)(zobj + 1)) - 1; +} + +static zend_object *php_gd_font_object_to_zend_object(php_gd_font_object *obj) +{ + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_object *php_gd_font_object_create(zend_class_entry *ce) +{ + php_gd_font_object *obj = zend_object_alloc(sizeof(php_gd_font_object), ce); + zend_object *zobj = php_gd_font_object_to_zend_object(obj); + + obj->font = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_gd_font_object_handlers; + + return zobj; +} + +static void php_gd_font_object_free(zend_object *zobj) +{ + php_gd_font_object *obj = php_gd_font_object_from_zend_object(zobj); + + if (obj->font) { + if (obj->font->data) { + efree(obj->font->data); + } + efree(obj->font); + obj->font = NULL; + } + + zend_object_std_dtor(zobj); +} + +static zend_function *php_gd_font_object_get_constructor(zend_object *object) +{ + zend_throw_error(NULL, "You cannot initialize a GdFont object except through helper functions"); + return NULL; +} + +static void php_gd_font_minit_helper() +{ + zend_class_entry ce; + INIT_CLASS_ENTRY(ce, "GdFont", class_GdFont_methods); + gd_font_ce = zend_register_internal_class(&ce); + gd_font_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + gd_font_ce->create_object = php_gd_font_object_create; + gd_font_ce->serialize = zend_class_serialize_deny; + gd_font_ce->unserialize = zend_class_unserialize_deny; + + /* setting up the object handlers for the GdFont class */ + memcpy(&php_gd_font_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_gd_font_object_handlers.clone_obj = NULL; + php_gd_font_object_handlers.free_obj = php_gd_font_object_free; + php_gd_font_object_handlers.get_constructor = php_gd_font_object_get_constructor; + php_gd_font_object_handlers.offset = XtOffsetOf(php_gd_font_object, std); +} /********************************************************* * @@ -265,19 +332,6 @@ PHP_INI_BEGIN() PHP_INI_END() /* }}} */ -/* {{{ php_free_gd_font */ -static void php_free_gd_font(zend_resource *rsrc) -{ - gdFontPtr fp = (gdFontPtr) rsrc->ptr; - - if (fp->data) { - efree(fp->data); - } - - efree(fp); -} -/* }}} */ - /* {{{ php_gd_error_method */ void php_gd_error_method(int type, const char *format, va_list args) { @@ -302,8 +356,8 @@ void php_gd_error_method(int type, const char *format, va_list args) /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(gd) { - le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number); php_gd_object_minit_helper(); + php_gd_font_minit_helper(); #if defined(HAVE_GD_FREETYPE) && defined(HAVE_GD_BUNDLED) gdFontCacheMutexSetup(); @@ -614,7 +668,6 @@ PHP_FUNCTION(gd_info) /* {{{ Load a new font */ PHP_FUNCTION(imageloadfont) { - zval *ind; zend_string *file; int hdr_size = sizeof(gdFont) - sizeof(char *); int body_size, n = 0, b, i, body_size_check; @@ -625,7 +678,7 @@ PHP_FUNCTION(imageloadfont) RETURN_THROWS(); } - stream = php_stream_open_wrapper(ZSTR_VAL(file), "rb", IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL); + stream = php_stream_open_wrapper(ZSTR_VAL(file), "rb", IGNORE_PATH | REPORT_ERRORS, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -704,13 +757,8 @@ PHP_FUNCTION(imageloadfont) } php_stream_close(stream); - ind = zend_list_insert(font, le_gd_font); - - /* Adding 5 to the font index so we will never have font indices - * that overlap with the old fonts (with indices 1-5). The first - * list index given out is always 1. - */ - RETURN_LONG(Z_RES_HANDLE_P(ind) + 5); + object_init_ex(return_value, gd_font_ce); + php_gd_font_object_from_zend_object(Z_OBJ_P(return_value))->font = font; } /* }}} */ @@ -1140,7 +1188,7 @@ PHP_FUNCTION(imagecopyresampled) PHP_FUNCTION(imagegrabwindow) { HWND window; - zend_long client_area = 0; + zend_bool client_area = 0; RECT rc = {0}; int Width, Height; HDC hdc; @@ -1150,7 +1198,7 @@ PHP_FUNCTION(imagegrabwindow) zend_long lwindow_handle; gdImagePtr im = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &lwindow_handle, &client_area) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|b", &lwindow_handle, &client_area) == FAILURE) { RETURN_THROWS(); } @@ -1269,9 +1317,9 @@ PHP_FUNCTION(imagerotate) gdImagePtr im_dst, im_src; double degrees; zend_long color; - zend_long ignoretransparent = 0; + zend_bool ignoretransparent = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Odl|l", &SIM, gd_image_ce, °rees, &color, &ignoretransparent) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Odl|b", &SIM, gd_image_ce, °rees, &color, &ignoretransparent) == FAILURE) { RETURN_THROWS(); } @@ -1584,7 +1632,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, } - stream = php_stream_open_wrapper(file, "rb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(file, "rb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -1883,7 +1931,7 @@ PHP_FUNCTION(imagexbm) im = php_gd_libgdimageptr_from_zval_p(imgind); if (file != NULL) { - stream = php_stream_open_wrapper(file, "wb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(file, "wb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -1956,7 +2004,7 @@ PHP_FUNCTION(imagewbmp) gdIOCtx *ctx = NULL; zval *to_zval = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|z!l!", &imgind, gd_image_ce, &to_zval, &foreground_color) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|z!l!", &imgind, gd_image_ce, &to_zval, &foreground_color, &foreground_color_is_null) == FAILURE) { RETURN_THROWS(); } @@ -2579,11 +2627,11 @@ PHP_FUNCTION(imagecolortransparent) PHP_FUNCTION(imageinterlace) { zval *IM; - zend_long INT = 0; + zend_bool INT = 0; zend_bool INT_IS_NULL = 1; gdImagePtr im; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l!", &IM, gd_image_ce, &INT, &INT_IS_NULL) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|b!", &IM, gd_image_ce, &INT, &INT_IS_NULL) == FAILURE) { RETURN_THROWS(); } @@ -2695,42 +2743,21 @@ PHP_FUNCTION(imagefilledpolygon) /* }}} */ /* {{{ php_find_gd_font */ -static gdFontPtr php_find_gd_font(int size) +static gdFontPtr php_find_gd_font(zend_object *font_obj, zend_long font_int) { - gdFontPtr font; + if (font_obj) { + return php_gd_font_object_from_zend_object(font_obj)->font; + } - switch (size) { - case 1: - font = gdFontTiny; - break; - case 2: - font = gdFontSmall; - break; - case 3: - font = gdFontMediumBold; - break; - case 4: - font = gdFontLarge; - break; - case 5: - font = gdFontGiant; - break; - default: { - zval *zv = zend_hash_index_find(&EG(regular_list), size - 5); - if (!zv || (Z_RES_P(zv))->type != le_gd_font) { - if (size < 1) { - font = gdFontTiny; - } else { - font = gdFontGiant; - } - } else { - font = (gdFontPtr)Z_RES_P(zv)->ptr; - } - } - break; - } - - return font; + switch (font_int) { + case 1: return gdFontTiny; + case 2: return gdFontSmall; + case 3: return gdFontMediumBold; + case 4: return gdFontLarge; + case 5: return gdFontGiant; + } + + return font_int < 1 ? gdFontTiny : gdFontGiant; } /* }}} */ @@ -2740,14 +2767,15 @@ static gdFontPtr php_find_gd_font(int size) */ static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg) { - zend_long SIZE; + zend_object *font_obj; + zend_long font_int; gdFontPtr font; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &SIZE) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(font_obj, gd_font_ce, font_int) + ZEND_PARSE_PARAMETERS_END(); - font = php_find_gd_font(SIZE); + font = php_find_gd_font(font_obj, font_int); RETURN_LONG(arg ? font->h : font->w); } /* }}} */ @@ -2801,17 +2829,24 @@ static void php_gdimagecharup(gdImagePtr im, gdFontPtr f, int x, int y, int c, i static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) { zval *IM; - zend_long SIZE, X, Y, COL; + zend_long X, Y, COL; char *C; size_t C_len; gdImagePtr im; - int ch = 0, col, x, y, size, i, l = 0; + int ch = 0, col, x, y, i, l = 0; unsigned char *str = NULL; + zend_object *font_obj; + zend_long font_int; gdFontPtr font; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olllsl", &IM, gd_image_ce, &SIZE, &X, &Y, &C, &C_len, &COL) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(6, 6) + Z_PARAM_OBJECT_OF_CLASS(IM, gd_image_ce) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(font_obj, gd_font_ce, font_int) + Z_PARAM_LONG(X) + Z_PARAM_LONG(Y) + Z_PARAM_STRING(C, C_len) + Z_PARAM_LONG(COL) + ZEND_PARSE_PARAMETERS_END(); im = php_gd_libgdimageptr_from_zval_p(IM); @@ -2826,9 +2861,8 @@ static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) y = Y; x = X; - size = SIZE; - font = php_find_gd_font(size); + font = php_find_gd_font(font_obj, font_int); switch (mode) { case 0: @@ -4092,7 +4126,7 @@ static gdIOCtx *create_stream_context_from_zval(zval *to_zval) { return NULL; } - stream = php_stream_open_wrapper(Z_STRVAL_P(to_zval), "wb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(Z_STRVAL_P(to_zval), "wb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { return NULL; } diff --git a/ext/gd/gd.stub.php b/ext/gd/gd.stub.php index 26c8db9b12504..0ef410fc1e956 100644 --- a/ext/gd/gd.stub.php +++ b/ext/gd/gd.stub.php @@ -2,67 +2,67 @@ /** @generate-function-entries */ -final class GdImage -{ -} +final class GdImage {} +final class GdFont {} function gd_info(): array {} -function imageloadfont(string $filename): int|false {} +function imageloadfont(string $filename): GdFont|false {} -function imagesetstyle(GdImage $im, array $styles): bool {} +function imagesetstyle(GdImage $image, array $style): bool {} -function imagecreatetruecolor(int $x_size, int $y_size): GdImage|false {} +function imagecreatetruecolor(int $width, int $height): GdImage|false {} -function imageistruecolor(GdImage $im): bool {} +function imageistruecolor(GdImage $image): bool {} -function imagetruecolortopalette(GdImage $im, bool $ditherFlag, int $colorWanted): bool {} +function imagetruecolortopalette(GdImage $image, bool $dither, int $num_colors): bool {} -function imagepalettetotruecolor(GdImage $im): bool {} +function imagepalettetotruecolor(GdImage $image): bool {} -function imagecolormatch(GdImage $im1, GdImage $im2): bool {} +function imagecolormatch(GdImage $image1, GdImage $image2): bool {} -function imagesetthickness(GdImage $im, int $thickness): bool {} +function imagesetthickness(GdImage $image, int $thickness): bool {} -function imagefilledellipse(GdImage $im, int $cx, int $cy, int $w, int $h, int $color): bool {} +function imagefilledellipse(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $color): bool {} -function imagefilledarc(GdImage $im, int $cx, int $cy, int $w, int $h, int $s, int $e, int $col, int $style): bool {} +function imagefilledarc(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $start_angle, int $end_angle, int $color, int $style): bool {} -function imagealphablending(GdImage $im, bool $blend): bool {} +function imagealphablending(GdImage $image, bool $enable): bool {} -function imagesavealpha(GdImage $im, bool $save): bool {} +function imagesavealpha(GdImage $image, bool $enable): bool {} -function imagelayereffect(GdImage $im, int $effect): bool {} +function imagelayereffect(GdImage $image, int $effect): bool {} -function imagecolorallocatealpha(GdImage $im, int $red, int $green, int $blue, int $alpha): int|false {} +function imagecolorallocatealpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|false {} -function imagecolorresolvealpha(GdImage $im, int $red, int $green, int $blue, int $alpha): int|false {} +function imagecolorresolvealpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|false {} -function imagecolorclosestalpha(GdImage $im, int $red, int $green, int $blue, int $alpha): int|false {} +function imagecolorclosestalpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|false {} -function imagecolorexactalpha(GdImage $im, int $red, int $green, int $blue, int $alpha): int|false {} +function imagecolorexactalpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|false {} -function imagecopyresampled(GdImage $dst_im, GdImage $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h): bool {} +function imagecopyresampled(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_width, int $dst_height, int $src_width, int $src_height): bool {} #ifdef PHP_WIN32 -function imagegrabwindow(int $handle, int $client_area = 0): GdImage|false {} +function imagegrabwindow(int $handle, bool $client_area = false): GdImage|false {} function imagegrabscreen(): GdImage|false {} #endif -function imagerotate(GdImage $im, float $angle, int $bgdcolor, int $ignoretransparent = 0): GdImage|false {} +// TODO: $ignore_transparent is ignored??? +function imagerotate(GdImage $image, float $angle, int $background_color, bool $ignore_transparent = false): GdImage|false {} -function imagesettile(GdImage $im, GdImage $tile): bool {} +function imagesettile(GdImage $image, GdImage $tile): bool {} -function imagesetbrush(GdImage $im, GdImage $brush): bool {} +function imagesetbrush(GdImage $image, GdImage $brush): bool {} -function imagecreate(int $x_size, int $y_size): GdImage|false {} +function imagecreate(int $width, int $height): GdImage|false {} function imagetypes(): int {} -function imagecreatefromstring(string $image): GdImage|false {} +function imagecreatefromstring(string $data): GdImage|false {} function imagecreatefromgif(string $filename): GdImage|false {} @@ -90,7 +90,7 @@ function imagecreatefromgd(string $filename): GdImage|false {} function imagecreatefromgd2(string $filename): GdImage|false {} -function imagecreatefromgd2part(string $filename, int $srcX, int $srcY, int $width, int $height): GdImage|false {} +function imagecreatefromgd2part(string $filename, int $x, int $y, int $width, int $height): GdImage|false {} #ifdef HAVE_GD_BMP function imagecreatefrombmp(string $filename): GdImage|false {} @@ -100,156 +100,157 @@ function imagecreatefrombmp(string $filename): GdImage|false {} function imagecreatefromtga(string $filename): GdImage|false {} #endif -function imagexbm(GdImage $im, ?string $filename, ?int $foreground = null): bool {} +function imagexbm(GdImage $image, ?string $filename, ?int $foreground_color = null): bool {} -/** @param resource|string|null $to */ -function imagegif(GdImage $im, $to = null): bool {} +/** @param resource|string|null $file */ +function imagegif(GdImage $image, $file = null): bool {} #ifdef HAVE_GD_PNG -/** @param resource|string|null $to */ -function imagepng(GdImage $im, $to = null, int $quality = -1, int $filters = -1): bool {} +/** @param resource|string|null $file */ +function imagepng(GdImage $image, $file = null, int $quality = -1, int $filters = -1): bool {} #endif #ifdef HAVE_GD_WEBP -/** @param resource|string|null $to */ -function imagewebp(GdImage $im, $to = null, int $quality = -1): bool {} +/** @param resource|string|null $file */ +function imagewebp(GdImage $image, $file = null, int $quality = -1): bool {} #endif #ifdef HAVE_GD_JPG -/** @param resource|string|null $to */ -function imagejpeg(GdImage $im, $to = null, int $quality = -1): bool {} +/** @param resource|string|null $file */ +function imagejpeg(GdImage $image, $file = null, int $quality = -1): bool {} #endif -/** @param resource|string|null $to */ -function imagewbmp(GdImage $im, $to = null, ?int $foreground = null): bool {} +/** @param resource|string|null $file */ +function imagewbmp(GdImage $image, $file = null, ?int $foreground_color = null): bool {} -function imagegd(GdImage $im, string $to = UNKNOWN): bool {} +function imagegd(GdImage $image, string $file = UNKNOWN): bool {} -function imagegd2(GdImage $im, string $to = UNKNOWN, int $chunk_size = UNKNOWN, int $type = UNKNOWN): bool {} +function imagegd2(GdImage $image, string $file = UNKNOWN, int $chunk_size = UNKNOWN, int $mode = UNKNOWN): bool {} #ifdef HAVE_GD_BMP -/** @param resource|string|null $to */ -function imagebmp(GdImage $im, $to = null, bool $compressed = true): bool {} +/** @param resource|string|null $file */ +function imagebmp(GdImage $image, $file = null, bool $compressed = true): bool {} #endif -function imagedestroy(GdImage $im): bool {} +function imagedestroy(GdImage $image): bool {} -function imagecolorallocate(GdImage $im, int $red, int $green, int $blue): int|false {} +function imagecolorallocate(GdImage $image, int $red, int $green, int $blue): int|false {} function imagepalettecopy(GdImage $dst, GdImage $src): void {} -function imagecolorat(GdImage $im, int $x, int $y): int|false {} +function imagecolorat(GdImage $image, int $x, int $y): int|false {} -function imagecolorclosest(GdImage $im, int $red, int $green, int $blue): int|false {} +function imagecolorclosest(GdImage $image, int $red, int $green, int $blue): int|false {} -function imagecolorclosesthwb(GdImage $im, int $red, int $green, int $blue): int|false {} +function imagecolorclosesthwb(GdImage $image, int $red, int $green, int $blue): int|false {} -function imagecolordeallocate(GdImage $im, int $index): bool {} +function imagecolordeallocate(GdImage $image, int $color): bool {} -function imagecolorresolve(GdImage $im, int $red, int $green, int $blue): int|false {} +function imagecolorresolve(GdImage $image, int $red, int $green, int $blue): int|false {} -function imagecolorexact(GdImage $im, int $red, int $green, int $blue): int|false {} +function imagecolorexact(GdImage $image, int $red, int $green, int $blue): int|false {} -function imagecolorset(GdImage $im, int $color, int $red, int $green, int $blue, int $alpha = 0): ?bool {} +function imagecolorset(GdImage $image, int $color, int $red, int $green, int $blue, int $alpha = 0): ?bool {} -function imagecolorsforindex(GdImage $im, int $index): array|false {} +function imagecolorsforindex(GdImage $image, int $color): array|false {} -function imagegammacorrect(GdImage $im, float $inputgamma, float $outputgamma): bool {} +function imagegammacorrect(GdImage $image, float $input_gamma, float $output_gamma): bool {} -function imagesetpixel(GdImage $im, int $x, int $y, int $col): bool {} +function imagesetpixel(GdImage $image, int $x, int $y, int $color): bool {} -function imageline(GdImage $im, int $x1, int $y1, int $x2, int $y2, int $col): bool {} +function imageline(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): bool {} -function imagedashedline(GdImage $im, int $x1, int $y1, int $x2, int $y2, int $col): bool {} +function imagedashedline(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): bool {} -function imagerectangle(GdImage $im, int $x1, int $y1, int $x2, int $y2, int $col): bool {} +function imagerectangle(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): bool {} -function imagefilledrectangle(GdImage $im, int $x1, int $y1, int $x2, int $y2, int $col): bool {} +function imagefilledrectangle(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): bool {} -function imagearc(GdImage $im, int $cx, int $cy, int $w, int $h, int $s, int $e, int $col): bool {} +function imagearc(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $start_angle, int $end_angle, int $color): bool {} -function imageellipse(GdImage $im, int $cx, int $cy, int $w, int $h, int $color): bool {} +function imageellipse(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $color): bool {} -function imagefilltoborder(GdImage $im, int $x, int $y, int $border, int $col): bool {} +function imagefilltoborder(GdImage $image, int $x, int $y, int $border_color, int $color): bool {} -function imagefill(GdImage $im, int $x, int $y, int $col): bool {} +function imagefill(GdImage $image, int $x, int $y, int $color): bool {} -function imagecolorstotal(GdImage $im): int {} +function imagecolorstotal(GdImage $image): int {} -function imagecolortransparent(GdImage $im, ?int $col = null): ?int {} +function imagecolortransparent(GdImage $image, ?int $color = null): ?int {} -function imageinterlace(GdImage $im, ?int $interlace = null): ?int {} +function imageinterlace(GdImage $image, ?bool $enable = null): ?int {} -function imagepolygon(GdImage $im, array $points, int $num_points_or_col, ?int $col = null): bool {} +function imagepolygon(GdImage $image, array $points, int $num_points_or_color, ?int $color = null): bool {} -function imageopenpolygon(GdImage $im, array $points, int $num_points_or_col, ?int $col = null): bool {} +function imageopenpolygon(GdImage $image, array $points, int $num_points_or_color, ?int $color = null): bool {} -function imagefilledpolygon(GdImage $im, array $points, int $num_points_or_col, ?int $col = null): bool {} +function imagefilledpolygon(GdImage $image, array $points, int $num_points_or_color, ?int $color = null): bool {} -function imagefontwidth(int $font): int {} +function imagefontwidth(GdFont|int $font): int {} -function imagefontheight(int $font): int {} +function imagefontheight(GdFont|int $font): int {} -function imagechar(GdImage $im, int $font, int $x, int $y, string $c, int $col): bool {} +function imagechar(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): bool {} -function imagecharup(GdImage $im, int $font, int $x, int $y, string $c, int $col): bool {} +function imagecharup(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): bool {} -function imagestring(GdImage $im, int $font, int $x, int $y, string $str, int $col): bool {} +function imagestring(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): bool {} -function imagestringup(GdImage $im, int $font, int $x, int $y, string $str, int $col): bool {} +function imagestringup(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): bool {} -function imagecopy(GdImage $dst_im, GdImage $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h): bool {} +function imagecopy(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height): bool {} -function imagecopymerge(GdImage $dst_im, GdImage $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct): bool {} +function imagecopymerge(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height, int $pct): bool {} -function imagecopymergegray(GdImage $dst_im, GdImage $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct): bool {} +function imagecopymergegray(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height, int $pct): bool {} -function imagecopyresized(GdImage $dst_im, GdImage $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h): bool {} +function imagecopyresized(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_width, int $dst_height, int $src_width, int $src_height): bool {} -function imagesx(GdImage $im): int {} +function imagesx(GdImage $image): int {} -function imagesy(GdImage $im): int {} +function imagesy(GdImage $image): int {} -function imagesetclip(GdImage $im, int $x1, int $x2, int $y1, int $y2): bool {} +function imagesetclip(GdImage $image, int $x1, int $x2, int $y1, int $y2): bool {} -function imagegetclip(GdImage $im): array {} +function imagegetclip(GdImage $image): array {} #ifdef HAVE_GD_FREETYPE -function imageftbbox(float $size, float $angle, string $font_file, string $text, array $extrainfo = []): array|false {} +function imageftbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|false {} -function imagefttext(GdImage $im, float $size, float $angle, int $x, int $y, int $col, string $font_file, string $text, array $extrainfo = []): array|false {} +function imagefttext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|false {} /** @alias imageftbbox */ -function imagettfbbox(float $size, float $angle, string $font_file, string $text, array $extrainfo = []): array|false {} +function imagettfbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|false {} /** @alias imagefttext */ -function imagettftext(GdImage $im, float $size, float $angle, int $x, int $y, int $col, string $font_file, string $text, array $extrainfo = []): array|false {} +function imagettftext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|false {} #endif -/** @param array|int|float|bool $filter_args */ -function imagefilter(GdImage $im, int $filtertype, ...$filter_args): bool {} +/** @param array|int|float|bool $args */ +function imagefilter(GdImage $image, int $filter, ...$args): bool {} -function imageconvolution(GdImage $im, array $matrix3x3, float $div, float $offset): bool {} +function imageconvolution(GdImage $image, array $matrix, float $divisor, float $offset): bool {} -function imageflip(GdImage $im, int $mode): bool {} +function imageflip(GdImage $image, int $mode): bool {} -function imageantialias(GdImage $im, bool $on): bool {} +function imageantialias(GdImage $image, bool $enable): bool {} -function imagecrop(GdImage $im, array $rect): GdImage|false {} +function imagecrop(GdImage $image, array $rectangle): GdImage|false {} -function imagecropauto(GdImage $im, int $mode = IMG_CROP_DEFAULT, float $threshold = 0.5, int $color = -1): GdImage|false {} +function imagecropauto(GdImage $image, int $mode = IMG_CROP_DEFAULT, float $threshold = 0.5, int $color = -1): GdImage|false {} -function imagescale(GdImage $im, int $new_width, int $new_height = -1, int $mode = IMG_BILINEAR_FIXED): GdImage|false {} +function imagescale(GdImage $image, int $width, int $height = -1, int $mode = IMG_BILINEAR_FIXED): GdImage|false {} -function imageaffine(GdImage $im, array $affine, ?array $clip = null): GdImage|false {} +function imageaffine(GdImage $image, array $affine, ?array $clip = null): GdImage|false {} /** @param array|float $options */ function imageaffinematrixget(int $type, $options): array|false {} -function imageaffinematrixconcat(array $m1, array $m2): array|false {} +function imageaffinematrixconcat(array $matrix1, array $matrix2): array|false {} -function imagegetinterpolation(GdImage $im): int {} +function imagegetinterpolation(GdImage $image): int {} -function imagesetinterpolation(GdImage $im, int $method = IMG_BILINEAR_FIXED): bool {} +function imagesetinterpolation(GdImage $image, int $method = IMG_BILINEAR_FIXED): bool {} + +function imageresolution(GdImage $image, ?int $resolution_x = null, ?int $resolution_y = null): array|bool {} -function imageresolution(GdImage $im, ?int $res_x = null, ?int $res_y = null): array|bool {} diff --git a/ext/gd/gd_arginfo.h b/ext/gd/gd_arginfo.h index bd6255b0836f2..ea61b0837410a 100644 --- a/ext/gd/gd_arginfo.h +++ b/ext/gd/gd_arginfo.h @@ -1,83 +1,80 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 20849891a4907e348f1a509388ab08b0b7f6633d */ + * Stub hash: 23b7c8395c628239fb10d746ca6bba72871ee9f3 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gd_info, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageloadfont, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imageloadfont, 0, 1, GdFont, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetstyle, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, styles, IS_ARRAY, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, style, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecreatetruecolor, 0, 2, GdImage, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, x_size, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, y_size, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageistruecolor, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagetruecolortopalette, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, ditherFlag, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, colorWanted, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, dither, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, num_colors, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagepalettetotruecolor arginfo_imageistruecolor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolormatch, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im1, GdImage, 0) - ZEND_ARG_OBJ_INFO(0, im2, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image1, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image2, GdImage, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetthickness, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, thickness, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefilledellipse, 0, 6, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, cx, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, cy, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, h, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, center_x, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, center_y, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefilledarc, 0, 9, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, cx, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, cy, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, h, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, s, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, e, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, center_x, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, center_y, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, start_angle, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, end_angle, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, style, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagealphablending, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, blend, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesavealpha, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, save, _IS_BOOL, 0) -ZEND_END_ARG_INFO() +#define arginfo_imagesavealpha arginfo_imagealphablending ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagelayereffect, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, effect, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imagecolorallocatealpha, 0, 5, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, red, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, green, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, blue, IS_LONG, 0) @@ -91,22 +88,22 @@ ZEND_END_ARG_INFO() #define arginfo_imagecolorexactalpha arginfo_imagecolorallocatealpha ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecopyresampled, 0, 10, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, dst_im, GdImage, 0) - ZEND_ARG_OBJ_INFO(0, src_im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, dst_image, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, src_image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, dst_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, dst_y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, dst_w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, dst_h, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_h, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, dst_width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, dst_height, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_height, IS_LONG, 0) ZEND_END_ARG_INFO() #if defined(PHP_WIN32) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagegrabwindow, 0, 1, GdImage, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, handle, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, client_area, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, client_area, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #endif @@ -116,19 +113,19 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagerotate, 0, 3, GdImage, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) - ZEND_ARG_TYPE_INFO(0, bgdcolor, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ignoretransparent, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, background_color, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ignore_transparent, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesettile, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_OBJ_INFO(0, tile, GdImage, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetbrush, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_OBJ_INFO(0, brush, GdImage, 0) ZEND_END_ARG_INFO() @@ -138,7 +135,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagetypes, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecreatefromstring, 0, 1, GdImage, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, image, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecreatefromgif, 0, 1, GdImage, MAY_BE_FALSE) @@ -179,8 +176,8 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecreatefromgd2part, 0, 5, GdImage, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, srcX, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, srcY, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -198,20 +195,20 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagexbm, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 1) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, foreground, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, foreground_color, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegif, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") ZEND_END_ARG_INFO() #if defined(HAVE_GD_PNG) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagepng, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, quality, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filters, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() @@ -219,42 +216,42 @@ ZEND_END_ARG_INFO() #if defined(HAVE_GD_WEBP) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagewebp, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, quality, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #endif #if defined(HAVE_GD_JPG) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagejpeg, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, quality, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagewbmp, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, foreground, IS_LONG, 1, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, foreground_color, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegd, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegd2, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, chunk_size, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() #if defined(HAVE_GD_BMP) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagebmp, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, to, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, file, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compressed, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() #endif @@ -262,7 +259,7 @@ ZEND_END_ARG_INFO() #define arginfo_imagedestroy arginfo_imageistruecolor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imagecolorallocate, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, red, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, green, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, blue, IS_LONG, 0) @@ -274,7 +271,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagepalettecopy, 0, 2, IS_VOID, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imagecolorat, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -284,8 +281,8 @@ ZEND_END_ARG_INFO() #define arginfo_imagecolorclosesthwb arginfo_imagecolorallocate ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolordeallocate, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagecolorresolve arginfo_imagecolorallocate @@ -293,7 +290,7 @@ ZEND_END_ARG_INFO() #define arginfo_imagecolorexact arginfo_imagecolorallocate ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolorset, 0, 5, _IS_BOOL, 1) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, red, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, green, IS_LONG, 0) @@ -302,30 +299,30 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolorset, 0, 5, _IS_BOOL, 1 ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imagecolorsforindex, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegammacorrect, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, inputgamma, IS_DOUBLE, 0) - ZEND_ARG_TYPE_INFO(0, outputgamma, IS_DOUBLE, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, input_gamma, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, output_gamma, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetpixel, 0, 4, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageline, 0, 6, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x2, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y2, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagedashedline arginfo_imageline @@ -335,47 +332,47 @@ ZEND_END_ARG_INFO() #define arginfo_imagefilledrectangle arginfo_imageline ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagearc, 0, 8, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, cx, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, cy, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, h, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, s, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, e, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, center_x, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, center_y, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, start_angle, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, end_angle, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imageellipse arginfo_imagefilledellipse ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefilltoborder, 0, 5, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, border, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, border_color, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagefill arginfo_imagesetpixel ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolorstotal, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolortransparent, 0, 1, IS_LONG, 1) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, col, IS_LONG, 1, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, color, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageinterlace, 0, 1, IS_LONG, 1) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, interlace, IS_LONG, 1, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagepolygon, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, points, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, num_points_or_col, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, col, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO(0, num_points_or_color, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, color, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_imageopenpolygon arginfo_imagepolygon @@ -383,53 +380,53 @@ ZEND_END_ARG_INFO() #define arginfo_imagefilledpolygon arginfo_imagepolygon ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefontwidth, 0, 1, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_imagefontheight arginfo_imagefontwidth ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagechar, 0, 6, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, c, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, char, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagecharup arginfo_imagechar ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagestring, 0, 6, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_imagestringup arginfo_imagestring ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecopy, 0, 8, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, dst_im, GdImage, 0) - ZEND_ARG_OBJ_INFO(0, src_im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, dst_image, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, src_image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, dst_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, dst_y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_h, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_height, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecopymerge, 0, 9, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, dst_im, GdImage, 0) - ZEND_ARG_OBJ_INFO(0, src_im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, dst_image, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, src_image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, dst_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, dst_y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, src_y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_w, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, src_h, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, src_height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, pct, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -442,7 +439,7 @@ ZEND_END_ARG_INFO() #define arginfo_imagesy arginfo_imagecolorstotal ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetclip, 0, 5, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x2, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_LONG, 0) @@ -450,30 +447,30 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetclip, 0, 5, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegetclip, 0, 1, IS_ARRAY, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_END_ARG_INFO() #if defined(HAVE_GD_FREETYPE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageftbbox, 0, 4, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, size, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) - ZEND_ARG_TYPE_INFO(0, font_file, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extrainfo, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO(0, font_filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() #endif #if defined(HAVE_GD_FREETYPE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imagefttext, 0, 8, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, size, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, col, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, font_file, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, font_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extrainfo, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() #endif @@ -486,49 +483,46 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefilter, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, filtertype, IS_LONG, 0) - ZEND_ARG_VARIADIC_INFO(0, filter_args) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, filter, IS_LONG, 0) + ZEND_ARG_VARIADIC_INFO(0, args) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageconvolution, 0, 4, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, matrix3x3, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, div, IS_DOUBLE, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, matrix, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, divisor, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageflip, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imageantialias, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, on, _IS_BOOL, 0) -ZEND_END_ARG_INFO() +#define arginfo_imageantialias arginfo_imagealphablending ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecrop, 0, 2, GdImage, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, rect, IS_ARRAY, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, rectangle, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagecropauto, 0, 1, GdImage, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "IMG_CROP_DEFAULT") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, threshold, IS_DOUBLE, 0, "0.5") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, color, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imagescale, 0, 2, GdImage, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, new_width, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, new_height, IS_LONG, 0, "-1") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, height, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "IMG_BILINEAR_FIXED") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imageaffine, 0, 2, GdImage, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO(0, affine, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, clip, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() @@ -539,21 +533,21 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageaffinematrixget, 0, 2, MAY_ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageaffinematrixconcat, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, m1, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, m2, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, matrix1, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, matrix2, IS_ARRAY, 0) ZEND_END_ARG_INFO() #define arginfo_imagegetinterpolation arginfo_imagecolorstotal ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagesetinterpolation, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, method, IS_LONG, 0, "IMG_BILINEAR_FIXED") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageresolution, 0, 1, MAY_BE_ARRAY|MAY_BE_BOOL) - ZEND_ARG_OBJ_INFO(0, im, GdImage, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, res_x, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, res_y, IS_LONG, 1, "null") + ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resolution_x, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resolution_y, IS_LONG, 1, "null") ZEND_END_ARG_INFO() @@ -837,3 +831,8 @@ static const zend_function_entry ext_functions[] = { static const zend_function_entry class_GdImage_methods[] = { ZEND_FE_END }; + + +static const zend_function_entry class_GdFont_methods[] = { + ZEND_FE_END +}; diff --git a/ext/gd/tests/bug55005.phpt b/ext/gd/tests/bug55005.phpt index da218e4d97eb8..4514b80fed3b5 100644 --- a/ext/gd/tests/bug55005.phpt +++ b/ext/gd/tests/bug55005.phpt @@ -17,5 +17,5 @@ trycatch_dump( ); ?> --EXPECT-- -!! [ValueError] imagefilledpolygon(): Argument #3 ($num_points_or_col) must be greater than or equal to 3 -!! [ValueError] imagepolygon(): Argument #3 ($num_points_or_col) must be greater than or equal to 3 +!! [ValueError] imagefilledpolygon(): Argument #3 ($num_points_or_color) must be greater than or equal to 3 +!! [ValueError] imagepolygon(): Argument #3 ($num_points_or_color) must be greater than or equal to 3 diff --git a/ext/gd/tests/bug72697.phpt b/ext/gd/tests/bug72697.phpt index 369e5c6c83881..6861437df2776 100644 --- a/ext/gd/tests/bug72697.phpt +++ b/ext/gd/tests/bug72697.phpt @@ -19,5 +19,5 @@ trycatch_dump( ?> DONE --EXPECT-- -!! [ValueError] imagetruecolortopalette(): Argument #3 ($colorWanted) must be greater than 0 and less than 2147483647 +!! [ValueError] imagetruecolortopalette(): Argument #3 ($num_colors) must be greater than 0 and less than 2147483647 DONE diff --git a/ext/gd/tests/bug72709.phpt b/ext/gd/tests/bug72709.phpt index 02df1bb7c7668..8915e4f57b693 100644 --- a/ext/gd/tests/bug72709.phpt +++ b/ext/gd/tests/bug72709.phpt @@ -20,5 +20,5 @@ imagedestroy($im); ?> ====DONE==== --EXPECT-- -imagesetstyle(): Argument #2 ($styles) cannot be empty +imagesetstyle(): Argument #2 ($style) cannot be empty ====DONE==== diff --git a/ext/gd/tests/bug72730.phpt b/ext/gd/tests/bug72730.phpt index d021f70a4803b..bbc01eb68baa6 100644 --- a/ext/gd/tests/bug72730.phpt +++ b/ext/gd/tests/bug72730.phpt @@ -17,4 +17,4 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagegammacorrect(): Argument #2 ($inputgamma) must be greater than 0 +!! [ValueError] imagegammacorrect(): Argument #2 ($input_gamma) must be greater than 0 diff --git a/ext/gd/tests/colorclosest.phpt b/ext/gd/tests/colorclosest.phpt index 8541151442a91..4c750d5150212 100644 --- a/ext/gd/tests/colorclosest.phpt +++ b/ext/gd/tests/colorclosest.phpt @@ -84,7 +84,7 @@ print_r(imagecolorsforindex($im, $c)); ?> --EXPECT-- FF00FF -imagecolorsforindex(): Argument #2 ($index) is out of range +imagecolorsforindex(): Argument #2 ($color) is out of range Array ( [red] => 255 @@ -107,7 +107,7 @@ Array [alpha] => 0 ) 64FF00FF -imagecolorsforindex(): Argument #2 ($index) is out of range +imagecolorsforindex(): Argument #2 ($color) is out of range Array ( [red] => 255 diff --git a/ext/gd/tests/colormatch.phpt b/ext/gd/tests/colormatch.phpt index 5641bc01017fe..7ddf2c87a184a 100644 --- a/ext/gd/tests/colormatch.phpt +++ b/ext/gd/tests/colormatch.phpt @@ -21,5 +21,5 @@ echo "ok\n"; imagedestroy($im); ?> --EXPECT-- -imagecolormatch(): Argument #2 ($im2) must have at least one color +imagecolormatch(): Argument #2 ($image2) must have at least one color ok diff --git a/ext/gd/tests/createfromstring.phpt b/ext/gd/tests/createfromstring.phpt index d4d63149f13f1..6586d17c31d7f 100644 --- a/ext/gd/tests/createfromstring.phpt +++ b/ext/gd/tests/createfromstring.phpt @@ -62,6 +62,6 @@ $im = imagecreatefromstring(' asdf jklp foo'); --EXPECTF-- createfromstring truecolor png: ok createfromstring palette png: ok -imagecreatefromstring(): Argument #1 ($image) cannot be empty +imagecreatefromstring(): Argument #1 ($data) cannot be empty Warning: imagecreatefromstring(): Data is not in a recognized format in %screatefromstring.php on line %d diff --git a/ext/gd/tests/imagebmp_nullbyte_injection.phpt b/ext/gd/tests/imagebmp_nullbyte_injection.phpt index 9f0398b5da9d0..979bf86bcae14 100644 --- a/ext/gd/tests/imagebmp_nullbyte_injection.phpt +++ b/ext/gd/tests/imagebmp_nullbyte_injection.phpt @@ -15,4 +15,4 @@ try { } ?> --EXPECT-- -imagebmp(): Argument #2 ($to) must not contain null bytes +imagebmp(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gd/tests/imagecolordeallocate_error3.phpt b/ext/gd/tests/imagecolordeallocate_error3.phpt index 92568667b0353..3fe8ad7f3da74 100644 --- a/ext/gd/tests/imagecolordeallocate_error3.phpt +++ b/ext/gd/tests/imagecolordeallocate_error3.phpt @@ -22,4 +22,4 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagecolordeallocate(): Argument #2 ($index) must be between 0 and 1 +!! [ValueError] imagecolordeallocate(): Argument #2 ($color) must be between 0 and 1 diff --git a/ext/gd/tests/imagecolordeallocate_error4.phpt b/ext/gd/tests/imagecolordeallocate_error4.phpt index 1a4b9e61c5aad..3f94e172dce66 100644 --- a/ext/gd/tests/imagecolordeallocate_error4.phpt +++ b/ext/gd/tests/imagecolordeallocate_error4.phpt @@ -22,4 +22,4 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagecolordeallocate(): Argument #2 ($index) must be between 0 and 1 +!! [ValueError] imagecolordeallocate(): Argument #2 ($color) must be between 0 and 1 diff --git a/ext/gd/tests/imagecolormatch_error2.phpt b/ext/gd/tests/imagecolormatch_error2.phpt index f356b716c6147..c9a75f7822bb4 100644 --- a/ext/gd/tests/imagecolormatch_error2.phpt +++ b/ext/gd/tests/imagecolormatch_error2.phpt @@ -22,4 +22,4 @@ try { ?> --EXPECT-- -imagecolormatch(): Argument #1 ($im1) must be TrueColor +imagecolormatch(): Argument #1 ($image1) must be TrueColor diff --git a/ext/gd/tests/imagecolormatch_error3.phpt b/ext/gd/tests/imagecolormatch_error3.phpt index a3f556a3e12ba..25bc70c6a26e9 100644 --- a/ext/gd/tests/imagecolormatch_error3.phpt +++ b/ext/gd/tests/imagecolormatch_error3.phpt @@ -22,4 +22,4 @@ try { ?> --EXPECT-- -imagecolormatch(): Argument #2 ($im2) must be Palette +imagecolormatch(): Argument #2 ($image2) must be Palette diff --git a/ext/gd/tests/imagecolormatch_error4.phpt b/ext/gd/tests/imagecolormatch_error4.phpt index f1392c9149e90..b37d827cf3db2 100644 --- a/ext/gd/tests/imagecolormatch_error4.phpt +++ b/ext/gd/tests/imagecolormatch_error4.phpt @@ -22,4 +22,4 @@ try { ?> --EXPECT-- -imagecolormatch(): Argument #2 ($im2) must be the same size as argument #1 ($im1) +imagecolormatch(): Argument #2 ($image2) must be the same size as argument #1 ($im1) diff --git a/ext/gd/tests/imageconvolution_error2.phpt b/ext/gd/tests/imageconvolution_error2.phpt index b9c32af1e4408..32c2618aaf87d 100644 --- a/ext/gd/tests/imageconvolution_error2.phpt +++ b/ext/gd/tests/imageconvolution_error2.phpt @@ -27,4 +27,4 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imageconvolution(): Argument #2 ($matrix3x3) must be a 3x3 array +!! [ValueError] imageconvolution(): Argument #2 ($matrix) must be a 3x3 array diff --git a/ext/gd/tests/imageconvolution_error3.phpt b/ext/gd/tests/imageconvolution_error3.phpt index 2ad99f961782e..000c0912f54cb 100644 --- a/ext/gd/tests/imageconvolution_error3.phpt +++ b/ext/gd/tests/imageconvolution_error3.phpt @@ -35,5 +35,5 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imageconvolution(): Argument #2 ($matrix3x3) must be a 3x3 array, matrix[2] only has 2 elements -!! [ValueError] imageconvolution(): Argument #2 ($matrix3x3) must be a 3x3 array, matrix[2][2] cannot be found (missing integer key) +!! [ValueError] imageconvolution(): Argument #2 ($matrix) must be a 3x3 array, matrix[2] only has 2 elements +!! [ValueError] imageconvolution(): Argument #2 ($matrix) must be a 3x3 array, matrix[2][2] cannot be found (missing integer key) diff --git a/ext/gd/tests/imagecreate_error.phpt b/ext/gd/tests/imagecreate_error.phpt index 3e16c1f034193..1e068205e95b0 100644 --- a/ext/gd/tests/imagecreate_error.phpt +++ b/ext/gd/tests/imagecreate_error.phpt @@ -17,5 +17,5 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagecreate(): Argument #1 ($x_size) must be greater than 0 -!! [ValueError] imagecreate(): Argument #2 ($y_size) must be greater than 0 +!! [ValueError] imagecreate(): Argument #1 ($width) must be greater than 0 +!! [ValueError] imagecreate(): Argument #2 ($height) must be greater than 0 diff --git a/ext/gd/tests/imagecreatetruecolor_error2.phpt b/ext/gd/tests/imagecreatetruecolor_error2.phpt index 09870e2826475..d0e4933e7aeb2 100644 --- a/ext/gd/tests/imagecreatetruecolor_error2.phpt +++ b/ext/gd/tests/imagecreatetruecolor_error2.phpt @@ -19,5 +19,5 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagecreatetruecolor(): Argument #1 ($x_size) must be greater than 0 -!! [ValueError] imagecreatetruecolor(): Argument #2 ($y_size) must be greater than 0 +!! [ValueError] imagecreatetruecolor(): Argument #1 ($width) must be greater than 0 +!! [ValueError] imagecreatetruecolor(): Argument #2 ($height) must be greater than 0 diff --git a/ext/gd/tests/imagegd2_nullbyte_injection.phpt b/ext/gd/tests/imagegd2_nullbyte_injection.phpt index 38065dab0ab01..6daabbb199ae8 100644 --- a/ext/gd/tests/imagegd2_nullbyte_injection.phpt +++ b/ext/gd/tests/imagegd2_nullbyte_injection.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -imagegd(): Argument #2 ($to) must not contain any null bytes +imagegd(): Argument #2 ($file) must not contain any null bytes diff --git a/ext/gd/tests/imagegd_nullbyte_injection.phpt b/ext/gd/tests/imagegd_nullbyte_injection.phpt index 4a77b15ee0dfb..0560152c95aea 100644 --- a/ext/gd/tests/imagegd_nullbyte_injection.phpt +++ b/ext/gd/tests/imagegd_nullbyte_injection.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -imagegd(): Argument #2 ($to) must not contain any null bytes +imagegd(): Argument #2 ($file) must not contain any null bytes diff --git a/ext/gd/tests/imagegif_nullbyte_injection.phpt b/ext/gd/tests/imagegif_nullbyte_injection.phpt index 4b164392c218d..459078865a34b 100644 --- a/ext/gd/tests/imagegif_nullbyte_injection.phpt +++ b/ext/gd/tests/imagegif_nullbyte_injection.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -imagegif(): Argument #2 ($to) must not contain null bytes +imagegif(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gd/tests/imagejpeg_nullbyte_injection.phpt b/ext/gd/tests/imagejpeg_nullbyte_injection.phpt index be385b8bdc4cc..0473712274fbd 100644 --- a/ext/gd/tests/imagejpeg_nullbyte_injection.phpt +++ b/ext/gd/tests/imagejpeg_nullbyte_injection.phpt @@ -18,4 +18,4 @@ try { } ?> --EXPECT-- -imagejpeg(): Argument #2 ($to) must not contain null bytes +imagejpeg(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gd/tests/imagepng_nullbyte_injection.phpt b/ext/gd/tests/imagepng_nullbyte_injection.phpt index 8a415478ddcef..6ef99e67a27e2 100644 --- a/ext/gd/tests/imagepng_nullbyte_injection.phpt +++ b/ext/gd/tests/imagepng_nullbyte_injection.phpt @@ -18,4 +18,4 @@ try { } ?> --EXPECT-- -imagepng(): Argument #2 ($to) must not contain null bytes +imagepng(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gd/tests/imagetruecolortopalette_error3.phpt b/ext/gd/tests/imagetruecolortopalette_error3.phpt index 3fd8be0c3adb3..0af49bf38c55a 100644 --- a/ext/gd/tests/imagetruecolortopalette_error3.phpt +++ b/ext/gd/tests/imagetruecolortopalette_error3.phpt @@ -19,4 +19,4 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagetruecolortopalette(): Argument #3 ($colorWanted) must be greater than 0 and less than 2147483647 +!! [ValueError] imagetruecolortopalette(): Argument #3 ($num_colors) must be greater than 0 and less than 2147483647 diff --git a/ext/gd/tests/imagetruecolortopalette_error4.phpt b/ext/gd/tests/imagetruecolortopalette_error4.phpt index dd24aecc8154b..1d539cd4abaa5 100644 --- a/ext/gd/tests/imagetruecolortopalette_error4.phpt +++ b/ext/gd/tests/imagetruecolortopalette_error4.phpt @@ -20,5 +20,5 @@ trycatch_dump( ?> --EXPECT-- -!! [ValueError] imagetruecolortopalette(): Argument #3 ($colorWanted) must be greater than 0 and less than 2147483647 -!! [ValueError] imagetruecolortopalette(): Argument #3 ($colorWanted) must be greater than 0 and less than 2147483647 +!! [ValueError] imagetruecolortopalette(): Argument #3 ($num_colors) must be greater than 0 and less than 2147483647 +!! [ValueError] imagetruecolortopalette(): Argument #3 ($num_colors) must be greater than 0 and less than 2147483647 diff --git a/ext/gd/tests/imagewbmp_nullbyte_injection.phpt b/ext/gd/tests/imagewbmp_nullbyte_injection.phpt index d7c3f0c41617b..73ef5272f33a9 100644 --- a/ext/gd/tests/imagewbmp_nullbyte_injection.phpt +++ b/ext/gd/tests/imagewbmp_nullbyte_injection.phpt @@ -18,4 +18,4 @@ try { } ?> --EXPECT-- -imagewbmp(): Argument #2 ($to) must not contain null bytes +imagewbmp(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gd/tests/imagewebp_nullbyte_injection.phpt b/ext/gd/tests/imagewebp_nullbyte_injection.phpt index 52ecc59941247..4a0e69c164edb 100644 --- a/ext/gd/tests/imagewebp_nullbyte_injection.phpt +++ b/ext/gd/tests/imagewebp_nullbyte_injection.phpt @@ -18,4 +18,4 @@ try { } ?> --EXPECT-- -imagewebp(): Argument #2 ($to) must not contain null bytes +imagewebp(): Argument #2 ($file) must not contain null bytes diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 8df61de51bdab..33ed7fd93fb64 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -971,7 +971,7 @@ ZEND_FUNCTION(gmp_export) FETCH_GMP_ZVAL(gmpnumber, gmpnumber_arg, temp_a, 1); if (mpz_sgn(gmpnumber) == 0) { - RETURN_EMPTY_STRING(); + RETVAL_EMPTY_STRING(); } else { size_t bits_per_word = size * 8; size_t count = (mpz_sizeinbase(gmpnumber, 2) + bits_per_word - 1) / bits_per_word; @@ -980,7 +980,7 @@ ZEND_FUNCTION(gmp_export) mpz_export(ZSTR_VAL(out_string), NULL, order, size, endian, 0, gmpnumber); ZSTR_VAL(out_string)[ZSTR_LEN(out_string)] = '\0'; - RETURN_NEW_STR(out_string); + RETVAL_NEW_STR(out_string); } FREE_GMP_TEMP(temp_a); diff --git a/ext/gmp/tests/gmp_export.phpt b/ext/gmp/tests/gmp_export.phpt index 6877e5624d680..cea9b4e502efd 100644 --- a/ext/gmp/tests/gmp_export.phpt +++ b/ext/gmp/tests/gmp_export.phpt @@ -50,6 +50,9 @@ foreach ($export as $k => $test) { var_dump($passed); +// Argument converted from int to GMP +var_dump(bin2hex(gmp_export(0xff))); + // Invalid word sizes try { var_dump(gmp_export(123, -1)); @@ -76,6 +79,7 @@ try { ?> --EXPECT-- bool(true) +string(2) "ff" gmp_export(): Argument #2 ($word_size) must be greater than or equal to 1 gmp_export(): Argument #2 ($word_size) must be greater than or equal to 1 gmp_export(): Argument #3 ($flags) cannot use multiple word order options diff --git a/ext/hash/bench.php b/ext/hash/bench.php index 436390f7d517a..846163315b86c 100755 --- a/ext/hash/bench.php +++ b/ext/hash/bench.php @@ -1,81 +1,12 @@ #!/usr/bin/env php $t) { printf("%-12s %02.6f\n", $a, $t); } -?> diff --git a/ext/hash/config.m4 b/ext/hash/config.m4 index d84e89cc6b333..2d6a81b7febed 100644 --- a/ext/hash/config.m4 +++ b/ext/hash/config.m4 @@ -35,11 +35,12 @@ fi EXT_HASH_SOURCES="hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c \ hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c hash_adler32.c \ - hash_crc32.c hash_fnv.c hash_joaat.c $EXT_HASH_SHA3_SOURCES" + hash_crc32.c hash_fnv.c hash_joaat.c $EXT_HASH_SHA3_SOURCES + murmur/PMurHash.c murmur/PMurHash128.c hash_murmur.c" EXT_HASH_HEADERS="php_hash.h php_hash_md.h php_hash_sha.h php_hash_ripemd.h \ php_hash_haval.h php_hash_tiger.h php_hash_gost.h php_hash_snefru.h \ php_hash_whirlpool.h php_hash_adler32.h php_hash_crc32.h \ - php_hash_fnv.h php_hash_joaat.h php_hash_sha3.h" + php_hash_fnv.h php_hash_joaat.h php_hash_sha3.h php_hash_murmur.h" PHP_NEW_EXTENSION(hash, $EXT_HASH_SOURCES, 0,,$PHP_HASH_CFLAGS) PHP_INSTALL_HEADERS(ext/hash, $EXT_HASH_HEADERS) diff --git a/ext/hash/config.w32 b/ext/hash/config.w32 index 5d6be6b92249a..a0cb3f247770a 100644 --- a/ext/hash/config.w32 +++ b/ext/hash/config.w32 @@ -11,7 +11,7 @@ PHP_HASH = 'yes'; EXTENSION('hash', 'hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c ' + 'hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c ' + 'hash_adler32.c hash_crc32.c hash_joaat.c hash_fnv.c ' + - 'hash_sha3.c', false); + 'hash_sha3.c hash_murmur.c', false); var hash_sha3_dir = 'ext/hash/sha3/generic' + (X64 ? '64' : '32') + 'lc'; @@ -28,7 +28,14 @@ if (!CHECK_HEADER_ADD_INCLUDE('KeccakHash.h', 'CFLAGS_HASH', hash_sha3_dir)) { ADD_FLAG('CFLAGS_HASH', '/DKeccakP200_excluded /DKeccakP400_excluded /DKeccakP800_excluded /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1'); +var hash_murmur_dir = 'ext/hash/murmur'; +if (!CHECK_HEADER_ADD_INCLUDE('PMurHash.h', 'CFLAGS_HASH', hash_murmur_dir)) { + ERROR('Unable to locate murmur headers'); +} +ADD_SOURCES(hash_murmur_dir, 'PMurHash.c PMurHash128.c', 'hash'); + PHP_INSTALL_HEADERS('ext/hash/', 'php_hash.h php_hash_md.h php_hash_sha.h ' + 'php_hash_ripemd.h php_hash_haval.h php_hash_tiger.h ' + 'php_hash_gost.h php_hash_snefru.h php_hash_whirlpool.h ' + - 'php_hash_adler32.h php_hash_crc32.h php_hash_sha3.h'); + 'php_hash_adler32.h php_hash_crc32.h php_hash_sha3.h ' + + 'php_hash_murmur.h'); diff --git a/ext/hash/hash.c b/ext/hash/hash.c index 4e3820f35e6b4..f7b851f5a49fe 100644 --- a/ext/hash/hash.c +++ b/ext/hash/hash.c @@ -52,7 +52,7 @@ struct mhash_bc_entry { int value; }; -#define MHASH_NUM_ALGOS 35 +#define MHASH_NUM_ALGOS 38 static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = { {"CRC32", "crc32", 0}, /* used by bzip */ @@ -90,6 +90,9 @@ static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = { {"FNV1A64", "fnv1a64", 32}, {"JOAAT", "joaat", 33}, {"CRC32C", "crc32c", 34}, /* Castagnoli's CRC, used by iSCSI, SCTP, Btrfs, ext4, etc */ + {"MURMUR3A", "murmur3a", 35}, + {"MURMUR3C", "murmur3c", 36}, + {"MURMUR3F", "murmur3f", 37}, }; #endif @@ -1586,6 +1589,9 @@ PHP_MINIT_FUNCTION(hash) php_hash_register_algo("fnv164", &php_hash_fnv164_ops); php_hash_register_algo("fnv1a64", &php_hash_fnv1a64_ops); php_hash_register_algo("joaat", &php_hash_joaat_ops); + php_hash_register_algo("murmur3a", &php_hash_murmur3a_ops); + php_hash_register_algo("murmur3c", &php_hash_murmur3c_ops); + php_hash_register_algo("murmur3f", &php_hash_murmur3f_ops); PHP_HASH_HAVAL_REGISTER(3,128); PHP_HASH_HAVAL_REGISTER(3,160); diff --git a/ext/hash/hash.stub.php b/ext/hash/hash.stub.php index 4cce866136b4d..c0d4cbca7c3d5 100644 --- a/ext/hash/hash.stub.php +++ b/ext/hash/hash.stub.php @@ -52,5 +52,5 @@ private function __construct() {} public function __serialize(): array {} - public function __unserialize(array $serialized): void {} + public function __unserialize(array $data): void {} } diff --git a/ext/hash/hash_arginfo.h b/ext/hash/hash_arginfo.h index cb8815de35123..db043da97b477 100644 --- a/ext/hash/hash_arginfo.h +++ b/ext/hash/hash_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5298231334ab85edd67ae46c33b7e6cffb2ecc53 */ + * Stub hash: 9352e0ac98e2ac53dc15d5024f9ef0c8092c4e9c */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_hash, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, algo, IS_STRING, 0) @@ -121,7 +121,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_HashContext___serialize arginfo_hash_algos ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_HashContext___unserialize, 0, 1, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, serialized, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0) ZEND_END_ARG_INFO() diff --git a/ext/hash/hash_murmur.c b/ext/hash/hash_murmur.c new file mode 100644 index 0000000000000..ab01b4f19fce6 --- /dev/null +++ b/ext/hash/hash_murmur.c @@ -0,0 +1,186 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Anatol Belski | + +----------------------------------------------------------------------+ +*/ + +#include "php_hash.h" +#include "php_hash_murmur.h" + +#include "murmur/PMurHash.h" +#include "murmur/PMurHash128.h" + + +const php_hash_ops php_hash_murmur3a_ops = { + "murmur3a", + (php_hash_init_func_t) PHP_MURMUR3AInit, + (php_hash_update_func_t) PHP_MURMUR3AUpdate, + (php_hash_final_func_t) PHP_MURMUR3AFinal, + (php_hash_copy_func_t) PHP_MURMUR3ACopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3A_SPEC, + 4, + 4, + sizeof(PHP_MURMUR3A_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3AInit(PHP_MURMUR3A_CTX *ctx) +{ + ctx->h = 0; + ctx->carry = 0; + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3AUpdate(PHP_MURMUR3A_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash32_Process(&ctx->h, &ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3AFinal(unsigned char digest[4], PHP_MURMUR3A_CTX *ctx) +{ + ctx->h = PMurHash32_Result(ctx->h, ctx->carry, ctx->len); + + digest[0] = (unsigned char)((ctx->h >> 24) & 0xff); + digest[1] = (unsigned char)((ctx->h >> 16) & 0xff); + digest[2] = (unsigned char)((ctx->h >> 8) & 0xff); + digest[3] = (unsigned char)(ctx->h & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3ACopy(const php_hash_ops *ops, PHP_MURMUR3A_CTX *orig_context, PHP_MURMUR3A_CTX *copy_context) +{ + copy_context->h = orig_context->h; + copy_context->carry = orig_context->carry; + copy_context->len = orig_context->len; + return SUCCESS; +} + +const php_hash_ops php_hash_murmur3c_ops = { + "murmur3c", + (php_hash_init_func_t) PHP_MURMUR3CInit, + (php_hash_update_func_t) PHP_MURMUR3CUpdate, + (php_hash_final_func_t) PHP_MURMUR3CFinal, + (php_hash_copy_func_t) PHP_MURMUR3CCopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3C_SPEC, + 16, + 4, + sizeof(PHP_MURMUR3C_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3CInit(PHP_MURMUR3C_CTX *ctx) +{ + memset(&ctx->h, 0, sizeof ctx->h); + memset(&ctx->carry, 0, sizeof ctx->carry); + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3CUpdate(PHP_MURMUR3C_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash128x86_Process(ctx->h, ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3CFinal(unsigned char digest[4], PHP_MURMUR3C_CTX *ctx) +{ + uint32_t h[4] = {0, 0, 0, 0}; + PMurHash128x86_Result(ctx->h, ctx->carry, ctx->len, h); + + digest[0] = (unsigned char)((h[0] >> 24) & 0xff); + digest[1] = (unsigned char)((h[0] >> 16) & 0xff); + digest[2] = (unsigned char)((h[0] >> 8) & 0xff); + digest[3] = (unsigned char)(h[0] & 0xff); + digest[4] = (unsigned char)((h[1] >> 24) & 0xff); + digest[5] = (unsigned char)((h[1] >> 16) & 0xff); + digest[6] = (unsigned char)((h[1] >> 8) & 0xff); + digest[7] = (unsigned char)(h[1] & 0xff); + digest[8] = (unsigned char)((h[2] >> 24) & 0xff); + digest[9] = (unsigned char)((h[2] >> 16) & 0xff); + digest[10] = (unsigned char)((h[2] >> 8) & 0xff); + digest[11] = (unsigned char)(h[2] & 0xff); + digest[12] = (unsigned char)((h[3] >> 24) & 0xff); + digest[13] = (unsigned char)((h[3] >> 16) & 0xff); + digest[14] = (unsigned char)((h[3] >> 8) & 0xff); + digest[15] = (unsigned char)(h[3] & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3CCopy(const php_hash_ops *ops, PHP_MURMUR3C_CTX *orig_context, PHP_MURMUR3C_CTX *copy_context) +{ + memcpy(©_context->h, &orig_context->h, sizeof orig_context->h); + memcpy(©_context->carry, &orig_context->carry, sizeof orig_context->carry); + copy_context->len = orig_context->len; + return SUCCESS; +} + +const php_hash_ops php_hash_murmur3f_ops = { + "murmur3f", + (php_hash_init_func_t) PHP_MURMUR3FInit, + (php_hash_update_func_t) PHP_MURMUR3FUpdate, + (php_hash_final_func_t) PHP_MURMUR3FFinal, + (php_hash_copy_func_t) PHP_MURMUR3FCopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3F_SPEC, + 16, + 8, + sizeof(PHP_MURMUR3F_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3FInit(PHP_MURMUR3F_CTX *ctx) +{ + memset(&ctx->h, 0, sizeof ctx->h); + memset(&ctx->carry, 0, sizeof ctx->carry); + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3FUpdate(PHP_MURMUR3F_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash128x64_Process(ctx->h, ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3FFinal(unsigned char digest[4], PHP_MURMUR3F_CTX *ctx) +{ + uint64_t h[2] = {0, 0}; + PMurHash128x64_Result(ctx->h, ctx->carry, ctx->len, h); + + digest[0] = (unsigned char)((h[0] >> 56) & 0xff); + digest[1] = (unsigned char)((h[0] >> 48) & 0xff); + digest[2] = (unsigned char)((h[0] >> 40) & 0xff); + digest[3] = (unsigned char)((h[0] >> 32) & 0xff); + digest[4] = (unsigned char)((h[0] >> 24) & 0xff); + digest[5] = (unsigned char)((h[0] >> 16) & 0xff); + digest[6] = (unsigned char)((h[0] >> 8) & 0xff); + digest[7] = (unsigned char)(h[0] & 0xff); + digest[8] = (unsigned char)((h[1] >> 56) & 0xff); + digest[9] = (unsigned char)((h[1] >> 48) & 0xff); + digest[10] = (unsigned char)((h[1] >> 40) & 0xff); + digest[11] = (unsigned char)((h[1] >> 32) & 0xff); + digest[12] = (unsigned char)((h[1] >> 24) & 0xff); + digest[13] = (unsigned char)((h[1] >> 16) & 0xff); + digest[14] = (unsigned char)((h[1] >> 8) & 0xff); + digest[15] = (unsigned char)(h[1] & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3FCopy(const php_hash_ops *ops, PHP_MURMUR3F_CTX *orig_context, PHP_MURMUR3F_CTX *copy_context) +{ + memcpy(©_context->h, &orig_context->h, sizeof orig_context->h); + memcpy(©_context->carry, &orig_context->carry, sizeof orig_context->carry); + copy_context->len = orig_context->len; + return SUCCESS; +} diff --git a/ext/hash/murmur/PMurHash.c b/ext/hash/murmur/PMurHash.c new file mode 100644 index 0000000000000..0716ca13c88ff --- /dev/null +++ b/ext/hash/murmur/PMurHash.c @@ -0,0 +1,226 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This implementation was written by Shane Day, and is also public domain. + * + * This is a portable ANSI C implementation of MurmurHash3_x86_32 (Murmur3A) + * with support for progressive processing. + */ + +/*----------------------------------------------------------------------------- + +If you want to understand the MurmurHash algorithm you would be much better +off reading the original source. Just point your browser at: +http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp + + +What this version provides? + +1. Progressive data feeding. Useful when the entire payload to be hashed +does not fit in memory or when the data is streamed through the application. +Also useful when hashing a number of strings with a common prefix. A partial +hash of a prefix string can be generated and reused for each suffix string. + +How does it work? + +We can only process entire 32 bit chunks of input, except for the very end +that may be shorter. So along with the partial hash we need to give back to +the caller a carry containing up to 3 bytes that we were unable to process. +This carry also needs to record the number of bytes the carry holds. I use +the low 2 bits as a count (0..3) and the carry bytes are shifted into the +high byte in stream order. + +To handle endianess I simply use a macro that reads a uint32_t and define +that macro to be a direct read on little endian machines, a read and swap +on big endian machines, or a byte-by-byte read if the endianess is unknown. + +-----------------------------------------------------------------------------*/ + + +#include "PMurHash.h" + +// /* MSVC warnings we choose to ignore */ +// #if defined(_MSC_VER) +// #pragma warning(disable: 4127) /* conditional expression is constant */ +// #endif + +/*----------------------------------------------------------------------------- + * Endianess, misalignment capabilities and util macros + * + * The following 3 macros are defined in this section. The other macros defined + * are only needed to help derive these 3. + * + * READ_UINT32(x) Read a little endian unsigned 32-bit int + * UNALIGNED_SAFE Defined if READ_UINT32 works on non-word boundaries + * ROTL32(x,r) Rotate x left by r bits + */ + +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif + +/* Find best way to ROTL */ +#if defined(_MSC_VER) + #define FORCE_INLINE static __forceinline + #include /* Microsoft put _rotl declaration in here */ + #define ROTL32(x,y) _rotl(x,y) +#else + #define FORCE_INLINE static inline __attribute__((always_inline)) + /* gcc recognises this code and generates a rotate instruction for CPUs with one */ + #define ROTL32(x,r) (((uint32_t)x << r) | ((uint32_t)x >> (32 - r))) +#endif + +#include "endianness.h" + +#define READ_UINT32(ptr) getblock32((uint32_t *)ptr, 0) + +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint32_t kC1 = 0xcc9e2d51; +static const uint32_t kC2 = 0x1b873593; + +/* This is the main processing body of the algorithm. It operates + * on each full 32-bits of input. */ +#define doblock(h1, k1) \ +do {\ + k1 *= kC1;\ + k1 = ROTL32(k1,15);\ + k1 *= kC2;\ +\ + h1 ^= k1;\ + h1 = ROTL32(h1,13);\ + h1 = h1*5+0xe6546b64;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 4 bytes */ +/* cnt=bytes to process, h1=name of h1 var, c=carry, n=bytes in c, ptr/len=payload */ +#define dobytes(cnt, h1, c, n, ptr, len) \ +do {\ + unsigned __cnt = cnt;\ + while(__cnt--) {\ + c = c>>8 | (uint32_t)*ptr++<<24;\ + n++; len--;\ + if(n==4) {\ + doblock(h1, c);\ + n = 0;\ + }\ + }\ +} while(0) + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry to 0 and h1 to 0 or an initial seed + * if wanted. Both ph1 and pcarry are required arguments. */ +void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int len) +{ + uint32_t h1 = *ph1; + uint32_t c = *pcarry; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 2 bits of c value */ + int n = c & 3; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (4-n) & 3; + if(i && i <= len) { + dobytes(i, h1, c, n, ptr, len); + } + + /* Process 32-bit chunks */ + end = ptr + (len & ~3); + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = READ_UINT32(ptr); + doblock(h1, k1); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 3; + if(i && i <= len) { + dobytes(i, h1, c, n, ptr, len); + } + + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~3); + switch(n) { /* how many bytes in c */ + case 0: /* c=[----] w=[3210] b=[3210]=w c'=[----] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = READ_UINT32(ptr); + doblock(h1, k1); + } + break; + case 1: /* c=[0---] w=[4321] b=[3210]=c>>24|w<<8 c'=[4---] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>24; + c = READ_UINT32(ptr); + k1 |= c<<8; + doblock(h1, k1); + } + break; + case 2: /* c=[10--] w=[5432] b=[3210]=c>>16|w<<16 c'=[54--] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>16; + c = READ_UINT32(ptr); + k1 |= c<<16; + doblock(h1, k1); + } + break; + case 3: /* c=[210-] w=[6543] b=[3210]=c>>8|w<<24 c'=[654-] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>8; + c = READ_UINT32(ptr); + k1 |= c<<24; + doblock(h1, k1); + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 32-bit chunks, possibly leaving 1..3 bytes */ + len -= len & ~3; + + /* Append any remaining bytes into carry */ + dobytes(len, h1, c, n, ptr, len); + + /* Copy out new running hash and carry */ + *ph1 = h1; + *pcarry = (c & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* Finalize a hash. To match the original Murmur3A the total_length must be provided */ +uint32_t PMurHash32_Result(uint32_t h, uint32_t carry, uint32_t total_length) +{ + uint32_t k1; + int n = carry & 3; + if(n) { + k1 = carry >> (4-n)*8; + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h ^= k1; + } + h ^= total_length; + + /* fmix */ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} diff --git a/ext/hash/murmur/PMurHash.h b/ext/hash/murmur/PMurHash.h new file mode 100644 index 0000000000000..f80eb11f40ac5 --- /dev/null +++ b/ext/hash/murmur/PMurHash.h @@ -0,0 +1,31 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This implementation was written by Shane Day, and is also public domain. + * + * This implementation was modified to match PMurHash128.cpp. + */ + +/* ------------------------------------------------------------------------- */ + +// Microsoft Visual Studio + +#if defined(_MSC_VER) && (_MSC_VER < 1600) + +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; + +// Other compilers + +#else // defined(_MSC_VER) + +#include + +#endif // !defined(_MSC_VER) + +/* ------------------------------------------------------------------------- */ +/* Prototypes */ + +void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int len); +uint32_t PMurHash32_Result(uint32_t h1, uint32_t carry, uint32_t total_length); diff --git a/ext/hash/murmur/PMurHash128.c b/ext/hash/murmur/PMurHash128.c new file mode 100644 index 0000000000000..2856542190eac --- /dev/null +++ b/ext/hash/murmur/PMurHash128.c @@ -0,0 +1,640 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This is a c++ implementation of MurmurHash3_128 with support for progressive + * processing based on PMurHash implementation written by Shane Day. + */ + +/*----------------------------------------------------------------------------- + +If you want to understand the MurmurHash algorithm you would be much better +off reading the original source. Just point your browser at: +http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp + + +What this version provides? + +1. Progressive data feeding. Useful when the entire payload to be hashed +does not fit in memory or when the data is streamed through the application. +Also useful when hashing a number of strings with a common prefix. A partial +hash of a prefix string can be generated and reused for each suffix string. + +How does it work? + +We can only process entire 128 bit chunks of input, except for the very end +that may be shorter. So along with the partial hash we need to give back to +the caller a carry containing up to 15 bytes that we were unable to process. +This carry also needs to record the number of bytes the carry holds. I use +the low 4 bits as a count (0..15) and the carry bytes are shifted into the +high byte in stream order. + +To handle endianess I simply use a macro that reads an uint and define +that macro to be a direct read on little endian machines, a read and swap +on big endian machines. + +-----------------------------------------------------------------------------*/ + + +#include "PMurHash128.h" + +/*----------------------------------------------------------------------------- + * Endianess, misalignment capabilities and util macros + * + * The following 5 macros are defined in this section. The other macros defined + * are only needed to help derive these 5. + * + * READ_UINT32(x,i) Read a little endian unsigned 32-bit int at index + * READ_UINT64(x,i) Read a little endian unsigned 64-bit int at index + * UNALIGNED_SAFE Defined if READ_UINTXX works on non-word boundaries + * ROTL32(x,r) Rotate x left by r bits + * ROTL64(x,r) Rotate x left by r bits + * BIG_CONSTANT + * FORCE_INLINE + */ + +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif + +/* Find best way to ROTL */ +#if defined(_MSC_VER) + #define FORCE_INLINE static __forceinline + #include /* Microsoft put _rotl declaration in here */ + #define ROTL32(x,y) _rotl(x,y) + #define ROTL64(x,y) _rotl64(x,y) + #define BIG_CONSTANT(x) (x) +#else + #define FORCE_INLINE static inline __attribute__((always_inline)) + /* gcc recognises this code and generates a rotate instruction for CPUs with one */ + #define ROTL32(x,r) (((uint32_t)x << r) | ((uint32_t)x >> (32 - r))) + #define ROTL64(x,r) (((uint64_t)x << r) | ((uint64_t)x >> (64 - r))) + #define BIG_CONSTANT(x) (x##LLU) +#endif + +#include "endianness.h" + +#define READ_UINT64(ptr,i) getblock64((uint64_t *)ptr,i) +#define READ_UINT32(ptr,i) getblock32((uint32_t *)ptr,i) + +//----------------------------------------------------------------------------- +// Finalization mix - force all bits of a hash block to avalanche + +FORCE_INLINE uint32_t fmix32 ( uint32_t h ) +{ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} + +//---------- + +FORCE_INLINE uint64_t fmix64 ( uint64_t k ) +{ + k ^= k >> 33; + k *= BIG_CONSTANT(0xff51afd7ed558ccd); + k ^= k >> 33; + k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53); + k ^= k >> 33; + + return k; +} + +/*-----------------------------------------------------------------------------* + PMurHash128x86 + *-----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint32_t kC1 = 0x239b961b; +static const uint32_t kC2 = 0xab0e9789; +static const uint32_t kC3 = 0x38b34ae5; +static const uint32_t kC4 = 0xa1e38b93; + +/* This is the main processing body of the algorithm. It operates + * on each full 128-bits of input. */ +#define doblock128x86(h1, h2, h3, h4, k1, k2, k3,k4)\ +do {\ + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h1 ^= k1;\ +\ + h1 = ROTL32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b;\ +\ + k2 *= kC2; k2 = ROTL32(k2,16); k2 *= kC3; h2 ^= k2;\ +\ + h2 = ROTL32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747;\ +\ + k3 *= kC3; k3 = ROTL32(k3,17); k3 *= kC4; h3 ^= k3;\ +\ + h3 = ROTL32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35;\ +\ + k4 *= kC4; k4 = ROTL32(k4,18); k4 *= kC1; h4 ^= k4;\ +\ + h4 = ROTL32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 16 bytes */ +/* cnt=bytes to process, h1-h4=hash k1-k4=carry, n=bytes in carry, ptr/len=payload */ +#define dobytes128x86(cnt, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len)\ +do {\ + unsigned __cnt = cnt;\ + for(;__cnt--; len--) {\ + switch(n) {\ + case 0: case 1: case 2: case 3:\ + k1 = k1>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 4: case 5: case 6: case 7:\ + k2 = k2>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 8: case 9: case 10: case 11:\ + k3 = k3>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 12: case 13: case 14:\ + k4 = k4>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 15:\ + k4 = k4>>8 | (uint32_t)*ptr++<<24;\ + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4);\ + n = 0; break;\ + }\ + }\ +} while(0) + +/* Finalize a hash. To match the original Murmur3_128x86 the total_length must be provided */ +void PMurHash128x86_Result(const uint32_t *ph, const uint32_t *pcarry, uint32_t total_length, uint32_t *out) +{ + uint32_t h1 = ph[0]; + uint32_t h2 = ph[1]; + uint32_t h3 = ph[2]; + uint32_t h4 = ph[3]; + + uint32_t k1, k2, k3, k4 = pcarry[3]; + + int n = k4 & 15; + switch(n) { + case 1: case 2: case 3: case 4: + k1 = pcarry[0] >> (4-n)*8; + goto finrot_k1; + + case 5: case 6: case 7: case 8: + k2 = pcarry[1] >> (8-n)*8; + goto finrot_k21; + + case 9: case 10: case 11: case 12: + k3 = pcarry[2] >> (12-n)*8; + goto finrot_k321; + + case 13: case 14: case 15: + k4 >>= (16-n)*8; + goto finrot_k4321; + + default: + goto skiprot; + } +finrot_k4321: + k4 *= kC4; k4 = ROTL32(k4,18); k4 *= kC1; h4 ^= k4; + k3 = pcarry[2]; +finrot_k321: + k3 *= kC3; k3 = ROTL32(k3,17); k3 *= kC4; h3 ^= k3; + k2 = pcarry[1]; +finrot_k21: + k2 *= kC2; k2 = ROTL32(k2,16); k2 *= kC3; h2 ^= k2; + k1 = pcarry[0]; +finrot_k1: + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h1 ^= k1; +skiprot: + + //---------- + // finalization + + h1 ^= total_length; h2 ^= total_length; + h3 ^= total_length; h4 ^= total_length; + + h1 += h2; h1 += h3; h1 += h4; + h2 += h1; h3 += h1; h4 += h1; + + h1 = fmix32(h1); + h2 = fmix32(h2); + h3 = fmix32(h3); + h4 = fmix32(h4); + + h1 += h2; h1 += h3; h1 += h4; + h2 += h1; h3 += h1; h4 += h1; + + out[0] = h1; + out[1] = h2; + out[2] = h3; + out[3] = h4; +} + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry[4] to {0,0,0,0} and h[4] to an initial {seed,seed,seed,seed} + * if wanted. Both ph and pcarry are required arguments. */ +void PMurHash128x86_Process(uint32_t * const ph, uint32_t * const pcarry, const void * const key, int len) +{ + uint32_t h1 = ph[0]; + uint32_t h2 = ph[1]; + uint32_t h3 = ph[2]; + uint32_t h4 = ph[3]; + + uint32_t k1 = pcarry[0]; + uint32_t k2 = pcarry[1]; + uint32_t k3 = pcarry[2]; + uint32_t k4 = pcarry[3]; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 4 bits of c value */ + int n = k4 & 15; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (16-n) & 15; + if(i && i <= len) { + dobytes128x86(i, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + } + + /* Process 128-bit chunks */ + end = ptr + (len & ~15); + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT32(ptr, 0); + k2 = READ_UINT32(ptr, 1); + k3 = READ_UINT32(ptr, 2); + k4 = READ_UINT32(ptr, 3); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 3; + if(i && i <= len) { + dobytes128x86(i, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + } + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~15); + + switch(n) { /* how many bytes in c */ + case 0: /* + k1=[----] k2=[----] k2=[----] k4=[----] w=[3210 7654 ba98 fedc] b=[3210 7654 ba98 fedc] */ + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT32(ptr, 0); + k2 = READ_UINT32(ptr, 1); + k3 = READ_UINT32(ptr, 2); + k4 = READ_UINT32(ptr, 3); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + } + break; + case 1: case 2: case 3: /* + k1=[10--] k2=[----] k3=[----] k4=[----] w=[5432 9876 dcba hgfe] b=[3210 7654 ba98 fedc] k1'=[hg--] */ + { + const int lshift = n*8, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k1>>rshift; // --10 + k2 = READ_UINT32(ptr, 0); // 5432 + c |= k2<>rshift; // 7654. + k4 = READ_UINT32(ptr, 2); // dcba + k3 = k4<>rshift; // ba98. + k1 = READ_UINT32(ptr, 3); // hgfe. + k4 = k1<>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, c, k2, k3, k4); + } + } + break; + case 4: /* + k1=[3210] k2=[----] k3=[----] k4=[----] w=[7654 ba98 fedc jihg] b=[3210 7654 ba98 fedc] k1'=[jihg] */ + for( ; ptr < end ; ptr+=16) { + k2 = READ_UINT32(ptr, 0); + k3 = READ_UINT32(ptr, 1); + k4 = READ_UINT32(ptr, 2); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + k1 = READ_UINT32(ptr, 3); + } + break; + case 5: case 6: case 7: /* + k1=[3210] k2=[54--] k3=[----] k4=[----] w=[9876 dcba hgfe lkji] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[lk--] */ + { + const int lshift = n*8-32, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k2>>rshift; // --54 + k3 = READ_UINT32(ptr, 0); // 9876 + c |= k3<>rshift; // ba98. + k2 = READ_UINT32(ptr, 2); // hgfe + k4 = k2<>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, k1, c, k3, k4); + k1 = k2>>rshift; // --hg + k2 = READ_UINT32(ptr, 3); // lkji. + k1 |= k2<>rshift; // --98 + k4 = READ_UINT32(ptr, 0); // dcba + c |= k4<>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, k1, k2, c, k4); + k2 = READ_UINT32(ptr, 2); // lkji + k1 = k2<>rshift; // jihg. + k3 = READ_UINT32(ptr, 3); // ponm. + k2 = k3<>rshift; // nmlk. + } + } + case 12: /* + k1=[3210] k2=[7654] k3=[ba98] k4=[----] w=[fedc jihg nmlk rqpo] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] k3'=[rqpo] */ + for( ; ptr < end ; ptr+=16) { + k4 = READ_UINT32(ptr, 0); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + k1 = READ_UINT32(ptr, 1); + k2 = READ_UINT32(ptr, 2); + k3 = READ_UINT32(ptr, 3); + } + break; + default: /* 12 < n <= 15 + k1=[3210] k2=[7654] k3=[ba98] k4=[dc--] w=[hgfe lkji ponm tsrq] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] k3'=[rqpo] k3'=[ts--] */ + { + const int lshift = n*8-96, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k4>>rshift; // --dc + k4 = READ_UINT32(ptr, 0); // hgfe + c |= k4<>rshift; // jihg. + c = READ_UINT32(ptr, 2); // ponm + k2 = c<>rshift; // nmlk. + k4 = READ_UINT32(ptr, 3); // tsrq. + k3 = k4<>rshift; // rqpo. + } + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 128-bit chunks, possibly leaving 1..15 bytes */ + len -= len & ~15; + + /* Append any remaining bytes into carry */ + dobytes128x86(len, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + + /* Copy out new running hash and carry */ + ph[0] = h1; + ph[1] = h2; + ph[2] = h3; + ph[3] = h4; + pcarry[0] = k1; + pcarry[1] = k2; + pcarry[2] = k3; + pcarry[3] = (k4 & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* All in one go */ + +/* MurmurHash3_x86_128 api */ +void PMurHash128x86(const void * key, const int len, uint32_t seed, void * out) +{ + uint32_t carry[4] = {0, 0, 0, 0}; + uint32_t h[4] = {seed, seed, seed, seed}; + PMurHash128x86_Process(h, carry, key, len); + PMurHash128x86_Result(h, carry, (uint32_t) len, (uint32_t *) out); +} + +/*-----------------------------------------------------------------------------* + PMurHash128x64 + *-----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint64_t kC1L = BIG_CONSTANT(0x87c37b91114253d5); +static const uint64_t kC2L = BIG_CONSTANT(0x4cf5ad432745937f); + +/* This is the main processing body of the algorithm. It operates + * on each full 128-bits of input. */ +#define doblock128x64(h1, h2, k1, k2)\ +do {\ + k1 *= kC1L; k1 = ROTL64(k1,31); k1 *= kC2L; h1 ^= k1;\ +\ + h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;\ +\ + k2 *= kC2L; k2 = ROTL64(k2,33); k2 *= kC1L; h2 ^= k2;\ +\ + h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 16 bytes */ +/* cnt=bytes to process, h1,h2=hash k1,k2=carry, n=bytes in carry, ptr/len=payload */ +#define dobytes128x64(cnt, h1, h2, k1, k2, n, ptr, len) \ +do {\ + unsigned __cnt = cnt;\ + for(;__cnt--; len--) {\ + switch(n) {\ + case 0: case 1: case 2: case 3:\ + case 4: case 5: case 6: case 7:\ + k1 = k1>>8 | (uint64_t)*ptr++<<56;\ + n++; break;\ +\ + case 8: case 9: case 10: case 11:\ + case 12: case 13: case 14:\ + k2 = k2>>8 | (uint64_t)*ptr++<<56;\ + n++; break;\ +\ + case 15:\ + k2 = k2>>8 | (uint64_t)*ptr++<<56;\ + doblock128x64(h1, h2, k1, k2);\ + n = 0; break;\ + }\ + }\ +} while(0) + +/* Finalize a hash. To match the original Murmur3_128x64 the total_length must be provided */ +void PMurHash128x64_Result(const uint64_t * const ph, const uint64_t * const pcarry, + const uint32_t total_length, uint64_t * const out) +{ + uint64_t h1 = ph[0]; + uint64_t h2 = ph[1]; + + uint64_t k1; + uint64_t k2 = pcarry[1]; + + int n = k2 & 15; + if (n) { + k1 = pcarry[0]; + if (n > 8) { + k2 >>= (16-n)*8; + k2 *= kC2L; k2 = ROTL64(k2,33); k2 *= kC1L; h2 ^= k2; + } else { + k1 >>= (8-n)*8; + } + k1 *= kC1L; k1 = ROTL64(k1,31); k1 *= kC2L; h1 ^= k1; + } + + //---------- + // finalization + + h1 ^= total_length; h2 ^= total_length; + + h1 += h2; + h2 += h1; + + h1 = fmix64(h1); + h2 = fmix64(h2); + + h1 += h2; + h2 += h1; + + out[0] = h1; + out[1] = h2; +} + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry[2] to {0,0} and h[2] to an initial {seed,seed} + * if wanted. Both ph and pcarry are required arguments. */ +void PMurHash128x64_Process(uint64_t * const ph, uint64_t * const pcarry, const void * const key, int len) +{ + uint64_t h1 = ph[0]; + uint64_t h2 = ph[1]; + + uint64_t k1 = pcarry[0]; + uint64_t k2 = pcarry[1]; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 4 bits of c value */ + int n = k2 & 15; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (16-n) & 15; + if(i && i <= len) { + dobytes128x64(i, h1, h2, k1, k2, n, ptr, len); + } + + /* Process 128-bit chunks */ + end = ptr + (len & ~15); + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT64(ptr, 0); + k2 = READ_UINT64(ptr, 1); + doblock128x64(h1, h2, k1, k2); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 7; + if(i && i <= len) { + dobytes128x64(i, h1, h2, k1, k2, n, ptr, len); + } + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~15); + + switch(n) { /* how many bytes in c */ + case 0: /* + k1=[--------] k2=[--------] w=[76543210 fedcba98] b=[76543210 fedcba98] */ + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT64(ptr, 0); + k2 = READ_UINT64(ptr, 1); + doblock128x64(h1, h2, k1, k2); + } + break; + case 1: case 2: case 3: case 4: case 5: case 6: case 7: /* + k1=[10------] k2=[--------] w=[98765432 hgfedcba] b=[76543210 fedcba98] k1'=[hg------] */ + { + const int lshift = n*8, rshift = 64-lshift; + for( ; ptr < end ; ptr+=16) { + uint64_t c = k1>>rshift; + k2 = READ_UINT64(ptr, 0); + c |= k2<>rshift | k1<> rshift; + k2 = READ_UINT64(ptr, 0); + c |= k2 << lshift; + doblock128x64(h1, h2, k1, c); + k1 = k2 >> rshift; + k2 = READ_UINT64(ptr, 1); + k1 |= k2 << lshift; + } + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 128-bit chunks, possibly leaving 1..15 bytes */ + len -= len & ~15; + + /* Append any remaining bytes into carry */ + dobytes128x64(len, h1, h2, k1, k2, n, ptr, len); + + /* Copy out new running hash and carry */ + ph[0] = h1; + ph[1] = h2; + pcarry[0] = k1; + pcarry[1] = (k2 & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* All in one go */ + +/* MurmurHash3_x64_128 api */ +void PMurHash128x64(const void * key, const int len, uint32_t seed, void * out) +{ + uint64_t carry[2] = {0, 0}; + uint64_t h[2] = {seed, seed}; + PMurHash128x64_Process(h, carry, key, len); + PMurHash128x64_Result(h, carry, (uint32_t) len, (uint64_t *) out); +} diff --git a/ext/hash/murmur/PMurHash128.h b/ext/hash/murmur/PMurHash128.h new file mode 100644 index 0000000000000..0d372ff3555c2 --- /dev/null +++ b/ext/hash/murmur/PMurHash128.h @@ -0,0 +1,39 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This is a c++ implementation of MurmurHash3_128 with support for progressive + * processing based on PMurHash implementation written by Shane Day. + */ + +/* ------------------------------------------------------------------------- */ + +// Microsoft Visual Studio + +#if defined(_MSC_VER) && (_MSC_VER < 1600) + +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; + +// Other compilers + +#else // defined(_MSC_VER) + +#include + +#endif // !defined(_MSC_VER) + +/* ------------------------------------------------------------------------- */ +/* Formal prototypes */ + +// PMurHash128x64 +void PMurHash128x64_Process(uint64_t ph[2], uint64_t pcarry[2], const void *key, int len); +void PMurHash128x64_Result(const uint64_t ph[2], const uint64_t pcarry[2], uint32_t total_length, uint64_t out[2]); +void PMurHash128x64(const void * key, const int len, uint32_t seed, void * out); + +// PMurHash128x86 +void PMurHash128x86_Process(uint32_t ph[4], uint32_t pcarry[4], const void *key, int len); +void PMurHash128x86_Result(const uint32_t ph[4], const uint32_t pcarry[4], uint32_t total_length, uint32_t out[4]); +void PMurHash128x86(const void * key, const int len, uint32_t seed, void * out); + diff --git a/ext/hash/murmur/endianness.h b/ext/hash/murmur/endianness.h new file mode 100644 index 0000000000000..3dbb2e6a3d797 --- /dev/null +++ b/ext/hash/murmur/endianness.h @@ -0,0 +1,84 @@ +static const union { + uint8_t u8[2]; + uint16_t u16; +} EndianMix = {{ 1, 0 }}; +FORCE_INLINE int IsBigEndian() +{ + // Constant-folded by the compiler. + return EndianMix.u16 != 1; +} + +#if defined(_MSC_VER) +# include +# define BSWAP32(u) _byteswap_ulong(u) +# define BSWAP64(u) _byteswap_uint64(u) +#else +# ifdef __has_builtin +# if __has_builtin(__builtin_bswap32) +# define BSWAP32(u) __builtin_bswap32(u) +# endif // __has_builtin(__builtin_bswap32) +# if __has_builtin(__builtin_bswap64) +# define BSWAP64(u) __builtin_bswap64(u) +# endif // __has_builtin(__builtin_bswap64) +# elif defined(__GNUC__) && ( \ + __GNUC__ > 4 || ( \ + __GNUC__ == 4 && ( \ + __GNUC_MINOR__ >= 3 \ + ) \ + ) \ + ) +# define BSWAP32(u) __builtin_bswap32(u) +# define BSWAP64(u) __builtin_bswap64(u) +# endif // __has_builtin +#endif // defined(_MSC_VER) + +#ifndef BSWAP32 +FORCE_INLINE uint32_t BSWAP32(uint32_t u) +{ + return (((u & 0xff000000) >> 24) + | ((u & 0x00ff0000) >> 8) + | ((u & 0x0000ff00) << 8) + | ((u & 0x000000ff) << 24)); +} +#endif +#ifndef BSWAP64 +FORCE_INLINE uint64_t BSWAP64(uint64_t u) +{ + return (((u & 0xff00000000000000ULL) >> 56) + | ((u & 0x00ff000000000000ULL) >> 40) + | ((u & 0x0000ff0000000000ULL) >> 24) + | ((u & 0x000000ff00000000ULL) >> 8) + | ((u & 0x00000000ff000000ULL) << 8) + | ((u & 0x0000000000ff0000ULL) << 24) + | ((u & 0x000000000000ff00ULL) << 40) + | ((u & 0x00000000000000ffULL) << 56)); +} +#endif + +#if defined(__clang__) || defined(__GNUC__) && __GNUC__ >= 8 +# define NO_SANITIZE_ALIGNMENT __attribute__((no_sanitize("alignment"))) +#else +# define NO_SANITIZE_ALIGNMENT +#endif + +NO_SANITIZE_ALIGNMENT +FORCE_INLINE uint32_t getblock32 ( const uint32_t * const p, const int i) +{ + if (IsBigEndian()) { + return BSWAP32(p[i]); + } else { + return p[i]; + } +} + +NO_SANITIZE_ALIGNMENT +FORCE_INLINE uint64_t getblock64 ( const uint64_t * const p, const int i) +{ + if (IsBigEndian()) { + return BSWAP64(p[i]); + } else { + return p[i]; + } +} + +#undef NO_SANITIZE_ALIGNMENT diff --git a/ext/hash/php_hash.h b/ext/hash/php_hash.h index 33cc6a473a7a1..69d1330072daf 100644 --- a/ext/hash/php_hash.h +++ b/ext/hash/php_hash.h @@ -105,6 +105,9 @@ extern const php_hash_ops php_hash_fnv1a32_ops; extern const php_hash_ops php_hash_fnv164_ops; extern const php_hash_ops php_hash_fnv1a64_ops; extern const php_hash_ops php_hash_joaat_ops; +extern const php_hash_ops php_hash_murmur3a_ops; +extern const php_hash_ops php_hash_murmur3c_ops; +extern const php_hash_ops php_hash_murmur3f_ops; #define PHP_HASH_HAVAL_OPS(p,b) extern const php_hash_ops php_hash_##p##haval##b##_ops; diff --git a/ext/hash/php_hash_murmur.h b/ext/hash/php_hash_murmur.h new file mode 100644 index 0000000000000..100a8d1fa32f1 --- /dev/null +++ b/ext/hash/php_hash_murmur.h @@ -0,0 +1,57 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Anatol Belski | + +----------------------------------------------------------------------+ +*/ + +#ifndef PHP_HASH_MURMUR_H +#define PHP_HASH_MURMUR_H + +typedef struct { + uint32_t h; + uint32_t carry; + uint32_t len; +} PHP_MURMUR3A_CTX; +#define PHP_MURMUR3A_SPEC "lll" + +PHP_HASH_API void PHP_MURMUR3AInit(PHP_MURMUR3A_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3AUpdate(PHP_MURMUR3A_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3AFinal(unsigned char digest[4], PHP_MURMUR3A_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3ACopy(const php_hash_ops *ops, PHP_MURMUR3A_CTX *orig_context, PHP_MURMUR3A_CTX *copy_context); + +typedef struct { + uint32_t h[4]; + uint32_t carry[4]; + uint32_t len; +} PHP_MURMUR3C_CTX; +#define PHP_MURMUR3C_SPEC "lllllllll" + +PHP_HASH_API void PHP_MURMUR3CInit(PHP_MURMUR3C_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3CUpdate(PHP_MURMUR3C_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3CFinal(unsigned char digest[16], PHP_MURMUR3C_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3CCopy(const php_hash_ops *ops, PHP_MURMUR3C_CTX *orig_context, PHP_MURMUR3C_CTX *copy_context); + +typedef struct { + uint64_t h[2]; + uint64_t carry[2]; + uint32_t len; +} PHP_MURMUR3F_CTX; +#define PHP_MURMUR3F_SPEC "qqqql" + +PHP_HASH_API void PHP_MURMUR3FInit(PHP_MURMUR3F_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3FUpdate(PHP_MURMUR3F_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3FFinal(unsigned char digest[16], PHP_MURMUR3F_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3FCopy(const php_hash_ops *ops, PHP_MURMUR3F_CTX *orig_context, PHP_MURMUR3F_CTX *copy_context); + +#endif /* PHP_HASH_MURMUR_H */ + diff --git a/ext/hash/tests/hash-clone.phpt b/ext/hash/tests/hash-clone.phpt index 57567c0bc5014..232d0a437f602 100644 --- a/ext/hash/tests/hash-clone.phpt +++ b/ext/hash/tests/hash-clone.phpt @@ -143,6 +143,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -302,6 +311,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "aaebf370" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_algos.phpt b/ext/hash/tests/hash_algos.phpt index cff71a7771235..5327ed31e23d6 100644 --- a/ext/hash/tests/hash_algos.phpt +++ b/ext/hash/tests/hash_algos.phpt @@ -9,7 +9,7 @@ var_dump(hash_algos()); ?> --EXPECTF-- *** Testing hash_algos() : basic functionality *** -array(53) { +array(56) { [%d]=> string(3) "md2" [%d]=> @@ -87,6 +87,12 @@ array(53) { [%d]=> string(5) "joaat" [%d]=> + string(8) "murmur3a" + [%d]=> + string(8) "murmur3c" + [%d]=> + string(8) "murmur3f" + [%d]=> string(10) "haval128,3" [%d]=> string(10) "haval160,3" diff --git a/ext/hash/tests/hash_copy_001.phpt b/ext/hash/tests/hash_copy_001.phpt index 271326178d523..ce76d18110dd4 100644 --- a/ext/hash/tests/hash_copy_001.phpt +++ b/ext/hash/tests/hash_copy_001.phpt @@ -143,6 +143,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -302,6 +311,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "aaebf370" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_serialize_001.phpt b/ext/hash/tests/hash_serialize_001.phpt index d515d2c5c55cd..409460d05b97e 100644 --- a/ext/hash/tests/hash_serialize_001.phpt +++ b/ext/hash/tests/hash_serialize_001.phpt @@ -154,6 +154,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -313,6 +322,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "836fb0e5" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "18578d03" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "28249178bb182686ef793aa56abb6aea" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_serialize_002.phpt b/ext/hash/tests/hash_serialize_002.phpt index b6b4ccfb5eab7..c86a47cd7e88e 100644 --- a/ext/hash/tests/hash_serialize_002.phpt +++ b/ext/hash/tests/hash_serialize_002.phpt @@ -4,7 +4,7 @@ Hash: serialize()/unserialize() with HASH_HMAC +--EXPECT-- +f6a5c420 +8036c2707453c6f37348142be7eaf75c +c7009299985a5627a9280372a9280372 +40256ed26fa6ece7785092ed33c8b659 +c43668294e89db0ba5772846e5804467 +6440964d 6440964d +2bcadca212d62deb69712a721e593089 2bcadca212d62deb69712a721e593089 +81514cc240f57a165c95eb63f9c0eedf 81514cc240f57a165c95eb63f9c0eedf diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4 index d5ef64022ac36..ac57c81e7d472 100644 --- a/ext/iconv/config.m4 +++ b/ext/iconv/config.m4 @@ -92,7 +92,7 @@ int main() { int main() { iconv_t cd; - cd = iconv_open( "*blahblah*", "*blahblah*" ); + cd = iconv_open( "*blahblah*", "*blahblahblah*" ); if (cd == (iconv_t)(-1)) { if (errno == EINVAL) { return 0; diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 98085884ab87e..4c72c90ff625f 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -798,7 +798,9 @@ PHP_FUNCTION(imap_open) } #endif + ZEND_IGNORE_LEAKS_BEGIN(); imap_stream = mail_open(NIL, ZSTR_VAL(mailbox), flags); + ZEND_IGNORE_LEAKS_END(); if (imap_stream == NIL) { php_error_docref(NULL, E_WARNING, "Couldn't open stream %s", ZSTR_VAL(mailbox)); @@ -865,7 +867,7 @@ PHP_FUNCTION(imap_reopen) imap_le_struct->imap_stream = mail_open(imap_le_struct->imap_stream, ZSTR_VAL(mailbox), flags); if (imap_le_struct->imap_stream == NIL) { - zend_list_delete(Z_RES_P(streamind)); + zend_list_close(Z_RES_P(streamind)); php_error_docref(NULL, E_WARNING, "Couldn't re-open stream"); RETURN_FALSE; } @@ -1757,7 +1759,9 @@ PHP_FUNCTION(imap_lsub) IMAPG(folderlist_style) = FLIST_ARRAY; IMAPG(imap_sfolders) = NIL; + ZEND_IGNORE_LEAKS_BEGIN(); mail_lsub(imap_le_struct->imap_stream, ZSTR_VAL(ref), ZSTR_VAL(pat)); + ZEND_IGNORE_LEAKS_END(); if (IMAPG(imap_sfolders) == NIL) { RETURN_FALSE; } @@ -1795,7 +1799,9 @@ PHP_FUNCTION(imap_getsubscribed) IMAPG(folderlist_style) = FLIST_OBJECT; IMAPG(imap_sfolder_objects) = IMAPG(imap_sfolder_objects_tail) = NIL; + ZEND_IGNORE_LEAKS_BEGIN(); mail_lsub(imap_le_struct->imap_stream, ZSTR_VAL(ref), ZSTR_VAL(pat)); + ZEND_IGNORE_LEAKS_END(); if (IMAPG(imap_sfolder_objects) == NIL) { RETURN_FALSE; } @@ -2244,8 +2250,9 @@ PHP_FUNCTION(imap_rfc822_write_address) if (string) { RETVAL_STR(string); } else { - RETURN_FALSE; + RETVAL_FALSE; } + mail_free_address(&addr); } /* }}} */ @@ -2700,14 +2707,15 @@ PHP_FUNCTION(imap_sort) { zval *streamind; zend_string *criteria = NULL, *charset = NULL; - zend_long sort, rev, flags = 0; + zend_long sort, flags = 0; + zend_bool rev; pils *imap_le_struct; unsigned long *slst, *sl; char *search_criteria; SORTPGM *mypgm=NIL; SEARCHPGM *spg=NIL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rll|lS!S!", &streamind, &sort, &rev, &flags, &criteria, &charset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlb|lS!S!", &streamind, &sort, &rev, &flags, &criteria, &charset) == FAILURE) { RETURN_THROWS(); } @@ -2733,6 +2741,9 @@ PHP_FUNCTION(imap_sort) } else { spg = mail_newsearchpgm(); } + if (spg == NIL) { + RETURN_FALSE; + } mypgm = mail_newsortpgm(); mypgm->reverse = rev; @@ -2741,12 +2752,13 @@ PHP_FUNCTION(imap_sort) slst = mail_sort(imap_le_struct->imap_stream, (charset ? ZSTR_VAL(charset) : NIL), spg, mypgm, flags); + mail_free_sortpgm(&mypgm); if (spg && !(flags & SE_FREE)) { mail_free_searchpgm(&spg); } array_init(return_value); - if (slst != NIL && slst != 0) { + if (slst != NULL) { for (sl = slst; *sl; sl++) { add_next_index_long(return_value, *sl); } @@ -3081,7 +3093,7 @@ PHP_FUNCTION(imap_fetch_overview) /* {{{ Create a MIME message based on given envelope and body sections */ PHP_FUNCTION(imap_mail_compose) { - zval *envelope, *body; + HashTable *envelope, *body; zend_string *key; zval *data, *pvalue, *disp_data, *env_data; char *cookie = NIL; @@ -3093,64 +3105,69 @@ PHP_FUNCTION(imap_mail_compose) int toppart = 0; int first; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "aa", &envelope, &body) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "h/h/", &envelope, &body) == FAILURE) { RETURN_THROWS(); } + if (zend_hash_num_elements(body) == 0) { + zend_argument_value_error(2, "cannot be empty"); + } + #define PHP_RFC822_PARSE_ADRLIST(target, value) \ str_copy = estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value)); \ rfc822_parse_adrlist(target, str_copy, "NO HOST"); \ efree(str_copy); env = mail_newenvelope(); - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "remail", sizeof("remail") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "remail", sizeof("remail") - 1)) != NULL) { convert_to_string_ex(pvalue); env->remail = cpystr(Z_STRVAL_P(pvalue)); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "return_path", sizeof("return_path") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "return_path", sizeof("return_path") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->return_path, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "date", sizeof("date") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "date", sizeof("date") - 1)) != NULL) { convert_to_string_ex(pvalue); env->date = (unsigned char*)cpystr(Z_STRVAL_P(pvalue)); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "from", sizeof("from") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "from", sizeof("from") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->from, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "reply_to", sizeof("reply_to") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "reply_to", sizeof("reply_to") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->reply_to, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "in_reply_to", sizeof("in_reply_to") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "in_reply_to", sizeof("in_reply_to") - 1)) != NULL) { convert_to_string_ex(pvalue); env->in_reply_to = cpystr(Z_STRVAL_P(pvalue)); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "subject", sizeof("subject") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "subject", sizeof("subject") - 1)) != NULL) { convert_to_string_ex(pvalue); env->subject = cpystr(Z_STRVAL_P(pvalue)); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "to", sizeof("to") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "to", sizeof("to") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->to, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "cc", sizeof("cc") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "cc", sizeof("cc") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->cc, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "bcc", sizeof("bcc") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "bcc", sizeof("bcc") - 1)) != NULL) { convert_to_string_ex(pvalue); PHP_RFC822_PARSE_ADRLIST(&env->bcc, pvalue); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "message_id", sizeof("message_id") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "message_id", sizeof("message_id") - 1)) != NULL) { convert_to_string_ex(pvalue); env->message_id=cpystr(Z_STRVAL_P(pvalue)); } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "custom_headers", sizeof("custom_headers") - 1)) != NULL) { + if ((pvalue = zend_hash_str_find(envelope, "custom_headers", sizeof("custom_headers") - 1)) != NULL) { if (Z_TYPE_P(pvalue) == IS_ARRAY) { custom_headers_param = tmp_param = NULL; + SEPARATE_ARRAY(pvalue); ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pvalue), env_data) { custom_headers_param = mail_newbody_parameter(); convert_to_string_ex(env_data); @@ -3164,24 +3181,35 @@ PHP_FUNCTION(imap_mail_compose) } first = 1; - ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(body), data) { + ZEND_HASH_FOREACH_VAL(body, data) { if (first) { first = 0; if (Z_TYPE_P(data) != IS_ARRAY) { - // TODO ValueError - php_error_docref(NULL, E_WARNING, "body parameter must be a non-empty array"); - RETURN_FALSE; + zend_argument_type_error(2, "individual body must be of type array, %s given", + zend_zval_type_name(data)); + goto done; + } + if (zend_hash_num_elements(Z_ARRVAL_P(data)) == 0) { + zend_argument_value_error(2, "individual body cannot be empty"); + goto done; } + SEPARATE_ARRAY(data); bod = mail_newbody(); topbod = bod; if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) { - bod->type = (short) zval_get_long(pvalue); + zend_long type = zval_get_long(pvalue); + if (type >= 0 && type <= TYPEMAX && body_types[type] != NULL) { + bod->type = (short) type; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "encoding", sizeof("encoding") - 1)) != NULL) { - bod->encoding = (short) zval_get_long(pvalue); + zend_long encoding = zval_get_long(pvalue); + if (encoding >= 0 && encoding <= ENCMAX && body_encodings[encoding] != NULL) { + bod->encoding = (short) encoding; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) { convert_to_string_ex(pvalue); @@ -3194,7 +3222,9 @@ PHP_FUNCTION(imap_mail_compose) if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) { if(Z_TYPE_P(pvalue) == IS_ARRAY) { disp_param = tmp_param = NULL; + SEPARATE_ARRAY(pvalue); ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) { + if (key == NULL) continue; disp_param = mail_newbody_parameter(); disp_param->attribute = cpystr(ZSTR_VAL(key)); convert_to_string_ex(disp_data); @@ -3226,7 +3256,9 @@ PHP_FUNCTION(imap_mail_compose) if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) { if (Z_TYPE_P(pvalue) == IS_ARRAY) { disp_param = tmp_param = NULL; + SEPARATE_ARRAY(pvalue); ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) { + if (key == NULL) continue; disp_param = mail_newbody_parameter(); disp_param->attribute = cpystr(ZSTR_VAL(key)); convert_to_string_ex(disp_data); @@ -3238,15 +3270,19 @@ PHP_FUNCTION(imap_mail_compose) bod->disposition.parameter = disp_param; } } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { - convert_to_string_ex(pvalue); - bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); - memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1); - bod->contents.text.size = Z_STRLEN_P(pvalue); + if (bod->type == TYPEMESSAGE && bod->subtype && !strcmp(bod->subtype, "RFC822")) { + bod->nested.msg = mail_newmsg(); } else { - bod->contents.text.data = fs_get(1); - memcpy(bod->contents.text.data, "", 1); - bod->contents.text.size = 0; + if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { + convert_to_string_ex(pvalue); + bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); + memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1); + bod->contents.text.size = Z_STRLEN_P(pvalue); + } else { + bod->contents.text.data = fs_get(1); + memcpy(bod->contents.text.data, "", 1); + bod->contents.text.size = 0; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "lines", sizeof("lines") - 1)) != NULL) { bod->size.lines = zval_get_long(pvalue); @@ -3258,10 +3294,14 @@ PHP_FUNCTION(imap_mail_compose) convert_to_string_ex(pvalue); bod->md5 = cpystr(Z_STRVAL_P(pvalue)); } - } else if (Z_TYPE_P(data) == IS_ARRAY) { - short type = -1; + } else if (Z_TYPE_P(data) == IS_ARRAY && topbod->type == TYPEMULTIPART) { + short type = 0; + SEPARATE_ARRAY(data); if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) { - type = (short) zval_get_long(pvalue); + zend_long tmp_type = zval_get_long(pvalue); + if (tmp_type >= 0 && tmp_type <= TYPEMAX && tmp_type != TYPEMULTIPART && body_types[tmp_type] != NULL) { + type = (short) tmp_type; + } } if (!toppart) { @@ -3274,13 +3314,13 @@ PHP_FUNCTION(imap_mail_compose) } bod = &mypart->body; - - if (type != TYPEMULTIPART) { - bod->type = type; - } + bod->type = type; if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "encoding", sizeof("encoding") - 1)) != NULL) { - bod->encoding = (short) zval_get_long(pvalue); + zend_long encoding = zval_get_long(pvalue); + if (encoding >= 0 && encoding <= ENCMAX && body_encodings[encoding] != NULL) { + bod->encoding = (short) encoding; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) { convert_to_string_ex(pvalue); @@ -3294,7 +3334,9 @@ PHP_FUNCTION(imap_mail_compose) if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) { if (Z_TYPE_P(pvalue) == IS_ARRAY) { disp_param = tmp_param = NULL; + SEPARATE_ARRAY(pvalue); ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) { + if (key == NULL) continue; disp_param = mail_newbody_parameter(); disp_param->attribute = cpystr(ZSTR_VAL(key)); convert_to_string_ex(disp_data); @@ -3326,7 +3368,9 @@ PHP_FUNCTION(imap_mail_compose) if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) { if (Z_TYPE_P(pvalue) == IS_ARRAY) { disp_param = tmp_param = NULL; + SEPARATE_ARRAY(pvalue); ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) { + if (key == NULL) continue; disp_param = mail_newbody_parameter(); disp_param->attribute = cpystr(ZSTR_VAL(key)); convert_to_string_ex(disp_data); @@ -3338,15 +3382,19 @@ PHP_FUNCTION(imap_mail_compose) bod->disposition.parameter = disp_param; } } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { - convert_to_string_ex(pvalue); - bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); - memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1); - bod->contents.text.size = Z_STRLEN_P(pvalue); + if (bod->type == TYPEMESSAGE && bod->subtype && !strcmp(bod->subtype, "RFC822")) { + bod->nested.msg = mail_newmsg(); } else { - bod->contents.text.data = fs_get(1); - memcpy(bod->contents.text.data, "", 1); - bod->contents.text.size = 0; + if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { + convert_to_string_ex(pvalue); + bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); + memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1); + bod->contents.text.size = Z_STRLEN_P(pvalue); + } else { + bod->contents.text.data = fs_get(1); + memcpy(bod->contents.text.data, "", 1); + bod->contents.text.size = 0; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "lines", sizeof("lines") - 1)) != NULL) { bod->size.lines = zval_get_long(pvalue); @@ -3361,12 +3409,6 @@ PHP_FUNCTION(imap_mail_compose) } } ZEND_HASH_FOREACH_END(); - if (first) { - // TODO ValueError - php_error_docref(NULL, E_WARNING, "body parameter must be a non-empty array"); - RETURN_FALSE; - } - if (bod && bod->type == TYPEMULTIPART && (!bod->nested.part || !bod->nested.part->next)) { php_error_docref(NULL, E_WARNING, "Cannot generate multipart e-mail without components."); RETVAL_FALSE; @@ -3447,7 +3489,7 @@ PHP_FUNCTION(imap_mail_compose) bod=&part->body; - spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF); + spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data ? (char *) bod->contents.text.data : "", CRLF); efree(mystring); mystring=tempstring; } while ((part = part->next)); /* until done */ @@ -3457,7 +3499,7 @@ PHP_FUNCTION(imap_mail_compose) efree(mystring); mystring=tempstring; } else if (bod) { - spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF); + spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data ? (char *) bod->contents.text.data : "", CRLF); efree(mystring); mystring=tempstring; } else { @@ -3490,6 +3532,7 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message, ZEND_ASSERT(to && ZSTR_LEN(to) != 0); ZEND_ASSERT(subject && ZSTR_LEN(subject) != 0); + ZEND_ASSERT(message); #ifdef PHP_WIN32 char *tempMailTo; @@ -3602,7 +3645,7 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message, } if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, bufferHeader, ZSTR_VAL(subject), - bufferTo, ZSTR_VAL(message), bufferCc, bufferBcc, ZSTR_VAL(rpath)) != SUCCESS) { + bufferTo, ZSTR_VAL(message), bufferCc, bufferBcc, rpath ? ZSTR_VAL(rpath) : NULL) != SUCCESS) { if (tsm_errmsg) { php_error_docref(NULL, E_WARNING, "%s", tsm_errmsg); efree(tsm_errmsg); @@ -3619,14 +3662,23 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message, } sendmail = popen(INI_STR("sendmail_path"), "w"); if (sendmail) { - if (ZSTR_LEN(rpath) != 0) fprintf(sendmail, "From: %s\n", ZSTR_VAL(rpath)); + if (rpath && ZSTR_LEN(rpath) != 0) { + fprintf(sendmail, "From: %s\n", ZSTR_VAL(rpath)); + } + /* to cannot be a null pointer, asserted earlier on */ fprintf(sendmail, "To: %s\n", ZSTR_VAL(to)); - if (ZSTR_LEN(cc) != 0) fprintf(sendmail, "Cc: %s\n", ZSTR_VAL(cc)); - if (ZSTR_LEN(bcc) != 0) fprintf(sendmail, "Bcc: %s\n", ZSTR_VAL(bcc)); + if (cc && ZSTR_LEN(cc) != 0) { + fprintf(sendmail, "Cc: %s\n", ZSTR_VAL(cc)); + } + if (bcc && ZSTR_LEN(bcc) != 0) { + fprintf(sendmail, "Bcc: %s\n", ZSTR_VAL(bcc)); + } + /* subject cannot be a null pointer, asserted earlier on */ fprintf(sendmail, "Subject: %s\n", ZSTR_VAL(subject)); - if (headers != NULL) { + if (headers && ZSTR_LEN(headers) != 0) { fprintf(sendmail, "%s\n", ZSTR_VAL(headers)); } + /* message cannot be a null pointer, asserted earlier on */ fprintf(sendmail, "\n%s\n", ZSTR_VAL(message)); ret = pclose(sendmail); diff --git a/ext/imap/php_imap.stub.php b/ext/imap/php_imap.stub.php index 0a7adc2736977..7b3d01afa0e0e 100644 --- a/ext/imap/php_imap.stub.php +++ b/ext/imap/php_imap.stub.php @@ -5,209 +5,208 @@ /** * @return resource|false */ -function imap_open(string $mailbox, string $user, string $password, int $options = 0, int $n_retries = 0, array $params = []) {} +function imap_open(string $mailbox, string $user, string $password, int $flags = 0, int $retries = 0, array $options = []) {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_reopen($stream_id, string $mailbox, int $options = 0, int $n_retries = 0): bool {} +function imap_reopen($imap, string $mailbox, int $flags = 0, int $retries = 0): bool {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_close($stream_id, int $options = 0): bool {} +function imap_close($imap, int $flags = 0): bool {} -/** @param resource $stream_id */ -function imap_num_msg($stream_id): int|false {} +/** @param resource $imap */ +function imap_num_msg($imap): int|false {} -/** @param resource $stream_id */ -function imap_num_recent($stream_id): int|false {} +/** @param resource $imap */ +function imap_num_recent($imap): int|false {} -/** @param resource $stream_id */ -function imap_headers($stream_id): array|false {} +/** @param resource $imap */ +function imap_headers($imap): array|false {} -/** @param resource $stream_id */ -function imap_headerinfo($stream_id, int $msg_no, int $from_length = 0, int $subject_length = 0): stdClass|false {} +/** @param resource $imap */ +function imap_headerinfo($imap, int $message_num, int $from_length = 0, int $subject_length = 0): stdClass|false {} -function imap_rfc822_parse_headers(string $headers, string $default_host = "UNKNOWN"): stdClass {} +function imap_rfc822_parse_headers(string $headers, string $default_hostname = "UNKNOWN"): stdClass {} -function imap_rfc822_write_address(string $mailbox, string $host, string $personal): string|false {} +function imap_rfc822_write_address(string $mailbox, string $hostname, string $personal): string|false {} -function imap_rfc822_parse_adrlist(string $address_string, string $default_host): array {} +function imap_rfc822_parse_adrlist(string $string, string $default_hostname): array {} -/** @param resource $stream_id */ -function imap_body($stream_id, int $msg_no, int $options = 0): string|false {} +/** @param resource $imap */ +function imap_body($imap, int $message_num, int $flags = 0): string|false {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_body */ -function imap_fetchtext($stream_id, int $msg_no, int $options = 0): string|false {} +function imap_fetchtext($imap, int $message_num, int $flags = 0): string|false {} /** - * @param resource $stream_id + * @param resource $imap * @return stdClass|false */ -function imap_bodystruct($stream_id, int $msg_no, string $section) {} +function imap_bodystruct($imap, int $message_num, string $section) {} -/** @param resource $stream_id */ -function imap_fetchbody($stream_id, int $msg_no, string $section, int $options = 0): string|false {} +/** @param resource $imap */ +function imap_fetchbody($imap, int $message_num, string $section, int $flags = 0): string|false {} -/** @param resource $stream_id */ -function imap_fetchmime($stream_id, int $msg_no, string $section, int $options = 0): string|false {} +/** @param resource $imap */ +function imap_fetchmime($imap, int $message_num, string $section, int $flags = 0): string|false {} /** - * @param resource $stream_id + * @param resource $imap * @param resource|string|int $file */ -function imap_savebody($stream_id, $file, int $msg_no, string $section = "", int $options = 0): bool {} +function imap_savebody($imap, $file, int $message_num, string $section = "", int $flags = 0): bool {} -/** @param resource $stream_id */ -function imap_fetchheader($stream_id, int $msg_no, int $options = 0): string|false {} +/** @param resource $imap */ +function imap_fetchheader($imap, int $message_num, int $flags = 0): string|false {} -/** @param resource $stream_id */ -function imap_fetchstructure($stream_id, int $msg_no, int $options = 0): stdClass|false {} +/** @param resource $imap */ +function imap_fetchstructure($imap, int $message_num, int $flags = 0): stdClass|false {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_gc($stream_id, int $flags): bool {} +function imap_gc($imap, int $flags): bool {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_expunge($stream_id): bool {} +function imap_expunge($imap): bool {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_delete($stream_id, string $msg_no, int $options = 0): bool {} +function imap_delete($imap, string $message_num, int $flags = 0): bool {} /** - * @param resource $stream_id + * @param resource $imap */ -function imap_undelete($stream_id, string $msg_no, int $options = 0): bool {} +function imap_undelete($imap, string $message_num, int $flags = 0): bool {} -/** @param resource $stream_id */ -function imap_check($stream_id): stdClass|false {} +/** @param resource $imap */ +function imap_check($imap): stdClass|false {} -/** @param resource $stream_id */ -function imap_listscan($stream_id, string $ref, string $pattern, string $content): array|false {} +/** @param resource $imap */ +function imap_listscan($imap, string $reference, string $pattern, string $content): array|false {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_listscan */ -function imap_scan($stream_id, string $ref, string $pattern, string $content): array|false {} +function imap_scan($imap, string $reference, string $pattern, string $content): array|false {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_listscan */ -function imap_scanmailbox($stream_id, string $ref, string $pattern, string $content): array|false {} +function imap_scanmailbox($imap, string $reference, string $pattern, string $content): array|false {} -/** @param resource $stream_id */ -function imap_mail_copy($stream_id, string $msglist, string $mailbox, int $options = 0): bool {} +/** @param resource $imap */ +function imap_mail_copy($imap, string $message_nums, string $mailbox, int $flags = 0): bool {} -/** @param resource $stream_id */ -function imap_mail_move($stream_id, string $sequence, string $mailbox, int $options = 0): bool {} +/** @param resource $imap */ +function imap_mail_move($imap, string $message_nums, string $mailbox, int $flags = 0): bool {} -function imap_mail_compose(array $envelope, array $body): string|false {} +function imap_mail_compose(array $envelope, array $bodies): string|false {} -/** @param resource $stream_id */ -function imap_createmailbox($stream_id, string $mailbox): bool {} +/** @param resource $imap */ +function imap_createmailbox($imap, string $mailbox): bool {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_createmailbox */ -function imap_create($stream_id, string $mailbox): bool {} +function imap_create($imap, string $mailbox): bool {} -/** @param resource $stream_id */ -function imap_renamemailbox($stream_id, string $old_name, string $new_name): bool {} +/** @param resource $imap */ +function imap_renamemailbox($imap, string $from, string $to): bool {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_renamemailbox */ -function imap_rename($stream_id, string $old_name, string $new_name): bool {} +function imap_rename($imap, string $from, string $to): bool {} -/** @param resource $stream_id */ -function imap_deletemailbox($stream_id, string $mailbox): bool {} +/** @param resource $imap */ +function imap_deletemailbox($imap, string $mailbox): bool {} -/** @param resource $stream_id */ -function imap_subscribe($stream_id, string $mailbox): bool {} +/** @param resource $imap */ +function imap_subscribe($imap, string $mailbox): bool {} -/** @param resource $stream_id */ -function imap_unsubscribe($stream_id, string $mailbox): bool {} +/** @param resource $imap */ +function imap_unsubscribe($imap, string $mailbox): bool {} -/** @param resource $stream_id */ -function imap_append($stream_id, string $folder, string $message, ?string $options = null, ?string $internal_date = null): bool {} +/** @param resource $imap */ +function imap_append($imap, string $folder, string $message, ?string $options = null, ?string $internal_date = null): bool {} -/** @param resource $stream_id */ -function imap_ping($stream_id): bool {} +/** @param resource $imap */ +function imap_ping($imap): bool {} -function imap_base64(string $text): string|false {} +function imap_base64(string $string): string|false {} -function imap_qprint(string $text): string|false {} +function imap_qprint(string $string): string|false {} -function imap_8bit(string $text): string|false {} - -function imap_binary(string $text): string|false {} +function imap_8bit(string $string): string|false {} +function imap_binary(string $string): string|false {} function imap_utf8(string $mime_encoded_text): string {} /** - * @param resource $stream_id + * @param resource $imap * @return stdClass|false */ -function imap_status($stream_id, string $mailbox, int $options) {} +function imap_status($imap, string $mailbox, int $flags) {} -/** @param resource $stream_id */ -function imap_mailboxmsginfo($stream_id): stdClass {} +/** @param resource $imap */ +function imap_mailboxmsginfo($imap): stdClass {} -/** @param resource $stream_id */ -function imap_setflag_full($stream_id, string $sequence, string $flag, int $options = 0): bool {} +/** @param resource $imap */ +function imap_setflag_full($imap, string $sequence, string $flag, int $options = 0): bool {} -/** @param resource $stream_id */ -function imap_clearflag_full($stream_id, string $sequence, string $flag, int $options = 0): bool {} +/** @param resource $imap */ +function imap_clearflag_full($imap, string $sequence, string $flag, int $options = 0): bool {} -/** @param resource $stream_id */ -function imap_sort($stream_id, int $criteria, int $reverse, int $options = 0, ?string $search_criteria = null, ?string $charset = null): array|false {} +/** @param resource $imap */ +function imap_sort($imap, int $criteria, bool $reverse, int $flags = 0, ?string $search_criteria = null, ?string $charset = null): array|false {} -/** @param resource $stream_id */ -function imap_uid($stream_id, int $msg_no): int|false {} +/** @param resource $imap */ +function imap_uid($imap, int $message_num): int|false {} -/** @param resource $stream_id */ -function imap_msgno($stream_id, int $unique_msg_id): int|false {} +/** @param resource $imap */ +function imap_msgno($imap, int $message_uid): int|false {} -/** @param resource $stream_id */ -function imap_list($stream_id, string $ref, string $pattern): array|false {} +/** @param resource $imap */ +function imap_list($imap, string $reference, string $pattern): array|false {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_list */ -function imap_listmailbox($stream_id, string $ref, string $pattern): array|false {} +function imap_listmailbox($imap, string $reference, string $pattern): array|false {} -/** @param resource $stream_id */ -function imap_lsub($stream_id, string $ref, string $pattern): array|false {} +/** @param resource $imap */ +function imap_lsub($imap, string $reference, string $pattern): array|false {} /** - * @param resource $stream_id + * @param resource $imap * @alias imap_lsub */ -function imap_listsubscribed($stream_id, string $ref, string $pattern): array|false {} +function imap_listsubscribed($imap, string $reference, string $pattern): array|false {} -/** @param resource $stream_id */ -function imap_getsubscribed($stream_id, string $ref, string $pattern): array|false {} +/** @param resource $imap */ +function imap_getsubscribed($imap, string $reference, string $pattern): array|false {} -/** @param resource $stream_id */ -function imap_getmailboxes($stream_id, string $ref, string $pattern): array|false {} +/** @param resource $imap */ +function imap_getmailboxes($imap, string $reference, string $pattern): array|false {} -/** @param resource $stream_id */ -function imap_fetch_overview($stream_id, string $sequence, int $options = 0): array|false {} +/** @param resource $imap */ +function imap_fetch_overview($imap, string $sequence, int $flags = 0): array|false {} function imap_alerts(): array|false {} @@ -215,41 +214,41 @@ function imap_errors(): array|false {} function imap_last_error(): string|false {} -/** @param resource $stream_id */ -function imap_search($stream_id, string $criteria, int $options = SE_FREE, string $charset = ""): array|false {} +/** @param resource $imap */ +function imap_search($imap, string $criteria, int $flags = SE_FREE, string $charset = ""): array|false {} -function imap_utf7_decode(string $buf): string|false {} +function imap_utf7_decode(string $string): string|false {} -function imap_utf7_encode(string $buf): string {} +function imap_utf7_encode(string $string): string {} #ifdef HAVE_IMAP_MUTF7 -function imap_utf8_to_mutf7(string $in): string|false {} +function imap_utf8_to_mutf7(string $string): string|false {} -function imap_mutf7_to_utf8(string $in): string|false {} +function imap_mutf7_to_utf8(string $string): string|false {} #endif -function imap_mime_header_decode(string $str): array|false {} +function imap_mime_header_decode(string $string): array|false {} -/** @param resource $stream_id */ -function imap_thread($stream_id, int $options = SE_FREE): array|false {} +/** @param resource $imap */ +function imap_thread($imap, int $flags = SE_FREE): array|false {} function imap_timeout(int $timeout_type, int $timeout = -1): int|bool {} #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) -/** @param resource $stream_id */ -function imap_get_quota($stream_id, string $qroot): array|false {} +/** @param resource $imap */ +function imap_get_quota($imap, string $quota_root): array|false {} -/** @param resource $stream_id */ -function imap_get_quotaroot($stream_id, string $mbox): array|false {} +/** @param resource $imap */ +function imap_get_quotaroot($imap, string $mailbox): array|false {} -/** @param resource $stream_id */ -function imap_set_quota($stream_id, string $qroot, int $mailbox_size): bool {} +/** @param resource $imap */ +function imap_set_quota($imap, string $quota_root, int $mailbox_size): bool {} -/** @param resource $stream_id */ -function imap_setacl($stream_id, string $mailbox, string $id, string $rights): bool {} +/** @param resource $imap */ +function imap_setacl($imap, string $mailbox, string $user_id, string $rights): bool {} -/** @param resource $stream_id */ -function imap_getacl($stream_id, string $mailbox): array|false {} +/** @param resource $imap */ +function imap_getacl($imap, string $mailbox): array|false {} #endif -function imap_mail(string $to, string $subject, string $message, ?string $additional_headers = null, ?string $cc = null, ?string $bcc = null, ?string $rpath = null): bool {} +function imap_mail(string $to, string $subject, string $message, ?string $additional_headers = null, ?string $cc = null, ?string $bcc = null, ?string $return_path = null): bool {} diff --git a/ext/imap/php_imap_arginfo.h b/ext/imap/php_imap_arginfo.h index ffb60a034f890..b1ff14da91dde 100644 --- a/ext/imap/php_imap_arginfo.h +++ b/ext/imap/php_imap_arginfo.h @@ -1,123 +1,123 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: e501d6869d721ad720a1a7c8b597b96e9591d5ed */ + * Stub hash: 326cb0410034aecc702e9397cd88ef91adaa254c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_open, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, user, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, n_retries, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retries, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_reopen, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, n_retries, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retries, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_close, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_num_msg, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_END_ARG_INFO() #define arginfo_imap_num_recent arginfo_imap_num_msg ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_headers, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imap_headerinfo, 0, 2, stdClass, MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, from_length, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, subject_length, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_imap_rfc822_parse_headers, 0, 1, stdClass, 0) ZEND_ARG_TYPE_INFO(0, headers, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, default_host, IS_STRING, 0, "\"UNKNOWN\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, default_hostname, IS_STRING, 0, "\"UNKNOWN\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_rfc822_write_address, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, personal, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_rfc822_parse_adrlist, 0, 2, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, address_string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, default_host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, default_hostname, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_body, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_imap_fetchtext arginfo_imap_body ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_bodystruct, 0, 0, 3) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, section, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_fetchbody, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, section, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_imap_fetchmime arginfo_imap_fetchbody ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_savebody, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_INFO(0, file) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, section, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_imap_fetchheader arginfo_imap_body ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imap_fetchstructure, 0, 2, stdClass, MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_gc, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_expunge, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_delete, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_imap_undelete arginfo_imap_delete ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imap_check, 0, 1, stdClass, MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_listscan, 0, 4, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, ref, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, reference, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -127,35 +127,30 @@ ZEND_END_ARG_INFO() #define arginfo_imap_scanmailbox arginfo_imap_listscan ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_mail_copy, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msglist, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_nums, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_mail_move, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, sequence, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") -ZEND_END_ARG_INFO() +#define arginfo_imap_mail_move arginfo_imap_mail_copy ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_mail_compose, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, envelope, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, body, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, bodies, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_createmailbox, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_imap_create arginfo_imap_createmailbox ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_renamemailbox, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, old_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, new_name, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_imap_rename arginfo_imap_renamemailbox @@ -167,7 +162,7 @@ ZEND_END_ARG_INFO() #define arginfo_imap_unsubscribe arginfo_imap_createmailbox ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_append, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, folder, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_STRING, 1, "null") @@ -177,7 +172,7 @@ ZEND_END_ARG_INFO() #define arginfo_imap_ping arginfo_imap_expunge ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_base64, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_imap_qprint arginfo_imap_base64 @@ -191,17 +186,17 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_utf8, 0, 1, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_status, 0, 0, 3) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_imap_mailboxmsginfo, 0, 1, stdClass, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_setflag_full, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, sequence, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, flag, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") @@ -210,27 +205,27 @@ ZEND_END_ARG_INFO() #define arginfo_imap_clearflag_full arginfo_imap_setflag_full ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_sort, 0, 3, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, criteria, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, reverse, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, reverse, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, search_criteria, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, charset, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_uid, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, msg_no, IS_LONG, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_num, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_msgno, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, unique_msg_id, IS_LONG, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, message_uid, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_list, 0, 3, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, ref, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, reference, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -245,9 +240,9 @@ ZEND_END_ARG_INFO() #define arginfo_imap_getmailboxes arginfo_imap_list ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_fetch_overview, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, sequence, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_alerts, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -259,23 +254,21 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_last_error, 0, 0, MAY_BE_ST ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_search, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, criteria, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "SE_FREE") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SE_FREE") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, charset, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_utf7_decode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) -ZEND_END_ARG_INFO() +#define arginfo_imap_utf7_decode arginfo_imap_base64 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_utf7_encode, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() #if defined(HAVE_IMAP_MUTF7) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_utf8_to_mutf7, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, in, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() #endif @@ -284,12 +277,12 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_mime_header_decode, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_thread, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "SE_FREE") + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SE_FREE") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_timeout, 0, 1, MAY_BE_LONG|MAY_BE_BOOL) @@ -299,40 +292,37 @@ ZEND_END_ARG_INFO() #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_get_quota, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, qroot, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, quota_root, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_get_quotaroot, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, mbox, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_set_quota, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, qroot, IS_STRING, 0) + ZEND_ARG_INFO(0, imap) + ZEND_ARG_TYPE_INFO(0, quota_root, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, mailbox_size, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_setacl, 0, 4, _IS_BOOL, 0) - ZEND_ARG_INFO(0, stream_id) + ZEND_ARG_INFO(0, imap) ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, id, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, user_id, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, rights, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imap_getacl, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, stream_id) - ZEND_ARG_TYPE_INFO(0, mailbox, IS_STRING, 0) -ZEND_END_ARG_INFO() +#define arginfo_imap_getacl arginfo_imap_get_quotaroot #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_mail, 0, 3, _IS_BOOL, 0) @@ -342,7 +332,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imap_mail, 0, 3, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, additional_headers, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cc, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, bcc, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rpath, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return_path, IS_STRING, 1, "null") ZEND_END_ARG_INFO() diff --git a/ext/imap/tests/CONFLICTS b/ext/imap/tests/CONFLICTS deleted file mode 100644 index c301c0ffaca1d..0000000000000 --- a/ext/imap/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -imap diff --git a/ext/imap/tests/README.md b/ext/imap/tests/README.md index 6324ab7f9e60b..1dee1d2663cb0 100644 --- a/ext/imap/tests/README.md +++ b/ext/imap/tests/README.md @@ -11,14 +11,14 @@ hMailServer on Windows. The tests are intended to be mailserver agnostic. ## Set-up tests on Ubuntu (checked on Ubuntu 18.04 (Bionic)) The necessary packages can be installed using the following command; -`apt-get install libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd` +`apt-get install libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd sendmail` The build of PHP will need to be compiled with the following flags: ``` --with-imap --with-kerberos --with-imap-ssl ``` -Then run the set-up script `ext/imap/tests/setup.sh` which will add the `vmail` +Then run the set-up script `ext/imap/tests/setup/setup.sh` which will add the `vmail` group and user which is used by Dovecot for the mailbox. It will also copy the -`ext/imap/tests/dovecot.conf` and `ext/imap/tests/dovecotpass` to the correct +`ext/imap/tests/setup/dovecot.conf` and `ext/imap/tests/setup/dovecotpass` to the correct location for Dovecot and restarts it for the new configuration to be enabled. diff --git a/ext/imap/tests/bug31142_2.phpt b/ext/imap/tests/bug31142_2.phpt index 004c054963d28..dbb4c9a6ad269 100644 --- a/ext/imap/tests/bug31142_2.phpt +++ b/ext/imap/tests/bug31142_2.phpt @@ -2,9 +2,7 @@ Bug #31142 test #2 (imap_mail_compose() generates incorrect output) --SKIPIF-- --FILE-- --FILE-- --FILE-- '; - $envelope["to"] = 'The bad smurf '; - $envelope['date'] = 'Wed, 04 Jan 2006 19:24:43 -0500'; +$envelope["from"] = 'Santa '; +$envelope["to"] = 'The bad smurf '; +$envelope['date'] = 'Wed, 04 Jan 2006 19:24:43 -0500'; - $multipart["type"] = TYPEMULTIPART; - $multipart["subtype"] = "MIXED"; - $body[] = $multipart; //add multipart stuff +$multipart["type"] = TYPEMULTIPART; +$multipart["subtype"] = "MIXED"; +$body[] = $multipart; //add multipart stuff - $textpart["type"] = TYPEMULTIPART; - $textpart["subtype"] = "ALTERNATIVE"; - $body[] = $textpart; //add body part +$textpart["type"] = TYPEMULTIPART; +$textpart["subtype"] = "ALTERNATIVE"; +$body[] = $textpart; //add body part - $plain["type"] = TYPETEXT; - $plain["subtype"] = "PLAIN"; - $plain["charset"] = "iso-8859-1"; - $plain["encoding"] = ENCQUOTEDPRINTABLE; - $plain["description"] = "Plaintype part of message"; - $plain['disposition'] = "inline"; - $plain["contents.data"] = 'See mom, it will crash'; +$plain["type"] = TYPETEXT; +$plain["subtype"] = "PLAIN"; +$plain["charset"] = "iso-8859-1"; +$plain["encoding"] = ENCQUOTEDPRINTABLE; +$plain["description"] = "Plaintype part of message"; +$plain['disposition'] = "inline"; +$plain["contents.data"] = 'See mom, it will crash'; - $body[] = $plain; //next add plain text part +$body[] = $plain; //next add plain text part - $html["type"] = TYPETEXT; - $html["subtype"] = "HTML"; - $html["charset"] = "iso-8859-1"; - $html["encoding"] = ENCQUOTEDPRINTABLE; - $html["description"] = "HTML part of message"; - $html['disposition'] = "inline"; - $html["contents.data"] = 'See mom, it will crash'; +$html["type"] = TYPETEXT; +$html["subtype"] = "HTML"; +$html["charset"] = "iso-8859-1"; +$html["encoding"] = ENCQUOTEDPRINTABLE; +$html["description"] = "HTML part of message"; +$html['disposition'] = "inline"; +$html["contents.data"] = 'See mom, it will crash'; - $body[] = $html; +$body[] = $html; - echo imap_mail_compose($envelope, $body); +echo imap_mail_compose($envelope, $body); ?> --EXPECTF-- Date: Wed, 04 Jan 2006 19:24:43 -0500 diff --git a/ext/imap/tests/bug44098.phpt b/ext/imap/tests/bug44098.phpt index 2a0f5cef44ab8..2e0f025d6a494 100644 --- a/ext/imap/tests/bug44098.phpt +++ b/ext/imap/tests/bug44098.phpt @@ -2,19 +2,14 @@ Bug #44098 (imap_utf8() returns only capital letters) --SKIPIF-- --FILE-- , expected \n"; -} else { - echo "ok"; -} +var_dump($res); + ?> --EXPECT-- -ok +string(17) "Luzon®14 dot CoM" diff --git a/ext/imap/tests/bug45705_1.phpt b/ext/imap/tests/bug45705_1.phpt index 05d3a0a2f6b9d..b8d33e675839e 100644 --- a/ext/imap/tests/bug45705_1.phpt +++ b/ext/imap/tests/bug45705_1.phpt @@ -2,9 +2,7 @@ Bug #45705 test #1 (imap rfc822_parse_adrlist() modifies passed address parameter) --SKIPIF-- --FILE-- --FILE-- 'John Doe ', ); var_dump($envelope); -imap_mail_compose($envelope, array(1 => array())); +imap_mail_compose($envelope, [1 => ['cc' => 'Steve Doe ',]]); var_dump($envelope); ?> diff --git a/ext/imap/tests/bug53377.phpt b/ext/imap/tests/bug53377.phpt index a507369046130..083d951c20ca5 100644 --- a/ext/imap/tests/bug53377.phpt +++ b/ext/imap/tests/bug53377.phpt @@ -2,9 +2,7 @@ Bug #53377 (imap_mime_header_decode() doesn't ignore \t during long MIME header unfolding) --SKIPIF-- --FILE-- +--CONFLICTS-- +defaultmailbox --FILE-- array('DISABLE_AUTHENTICATOR' => array('GSSAPI','NTLM')), 'String' => array('DISABLE_AUTHENTICATOR' => 'GSSAPI'), ); -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__. '/setup/imap_include.inc'); foreach ($tests as $name => $testparams) { echo "Test for $name\n"; - $in = imap_open($default_mailbox, $username, $password, OP_HALFOPEN, 1, $testparams); + $in = imap_open(IMAP_SERVER_DEBUG, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD, OP_HALFOPEN, 1, $testparams); if ($in) { if (is_array($errors = imap_errors())) { foreach ($errors as $err) { diff --git a/ext/imap/tests/bug64076.phpt b/ext/imap/tests/bug64076.phpt new file mode 100644 index 0000000000000..7e9ee6fd04da2 --- /dev/null +++ b/ext/imap/tests/bug64076.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #64076 (imap_sort() does not return FALSE on failure) +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECT-- +Create a temporary mailbox and add 2 msgs +New mailbox created +bool(false) +bool(true) diff --git a/ext/imap/tests/bug77020.phpt b/ext/imap/tests/bug77020.phpt index 582b132ad863e..d8286549830cb 100644 --- a/ext/imap/tests/bug77020.phpt +++ b/ext/imap/tests/bug77020.phpt @@ -6,8 +6,8 @@ if (!extension_loaded('imap')) die('skip imap extension not available'); ?> --FILE-- --EXPECTF-- -Warning: imap_mail(): No message string in mail command in %s on line %d -%A +%Adone diff --git a/ext/imap/tests/bug77153.phpt b/ext/imap/tests/bug77153.phpt index 7b759621fe16f..d767ce5472667 100644 --- a/ext/imap/tests/bug77153.phpt +++ b/ext/imap/tests/bug77153.phpt @@ -1,11 +1,11 @@ ---TEST-- +--TEST-- Bug #77153 (imap_open allows to run arbitrary shell commands via mailbox parameter) --SKIPIF-- +--CONFLICTS-- +defaultmailbox --FILE-- " . __DIR__ . '/__bug'; @@ -21,4 +21,4 @@ bool(false) --CLEAN-- \ No newline at end of file +?> diff --git a/ext/imap/tests/bug80213.phpt b/ext/imap/tests/bug80213.phpt new file mode 100644 index 0000000000000..5bad48f306d39 --- /dev/null +++ b/ext/imap/tests/bug80213.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #80213 (imap_mail_compose() segfaults on certain $bodies) +--SKIPIF-- + +--FILE-- + ['param'], + 'disposition' => ['disp'], +], [ + 'type.parameters' => ['param'], + 'disposition' => ['disp'], +]]; +var_dump(imap_mail_compose($envelope, $body)); +echo "done\n"; +?> +--EXPECT-- +string(67) "MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; CHARSET=US-ASCII + + +" +done diff --git a/ext/imap/tests/bug80215.phpt b/ext/imap/tests/bug80215.phpt new file mode 100644 index 0000000000000..b2d7c3ed09a30 --- /dev/null +++ b/ext/imap/tests/bug80215.phpt @@ -0,0 +1,69 @@ +--TEST-- +Bug #80215 (imap_mail_compose() may modify by-val parameters) +--SKIPIF-- + +--FILE-- + 1, + "to" => 2, + "custom_headers" => [3], +]; +$body = [[ + "contents.data" => 4, + "type.parameters" => ['foo' => 5], + "disposition" => ['bar' => 6], +], [ + "contents.data" => 7, + "type.parameters" => ['foo' => 8], + "disposition" => ['bar' => 9], +]]; +imap_mail_compose($envelope, $body); +var_dump($envelope, $body); +?> +--EXPECT-- +array(3) { + ["from"]=> + int(1) + ["to"]=> + int(2) + ["custom_headers"]=> + array(1) { + [0]=> + int(3) + } +} +array(2) { + [0]=> + array(3) { + ["contents.data"]=> + int(4) + ["type.parameters"]=> + array(1) { + ["foo"]=> + int(5) + } + ["disposition"]=> + array(1) { + ["bar"]=> + int(6) + } + } + [1]=> + array(3) { + ["contents.data"]=> + int(7) + ["type.parameters"]=> + array(1) { + ["foo"]=> + int(8) + } + ["disposition"]=> + array(1) { + ["bar"]=> + int(9) + } + } +} diff --git a/ext/imap/tests/bug80216.phpt b/ext/imap/tests/bug80216.phpt new file mode 100644 index 0000000000000..ccaf1e1e39e3a --- /dev/null +++ b/ext/imap/tests/bug80216.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #80216 (imap_mail_compose() does not validate types/encodings) +--SKIPIF-- + +--FILE-- + TYPEMULTIPART], []]); +imap_mail_compose([], [['type' => 12]]); +imap_mail_compose([], [['type' => TYPEMULTIPART], ['type' => 12]]); +imap_mail_compose([], [['encoding' => 8]]); +imap_mail_compose([], [['type' => TYPEMULTIPART], ['encoding' => 8]]); +echo "done\n"; +?> +--EXPECT-- +done diff --git a/ext/imap/tests/bug80220.phpt b/ext/imap/tests/bug80220.phpt new file mode 100644 index 0000000000000..0d3e3eda9b7ef --- /dev/null +++ b/ext/imap/tests/bug80220.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #80220 (imap_mail_compose() may leak memory) - message/rfc822 regression +--SKIPIF-- + +--FILE-- + TYPEMESSAGE, + 'subtype' => 'RFC822', +], [ + 'contents.data' => 'asd', +]]; +var_dump(imap_mail_compose([], $bodies)); + +$bodies = [[ + 'type' => TYPEMESSAGE, +], [ + 'contents.data' => 'asd', +]]; +var_dump(imap_mail_compose([], $bodies)); +?> +--EXPECT-- +string(53) "MIME-Version: 1.0 +Content-Type: MESSAGE/RFC822 + + +" +string(53) "MIME-Version: 1.0 +Content-Type: MESSAGE/RFC822 + + +" diff --git a/ext/imap/tests/bug80223.phpt b/ext/imap/tests/bug80223.phpt new file mode 100644 index 0000000000000..eeb2c3e75663e --- /dev/null +++ b/ext/imap/tests/bug80223.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #80223 (imap_mail_compose() leaks envelope on malformed bodies) +--SKIPIF-- + +--FILE-- +getMessage(), \PHP_EOL; +} +try { + imap_mail_compose([], [1]); +} catch (\TypeError $e) { + echo $e->getMessage(), \PHP_EOL; +} +try { + imap_mail_compose([], [[]]); +} catch (\ValueError $e) { + echo $e->getMessage(), \PHP_EOL; +} +?> +--EXPECT-- +imap_mail_compose(): Argument #2 ($bodies) cannot be empty +imap_mail_compose(): Argument #2 ($bodies) individual body must be of type array, int given +imap_mail_compose(): Argument #2 ($bodies) individual body cannot be empty diff --git a/ext/imap/tests/bug80226.phpt b/ext/imap/tests/bug80226.phpt new file mode 100644 index 0000000000000..6cf4cc8a58d9f --- /dev/null +++ b/ext/imap/tests/bug80226.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #80226 (imap_sort() leaks sortpgm memory) +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECT-- +Create a new mailbox for test +Create a temporary mailbox and add 0 msgs +New mailbox created +array(0) { +} diff --git a/ext/imap/tests/bug80242.phpt b/ext/imap/tests/bug80242.phpt new file mode 100644 index 0000000000000..849e7c6212d03 --- /dev/null +++ b/ext/imap/tests/bug80242.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #80242 (imap_mail_compose() segfaults for multipart with rfc822) +--SKIPIF-- + +--FILE-- + TYPEMULTIPART, +], [ + 'type' => TYPETEXT, + 'contents.data' => 'some text', +], [ + 'type' => TYPEMESSAGE, + 'subtype' => 'RFC822', +]]; +imap_mail_compose([], $bodies); +echo "done\n"; +?> +--EXPECT-- +done diff --git a/ext/imap/tests/clean.inc b/ext/imap/tests/clean.inc deleted file mode 100644 index 8bc566ba3233a..0000000000000 --- a/ext/imap/tests/clean.inc +++ /dev/null @@ -1,25 +0,0 @@ -Nmsgs; $i++) { - imap_delete($imap_stream, $i); -} - -$mailboxes = imap_getmailboxes($imap_stream, $server, '*'); - -foreach($mailboxes as $value) { - // Only delete mailboxes with our prefix - if (preg_match('/\{.*?\}INBOX\.(.+)/', $value->name, $match) == 1) { - if (strlen($match[1]) >= strlen($mailbox_prefix) - && substr_compare($match[1], $mailbox_prefix, 0, strlen($mailbox_prefix)) == 0) { - imap_deletemailbox($imap_stream, $value->name); - } - } -} - -imap_close($imap_stream, CL_EXPUNGE); -?> diff --git a/ext/imap/tests/imap_append_basic.phpt b/ext/imap/tests/imap_append_basic.phpt index e75b452596e74..ab2e46886e8fe 100644 --- a/ext/imap/tests/imap_append_basic.phpt +++ b/ext/imap/tests/imap_append_basic.phpt @@ -2,22 +2,19 @@ Test imap_append() function : basic functionality --SKIPIF-- --FILE-- Mailbox . "\n"; +echo "Add a couple of msgs to the new mailbox\n"; var_dump(imap_append($imap_stream, $mb_details->Mailbox , "From: webmaster@something.com\r\n" . "To: info@something.com\r\n" @@ -44,14 +41,15 @@ imap_close($imap_stream); ?> --CLEAN-- --EXPECTF-- *** Testing imap_append() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 0 msgs -.. mailbox '%s' created -Add a couple of msgs to new mailbox {%s}INBOX.%s +New mailbox created +Add a couple of msgs to the new mailbox bool(true) bool(true) Msg Count after append : 2 diff --git a/ext/imap/tests/imap_body.phpt b/ext/imap/tests/imap_body.phpt index 752ca1c39db77..59678ad53980f 100644 --- a/ext/imap/tests/imap_body.phpt +++ b/ext/imap/tests/imap_body.phpt @@ -5,35 +5,42 @@ Paul Sohier #phptestfest utrecht --SKIPIF-- --FILE-- getMessage() . \PHP_EOL; } try { - imap_body($stream_id,1,-1); + imap_body($imap_stream,1,-1); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } //Access not existing -var_dump(imap_body($stream_id, 255, FT_UID)); +var_dump(imap_body($imap_stream, 255, FT_UID)); -imap_close($stream_id); +imap_close($imap_stream); +?> +--CLEAN-- + --EXPECTF-- -imap_body(): Argument #2 ($msg_no) must be greater than 0 -imap_body(): Argument #3 ($options) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL +Create a temporary mailbox and add 0 msgs +New mailbox created +imap_body(): Argument #2 ($message_num) must be greater than 0 +imap_body(): Argument #3 ($flags) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL Warning: imap_body(): UID does not exist in %s on line %d bool(false) diff --git a/ext/imap/tests/imap_body_basic.phpt b/ext/imap/tests/imap_body_basic.phpt index af434cffb65a6..b5cb0fcd33072 100644 --- a/ext/imap/tests/imap_body_basic.phpt +++ b/ext/imap/tests/imap_body_basic.phpt @@ -2,19 +2,16 @@ Test imap_body() function : basic functionality --SKIPIF-- --FILE-- Nmsgs . "\n"; @@ -29,13 +26,16 @@ imap_close($imap_stream); ?> --CLEAN-- --EXPECTF-- *** Testing imap_body() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 -string(%d) "1: this is a test message, please ignore%a" -string(%d) "1: this is a test message, please ignore%a" +string(%d) "1: this is a test message, please ignore +newline%r\R?%r" +string(%d) "1: this is a test message, please ignore +newline%r\R?%r" diff --git a/ext/imap/tests/imap_bodystruct_basic.phpt b/ext/imap/tests/imap_bodystruct_basic.phpt index 56c88399c35f9..f969e86764aa6 100644 --- a/ext/imap/tests/imap_bodystruct_basic.phpt +++ b/ext/imap/tests/imap_bodystruct_basic.phpt @@ -2,47 +2,43 @@ Test imap_bodystruct() function : basic functionality --SKIPIF-- --FILE-- $mf)) - { - echo "$mf is 0 or 1\n"; - } - else - { - echo "$mf FAIL\n"; - } +foreach($mandatoryFields as $mf) { + if (isValid($m->$mf)) { + echo "$mf is 0 or 1\n"; + } else { + echo "$mf FAIL\n"; + } } -if(is_array($m->parameters)) -{ - echo "parameters is an array\n"; +if(is_array($m->parameters)) { + echo "parameters is an array\n"; } echo "\nTry to get part 4!\n"; @@ -50,28 +46,17 @@ var_dump(imap_bodystruct($imap_stream, 1, "4")); imap_close($imap_stream); -function isValid($param) -{ - if(($param == 0) || ($param == 1)) - { - $result=true; - } - else - { - $result=false; - } -return $result; -} ?> --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing string imap_bodystruct : basic functionality *** Create a new mailbox for test and add a multipart msgs Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Get and validate structure of body part 1 ifsubtype is 0 or 1 diff --git a/ext/imap/tests/imap_clearflag_full_basic.phpt b/ext/imap/tests/imap_clearflag_full_basic.phpt index cc949385fc1d2..ee65d202ceb5e 100644 --- a/ext/imap/tests/imap_clearflag_full_basic.phpt +++ b/ext/imap/tests/imap_clearflag_full_basic.phpt @@ -2,19 +2,16 @@ Test imap_clearflag_full() function : basic functionality --SKIPIF-- --FILE-- Nmsgs . "\n"; @@ -44,13 +41,14 @@ imap_close($imap_stream); ?> --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_clearflag_full() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 10 msgs -.. mailbox '{%s}%s' created +New mailbox created Initial msg count in new_mailbox : 10 Set some flags bool(true) diff --git a/ext/imap/tests/imap_close_basic.phpt b/ext/imap/tests/imap_close_basic.phpt index 57b2e7eab19a0..c962b62f7f8e0 100644 --- a/ext/imap/tests/imap_close_basic.phpt +++ b/ext/imap/tests/imap_close_basic.phpt @@ -2,17 +2,17 @@ Test imap_close() function : basic functionality --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- *** Testing imap_close() : basic functionality *** Create a temporary mailbox and add 3 msgs -.. mailbox '%sINBOX.phpttest' created +New mailbox created -- Call to imap_close() with all possible arguments -- bool(true) -There are now 0 msgs in mailbox '%sINBOX.phpttest' +There are now 0 msgs in mailbox '%sINBOX.phpttestimapclosebasic' -- Call to imap_close() with mandatory arguments -- bool(true) diff --git a/ext/imap/tests/imap_close_variation4.phpt b/ext/imap/tests/imap_close_variation4.phpt index 56e3722e9e382..ff78ac985c54f 100644 --- a/ext/imap/tests/imap_close_variation4.phpt +++ b/ext/imap/tests/imap_close_variation4.phpt @@ -1,23 +1,23 @@ --TEST-- -Test imap_close() function : usage variations - different ints as $options arg +Test imap_close() function : usage variations - different ints as $flags arg --SKIPIF-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_close() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- bool(true) @@ -76,10 +77,10 @@ bool(true) CL_EXPUNGE was set -- Iteration 3 -- -imap_close(): Argument #2 ($options) must be CL_EXPUNGE or 0 +imap_close(): Argument #2 ($flags) must be CL_EXPUNGE or 0 -- Iteration 4 -- -imap_close(): Argument #2 ($options) must be CL_EXPUNGE or 0 +imap_close(): Argument #2 ($flags) must be CL_EXPUNGE or 0 -- Iteration 5 -- -imap_close(): Argument #2 ($options) must be CL_EXPUNGE or 0 +imap_close(): Argument #2 ($flags) must be CL_EXPUNGE or 0 diff --git a/ext/imap/tests/imap_createmailbox_basic.phpt b/ext/imap/tests/imap_createmailbox_basic.phpt index 84db5cbd31a49..83dc3d0f6e90e 100644 --- a/ext/imap/tests/imap_createmailbox_basic.phpt +++ b/ext/imap/tests/imap_createmailbox_basic.phpt @@ -2,22 +2,21 @@ Test imap_createmailbox() function : basic functionality --SKIPIF-- --FILE-- +--CLEAN-- + --EXPECTF-- *** Testing imap_createmailbox() : basic functionality *** +Create a temporary mailbox and add 0 msgs +New mailbox created Newname will be 'phpnewbox' Add a couple of msgs to 'phpnewbox' mailbox Your new mailbox 'phpnewbox' has the following status: diff --git a/ext/imap/tests/imap_errors_basic.phpt b/ext/imap/tests/imap_errors_basic.phpt index c89719376658d..f691a5c70521b 100644 --- a/ext/imap/tests/imap_errors_basic.phpt +++ b/ext/imap/tests/imap_errors_basic.phpt @@ -2,16 +2,16 @@ Test imap_errors() function : invalid password --SKIPIF-- --FILE-- --FILE-- --CLEAN-- --EXPECTF-- *** Testing imap_fetch_overview() : basic functionality *** Create a temporary mailbox and add 2 msgs -.. mailbox '{%s}%s' created +New mailbox created -- All possible arguments -- diff --git a/ext/imap/tests/imap_fetch_overview_variation3.phpt b/ext/imap/tests/imap_fetch_overview_variation3.phpt index 68d8d20ce4150..1ed528a17327f 100644 --- a/ext/imap/tests/imap_fetch_overview_variation3.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation3.phpt @@ -2,34 +2,35 @@ Test imap_fetch_overview() function : usage variations - FT_UID option --SKIPIF-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Testing with option value:string(1) "1" imap_fetch_overview() returns an object @@ -65,4 +67,4 @@ Testing with option value:float(1) imap_fetch_overview() returns an object Testing with option value:int(245) -imap_fetch_overview(): Argument #3 ($options) must be FT_UID or 0 +imap_fetch_overview(): Argument #3 ($flags) must be FT_UID or 0 diff --git a/ext/imap/tests/imap_fetch_overview_variation5.phpt b/ext/imap/tests/imap_fetch_overview_variation5.phpt index 9774e682c1afc..6a8b6abd51879 100644 --- a/ext/imap/tests/imap_fetch_overview_variation5.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation5.phpt @@ -2,7 +2,7 @@ Test imap_fetch_overview() function : usage variations - $msg_no argument --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- $msg_no is 0 -- Sequence out of range diff --git a/ext/imap/tests/imap_fetch_overview_variation6.phpt b/ext/imap/tests/imap_fetch_overview_variation6.phpt index 256f6310820b9..0535b3d5ac355 100644 --- a/ext/imap/tests/imap_fetch_overview_variation6.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation6.phpt @@ -2,7 +2,7 @@ Test imap_fetch_overview() function : usage variations - multipart message --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 0 msgs -.. mailbox '{%s}%s' created +New mailbox created --> Object #1 size is %d diff --git a/ext/imap/tests/imap_fetchbody_basic.phpt b/ext/imap/tests/imap_fetchbody_basic.phpt index 3c16f939c8fb3..d0324383ea283 100644 --- a/ext/imap/tests/imap_fetchbody_basic.phpt +++ b/ext/imap/tests/imap_fetchbody_basic.phpt @@ -2,7 +2,7 @@ Test imap_fetchbody() function : basic functionality --SKIPIF-- --FILE-- seen ); ?> --CLEAN-- --EXPECTF-- *** Testing imap_fetchbody() : basic functionality *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- All possible arguments -- -- Option is FT_UID -- diff --git a/ext/imap/tests/imap_fetchbody_variation4.phpt b/ext/imap/tests/imap_fetchbody_variation4.phpt index 510e78fd3101a..5e25dd1126b4f 100644 --- a/ext/imap/tests/imap_fetchbody_variation4.phpt +++ b/ext/imap/tests/imap_fetchbody_variation4.phpt @@ -2,34 +2,34 @@ Test imap_fetchbody() function : usage variations - FT_UID option --SKIPIF-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_fetchbody() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- FT_UID valid @@ -67,7 +68,7 @@ FT_UID valid FT_UID valid -- Iteration 5 -- -imap_fetchbody(): Argument #4 ($options) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL +imap_fetchbody(): Argument #4 ($flags) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL -- Iteration 6 -- -imap_fetchbody(): Argument #4 ($options) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL +imap_fetchbody(): Argument #4 ($flags) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL diff --git a/ext/imap/tests/imap_fetchbody_variation6.phpt b/ext/imap/tests/imap_fetchbody_variation6.phpt index fd5a898b680d9..7889c40193342 100644 --- a/ext/imap/tests/imap_fetchbody_variation6.phpt +++ b/ext/imap/tests/imap_fetchbody_variation6.phpt @@ -1,30 +1,30 @@ --TEST-- -Test imap_fetchbody() function : usage variations - $msg_no arg +Test imap_fetchbody() function : usage variations - $message_num arg --SKIPIF-- --FILE-- getMessage() . \PHP_EOL; } @@ -32,21 +32,22 @@ foreach($sequences as $msg_no) { ?> --CLEAN-- --EXPECTF-- *** Testing imap_fetchbody() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created --- $msg_no is 0 -- -imap_fetchbody(): Argument #2 ($msg_no) must be greater than 0 +-- $message_num is 0 -- +imap_fetchbody(): Argument #2 ($message_num) must be greater than 0 --- $msg_no is 4 -- +-- $message_num is 4 -- Warning: imap_fetchbody(): Bad message number in %s on line %d bool(false) --- $msg_no is 1 -- -string(42) "1: this is a test message, please ignore -" +-- $message_num is 1 -- +string(%d) "1: this is a test message, please ignore +newline%r\R?%r" diff --git a/ext/imap/tests/imap_fetchheader_basic.phpt b/ext/imap/tests/imap_fetchheader_basic.phpt index 44f7de5a393a6..dc934e00cf274 100644 --- a/ext/imap/tests/imap_fetchheader_basic.phpt +++ b/ext/imap/tests/imap_fetchheader_basic.phpt @@ -2,15 +2,15 @@ Test imap_fetchheader() function : basic function --SKIPIF-- --FILE-- FT_UID, 'FT_INTERNAL' => FT_INTERNAL, 'FT_PREFETCHTEXT' => FT_PREFETCHTEXT); @@ -33,12 +33,13 @@ var_dump( imap_fetchheader($stream_id, $msg_no) ); ?> --CLEAN-- --EXPECTF-- *** Testing imap_fetchheader() : basic functionality *** Create a temporary mailbox and add 1 msgs -.. mailbox '%s.phpttest' created +New mailbox created -- All possible arguments -- -- Option is FT_UID -- diff --git a/ext/imap/tests/imap_fetchheader_variation3.phpt b/ext/imap/tests/imap_fetchheader_variation3.phpt index 9391393782338..1289087b7d4a6 100644 --- a/ext/imap/tests/imap_fetchheader_variation3.phpt +++ b/ext/imap/tests/imap_fetchheader_variation3.phpt @@ -2,33 +2,33 @@ Test imap_fetchheader() function : usage variations - FT_UID option --SKIPIF-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_fetchheader() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- FT_UID valid @@ -64,7 +65,7 @@ FT_UID valid FT_UID valid -- Iteration 5 -- -imap_fetchheader(): Argument #3 ($options) must be a bitmask of FT_UID, FT_PREFETCHTEXT, and FT_INTERNAL +imap_fetchheader(): Argument #3 ($flags) must be a bitmask of FT_UID, FT_PREFETCHTEXT, and FT_INTERNAL -- Iteration 6 -- -imap_fetchheader(): Argument #3 ($options) must be a bitmask of FT_UID, FT_PREFETCHTEXT, and FT_INTERNAL +imap_fetchheader(): Argument #3 ($flags) must be a bitmask of FT_UID, FT_PREFETCHTEXT, and FT_INTERNAL diff --git a/ext/imap/tests/imap_fetchheader_variation5.phpt b/ext/imap/tests/imap_fetchheader_variation5.phpt index 7e45f1ba46ac9..eb6493017b721 100644 --- a/ext/imap/tests/imap_fetchheader_variation5.phpt +++ b/ext/imap/tests/imap_fetchheader_variation5.phpt @@ -1,28 +1,28 @@ --TEST-- -Test imap_fetchheader() function : usage variations - $msg_no argument +Test imap_fetchheader() function : usage variations - $message_num argument --SKIPIF-- --FILE-- getMessage() . \PHP_EOL; } @@ -33,25 +33,26 @@ imap_errors(); ?> --CLEAN-- --EXPECTF-- *** Testing imap_fetchheader() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created --- $msg_no is 0 -- -imap_fetchheader(): Argument #2 ($msg_no) must be greater than 0 +-- $message_num is 0 -- +imap_fetchheader(): Argument #2 ($message_num) must be greater than 0 --- $msg_no is 4 -- +-- $message_num is 4 -- Warning: imap_fetchheader(): Bad message number in %s on line %d bool(false) --- $msg_no is 1 -- +-- $message_num is 1 -- string(%d) "From: foo@anywhere.com Subject: Test msg 1 -To: webmaster@something.com +To: %s MIME-Version: 1.0 Content-Type: MULTIPART/mixed; BOUNDARY="%s=:%d" diff --git a/ext/imap/tests/imap_fetchstructure_basic.phpt b/ext/imap/tests/imap_fetchstructure_basic.phpt index 11c1f7efb253c..2eb730c8902da 100644 --- a/ext/imap/tests/imap_fetchstructure_basic.phpt +++ b/ext/imap/tests/imap_fetchstructure_basic.phpt @@ -4,13 +4,13 @@ imap_fetchstructure() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created -imap_fetchstructure(): Argument #2 ($msg_no) must be greater than 0 +New mailbox created +imap_fetchstructure(): Argument #2 ($message_num) must be greater than 0 bool(true) bool(true) bool(true) diff --git a/ext/imap/tests/imap_gc_error.phpt b/ext/imap/tests/imap_gc_error.phpt index 5b5b65d271422..7c6fa3da847f4 100644 --- a/ext/imap/tests/imap_gc_error.phpt +++ b/ext/imap/tests/imap_gc_error.phpt @@ -1,18 +1,17 @@ --TEST-- -imap_gc() incorrect parameter count +imap_gc() ValueError --CREDITS-- Paul Sohier #phptestfest utrecht --SKIPIF-- --FILE-- getMessage() . \PHP_EOL; } +?> +--CLEAN-- + --EXPECT-- +Create a temporary mailbox and add 1 msgs +New mailbox created imap_gc(): Argument #2 ($flags) must be a bitmask of IMAP_GC_TEXTS, IMAP_GC_ELT, and IMAP_GC_ENV diff --git a/ext/imap/tests/imap_getsubscribed_basic.phpt b/ext/imap/tests/imap_getsubscribed_basic.phpt index 8e5d85383daef..a1519042f134d 100644 --- a/ext/imap/tests/imap_getsubscribed_basic.phpt +++ b/ext/imap/tests/imap_getsubscribed_basic.phpt @@ -4,27 +4,29 @@ imap_getsubscribed() function : basic functionality Olivier Doucet --SKIPIF-- +--CONFLICTS-- +defaultmailbox --FILE-- --CLEAN-- --EXPECTF-- bool(false) diff --git a/ext/imap/tests/imap_headerinfo_basic.phpt b/ext/imap/tests/imap_headerinfo_basic.phpt index 056a46523c95a..0d84aee44bd25 100644 --- a/ext/imap/tests/imap_headerinfo_basic.phpt +++ b/ext/imap/tests/imap_headerinfo_basic.phpt @@ -4,13 +4,13 @@ imap_headerinfo() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Check general fields bool(true) bool(true) diff --git a/ext/imap/tests/imap_list_basic.phpt b/ext/imap/tests/imap_list_basic.phpt index addcf70e775ba..e11c6c1bd09f5 100644 --- a/ext/imap/tests/imap_list_basic.phpt +++ b/ext/imap/tests/imap_list_basic.phpt @@ -4,20 +4,22 @@ imap_list() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- +--CONFLICTS-- +defaultmailbox --FILE-- --CLEAN-- --EXPECTF-- bool(false) diff --git a/ext/imap/tests/imap_mail_copy_basic.phpt b/ext/imap/tests/imap_mail_copy_basic.phpt index 25725478a63a1..312c8198a6125 100644 --- a/ext/imap/tests/imap_mail_copy_basic.phpt +++ b/ext/imap/tests/imap_mail_copy_basic.phpt @@ -4,36 +4,33 @@ Test imap_mail_copy() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- Nmsgs . "\n"; -var_dump(imap_mail_copy($imap_stream, '1', 'INBOX.'.$mailbox_prefix)); +var_dump(imap_mail_copy($imap_stream, '1', 'INBOX.' . IMAP_MAILBOX_PHPT_PREFIX . 'copybasic')); imap_close($imap_stream); ?> --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_mail_copy() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 bool(true) diff --git a/ext/imap/tests/imap_mail_move_basic.phpt b/ext/imap/tests/imap_mail_move_basic.phpt index 3988951f12ee6..3cd347b627d52 100644 --- a/ext/imap/tests/imap_mail_move_basic.phpt +++ b/ext/imap/tests/imap_mail_move_basic.phpt @@ -4,36 +4,33 @@ Test imap_mail_move() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- Nmsgs . "\n"; -var_dump(imap_mail_move($imap_stream, '1', 'INBOX.'.$mailbox_prefix)); +var_dump(imap_mail_move($imap_stream, '1', 'INBOX.' . IMAP_MAILBOX_PHPT_PREFIX . 'movebasic')); imap_close($imap_stream); ?> --CLEAN-- ---EXPECTF-- +--EXPECT-- *** Testing imap_mail_move() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 bool(true) diff --git a/ext/imap/tests/imap_mutf7_to_utf8.phpt b/ext/imap/tests/imap_mutf7_to_utf8.phpt index f45361f4a90b2..835a25428f0a4 100644 --- a/ext/imap/tests/imap_mutf7_to_utf8.phpt +++ b/ext/imap/tests/imap_mutf7_to_utf8.phpt @@ -2,7 +2,6 @@ imap_mutf7_to_utf8 --SKIPIF-- - --FILE-- --FILE-- @@ -20,10 +20,8 @@ try { echo $e->getMessage() . \PHP_EOL; } -require_once(__DIR__.'/imap_include.inc'); - try { - imap_open($default_mailbox, $username, $password, NIL, -1); + imap_open('', '', '', NIL, -1); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } @@ -33,7 +31,7 @@ try { Checking with incorrect parameters Warning: imap_open(): Couldn't open stream in %s on line %d -imap_open(): Argument #4 ($options) must be a bitmask of the OP_* constants, and CL_EXPUNGE -imap_open(): Argument #5 ($n_retries) must be greater than or equal to 0 +imap_open(): Argument #4 ($flags) must be a bitmask of the OP_* constants, and CL_EXPUNGE +imap_open(): Argument #5 ($retries) must be greater than or equal to 0 Notice: Unknown: Can't open mailbox : no such mailbox (errflg=2) in Unknown on line 0 diff --git a/ext/imap/tests/imap_renamemailbox_basic.phpt b/ext/imap/tests/imap_renamemailbox_basic.phpt index c6b1812d165b5..05f1e4a309924 100644 --- a/ext/imap/tests/imap_renamemailbox_basic.phpt +++ b/ext/imap/tests/imap_renamemailbox_basic.phpt @@ -4,20 +4,16 @@ imap_renamemailbox() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Checking OK bool(true) -bool(true) diff --git a/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt b/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt index 87dc4aaf05b75..fd2dfb939dc61 100644 --- a/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt +++ b/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt @@ -4,13 +4,13 @@ imap_rfc822_parse_headers() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --CLEAN-- --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Check general fields bool(true) bool(true) diff --git a/ext/imap/tests/imap_rfc822_write_address_basic.phpt b/ext/imap/tests/imap_rfc822_write_address_basic.phpt new file mode 100644 index 0000000000000..92e988c9c9eb1 --- /dev/null +++ b/ext/imap/tests/imap_rfc822_write_address_basic.phpt @@ -0,0 +1,12 @@ +--TEST-- +imap_rfc822_write_address() : basic functionality +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(24) "My Name " diff --git a/ext/imap/tests/imap_savebody_basic.phpt b/ext/imap/tests/imap_savebody_basic.phpt index ccbaa1ba66cc4..38be6ab4a054c 100644 --- a/ext/imap/tests/imap_savebody_basic.phpt +++ b/ext/imap/tests/imap_savebody_basic.phpt @@ -4,13 +4,13 @@ imap_savebody() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created +New mailbox created bool(true) Size: %d bool(true) diff --git a/ext/imap/tests/imap_timeout_basic.phpt b/ext/imap/tests/imap_timeout_basic.phpt index f9618c3e3a33d..e449c3fdecf00 100644 --- a/ext/imap/tests/imap_timeout_basic.phpt +++ b/ext/imap/tests/imap_timeout_basic.phpt @@ -4,7 +4,7 @@ imap_timeout() function : basic functionality Olivier Doucet --SKIPIF-- --FILE-- --FILE-- --CLEAN-- ---EXPECTF-- +--EXPECT-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created bool(true) diff --git a/ext/imap/tests/imap_utf8.phpt b/ext/imap/tests/imap_utf8.phpt index a82c3721c350a..522d4d6f5608a 100644 --- a/ext/imap/tests/imap_utf8.phpt +++ b/ext/imap/tests/imap_utf8.phpt @@ -11,8 +11,8 @@ var_dump(imap_utf8("test")); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(0) "" string(1) "1" -string(4) "%s" +string(4) "test" Done diff --git a/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt b/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt index 8037ae9491f0e..c0f3b06dc9a34 100644 --- a/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt +++ b/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt @@ -2,7 +2,6 @@ imap_utf8_to_mutf7 --SKIPIF-- - --FILE-- Nmsgs; $i++) { + imap_delete($imap_stream, $i); +} + + +$mailboxes = imap_getmailboxes($imap_stream, IMAP_SERVER, '*'); + +if (!is_array($mailbox_suffix)) { + $mailbox_suffixes = [$mailbox_suffix]; +} else { + $mailbox_suffixes = $mailbox_suffix; +} + +foreach ($mailbox_suffixes as $mailbox_suffix) { + foreach($mailboxes as $value) { + // Only delete mailbox with our prefix (+ optional test suffix) + if (preg_match('/\{.*?\}INBOX\.' . IMAP_MAILBOX_PHPT_PREFIX . $mailbox_suffix .'$/', $value->name, $match) == 1) { + imap_deletemailbox($imap_stream, $value->name); + } + } +} + +imap_close($imap_stream, CL_EXPUNGE); diff --git a/ext/imap/tests/dovecot.conf b/ext/imap/tests/setup/dovecot.conf similarity index 100% rename from ext/imap/tests/dovecot.conf rename to ext/imap/tests/setup/dovecot.conf diff --git a/ext/imap/tests/dovecotpass b/ext/imap/tests/setup/dovecotpass similarity index 100% rename from ext/imap/tests/dovecotpass rename to ext/imap/tests/setup/dovecotpass diff --git a/ext/imap/tests/imap_include.inc b/ext/imap/tests/setup/imap_include.inc similarity index 50% rename from ext/imap/tests/imap_include.inc rename to ext/imap/tests/setup/imap_include.inc index e57d6516979f2..33e4e5ca16f7f 100644 --- a/ext/imap/tests/imap_include.inc +++ b/ext/imap/tests/setup/imap_include.inc @@ -1,31 +1,34 @@ $mf; - if ($mf == 'udate') { - if (($z >= $start_time) && ($z <= time())) { - echo "$mf is OK\n"; - } else { - echo "$mf is BAD ($z)\n"; - } - } else { - echo "$mf is $z\n"; +function displayOverviewFields($resp, array $fields = MANDATORY_OVERVIEW_FIELDS) { + global $start_time; + foreach ($fields as $mf) { + $z = $resp->$mf; + if ($mf == 'udate') { + if (($z >= $start_time) && ($z <= time())) { + echo "$mf is OK\n"; + } else { + echo "$mf is BAD ($z)\n"; + } + } else { + echo "$mf is $z\n"; + } } - } } @@ -60,33 +61,27 @@ function displayOverviewFields($resp, $fields=null) { * * @param string mailbox_suffix Suffix used to uniquely identify mailboxes * @param int message_count number of test msgs to be written to new mailbox - * - * @return IMAP stream to new mailbox on success; FALSE on failure + * @param null $new_mailbox + * @param bool $simpleMessages + * @return resource IMAP stream to new mailbox + * @throws Exception */ -function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = null, $msg_type = "simple"){ - global $server, $default_mailbox, $username, $password; - +function setup_test_mailbox(string $mailbox_suffix, int $message_count, &$new_mailbox = null, bool $simpleMessages = true){ // open a stream to default mailbox - $imap_stream = imap_open($default_mailbox, $username, $password); + $imap_stream = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); if ($imap_stream === false) { - echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n"; - return false; + throw new Exception("Cannot connect to IMAP server " . IMAP_SERVER . ": " . imap_last_error()); } echo "Create a temporary mailbox and add " . $message_count . " msgs\n"; - $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type); - if ($new_mailbox === false) { - echo "Can't create a temporary mailbox: " . imap_last_error(). "\n"; - return false; - } + $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $simpleMessages); - echo ".. mailbox '$new_mailbox' created\n"; + echo "New mailbox created\n"; // reopen stream to new mailbox if (imap_reopen($imap_stream, $new_mailbox) === false) { - echo "can't re-open '$new_mailbox' mailbox: " . imap_last_error() . "\n"; - return false; + throw new Exception("Can't re-open '$new_mailbox' mailbox: " . imap_last_error()); } return $imap_stream; @@ -96,11 +91,14 @@ function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = nul * Create mailbox and fill with generic emails * * @param resource $imap_stream - * @param string $mailbox + * @param string $mailbox_suffix + * @param int $message_count + * @param bool $simpleMessages + * @return string + * @throws Exception */ -function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type= "simple"){ - global $default_mailbox, $mailbox_prefix; - $mailbox = $default_mailbox . "." . $mailbox_prefix . $mailbox_suffix; +function create_mailbox($imap_stream, string $mailbox_suffix, int $message_count, bool $simpleMessages = true): string { + $mailbox = IMAP_DEFAULT_MAILBOX . '.' . IMAP_MAILBOX_PHPT_PREFIX . $mailbox_suffix; $mailboxes = imap_getmailboxes($imap_stream, $mailbox, '*'); @@ -108,18 +106,18 @@ function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type if ($mailboxes) { foreach($mailboxes as $value) { if ($value->name == $mailbox) { - exit ("TEST FAILED : Mailbox '$mailbox' already exists\n"); + throw new Exception("Mailbox '$mailbox' already exists"); } } } if (imap_createmailbox($imap_stream, $mailbox) === false) { - return false; + throw new Exception("Can't create a temporary mailbox: " . imap_last_error()); } // Add number of test msgs requested if ($message_count > 0) { - populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type); + populate_mailbox($imap_stream, $mailbox, $message_count, $simpleMessages); } return $mailbox; @@ -130,21 +128,20 @@ function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type * * @param resource $imap_stream * @param string $mailbox + * @param int $message_count + * @param bool $simpleMessages */ -function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "simple"){ - - global $users, $domain; - - for($i = 1; $i <= $message_count; $i++) { - if ($msg_type == "simple") { +function populate_mailbox($imap_stream, string $mailbox, int $message_count, bool $simpleMessages = true): void { + for ($i = 1; $i <= $message_count; $i++) { + if ($simpleMessages) { $msg = "From: foo@anywhere.com\r\n" - . "To: $users[0]@$domain\r\n" + . "To: ". IMAP_USERS[0] . "@" . IMAP_MAIL_DOMAIN . "\r\n" . "Subject: test$i\r\n" . "\r\n" - . "$i: this is a test message, please ignore\r\n"; + . "$i: this is a test message, please ignore\r\nnewline"; } else { $envelope["from"]= "foo@anywhere.com"; - $envelope["to"] = "$users[0]@$domain"; + $envelope["to"] = IMAP_USERS[0] . "@" . IMAP_MAIL_DOMAIN; $envelope["subject"] = "Test msg $i"; $part1["type"] = TYPEMULTIPART; @@ -181,16 +178,13 @@ function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "s * Get the mailbox name from a mailbox description, i.e strip off server details. * * @param string mailbox complete mailbox name - * @return mailbox name + * @return string mailbox name */ -function get_mailbox_name($mailbox){ +function get_mailbox_name(string $mailboxName): string { - if (preg_match('/\{.*?\}(.*)/', $mailbox, $match) != 1) { - echo "Unrecpognized mailbox name\n"; - return false; + if (preg_match('/\{.*?\}(.*)/', $mailboxName, $match) != 1) { + throw new Exception("Unrecognized mailbox name '$mailboxName'"); } return $match[1]; } - -?> diff --git a/ext/imap/tests/setup.sh b/ext/imap/tests/setup/setup.sh similarity index 52% rename from ext/imap/tests/setup.sh rename to ext/imap/tests/setup/setup.sh index 5cb18334a3f95..efa7c30310c66 100644 --- a/ext/imap/tests/setup.sh +++ b/ext/imap/tests/setup/setup.sh @@ -1,6 +1,6 @@ sudo service dovecot stop sudo groupadd -g 5000 vmail sudo useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail -sudo cp ext/imap/tests/dovecot.conf /etc/dovecot/dovecot.conf -sudo cp ext/imap/tests/dovecotpass /etc/dovecot/dovecotpass +sudo cp ext/imap/tests/setup/dovecot.conf /etc/dovecot/dovecot.conf +sudo cp ext/imap/tests/setup/dovecotpass /etc/dovecot/dovecotpass sudo service dovecot start diff --git a/ext/imap/tests/setup/skipif.inc b/ext/imap/tests/setup/skipif.inc new file mode 100644 index 0000000000000..c7dc24efd7d83 --- /dev/null +++ b/ext/imap/tests/setup/skipif.inc @@ -0,0 +1,13 @@ + diff --git a/ext/intl/breakiterator/breakiterator.stub.php b/ext/intl/breakiterator/breakiterator.stub.php index fda35217dfcb2..35a57e44b9094 100644 --- a/ext/intl/breakiterator/breakiterator.stub.php +++ b/ext/intl/breakiterator/breakiterator.stub.php @@ -40,10 +40,10 @@ public function getErrorCode() {} public function getErrorMessage() {} /** @return string */ - public function getLocale(int $locale_type) {} + public function getLocale(int $type) {} /** @return IntlPartsIterator */ - public function getPartsIterator(string $key_type = IntlPartsIterator::KEY_SEQUENTIAL) {} + public function getPartsIterator(string $type = IntlPartsIterator::KEY_SEQUENTIAL) {} /** @return string|null */ public function getText() {} @@ -71,7 +71,7 @@ public function getIterator(): Iterator {} class IntlRuleBasedBreakIterator extends IntlBreakIterator { - public function __construct(string $rules, bool $areCompiled = false) {} + public function __construct(string $rules, bool $compiled = false) {} /** @return string|false */ public function getBinaryRules() {} diff --git a/ext/intl/breakiterator/breakiterator_arginfo.h b/ext/intl/breakiterator/breakiterator_arginfo.h index ee0d3fc27dc63..ec8c0c3ce702b 100644 --- a/ext/intl/breakiterator/breakiterator_arginfo.h +++ b/ext/intl/breakiterator/breakiterator_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5eeedbbb7d07b0063d7bc19842b863a2c6d6898b */ + * Stub hash: 6a121ed9817667820f05677a772781d6b788796b */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlBreakIterator_createCharacterInstance, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") @@ -31,11 +31,11 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlBreakIterator_getErrorMessage arginfo_class_IntlBreakIterator_createCodePointInstance ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlBreakIterator_getLocale, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, locale_type, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlBreakIterator_getPartsIterator, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, key_type, IS_STRING, 0, "IntlPartsIterator::KEY_SEQUENTIAL") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_STRING, 0, "IntlPartsIterator::KEY_SEQUENTIAL") ZEND_END_ARG_INFO() #define arginfo_class_IntlBreakIterator_getText arginfo_class_IntlBreakIterator_createCodePointInstance @@ -61,7 +61,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlRuleBasedBreakIterator___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, rules, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, areCompiled, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compiled, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_class_IntlRuleBasedBreakIterator_getBinaryRules arginfo_class_IntlBreakIterator_createCodePointInstance diff --git a/ext/intl/breakiterator/codepointiterator_internal.cpp b/ext/intl/breakiterator/codepointiterator_internal.cpp index 082c02d8b2d2d..754e0b01d6019 100644 --- a/ext/intl/breakiterator/codepointiterator_internal.cpp +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp @@ -56,7 +56,7 @@ CodePointBreakIterator& CodePointBreakIterator::operator=(const CodePointBreakIt return *this; } - this->fText = utext_clone(this->fText, that.fText, FALSE, TRUE, &uec); + this->fText = utext_clone(this->fText, that.fText, false, true, &uec); //don't bother copying the character iterator, getText() is deprecated clearCurrentCharIter(); @@ -76,17 +76,17 @@ CodePointBreakIterator::~CodePointBreakIterator() UBool CodePointBreakIterator::operator==(const BreakIterator& that) const { if (typeid(*this) != typeid(that)) { - return FALSE; + return false; } const CodePointBreakIterator& that2 = static_cast(that); if (!utext_equals(this->fText, that2.fText)) { - return FALSE; + return false; } - return TRUE; + return true; } CodePointBreakIterator* CodePointBreakIterator::clone(void) const @@ -107,7 +107,7 @@ CharacterIterator& CodePointBreakIterator::getText(void) const UText *CodePointBreakIterator::getUText(UText *fillIn, UErrorCode &status) const { - return utext_clone(fillIn, this->fText, FALSE, TRUE, &status); + return utext_clone(fillIn, this->fText, false, true, &status); } void CodePointBreakIterator::setText(const UnicodeString &text) @@ -126,7 +126,7 @@ void CodePointBreakIterator::setText(UText *text, UErrorCode &status) return; } - this->fText = utext_clone(this->fText, text, FALSE, TRUE, &status); + this->fText = utext_clone(this->fText, text, false, true, &status); clearCurrentCharIter(); } @@ -278,7 +278,7 @@ CodePointBreakIterator &CodePointBreakIterator::refreshInputText(UText *input, U } int64_t pos = utext_getNativeIndex(this->fText); - this->fText = utext_clone(this->fText, input, FALSE, TRUE, &status); + this->fText = utext_clone(this->fText, input, false, true, &status); if (U_FAILURE(status)) { return *this; } diff --git a/ext/intl/calendar/calendar.stub.php b/ext/intl/calendar/calendar.stub.php index 5c8953549759b..ded7dfe45d44e 100644 --- a/ext/intl/calendar/calendar.stub.php +++ b/ext/intl/calendar/calendar.stub.php @@ -7,41 +7,41 @@ class IntlCalendar private function __construct() {} /** - * @param IntlTimeZone|DateTimeZone|string|null $timeZone + * @param IntlTimeZone|DateTimeZone|string|null $timezone * @return IntlCalendar|IntlGregorianCalendar|null * @alias intlcal_create_instance */ - public static function createInstance($timeZone = null, ?string $locale = null) {} + public static function createInstance($timezone = null, ?string $locale = null) {} /** * @return bool * @alias intlcal_equals */ - public function equals(IntlCalendar $calendar) {} + public function equals(IntlCalendar $other) {} /** * @return int * @alias intlcal_field_difference */ - public function fieldDifference(float $when, int $field) {} + public function fieldDifference(float $timestamp, int $field) {} /** * @return bool * @alias intlcal_add */ - public function add(int $field, int $amount) {} + public function add(int $field, int $value) {} /** * @return bool * @alias intlcal_after */ - public function after(IntlCalendar $calendar) {} + public function after(IntlCalendar $other) {} /** * @return bool * @alias intlcal_before */ - public function before(IntlCalendar $calendar) {} + public function before(IntlCalendar $other) {} /** * @return bool @@ -53,7 +53,7 @@ public function clear(?int $field = null) {} * @return IntlCalendar|null * @alias intlcal_from_date_time */ - public static function fromDateTime(DateTime|string $dateTime, ?string $locale = null) {} + public static function fromDateTime(DateTime|string $datetime, ?string $locale = null) {} /** * @return int @@ -113,7 +113,7 @@ public function getGreatestMinimum(int $field) {} * @return IntlIterator|false * @alias intlcal_get_keyword_values_for_locale */ - public static function getKeywordValuesForLocale(string $key, string $locale, bool $commonlyUsed) {} + public static function getKeywordValuesForLocale(string $keyword, string $locale, bool $onlyCommon) {} /** * @return int @@ -125,7 +125,7 @@ public function getLeastMaximum(int $field) {} * @return string * @alias intlcal_get_locale */ - public function getLocale(int $localeType) {} + public function getLocale(int $type) {} /** * @return int @@ -143,7 +143,7 @@ public function getMinimalDaysInFirstWeek() {} * @return bool * @alias intlcal_set_minimal_days_in_first_week */ - public function setMinimalDaysInFirstWeek(int $numberOfDays) {} + public function setMinimalDaysInFirstWeek(int $days) {} /** * @return int @@ -203,7 +203,7 @@ public function inDaylightTime() {} * @return bool * @alias intlcal_is_equivalent_to */ - public function isEquivalentTo(IntlCalendar $calendar) {} + public function isEquivalentTo(IntlCalendar $other) {} /** * @return bool @@ -215,14 +215,14 @@ public function isLenient() {} * @return bool * @alias intlcal_is_weekend */ - public function isWeekend(?float $date = null) {} + public function isWeekend(?float $timestamp = null) {} /** - * @param int|bool $amountOrUpOrDown + * @param int|bool $value * @return bool * @alias intlcal_roll */ - public function roll(int $field, $amountOrUpOrDown) {} + public function roll(int $field, $value) {} /** * @return bool @@ -246,32 +246,32 @@ public function setFirstDayOfWeek(int $dayOfWeek) {} * @return bool * @alias intlcal_set_lenient */ - public function setLenient(bool $isLenient) {} + public function setLenient(bool $lenient) {} /** * @return bool * @alias intlcal_set_repeated_wall_time_option */ - public function setRepeatedWallTimeOption(int $wallTimeOption) {} + public function setRepeatedWallTimeOption(int $option) {} /** * @return bool * @alias intlcal_set_skipped_wall_time_option */ - public function setSkippedWallTimeOption(int $wallTimeOption) {} + public function setSkippedWallTimeOption(int $option) {} /** * @return bool * @alias intlcal_set_time */ - public function setTime(float $date) {} + public function setTime(float $timestamp) {} /** - * @param IntlTimeZone|DateTimeZone|string|null $timeZone + * @param IntlTimeZone|DateTimeZone|string|null $timezone * @return bool * @alias intlcal_set_time_zone */ - public function setTimeZone($timeZone) {} + public function setTimeZone($timezone) {} /** * @return DateTime|false @@ -283,20 +283,20 @@ public function toDateTime() {} class IntlGregorianCalendar extends IntlCalendar { /** - * @param DateTimeZone|IntlTimeZone|string|int|null $timeZoneOrYear + * @param DateTimeZone|IntlTimeZone|string|int|null $timezoneOrYear * @param string|int|null $localeOrMonth - * @param int $dayOfMonth + * @param int $day * @param int $hour * @param int $minute * @param int $second */ - public function __construct($timeZoneOrYear = UNKNOWN, $localeOrMonth = UNKNOWN, $dayOfMonth = UNKNOWN, $hour = UNKNOWN, $minute = UNKNOWN, $second = UNKNOWN) {} + public function __construct($timezoneOrYear = UNKNOWN, $localeOrMonth = UNKNOWN, $day = UNKNOWN, $hour = UNKNOWN, $minute = UNKNOWN, $second = UNKNOWN) {} /** * @return bool * @alias intlgregcal_set_gregorian_change */ - public function setGregorianChange(float $change) {} + public function setGregorianChange(float $timestamp) {} /** * @return float diff --git a/ext/intl/calendar/calendar_arginfo.h b/ext/intl/calendar/calendar_arginfo.h index f84bf76140677..29e0d4f9088e4 100644 --- a/ext/intl/calendar/calendar_arginfo.h +++ b/ext/intl/calendar/calendar_arginfo.h @@ -1,26 +1,26 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 0ac7a1d4e011518fc956fb05624b45b061fa9710 */ + * Stub hash: ee755d4a500e2d1ba4d589c233b7d09a06b5cce8 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar___construct, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_createInstance, 0, 0, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timeZone, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timezone, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_equals, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) + ZEND_ARG_OBJ_INFO(0, other, IntlCalendar, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_fieldDifference, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, when, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_add, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, amount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_after arginfo_class_IntlCalendar_equals @@ -32,7 +32,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_clear, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_fromDateTime, 0, 0, 1) - ZEND_ARG_OBJ_TYPE_MASK(0, dateTime, DateTime, MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, datetime, DateTime, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -59,15 +59,15 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_getGreatestMinimum arginfo_class_IntlCalendar_get ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_getKeywordValuesForLocale, 0, 0, 3) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, keyword, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, commonlyUsed, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, onlyCommon, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_getLeastMaximum arginfo_class_IntlCalendar_get ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_getLocale, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, localeType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_getMaximum arginfo_class_IntlCalendar_get @@ -75,7 +75,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_getMinimalDaysInFirstWeek arginfo_class_IntlCalendar___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_setMinimalDaysInFirstWeek, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, numberOfDays, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, days, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_getMinimum arginfo_class_IntlCalendar_get @@ -101,12 +101,12 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_isLenient arginfo_class_IntlCalendar___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_isWeekend, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, date, IS_DOUBLE, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timestamp, IS_DOUBLE, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_roll, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) - ZEND_ARG_INFO(0, amountOrUpOrDown) + ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_isSet arginfo_class_IntlCalendar_get @@ -123,37 +123,35 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_setFirstDayOfWeek arginfo_class_IntlCalendar_getDayOfWeekType ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_setLenient, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, isLenient, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, lenient, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_setRepeatedWallTimeOption, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, wallTimeOption, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_setSkippedWallTimeOption arginfo_class_IntlCalendar_setRepeatedWallTimeOption ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_setTime, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, date, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlCalendar_setTimeZone, 0, 0, 1) - ZEND_ARG_INFO(0, timeZone) + ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() #define arginfo_class_IntlCalendar_toDateTime arginfo_class_IntlCalendar___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlGregorianCalendar___construct, 0, 0, 0) - ZEND_ARG_INFO(0, timeZoneOrYear) + ZEND_ARG_INFO(0, timezoneOrYear) ZEND_ARG_INFO(0, localeOrMonth) - ZEND_ARG_INFO(0, dayOfMonth) + ZEND_ARG_INFO(0, day) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlGregorianCalendar_setGregorianChange, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, change, IS_DOUBLE, 0) -ZEND_END_ARG_INFO() +#define arginfo_class_IntlGregorianCalendar_setGregorianChange arginfo_class_IntlCalendar_setTime #define arginfo_class_IntlGregorianCalendar_getGregorianChange arginfo_class_IntlCalendar___construct diff --git a/ext/intl/collator/collator.stub.php b/ext/intl/collator/collator.stub.php index 68a7da192f450..f42d1508cb965 100644 --- a/ext/intl/collator/collator.stub.php +++ b/ext/intl/collator/collator.stub.php @@ -16,37 +16,37 @@ public static function create(string $locale) {} * @return int|false * @alias collator_compare */ - public function compare(string $str1, string $str2) {} + public function compare(string $string1, string $string2) {} /** * @return bool * @alias collator_sort */ - public function sort(array &$arr, int $sort_flag = Collator::SORT_REGULAR) {} + public function sort(array &$array, int $flags = Collator::SORT_REGULAR) {} /** * @return bool * @alias collator_sort_with_sort_keys */ - public function sortWithSortKeys(array &$arr) {} + public function sortWithSortKeys(array &$array) {} /** * @return bool * @alias collator_asort */ - public function asort(array &$arr, int $sort_flag = Collator::SORT_REGULAR) {} + public function asort(array &$array, int $flags = Collator::SORT_REGULAR) {} /** * @return int|false * @alias collator_get_attribute */ - public function getAttribute(int $attr) {} + public function getAttribute(int $attribute) {} /** * @return bool * @alias collator_set_attribute */ - public function setAttribute(int $attr, int $val) {} + public function setAttribute(int $attribute, int $value) {} /** * @return int @@ -82,5 +82,5 @@ public function getErrorMessage() {} * @return string|false * @alias collator_get_sort_key */ - public function getSortKey(string $str) {} + public function getSortKey(string $string) {} } diff --git a/ext/intl/collator/collator_arginfo.h b/ext/intl/collator/collator_arginfo.h index f0fd448077032..1b7dcc408f51a 100644 --- a/ext/intl/collator/collator_arginfo.h +++ b/ext/intl/collator/collator_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4cb1470cf2566c9d947be638c7d14a14a10290dd */ + * Stub hash: 869c6e60a8f2b153ef79f28a08e165ff3ec2bc14 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) @@ -8,28 +8,28 @@ ZEND_END_ARG_INFO() #define arginfo_class_Collator_create arginfo_class_Collator___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_compare, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_sort, 0, 0, 1) - ZEND_ARG_TYPE_INFO(1, arr, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sort_flag, IS_LONG, 0, "Collator::SORT_REGULAR") + ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "Collator::SORT_REGULAR") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_sortWithSortKeys, 0, 0, 1) - ZEND_ARG_TYPE_INFO(1, arr, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0) ZEND_END_ARG_INFO() #define arginfo_class_Collator_asort arginfo_class_Collator_sort ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_getAttribute, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_setAttribute, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, val, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_getStrength, 0, 0, 0) @@ -48,7 +48,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_Collator_getErrorMessage arginfo_class_Collator_getStrength ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Collator_getSortKey, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() diff --git a/ext/intl/collator/collator_sort.c b/ext/intl/collator/collator_sort.c index b2da7e16fe258..5989ef42b2e67 100644 --- a/ext/intl/collator/collator_sort.c +++ b/ext/intl/collator/collator_sort.c @@ -312,7 +312,7 @@ static void collator_sort_internal( int renumber, INTERNAL_FUNCTION_PARAMETERS ) /* {{{ Sort array using specified collator. */ PHP_FUNCTION( collator_sort ) { - collator_sort_internal( TRUE, INTERNAL_FUNCTION_PARAM_PASSTHRU ); + collator_sort_internal( true, INTERNAL_FUNCTION_PARAM_PASSTHRU ); } /* }}} */ @@ -495,7 +495,7 @@ PHP_FUNCTION( collator_sort_with_sort_keys ) /* {{{ Sort array using specified collator, maintaining index association. */ PHP_FUNCTION( collator_asort ) { - collator_sort_internal( FALSE, INTERNAL_FUNCTION_PARAM_PASSTHRU ); + collator_sort_internal( false, INTERNAL_FUNCTION_PARAM_PASSTHRU ); } /* }}} */ diff --git a/ext/intl/dateformat/dateformat.stub.php b/ext/intl/dateformat/dateformat.stub.php index 53cda18560f2d..032a04c6fafcd 100644 --- a/ext/intl/dateformat/dateformat.stub.php +++ b/ext/intl/dateformat/dateformat.stub.php @@ -8,14 +8,14 @@ class IntlDateFormatter * @param IntlTimeZone|DateTimeZone|string|null $timezone * @param IntlCalendar|int|null $calendar */ - public function __construct(?string $locale, int $datetype, int $timetype, $timezone = null, $calendar = null, string $pattern = "") {} + public function __construct(?string $locale, int $dateType, int $timeType, $timezone = null, $calendar = null, string $pattern = "") {} /** * @param IntlTimeZone|DateTimeZone|string|null $timezone * @return IntlDateFormatter|null * @alias datefmt_create */ - public static function create(?string $locale, int $datetype, int $timetype, $timezone = null, IntlCalendar|int|null $calendar = null, string $pattern = "") {} + public static function create(?string $locale, int $dateType, int $timeType, $timezone = null, IntlCalendar|int|null $calendar = null, string $pattern = "") {} /** * @return int|false @@ -39,7 +39,7 @@ public function getCalendar() {} * @return bool * @alias datefmt_set_calendar */ - public function setCalendar(IntlCalendar|int|null $which) {} + public function setCalendar(IntlCalendar|int|null $calendar) {} /** * @return string|false @@ -60,11 +60,11 @@ public function getCalendarObject() {} public function getTimeZone() {} /** - * @param IntlTimeZone|DateTimeZone|string|null $zone + * @param IntlTimeZone|DateTimeZone|string|null $timezone * @return bool|null * @alias datefmt_set_timezone */ - public function setTimeZone($zone) {} + public function setTimeZone($timezone) {} /** * @return bool @@ -82,7 +82,7 @@ public function getPattern() {} * @return string|false * @alias datefmt_get_locale */ - public function getLocale(int $which = ULOC_ACTUAL_LOCALE) {} + public function getLocale(int $type = ULOC_ACTUAL_LOCALE) {} /** * @return void @@ -97,33 +97,33 @@ public function setLenient(bool $lenient) {} public function isLenient() {} /** - * @param object|array|string|int|float $value + * @param IntlCalendar|DateTimeInterface|array|string|int|float $datetime * @return string|false * @alias datefmt_format */ - public function format($value) {} + public function format($datetime) {} /** - * @param IntlCalendar|DateTime $object + * @param IntlCalendar|DateTime $datetime * @param array|int|string|null $format * @return string|false * @alias datefmt_format_object */ - public static function formatObject($object, $format = null, ?string $locale = null) {} + public static function formatObject($datetime, $format = null, ?string $locale = null) {} /** - * @param int $position + * @param int $offset * @return int|float|false * @alias datefmt_parse */ - public function parse(string $value, &$position = null) {} + public function parse(string $string, &$offset = null) {} /** - * @param int $position + * @param int $offset * @return array|false * @alias datefmt_localtime */ - public function localtime(string $value, &$position = null) {} + public function localtime(string $string, &$offset = null) {} /** * @return int diff --git a/ext/intl/dateformat/dateformat_arginfo.h b/ext/intl/dateformat/dateformat_arginfo.h index 7a468d4fda6b9..d406fce6ed8a8 100644 --- a/ext/intl/dateformat/dateformat_arginfo.h +++ b/ext/intl/dateformat/dateformat_arginfo.h @@ -1,10 +1,10 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 6e7935cd23cd9bba625cf65d08d8e3796f938d74 */ + * Stub hash: 437726f2d61a93d530e7e3b6df0741ae68c64697 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter___construct, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, datetype, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, timetype, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, dateType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, timeType, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timezone, "null") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, calendar, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"\"") @@ -12,8 +12,8 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_create, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, datetype, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, timetype, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, dateType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, timeType, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timezone, "null") ZEND_ARG_OBJ_TYPE_MASK(0, calendar, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"\"") @@ -27,7 +27,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_getCalendar arginfo_class_IntlDateFormatter_getDateType ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_setCalendar, 0, 0, 1) - ZEND_ARG_OBJ_TYPE_MASK(0, which, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, calendar, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, NULL) ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_getTimeZoneId arginfo_class_IntlDateFormatter_getDateType @@ -37,7 +37,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_getTimeZone arginfo_class_IntlDateFormatter_getDateType ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_setTimeZone, 0, 0, 1) - ZEND_ARG_INFO(0, zone) + ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_setPattern, 0, 0, 1) @@ -47,7 +47,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_getPattern arginfo_class_IntlDateFormatter_getDateType ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_getLocale, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, which, IS_LONG, 0, "ULOC_ACTUAL_LOCALE") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "ULOC_ACTUAL_LOCALE") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_setLenient, 0, 0, 1) @@ -57,18 +57,18 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_isLenient arginfo_class_IntlDateFormatter_getDateType ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_format, 0, 0, 1) - ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, datetime) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_formatObject, 0, 0, 1) - ZEND_ARG_INFO(0, object) + ZEND_ARG_INFO(0, datetime) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, format, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDateFormatter_parse, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() #define arginfo_class_IntlDateFormatter_localtime arginfo_class_IntlDateFormatter_parse diff --git a/ext/intl/dateformat/dateformat_attr.c b/ext/intl/dateformat/dateformat_attr.c index 7f67afe5b3ca6..2d2dbdfb6ccc4 100644 --- a/ext/intl/dateformat/dateformat_attr.c +++ b/ext/intl/dateformat/dateformat_attr.c @@ -69,7 +69,7 @@ PHP_FUNCTION( datefmt_get_pattern ) UChar value_buf[64]; uint32_t length = USIZE( value_buf ); UChar* value = value_buf; - zend_bool is_pattern_localized =FALSE; + zend_bool is_pattern_localized = false; DATE_FORMAT_METHOD_INIT_VARS; @@ -106,7 +106,7 @@ PHP_FUNCTION( datefmt_set_pattern ) size_t value_len = 0; int32_t slength = 0; UChar* svalue = NULL; - zend_bool is_pattern_localized =FALSE; + zend_bool is_pattern_localized = false; DATE_FORMAT_METHOD_INIT_VARS; @@ -184,7 +184,7 @@ PHP_FUNCTION( datefmt_is_lenient ) /* {{{ Set formatter lenient. */ PHP_FUNCTION( datefmt_set_lenient ) { - zend_bool isLenient = FALSE; + zend_bool isLenient = false; DATE_FORMAT_METHOD_INIT_VARS; diff --git a/ext/intl/dateformat/dateformat_create.cpp b/ext/intl/dateformat/dateformat_create.cpp index 43e113fab1cf8..e80b5d0131509 100644 --- a/ext/intl/dateformat/dateformat_create.cpp +++ b/ext/intl/dateformat/dateformat_create.cpp @@ -54,7 +54,7 @@ static zend_result datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS) zend_long date_type = 0; zend_long time_type = 0; zend_object *calendar_obj = NULL; - zend_long calendar_long; + zend_long calendar_long = 0; zend_bool calendar_is_null = 1; Calendar *cal = NULL; zend_long calendar_type; diff --git a/ext/intl/formatter/formatter.stub.php b/ext/intl/formatter/formatter.stub.php index 8c4694e4ecf50..045b0640ce72f 100644 --- a/ext/intl/formatter/formatter.stub.php +++ b/ext/intl/formatter/formatter.stub.php @@ -16,64 +16,64 @@ public static function create(string $locale, int $style, string $pattern = "") * @return string|false * @alias numfmt_format */ - public function format(int|float $value, int $type = NumberFormatter::TYPE_DEFAULT) {} + public function format(int|float $num, int $type = NumberFormatter::TYPE_DEFAULT) {} /** - * @param int $position + * @param int $offset * @return int|float|false * @alias numfmt_parse */ - public function parse(string $value, int $type = NumberFormatter::TYPE_DOUBLE, &$position = null) {} + public function parse(string $string, int $type = NumberFormatter::TYPE_DOUBLE, &$offset = null) {} /** * @return string|false * @alias numfmt_format_currency */ - public function formatCurrency(float $value, string $currency) {} + public function formatCurrency(float $amount, string $currency) {} /** * @param string $currency - * @param int $position + * @param int $offset * @return float|false * @alias numfmt_parse_currency */ - public function parseCurrency(string $value, &$currency, &$position = null) {} + public function parseCurrency(string $string, &$currency, &$offset = null) {} /** * @return bool * @alias numfmt_set_attribute */ - public function setAttribute(int $attr, int|float $value) {} + public function setAttribute(int $attribute, int|float $value) {} /** * @return int|float|false * @alias numfmt_get_attribute */ - public function getAttribute(int $attr) {} + public function getAttribute(int $attribute) {} /** * @return bool * @alias numfmt_set_text_attribute */ - public function setTextAttribute(int $attr, string $value) {} + public function setTextAttribute(int $attribute, string $value) {} /** * @return string|false * @alias numfmt_get_text_attribute */ - public function getTextAttribute(int $attr) {} + public function getTextAttribute(int $attribute) {} /** * @return bool * @alias numfmt_set_symbol */ - public function setSymbol(int $attr, string $value) {} + public function setSymbol(int $symbol, string $value) {} /** * @return string|false * @alias numfmt_get_symbol */ - public function getSymbol(int $attr) {} + public function getSymbol(int $symbol) {} /** * @return bool diff --git a/ext/intl/formatter/formatter_arginfo.h b/ext/intl/formatter/formatter_arginfo.h index e0531bcc20b27..79f977fb811f4 100644 --- a/ext/intl/formatter/formatter_arginfo.h +++ b/ext/intl/formatter/formatter_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 60a05cccb434edadeec01cb7d43f919c276ce24d */ + * Stub hash: 0f285bbaa6f4f37060eb8325956f41bd86e9dea3 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) @@ -10,46 +10,51 @@ ZEND_END_ARG_INFO() #define arginfo_class_NumberFormatter_create arginfo_class_NumberFormatter___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_format, 0, 0, 1) - ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) + ZEND_ARG_TYPE_MASK(0, num, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "NumberFormatter::TYPE_DEFAULT") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_parse, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "NumberFormatter::TYPE_DOUBLE") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_formatCurrency, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, amount, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, currency, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_parseCurrency, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_INFO(1, currency) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_setAttribute, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_getAttribute, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_setTextAttribute, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_NumberFormatter_getTextAttribute arginfo_class_NumberFormatter_getAttribute -#define arginfo_class_NumberFormatter_setSymbol arginfo_class_NumberFormatter_setTextAttribute +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_setSymbol, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, symbol, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_NumberFormatter_getSymbol arginfo_class_NumberFormatter_getAttribute +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_getSymbol, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, symbol, IS_LONG, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NumberFormatter_setPattern, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) diff --git a/ext/intl/locale/locale.stub.php b/ext/intl/locale/locale.stub.php index 8a23a291b0d95..e5703293c025b 100644 --- a/ext/intl/locale/locale.stub.php +++ b/ext/intl/locale/locale.stub.php @@ -44,31 +44,31 @@ public static function getKeywords(string $locale) {} * @return string|false * @alias locale_get_display_script */ - public static function getDisplayScript(string $locale, ?string $in_locale = null) {} + public static function getDisplayScript(string $locale, ?string $displayLocale = null) {} /** * @return string|false * @alias locale_get_display_region */ - public static function getDisplayRegion(string $locale, ?string $in_locale = null) {} + public static function getDisplayRegion(string $locale, ?string $displayLocale = null) {} /** * @return string|false * @alias locale_get_display_name */ - public static function getDisplayName(string $locale, ?string $in_locale = null) {} + public static function getDisplayName(string $locale, ?string $displayLocale = null) {} /** * @return string|false * @alias locale_get_display_language */ - public static function getDisplayLanguage(string $locale, ?string $in_locale = null) {} + public static function getDisplayLanguage(string $locale, ?string $displayLocale = null) {} /** * @return string|false * @alias locale_get_display_variant */ - public static function getDisplayVariant(string $locale, ?string $in_locale = null) {} + public static function getDisplayVariant(string $locale, ?string $displayLocale = null) {} /** * @return string|false @@ -92,13 +92,13 @@ public static function getAllVariants(string $locale) {} * @return bool|null * @alias locale_filter_matches */ - public static function filterMatches(string $langtag, string $locale, bool $canonicalize = false) {} + public static function filterMatches(string $languageTag, string $locale, bool $canonicalize = false) {} /** * @return string|null * @alias locale_lookup */ - public static function lookup(array $langtag, string $locale, bool $canonicalize = false, ?string $def = null) {} + public static function lookup(array $languageTag, string $locale, bool $canonicalize = false, ?string $defaultLocale = null) {} /** * @return string|null diff --git a/ext/intl/locale/locale_arginfo.h b/ext/intl/locale/locale_arginfo.h index 9a6e27d48d9aa..e952146362353 100644 --- a/ext/intl/locale/locale_arginfo.h +++ b/ext/intl/locale/locale_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 6d010c8797cbf11f12f13ce37eb8b36633bdbafb */ + * Stub hash: 4135dc9df49d3fe20275d49bad428a2e3e0a8752 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Locale_getDefault, 0, 0, 0) ZEND_END_ARG_INFO() @@ -18,7 +18,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Locale_getDisplayScript, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, in_locale, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, displayLocale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_Locale_getDisplayRegion arginfo_class_Locale_getDisplayScript @@ -38,16 +38,16 @@ ZEND_END_ARG_INFO() #define arginfo_class_Locale_getAllVariants arginfo_class_Locale_setDefault ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Locale_filterMatches, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, langtag, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, languageTag, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, canonicalize, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Locale_lookup, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, langtag, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, languageTag, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, canonicalize, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, def, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, defaultLocale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_Locale_canonicalize arginfo_class_Locale_setDefault diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c index 466dafadaceda..9357475f55150 100644 --- a/ext/intl/locale/locale_methods.c +++ b/ext/intl/locale/locale_methods.c @@ -83,14 +83,14 @@ static const char * const LOC_PREFERRED_GRANDFATHERED[] = { NULL }; -/*returns TRUE if a is an ID separator FALSE otherwise*/ +/* returns true if a is an ID separator, false otherwise */ #define isIDSeparator(a) (a == '_' || a == '-') #define isKeywordSeparator(a) (a == '@' ) #define isEndOfTag(a) (a == '\0' ) #define isPrefixLetter(a) ((a=='x')||(a=='X')||(a=='i')||(a=='I')) -/*returns TRUE if one of the special prefixes is here (s=string) +/*returns true if one of the special prefixes is here (s=string) 'x-' or 'i-' */ #define isIDPrefix(s) (isPrefixLetter(s[0])&&isIDSeparator(s[1])) #define isKeywordPrefix(s) ( isKeywordSeparator(s[0]) ) diff --git a/ext/intl/msgformat/msgformat.c b/ext/intl/msgformat/msgformat.c index cb625ed0372f2..fdb366c1b12a8 100644 --- a/ext/intl/msgformat/msgformat.c +++ b/ext/intl/msgformat/msgformat.c @@ -34,6 +34,7 @@ static int msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS) int spattern_len = 0; zval* object; MessageFormatter_object* mfo; + UParseError parse_error; intl_error_reset( NULL ); object = return_value; @@ -74,12 +75,26 @@ static int msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS) (mfo)->mf_data.orig_format_len = pattern_len; /* Create an ICU message formatter. */ - MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, locale, NULL, &INTL_DATA_ERROR_CODE(mfo)); + MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, locale, &parse_error, &INTL_DATA_ERROR_CODE(mfo)); if(spattern) { efree(spattern); } + if (INTL_DATA_ERROR_CODE( mfo ) == U_PATTERN_SYNTAX_ERROR) { + char *msg = NULL; + smart_str parse_error_str; + parse_error_str = intl_parse_error_to_string( &parse_error ); + spprintf( &msg, 0, "pattern syntax error (%s)", parse_error_str.s? ZSTR_VAL(parse_error_str.s) : "unknown parser error" ); + smart_str_free( &parse_error_str ); + + intl_error_set_code( NULL, INTL_DATA_ERROR_CODE( mfo ) ); + intl_errors_set_custom_msg( INTL_DATA_ERROR_P( mfo ), msg, 1 ); + + efree( msg ); + return FAILURE; + } + INTL_CTOR_CHECK_STATUS(mfo, "msgfmt_create: message formatter creation failed"); return SUCCESS; } @@ -105,7 +120,9 @@ PHP_METHOD( MessageFormatter, __construct ) return_value = ZEND_THIS; if (msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU) == FAILURE) { if (!EG(exception)) { - zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0); + zend_string *err = intl_error_get_message(NULL); + zend_throw_exception(IntlException_ce_ptr, ZSTR_VAL(err), intl_error_get_code(NULL)); + zend_string_release_ex(err, 0); } } zend_restore_error_handling(&error_handling); diff --git a/ext/intl/msgformat/msgformat.stub.php b/ext/intl/msgformat/msgformat.stub.php index a7fdb91a0cf39..a9a3e3e181bb9 100644 --- a/ext/intl/msgformat/msgformat.stub.php +++ b/ext/intl/msgformat/msgformat.stub.php @@ -16,25 +16,25 @@ public static function create(string $locale, string $pattern) {} * @return string|false * @alias msgfmt_format */ - public function format(array $args) {} + public function format(array $values) {} /** * @return string|false * @alias msgfmt_format_message */ - public static function formatMessage(string $locale, string $pattern, array $args) {} + public static function formatMessage(string $locale, string $pattern, array $values) {} /** * @return array|false * @alias msgfmt_parse */ - public function parse(string $value) {} + public function parse(string $string) {} /** * @return array|false * @alias msgfmt_parse_message */ - public static function parseMessage(string $locale, string $pattern, string $source) {} + public static function parseMessage(string $locale, string $pattern, string $message) {} /** * @return bool diff --git a/ext/intl/msgformat/msgformat_arginfo.h b/ext/intl/msgformat/msgformat_arginfo.h index efbc1e7d69941..3bad9aa498493 100644 --- a/ext/intl/msgformat/msgformat_arginfo.h +++ b/ext/intl/msgformat/msgformat_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: ffa9513a18a634b034b0490bc712d097dc8d36e8 */ + * Stub hash: ece8c5157dc3a62ca2951d058b3c5497bb5cb836 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) @@ -9,23 +9,23 @@ ZEND_END_ARG_INFO() #define arginfo_class_MessageFormatter_create arginfo_class_MessageFormatter___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter_format, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter_formatMessage, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter_parse, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter_parseMessage, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MessageFormatter_setPattern, 0, 0, 1) diff --git a/ext/intl/msgformat/msgformat_format.c b/ext/intl/msgformat/msgformat_format.c index 1e4c49609ec33..0f422d23014b1 100644 --- a/ext/intl/msgformat/msgformat_format.c +++ b/ext/intl/msgformat/msgformat_format.c @@ -80,6 +80,7 @@ PHP_FUNCTION( msgfmt_format_message ) size_t slocale_len = 0; MessageFormatter_object mf; MessageFormatter_object *mfo = &mf; + UParseError parse_error; /* Parse parameters. */ if( zend_parse_method_parameters( ZEND_NUM_ARGS(), getThis(), "ssa", @@ -119,10 +120,25 @@ PHP_FUNCTION( msgfmt_format_message ) #endif /* Create an ICU message formatter. */ - MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, slocale, NULL, &INTL_DATA_ERROR_CODE(mfo)); + MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, slocale, &parse_error, &INTL_DATA_ERROR_CODE(mfo)); if(spattern && spattern_len) { efree(spattern); } + + if (INTL_DATA_ERROR_CODE( mfo ) == U_PATTERN_SYNTAX_ERROR) { + char *msg = NULL; + smart_str parse_error_str; + parse_error_str = intl_parse_error_to_string( &parse_error ); + spprintf( &msg, 0, "pattern syntax error (%s)", parse_error_str.s? ZSTR_VAL(parse_error_str.s) : "unknown parser error" ); + smart_str_free( &parse_error_str ); + + intl_error_set_code( NULL, INTL_DATA_ERROR_CODE( mfo ) ); + intl_errors_set_custom_msg( INTL_DATA_ERROR_P( mfo ), msg, 1 ); + + efree( msg ); + RETURN_FALSE; + } + INTL_METHOD_CHECK_STATUS(mfo, "Creating message formatter failed"); msgfmt_do_format(mfo, args, return_value); diff --git a/ext/intl/normalizer/normalizer.stub.php b/ext/intl/normalizer/normalizer.stub.php index 797eb236b7e77..243ace532d1cc 100644 --- a/ext/intl/normalizer/normalizer.stub.php +++ b/ext/intl/normalizer/normalizer.stub.php @@ -8,19 +8,19 @@ class Normalizer * @return string|false * @alias normalizer_normalize */ - public static function normalize(string $input, int $form = Normalizer::FORM_C) {} + public static function normalize(string $string, int $form = Normalizer::FORM_C) {} /** * @return bool * @alias normalizer_is_normalized */ - public static function isNormalized(string $input, int $form = Normalizer::FORM_C) {} + public static function isNormalized(string $string, int $form = Normalizer::FORM_C) {} #if U_ICU_VERSION_MAJOR_NUM >= 56 /** * @return string|null * @alias normalizer_get_raw_decomposition */ - public static function getRawDecomposition(string $input, int $form = Normalizer::FORM_C) {} + public static function getRawDecomposition(string $string, int $form = Normalizer::FORM_C) {} #endif } diff --git a/ext/intl/normalizer/normalizer_arginfo.h b/ext/intl/normalizer/normalizer_arginfo.h index 82006f52ea755..cd5a41de60883 100644 --- a/ext/intl/normalizer/normalizer_arginfo.h +++ b/ext/intl/normalizer/normalizer_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: a1f54793e243d30e75cefd4f9aea17f1509a9c8d */ + * Stub hash: 3b9ef4888cc32bd009fb87db52859953902454fc */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Normalizer_normalize, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, form, IS_LONG, 0, "Normalizer::FORM_C") ZEND_END_ARG_INFO() @@ -10,7 +10,7 @@ ZEND_END_ARG_INFO() #if U_ICU_VERSION_MAJOR_NUM >= 56 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Normalizer_getRawDecomposition, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, form, IS_LONG, 0, "Normalizer::FORM_C") ZEND_END_ARG_INFO() #endif diff --git a/ext/intl/normalizer/normalizer_normalize.c b/ext/intl/normalizer/normalizer_normalize.c index 5eca379c9905b..edeeea7f4be17 100644 --- a/ext/intl/normalizer/normalizer_normalize.c +++ b/ext/intl/normalizer/normalizer_normalize.c @@ -69,7 +69,7 @@ static UBool intl_is_normalized(zend_long form, const UChar *uinput, int32_t uin const UNormalizer2 *norm = intl_get_normalizer(form, err); if(U_FAILURE(*err)) { - return FALSE; + return false; } return unorm2_isNormalized(norm, uinput, uinput_len, err); @@ -226,7 +226,7 @@ PHP_FUNCTION( normalizer_is_normalized ) int uinput_len = 0; UErrorCode status = U_ZERO_ERROR; - UBool uret = FALSE; + UBool uret = false; intl_error_reset( NULL ); diff --git a/ext/intl/php_intl.stub.php b/ext/intl/php_intl.stub.php index 67bd27be92a0f..26b7922c2c702 100644 --- a/ext/intl/php_intl.stub.php +++ b/ext/intl/php_intl.stub.php @@ -4,10 +4,10 @@ /* calendar */ -/** @param IntlTimeZone|DateTimeZone|string|null $timeZone */ -function intlcal_create_instance($timeZone = null, ?string $locale = null): ?IntlCalendar {} +/** @param IntlTimeZone|DateTimeZone|string|null $timezone */ +function intlcal_create_instance($timezone = null, ?string $locale = null): ?IntlCalendar {} -function intlcal_get_keyword_values_for_locale(string $key, string $locale, bool $commonlyUsed): IntlIterator|false {} +function intlcal_get_keyword_values_for_locale(string $keyword, string $locale, bool $onlyCommon): IntlIterator|false {} function intlcal_get_now(): float {} @@ -17,25 +17,25 @@ function intlcal_get(IntlCalendar $calendar, int $field): int {} function intlcal_get_time(IntlCalendar $calendar): float {} -function intlcal_set_time(IntlCalendar $calendar, float $date): bool {} +function intlcal_set_time(IntlCalendar $calendar, float $timestamp): bool {} -function intlcal_add(IntlCalendar $calendar, int $field, int $amount): bool {} +function intlcal_add(IntlCalendar $calendar, int $field, int $value): bool {} -/** @param IntlTimeZone|DateTimeZone|string|null $timeZone */ -function intlcal_set_time_zone(IntlCalendar $calendar, $timeZone): bool {} +/** @param IntlTimeZone|DateTimeZone|string|null $timezone */ +function intlcal_set_time_zone(IntlCalendar $calendar, $timezone): bool {} -function intlcal_after(IntlCalendar $calendarObject, IntlCalendar $calendar): bool {} +function intlcal_after(IntlCalendar $calendar, IntlCalendar $other): bool {} -function intlcal_before(IntlCalendar $calendarObject, IntlCalendar $calendar): bool {} +function intlcal_before(IntlCalendar $calendar, IntlCalendar $other): bool {} function intlcal_set(IntlCalendar $calendar, int $year, int $month, int $dayOfMonth = UNKNOWN, int $hour = UNKNOWN, int $minute = UNKNOWN, int $second = UNKNOWN): bool {} -/** @param int|bool $amountOrUpOrDown */ -function intlcal_roll(IntlCalendar $calendar, int $field, $amountOrUpOrDown): bool {} +/** @param int|bool $value */ +function intlcal_roll(IntlCalendar $calendar, int $field, $value): bool {} function intlcal_clear(IntlCalendar $calendar, ?int $field = null): bool {} -function intlcal_field_difference(IntlCalendar $calendar, float $when, int $field): int {} +function intlcal_field_difference(IntlCalendar $calendar, float $timestamp, int $field): int {} function intlcal_get_actual_maximum(IntlCalendar $calendar, int $field): int {} @@ -49,13 +49,13 @@ function intlcal_get_least_maximum(IntlCalendar $calendar, int $field): int {} function intlcal_get_greatest_minimum(IntlCalendar $calendar, int $field): int {} -function intlcal_get_locale(IntlCalendar $calendar, int $localeType): string {} +function intlcal_get_locale(IntlCalendar $calendar, int $type): string {} function intlcal_get_maximum(IntlCalendar $calendar, int $field): int {} function intlcal_get_minimal_days_in_first_week(IntlCalendar $calendar): int {} -function intlcal_set_minimal_days_in_first_week(IntlCalendar $calendar, int $numberOfDays): bool {} +function intlcal_set_minimal_days_in_first_week(IntlCalendar $calendar, int $days): bool {} function intlcal_get_minimum(IntlCalendar $calendar, int $field): int {} @@ -71,25 +71,25 @@ function intlcal_is_lenient(IntlCalendar $calendar): bool {} function intlcal_is_set(IntlCalendar $calendar, int $field): bool {} -function intlcal_is_equivalent_to(IntlCalendar $calendarObject, IntlCalendar $calendar): bool {} +function intlcal_is_equivalent_to(IntlCalendar $calendar, IntlCalendar $other): bool {} -function intlcal_is_weekend(IntlCalendar $calendar, ?float $date = null): bool {} +function intlcal_is_weekend(IntlCalendar $calendar, ?float $timestamp = null): bool {} function intlcal_set_first_day_of_week(IntlCalendar $calendar, int $dayOfWeek): bool {} -function intlcal_set_lenient(IntlCalendar $calendar, bool $isLenient): bool {} +function intlcal_set_lenient(IntlCalendar $calendar, bool $lenient): bool {} function intlcal_get_repeated_wall_time_option(IntlCalendar $calendar): int {} -function intlcal_equals(IntlCalendar $calendarObject, IntlCalendar $calendar): bool {} +function intlcal_equals(IntlCalendar $calendar, IntlCalendar $other): bool {} function intlcal_get_skipped_wall_time_option(IntlCalendar $calendar): int {} -function intlcal_set_repeated_wall_time_option(IntlCalendar $calendar, int $wallTimeOption): bool {} +function intlcal_set_repeated_wall_time_option(IntlCalendar $calendar, int $option): bool {} -function intlcal_set_skipped_wall_time_option(IntlCalendar $calendar, int $wallTimeOption): bool {} +function intlcal_set_skipped_wall_time_option(IntlCalendar $calendar, int $option): bool {} -function intlcal_from_date_time(DateTime|string $dateTime, ?string $locale = null): ?IntlCalendar {} +function intlcal_from_date_time(DateTime|string $datetime, ?string $locale = null): ?IntlCalendar {} function intlcal_to_date_time(IntlCalendar $calendar): DateTime|false {} @@ -98,16 +98,16 @@ function intlcal_get_error_code(IntlCalendar $calendar): int|false {} function intlcal_get_error_message(IntlCalendar $calendar): string|false {} /** - * @param DateTimeZone|IntlTimeZone|string|int|null $timeZoneOrYear + * @param DateTimeZone|IntlTimeZone|string|int|null $timezoneOrYear * @param string|int|null $localeOrMonth - * @param int $dayOfMonth + * @param int $day * @param int $hour * @param int $minute * @param int $second */ -function intlgregcal_create_instance($timeZoneOrYear = UNKNOWN, $localeOrMonth = UNKNOWN, $dayOfMonth = UNKNOWN, $hour = UNKNOWN, $minute = UNKNOWN, $second = UNKNOWN): ?IntlGregorianCalendar {} +function intlgregcal_create_instance($timezoneOrYear = UNKNOWN, $localeOrMonth = UNKNOWN, $day = UNKNOWN, $hour = UNKNOWN, $minute = UNKNOWN, $second = UNKNOWN): ?IntlGregorianCalendar {} -function intlgregcal_set_gregorian_change(IntlGregorianCalendar $calendar, float $change): bool {} +function intlgregcal_set_gregorian_change(IntlGregorianCalendar $calendar, float $timestamp): bool {} function intlgregcal_get_gregorian_change(IntlGregorianCalendar $calendar): float {} @@ -117,21 +117,21 @@ function intlgregcal_is_leap_year(IntlGregorianCalendar $calendar, int $year): b function collator_create(string $locale): ?Collator {} -function collator_compare(Collator $object, string $str1, string $str2): int|false {} +function collator_compare(Collator $object, string $string1, string $string2): int|false {} -function collator_get_attribute(Collator $object, int $attr): int|false {} +function collator_get_attribute(Collator $object, int $attribute): int|false {} -function collator_set_attribute(Collator $object, int $attr, int $val): bool {} +function collator_set_attribute(Collator $object, int $attribute, int $value): bool {} function collator_get_strength(Collator $object): int {} function collator_set_strength(Collator $object, int $strength): bool {} -function collator_sort(Collator $object, array &$arr, int $sort_flag = Collator::SORT_REGULAR): bool {} +function collator_sort(Collator $object, array &$array, int $flags = Collator::SORT_REGULAR): bool {} -function collator_sort_with_sort_keys(Collator $object, array &$arr): bool {} +function collator_sort_with_sort_keys(Collator $object, array &$array): bool {} -function collator_asort(Collator $object, array &$arr, int $sort_flag = Collator::SORT_REGULAR): bool {} +function collator_asort(Collator $object, array &$array, int $flags = Collator::SORT_REGULAR): bool {} function collator_get_locale(Collator $object, int $type): string|false {} @@ -139,7 +139,7 @@ function collator_get_error_code(Collator $object): int|false {} function collator_get_error_message(Collator $object): string|false {} -function collator_get_sort_key(Collator $object, string $str): string|false {} +function collator_get_sort_key(Collator $object, string $string): string|false {} /* common */ @@ -147,103 +147,103 @@ function intl_get_error_code(): int {} function intl_get_error_message(): string {} -function intl_is_failure(int $error_code): bool {} +function intl_is_failure(int $errorCode): bool {} -function intl_error_name(int $error_code): string {} +function intl_error_name(int $errorCode): string {} /* dateformat */ /** @param IntlTimeZone|DateTimeZone|string|null $timezone */ -function datefmt_create(?string $locale, int $datetype, int $timetype, $timezone = null, IntlCalendar|int|null $calendar = null, string $pattern = ""): ?IntlDateFormatter {} +function datefmt_create(?string $locale, int $dateType, int $timeType, $timezone = null, IntlCalendar|int|null $calendar = null, string $pattern = ""): ?IntlDateFormatter {} -function datefmt_get_datetype(IntlDateFormatter $df): int|false {} +function datefmt_get_datetype(IntlDateFormatter $formatter): int|false {} -function datefmt_get_timetype(IntlDateFormatter $df): int|false {} +function datefmt_get_timetype(IntlDateFormatter $formatter): int|false {} -function datefmt_get_calendar(IntlDateFormatter $df): int|false {} +function datefmt_get_calendar(IntlDateFormatter $formatter): int|false {} -function datefmt_set_calendar(IntlDateFormatter $df, IntlCalendar|int|null $which): bool {} +function datefmt_set_calendar(IntlDateFormatter $formatter, IntlCalendar|int|null $calendar): bool {} -function datefmt_get_timezone_id(IntlDateFormatter $df): string|false {} +function datefmt_get_timezone_id(IntlDateFormatter $formatter): string|false {} -function datefmt_get_calendar_object(IntlDateFormatter $df): IntlCalendar|false|null {} +function datefmt_get_calendar_object(IntlDateFormatter $formatter): IntlCalendar|false|null {} -function datefmt_get_timezone(IntlDateFormatter $df): IntlTimeZone|false {} +function datefmt_get_timezone(IntlDateFormatter $formatter): IntlTimeZone|false {} -/** @param IntlTimeZone|DateTimeZone|string|null $zone */ -function datefmt_set_timezone(IntlDateFormatter $df, $zone): ?bool {} +/** @param IntlTimeZone|DateTimeZone|string|null $timezone */ +function datefmt_set_timezone(IntlDateFormatter $formatter, $timezone): ?bool {} -function datefmt_set_pattern(IntlDateFormatter $df, string $pattern): bool {} +function datefmt_set_pattern(IntlDateFormatter $formatter, string $pattern): bool {} -function datefmt_get_pattern(IntlDateFormatter $df): string|false {} +function datefmt_get_pattern(IntlDateFormatter $formatter): string|false {} -function datefmt_get_locale(IntlDateFormatter $df, int $which = ULOC_ACTUAL_LOCALE): string|false {} +function datefmt_get_locale(IntlDateFormatter $formatter, int $type = ULOC_ACTUAL_LOCALE): string|false {} -function datefmt_set_lenient(IntlDateFormatter $df, bool $lenient): void {} +function datefmt_set_lenient(IntlDateFormatter $formatter, bool $lenient): void {} -function datefmt_is_lenient(IntlDateFormatter $df): bool {} +function datefmt_is_lenient(IntlDateFormatter $formatter): bool {} -/** @param object|array|string|int|float $value */ -function datefmt_format(IntlDateFormatter $df, $value): string|false {} +/** @param IntlCalendar|DateTimeInterface|array|string|int|float $datetime */ +function datefmt_format(IntlDateFormatter $formatter, $datetime): string|false {} /** - * @param IntlCalendar|DateTimeInterface $object + * @param IntlCalendar|DateTimeInterface $datetime * @param array|int|string|null $format */ -function datefmt_format_object($object, $format = null, ?string $locale = null): string|false {} +function datefmt_format_object($datetime, $format = null, ?string $locale = null): string|false {} -/** @param int $position */ -function datefmt_parse(IntlDateFormatter $df, string $value, &$position = null): int|float|false {} +/** @param int $offset */ +function datefmt_parse(IntlDateFormatter $formatter, string $string, &$offset = null): int|float|false {} -/** @param int $position */ -function datefmt_localtime(IntlDateFormatter $df, string $value, &$position = null): array|false {} +/** @param int $offset */ +function datefmt_localtime(IntlDateFormatter $formatter, string $string, &$offset = null): array|false {} -function datefmt_get_error_code(IntlDateFormatter $df): int {} +function datefmt_get_error_code(IntlDateFormatter $formatter): int {} -function datefmt_get_error_message(IntlDateFormatter $df): string {} +function datefmt_get_error_message(IntlDateFormatter $formatter): string {} /* formatter */ function numfmt_create(string $locale, int $style, string $pattern = ""): ?NumberFormatter {} -function numfmt_format(NumberFormatter $fmt, int|float $value, int $type = NumberFormatter::TYPE_DEFAULT): string|false {} +function numfmt_format(NumberFormatter $formatter, int|float $num, int $type = NumberFormatter::TYPE_DEFAULT): string|false {} -/** @param int $position */ -function numfmt_parse(NumberFormatter $fmt, string $value, int $type = NumberFormatter::TYPE_DOUBLE, &$position = null): int|float|false {} +/** @param int $offset */ +function numfmt_parse(NumberFormatter $formatter, string $string, int $type = NumberFormatter::TYPE_DOUBLE, &$offset = null): int|float|false {} -function numfmt_format_currency(NumberFormatter $fmt, float $value, string $currency): string|false {} +function numfmt_format_currency(NumberFormatter $formatter, float $amount, string $currency): string|false {} /** * @param string $currency - * @param int $position + * @param int $offset */ -function numfmt_parse_currency(NumberFormatter $fmt, string $value, &$currency, &$position = null): float|false {} +function numfmt_parse_currency(NumberFormatter $formatter, string $string, &$currency, &$offset = null): float|false {} -function numfmt_set_attribute(NumberFormatter $fmt, int $attr, int|float $value): bool {} +function numfmt_set_attribute(NumberFormatter $formatter, int $attribute, int|float $value): bool {} -function numfmt_get_attribute(NumberFormatter $fmt, int $attr): int|float|false {} +function numfmt_get_attribute(NumberFormatter $formatter, int $attribute): int|float|false {} -function numfmt_set_text_attribute(NumberFormatter $fmt, int $attr, string $value): bool {} +function numfmt_set_text_attribute(NumberFormatter $formatter, int $attribute, string $value): bool {} -function numfmt_get_text_attribute(NumberFormatter $fmt, int $attr): string|false {} +function numfmt_get_text_attribute(NumberFormatter $formatter, int $attribute): string|false {} -function numfmt_set_symbol(NumberFormatter $fmt, int $attr, string $value): bool {} +function numfmt_set_symbol(NumberFormatter $formatter, int $symbol, string $value): bool {} -function numfmt_get_symbol(NumberFormatter $fmt, int $attr): string|false {} +function numfmt_get_symbol(NumberFormatter $formatter, int $symbol): string|false {} -function numfmt_set_pattern(NumberFormatter $fmt, string $pattern): bool {} +function numfmt_set_pattern(NumberFormatter $formatter, string $pattern): bool {} -function numfmt_get_pattern(NumberFormatter $fmt): string|false {} +function numfmt_get_pattern(NumberFormatter $formatter): string|false {} -function numfmt_get_locale(NumberFormatter $fmt, int $type = ULOC_ACTUAL_LOCALE): string|false {} +function numfmt_get_locale(NumberFormatter $formatter, int $type = ULOC_ACTUAL_LOCALE): string|false {} -function numfmt_get_error_code(NumberFormatter $fmt): int {} +function numfmt_get_error_code(NumberFormatter $formatter): int {} -function numfmt_get_error_message(NumberFormatter $fmt): string {} +function numfmt_get_error_message(NumberFormatter $formatter): string {} /* grapheme */ -function grapheme_strlen(string $input): int|false|null {} +function grapheme_strlen(string $string): int|false|null {} function grapheme_strpos(string $haystack, string $needle, int $offset = 0): int|false {} @@ -253,29 +253,29 @@ function grapheme_strrpos(string $haystack, string $needle, int $offset = 0): in function grapheme_strripos(string $haystack, string $needle, int $offset = 0): int|false {} -function grapheme_substr(string $string, int $start, ?int $length = null): string|false {} +function grapheme_substr(string $string, int $offset, ?int $length = null): string|false {} -function grapheme_strstr(string $haystack, string $needle, bool $before_needle = false): string|false {} +function grapheme_strstr(string $haystack, string $needle, bool $beforeNeedle = false): string|false {} -function grapheme_stristr(string $haystack, string $needle, bool $before_needle = false): string|false {} +function grapheme_stristr(string $haystack, string $needle, bool $beforeNeedle = false): string|false {} /** @param int $next */ -function grapheme_extract(string $haystack, int $size, int $extract_type = GRAPHEME_EXTR_COUNT, int $start = 0, &$next = null): string|false {} +function grapheme_extract(string $haystack, int $size, int $type = GRAPHEME_EXTR_COUNT, int $offset = 0, &$next = null): string|false {} /* idn */ /** @param array $idna_info */ -function idn_to_ascii(string $domain, int $options = 0, int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false {} +function idn_to_ascii(string $domain, int $flags = 0, int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false {} /** @param array $idna_info */ -function idn_to_utf8(string $domain, int $options = 0, int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false {} +function idn_to_utf8(string $domain, int $flags = 0, int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false {} /* locale */ function locale_get_default(): string {} -function locale_set_default(string $name): bool {} +function locale_set_default(string $locale): bool {} function locale_get_primary_language(string $locale): ?string {} @@ -285,15 +285,15 @@ function locale_get_region(string $locale): ?string {} function locale_get_keywords(string $locale): array|false|null {} -function locale_get_display_script(string $locale, ?string $in_locale = null): string|false {} +function locale_get_display_script(string $locale, ?string $displayLocale = null): string|false {} -function locale_get_display_region(string $locale, ?string $in_locale = null): string|false {} +function locale_get_display_region(string $locale, ?string $displayLocale = null): string|false {} -function locale_get_display_name(string $locale, ?string $in_locale = null): string|false {} +function locale_get_display_name(string $locale, ?string $displayLocale = null): string|false {} -function locale_get_display_language(string $locale, ?string $in_locale = null): string|false {} +function locale_get_display_language(string $locale, ?string $displayLocale = null): string|false {} -function locale_get_display_variant(string $locale, ?string $in_locale = null): string|false {} +function locale_get_display_variant(string $locale, ?string $displayLocale = null): string|false {} function locale_compose(array $subtags): string|false {} @@ -301,11 +301,11 @@ function locale_parse(string $locale): ?array {} function locale_get_all_variants(string $locale): ?array {} -function locale_filter_matches(string $langtag, string $locale, bool $canonicalize = false): ?bool {} +function locale_filter_matches(string $languageTag, string $locale, bool $canonicalize = false): ?bool {} function locale_canonicalize(string $locale): ?string {} -function locale_lookup(array $langtag, string $locale, bool $canonicalize = false, ?string $def = null): ?string {} +function locale_lookup(array $languageTag, string $locale, bool $canonicalize = false, ?string $defaultLocale = null): ?string {} function locale_accept_from_http(string $header): string|false {} @@ -313,47 +313,47 @@ function locale_accept_from_http(string $header): string|false {} function msgfmt_create(string $locale, string $pattern): ?MessageFormatter {} -function msgfmt_format(MessageFormatter $fmt, array $args): string|false {} +function msgfmt_format(MessageFormatter $formatter, array $values): string|false {} -function msgfmt_format_message(string $locale, string $pattern, array $args): string|false {} +function msgfmt_format_message(string $locale, string $pattern, array $values): string|false {} -function msgfmt_parse(MessageFormatter $fmt, string $value): array|false {} +function msgfmt_parse(MessageFormatter $formatter, string $string): array|false {} -function msgfmt_parse_message(string $locale, string $pattern, string $source): array|false {} +function msgfmt_parse_message(string $locale, string $pattern, string $message): array|false {} -function msgfmt_set_pattern(MessageFormatter $fmt, string $pattern): bool {} +function msgfmt_set_pattern(MessageFormatter $formatter, string $pattern): bool {} -function msgfmt_get_pattern(MessageFormatter $fmt): string|false {} +function msgfmt_get_pattern(MessageFormatter $formatter): string|false {} -function msgfmt_get_locale(MessageFormatter $fmt): string {} +function msgfmt_get_locale(MessageFormatter $formatter): string {} -function msgfmt_get_error_code(MessageFormatter $fmt): int {} +function msgfmt_get_error_code(MessageFormatter $formatter): int {} -function msgfmt_get_error_message(MessageFormatter $fmt): string {} +function msgfmt_get_error_message(MessageFormatter $formatter): string {} /* normalizer */ -function normalizer_normalize(string $input, int $form = Normalizer::FORM_C): string|false {} +function normalizer_normalize(string $string, int $form = Normalizer::FORM_C): string|false {} -function normalizer_is_normalized(string $input, int $form = Normalizer::FORM_C): bool {} +function normalizer_is_normalized(string $string, int $form = Normalizer::FORM_C): bool {} #if U_ICU_VERSION_MAJOR_NUM >= 56 -function normalizer_get_raw_decomposition(string $input, int $form = Normalizer::FORM_C): ?string {} +function normalizer_get_raw_decomposition(string $string, int $form = Normalizer::FORM_C): ?string {} #endif /* resourceboundle */ -function resourcebundle_create(?string $locale, ?string $bundlename, bool $fallback = true): ?ResourceBundle {} +function resourcebundle_create(?string $locale, ?string $bundle, bool $fallback = true): ?ResourceBundle {} /** * @param string|int $index * @return mixed */ -function resourcebundle_get(ResourceBundle $bundle, $index) {} +function resourcebundle_get(ResourceBundle $bundle, $index, bool $fallback = true) {} function resourcebundle_count(ResourceBundle $bundle): int {} -function resourcebundle_locales(string $bundlename): array|false {} +function resourcebundle_locales(string $bundle): array|false {} function resourcebundle_get_error_code(ResourceBundle $bundle): int {} @@ -361,7 +361,7 @@ function resourcebundle_get_error_message(ResourceBundle $bundle): string {} /* timezone */ -function intltz_count_equivalent_ids(string $zoneId): int|false {} +function intltz_count_equivalent_ids(string $timezoneId): int|false {} function intltz_create_default(): IntlTimeZone {} @@ -371,54 +371,54 @@ function intltz_create_default(): IntlTimeZone {} */ function intltz_create_enumeration($countryOrRawOffset = null) {} -function intltz_create_time_zone(string $zoneId): ?IntlTimeZone {} +function intltz_create_time_zone(string $timezoneId): ?IntlTimeZone {} -function intltz_create_time_zone_id_enumeration(int $zoneType, ?string $region = null, ?int $rawOffset = null): IntlIterator|false {} +function intltz_create_time_zone_id_enumeration(int $type, ?string $region = null, ?int $rawOffset = null): IntlIterator|false {} -function intltz_from_date_time_zone(DateTimeZone $zone): ?IntlTimeZone {} +function intltz_from_date_time_zone(DateTimeZone $timezone): ?IntlTimeZone {} -/** @param bool $isSystemID */ -function intltz_get_canonical_id(string $zoneId, &$isSystemID = null): string|false {} +/** @param bool $isSystemId */ +function intltz_get_canonical_id(string $timezoneId, &$isSystemId = null): string|false {} -function intltz_get_display_name(IntlTimeZone $tz, bool $isDaylight = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null): string|false {} +function intltz_get_display_name(IntlTimeZone $timezone, bool $dst = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null): string|false {} -function intltz_get_dst_savings(IntlTimeZone $tz): int {} +function intltz_get_dst_savings(IntlTimeZone $timezone): int {} -function intltz_get_equivalent_id(string $zoneId, int $index): string|false {} +function intltz_get_equivalent_id(string $timezoneId, int $offset): string|false {} -function intltz_get_error_code(IntlTimeZone $tz): int|false {} +function intltz_get_error_code(IntlTimeZone $timezone): int|false {} -function intltz_get_error_message(IntlTimeZone $tz): string|false {} +function intltz_get_error_message(IntlTimeZone $timezone): string|false {} function intltz_get_gmt(): IntlTimeZone {} -function intltz_get_id(IntlTimeZone $tz): string|false {} +function intltz_get_id(IntlTimeZone $timezone): string|false {} /** * @param int $rawOffset * @param int $dstOffset */ -function intltz_get_offset(IntlTimeZone $tz, float $date, bool $local, &$rawOffset, &$dstOffset): bool {} +function intltz_get_offset(IntlTimeZone $timezone, float $timestamp, bool $local, &$rawOffset, &$dstOffset): bool {} -function intltz_get_raw_offset(IntlTimeZone $tz): int {} +function intltz_get_raw_offset(IntlTimeZone $timezone): int {} -function intltz_get_region(string $zoneId): string|false {} +function intltz_get_region(string $timezoneId): string|false {} function intltz_get_tz_data_version(): string|false {} function intltz_get_unknown(): IntlTimeZone {} #if U_ICU_VERSION_MAJOR_NUM >= 52 -function intltz_get_windows_id(string $timezone): string|false {} +function intltz_get_windows_id(string $timezoneId): string|false {} -function intltz_get_id_for_windows_id(string $timezone, ?string $region = null): string|false {} +function intltz_get_id_for_windows_id(string $timezoneId, ?string $region = null): string|false {} #endif -function intltz_has_same_rules(IntlTimeZone $tz, IntlTimeZone $otherTimeZone): bool {} +function intltz_has_same_rules(IntlTimeZone $timezone, IntlTimeZone $other): bool {} -function intltz_to_date_time_zone(IntlTimeZone $tz): DateTimeZone|false {} +function intltz_to_date_time_zone(IntlTimeZone $timezone): DateTimeZone|false {} -function intltz_use_daylight_time(IntlTimeZone $tz): bool {} +function intltz_use_daylight_time(IntlTimeZone $timezone): bool {} /* transliterator */ @@ -428,10 +428,10 @@ function transliterator_create_from_rules(string $rules, int $direction = Transl function transliterator_list_ids(): array|false {} -function transliterator_create_inverse(Transliterator $orig_trans): ?Transliterator {} +function transliterator_create_inverse(Transliterator $transliterator): ?Transliterator {} -function transliterator_transliterate(Transliterator|string $transliterator, string $subject, int $start = 0, int $end = -1): string|false {} +function transliterator_transliterate(Transliterator|string $transliterator, string $string, int $start = 0, int $end = -1): string|false {} -function transliterator_get_error_code(Transliterator $trans): int|false {} +function transliterator_get_error_code(Transliterator $transliterator): int|false {} -function transliterator_get_error_message(Transliterator $trans): string|false {} +function transliterator_get_error_message(Transliterator $transliterator): string|false {} diff --git a/ext/intl/php_intl_arginfo.h b/ext/intl/php_intl_arginfo.h index 1b1c0ea84dcf2..57299b841fb7a 100644 --- a/ext/intl/php_intl_arginfo.h +++ b/ext/intl/php_intl_arginfo.h @@ -1,15 +1,15 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 943baf02eee2f720a45106e379534b3d4adc3072 */ + * Stub hash: c890e3cde79ffeade4623001cc369aa734812959 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intlcal_create_instance, 0, 0, IntlCalendar, 1) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timeZone, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timezone, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_intlcal_get_keyword_values_for_locale, 0, 3, IntlIterator, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, keyword, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, commonlyUsed, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, onlyCommon, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_get_now, 0, 0, IS_DOUBLE, 0) @@ -29,23 +29,23 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_time, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, date, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_add, 0, 3, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, amount, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_time_zone, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_INFO(0, timeZone) + ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_after, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, calendarObject, IntlCalendar, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) + ZEND_ARG_OBJ_INFO(0, other, IntlCalendar, 0) ZEND_END_ARG_INFO() #define arginfo_intlcal_before arginfo_intlcal_after @@ -63,7 +63,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_roll, 0, 3, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) - ZEND_ARG_INFO(0, amountOrUpOrDown) + ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_clear, 0, 1, _IS_BOOL, 0) @@ -73,7 +73,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_field_difference, 0, 3, IS_LONG, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, when, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -96,7 +96,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_get_locale, 0, 2, IS_STRING, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, localeType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_intlcal_get_maximum arginfo_intlcal_get @@ -105,7 +105,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_minimal_days_in_first_week, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, numberOfDays, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, days, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_intlcal_get_minimum arginfo_intlcal_get @@ -135,7 +135,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_is_weekend, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, date, IS_DOUBLE, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timestamp, IS_DOUBLE, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_first_day_of_week, 0, 2, _IS_BOOL, 0) @@ -145,7 +145,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_lenient, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, isLenient, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, lenient, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_intlcal_get_repeated_wall_time_option arginfo_intlcal_get_first_day_of_week @@ -156,13 +156,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlcal_set_repeated_wall_time_option, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlCalendar, 0) - ZEND_ARG_TYPE_INFO(0, wallTimeOption, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_intlcal_set_skipped_wall_time_option arginfo_intlcal_set_repeated_wall_time_option ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intlcal_from_date_time, 0, 1, IntlCalendar, 1) - ZEND_ARG_OBJ_TYPE_MASK(0, dateTime, DateTime, MAY_BE_STRING, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, datetime, DateTime, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -179,9 +179,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intlcal_get_error_message, 0, 1, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intlgregcal_create_instance, 0, 0, IntlGregorianCalendar, 1) - ZEND_ARG_INFO(0, timeZoneOrYear) + ZEND_ARG_INFO(0, timezoneOrYear) ZEND_ARG_INFO(0, localeOrMonth) - ZEND_ARG_INFO(0, dayOfMonth) + ZEND_ARG_INFO(0, day) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) @@ -189,7 +189,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlgregcal_set_gregorian_change, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, calendar, IntlGregorianCalendar, 0) - ZEND_ARG_TYPE_INFO(0, change, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intlgregcal_get_gregorian_change, 0, 1, IS_DOUBLE, 0) @@ -207,19 +207,19 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_collator_compare, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_collator_get_attribute, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_collator_set_attribute, 0, 3, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, val, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_collator_get_strength, 0, 1, IS_LONG, 0) @@ -233,13 +233,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_collator_sort, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(1, arr, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sort_flag, IS_LONG, 0, "Collator::SORT_REGULAR") + ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "Collator::SORT_REGULAR") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_collator_sort_with_sort_keys, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(1, arr, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0) ZEND_END_ARG_INFO() #define arginfo_collator_asort arginfo_collator_sort @@ -259,7 +259,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_collator_get_sort_key, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, object, Collator, 0) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intl_get_error_code, 0, 0, IS_LONG, 0) @@ -269,24 +269,24 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intl_get_error_message, 0, 0, IS ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intl_is_failure, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, errorCode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intl_error_name, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, errorCode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_datefmt_create, 0, 3, IntlDateFormatter, 1) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, datetype, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, timetype, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, dateType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, timeType, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, timezone, "null") ZEND_ARG_OBJ_TYPE_MASK(0, calendar, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_get_datetype, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() #define arginfo_datefmt_get_timetype arginfo_datefmt_get_datetype @@ -294,77 +294,77 @@ ZEND_END_ARG_INFO() #define arginfo_datefmt_get_calendar arginfo_datefmt_get_datetype ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_set_calendar, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_OBJ_TYPE_MASK(0, which, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, NULL) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, calendar, IntlCalendar, MAY_BE_LONG|MAY_BE_NULL, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_get_timezone_id, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_datefmt_get_calendar_object, 0, 1, IntlCalendar, MAY_BE_FALSE|MAY_BE_NULL) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_datefmt_get_timezone, 0, 1, IntlTimeZone, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_set_timezone, 0, 2, _IS_BOOL, 1) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_INFO(0, zone) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_set_pattern, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_datefmt_get_pattern arginfo_datefmt_get_timezone_id ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_get_locale, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, which, IS_LONG, 0, "ULOC_ACTUAL_LOCALE") + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "ULOC_ACTUAL_LOCALE") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_set_lenient, 0, 2, IS_VOID, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_ARG_TYPE_INFO(0, lenient, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_is_lenient, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_format, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_INFO(0, value) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_INFO(0, datetime) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_format_object, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, object) + ZEND_ARG_INFO(0, datetime) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, format, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_parse, 0, 2, MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_datefmt_localtime, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_get_error_code, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_datefmt_get_error_message, 0, 1, IS_STRING, 0) - ZEND_ARG_OBJ_INFO(0, df, IntlDateFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, IntlDateFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_numfmt_create, 0, 2, NumberFormatter, 1) @@ -374,81 +374,88 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_numfmt_create, 0, 2, NumberFormat ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_format, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_MASK(0, num, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "NumberFormatter::TYPE_DEFAULT") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_parse, 0, 2, MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "NumberFormatter::TYPE_DOUBLE") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_format_currency, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, amount, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, currency, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_parse_currency, 0, 3, MAY_BE_DOUBLE|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_INFO(1, currency) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, position, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, offset, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_set_attribute, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_DOUBLE, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_get_attribute, 0, 2, MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_set_text_attribute, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_get_text_attribute, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) - ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_numfmt_set_symbol arginfo_numfmt_set_text_attribute +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_set_symbol, 0, 3, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, symbol, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) +ZEND_END_ARG_INFO() -#define arginfo_numfmt_get_symbol arginfo_numfmt_get_text_attribute +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_get_symbol, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) + ZEND_ARG_TYPE_INFO(0, symbol, IS_LONG, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_set_pattern, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_get_pattern, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_numfmt_get_locale, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "ULOC_ACTUAL_LOCALE") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_get_error_code, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_numfmt_get_error_message, 0, 1, IS_STRING, 0) - ZEND_ARG_OBJ_INFO(0, fmt, NumberFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, NumberFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_grapheme_strlen, 0, 1, MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_NULL) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_grapheme_strpos, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) @@ -465,14 +472,14 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_grapheme_substr, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, start, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_grapheme_strstr, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, before_needle, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, beforeNeedle, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_grapheme_stristr arginfo_grapheme_strstr @@ -480,14 +487,14 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_grapheme_extract, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extract_type, IS_LONG, 0, "GRAPHEME_EXTR_COUNT") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "GRAPHEME_EXTR_COUNT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, next, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_idn_to_ascii, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, domain, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, variant, IS_LONG, 0, "INTL_IDNA_VARIANT_UTS46") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, idna_info, "null") ZEND_END_ARG_INFO() @@ -497,7 +504,7 @@ ZEND_END_ARG_INFO() #define arginfo_locale_get_default arginfo_intl_get_error_message ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_locale_set_default, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_locale_get_primary_language, 0, 1, IS_STRING, 1) @@ -514,7 +521,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_locale_get_display_script, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, in_locale, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, displayLocale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_locale_get_display_region arginfo_locale_get_display_script @@ -536,7 +543,7 @@ ZEND_END_ARG_INFO() #define arginfo_locale_get_all_variants arginfo_locale_parse ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_locale_filter_matches, 0, 2, _IS_BOOL, 1) - ZEND_ARG_TYPE_INFO(0, langtag, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, languageTag, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, canonicalize, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -544,10 +551,10 @@ ZEND_END_ARG_INFO() #define arginfo_locale_canonicalize arginfo_locale_get_primary_language ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_locale_lookup, 0, 2, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, langtag, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, languageTag, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, canonicalize, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, def, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, defaultLocale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_locale_accept_from_http, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) @@ -560,72 +567,73 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_msgfmt_create, 0, 2, MessageForma ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_msgfmt_format, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) - ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) + ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_msgfmt_format_message, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_msgfmt_parse, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_msgfmt_parse_message, 0, 3, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_msgfmt_set_pattern, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_msgfmt_get_pattern, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_msgfmt_get_locale, 0, 1, IS_STRING, 0) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_msgfmt_get_error_code, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, fmt, MessageFormatter, 0) + ZEND_ARG_OBJ_INFO(0, formatter, MessageFormatter, 0) ZEND_END_ARG_INFO() #define arginfo_msgfmt_get_error_message arginfo_msgfmt_get_locale ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_normalizer_normalize, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, form, IS_LONG, 0, "Normalizer::FORM_C") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_normalizer_is_normalized, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, form, IS_LONG, 0, "Normalizer::FORM_C") ZEND_END_ARG_INFO() #if U_ICU_VERSION_MAJOR_NUM >= 56 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_normalizer_get_raw_decomposition, 0, 1, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, form, IS_LONG, 0, "Normalizer::FORM_C") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_resourcebundle_create, 0, 2, ResourceBundle, 1) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, bundlename, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, bundle, IS_STRING, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fallback, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_resourcebundle_get, 0, 0, 2) ZEND_ARG_OBJ_INFO(0, bundle, ResourceBundle, 0) ZEND_ARG_INFO(0, index) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fallback, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_count, 0, 1, IS_LONG, 0) @@ -633,7 +641,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_count, 0, 1, IS_L ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_resourcebundle_locales, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, bundlename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, bundle, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_resourcebundle_get_error_code arginfo_resourcebundle_count @@ -643,7 +651,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_get_error_message ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_count_equivalent_ids, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intltz_create_default, 0, 0, IntlTimeZone, 0) @@ -654,46 +662,46 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_intltz_create_enumeration, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intltz_create_time_zone, 0, 1, IntlTimeZone, 1) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_intltz_create_time_zone_id_enumeration, 0, 1, IntlIterator, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, zoneType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, region, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rawOffset, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_intltz_from_date_time_zone, 0, 1, IntlTimeZone, 1) - ZEND_ARG_OBJ_INFO(0, zone, DateTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, DateTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_canonical_id, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, isSystemID, "null") + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, isSystemId, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_display_name, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isDaylight, _IS_BOOL, 0, "false") + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dst, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, style, IS_LONG, 0, "IntlTimeZone::DISPLAY_LONG") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intltz_get_dst_savings, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_equivalent_id, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_error_code, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_error_message, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) ZEND_END_ARG_INFO() #define arginfo_intltz_get_gmt arginfo_intltz_create_default @@ -701,8 +709,8 @@ ZEND_END_ARG_INFO() #define arginfo_intltz_get_id arginfo_intltz_get_error_message ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intltz_get_offset, 0, 5, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) - ZEND_ARG_TYPE_INFO(0, date, IS_DOUBLE, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 0) ZEND_ARG_INFO(1, rawOffset) ZEND_ARG_INFO(1, dstOffset) @@ -711,7 +719,7 @@ ZEND_END_ARG_INFO() #define arginfo_intltz_get_raw_offset arginfo_intltz_get_dst_savings ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_region, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_tz_data_version, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) @@ -721,28 +729,28 @@ ZEND_END_ARG_INFO() #if U_ICU_VERSION_MAJOR_NUM >= 52 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_windows_id, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, timezone, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if U_ICU_VERSION_MAJOR_NUM >= 52 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_id_for_windows_id, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, timezone, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, region, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intltz_has_same_rules, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) - ZEND_ARG_OBJ_INFO(0, otherTimeZone, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, other, IntlTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_intltz_to_date_time_zone, 0, 1, DateTimeZone, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intltz_use_daylight_time, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, IntlTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_transliterator_create, 0, 1, Transliterator, 1) @@ -759,22 +767,22 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_transliterator_list_ids, 0, 0, M ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_transliterator_create_inverse, 0, 1, Transliterator, 1) - ZEND_ARG_OBJ_INFO(0, orig_trans, Transliterator, 0) + ZEND_ARG_OBJ_INFO(0, transliterator, Transliterator, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_transliterator_transliterate, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_TYPE_MASK(0, transliterator, Transliterator, MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, end, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_transliterator_get_error_code, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, trans, Transliterator, 0) + ZEND_ARG_OBJ_INFO(0, transliterator, Transliterator, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_transliterator_get_error_message, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, trans, Transliterator, 0) + ZEND_ARG_OBJ_INFO(0, transliterator, Transliterator, 0) ZEND_END_ARG_INFO() diff --git a/ext/intl/resourcebundle/resourcebundle.stub.php b/ext/intl/resourcebundle/resourcebundle.stub.php index 6f91893bf37a4..fccd65e3df4f6 100644 --- a/ext/intl/resourcebundle/resourcebundle.stub.php +++ b/ext/intl/resourcebundle/resourcebundle.stub.php @@ -4,13 +4,13 @@ class ResourceBundle implements IteratorAggregate, Countable { - public function __construct(?string $locale, ?string $bundlename, bool $fallback = true) {} + public function __construct(?string $locale, ?string $bundle, bool $fallback = true) {} /** * @return ResourceBundle|null * @alias resourcebundle_create */ - public static function create(?string $locale, ?string $bundlename, bool $fallback = true) {} + public static function create(?string $locale, ?string $bundle, bool $fallback = true) {} /** * @param string|int $index @@ -29,7 +29,7 @@ public function count() {} * @return array|false * @alias resourcebundle_locales */ - public static function getLocales(string $bundlename) {} + public static function getLocales(string $bundle) {} /** * @return int diff --git a/ext/intl/resourcebundle/resourcebundle_arginfo.h b/ext/intl/resourcebundle/resourcebundle_arginfo.h index 066dca2d88656..fca8a23104fba 100644 --- a/ext/intl/resourcebundle/resourcebundle_arginfo.h +++ b/ext/intl/resourcebundle/resourcebundle_arginfo.h @@ -1,9 +1,9 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9f811912b4a466a87477883abed02f998380481a */ + * Stub hash: ba5e5a57404b44d2be662e9a6b5abb1a44ccfb22 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ResourceBundle___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, bundlename, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, bundle, IS_STRING, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fallback, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() @@ -18,7 +18,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ResourceBundle_count, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ResourceBundle_getLocales, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, bundlename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, bundle, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_ResourceBundle_getErrorCode arginfo_class_ResourceBundle_count diff --git a/ext/intl/spoofchecker/spoofchecker.stub.php b/ext/intl/spoofchecker/spoofchecker.stub.php index b3f71599796ef..4fdd49473c5de 100644 --- a/ext/intl/spoofchecker/spoofchecker.stub.php +++ b/ext/intl/spoofchecker/spoofchecker.stub.php @@ -7,19 +7,19 @@ class Spoofchecker public function __construct() {} /** - * @param int $error + * @param int $errorCode * @return bool */ - public function isSuspicious(string $text, &$error = null) {} + public function isSuspicious(string $string, &$errorCode = null) {} /** - * @param int $error + * @param int $errorCode * @return bool */ - public function areConfusable(string $s1, string $s2, &$error = null) {} + public function areConfusable(string $string1, string $string2, &$errorCode = null) {} /** @return void */ - public function setAllowedLocales(string $locale_list) {} + public function setAllowedLocales(string $locales) {} /** @return void */ public function setChecks(int $checks) {} diff --git a/ext/intl/spoofchecker/spoofchecker_arginfo.h b/ext/intl/spoofchecker/spoofchecker_arginfo.h index 925195fcda3ff..6079794fdfe7e 100644 --- a/ext/intl/spoofchecker/spoofchecker_arginfo.h +++ b/ext/intl/spoofchecker/spoofchecker_arginfo.h @@ -1,22 +1,22 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5f4ea7ab66c1748a8de076fca4b62a7d0a235598 */ + * Stub hash: 10c330c8e06dbe21833f9c556b005fde2ea0ab42 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker___construct, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker_isSuspicious, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error, "null") + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, errorCode, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker_areConfusable, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, s1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, s2, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error, "null") + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, errorCode, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker_setAllowedLocales, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, locale_list, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, locales, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker_setChecks, 0, 0, 1) diff --git a/ext/intl/tests/breakiter___construct_error.phpt b/ext/intl/tests/breakiter___construct_error.phpt index a92d4a3ca8bbd..2deb7f4f0db96 100644 --- a/ext/intl/tests/breakiter___construct_error.phpt +++ b/ext/intl/tests/breakiter___construct_error.phpt @@ -50,7 +50,7 @@ Exception: IntlRuleBasedBreakIterator::__construct() expects at least 1 argument Exception: IntlRuleBasedBreakIterator::__construct() expects at most 2 arguments, 3 given in %s on line %d -Exception: IntlRuleBasedBreakIterator::__construct(): Argument #2 ($areCompiled) must be of type bool, array given in %s on line %d +Exception: IntlRuleBasedBreakIterator::__construct(): Argument #2 ($compiled) must be of type bool, array given in %s on line %d Exception: IntlRuleBasedBreakIterator::__construct(): unable to create instance from compiled rules in %s on line %d diff --git a/ext/intl/tests/breakiter_getPartsIterator_error.phpt b/ext/intl/tests/breakiter_getPartsIterator_error.phpt index cd518b19d4d02..e3667afabff5f 100644 --- a/ext/intl/tests/breakiter_getPartsIterator_error.phpt +++ b/ext/intl/tests/breakiter_getPartsIterator_error.phpt @@ -18,4 +18,4 @@ try { ?> --EXPECT-- -IntlBreakIterator::getPartsIterator(): Argument #1 ($key_type) must be one of IntlPartsIterator::KEY_SEQUENTIAL, IntlPartsIterator::KEY_LEFT, or IntlPartsIterator::KEY_RIGHT +IntlBreakIterator::getPartsIterator(): Argument #1 ($type) must be one of IntlPartsIterator::KEY_SEQUENTIAL, IntlPartsIterator::KEY_LEFT, or IntlPartsIterator::KEY_RIGHT diff --git a/ext/intl/tests/bug48227.phpt b/ext/intl/tests/bug48227.phpt index d44b5fc282802..11f89df535a46 100644 --- a/ext/intl/tests/bug48227.phpt +++ b/ext/intl/tests/bug48227.phpt @@ -16,7 +16,7 @@ foreach (['', 1, NULL, $x] as $value) { ?> --EXPECT-- -NumberFormatter::format(): Argument #1 ($value) must be of type int|float, string given +NumberFormatter::format(): Argument #1 ($num) must be of type int|float, string given string(1) "1" string(1) "0" -NumberFormatter::format(): Argument #1 ($value) must be of type int|float, NumberFormatter given +NumberFormatter::format(): Argument #1 ($num) must be of type int|float, NumberFormatter given diff --git a/ext/intl/tests/bug62083.phpt b/ext/intl/tests/bug62083.phpt index 9896cea79fd84..4f08af698aaba 100644 --- a/ext/intl/tests/bug62083.phpt +++ b/ext/intl/tests/bug62083.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -grapheme_extract(): Argument #3 ($extract_type) must be one of GRAPHEME_EXTR_COUNT, GRAPHEME_EXTR_MAXBYTES, or GRAPHEME_EXTR_MAXCHARS +grapheme_extract(): Argument #3 ($type) must be one of GRAPHEME_EXTR_COUNT, GRAPHEME_EXTR_MAXBYTES, or GRAPHEME_EXTR_MAXCHARS diff --git a/ext/intl/tests/calendar_before_after_error.phpt b/ext/intl/tests/calendar_before_after_error.phpt index 850e59128dc69..1fb4ad0242ce9 100644 --- a/ext/intl/tests/calendar_before_after_error.phpt +++ b/ext/intl/tests/calendar_before_after_error.phpt @@ -66,9 +66,9 @@ error: 0, IntlCalendar::after() expects exactly 1 argument, 0 given error: 0, IntlCalendar::before() expects exactly 1 argument, 0 given -error: 0, IntlCalendar::after(): Argument #1 ($calendar) must be of type IntlCalendar, int given +error: 0, IntlCalendar::after(): Argument #1 ($other) must be of type IntlCalendar, int given -error: 0, IntlCalendar::before(): Argument #1 ($calendar) must be of type IntlCalendar, int given +error: 0, IntlCalendar::before(): Argument #1 ($other) must be of type IntlCalendar, int given error: 0, IntlCalendar::after() expects exactly 1 argument, 2 given diff --git a/ext/intl/tests/calendar_equals_error.phpt b/ext/intl/tests/calendar_equals_error.phpt index f2ea3fefd0cfc..57fe9ec9d51c3 100644 --- a/ext/intl/tests/calendar_equals_error.phpt +++ b/ext/intl/tests/calendar_equals_error.phpt @@ -48,10 +48,10 @@ try { --EXPECT-- error: 0, IntlCalendar::equals() expects exactly 1 argument, 0 given -error: 0, IntlCalendar::equals(): Argument #1 ($calendar) must be of type IntlCalendar, stdClass given +error: 0, IntlCalendar::equals(): Argument #1 ($other) must be of type IntlCalendar, stdClass given error: 0, IntlCalendar::equals() expects exactly 1 argument, 2 given -error: 0, intlcal_equals(): Argument #2 ($calendar) must be of type IntlCalendar, array given +error: 0, intlcal_equals(): Argument #2 ($other) must be of type IntlCalendar, array given -error: 0, intlcal_equals(): Argument #1 ($calendarObject) must be of type IntlCalendar, int given +error: 0, intlcal_equals(): Argument #1 ($calendar) must be of type IntlCalendar, int given diff --git a/ext/intl/tests/calendar_isEquivalentTo_error.phpt b/ext/intl/tests/calendar_isEquivalentTo_error.phpt index 33e5d415ce05e..df129869b545b 100644 --- a/ext/intl/tests/calendar_isEquivalentTo_error.phpt +++ b/ext/intl/tests/calendar_isEquivalentTo_error.phpt @@ -50,14 +50,14 @@ try { } ?> --EXPECT-- -error: 0, IntlCalendar::isEquivalentTo(): Argument #1 ($calendar) must be of type IntlCalendar, int given +error: 0, IntlCalendar::isEquivalentTo(): Argument #1 ($other) must be of type IntlCalendar, int given error: 0, IntlCalendar::isEquivalentTo() expects exactly 1 argument, 2 given -error: 0, IntlCalendar::isEquivalentTo(): Argument #1 ($calendar) must be of type IntlCalendar, int given +error: 0, IntlCalendar::isEquivalentTo(): Argument #1 ($other) must be of type IntlCalendar, int given error: 0, intlcal_is_equivalent_to() expects exactly 2 arguments, 1 given -error: 0, intlcal_is_equivalent_to(): Argument #2 ($calendar) must be of type IntlCalendar, int given +error: 0, intlcal_is_equivalent_to(): Argument #2 ($other) must be of type IntlCalendar, int given -error: 0, intlcal_is_equivalent_to(): Argument #1 ($calendarObject) must be of type IntlCalendar, int given +error: 0, intlcal_is_equivalent_to(): Argument #1 ($calendar) must be of type IntlCalendar, int given diff --git a/ext/intl/tests/calendar_setMinimalDaysInFirstWeek_error.phpt b/ext/intl/tests/calendar_setMinimalDaysInFirstWeek_error.phpt index 8d4cf161eac12..14dc2a6a53ad2 100644 --- a/ext/intl/tests/calendar_setMinimalDaysInFirstWeek_error.phpt +++ b/ext/intl/tests/calendar_setMinimalDaysInFirstWeek_error.phpt @@ -30,6 +30,6 @@ try { ?> --EXPECT-- -IntlCalendar::setMinimalDaysInFirstWeek(): Argument #1 ($numberOfDays) must be between 1 and 7 -intlcal_set_minimal_days_in_first_week(): Argument #2 ($numberOfDays) must be between 1 and 7 +IntlCalendar::setMinimalDaysInFirstWeek(): Argument #1 ($days) must be between 1 and 7 +intlcal_set_minimal_days_in_first_week(): Argument #2 ($days) must be between 1 and 7 intlcal_set_minimal_days_in_first_week(): Argument #1 ($calendar) must be of type IntlCalendar, int given diff --git a/ext/intl/tests/calendar_setSkipped_RepeatedWallTimeOption_error.phpt b/ext/intl/tests/calendar_setSkipped_RepeatedWallTimeOption_error.phpt index 40224bed152f4..6e72d1e7b8edb 100644 --- a/ext/intl/tests/calendar_setSkipped_RepeatedWallTimeOption_error.phpt +++ b/ext/intl/tests/calendar_setSkipped_RepeatedWallTimeOption_error.phpt @@ -30,6 +30,6 @@ try { } ?> --EXPECT-- -IntlCalendar::setSkippedWallTimeOption(): Argument #1 ($wallTimeOption) must be one of IntlCalendar::WALLTIME_FIRST, IntlCalendar::WALLTIME_LAST, or IntlCalendar::WALLTIME_NEXT_VALID -IntlCalendar::setRepeatedWallTimeOption(): Argument #1 ($wallTimeOption) must be either IntlCalendar::WALLTIME_FIRST or IntlCalendar::WALLTIME_LAST +IntlCalendar::setSkippedWallTimeOption(): Argument #1 ($option) must be one of IntlCalendar::WALLTIME_FIRST, IntlCalendar::WALLTIME_LAST, or IntlCalendar::WALLTIME_NEXT_VALID +IntlCalendar::setRepeatedWallTimeOption(): Argument #1 ($option) must be either IntlCalendar::WALLTIME_FIRST or IntlCalendar::WALLTIME_LAST intlcal_set_repeated_wall_time_option(): Argument #1 ($calendar) must be of type IntlCalendar, int given diff --git a/ext/intl/tests/locale/bug74993.phpt b/ext/intl/tests/locale/bug74993.phpt index 67cc1019934e0..40e3eb80a838b 100644 --- a/ext/intl/tests/locale/bug74993.phpt +++ b/ext/intl/tests/locale/bug74993.phpt @@ -24,7 +24,7 @@ Function [ function locale_get_display_language ] { - Parameters [2] { Parameter #0 [ string $locale ] - Parameter #1 [ ?string $in_locale = null ] + Parameter #1 [ ?string $displayLocale = null ] } - Return [ string|false ] } @@ -32,7 +32,7 @@ Function [ function locale_get_display_name ] { - Parameters [2] { Parameter #0 [ string $locale ] - Parameter #1 [ ?string $in_locale = null ] + Parameter #1 [ ?string $displayLocale = null ] } - Return [ string|false ] } @@ -40,7 +40,7 @@ Function [ function locale_get_display_region ] { - Parameters [2] { Parameter #0 [ string $locale ] - Parameter #1 [ ?string $in_locale = null ] + Parameter #1 [ ?string $displayLocale = null ] } - Return [ string|false ] } @@ -48,7 +48,7 @@ Function [ function locale_get_display_script ] { - Parameters [2] { Parameter #0 [ string $locale ] - Parameter #1 [ ?string $in_locale = null ] + Parameter #1 [ ?string $displayLocale = null ] } - Return [ string|false ] } @@ -56,14 +56,14 @@ Function [ function locale_get_display_variant ] { - Parameters [2] { Parameter #0 [ string $locale ] - Parameter #1 [ ?string $in_locale = null ] + Parameter #1 [ ?string $displayLocale = null ] } - Return [ string|false ] } Function [ function locale_filter_matches ] { - Parameters [3] { - Parameter #0 [ string $langtag ] + Parameter #0 [ string $languageTag ] Parameter #1 [ string $locale ] Parameter #2 [ bool $canonicalize = false ] } @@ -72,10 +72,10 @@ Function [ function locale_filter_matches ] { Function [ function locale_lookup ] { - Parameters [4] { - Parameter #0 [ array $langtag ] + Parameter #0 [ array $languageTag ] Parameter #1 [ string $locale ] Parameter #2 [ bool $canonicalize = false ] - Parameter #3 [ ?string $def = null ] + Parameter #3 [ ?string $defaultLocale = null ] } - Return [ ?string ] } diff --git a/ext/intl/tests/locale_get_display_language.phpt b/ext/intl/tests/locale_get_display_language.phpt index e441b2efc6ed3..d1b7e72f4af13 100644 --- a/ext/intl/tests/locale_get_display_language.phpt +++ b/ext/intl/tests/locale_get_display_language.phpt @@ -1,7 +1,8 @@ --TEST-- -locale_get_display_language() +locale_get_display_language() icu < 68.1 --SKIPIF-- += 0) die('skip for ICU < 68.1'); ?> --FILE-- = 68.1 +--SKIPIF-- + += 68.1'); ?> +--FILE-- + +--EXPECTREGEX-- +locale='uk-ua_CALIFORNIA@currency=;currency=GRN' +disp_locale=en : display_language=Ukrainian +disp_locale=fr : display_language=ukrainien +disp_locale=de : display_language=Ukrainisch +----------------- +locale='root' +disp_locale=en : display_language=(Root|Unknown language) +disp_locale=fr : display_language=(racine|langue indéterminée) +disp_locale=de : display_language=([rR]oot|Unbekannte Sprache) +----------------- +locale='uk@currency=EURO' +disp_locale=en : display_language=Ukrainian +disp_locale=fr : display_language=ukrainien +disp_locale=de : display_language=Ukrainisch +----------------- +locale='Hindi' +disp_locale=en : display_language=hindi +disp_locale=fr : display_language=hindi +disp_locale=de : display_language=hindi +----------------- +locale='de' +disp_locale=en : display_language=German +disp_locale=fr : display_language=allemand +disp_locale=de : display_language=Deutsch +----------------- +locale='fr' +disp_locale=en : display_language=French +disp_locale=fr : display_language=français +disp_locale=de : display_language=Französisch +----------------- +locale='ja' +disp_locale=en : display_language=Japanese +disp_locale=fr : display_language=japonais +disp_locale=de : display_language=Japanisch +----------------- +locale='i-enochian' +disp_locale=en : display_language=i-enochian +disp_locale=fr : display_language=i-enochian +disp_locale=de : display_language=i-enochian +----------------- +locale='art-lojban' +disp_locale=en : display_language=Lojban +disp_locale=fr : display_language=lojban +disp_locale=de : display_language=Lojban +----------------- +locale='zh-Hant' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='zh-Hans' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='sr-Cyrl' +disp_locale=en : display_language=Serbian +disp_locale=fr : display_language=serbe +disp_locale=de : display_language=Serbisch +----------------- +locale='sr-Latn' +disp_locale=en : display_language=Serbian +disp_locale=fr : display_language=serbe +disp_locale=de : display_language=Serbisch +----------------- +locale='zh-Hans-CN' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='sr-Latn-CS' +disp_locale=en : display_language=Serbian +disp_locale=fr : display_language=serbe +disp_locale=de : display_language=Serbisch +----------------- +locale='sl-rozaj' +disp_locale=en : display_language=Slovenian +disp_locale=fr : display_language=slovène +disp_locale=de : display_language=Slowenisch +----------------- +locale='sl-nedis' +disp_locale=en : display_language=Slovenian +disp_locale=fr : display_language=slovène +disp_locale=de : display_language=Slowenisch +----------------- +locale='de-CH-1901' +disp_locale=en : display_language=German +disp_locale=fr : display_language=allemand +disp_locale=de : display_language=Deutsch +----------------- +locale='sl-IT-nedis' +disp_locale=en : display_language=Slovenian +disp_locale=fr : display_language=slovène +disp_locale=de : display_language=Slowenisch +----------------- +locale='sl-Latn-IT-nedis' +disp_locale=en : display_language=Slovenian +disp_locale=fr : display_language=slovène +disp_locale=de : display_language=Slowenisch +----------------- +locale='de-DE' +disp_locale=en : display_language=German +disp_locale=fr : display_language=allemand +disp_locale=de : display_language=Deutsch +----------------- +locale='en-US' +disp_locale=en : display_language=English +disp_locale=fr : display_language=anglais +disp_locale=de : display_language=Englisch +----------------- +locale='es-419' +disp_locale=en : display_language=Spanish +disp_locale=fr : display_language=espagnol +disp_locale=de : display_language=Spanisch +----------------- +locale='de-CH-x-phonebk' +disp_locale=en : display_language=German +disp_locale=fr : display_language=allemand +disp_locale=de : display_language=Deutsch +----------------- +locale='az-Arab-x-AZE-derbend' +disp_locale=en : display_language=Azerbaijani +disp_locale=fr : display_language=azerbaïdjanais +disp_locale=de : display_language=Aserbaidschanisch +----------------- +locale='zh-min' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='zh-min-nan-Hant-CN' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='x-whatever' +disp_locale=en : display_language=x-whatever +disp_locale=fr : display_language=x-whatever +disp_locale=de : display_language=x-whatever +----------------- +locale='qaa-Qaaa-QM-x-southern' +disp_locale=en : display_language=qaa +disp_locale=fr : display_language=qaa +disp_locale=de : display_language=qaa +----------------- +locale='sr-Latn-QM' +disp_locale=en : display_language=Serbian +disp_locale=fr : display_language=serbe +disp_locale=de : display_language=Serbisch +----------------- +locale='sr-Qaaa-CS' +disp_locale=en : display_language=Serbian +disp_locale=fr : display_language=serbe +disp_locale=de : display_language=Serbisch +----------------- +locale='en-US-u-islamCal' +disp_locale=en : display_language=English +disp_locale=fr : display_language=anglais +disp_locale=de : display_language=Englisch +----------------- +locale='zh-CN-a-myExt-x-private' +disp_locale=en : display_language=Chinese +disp_locale=fr : display_language=chinois +disp_locale=de : display_language=Chinesisch +----------------- +locale='en-a-myExt-b-another' +disp_locale=en : display_language=English +disp_locale=fr : display_language=anglais +disp_locale=de : display_language=Englisch +----------------- +locale='de-419-DE' +disp_locale=en : display_language=German +disp_locale=fr : display_language=allemand +disp_locale=de : display_language=Deutsch +----------------- +locale='a-DE' +disp_locale=en : display_language=a +disp_locale=fr : display_language=a +disp_locale=de : display_language=a +----------------- +locale='ar-a-aaa-b-bbb-a-ccc' +disp_locale=en : display_language=Arabic +disp_locale=fr : display_language=arabe +disp_locale=de : display_language=Arabisch +----------------- diff --git a/ext/intl/tests/locale_get_display_name7.phpt b/ext/intl/tests/locale_get_display_name7.phpt index 8ef0c09241ac2..886c724a3775d 100644 --- a/ext/intl/tests/locale_get_display_name7.phpt +++ b/ext/intl/tests/locale_get_display_name7.phpt @@ -1,8 +1,9 @@ --TEST-- -locale_get_display_name() icu >= 64.0 +locale_get_display_name() icu >= 65.0 && icu < 68.1 --SKIPIF-- = 65.0'); ?> += 0) die('skip for ICU < 68.1'); ?> --FILE-- = 68.1 +--SKIPIF-- + += 68.1'); ?> +--FILE-- + +--EXPECTREGEX-- +locale='sl_IT_nedis_KIRTI' +disp_locale=en : display_name=Slovenian #Italy, NEDIS_KIRTI# +disp_locale=fr : display_name=slovène #Italie, NEDIS_KIRTI# +disp_locale=de : display_name=Slowenisch #Italien, NEDIS_KIRTI# +----------------- +locale='sl_IT_nedis-a-kirti-x-xyz' +disp_locale=en : display_name=Slovenian #Italy, NEDIS_A_KIRTI_X_XYZ# +disp_locale=fr : display_name=slovène #Italie, NEDIS_A_KIRTI_X_XYZ# +disp_locale=de : display_name=Slowenisch #Italien, NEDIS_A_KIRTI_X_XYZ# +----------------- +locale='sl_IT_rozaj' +disp_locale=en : display_name=Slovenian #Italy, Resian# +disp_locale=fr : display_name=slovène #Italie, dialecte de Resia# +disp_locale=de : display_name=Slowenisch #Italien, (ROZAJ|Resianisch)# +----------------- +locale='sl_IT_NEDIS_ROJAZ_1901' +disp_locale=en : display_name=Slovenian #Italy, NEDIS_ROJAZ_1901# +disp_locale=fr : display_name=slovène #Italie, NEDIS_ROJAZ_1901# +disp_locale=de : display_name=Slowenisch #Italien, NEDIS_ROJAZ_1901# +----------------- +locale='i-enochian' +disp_locale=en : display_name=i-enochian #Private-Use=i-enochian# +disp_locale=fr : display_name=i-enochian #usage privé=i-enochian# +disp_locale=de : display_name=i-enochian #Privatnutzung=i-enochian# +----------------- +locale='zh-hakka' +disp_locale=en : display_name=Chinese( #HAKKA#)? +disp_locale=fr : display_name=chinois( #HAKKA#)? +disp_locale=de : display_name=Chinesisch( #HAKKA#)? +----------------- +locale='zh-wuu' +disp_locale=en : display_name=Chinese #WUU# +disp_locale=fr : display_name=chinois #WUU# +disp_locale=de : display_name=Chinesisch #WUU# +----------------- +locale='i-tay' +disp_locale=en : display_name=i-tay +disp_locale=fr : display_name=i-tay +disp_locale=de : display_name=i-tay +----------------- +locale='sgn-BE-nl' +disp_locale=en : display_name=sgn #Belgium, NL# +disp_locale=fr : display_name=sgn #Belgique, NL# +disp_locale=de : display_name=sgn #Belgien, NL# +----------------- +locale='sgn-CH-de' +disp_locale=en : display_name=sgn #Switzerland, DE# +disp_locale=fr : display_name=sgn #Suisse, DE# +disp_locale=de : display_name=sgn #Schweiz, DE# +----------------- +locale='sl_IT_rozaj@currency=EUR' +disp_locale=en : display_name=Slovenian #Italy, Resian, [Cc]urrency=Euro# +disp_locale=fr : display_name=slovène #Italie, dialecte de Resia, [Dd]evise=euro# +disp_locale=de : display_name=Slowenisch #Italien, (ROZAJ|Resianisch), Währung=Euro# +----------------- +locale='uk-ua_CALIFORNIA@currency=;currency=GRN' +disp_locale=en : display_name= +disp_locale=fr : display_name= +disp_locale=de : display_name= +----------------- +locale='root' +disp_locale=en : display_name=Unknown language +disp_locale=fr : display_name=langue indéterminée +disp_locale=de : display_name=Unbekannte Sprache +----------------- +locale='uk@currency=EURO' +disp_locale=en : display_name=Ukrainian #[Cc]urrency=EURO# +disp_locale=fr : display_name=ukrainien #[Dd]evise=EURO# +disp_locale=de : display_name=Ukrainisch #Währung=EURO# +----------------- +locale='Hindi' +disp_locale=en : display_name=hindi +disp_locale=fr : display_name=hindi +disp_locale=de : display_name=hindi +----------------- +locale='de' +disp_locale=en : display_name=German +disp_locale=fr : display_name=allemand +disp_locale=de : display_name=Deutsch +----------------- +locale='fr' +disp_locale=en : display_name=French +disp_locale=fr : display_name=français +disp_locale=de : display_name=Französisch +----------------- +locale='ja' +disp_locale=en : display_name=Japanese +disp_locale=fr : display_name=japonais +disp_locale=de : display_name=Japanisch +----------------- +locale='i-enochian' +disp_locale=en : display_name=i-enochian #Private-Use=i-enochian# +disp_locale=fr : display_name=i-enochian #usage privé=i-enochian# +disp_locale=de : display_name=i-enochian #Privatnutzung=i-enochian# +----------------- +locale='zh-Hant' +disp_locale=en : display_name=Chinese #Traditional# +disp_locale=fr : display_name=chinois #traditionnel# +disp_locale=de : display_name=Chinesisch #Traditionell# +----------------- +locale='zh-Hans' +disp_locale=en : display_name=Chinese #Simplified# +disp_locale=fr : display_name=chinois #simplifié# +disp_locale=de : display_name=Chinesisch #Vereinfacht# +----------------- +locale='sr-Cyrl' +disp_locale=en : display_name=Serbian #Cyrillic# +disp_locale=fr : display_name=serbe #cyrillique# +disp_locale=de : display_name=Serbisch #Kyrillisch# +----------------- +locale='sr-Latn' +disp_locale=en : display_name=Serbian #Latin# +disp_locale=fr : display_name=serbe #latin# +disp_locale=de : display_name=Serbisch #Lateinisch# +----------------- +locale='zh-Hans-CN' +disp_locale=en : display_name=Chinese #Simplified, China# +disp_locale=fr : display_name=chinois #simplifié, Chine# +disp_locale=de : display_name=Chinesisch #Vereinfacht, China# +----------------- +locale='sr-Latn-CS' +disp_locale=en : display_name=Serbian #Latin, Serbia# +disp_locale=fr : display_name=serbe #latin, Serbie# +disp_locale=de : display_name=Serbisch #Lateinisch, Serbien# +----------------- +locale='sl-rozaj' +disp_locale=en : display_name=Slovenian #Resian# +disp_locale=fr : display_name=slovène #dialecte de Resia# +disp_locale=de : display_name=Slowenisch( #(ROZAJ|Resianisch)#)? +----------------- +locale='sl-nedis' +disp_locale=en : display_name=Slovenian #Natisone dialect# +disp_locale=fr : display_name=slovène #dialecte de Natisone# +disp_locale=de : display_name=Slowenisch #Natisone-Dialekt# +----------------- +locale='de-CH-1901' +disp_locale=en : display_name=German #Switzerland, Traditional German orthography# +disp_locale=fr : display_name=allemand #Suisse, orthographe allemande traditionnelle# +disp_locale=de : display_name=Deutsch #Schweiz, (1901|[aA]lte deutsche Rechtschreibung)# +----------------- +locale='sl-IT-nedis' +disp_locale=en : display_name=Slovenian #Italy, Natisone dialect# +disp_locale=fr : display_name=slovène #Italie, dialecte de Natisone# +disp_locale=de : display_name=Slowenisch #Italien, (NEDIS|Natisone-Dialekt)# +----------------- +locale='sl-Latn-IT-nedis' +disp_locale=en : display_name=Slovenian #Latin, Italy, Natisone dialect# +disp_locale=fr : display_name=slovène #latin, Italie, dialecte de Natisone# +disp_locale=de : display_name=Slowenisch #Lateinisch, Italien, (NEDIS|Natisone-Dialekt)# +----------------- +locale='de-DE' +disp_locale=en : display_name=German #Germany# +disp_locale=fr : display_name=allemand #Allemagne# +disp_locale=de : display_name=Deutsch #Deutschland# +----------------- +locale='en-US' +disp_locale=en : display_name=English #United States# +disp_locale=fr : display_name=anglais #États-Unis# +disp_locale=de : display_name=Englisch #Vereinigte Staaten# +----------------- +locale='es-419' +disp_locale=en : display_name=Spanish #Latin America# +disp_locale=fr : display_name=espagnol #Amérique latine# +disp_locale=de : display_name=Spanisch #Lateinamerika# +----------------- +locale='de-CH-x-phonebk' +disp_locale=en : display_name=German #Switzerland, Private-Use=phonebk# +disp_locale=fr : display_name=allemand #Suisse, usage privé=phonebk# +disp_locale=de : display_name=Deutsch #Schweiz, Privatnutzung=phonebk# +----------------- +locale='az-Arab-x-AZE-derbend' +disp_locale=en : display_name=Azerbaijani #Arabic, Private-Use=aze-derbend# +disp_locale=fr : display_name=azerbaïdjanais #arabe, usage privé=aze-derbend# +disp_locale=de : display_name=Aserbaidschanisch #Arabisch, Privatnutzung=aze-derbend# +----------------- +locale='zh-min' +disp_locale=en : display_name=Chinese #MIN# +disp_locale=fr : display_name=chinois #MIN# +disp_locale=de : display_name=Chinesisch #MIN# +----------------- +locale='zh-min-nan-Hant-CN' +disp_locale=en : display_name=Chinese #MIN, NAN_HANT_CN# +disp_locale=fr : display_name=chinois #MIN, NAN_HANT_CN# +disp_locale=de : display_name=Chinesisch #MIN, NAN_HANT_CN# +----------------- +locale='x-whatever' +disp_locale=en : display_name=x-whatever #Private-Use=whatever# +disp_locale=fr : display_name=x-whatever #usage privé=whatever# +disp_locale=de : display_name=x-whatever #Privatnutzung=whatever# +----------------- +locale='qaa-Qaaa-QM-x-southern' +disp_locale=en : display_name=qaa #Qaaa, QM, Private-Use=southern# +disp_locale=fr : display_name=qaa #Qaaa, QM, usage privé=southern# +disp_locale=de : display_name=qaa #Qaaa, QM, Privatnutzung=southern# +----------------- +locale='sr-Latn-QM' +disp_locale=en : display_name=Serbian #Latin, QM# +disp_locale=fr : display_name=serbe #latin, QM# +disp_locale=de : display_name=Serbisch #Lateinisch, QM# +----------------- +locale='sr-Qaaa-CS' +disp_locale=en : display_name=Serbian #Qaaa, Serbia# +disp_locale=fr : display_name=serbe #Qaaa, Serbie# +disp_locale=de : display_name=Serbisch #Qaaa, Serbien# +----------------- +locale='en-US-u-islamCal' +disp_locale=en : display_name=English #United States, attribute=islamcal# +disp_locale=fr : display_name=anglais #États-Unis, attribute=islamcal# +disp_locale=de : display_name=Englisch #Vereinigte Staaten, attribute=islamcal# +----------------- +locale='zh-CN-a-myExt-x-private' +disp_locale=en : display_name=Chinese #China, a=myext, Private-Use=private# +disp_locale=fr : display_name=chinois #Chine, a=myext, usage privé=private# +disp_locale=de : display_name=Chinesisch #China, a=myext, Privatnutzung=private# +----------------- +locale='en-a-myExt-b-another' +disp_locale=en : display_name=English #a=myext, b=another# +disp_locale=fr : display_name=anglais #a=myext, b=another# +disp_locale=de : display_name=Englisch #a=myext, b=another# +----------------- +locale='de-419-DE' +disp_locale=en : display_name=German #Latin America, DE# +disp_locale=fr : display_name=allemand #Amérique latine, DE# +disp_locale=de : display_name=Deutsch #Lateinamerika, DE# +----------------- +locale='a-DE' +disp_locale=en : display_name=a #Germany# +disp_locale=fr : display_name=a #Allemagne# +disp_locale=de : display_name=a #Deutschland# +----------------- +locale='ar-a-aaa-b-bbb-a-ccc' +disp_locale=en : display_name=Arabic #a=aaa, b=bbb# +disp_locale=fr : display_name=arabe #a=aaa, b=bbb# +disp_locale=de : display_name=Arabisch #a=aaa, b=bbb# +----------------- diff --git a/ext/intl/tests/msgfmt_fail2.phpt b/ext/intl/tests/msgfmt_fail2.phpt index 4061eab3dc4d1..f604de0727694 100644 --- a/ext/intl/tests/msgfmt_fail2.phpt +++ b/ext/intl/tests/msgfmt_fail2.phpt @@ -126,12 +126,12 @@ ArgumentCountError: msgfmt_create() expects exactly 2 arguments, 1 given in %s o ArgumentCountError: MessageFormatter::create() expects exactly 2 arguments, 1 given in %s on line %d 'U_ZERO_ERROR' -IntlException: Constructor failed in %s on line %d +IntlException: msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR in %s on line %d 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' -IntlException: Constructor failed in %s on line %d +IntlException: msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR in %s on line %d 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' 'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR' @@ -145,17 +145,17 @@ TypeError: MessageFormatter::create(): Argument #1 ($locale) must be of type str TypeError: msgfmt_create(): Argument #1 ($locale) must be of type string, array given in %s on line %d 'U_ZERO_ERROR' -IntlException: Constructor failed in %s on line %d -'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR' -'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR' -'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR' +IntlException: pattern syntax error (parse error at offset 1, after "{", before or at "0,choice}"): U_PATTERN_SYNTAX_ERROR in %s on line %d +'pattern syntax error (parse error at offset 1, after "{", before or at "0,choice}"): U_PATTERN_SYNTAX_ERROR' +'pattern syntax error (parse error at offset 1, after "{", before or at "0,choice}"): U_PATTERN_SYNTAX_ERROR' +'pattern syntax error (parse error at offset 1, after "{", before or at "0,choice}"): U_PATTERN_SYNTAX_ERROR' -IntlException: Constructor failed in %s on line %d +IntlException: msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES in %s on line %d 'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES' 'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES' 'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES' -IntlException: Constructor failed in %s on line %d +IntlException: msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND in %s on line %d 'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND' 'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND' 'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND' diff --git a/ext/intl/tests/rbbiter_getBinaryRules_basic2.phpt b/ext/intl/tests/rbbiter_getBinaryRules_basic2.phpt index 6a3f65e3ea638..4b6e89dbbfe54 100644 --- a/ext/intl/tests/rbbiter_getBinaryRules_basic2.phpt +++ b/ext/intl/tests/rbbiter_getBinaryRules_basic2.phpt @@ -1,8 +1,9 @@ --TEST-- -IntlRuleBasedBreakIterator::getBinaryRules(): basic test +IntlRuleBasedBreakIterator::getBinaryRules(): basic test icu >= 61.1 && icu < 68.1 --SKIPIF-- = 61.1 only'; ?> += 0) die('skip for ICU < 68.1'); ?> --FILE-- = 68.1 +--SKIPIF-- + += 68.1'); ?> +--FILE-- +setText('sdfkjsdf88á.... ,;'); + +$br = $rbbi->getBinaryRules(); + +$rbbi2 = new IntlRuleBasedBreakIterator($br, true); + +var_dump($rbbi->getRules(), $rbbi2->getRules()); +var_dump($rbbi->getRules() == $rbbi2->getRules()); +?> +==DONE== +--EXPECT-- +string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;" +string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;" +bool(true) +==DONE== diff --git a/ext/intl/tests/rbbiter_getRules_basic2.phpt b/ext/intl/tests/rbbiter_getRules_basic2.phpt index 97cea02d281b9..84d75e7e64c97 100644 --- a/ext/intl/tests/rbbiter_getRules_basic2.phpt +++ b/ext/intl/tests/rbbiter_getRules_basic2.phpt @@ -1,8 +1,9 @@ --TEST-- -IntlRuleBasedBreakIterator::getRules(): basic test +IntlRuleBasedBreakIterator::getRules(): basic test icu >= 61.1 && icu < 68.1 --SKIPIF-- = 61.1'); ?> += 0) die('skip for ICU < 68.1'); ?> --FILE-- = 68.1 +--SKIPIF-- + += 68.1'); ?> +--FILE-- +getRules()); + +?> +==DONE== +--EXPECT-- +string(119) "$LN=[[:letter:][:number:]];$S=[.;,:];!!forward;$LN+{1};$S+{42};!!reverse;$LN+{1};$S+{42};!!safe_forward;!!safe_reverse;" +==DONE== diff --git a/ext/intl/tests/timezone_getDSTSavings_error.phpt b/ext/intl/tests/timezone_getDSTSavings_error.phpt index d6879597c3e25..1e19db247941c 100644 --- a/ext/intl/tests/timezone_getDSTSavings_error.phpt +++ b/ext/intl/tests/timezone_getDSTSavings_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); var_dump(intltz_get_dst_savings(null)); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_get_dst_savings(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_dst_savings(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_dst_savings(NULL) #1 {main} diff --git a/ext/intl/tests/timezone_getDisplayName_error.phpt b/ext/intl/tests/timezone_getDisplayName_error.phpt index b38e305e6d3ea..0a5bb02499f6b 100644 --- a/ext/intl/tests/timezone_getDisplayName_error.phpt +++ b/ext/intl/tests/timezone_getDisplayName_error.phpt @@ -17,7 +17,7 @@ var_dump(intltz_get_display_name(null, IntlTimeZone::DISPLAY_SHORT, false, 'pt_P Warning: IntlTimeZone::getDisplayName(): intltz_get_display_name: wrong display type in %s on line %d bool(false) -Fatal error: Uncaught TypeError: intltz_get_display_name(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_display_name(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_display_name(NULL, 1, false, 'pt_PT') #1 {main} diff --git a/ext/intl/tests/timezone_getErrorCode_error.phpt b/ext/intl/tests/timezone_getErrorCode_error.phpt index c44a9107261fd..3de68f863f719 100644 --- a/ext/intl/tests/timezone_getErrorCode_error.phpt +++ b/ext/intl/tests/timezone_getErrorCode_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); var_dump(intltz_get_error_code(null)); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_get_error_code(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_error_code(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_error_code(NULL) #1 {main} diff --git a/ext/intl/tests/timezone_getErrorMessage_error.phpt b/ext/intl/tests/timezone_getErrorMessage_error.phpt index fb252415c848f..152b3c6fa16c4 100644 --- a/ext/intl/tests/timezone_getErrorMessage_error.phpt +++ b/ext/intl/tests/timezone_getErrorMessage_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); var_dump(intltz_get_error_message(null)); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_get_error_message(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_error_message(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_error_message(NULL) #1 {main} diff --git a/ext/intl/tests/timezone_getID_error.phpt b/ext/intl/tests/timezone_getID_error.phpt index 5ec090159c6b4..f6fb24629d781 100644 --- a/ext/intl/tests/timezone_getID_error.phpt +++ b/ext/intl/tests/timezone_getID_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); intltz_get_id(null); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_get_id(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_id(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_id(NULL) #1 {main} diff --git a/ext/intl/tests/timezone_getOffset_error.phpt b/ext/intl/tests/timezone_getOffset_error.phpt index d236c15170420..e5268906ac194 100644 --- a/ext/intl/tests/timezone_getOffset_error.phpt +++ b/ext/intl/tests/timezone_getOffset_error.phpt @@ -23,7 +23,7 @@ intltz_get_offset(null, time()*1000, false, $a, $a); Warning: IntlTimeZone::getOffset(): intltz_get_offset: error obtaining offset in %s on line %d bool(false) -Fatal error: Uncaught TypeError: intltz_get_offset(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_offset(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_offset(NULL, %d, false, NULL, NULL) #1 {main} diff --git a/ext/intl/tests/timezone_getRawOffset_error.phpt b/ext/intl/tests/timezone_getRawOffset_error.phpt index 3c9c463ec757f..c0188898b8759 100644 --- a/ext/intl/tests/timezone_getRawOffset_error.phpt +++ b/ext/intl/tests/timezone_getRawOffset_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); intltz_get_raw_offset(null); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_get_raw_offset(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_get_raw_offset(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_get_raw_offset(NULL) #1 {main} diff --git a/ext/intl/tests/timezone_hasSameRules_error.phpt b/ext/intl/tests/timezone_hasSameRules_error.phpt index a3f59f73ea246..a05f7cb5b45f6 100644 --- a/ext/intl/tests/timezone_hasSameRules_error.phpt +++ b/ext/intl/tests/timezone_hasSameRules_error.phpt @@ -32,7 +32,7 @@ try { ?> --EXPECT-- int(0) -string(101) "IntlTimeZone::hasSameRules(): Argument #1 ($otherTimeZone) must be of type IntlTimeZone, string given" +string(93) "IntlTimeZone::hasSameRules(): Argument #1 ($other) must be of type IntlTimeZone, string given" int(0) -string(83) "intltz_has_same_rules(): Argument #1 ($tz) must be of type IntlTimeZone, null given" +string(89) "intltz_has_same_rules(): Argument #1 ($timezone) must be of type IntlTimeZone, null given" diff --git a/ext/intl/tests/timezone_toDateTimeZone_error.phpt b/ext/intl/tests/timezone_toDateTimeZone_error.phpt index 83c422a143623..1930c43e4ace0 100644 --- a/ext/intl/tests/timezone_toDateTimeZone_error.phpt +++ b/ext/intl/tests/timezone_toDateTimeZone_error.phpt @@ -22,7 +22,7 @@ var_dump(intltz_to_date_time_zone(1)); Warning: IntlTimeZone::toDateTimeZone(): intltz_to_date_time_zone: DateTimeZone constructor threw exception in %s on line %d string(66) "DateTimeZone::__construct(): Unknown or bad timezone (Etc/Unknown)" -Fatal error: Uncaught TypeError: intltz_to_date_time_zone(): Argument #1 ($tz) must be of type IntlTimeZone, int given in %s:%d +Fatal error: Uncaught TypeError: intltz_to_date_time_zone(): Argument #1 ($timezone) must be of type IntlTimeZone, int given in %s:%d Stack trace: #0 %s(%d): intltz_to_date_time_zone(1) #1 {main} diff --git a/ext/intl/tests/timezone_useDaylightTime_error.phpt b/ext/intl/tests/timezone_useDaylightTime_error.phpt index 72cebfe7e59f3..176b41a6297a5 100644 --- a/ext/intl/tests/timezone_useDaylightTime_error.phpt +++ b/ext/intl/tests/timezone_useDaylightTime_error.phpt @@ -11,7 +11,7 @@ ini_set("intl.error_level", E_WARNING); intltz_use_daylight_time(null); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: intltz_use_daylight_time(): Argument #1 ($tz) must be of type IntlTimeZone, null given in %s:%d +Fatal error: Uncaught TypeError: intltz_use_daylight_time(): Argument #1 ($timezone) must be of type IntlTimeZone, null given in %s:%d Stack trace: #0 %s(%d): intltz_use_daylight_time(NULL) #1 {main} diff --git a/ext/intl/tests/transliterator_create_inverse_error.phpt b/ext/intl/tests/transliterator_create_inverse_error.phpt index a93554043d4a2..7a54ca133c1b8 100644 --- a/ext/intl/tests/transliterator_create_inverse_error.phpt +++ b/ext/intl/tests/transliterator_create_inverse_error.phpt @@ -10,7 +10,7 @@ ini_set("intl.error_level", E_WARNING); transliterator_create_inverse("jj"); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: transliterator_create_inverse(): Argument #1 ($orig_trans) must be of type Transliterator, string given in %s:%d +Fatal error: Uncaught TypeError: transliterator_create_inverse(): Argument #1 ($transliterator) must be of type Transliterator, string given in %s:%d Stack trace: #0 %s(%d): transliterator_create_inverse('jj') #1 {main} diff --git a/ext/intl/tests/transliterator_get_error_code_error.phpt b/ext/intl/tests/transliterator_get_error_code_error.phpt index 64f9ea5cc2a38..7a46544b831fe 100644 --- a/ext/intl/tests/transliterator_get_error_code_error.phpt +++ b/ext/intl/tests/transliterator_get_error_code_error.phpt @@ -8,7 +8,7 @@ ini_set("intl.error_level", E_WARNING); echo transliterator_get_error_code(array()), "\n"; ?> --EXPECTF-- -Fatal error: Uncaught TypeError: transliterator_get_error_code(): Argument #1 ($trans) must be of type Transliterator, array given in %s:%d +Fatal error: Uncaught TypeError: transliterator_get_error_code(): Argument #1 ($transliterator) must be of type Transliterator, array given in %s:%d Stack trace: #0 %s(%d): transliterator_get_error_code(Array) #1 {main} diff --git a/ext/intl/tests/transliterator_get_error_message_error.phpt b/ext/intl/tests/transliterator_get_error_message_error.phpt index 9c2e837da385a..26cb089090193 100644 --- a/ext/intl/tests/transliterator_get_error_message_error.phpt +++ b/ext/intl/tests/transliterator_get_error_message_error.phpt @@ -8,7 +8,7 @@ ini_set("intl.error_level", E_WARNING); echo transliterator_get_error_message(array()), "\n"; ?> --EXPECTF-- -Fatal error: Uncaught TypeError: transliterator_get_error_message(): Argument #1 ($trans) must be of type Transliterator, array given in %s:%d +Fatal error: Uncaught TypeError: transliterator_get_error_message(): Argument #1 ($transliterator) must be of type Transliterator, array given in %s:%d Stack trace: #0 %s(%d): transliterator_get_error_message(Array) #1 {main} diff --git a/ext/intl/tests/transliterator_transliterate_error.phpt b/ext/intl/tests/transliterator_transliterate_error.phpt index f59b8507985e0..0a93c326a1260 100644 --- a/ext/intl/tests/transliterator_transliterate_error.phpt +++ b/ext/intl/tests/transliterator_transliterate_error.phpt @@ -26,7 +26,7 @@ echo "Done.\n"; --EXPECTF-- Warning: transliterator_transliterate(): transliterator_transliterate: Neither "start" nor the "end" arguments can exceed the number of UTF-16 code units (in this case, 3) in %s on line %d bool(false) -transliterator_transliterate(): Argument #2 ($subject) must be less than or equal to argument #3 ($end) +transliterator_transliterate(): Argument #2 ($string) must be less than or equal to argument #3 ($end) Warning: transliterator_transliterate(): String conversion of string to UTF-16 failed in %s on line %d Done. diff --git a/ext/intl/timezone/timezone.stub.php b/ext/intl/timezone/timezone.stub.php index da8c2c88d7a55..60ec7524a60a3 100644 --- a/ext/intl/timezone/timezone.stub.php +++ b/ext/intl/timezone/timezone.stub.php @@ -10,7 +10,7 @@ private function __construct() {} * @return int|false * @alias intltz_count_equivalent_ids */ - public static function countEquivalentIDs(string $zoneId) {} + public static function countEquivalentIDs(string $timezoneId) {} /** * @return IntlTimeZone @@ -29,32 +29,32 @@ public static function createEnumeration($countryOrRawOffset = null) {} * @return IntlTimeZone|null * @alias intltz_create_time_zone */ - public static function createTimeZone(string $zoneId) {} + public static function createTimeZone(string $timezoneId) {} /** * @return IntlIterator|false * @alias intltz_create_time_zone_id_enumeration */ - public static function createTimeZoneIDEnumeration(int $zoneType, ?string $region = null, ?int $rawOffset = null) {} + public static function createTimeZoneIDEnumeration(int $type, ?string $region = null, ?int $rawOffset = null) {} /** * @return IntlTimeZone|null * @alias intltz_from_date_time_zone */ - public static function fromDateTimeZone(DateTimeZone $zone) {} + public static function fromDateTimeZone(DateTimeZone $timezone) {} /** - * @param bool $isSystemID + * @param bool $isSystemId * @return string|false * @alias intltz_get_canonical_id */ - public static function getCanonicalID(string $zoneId, &$isSystemID = null) {} + public static function getCanonicalID(string $timezoneId, &$isSystemId = null) {} /** * @return string|false * @alias intltz_get_display_name */ - public function getDisplayName(bool $isDaylight = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null) {} + public function getDisplayName(bool $dst = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null) {} /** * @return int @@ -66,7 +66,7 @@ public function getDSTSavings() {} * @return string|false * @alias intltz_get_equivalent_id */ - public static function getEquivalentID(string $zoneId, int $index) {} + public static function getEquivalentID(string $timezoneId, int $offset) {} /** * @return int|false @@ -98,7 +98,7 @@ public function getID() {} * @return bool * @alias intltz_get_offset */ - public function getOffset(float $date, bool $local, &$rawOffset, &$dstOffset) {} + public function getOffset(float $timestamp, bool $local, &$rawOffset, &$dstOffset) {} /** * @return int @@ -110,7 +110,7 @@ public function getRawOffset() {} * @return string|false * @alias intltz_get_region */ - public static function getRegion(string $zoneId) {} + public static function getRegion(string $timezoneId) {} /** * @return string|false @@ -129,19 +129,19 @@ public static function getUnknown() {} * @return string|false * @alias intltz_get_windows_id */ - public static function getWindowsID(string $timezone) {} + public static function getWindowsID(string $timezoneId) {} /** * @return string|false * @alias intltz_get_id_for_windows_id */ - public static function getIDForWindowsID(string $timezone, ?string $region = null) {} + public static function getIDForWindowsID(string $timezoneId, ?string $region = null) {} #endif /** * @return bool * @alias intltz_has_same_rules */ - public function hasSameRules(IntlTimeZone $otherTimeZone) {} + public function hasSameRules(IntlTimeZone $other) {} /** * @return DateTimeZone|false diff --git a/ext/intl/timezone/timezone_arginfo.h b/ext/intl/timezone/timezone_arginfo.h index ce14cdced3f33..f59fd9024b81a 100644 --- a/ext/intl/timezone/timezone_arginfo.h +++ b/ext/intl/timezone/timezone_arginfo.h @@ -1,11 +1,11 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 69c4f052e9c75c4adb5b1b7056db981b2b26a22f */ + * Stub hash: afd0e74b29d54cde9789787b924af9b43539a7f4 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone___construct, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_countEquivalentIDs, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_createDefault arginfo_class_IntlTimeZone___construct @@ -17,22 +17,22 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_createTimeZone arginfo_class_IntlTimeZone_countEquivalentIDs ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_createTimeZoneIDEnumeration, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, zoneType, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, region, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rawOffset, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_fromDateTimeZone, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, zone, DateTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, timezone, DateTimeZone, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getCanonicalID, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, isSystemID, "null") + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, isSystemId, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getDisplayName, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isDaylight, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dst, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, style, IS_LONG, 0, "IntlTimeZone::DISPLAY_LONG") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -40,8 +40,8 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_getDSTSavings arginfo_class_IntlTimeZone___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getEquivalentID, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, zoneId, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_getErrorCode arginfo_class_IntlTimeZone___construct @@ -53,7 +53,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_getID arginfo_class_IntlTimeZone___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getOffset, 0, 0, 4) - ZEND_ARG_TYPE_INFO(0, date, IS_DOUBLE, 0) + ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, local, _IS_BOOL, 0) ZEND_ARG_INFO(1, rawOffset) ZEND_ARG_INFO(1, dstOffset) @@ -69,19 +69,19 @@ ZEND_END_ARG_INFO() #if U_ICU_VERSION_MAJOR_NUM >= 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getWindowsID, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, timezone, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if U_ICU_VERSION_MAJOR_NUM >= 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_getIDForWindowsID, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, timezone, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, timezoneId, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, region, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlTimeZone_hasSameRules, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, otherTimeZone, IntlTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, other, IntlTimeZone, 0) ZEND_END_ARG_INFO() #define arginfo_class_IntlTimeZone_toDateTimeZone arginfo_class_IntlTimeZone___construct diff --git a/ext/intl/timezone/timezone_class.cpp b/ext/intl/timezone/timezone_class.cpp index 63d5b057467fd..f5749fd621de8 100644 --- a/ext/intl/timezone/timezone_class.cpp +++ b/ext/intl/timezone/timezone_class.cpp @@ -327,7 +327,7 @@ static HashTable *TimeZone_get_debug_info(zend_object *object, int *is_temp) int32_t rawOffset, dstOffset; UDate now = Calendar::getNow(); - tz->getOffset(now, FALSE, rawOffset, dstOffset, uec); + tz->getOffset(now, false, rawOffset, dstOffset, uec); if (U_FAILURE(uec)) { return debug_info; } diff --git a/ext/intl/timezone/timezone_methods.cpp b/ext/intl/timezone/timezone_methods.cpp index 6516bb6ff79e8..3a2d28ada6feb 100644 --- a/ext/intl/timezone/timezone_methods.cpp +++ b/ext/intl/timezone/timezone_methods.cpp @@ -89,7 +89,7 @@ U_CFUNC PHP_FUNCTION(intltz_from_date_time_zone) RETURN_NULL(); } - tz = timezone_convert_datetimezone(tzobj->type, tzobj, FALSE, NULL, + tz = timezone_convert_datetimezone(tzobj->type, tzobj, false, NULL, "intltz_from_date_time_zone"); if (tz == NULL) { RETURN_NULL(); diff --git a/ext/intl/transliterator/transliterator.stub.php b/ext/intl/transliterator/transliterator.stub.php index 5b47f05dd3d89..c14a4cf0c060f 100644 --- a/ext/intl/transliterator/transliterator.stub.php +++ b/ext/intl/transliterator/transliterator.stub.php @@ -34,7 +34,7 @@ public static function listIDs() {} * @return string|false * @alias transliterator_transliterate */ - public function transliterate(string $subject, int $start = 0, int $end = -1) {} + public function transliterate(string $string, int $start = 0, int $end = -1) {} /** * @return int|false diff --git a/ext/intl/transliterator/transliterator_arginfo.h b/ext/intl/transliterator/transliterator_arginfo.h index d596fdc72c50b..406a086293edc 100644 --- a/ext/intl/transliterator/transliterator_arginfo.h +++ b/ext/intl/transliterator/transliterator_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 52c803e82863ebdbe7a2fdcbe8508fb22984cbfd */ + * Stub hash: 4bcb458de884a68797bee28339399fb8c8664605 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Transliterator___construct, 0, 0, 0) ZEND_END_ARG_INFO() @@ -19,7 +19,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_Transliterator_listIDs arginfo_class_Transliterator___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Transliterator_transliterate, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, end, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() diff --git a/ext/intl/uchar/uchar.stub.php b/ext/intl/uchar/uchar.stub.php index 6f793a61477eb..f3ebd78bcb75c 100644 --- a/ext/intl/uchar/uchar.stub.php +++ b/ext/intl/uchar/uchar.stub.php @@ -18,13 +18,13 @@ public static function charDigitValue(int|string $codepoint) {} public static function charDirection(int|string $codepoint) {} /** @return int|null */ - public static function charFromName(string $characterName, int $nameChoice = IntlChar::UNICODE_CHAR_NAME) {} + public static function charFromName(string $name, int $type = IntlChar::UNICODE_CHAR_NAME) {} /** @return int|string|null */ public static function charMirror(int|string $codepoint) {} /** @return string|null */ - public static function charName(int|string $codepoint, int $nameChoice = IntlChar::UNICODE_CHAR_NAME) {} + public static function charName(int|string $codepoint, int $type = IntlChar::UNICODE_CHAR_NAME) {} /** @return int|null */ public static function charType(int|string $codepoint) {} @@ -33,10 +33,10 @@ public static function charType(int|string $codepoint) {} public static function chr(int|string $codepoint) {} /** @return int|false|null */ - public static function digit(int|string $codepoint, int $radix = 10) {} + public static function digit(int|string $codepoint, int $base = 10) {} /** @return bool|null */ - public static function enumCharNames(int|string $start, int|string $limit, callable $callback, int $nameChoice = IntlChar::UNICODE_CHAR_NAME) {} + public static function enumCharNames(int|string $start, int|string $end, callable $callback, int $type = IntlChar::UNICODE_CHAR_NAME) {} /** @return void */ public static function enumCharTypes(callable $callback) {} @@ -47,7 +47,7 @@ public static function enumCharTypes(callable $callback) {} public static function foldCase(int|string $codepoint, int $options = IntlChar::FOLD_CASE_DEFAULT) {} /** @return int */ - public static function forDigit(int $digit, int $radix = 10) {} + public static function forDigit(int $digit, int $base = 10) {} #if U_ICU_VERSION_MAJOR_NUM >= 52 /** @return int|string|null */ @@ -79,13 +79,13 @@ public static function getNumericValue(int|string $codepoint) {} public static function getPropertyEnum(string $alias) {} /** @return string|false */ - public static function getPropertyName(int $property, int $nameChoice = IntlChar::LONG_PROPERTY_NAME) {} + public static function getPropertyName(int $property, int $type = IntlChar::LONG_PROPERTY_NAME) {} /** @return int */ public static function getPropertyValueEnum(int $property, string $name) {} /** @return string|false */ - public static function getPropertyValueName(int $property, int $value, int $nameChoice = IntlChar::LONG_PROPERTY_NAME) {} + public static function getPropertyValueName(int $property, int $value, int $type = IntlChar::LONG_PROPERTY_NAME) {} /** @return array */ public static function getUnicodeVersion() {} diff --git a/ext/intl/uchar/uchar_arginfo.h b/ext/intl/uchar/uchar_arginfo.h index 3ea897c189270..c4e22cd767784 100644 --- a/ext/intl/uchar/uchar_arginfo.h +++ b/ext/intl/uchar/uchar_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 61f9c0a6c5048d25e070379f2f98fa10f8ce25ee */ + * Stub hash: 05ea5d884642e75721f90728fb24b7ad5ce46897 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_hasBinaryProperty, 0, 0, 2) ZEND_ARG_TYPE_MASK(0, codepoint, MAY_BE_LONG|MAY_BE_STRING, NULL) @@ -15,15 +15,15 @@ ZEND_END_ARG_INFO() #define arginfo_class_IntlChar_charDirection arginfo_class_IntlChar_charAge ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_charFromName, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, characterName, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nameChoice, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") ZEND_END_ARG_INFO() #define arginfo_class_IntlChar_charMirror arginfo_class_IntlChar_charAge ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_charName, 0, 0, 1) ZEND_ARG_TYPE_MASK(0, codepoint, MAY_BE_LONG|MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nameChoice, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") ZEND_END_ARG_INFO() #define arginfo_class_IntlChar_charType arginfo_class_IntlChar_charAge @@ -32,14 +32,14 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_digit, 0, 0, 1) ZEND_ARG_TYPE_MASK(0, codepoint, MAY_BE_LONG|MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, radix, IS_LONG, 0, "10") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_LONG, 0, "10") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_enumCharNames, 0, 0, 3) ZEND_ARG_TYPE_MASK(0, start, MAY_BE_LONG|MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_MASK(0, limit, MAY_BE_LONG|MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_MASK(0, end, MAY_BE_LONG|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nameChoice, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "IntlChar::UNICODE_CHAR_NAME") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_enumCharTypes, 0, 0, 1) @@ -53,7 +53,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_forDigit, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, digit, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, radix, IS_LONG, 0, "10") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_LONG, 0, "10") ZEND_END_ARG_INFO() #if U_ICU_VERSION_MAJOR_NUM >= 52 @@ -84,7 +84,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_getPropertyName, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, property, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nameChoice, IS_LONG, 0, "IntlChar::LONG_PROPERTY_NAME") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "IntlChar::LONG_PROPERTY_NAME") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_getPropertyValueEnum, 0, 0, 2) @@ -95,7 +95,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_getPropertyValueName, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, property, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nameChoice, IS_LONG, 0, "IntlChar::LONG_PROPERTY_NAME") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "IntlChar::LONG_PROPERTY_NAME") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlChar_getUnicodeVersion, 0, 0, 0) diff --git a/ext/json/config.w32 b/ext/json/config.w32 index 9d7881118d7d9..255f278772833 100644 --- a/ext/json/config.w32 +++ b/ext/json/config.w32 @@ -1,7 +1,7 @@ // vim:ft=javascript EXTENSION('json', 'json.c', false /* never shared */, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); - +PHP_JSON="yes"; ADD_SOURCES(configure_module_dirname, "json_encoder.c json_parser.tab.c json_scanner.c", "json"); ADD_MAKEFILE_FRAGMENT(); diff --git a/ext/json/json.c b/ext/json/json.c index cbf4f84014cf8..df46294cd672b 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -104,6 +104,11 @@ static PHP_GINIT_FUNCTION(json) } /* }}} */ +static PHP_RINIT_FUNCTION(json) +{ + JSON_G(error_code) = 0; + return SUCCESS; +} /* {{{ json_module_entry */ zend_module_entry json_module_entry = { @@ -112,7 +117,7 @@ zend_module_entry json_module_entry = { ext_functions, PHP_MINIT(json), NULL, - NULL, + PHP_RINIT(json), NULL, PHP_MINFO(json), PHP_JSON_VERSION, diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 489984ba81aaa..dde62b38108e8 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -1175,7 +1175,7 @@ PHP_FUNCTION(ldap_bind_ext) LDAPMessage *ldap_res; int rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|s!s!a", &link, &ldap_bind_dn, &ldap_bind_dnlen, &ldap_bind_pw, &ldap_bind_pwlen, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|s!s!a!", &link, &ldap_bind_dn, &ldap_bind_dnlen, &ldap_bind_pw, &ldap_bind_pwlen, &serverctrls) != SUCCESS) { RETURN_THROWS(); } @@ -1446,7 +1446,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) Z_PARAM_LONG(sizelimit) Z_PARAM_LONG(timelimit) Z_PARAM_LONG(deref) - Z_PARAM_ARRAY_EX(serverctrls, 0, 1) + Z_PARAM_ARRAY_EX(serverctrls, 1, 1) ZEND_PARSE_PARAMETERS_END(); /* Reverse -> fall through */ @@ -1557,7 +1557,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) } } - if (argcount > 8) { + if (serverctrls) { /* We have to parse controls again for each link as they use it */ _php_ldap_controls_free(&lserverctrls); lserverctrls = _php_ldap_controls_from_array(ld->link, serverctrls, 9); @@ -1610,7 +1610,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) } ldap_filter = zend_string_copy(filter_str); - if (argcount > 8) { + if (serverctrls) { lserverctrls = _php_ldap_controls_from_array(ld->link, serverctrls, 9); if (lserverctrls == NULL) { ret = 0; @@ -2183,7 +2183,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper, int ext) zend_ulong index; int is_full_add=0; /* flag for full add operation so ldap_mod_add can be put back into oper, gerrit THomson */ - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa/|a", &link, &dn, &dn_len, &entry, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa/|a!", &link, &dn, &dn_len, &entry, &serverctrls) != SUCCESS) { RETURN_THROWS(); } @@ -2414,7 +2414,7 @@ static void php_ldap_do_delete(INTERNAL_FUNCTION_PARAMETERS, int ext) int rc, msgid; size_t dn_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|a", &link, &dn, &dn_len, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|a!", &link, &dn, &dn_len, &serverctrls) != SUCCESS) { RETURN_THROWS(); } @@ -2557,7 +2557,7 @@ PHP_FUNCTION(ldap_modify_batch) ); */ - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa/|a", &link, &dn, &dn_len, &mods, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa/|a!", &link, &dn, &dn_len, &mods, &serverctrls) != SUCCESS) { RETURN_THROWS(); } @@ -2897,7 +2897,7 @@ PHP_FUNCTION(ldap_compare) int errno; struct berval lvalue; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsss|a", &link, &dn, &dn_len, &attr, &attr_len, &value, &value_len, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsss|a!", &link, &dn, &dn_len, &attr, &attr_len, &value, &value_len, &serverctrls) != SUCCESS) { RETURN_THROWS(); } @@ -3565,7 +3565,7 @@ static void php_ldap_do_rename(INTERNAL_FUNCTION_PARAMETERS, int ext) size_t dn_len, newrdn_len, newparent_len; zend_bool deleteoldrdn; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsssb|a", &link, &dn, &dn_len, &newrdn, &newrdn_len, &newparent, &newparent_len, &deleteoldrdn, &serverctrls) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsssb|a!", &link, &dn, &dn_len, &newrdn, &newrdn_len, &newparent, &newparent_len, &deleteoldrdn, &serverctrls) != SUCCESS) { RETURN_THROWS(); } diff --git a/ext/ldap/ldap.stub.php b/ext/ldap/ldap.stub.php index 0aad23a16598d..eb790d483fa0c 100644 --- a/ext/ldap/ldap.stub.php +++ b/ext/ldap/ldap.stub.php @@ -26,7 +26,7 @@ function ldap_bind($ldap, ?string $dn = null, ?string $password = null): bool {} * @param resource $ldap * @return resource|false */ -function ldap_bind_ext($ldap, ?string $dn = null, ?string $password = null, array $controls = []) {} +function ldap_bind_ext($ldap, ?string $dn = null, ?string $password = null, ?array $controls = null) {} #ifdef HAVE_LDAP_SASL /** @param resource $ldap */ @@ -37,19 +37,19 @@ function ldap_sasl_bind($ldap, ?string $dn = null, ?string $password = null, ?st * @param resource|array $ldap * @return resource|false */ -function ldap_read($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, array $controls = []) {} +function ldap_read($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, ?array $controls = null) {} /** * @param resource|array $ldap * @return resource|false */ -function ldap_list($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, array $controls = []) {} +function ldap_list($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, ?array $controls = null) {} /** * @param resource|array $ldap * @return resource|false */ -function ldap_search($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, array $controls = []) {} +function ldap_search($ldap, array|string $base, array|string $filter, array $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, ?array $controls = null) {} /** @param resource $ldap */ function ldap_free_result($ldap): bool {} @@ -123,58 +123,58 @@ function ldap_explode_dn(string $dn, int $with_attrib): array|false {} function ldap_dn2ufn(string $dn): string|false {} /** @param resource $ldap */ -function ldap_add($ldap, string $dn, array $entry, array $controls = []): bool {} +function ldap_add($ldap, string $dn, array $entry, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_add_ext($ldap, string $dn, array $entry, array $controls = []) {} +function ldap_add_ext($ldap, string $dn, array $entry, ?array $controls = null) {} /** @param resource $ldap */ -function ldap_delete($ldap, string $dn, array $controls = []): bool {} +function ldap_delete($ldap, string $dn, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_delete_ext($ldap, string $dn, array $controls = []) {} +function ldap_delete_ext($ldap, string $dn, ?array $controls = null) {} /** @param resource $ldap */ -function ldap_modify_batch($ldap, string $dn, array $modifications_info, array $controls = []): bool {} +function ldap_modify_batch($ldap, string $dn, array $modifications_info, ?array $controls = null): bool {} /** @param resource $ldap */ -function ldap_mod_add($ldap, string $dn, array $entry, array $controls = []): bool {} +function ldap_mod_add($ldap, string $dn, array $entry, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_mod_add_ext($ldap, string $dn, array $entry, array $controls = []) {} +function ldap_mod_add_ext($ldap, string $dn, array $entry, ?array $controls = null) {} /** @param resource $ldap */ -function ldap_mod_replace($ldap, string $dn, array $entry, array $controls = []): bool {} +function ldap_mod_replace($ldap, string $dn, array $entry, ?array $controls = null): bool {} /** * @param resource $ldap * @alias ldap_mod_replace */ -function ldap_modify($ldap, string $dn, array $entry, array $controls = []): bool {} +function ldap_modify($ldap, string $dn, array $entry, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_mod_replace_ext($ldap, string $dn, array $entry, array $controls = []) {} +function ldap_mod_replace_ext($ldap, string $dn, array $entry, ?array $controls = null) {} /** @param resource $ldap */ -function ldap_mod_del($ldap, string $dn, array $entry, array $controls = []): bool {} +function ldap_mod_del($ldap, string $dn, array $entry, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_mod_del_ext($ldap, string $dn, array $entry, array $controls = []) {} +function ldap_mod_del_ext($ldap, string $dn, array $entry, ?array $controls = null) {} /** @param resource $ldap */ function ldap_errno($ldap): int {} @@ -185,17 +185,17 @@ function ldap_error($ldap): string {} function ldap_err2str(int $errno): string {} /** @param resource $ldap */ -function ldap_compare($ldap, string $dn, string $attribute, string $value, array $controls = []): bool|int {} +function ldap_compare($ldap, string $dn, string $attribute, string $value, ?array $controls = null): bool|int {} #if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP) /** @param resource $ldap */ -function ldap_rename($ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, array $controls = []): bool {} +function ldap_rename($ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, ?array $controls = null): bool {} /** * @param resource $ldap * @return resource|false */ -function ldap_rename_ext($ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, array $controls = []) {} +function ldap_rename_ext($ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, ?array $controls = null) {} /** @@ -279,7 +279,7 @@ function ldap_8859_to_t61(string $value): string|false {} * @param string $response_oid * @return resource|bool */ -function ldap_exop($ldap, string $request_oid, ?string $request_data = null, ?array $controls = [], &$response_data = null, &$response_oid = null) {} +function ldap_exop($ldap, string $request_oid, ?string $request_data = null, ?array $controls = NULL, &$response_data = UNKNOWN, &$response_oid = null) {} #endif #ifdef HAVE_LDAP_PASSWD diff --git a/ext/ldap/ldap_arginfo.h b/ext/ldap/ldap_arginfo.h index a0b5890caddd9..c7aef8ae228ac 100644 --- a/ext/ldap/ldap_arginfo.h +++ b/ext/ldap/ldap_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 42f7118d8380424cd4178759cae6cb47b6d9b44f */ + * Stub hash: 980ee25422e1b026259d63e7a61adea699751b86 */ #if defined(HAVE_ORALDAP) ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_connect, 0, 0, 0) @@ -34,7 +34,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_bind_ext, 0, 0, 1) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dn, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #if defined(HAVE_LDAP_SASL) @@ -59,7 +59,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_read, 0, 0, 3) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sizelimit, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timelimit, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, deref, IS_LONG, 0, "LDAP_DEREF_NEVER") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #define arginfo_ldap_list arginfo_ldap_read @@ -120,33 +120,33 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_add, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, entry, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_add_ext, 0, 0, 3) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, entry, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_delete, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_delete_ext, 0, 0, 2) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_modify_batch, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, modifications_info, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #define arginfo_ldap_mod_add arginfo_ldap_add @@ -180,7 +180,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ldap_compare, 0, 4, MAY_BE_BOOL| ZEND_ARG_TYPE_INFO(0, dn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, attribute, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP) @@ -190,7 +190,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_rename, 0, 5, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, new_rdn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, new_parent, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, delete_old_rdn, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #endif @@ -201,7 +201,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_rename_ext, 0, 0, 5) ZEND_ARG_TYPE_INFO(0, new_rdn, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, new_parent, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, delete_old_rdn, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() #endif @@ -296,8 +296,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop, 0, 0, 2) ZEND_ARG_INFO(0, ldap) ZEND_ARG_TYPE_INFO(0, request_oid, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, request_data, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "[]") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response_data, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, controls, IS_ARRAY, 1, "NULL") + ZEND_ARG_INFO(1, response_data) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response_oid, "null") ZEND_END_ARG_INFO() #endif diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4 index 74266e4166206..9547130fba09e 100644 --- a/ext/mbstring/config.m4 +++ b/ext/mbstring/config.m4 @@ -94,18 +94,10 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ PHP_MBSTRING_ADD_SOURCES([ libmbfl/filters/html_entities.c libmbfl/filters/mbfilter_7bit.c - libmbfl/filters/mbfilter_ascii.c libmbfl/filters/mbfilter_base64.c libmbfl/filters/mbfilter_big5.c - libmbfl/filters/mbfilter_byte2.c - libmbfl/filters/mbfilter_byte4.c - libmbfl/filters/mbfilter_cp1251.c - libmbfl/filters/mbfilter_cp1252.c - libmbfl/filters/mbfilter_cp1254.c libmbfl/filters/mbfilter_cp5022x.c libmbfl/filters/mbfilter_cp51932.c - libmbfl/filters/mbfilter_cp850.c - libmbfl/filters/mbfilter_cp866.c libmbfl/filters/mbfilter_cp932.c libmbfl/filters/mbfilter_cp936.c libmbfl/filters/mbfilter_gb18030.c @@ -121,24 +113,9 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/filters/mbfilter_iso2022jp_2004.c libmbfl/filters/mbfilter_iso2022jp_mobile.c libmbfl/filters/mbfilter_iso2022_kr.c - libmbfl/filters/mbfilter_iso8859_1.c - libmbfl/filters/mbfilter_iso8859_10.c - libmbfl/filters/mbfilter_iso8859_13.c - libmbfl/filters/mbfilter_iso8859_14.c - libmbfl/filters/mbfilter_iso8859_15.c - libmbfl/filters/mbfilter_iso8859_16.c - libmbfl/filters/mbfilter_iso8859_2.c - libmbfl/filters/mbfilter_iso8859_3.c - libmbfl/filters/mbfilter_iso8859_4.c - libmbfl/filters/mbfilter_iso8859_5.c - libmbfl/filters/mbfilter_iso8859_6.c - libmbfl/filters/mbfilter_iso8859_7.c - libmbfl/filters/mbfilter_iso8859_8.c - libmbfl/filters/mbfilter_iso8859_9.c libmbfl/filters/mbfilter_jis.c - libmbfl/filters/mbfilter_koi8r.c - libmbfl/filters/mbfilter_armscii8.c libmbfl/filters/mbfilter_qprint.c + libmbfl/filters/mbfilter_singlebyte.c libmbfl/filters/mbfilter_sjis.c libmbfl/filters/mbfilter_sjis_open.c libmbfl/filters/mbfilter_sjis_mobile.c @@ -155,7 +132,6 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/filters/mbfilter_utf8.c libmbfl/filters/mbfilter_utf8_mobile.c libmbfl/filters/mbfilter_uuencode.c - libmbfl/filters/mbfilter_koi8u.c libmbfl/mbfl/mbfilter.c libmbfl/mbfl/mbfilter_8bit.c libmbfl/mbfl/mbfilter_pass.c @@ -163,7 +139,6 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/mbfl/mbfl_convert.c libmbfl/mbfl/mbfl_encoding.c libmbfl/mbfl/mbfl_filter_output.c - libmbfl/mbfl/mbfl_ident.c libmbfl/mbfl/mbfl_language.c libmbfl/mbfl/mbfl_memory_device.c libmbfl/mbfl/mbfl_string.c @@ -179,7 +154,7 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/nls/nls_tr.c libmbfl/nls/nls_ua.c ]) - PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) ]) dnl diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32 index 667fdb9222ecc..8a9eadf41be7c 100644 --- a/ext/mbstring/config.w32 +++ b/ext/mbstring/config.w32 @@ -17,37 +17,30 @@ if (PHP_MBSTRING != "no") { "ext\\mbstring\\libmbfl\\config.h", true); ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \ - mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \ - mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \ - mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_cp51932.c \ - mbfilter_euc_cn.c mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ + mbfilter_7bit.c mbfilter_base64.c mbfilter_big5.c mbfilter_cp932.c \ + mbfilter_cp936.c mbfilter_cp51932.c mbfilter_euc_cn.c \ + mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \ - mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \ - mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_16.c \ - mbfilter_iso8859_2.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c \ - mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c \ - mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_jis.c \ - mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c mbfilter_sjis_2004.c \ - mbfilter_koi8r.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ + mbfilter_jis.c mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c \ + mbfilter_sjis_2004.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ mbfilter_ucs4.c mbfilter_uhc.c mbfilter_utf16.c mbfilter_utf32.c \ - mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c mbfilter_utf8_mobile.c \ - mbfilter_koi8u.c mbfilter_cp1254.c mbfilter_euc_jp_2004.c \ - mbfilter_uuencode.c mbfilter_armscii8.c mbfilter_cp850.c \ + mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c \ + mbfilter_utf8_mobile.c mbfilter_euc_jp_2004.c mbfilter_uuencode.c \ mbfilter_cp5022x.c mbfilter_sjis_open.c mbfilter_sjis_mobile.c \ - mbfilter_sjis_mac.c \ - mbfilter_iso2022jp_2004.c mbfilter_iso2022jp_mobile.c \ + mbfilter_sjis_mac.c mbfilter_iso2022jp_2004.c \ + mbfilter_iso2022jp_mobile.c mbfilter_singlebyte.c \ mbfilter_tl_jisx0201_jisx0208.c", "mbstring"); ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \ mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \ - mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \ + mbfl_filter_output.c mbfl_language.c mbfl_memory_device.c \ mbfl_string.c", "mbstring"); ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \ nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \ nls_ua.c nls_tr.c", "mbstring"); - PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); + PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support'); diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c index 42ed23326daf6..bdf0cc78d97fe 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c @@ -75,6 +75,8 @@ int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < 0x80) { CK((*filter->output_function)(c, filter->data)); + } else { + mbfl_filt_conv_illegal_output(c, filter); } return c; } diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c deleted file mode 100644 index 38c8f98bd18ae..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan - * - */ - -/* - * "armenian code filter and converter" - */ - -#include "mbfilter.h" -#include "mbfilter_armscii8.h" -#include "unicode_table_armscii8.h" - -static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_armscii8_aliases[] = {"ArmSCII-8", "ArmSCII8", "ARMSCII-8", "ARMSCII8", NULL}; - -const mbfl_encoding mbfl_encoding_armscii8 = { - mbfl_no_encoding_armscii8, - "ArmSCII-8", - "ArmSCII-8", - (const char *(*)[])&mbfl_encoding_armscii8_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_armscii8_wchar, - &vtbl_wchar_armscii8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_armscii8 = { - mbfl_no_encoding_armscii8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_armscii8 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_armscii8 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_armscii8, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_armscii8, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_armscii8_wchar = { - mbfl_no_encoding_armscii8, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_armscii8_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * armscii8 => wchar - */ -int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < armscii8_ucs_table_min) { - s = c; - } else if (c >= armscii8_ucs_table_min && c < 0x100) { - s = armscii8_ucs_table[c - armscii8_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_ARMSCII8; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => armscii8 - */ -int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter) -{ - - int s, n; - - if (c >= 0x28 && c < 0x30) { - s = ucs_armscii8_table[c-0x28]; - } else if (c < armscii8_ucs_table_min) { - s = c; - } else { - s = -1; - n = armscii8_ucs_table_len-1; - while (n >= 0) { - if (c == armscii8_ucs_table[n]) { - s = armscii8_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_ARMSCII8) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter) -{ - if (c >= armscii8_ucs_table_min && c <= 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h deleted file mode 100644 index 0b14934995cd9..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan - * - */ - -#ifndef MBFL_MBFILTER_ARMSCII8_H -#define MBFL_MBFILTER_ARMSCII8_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_armscii8; -extern const struct mbfl_identify_vtbl vtbl_identify_armscii8; -extern const struct mbfl_convert_vtbl vtbl_wchar_armscii8; -extern const struct mbfl_convert_vtbl vtbl_armscii8_wchar; - -int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ARMSCII8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c deleted file mode 100644 index 43d659a46c899..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_ascii.h" - -static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL}; - -const mbfl_encoding mbfl_encoding_ascii = { - mbfl_no_encoding_ascii, - "ASCII", - "US-ASCII", /* preferred MIME name */ - (const char *(*)[])&mbfl_encoding_ascii_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_ascii_wchar, - &vtbl_wchar_ascii -}; - -const struct mbfl_identify_vtbl vtbl_identify_ascii = { - mbfl_no_encoding_ascii, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_ascii -}; - -const struct mbfl_convert_vtbl vtbl_ascii_wchar = { - mbfl_no_encoding_ascii, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_ascii_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_ascii = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_ascii, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_ascii, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ASCII => wchar - */ -int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter) -{ - return (*filter->output_function)(c, filter->data); -} - - -/* - * wchar => ASCII - */ -int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter) -{ - if (c >= 0 && c < 0x80) { - CK((*filter->output_function)(c, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x20 && c < 0x80) { - ; - } else if (c == 0x0d || c == 0x0a || c == 0x09 || c == 0) { /* CR or LF or HTAB or null */ - ; - } else { - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h b/ext/mbstring/libmbfl/filters/mbfilter_ascii.h deleted file mode 100644 index 3c8aead9efc1a..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_ASCII_H -#define MBFL_MBFILTER_ASCII_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_ascii; -extern const struct mbfl_identify_vtbl vtbl_identify_ascii; -extern const struct mbfl_convert_vtbl vtbl_ascii_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_ascii; - -int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ASCII_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c b/ext/mbstring/libmbfl/filters/mbfilter_big5.c index 1e59924092ac2..110150134c353 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_big5.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.c @@ -32,8 +32,6 @@ #include "unicode_table_big5.h" -static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_big5[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,7 +57,7 @@ const mbfl_encoding mbfl_encoding_big5 = { mbfl_no_encoding_big5, "BIG-5", "BIG5", - (const char *(*)[])&mbfl_encoding_big5_aliases, + mbfl_encoding_big5_aliases, mblen_table_big5, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_big5_wchar, @@ -77,18 +75,6 @@ const mbfl_encoding mbfl_encoding_cp950 = { &vtbl_wchar_cp950 }; -const struct mbfl_identify_vtbl vtbl_identify_big5 = { - mbfl_no_encoding_big5, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_big5 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp950 = { - mbfl_no_encoding_cp950, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_big5 -}; - const struct mbfl_convert_vtbl vtbl_big5_wchar = { mbfl_no_encoding_big5, mbfl_no_encoding_wchar, @@ -322,28 +308,3 @@ mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter) -{ - int c1; - if (filter->encoding->no_encoding == mbfl_no_encoding_cp950) { - c1 = 0x80; - } else { - c1 = 0xa0; - } - - if (filter->status) { /* kanji second char */ - if (c < 0x40 || (c > 0x7e && c < 0xa1) ||c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > c1 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.h b/ext/mbstring/libmbfl/filters/mbfilter_big5.h index c5a0955f8d71b..e475b6bd0c537 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_big5.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.h @@ -33,12 +33,10 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_big5; -extern const struct mbfl_identify_vtbl vtbl_identify_big5; extern const struct mbfl_convert_vtbl vtbl_big5_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_big5; extern const mbfl_encoding mbfl_encoding_cp950; -extern const struct mbfl_identify_vtbl vtbl_identify_cp950; extern const struct mbfl_convert_vtbl vtbl_cp950_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp950; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c b/ext/mbstring/libmbfl/filters/mbfilter_byte2.c deleted file mode 100644 index 72b5b2b7b2f8a..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_byte2.h" - -const mbfl_encoding mbfl_encoding_byte2be = { - mbfl_no_encoding_byte2be, - "byte2be", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte2be_wchar, - &vtbl_wchar_byte2be -}; - -const mbfl_encoding mbfl_encoding_byte2le = { - mbfl_no_encoding_byte2le, - "byte2le", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte2le_wchar, - &vtbl_wchar_byte2le -}; - -const struct mbfl_convert_vtbl vtbl_byte2be_wchar = { - mbfl_no_encoding_byte2be, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte2be_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte2be = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2be, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte2be, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_byte2le_wchar = { - mbfl_no_encoding_byte2le, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte2le_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte2le = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2le, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte2le, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff) << 8; - filter->cache = n; - } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); - return c; -} - -int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = c & 0xff; - filter->cache = n; - } else { - filter->status = 0; - n = ((c & 0xff) << 8) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h b/ext/mbstring/libmbfl/filters/mbfilter_byte2.h deleted file mode 100644 index 8b1d991810c79..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_BYTE2_H -#define MBFL_MBFILTER_BYTE2_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_byte2be; -extern const mbfl_encoding mbfl_encoding_byte2le; -extern const struct mbfl_convert_vtbl vtbl_byte2be_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte2be; -extern const struct mbfl_convert_vtbl vtbl_byte2le_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte2le; - -int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_BYTE2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c b/ext/mbstring/libmbfl/filters/mbfilter_byte4.c deleted file mode 100644 index b566e547725d7..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_byte4.h" - -const mbfl_encoding mbfl_encoding_byte4be = { - mbfl_no_encoding_byte4be, - "byte4be", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte4be_wchar, - &vtbl_wchar_byte4be -}; - -const mbfl_encoding mbfl_encoding_byte4le = { - mbfl_no_encoding_byte4le, - "byte4le", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte4le_wchar, - &vtbl_wchar_byte4le -}; - -const struct mbfl_convert_vtbl vtbl_byte4be_wchar = { - mbfl_no_encoding_byte4be, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte4be_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte4be = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte4be, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte4be, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_byte4le_wchar = { - mbfl_no_encoding_byte4le, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte4le_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte4le = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte4le, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte4le, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff) << 24; - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 16; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 8; - filter->cache |= n; - } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); - return c; -} - -int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff); - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 8; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 16; - filter->cache |= n; - } else { - filter->status = 0; - n = ((c & 0xff) << 24) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h b/ext/mbstring/libmbfl/filters/mbfilter_byte4.h deleted file mode 100644 index 572a2cf4775bf..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_BYTE4_H -#define MBFL_MBFILTER_BYTE4_H - -extern const mbfl_encoding mbfl_encoding_byte4be; -extern const mbfl_encoding mbfl_encoding_byte4le; -extern const struct mbfl_convert_vtbl vtbl_byte4be_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte4be; -extern const struct mbfl_convert_vtbl vtbl_byte4le_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte4le; - -int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_BYTE4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c deleted file mode 100644 index 470adf1a08491..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1251.h" -#include "unicode_table_cp1251.h" - -static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL}; - -const mbfl_encoding mbfl_encoding_cp1251 = { - mbfl_no_encoding_cp1251, - "Windows-1251", - "Windows-1251", - (const char *(*)[])&mbfl_encoding_cp1251_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1251_wchar, - &vtbl_wchar_cp1251 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1251 = { - mbfl_no_encoding_cp1251, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1251 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1251 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1251, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1251, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp1251_wchar = { - mbfl_no_encoding_cp1251, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1251_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp1251 => wchar - */ -int -mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp1251_ucs_table_min) { - s = c; - } else if (c >= cp1251_ucs_table_min && c < 0x100) { - s = cp1251_ucs_table[c - cp1251_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP1251; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp1251 - */ -int -mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp1251_ucs_table_len-1; - while (n >= 0) { - if (c == cp1251_ucs_table[n]) { - s = cp1251_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1251) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -/* all of this is so ugly now! */ -static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c <= 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h deleted file mode 100644 index b76cc9f680688..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * the source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1251_H -#define MBFL_MBFILTER_CP1251_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1251; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1251; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1251; -extern const struct mbfl_convert_vtbl vtbl_cp1251_wchar; - -int mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1251_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c deleted file mode 100644 index a274e4b796c57..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Wez Furlong - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1252.h" -#include "unicode_table_cp1252.h" - -static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1252_aliases[] = {"cp1252", NULL}; - -const mbfl_encoding mbfl_encoding_cp1252 = { - mbfl_no_encoding_cp1252, - "Windows-1252", - "Windows-1252", - (const char *(*)[])&mbfl_encoding_cp1252_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1252_wchar, - &vtbl_wchar_cp1252 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1252 = { - mbfl_no_encoding_cp1252, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1252 -}; - -const struct mbfl_convert_vtbl vtbl_cp1252_wchar = { - mbfl_no_encoding_cp1252, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1252_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1252 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1252, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1252, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * wchar => cp1252 - */ -int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter) -{ - int s=-1, n; - - if (c >= 0x100) { - /* look it up from the cp1252 table */ - s = -1; - n = 31; - while (n >= 0) { - if (c == cp1252_ucs_table[n] && c != 0xfffe) { - s = 0x80 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_1) - { - s = c & MBFL_WCSPLANE_MASK; - } - } - else if (c >= 0 && c < 0x100) { - s = c; - } - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - return c; -} - -/* - * cp1252 => wchar - */ -int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0x80 && c < 0xa0) { - s = cp1252_ucs_table[c - 0x80]; - } else { - s = c; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* We only distinguish the MS extensions to ISO-8859-1. - * Actually, this is pretty much a NO-OP, since the identification - * system doesn't allow us to discriminate between a positive match, - * a possible match and a definite non-match. - * The problem here is that cp1252 looks like SJIS for certain chars. - * */ -static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xa0) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h deleted file mode 100644 index afb2fffa9b940..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Wez Furlong - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1252_H -#define MBFL_MBFILTER_CP1252_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1252; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1252; -extern const struct mbfl_convert_vtbl vtbl_cp1252_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1252; - -int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c deleted file mode 100644 index 7e4bb4b148e96..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Haluk AKIN - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1254.h" -#include "unicode_table_cp1254.h" - -static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1254_aliases[] = {"CP1254", "CP-1254", "WINDOWS-1254", NULL}; - -const mbfl_encoding mbfl_encoding_cp1254 = { - mbfl_no_encoding_cp1254, - "Windows-1254", - "Windows-1254", - (const char *(*)[])&mbfl_encoding_cp1254_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1254_wchar, - &vtbl_wchar_cp1254 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1254 = { - mbfl_no_encoding_cp1254, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1254 -}; - -const struct mbfl_convert_vtbl vtbl_cp1254_wchar = { - mbfl_no_encoding_cp1254, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1254_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1254 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1254, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1254, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * wchar => cp1254 - */ -int -mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp1254_ucs_table_len-1; - while (n >= 0) { - if (c == cp1254_ucs_table[n] && c != 0xfffe) { - s = cp1254_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1254) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -/* - * cp1254 => wchar - */ -int -mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp1254_ucs_table_min) { - s = c; - } else if (c >= cp1254_ucs_table_min && c < 0x100) { - s = cp1254_ucs_table[c - cp1254_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP1254; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* We only distinguish the MS extensions to ISO-8859-1. - * Actually, this is pretty much a NO-OP, since the identification - * system doesn't allow us to discriminate between a positive match, - * a possible match and a definite non-match. - * The problem here is that cp1254 looks like SJIS for certain chars. - * */ -static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h deleted file mode 100644 index 15a63eae30a6d..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Haluk AKIN - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1254_H -#define MBFL_MBFILTER_CP1254_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1254; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1254; -extern const struct mbfl_convert_vtbl vtbl_cp1254_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1254; - -int mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c index 3879f9eb5bba0..a4d1724e8fa54 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c @@ -36,10 +36,6 @@ typedef struct _mbfl_filt_conv_wchar_cp50220_ctx { mbfl_convert_filter last; } mbfl_filt_conv_wchar_cp50220_ctx; -static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter); static void mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt); static void mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt); static void mbfl_filt_conv_wchar_cp50220_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest); @@ -59,7 +55,7 @@ const mbfl_encoding mbfl_encoding_cp50220 = { mbfl_no_encoding_cp50220, "CP50220", "ISO-2022-JP", - (const char *(*)[])NULL, + NULL, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp50220_wchar, @@ -70,7 +66,7 @@ const mbfl_encoding mbfl_encoding_cp50220raw = { mbfl_no_encoding_cp50220raw, "CP50220raw", "ISO-2022-JP", - (const char *(*)[])NULL, + NULL, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp50220raw_wchar, @@ -99,36 +95,6 @@ const mbfl_encoding mbfl_encoding_cp50222 = { &vtbl_wchar_cp50222 }; -const struct mbfl_identify_vtbl vtbl_identify_jis_ms = { - mbfl_no_encoding_jis_ms, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_jis_ms -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50220 = { - mbfl_no_encoding_cp50220, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50220 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50220raw = { - mbfl_no_encoding_cp50220raw, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50220 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50221 = { - mbfl_no_encoding_cp50221, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50221 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50222 = { - mbfl_no_encoding_cp50222, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50222 -}; - const struct mbfl_convert_vtbl vtbl_jis_ms_wchar = { mbfl_no_encoding_jis_ms, mbfl_no_encoding_wchar, @@ -585,7 +551,7 @@ mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt) ctx->last.opaque = ctx; ctx->last.data = filt->data; filt->filter_function = vtbl_tl_jisx0201_jisx0208.filter_function; - filt->filter_flush = vtbl_tl_jisx0201_jisx0208.filter_flush; + filt->filter_flush = (filter_flush_t)vtbl_tl_jisx0201_jisx0208.filter_flush; filt->output_function = (output_function_t)ctx->last.filter_function; filt->flush_function = (flush_function_t)ctx->last.filter_flush; filt->data = &ctx->last; @@ -948,332 +914,3 @@ mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter) return 0; } - - -static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0x90: X 0212 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (c == 0x0e) { /* "kana in" */ - filter->status = 0x20; - } else if (c == 0x0f) { /* "kana out" */ - filter->status = 0; - } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0x91: X 0212 second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x44) { /* 'D' */ - filter->status = 0x90; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h index e7cde7dff837b..e97cd0fab8bc9 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h @@ -37,11 +37,7 @@ extern const mbfl_encoding mbfl_encoding_cp50220; extern const mbfl_encoding mbfl_encoding_cp50220raw; extern const mbfl_encoding mbfl_encoding_cp50221; extern const mbfl_encoding mbfl_encoding_cp50222; -extern const struct mbfl_identify_vtbl vtbl_identify_jis_ms; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50220; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50220raw; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50221; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50222; + extern const struct mbfl_convert_vtbl vtbl_jis_ms_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_jis_ms; extern const struct mbfl_convert_vtbl vtbl_cp50220_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c index da046c86b7609..cb95469408b55 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c @@ -34,8 +34,6 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -55,20 +53,13 @@ static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }; - static const char *mbfl_encoding_cp51932_aliases[] = {"cp51932", NULL}; -const struct mbfl_identify_vtbl vtbl_identify_cp51932 = { - mbfl_no_encoding_cp51932, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp51932 -}; - const mbfl_encoding mbfl_encoding_cp51932 = { mbfl_no_encoding_cp51932, "CP51932", "CP51932", - (const char *(*)[])&mbfl_encoding_cp51932_aliases, + mbfl_encoding_cp51932_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_cp51932_wchar, @@ -299,40 +290,3 @@ mbfl_filt_conv_wchar_cp51932(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h index bbf56f48ca845..f48ec7cb3d4c0 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp51932; -extern const struct mbfl_identify_vtbl vtbl_identify_cp51932; extern const struct mbfl_convert_vtbl vtbl_cp51932_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp51932; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c deleted file mode 100644 index 5d6b265fc15e9..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * Adaption for CP850: D. Giffeler - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp850.h" -#include "unicode_table_cp850.h" - -static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp850_aliases[] = {"CP850", "CP-850", "IBM850", "IBM-850", NULL}; - -const mbfl_encoding mbfl_encoding_cp850 = { - mbfl_no_encoding_cp850, - "CP850", - "CP850", - (const char *(*)[])&mbfl_encoding_cp850_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp850_wchar, - &vtbl_wchar_cp850 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp850 = { - mbfl_no_encoding_cp850, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp850 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp850 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp850, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp850, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp850_wchar = { - mbfl_no_encoding_cp850, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp850_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp850 => wchar - */ -int -mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp850_ucs_table_min) { - s = c; - } else if (c >= cp850_ucs_table_min && c < 0x100) { - s = cp850_ucs_table[c - cp850_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP850; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp850 - */ -int -mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp850_ucs_table_len-1; - while (n >= 0) { - if (c == cp850_ucs_table[n]) { - s = cp850_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP850) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.h b/ext/mbstring/libmbfl/filters/mbfilter_cp850.h deleted file mode 100644 index 2a0e8e9e65a48..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp850.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * Adaption for CP850: D. Giffeler - * - */ - -#ifndef MBFL_MBFILTER_CP850_H -#define MBFL_MBFILTER_CP850_H - -extern const mbfl_encoding mbfl_encoding_cp850; -extern const struct mbfl_identify_vtbl vtbl_identify_cp850; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp850; -extern const struct mbfl_convert_vtbl vtbl_cp850_wchar; - -int mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c deleted file mode 100644 index 504903bef0c06..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp866.h" -#include "unicode_table_cp866.h" - -static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM866", "IBM-866", NULL}; - -const mbfl_encoding mbfl_encoding_cp866 = { - mbfl_no_encoding_cp866, - "CP866", - "CP866", - (const char *(*)[])&mbfl_encoding_cp866_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp866_wchar, - &vtbl_wchar_cp866 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp866 = { - mbfl_no_encoding_cp866, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp866 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp866 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp866, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp866, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp866_wchar = { - mbfl_no_encoding_cp866, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp866_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp866 => wchar - */ -int -mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp866_ucs_table_min) { - s = c; - } else if (c >= cp866_ucs_table_min && c < 0x100) { - s = cp866_ucs_table[c - cp866_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP866; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp866 - */ -int -mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp866_ucs_table_len-1; - while (n >= 0) { - if (c == cp866_ucs_table[n]) { - s = cp866_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP866) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h b/ext/mbstring/libmbfl/filters/mbfilter_cp866.h deleted file mode 100644 index e9eb25a54130c..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP866_H -#define MBFL_MBFILTER_CP866_H - -extern const mbfl_encoding mbfl_encoding_cp866; -extern const struct mbfl_identify_vtbl vtbl_identify_cp866; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp866; -extern const struct mbfl_convert_vtbl vtbl_cp866_wchar; - -int mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c index 3cbca1cb6451b..351a94c81c594 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c @@ -33,8 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_cp932 = { mbfl_no_encoding_cp932, "CP932", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_cp932_aliases, + mbfl_encoding_cp932_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp932_wchar, &vtbl_wchar_cp932 }; -const struct mbfl_identify_vtbl vtbl_identify_cp932 = { - mbfl_no_encoding_cp932, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp932 -}; - const struct mbfl_convert_vtbl vtbl_cp932_wchar = { mbfl_no_encoding_cp932, mbfl_no_encoding_wchar, @@ -323,23 +315,3 @@ mbfl_filt_conv_wchar_cp932(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h index f0b6daeac7f49..031276ddf1470 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp932; -extern const struct mbfl_identify_vtbl vtbl_identify_cp932; extern const struct mbfl_convert_vtbl vtbl_cp932_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp932; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c index df6d77907fc3f..4cfd1af8779ae 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c @@ -32,8 +32,6 @@ #define UNICODE_TABLE_CP936_DEF #include "unicode_table_cp936.h" -static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_cp936[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_cp936 = { mbfl_no_encoding_cp936, "CP936", "CP936", - (const char *(*)[])&mbfl_encoding_cp936_aliases, + mbfl_encoding_cp936_aliases, mblen_table_cp936, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp936_wchar, &vtbl_wchar_cp936 }; -const struct mbfl_identify_vtbl vtbl_identify_cp936 = { - mbfl_no_encoding_cp936, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp936 -}; - const struct mbfl_convert_vtbl vtbl_cp936_wchar = { mbfl_no_encoding_cp936, mbfl_no_encoding_wchar, @@ -283,21 +275,3 @@ mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfe || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0x80 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h index cc5e9bd33332b..d10391f5d2201 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp936; -extern const struct mbfl_identify_vtbl vtbl_identify_cp936; extern const struct mbfl_convert_vtbl vtbl_cp936_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp936; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c index 53a8aac2a64c0..6ee0bf9bd0c4c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c @@ -32,8 +32,6 @@ #include "unicode_table_cp936.h" -static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euccn[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_euc_cn = { mbfl_no_encoding_euc_cn, "EUC-CN", "CN-GB", - (const char *(*)[])&mbfl_encoding_euc_cn_aliases, + mbfl_encoding_euc_cn_aliases, mblen_table_euccn, MBFL_ENCTYPE_MBCS, &vtbl_euccn_wchar, &vtbl_wchar_euccn }; -const struct mbfl_identify_vtbl vtbl_identify_euccn = { - mbfl_no_encoding_euc_cn, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euccn -}; - const struct mbfl_convert_vtbl vtbl_euccn_wchar = { mbfl_no_encoding_euc_cn, mbfl_no_encoding_wchar, @@ -209,31 +201,3 @@ mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h index 31251fcf6dcba..7ef92d8b4b87b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_cn; -extern const struct mbfl_identify_vtbl vtbl_identify_euccn; extern const struct mbfl_convert_vtbl vtbl_euccn_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euccn; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c index 252a10a58dcfb..1589ae7966d88 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c @@ -33,7 +33,7 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); +static int mbfl_filt_conv_eucjp_wchar_flush(mbfl_convert_filter *filter); const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,26 +60,20 @@ const mbfl_encoding mbfl_encoding_euc_jp = { mbfl_no_encoding_euc_jp, "EUC-JP", "EUC-JP", - (const char *(*)[])&mbfl_encoding_euc_jp_aliases, + mbfl_encoding_euc_jp_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjp_wchar, &vtbl_wchar_eucjp }; -const struct mbfl_identify_vtbl vtbl_identify_eucjp = { - mbfl_no_encoding_euc_jp, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp -}; - const struct mbfl_convert_vtbl vtbl_eucjp_wchar = { mbfl_no_encoding_euc_jp, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_eucjp_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_eucjp_wchar_flush, NULL, }; @@ -101,7 +95,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_eucjp = { int mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) { - int c1, s, w; + int c1, s, w = 0; switch (filter->status) { case 0: @@ -115,9 +109,7 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) } else if (c == 0x8f) { /* X 0212 first char */ filter->status = 3; } else { - w = c & MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(w, filter->data)); + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); } break; @@ -128,21 +120,13 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) s = (c1 - 0xa1)*94 + c - 0xa1; if (s >= 0 && s < jisx0208_ucs_table_size) { w = jisx0208_ucs_table[s]; - } else { - w = 0; } if (w <= 0) { - w = ((c1 & 0x7f) << 8) | (c & 0x7f); - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0208; + w = ((c1 & 0x7f) << 8) | (c & 0x7f) | MBFL_WCSPLANE_JIS0208; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; @@ -152,47 +136,31 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) if (c > 0xa0 && c < 0xe0) { w = 0xfec0 + c; CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = 0x8e00 | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = 0x8e00 | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; - case 3: /* got 0x8f, X 0212 first char */ - if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); - filter->status = 0; - } else { - filter->status++; - filter->cache = c; - } + case 3: /* got 0x8f, JIS X 0212 first byte */ + filter->status++; + filter->cache = c; break; - case 4: /* got 0x8f, X 0212 second char */ + + case 4: /* got 0x8f, JIS X 0212 second byte */ filter->status = 0; c1 = filter->cache; - if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) { + if (c > 0xA0 && c < 0xFF && c1 > 0xA0 && c1 < 0xFF) { s = (c1 - 0xa1)*94 + c - 0xa1; if (s >= 0 && s < jisx0212_ucs_table_size) { w = jisx0212_ucs_table[s]; - } else { - w = 0; } if (w <= 0) { - w = ((c1 & 0x7f) << 8) | (c & 0x7f); - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0212; + w = ((c1 & 0x7f) << 8) | (c & 0x7f) | MBFL_WCSPLANE_JIS0212; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c | 0x8f0000; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | 0x8f0000 | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; @@ -205,13 +173,26 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) return c; } +static int mbfl_filt_conv_eucjp_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + (*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + /* * wchar => EUC-JP */ int mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) { - int c1, s; + int s; s = 0; if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { @@ -224,13 +205,7 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) s = ucs_r_jis_table[c - ucs_r_jis_table_min]; } if (s <= 0) { - c1 = c & ~MBFL_WCSPLANE_MASK; - if (c1 == MBFL_WCSPLANE_JIS0208) { - s = c & MBFL_WCSPLANE_MASK; - } else if (c1 == MBFL_WCSPLANE_JIS0212) { - s = c & MBFL_WCSPLANE_MASK; - s |= 0x8080; - } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ s = 0x2140; } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ s = 0x2141; @@ -244,10 +219,9 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) s = 0x2172; } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ s = 0x224c; - } - if (c == 0) { + } else if (c == 0) { s = 0; - } else if (s <= 0) { + } else { s = -1; } } @@ -271,55 +245,3 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else if (c == 0x8f) { /* X 0212 first char */ - filter->status = 3; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status++; - break; - case 4: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h index e1bd5653433e8..cc7aa3a6bff49 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_jp; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjp; extern const struct mbfl_convert_vtbl vtbl_eucjp_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c index 30d869cea5b6f..a14d37ec93bf9 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c @@ -31,7 +31,6 @@ #include "mbfilter_euc_jp_2004.h" #include "mbfilter_sjis_2004.h" -extern int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_eucjp[]; static const char *mbfl_encoding_eucjp2004_aliases[] = {"EUC_JP-2004", NULL}; @@ -40,19 +39,13 @@ const mbfl_encoding mbfl_encoding_eucjp2004 = { mbfl_no_encoding_eucjp2004, "EUC-JP-2004", "EUC-JP", - (const char *(*)[])&mbfl_encoding_eucjp2004_aliases, + mbfl_encoding_eucjp2004_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjp2004_wchar, &vtbl_wchar_eucjp2004 }; -const struct mbfl_identify_vtbl vtbl_identify_eucjp2004 = { - mbfl_no_encoding_eucjp2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp -}; - const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar = { mbfl_no_encoding_eucjp2004, mbfl_no_encoding_wchar, @@ -69,6 +62,6 @@ const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h index 55c06aef98bdd..affdd447f579c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_eucjp2004; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjp2004; extern const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c index 5798bff0fca1f..b93fc9101a406 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c @@ -34,8 +34,6 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -55,21 +53,13 @@ static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }; - -static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", - "eucJP-ms", NULL}; - -const struct mbfl_identify_vtbl vtbl_identify_eucjpwin = { - mbfl_no_encoding_eucjp_win, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp_win -}; +static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", "eucJP-ms", NULL}; const mbfl_encoding mbfl_encoding_eucjp_win = { mbfl_no_encoding_eucjp_win, "eucJP-win", "EUC-JP", - (const char *(*)[])&mbfl_encoding_eucjp_win_aliases, + mbfl_encoding_eucjp_win_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjpwin_wchar, @@ -319,8 +309,6 @@ mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter) s1 = 0x2172; } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ s1 = 0x224c; - } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ - s1 = 0x2141; } else { s1 = -1; c1 = 0; @@ -375,55 +363,3 @@ mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else if (c == 0x8f) { /* X 0212 first char */ - filter->status = 3; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status++; - break; - case 4: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h index f17058d523e8c..bb1e4dc392d7b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_eucjp_win; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjpwin; extern const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c index e9b08e08c1f72..3f423f59694f2 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c @@ -31,8 +31,6 @@ #include "mbfilter_euc_kr.h" #include "unicode_table_uhc.h" -static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euckr[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -58,19 +56,13 @@ const mbfl_encoding mbfl_encoding_euc_kr = { mbfl_no_encoding_euc_kr, "EUC-KR", "EUC-KR", - (const char *(*)[])&mbfl_encoding_euc_kr_aliases, + mbfl_encoding_euc_kr_aliases, mblen_table_euckr, MBFL_ENCTYPE_MBCS, &vtbl_euckr_wchar, &vtbl_wchar_euckr }; -const struct mbfl_identify_vtbl vtbl_identify_euckr = { - mbfl_no_encoding_euc_kr, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euckr -}; - const struct mbfl_convert_vtbl vtbl_euckr_wchar = { mbfl_no_encoding_euc_kr, mbfl_no_encoding_wchar, @@ -223,31 +215,3 @@ mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h index 1534d2bedc557..e0c13cf53ad73 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_kr; -extern const struct mbfl_identify_vtbl vtbl_identify_euckr; extern const struct mbfl_convert_vtbl vtbl_euckr_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euckr; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c index c76eeb36bfdfe..68dd539b721c8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c @@ -32,8 +32,6 @@ #include "unicode_table_cns11643.h" -static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euctw[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_euc_tw = { mbfl_no_encoding_euc_tw, "EUC-TW", "EUC-TW", - (const char *(*)[])&mbfl_encoding_euc_tw_aliases, + mbfl_encoding_euc_tw_aliases, mblen_table_euctw, MBFL_ENCTYPE_MBCS, &vtbl_euctw_wchar, &vtbl_wchar_euctw }; -const struct mbfl_identify_vtbl vtbl_identify_euctw = { - mbfl_no_encoding_euc_tw, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euctw -}; - const struct mbfl_convert_vtbl vtbl_euctw_wchar = { mbfl_no_encoding_euc_tw, mbfl_no_encoding_wchar, @@ -271,55 +263,3 @@ mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter) } return c; } - -static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else if (c == 0x8e) { /* DBCS lead byte */ - filter->status = 2; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got lead byte */ - if (c >= 0xa1 && c < 0xaf) { /* ok */ - filter->status = 3; - } else { - filter->flag = 1; /* bad */ - } - break; - - case 3: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 4; - break; - - case 4: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h index ed1f09125971f..9c2ffa480210f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_tw; -extern const struct mbfl_identify_vtbl vtbl_identify_euctw; extern const struct mbfl_convert_vtbl vtbl_euctw_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euctw; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c index b94d664f401d7..dfab3d59dfa9b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c @@ -33,27 +33,19 @@ #include "unicode_table_cp936.h" #include "unicode_table_gb18030.h" -static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter); - static const char *mbfl_encoding_gb18030_aliases[] = {"gb-18030", "gb-18030-2000", NULL}; const mbfl_encoding mbfl_encoding_gb18030 = { mbfl_no_encoding_gb18030, "GB18030", "GB18030", - (const char *(*)[])&mbfl_encoding_gb18030_aliases, + mbfl_encoding_gb18030_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_gb18030_wchar, &vtbl_wchar_gb18030 }; -const struct mbfl_identify_vtbl vtbl_identify_gb18030 = { - mbfl_no_encoding_gb18030, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_gb18030 -}; - const struct mbfl_convert_vtbl vtbl_gb18030_wchar = { mbfl_no_encoding_gb18030, mbfl_no_encoding_wchar, @@ -76,42 +68,37 @@ const struct mbfl_convert_vtbl vtbl_wchar_gb18030 = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int -mbfl_bisec_srch(int w, const unsigned short *tbl, int n) +/* `tbl` contains inclusive ranges, each represented by a pair of unsigned shorts */ +int mbfl_bisec_srch(int w, const unsigned short *tbl, int n) { - int k, k1 = 0, k2 = n-1; - - while (k1 < k2) { - k = (k1+k2) >> 1; - if (w <= tbl[2*k+1]) { - k2 = k; - } else if (w >= tbl[2*k+2]) { - k1 = k + 1; + int l = 0, r = n-1; + while (l <= r) { + int probe = (l + r) >> 1; + unsigned short lo = tbl[2 * probe], hi = tbl[(2 * probe) + 1]; + if (w < lo) { + r = probe - 1; + } else if (w > hi) { + l = probe + 1; } else { - return -1; + return probe; } } - return k1; + return -1; } -int -mbfl_bisec_srch2(int w, const unsigned short tbl[], int n) +/* `tbl` contains single values, not ranges */ +int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n) { - int k, k1 = 0, k2 = n; - - if (w == tbl[0]) { - return 0; - } - - while (k2 - k1 > 1) { - k = (k1 + k2) >> 1; - if (w < tbl[k]) { - k2 = k; - } else if (w > tbl[k]) { - k1 = k; + int l = 0, r = n-1; + while (l <= r) { + int probe = (l + r) >> 1; + unsigned short val = tbl[probe]; + if (w < val) { + r = probe - 1; + } else if (w > val) { + l = probe + 1; } else { - return k; + return probe; } } return -1; @@ -414,55 +401,3 @@ mbfl_filt_conv_wchar_gb18030(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter) -{ - int c1; - - c1 = (filter->status >> 8) & 0xff; - filter->status &= 0xff; - - if (filter->status == 0) { - if (c <= 0x80 || c == 0xff) { - filter->status = 0; - } else { - filter->status = 1; - filter->status |= (c << 8); - } - } else if (filter->status == 1) { /* dbcs/qbcs 2nd byte */ - if (((c1 >= 0x81 && c1 <= 0x84) || (c1 >= 0x90 && c1 <= 0xe3)) && c >= 0x30 && c <= 0x39) { /* qbcs */ - filter->status = 2; - } else if (((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) && (c >= 0xa1 && c <= 0xfe)) { - filter->status = 0; /* UDA part 1,2 */ - } else if (c1 >= 0xa1 && c1 <= 0xa7 && c >= 0x40 && c < 0xa1 && c != 0x7f) { - filter->status = 0; /* UDA part 3 */ - } else if ((c1 >= 0xa1 && c1 <= 0xa9 && c >= 0xa1 && c <= 0xfe) || - (c1 >= 0xb0 && c1 <= 0xf7 && c >= 0xa1 && c <= 0xfe) || - (c1 >= 0x81 && c1 <= 0xa0 && c >= 0x40 && c <= 0xfe && c != 0x7f) || - (c1 >= 0xaa && c1 <= 0xfe && c >= 0x40 && c <= 0xa0 && c != 0x7f) || - (c1 >= 0xa8 && c1 <= 0xa9 && c >= 0x40 && c <= 0xa0 && c != 0x7f)) { - filter->status = 0; /* DBCS */ - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else if (filter->status == 2) { /* qbcs 3rd byte */ - if (c > 0x80 && c < 0xff) { - filter->status = 3; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else if (filter->status == 3) { /* qbcs 4th byte */ - if (c >= 0x30 && c < 0x40) { - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h index dc7d51b6e2c51..e7f0eae16bf6e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_gb18030; -extern const struct mbfl_identify_vtbl vtbl_identify_gb18030; extern const struct mbfl_convert_vtbl vtbl_gb18030_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_gb18030; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c index 7176fd4717ade..95a0817103699 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c @@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_html_ent = { mbfl_no_encoding_html_ent, "HTML-ENTITIES", "HTML-ENTITIES", - (const char *(*)[])&mbfl_encoding_html_ent_aliases, + mbfl_encoding_html_ent_aliases, NULL, MBFL_ENCTYPE_GL_UNSAFE, &vtbl_html_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.c b/ext/mbstring/libmbfl/filters/mbfilter_hz.c index ceac85816cf09..bf3f8c4b774e2 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_hz.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.c @@ -32,8 +32,6 @@ #include "unicode_table_cp936.h" -static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_hz = { mbfl_no_encoding_hz, "HZ", @@ -45,12 +43,6 @@ const mbfl_encoding mbfl_encoding_hz = { &vtbl_wchar_hz }; -const struct mbfl_identify_vtbl vtbl_identify_hz = { - mbfl_no_encoding_hz, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_hz -}; - const struct mbfl_convert_vtbl vtbl_hz_wchar = { mbfl_no_encoding_hz, mbfl_no_encoding_wchar, @@ -225,49 +217,3 @@ mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter) filter->status &= 0xff; return 0; } - -static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter) -{ - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: GB2312 */ - case 0: - if (c == 0x7e) { - filter->status += 2; - } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x11: GB2312 second char */ - case 1: - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - case 2: - if (c == 0x7d) { /* '}' */ - filter->status = 0; - } else if (c == 0x7b) { /* '{' */ - filter->status = 0x10; - } else if (c == 0x7e) { /* '~' */ - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.h b/ext/mbstring/libmbfl/filters/mbfilter_hz.h index e7e35cacc81db..6b1dfb1564c9d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_hz.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_hz; -extern const struct mbfl_identify_vtbl vtbl_identify_hz; extern const struct mbfl_convert_vtbl vtbl_hz_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_hz; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c index 1e9757eae62e5..950365045c82e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c @@ -34,27 +34,19 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); - static const char *mbfl_encoding_2022jpms_aliases[] = {"ISO2022JPMS", NULL}; const mbfl_encoding mbfl_encoding_2022jpms = { mbfl_no_encoding_2022jpms, "ISO-2022-JP-MS", "ISO-2022-JP", - (const char *(*)[])&mbfl_encoding_2022jpms_aliases, + mbfl_encoding_2022jpms_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_2022jpms_wchar, &vtbl_wchar_2022jpms }; -const struct mbfl_identify_vtbl vtbl_identify_2022jpms = { - mbfl_no_encoding_2022jpms, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jpms -}; - const struct mbfl_convert_vtbl vtbl_2022jpms_wchar = { mbfl_no_encoding_2022jpms, mbfl_no_encoding_wchar, @@ -429,97 +421,3 @@ mbfl_filt_conv_any_2022jpms_flush(mbfl_convert_filter *filter) return 0; } - -int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0xa0: X UDC */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if ((filter->status == 0x80 || filter->status == 0xa0) && c > 0x20 && c < 0x80) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0xa1: UDC second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x3f) { /* '?' */ - filter->status = 0xa0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h index 7c40b19246622..fdc85183d7ea2 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jpms; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jpms; extern const struct mbfl_convert_vtbl vtbl_2022jpms_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jpms; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c index 8df1d6f9b5603..feb29a0a2ab11 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c @@ -31,8 +31,6 @@ #include "mbfilter_iso2022_kr.h" #include "unicode_table_uhc.h" -static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_2022kr = { mbfl_no_encoding_2022kr, "ISO-2022-KR", @@ -44,12 +42,6 @@ const mbfl_encoding mbfl_encoding_2022kr = { &vtbl_wchar_2022kr }; -const struct mbfl_identify_vtbl vtbl_identify_2022kr = { - mbfl_no_encoding_2022kr, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022kr -}; - const struct mbfl_convert_vtbl vtbl_wchar_2022kr = { mbfl_no_encoding_wchar, mbfl_no_encoding_2022kr, @@ -282,73 +274,3 @@ mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: KSC5601 mode */ -/* case 0x20: KSC5601 DBCS */ -/* case 0x40: KSC5601 SBCS */ - case 0: - if (!(filter->status & 0x10)) { - if (c == 0x1b) - filter->status += 2; - } else if (filter->status == 0x20 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x21: KSC5601 second char */ - case 1: - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x29) { /* ')' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $) */ - case 5: - if (c == 0x43) { /* 'C' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h index 7277c5f11c529..a00da5bbaca79 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022kr; -extern const struct mbfl_identify_vtbl vtbl_identify_2022kr; extern const struct mbfl_convert_vtbl vtbl_wchar_2022kr; extern const struct mbfl_convert_vtbl vtbl_2022kr_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c index b381f09bea56e..a8f2a1da53607 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c @@ -34,7 +34,6 @@ #include "unicode_table_jis.h" extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); -static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter); const mbfl_encoding mbfl_encoding_2022jp_2004 = { mbfl_no_encoding_2022jp_2004, @@ -47,12 +46,6 @@ const mbfl_encoding mbfl_encoding_2022jp_2004 = { &vtbl_wchar_2022jp_2004 }; -const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004 = { - mbfl_no_encoding_2022jp_2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jp_2004 -}; - const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar = { mbfl_no_encoding_2022jp_2004, mbfl_no_encoding_wchar, @@ -69,96 +62,6 @@ const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; - -static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x80: X 0212 */ -/* case 0x90: X 0213 plane 1 */ -/* case 0xa0: X 0213 plane 2 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x42) { /* 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x51) { /* JIS X 0213 plane 1 */ - filter->status = 0x90; - } else if (c == 0x50) { /* JIS X 0213 plane 2 */ - filter->status = 0xa0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h index 929559b87f9ee..58b2dd31d8c4a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jp_2004; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004; extern const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c index 32ea47712e165..e6300675e81f1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c @@ -36,7 +36,6 @@ #include "cp932_table.h" extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); -extern int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); static const char *mbfl_encoding_2022jp_kddi_aliases[] = {"ISO-2022-JP-KDDI", NULL}; @@ -44,19 +43,13 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = { mbfl_no_encoding_2022jp_kddi, "ISO-2022-JP-MOBILE#KDDI", "ISO-2022-JP", - (const char *(*)[])&mbfl_encoding_2022jp_kddi_aliases, + mbfl_encoding_2022jp_kddi_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_2022jp_kddi_wchar, &vtbl_wchar_2022jp_kddi }; -const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi = { - mbfl_no_encoding_2022jp_kddi, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jpms -}; - const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar = { mbfl_no_encoding_2022jp_kddi, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h index a375e8df0e8b0..a53ec2c36f090 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jp_kddi; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi; extern const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_kddi; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c deleted file mode 100644 index 1549ba81bfb95..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_1.h" - -static const char *mbfl_encoding_8859_1_aliases[] = {"ISO8859-1", "latin1", NULL}; - -const mbfl_encoding mbfl_encoding_8859_1 = { - mbfl_no_encoding_8859_1, - "ISO-8859-1", - "ISO-8859-1", - (const char *(*)[])&mbfl_encoding_8859_1_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_1_wchar, - &vtbl_wchar_8859_1 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_1 = { - mbfl_no_encoding_8859_1, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_1_wchar = { - mbfl_no_encoding_8859_1, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_1_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_1 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_1, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_1, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-1 => wchar - */ -int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter) -{ - return (*filter->output_function)(c, filter->data); -} - -/* - * wchar => ISO-8859-1 - */ -int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter) -{ - if (c >= 0 && c < 0x100) { - CK((*filter->output_function)(c, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h deleted file mode 100644 index b593f10f54ef7..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.h - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_1_H -#define MBFL_MBFILTER_ISO8859_1_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_1; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_1; -extern const struct mbfl_convert_vtbl vtbl_8859_1_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_1; - -int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_1_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c deleted file mode 100644 index 12cd960a8802e..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_10.h" -#include "unicode_table_iso8859_10.h" - -static const char *mbfl_encoding_8859_10_aliases[] = {"ISO8859-10", "latin6", NULL}; - -const mbfl_encoding mbfl_encoding_8859_10 = { - mbfl_no_encoding_8859_10, - "ISO-8859-10", - "ISO-8859-10", - (const char *(*)[])&mbfl_encoding_8859_10_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_10_wchar, - &vtbl_wchar_8859_10 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_10 = { - mbfl_no_encoding_8859_10, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_10_wchar = { - mbfl_no_encoding_8859_10, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_10_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_10 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_10, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_10, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-10 => wchar - */ -int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_10_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_10; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-10 - */ -int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_10_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_10) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h deleted file mode 100644 index f9133404de3c5..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_10_H -#define MBFL_MBFILTER_ISO8859_10_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_10; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_10; -extern const struct mbfl_convert_vtbl vtbl_8859_10_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_10; - -int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c deleted file mode 100644 index 25526263b86c9..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_13.h" -#include "unicode_table_iso8859_13.h" - -static const char *mbfl_encoding_8859_13_aliases[] = {"ISO8859-13", NULL}; - -const mbfl_encoding mbfl_encoding_8859_13 = { - mbfl_no_encoding_8859_13, - "ISO-8859-13", - "ISO-8859-13", - (const char *(*)[])&mbfl_encoding_8859_13_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_13_wchar, - &vtbl_wchar_8859_13 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_13 = { - mbfl_no_encoding_8859_13, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_13_wchar = { - mbfl_no_encoding_8859_13, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_13_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_13 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_13, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_13, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-13 => wchar - */ -int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_13_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_13; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-13 - */ -int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_13_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_13) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h deleted file mode 100644 index dcd60755944a2..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_13_H -#define MBFL_MBFILTER_ISO8859_13_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_13; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_13; -extern const struct mbfl_convert_vtbl vtbl_8859_13_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_13; - -int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c deleted file mode 100644 index 06a2e4cd984c0..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_14.h" -#include "unicode_table_iso8859_14.h" - -static const char *mbfl_encoding_8859_14_aliases[] = {"ISO8859-14", "latin8", NULL}; - -const mbfl_encoding mbfl_encoding_8859_14 = { - mbfl_no_encoding_8859_14, - "ISO-8859-14", - "ISO-8859-14", - (const char *(*)[])&mbfl_encoding_8859_14_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_14_wchar, - &vtbl_wchar_8859_14 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_14 = { - mbfl_no_encoding_8859_14, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_14_wchar = { - mbfl_no_encoding_8859_14, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_14_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_14 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_14, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_14, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-14 => wchar - */ -int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_14_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_14; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-14 - */ -int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_14_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_14) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h deleted file mode 100644 index 90531e668a1a8..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_14_H -#define MBFL_MBFILTER_ISO8859_14_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_14; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_14; -extern const struct mbfl_convert_vtbl vtbl_8859_14_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_14; - -int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c deleted file mode 100644 index 82b40796b8f7a..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_15.h" -#include "unicode_table_iso8859_15.h" - -static const char *mbfl_encoding_8859_15_aliases[] = {"ISO8859-15", NULL}; - -const mbfl_encoding mbfl_encoding_8859_15 = { - mbfl_no_encoding_8859_15, - "ISO-8859-15", - "ISO-8859-15", - (const char *(*)[])&mbfl_encoding_8859_15_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_15_wchar, - &vtbl_wchar_8859_15 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_15 = { - mbfl_no_encoding_8859_15, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_15_wchar = { - mbfl_no_encoding_8859_15, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_15_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_15 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_15, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_15, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-15 => wchar - */ -int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_15_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_15; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-15 - */ -int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_15_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_15) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h deleted file mode 100644 index a8fb339b0db4c..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 4 Dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_15_H -#define MBFL_MBFILTER_ISO8859_15_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_15; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_15; -extern const struct mbfl_convert_vtbl vtbl_8859_15_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_15; - -int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c deleted file mode 100644 index 80f1461364a3e..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_16.h" -#include "unicode_table_iso8859_16.h" - -static const char *mbfl_encoding_8859_16_aliases[] = {"ISO8859-16", NULL}; - -const mbfl_encoding mbfl_encoding_8859_16 = { - mbfl_no_encoding_8859_16, - "ISO-8859-16", - "ISO-8859-16", - (const char *(*)[])&mbfl_encoding_8859_16_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_16_wchar, - &vtbl_wchar_8859_16 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_16 = { - mbfl_no_encoding_8859_16, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_16_wchar = { - mbfl_no_encoding_8859_16, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_16_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_16 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_16, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_16, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-16 => wchar - */ -int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_16_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_16; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-16 - */ -int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_16_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_16) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h deleted file mode 100644 index a1a53d7909f57..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_16_H -#define MBFL_MBFILTER_ISO8859_16_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_16; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_16; -extern const struct mbfl_convert_vtbl vtbl_8859_16_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_16; - -int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c deleted file mode 100644 index 86044e15d3a02..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_2.h" -#include "unicode_table_iso8859_2.h" - -static const char *mbfl_encoding_8859_2_aliases[] = {"ISO8859-2", "latin2", NULL}; - -const mbfl_encoding mbfl_encoding_8859_2 = { - mbfl_no_encoding_8859_2, - "ISO-8859-2", - "ISO-8859-2", - (const char *(*)[])&mbfl_encoding_8859_2_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_2_wchar, - &vtbl_wchar_8859_2 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_2 = { - mbfl_no_encoding_8859_2, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_2_wchar = { - mbfl_no_encoding_8859_2, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_2_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_2 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_2, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_2, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-2 => wchar - */ -int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_2_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_2; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-2 - */ -int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_2_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_2) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h deleted file mode 100644 index f344168a183db..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_2_H -#define MBFL_MBFILTER_ISO8859_2_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_2; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_2; -extern const struct mbfl_convert_vtbl vtbl_8859_2_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_2; - -int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c deleted file mode 100644 index 64eb9b5cf9283..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_3.h" -#include "unicode_table_iso8859_3.h" - -static const char *mbfl_encoding_8859_3_aliases[] = {"ISO8859-3", "latin3", NULL}; - -const mbfl_encoding mbfl_encoding_8859_3 = { - mbfl_no_encoding_8859_3, - "ISO-8859-3", - "ISO-8859-3", - (const char *(*)[])&mbfl_encoding_8859_3_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_3_wchar, - &vtbl_wchar_8859_3 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_3 = { - mbfl_no_encoding_8859_3, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_3_wchar = { - mbfl_no_encoding_8859_3, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_3_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_3 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_3, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_3, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-3 => wchar - */ -int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_3_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_3; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-3 - */ -int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_3_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h deleted file mode 100644 index 746085373a52c..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_3_H -#define MBFL_MBFILTER_ISO8859_3_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_3; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_3; -extern const struct mbfl_convert_vtbl vtbl_8859_3_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_3; - -int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c deleted file mode 100644 index 12a9f7cb1063a..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_4.h" -#include "unicode_table_iso8859_4.h" - -static const char *mbfl_encoding_8859_4_aliases[] = {"ISO8859-4", "latin4", NULL}; - -const mbfl_encoding mbfl_encoding_8859_4 = { - mbfl_no_encoding_8859_4, - "ISO-8859-4", - "ISO-8859-4", - (const char *(*)[])&mbfl_encoding_8859_4_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_4_wchar, - &vtbl_wchar_8859_4 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_4 = { - mbfl_no_encoding_8859_4, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_4_wchar = { - mbfl_no_encoding_8859_4, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_4_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_4 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_4, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_4, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-4 => wchar - */ -int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_4_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_4; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-4 - */ -int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_4_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_4) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h deleted file mode 100644 index fe4dcdc696387..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_4_H -#define MBFL_MBFILTER_ISO8859_4_H - -extern const mbfl_encoding mbfl_encoding_8859_4; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_4; -extern const struct mbfl_convert_vtbl vtbl_8859_4_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_4; - -int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c deleted file mode 100644 index 70496d07e7a4d..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_5.h" -#include "unicode_table_iso8859_5.h" - -static const char *mbfl_encoding_8859_5_aliases[] = {"ISO8859-5", "cyrillic", NULL}; - -const mbfl_encoding mbfl_encoding_8859_5 = { - mbfl_no_encoding_8859_5, - "ISO-8859-5", - "ISO-8859-5", - (const char *(*)[])&mbfl_encoding_8859_5_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_5_wchar, - &vtbl_wchar_8859_5 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_5 = { - mbfl_no_encoding_8859_5, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_5_wchar = { - mbfl_no_encoding_8859_5, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_5_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_5 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_5, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_5, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-5 => wchar - */ -int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_5_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_5; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-5 - */ -int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_5_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_5) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h deleted file mode 100644 index 8b098441419fb..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_5_H -#define MBFL_MBFILTER_ISO8859_5_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_5; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_5; -extern const struct mbfl_convert_vtbl vtbl_8859_5_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_5; - -int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c deleted file mode 100644 index 59d981e9c2c79..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_6.h" -#include "unicode_table_iso8859_6.h" - -static const char *mbfl_encoding_8859_6_aliases[] = {"ISO8859-6", "arabic", NULL}; - -const mbfl_encoding mbfl_encoding_8859_6 = { - mbfl_no_encoding_8859_6, - "ISO-8859-6", - "ISO-8859-6", - (const char *(*)[])&mbfl_encoding_8859_6_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_6_wchar, - &vtbl_wchar_8859_6 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_6 = { - mbfl_no_encoding_8859_6, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_6_wchar = { - mbfl_no_encoding_8859_6, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_6_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_6 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_6, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_6, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-6 => wchar - */ -int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_6_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_6; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-6 - */ -int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_6_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_6) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h deleted file mode 100644 index c7e16c7e0bc38..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_6_H -#define MBFL_MBFILTER_ISO8859_6_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_6; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_6; -extern const struct mbfl_convert_vtbl vtbl_8859_6_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_6; - -int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c deleted file mode 100644 index 73ead533ea771..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_7.h" -#include "unicode_table_iso8859_7.h" - -static const char *mbfl_encoding_8859_7_aliases[] = {"ISO8859-7", "greek", NULL}; - -const mbfl_encoding mbfl_encoding_8859_7 = { - mbfl_no_encoding_8859_7, - "ISO-8859-7", - "ISO-8859-7", - (const char *(*)[])&mbfl_encoding_8859_7_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_7_wchar, - &vtbl_wchar_8859_7 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_7 = { - mbfl_no_encoding_8859_7, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_7_wchar = { - mbfl_no_encoding_8859_7, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_7_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_7 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_7, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_7, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-7 => wchar - */ -int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_7_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_7; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-7 - */ -int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_7_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_7) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h deleted file mode 100644 index 8421edb929f50..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_7_H -#define MBFL_MBFILTER_ISO8859_7_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_7; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_7; -extern const struct mbfl_convert_vtbl vtbl_8859_7_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_7; - -int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c deleted file mode 100644 index 05ca13f330d57..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_8.h" -#include "unicode_table_iso8859_8.h" - -static const char *mbfl_encoding_8859_8_aliases[] = {"ISO8859-8", "hebrew", NULL}; - -const mbfl_encoding mbfl_encoding_8859_8 = { - mbfl_no_encoding_8859_8, - "ISO-8859-8", - "ISO-8859-8", - (const char *(*)[])&mbfl_encoding_8859_8_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_8_wchar, - &vtbl_wchar_8859_8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_8 = { - mbfl_no_encoding_8859_8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_8_wchar = { - mbfl_no_encoding_8859_8, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_8_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_8 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_8, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_8, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-8 => wchar - */ -int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_8_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_8; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-8 - */ -int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_8_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_8) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h deleted file mode 100644 index ee679814f1aab..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_8_H -#define MBFL_MBFILTER_ISO8859_8_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_8; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_8; -extern const struct mbfl_convert_vtbl vtbl_8859_8_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_8; - -int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c deleted file mode 100644 index 074f90bef2404..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_9.h" -#include "unicode_table_iso8859_9.h" - -static const char *mbfl_encoding_8859_9_aliases[] = {"ISO8859-9", "latin5", NULL}; - -const mbfl_encoding mbfl_encoding_8859_9 = { - mbfl_no_encoding_8859_9, - "ISO-8859-9", - "ISO-8859-9", - (const char *(*)[])&mbfl_encoding_8859_9_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_9_wchar, - &vtbl_wchar_8859_9 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_9 = { - mbfl_no_encoding_8859_9, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_9_wchar = { - mbfl_no_encoding_8859_9, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_9_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_9 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_9, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_9, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-9 => wchar - */ -int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_9_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_9; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-9 - */ -int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_9_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_9) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h deleted file mode 100644 index 5a61237113719..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_9_H -#define MBFL_MBFILTER_ISO8859_9_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_9; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_9; -extern const struct mbfl_convert_vtbl vtbl_8859_9_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_9; - -int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.c b/ext/mbstring/libmbfl/filters/mbfilter_jis.c index b08eec38b0ab7..ba43872d83e5d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_jis.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.c @@ -33,9 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_jis = { mbfl_no_encoding_jis, "JIS", @@ -58,18 +55,6 @@ const mbfl_encoding mbfl_encoding_2022jp = { &vtbl_wchar_2022jp }; -const struct mbfl_identify_vtbl vtbl_identify_jis = { - mbfl_no_encoding_jis, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_jis -}; - -const struct mbfl_identify_vtbl vtbl_identify_2022jp = { - mbfl_no_encoding_2022jp, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jp -}; - const struct mbfl_convert_vtbl vtbl_jis_wchar = { mbfl_no_encoding_jis, mbfl_no_encoding_wchar, @@ -483,177 +468,3 @@ mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0x90: X 0212 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (c == 0x0e) { /* "kana in" */ - filter->status = 0x20; - } else if (c == 0x0f) { /* "kana out" */ - filter->status = 0; - } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0x91: X 0212 second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x44) { /* 'D' */ - filter->status = 0x90; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.h b/ext/mbstring/libmbfl/filters/mbfilter_jis.h index e7a164167e4b2..55787c9acb7ac 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_jis.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.h @@ -34,8 +34,6 @@ extern const mbfl_encoding mbfl_encoding_jis; extern const mbfl_encoding mbfl_encoding_2022jp; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp; -extern const struct mbfl_identify_vtbl vtbl_identify_jis; extern const struct mbfl_convert_vtbl vtbl_jis_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_jis; extern const struct mbfl_convert_vtbl vtbl_2022jp_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c deleted file mode 100644 index 7790be65bb937..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_koi8r.h" -#include "unicode_table_koi8r.h" - -static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL}; - -const mbfl_encoding mbfl_encoding_koi8r = { - mbfl_no_encoding_koi8r, - "KOI8-R", - "KOI8-R", - (const char *(*)[])&mbfl_encoding_koi8r_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_koi8r_wchar, - &vtbl_wchar_koi8r -}; - -const struct mbfl_identify_vtbl vtbl_identify_koi8r = { - mbfl_no_encoding_koi8r, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_koi8r -}; - -const struct mbfl_convert_vtbl vtbl_wchar_koi8r = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_koi8r, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_koi8r, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_koi8r_wchar = { - mbfl_no_encoding_koi8r, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_koi8r_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * koi8r => wchar - */ -int -mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < koi8r_ucs_table_min) { - s = c; - } else if (c >= koi8r_ucs_table_min && c < 0x100) { - s = koi8r_ucs_table[c - koi8r_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_KOI8R; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => koi8r - */ -int -mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = koi8r_ucs_table_len-1; - while (n >= 0) { - if (c == koi8r_ucs_table[n]) { - s = koi8r_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h deleted file mode 100644 index 6073d140ae65b..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_KOI8R_H -#define MBFL_MBFILTER_KOI8R_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_koi8r; -extern const struct mbfl_identify_vtbl vtbl_identify_koi8r; -extern const struct mbfl_convert_vtbl vtbl_wchar_koi8r; -extern const struct mbfl_convert_vtbl vtbl_koi8r_wchar; - -int mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_KOI8R_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c deleted file mode 100644 index a62a1c596b87f..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko - * - * Based on mbfilter_koi8r.c code - * - */ - -#include "mbfilter.h" -#include "mbfilter_koi8u.h" -#include "unicode_table_koi8u.h" - -static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_koi8u_aliases[] = {"KOI8-U", "KOI8U", NULL}; - -const mbfl_encoding mbfl_encoding_koi8u = { - mbfl_no_encoding_koi8u, - "KOI8-U", - "KOI8-U", - (const char *(*)[])&mbfl_encoding_koi8u_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_koi8u_wchar, - &vtbl_wchar_koi8u -}; - -const struct mbfl_identify_vtbl vtbl_identify_koi8u = { - mbfl_no_encoding_koi8u, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_koi8u -}; - -const struct mbfl_convert_vtbl vtbl_wchar_koi8u = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_koi8u, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_koi8u, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_koi8u_wchar = { - mbfl_no_encoding_koi8u, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_koi8u_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * koi8u => wchar - */ -int -mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < koi8u_ucs_table_min) { - s = c; - } else if (c >= koi8u_ucs_table_min && c < 0x100) { - s = koi8u_ucs_table[c - koi8u_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_KOI8U; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => koi8u - */ -int -mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = koi8u_ucs_table_len-1; - while (n >= 0) { - if (c == koi8u_ucs_table[n]) { - s = koi8u_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8U) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h deleted file mode 100644 index 16b95c1fc493b..0000000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko - * - * Based on mbfilter_koi8r.h code - * - */ - -#ifndef MBFL_MBFILTER_KOI8U_H -#define MBFL_MBFILTER_KOI8U_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_koi8u; -extern const struct mbfl_identify_vtbl vtbl_identify_koi8u; -extern const struct mbfl_convert_vtbl vtbl_wchar_koi8u; -extern const struct mbfl_convert_vtbl vtbl_koi8u_wchar; - -int mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_KOI8U_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c index d42cdca883ea0..8f806def2586e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c @@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_qprint = { mbfl_no_encoding_qprint, "Quoted-Printable", "Quoted-Printable", - (const char *(*)[])&mbfl_encoding_qprint_aliases, + mbfl_encoding_qprint_aliases, NULL, MBFL_ENCTYPE_GL_UNSAFE, NULL, @@ -110,8 +110,7 @@ int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter) } if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */ - || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 && - (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) { + || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) && mime_char_needs_qencode[s])) { /* hex-octet */ CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ n = (s >> 4) & 0xf; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c new file mode 100644 index 0000000000000..7e7bdfbfaa514 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c @@ -0,0 +1,581 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ +*/ + +#include "mbfilter_singlebyte.h" + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* Helper for single-byte encodings which use a conversion table */ +static int mbfl_conv_singlebyte_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[]) +{ + if (c < tbl_min) { + CK((*filter->output_function)(c, filter->data)); + } else { + int s = tbl[c - tbl_min]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + CK((*filter->output_function)(s, filter->data)); + } + return c; +} + +static int mbfl_conv_reverselookup_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[]) +{ + if (c < tbl_min) { + CK((*filter->output_function)(c, filter->data)); + } else { + for (int i = 0; i < 256 - tbl_min; i++) { + if (c == tbl[i]) { + CK((*filter->output_function)(i + tbl_min, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +/* Initialize data structures for a single-byte encoding */ +#define DEF_SB(id, name, mime_name, aliases) \ + static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter); \ + static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter); \ + static const struct mbfl_convert_vtbl vtbl_##id##_wchar = { \ + mbfl_no_encoding_##id, \ + mbfl_no_encoding_wchar, \ + mbfl_filt_conv_common_ctor, \ + NULL, \ + mbfl_filt_conv_##id##_wchar, \ + mbfl_filt_conv_common_flush, \ + NULL \ + }; \ + static const struct mbfl_convert_vtbl vtbl_wchar_##id = { \ + mbfl_no_encoding_wchar, \ + mbfl_no_encoding_##id, \ + mbfl_filt_conv_common_ctor, \ + NULL, \ + mbfl_filt_conv_wchar_##id, \ + mbfl_filt_conv_common_flush, \ + NULL \ + }; \ + const mbfl_encoding mbfl_encoding_##id = { \ + mbfl_no_encoding_##id, \ + name, \ + mime_name, \ + aliases, \ + NULL, \ + MBFL_ENCTYPE_SBCS, \ + &vtbl_##id##_wchar, \ + &vtbl_wchar_##id \ + } + +/* For single-byte encodings which use a conversion table */ +#define DEF_SB_TBL(id, name, mime_name, aliases, tbl_min, tbl) \ + static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter) { \ + return mbfl_conv_singlebyte_table(c, filter, tbl_min, tbl); \ + } \ + static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter) { \ + return mbfl_conv_reverselookup_table(c, filter, tbl_min, tbl); \ + } \ + DEF_SB(id, name, mime_name, aliases) + +/* The grand-daddy of them all: ASCII */ +static const char *ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL}; +DEF_SB(ascii, "ASCII", "US-ASCII", ascii_aliases); + +static int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter) +{ + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter) +{ + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +/* ISO-8859-X */ + +static const char *iso8859_1_aliases[] = {"ISO8859-1", "latin1", NULL}; +DEF_SB(8859_1, "ISO-8859-1", "ISO-8859-1", iso8859_1_aliases); + +static int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + +static int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter) +{ + if (c < 0x100) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static const char *iso8859_2_aliases[] = {"ISO8859-2", "latin2", NULL}; +static const unsigned short iso8859_2_ucs_table[] = { + 0X00A0, 0X0104, 0X02D8, 0X0141, 0X00A4, 0X013D, 0X015A, 0X00A7, + 0X00A8, 0X0160, 0X015E, 0X0164, 0X0179, 0X00AD, 0X017D, 0X017B, + 0X00B0, 0X0105, 0X02DB, 0X0142, 0X00B4, 0X013E, 0X015B, 0X02C7, + 0X00B8, 0X0161, 0X015F, 0X0165, 0X017A, 0X02DD, 0X017E, 0X017C, + 0X0154, 0X00C1, 0X00C2, 0X0102, 0X00C4, 0X0139, 0X0106, 0X00C7, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X011A, 0X00CD, 0X00CE, 0X010E, + 0X0110, 0X0143, 0X0147, 0X00D3, 0X00D4, 0X0150, 0X00D6, 0X00D7, + 0X0158, 0X016E, 0X00DA, 0X0170, 0X00DC, 0X00DD, 0X0162, 0X00DF, + 0X0155, 0X00E1, 0X00E2, 0X0103, 0X00E4, 0X013A, 0X0107, 0X00E7, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X011B, 0X00ED, 0X00EE, 0X010F, + 0X0111, 0X0144, 0X0148, 0X00F3, 0X00F4, 0X0151, 0X00F6, 0X00F7, + 0X0159, 0X016F, 0X00FA, 0X0171, 0X00FC, 0X00FD, 0X0163, 0X02D9 +}; +DEF_SB_TBL(8859_2, "ISO-8859-2", "ISO-8859-2", iso8859_2_aliases, 0xA0, iso8859_2_ucs_table); + +static const char *iso8859_3_aliases[] = {"ISO8859-3", "latin3", NULL}; +static const unsigned short iso8859_3_ucs_table[] = { + 0X00A0, 0X0126, 0X02D8, 0X00A3, 0X00A4, 0X0000, 0X0124, 0X00A7, + 0X00A8, 0X0130, 0X015E, 0X011E, 0X0134, 0X00AD, 0X0000, 0X017B, + 0X00B0, 0X0127, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X0125, 0X00B7, + 0X00B8, 0X0131, 0X015F, 0X011F, 0X0135, 0X00BD, 0X0000, 0X017C, + 0X00C0, 0X00C1, 0X00C2, 0X0000, 0X00C4, 0X010A, 0X0108, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0000, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X0120, 0X00D6, 0X00D7, + 0X011C, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X016C, 0X015C, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X0000, 0X00E4, 0X010B, 0X0109, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0000, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X0121, 0X00F6, 0X00F7, + 0X011D, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X016D, 0X015D, 0X02D9 +}; +DEF_SB_TBL(8859_3, "ISO-8859-3", "ISO-8859-3", iso8859_3_aliases, 0xA0, iso8859_3_ucs_table); + +static const char *iso8859_4_aliases[] = {"ISO8859-4", "latin4", NULL}; +static const unsigned short iso8859_4_ucs_table[] = { + 0X00A0, 0X0104, 0X0138, 0X0156, 0X00A4, 0X0128, 0X013B, 0X00A7, + 0X00A8, 0X0160, 0X0112, 0X0122, 0X0166, 0X00AD, 0X017D, 0X00AF, + 0X00B0, 0X0105, 0X02DB, 0X0157, 0X00B4, 0X0129, 0X013C, 0X02C7, + 0X00B8, 0X0161, 0X0113, 0X0123, 0X0167, 0X014A, 0X017E, 0X014B, + 0X0100, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X012E, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X0116, 0X00CD, 0X00CE, 0X012A, + 0X0110, 0X0145, 0X014C, 0X0136, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X0172, 0X00DA, 0X00DB, 0X00DC, 0X0168, 0X016A, 0X00DF, + 0X0101, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X012F, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X0117, 0X00ED, 0X00EE, 0X012B, + 0X0111, 0X0146, 0X014D, 0X0137, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X0173, 0X00FA, 0X00FB, 0X00FC, 0X0169, 0X016B, 0X02D9 +}; +DEF_SB_TBL(8859_4, "ISO-8859-4", "ISO-8859-4", iso8859_4_aliases, 0xA0, iso8859_4_ucs_table); + +static const char *iso8859_5_aliases[] = {"ISO8859-5", "cyrillic", NULL}; +static const unsigned short iso8859_5_ucs_table[] = { + 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f +}; +DEF_SB_TBL(8859_5, "ISO-8859-5", "ISO-8859-5", iso8859_5_aliases, 0xA0, iso8859_5_ucs_table); + +static const char *iso8859_6_aliases[] = {"ISO8859-6", "arabic", NULL}; +static const unsigned short iso8859_6_ucs_table[] = { + 0X00A0, 0X0000, 0X0000, 0X0000, 0X00A4, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X060C, 0X00AD, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X061B, 0X0000, 0X0000, 0X0000, 0X061F, + 0X0000, 0X0621, 0X0622, 0X0623, 0X0624, 0X0625, 0X0626, 0X0627, + 0X0628, 0X0629, 0X062A, 0X062B, 0X062C, 0X062D, 0X062E, 0X062F, + 0X0630, 0X0631, 0X0632, 0X0633, 0X0634, 0X0635, 0X0636, 0X0637, + 0X0638, 0X0639, 0X063A, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0640, 0X0641, 0X0642, 0X0643, 0X0644, 0X0645, 0X0646, 0X0647, + 0X0648, 0X0649, 0X064A, 0X064B, 0X064C, 0X064D, 0X064E, 0X064F, + 0X0650, 0X0651, 0X0652, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000 +}; +DEF_SB_TBL(8859_6, "ISO-8859-6", "ISO-8859-6", iso8859_6_aliases, 0xA0, iso8859_6_ucs_table); + +static const char *iso8859_7_aliases[] = {"ISO8859-7", "greek", NULL}; +static const unsigned short iso8859_7_ucs_table[] = { + 0X00A0, 0X2018, 0X2019, 0X00A3, 0X20AC, 0X20AF, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X037A, 0X00AB, 0X00AC, 0X00AD, 0X0000, 0X2015, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X0384, 0X0385, 0X0386, 0X00B7, + 0X0388, 0X0389, 0X038A, 0X00BB, 0X038C, 0X00BD, 0X038E, 0X038F, + 0X0390, 0X0391, 0X0392, 0X0393, 0X0394, 0X0395, 0X0396, 0X0397, + 0X0398, 0X0399, 0X039A, 0X039B, 0X039C, 0X039D, 0X039E, 0X039F, + 0X03A0, 0X03A1, 0X0000, 0X03A3, 0X03A4, 0X03A5, 0X03A6, 0X03A7, + 0X03A8, 0X03A9, 0X03AA, 0X03AB, 0X03AC, 0X03AD, 0X03AE, 0X03AF, + 0X03B0, 0X03B1, 0X03B2, 0X03B3, 0X03B4, 0X03B5, 0X03B6, 0X03B7, + 0X03B8, 0X03B9, 0X03BA, 0X03BB, 0X03BC, 0X03BD, 0X03BE, 0X03BF, + 0X03C0, 0X03C1, 0X03C2, 0X03C3, 0X03C4, 0X03C5, 0X03C6, 0X03C7, + 0X03C8, 0X03C9, 0X03CA, 0X03CB, 0X03CC, 0X03CD, 0X03CE, 0X0000 +}; +DEF_SB_TBL(8859_7, "ISO-8859-7", "ISO-8859-7", iso8859_7_aliases, 0xA0, iso8859_7_ucs_table); + +static const char *iso8859_8_aliases[] = {"ISO8859-8", "hebrew", NULL}; +static const unsigned short iso8859_8_ucs_table[] = { + 0X00A0, 0X0000, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00D7, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00F7, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X2017, + 0X05D0, 0X05D1, 0X05D2, 0X05D3, 0X05D4, 0X05D5, 0X05D6, 0X05D7, + 0X05D8, 0X05D9, 0X05DA, 0X05DB, 0X05DC, 0X05DD, 0X05DE, 0X05DF, + 0X05E0, 0X05E1, 0X05E2, 0X05E3, 0X05E4, 0X05E5, 0X05E6, 0X05E7, + 0X05E8, 0X05E9, 0X05EA, 0X0000, 0X0000, 0X200E, 0X200F, 0X0000 +}; +DEF_SB_TBL(8859_8, "ISO-8859-8", "ISO-8859-8", iso8859_8_aliases, 0xA0, iso8859_8_ucs_table); + +static const char *iso8859_9_aliases[] = {"ISO8859-9", "latin5", NULL}; +static const unsigned short iso8859_9_ucs_table[] = { + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00BA, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X011E, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0130, 0X015E, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X011F, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0131, 0X015F, 0X00FF +}; +DEF_SB_TBL(8859_9, "ISO-8859-9", "ISO-8859-9", iso8859_9_aliases, 0xA0, iso8859_9_ucs_table); + +static const char *iso8859_10_aliases[] = {"ISO8859-10", "latin6", NULL}; +static const unsigned short iso8859_10_ucs_table[] = { + 0X00A0, 0X0104, 0X0112, 0X0122, 0X012A, 0X0128, 0X0136, 0X00A7, + 0X013B, 0X0110, 0X0160, 0X0166, 0X017D, 0X00AD, 0X016A, 0X014A, + 0X00B0, 0X0105, 0X0113, 0X0123, 0X012B, 0X0129, 0X0137, 0X00B7, + 0X013C, 0X0111, 0X0161, 0X0167, 0X017E, 0X2015, 0X016B, 0X014B, + 0X0100, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X012E, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X0116, 0X00CD, 0X00CE, 0X00CF, + 0X00D0, 0X0145, 0X014C, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X0168, + 0X00D8, 0X0172, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X00DE, 0X00DF, + 0X0101, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X012F, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X0117, 0X00ED, 0X00EE, 0X00EF, + 0X00F0, 0X0146, 0X014D, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X0169, + 0X00F8, 0X0173, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X00FE, 0X0138 +}; +DEF_SB_TBL(8859_10, "ISO-8859-10", "ISO-8859-10", iso8859_10_aliases, 0xA0, iso8859_10_ucs_table); + +static const char *iso8859_13_aliases[] = {"ISO8859-13", NULL}; +static const unsigned short iso8859_13_ucs_table[] = { + 0X00A0, 0X201D, 0X00A2, 0X00A3, 0X00A4, 0X201E, 0X00A6, 0X00A7, + 0X00D8, 0X00A9, 0X0156, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00C6, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X201C, 0X00B5, 0X00B6, 0X00B7, + 0X00F8, 0X00B9, 0X0157, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00E6, + 0X0104, 0X012E, 0X0100, 0X0106, 0X00C4, 0X00C5, 0X0118, 0X0112, + 0X010C, 0X00C9, 0X0179, 0X0116, 0X0122, 0X0136, 0X012A, 0X013B, + 0X0160, 0X0143, 0X0145, 0X00D3, 0X014C, 0X00D5, 0X00D6, 0X00D7, + 0X0172, 0X0141, 0X015A, 0X016A, 0X00DC, 0X017B, 0X017D, 0X00DF, + 0X0105, 0X012F, 0X0101, 0X0107, 0X00E4, 0X00E5, 0X0119, 0X0113, + 0X010D, 0X00E9, 0X017A, 0X0117, 0X0123, 0X0137, 0X012B, 0X013C, + 0X0161, 0X0144, 0X0146, 0X00F3, 0X014D, 0X00F5, 0X00F6, 0X00F7, + 0X0173, 0X0142, 0X015B, 0X016B, 0X00FC, 0X017C, 0X017E, 0X2019 +}; +DEF_SB_TBL(8859_13, "ISO-8859-13", "ISO-8859-13", iso8859_13_aliases, 0xA0, iso8859_13_ucs_table); + +static const char *iso8859_14_aliases[] = {"ISO8859-14", "latin8", NULL}; +static const unsigned short iso8859_14_ucs_table[] = { + 0X00A0, 0X1E02, 0X1E03, 0X00A3, 0X010A, 0X010B, 0X1E0A, 0X00A7, + 0X1E80, 0X00A9, 0X1E82, 0X1E0B, 0X1EF2, 0X00AD, 0X00AE, 0X0178, + 0X1E1E, 0X1E1F, 0X0120, 0X0121, 0X1E40, 0X1E41, 0X00B6, 0X1E56, + 0X1E81, 0X1E57, 0X1E83, 0X1E60, 0X1EF3, 0X1E84, 0X1E85, 0X1E61, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0174, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X1E6A, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X0176, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0175, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X1E6B, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X0177, 0X00FF +}; +DEF_SB_TBL(8859_14, "ISO-8859-14", "ISO-8859-14", iso8859_14_aliases, 0xA0, iso8859_14_ucs_table); + +static const char *iso8859_15_aliases[] = {"ISO8859-15", NULL}; +static const unsigned short iso8859_15_ucs_table[] = { + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X20AC, 0X00A5, 0X0160, 0X00A7, + 0X0161, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X017D, 0X00B5, 0X00B6, 0X00B7, + 0X017E, 0X00B9, 0X00BA, 0X00BB, 0X0152, 0X0153, 0X0178, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X00D0, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X00DE, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X00F0, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X00FE, 0X00FF +}; +DEF_SB_TBL(8859_15, "ISO-8859-15", "ISO-8859-15", iso8859_15_aliases, 0xA0, iso8859_15_ucs_table); + +static const char *iso8859_16_aliases[] = {"ISO8859-16", NULL}; +static const unsigned short iso8859_16_ucs_table[] = { + 0X00A0, 0X0104, 0X0105, 0X0141, 0X20AC, 0X201E, 0X0160, 0X00A7, + 0X0161, 0X00A9, 0X0218, 0X00AB, 0X0179, 0X00AD, 0X017A, 0X017B, + 0X00B0, 0X00B1, 0X010C, 0X0142, 0X017D, 0X201D, 0X00B6, 0X00B7, + 0X017E, 0X010D, 0X0219, 0X00BB, 0X0152, 0X0153, 0X0178, 0X017C, + 0X00C0, 0X00C1, 0X00C2, 0X0102, 0X00C4, 0X0106, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0110, 0X0143, 0X00D2, 0X00D3, 0X00D4, 0X0150, 0X00D6, 0X015A, + 0X0170, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0118, 0X021A, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X0103, 0X00E4, 0X0107, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0111, 0X0144, 0X00F2, 0X00F3, 0X00F4, 0X0151, 0X00F6, 0X015B, + 0X0171, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0119, 0X021B, 0X00FF +}; +DEF_SB_TBL(8859_16, "ISO-8859-16", "ISO-8859-16", iso8859_16_aliases, 0xA0, iso8859_16_ucs_table); + +static const char *cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL}; +static const unsigned short cp1251_ucs_table[] = { + 0X0402, 0X0403, 0X201A, 0X0453, 0X201E, 0X2026, 0X2020, 0X2021, + 0X20AC, 0X2030, 0X0409, 0X2039, 0X040A, 0X040C, 0X040B, 0X040F, + 0X0452, 0X2018, 0X2019, 0X201C, 0X201D, 0X2022, 0X2013, 0X2014, + 0X0000, 0X2122, 0X0459, 0X203A, 0X045A, 0X045C, 0X045B, 0X045F, + 0X00A0, 0X040E, 0X045E, 0X0408, 0X00A4, 0X0490, 0X00A6, 0X00A7, + 0X0401, 0X00A9, 0X0404, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X0407, + 0X00B0, 0X00B1, 0X0406, 0X0456, 0X0491, 0X00B5, 0X00B6, 0X00B7, + 0X0451, 0X2116, 0X0454, 0X00BB, 0X0458, 0X0405, 0X0455, 0X0457, + 0X0410, 0X0411, 0X0412, 0X0413, 0X0414, 0X0415, 0X0416, 0X0417, + 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, 0X041F, + 0X0420, 0X0421, 0X0422, 0X0423, 0X0424, 0X0425, 0X0426, 0X0427, + 0X0428, 0X0429, 0X042A, 0X042B, 0X042C, 0X042D, 0X042E, 0X042F, + 0X0430, 0X0431, 0X0432, 0X0433, 0X0434, 0X0435, 0X0436, 0X0437, + 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, 0X043F, + 0X0440, 0X0441, 0X0442, 0X0443, 0X0444, 0X0445, 0X0446, 0X0447, + 0X0448, 0X0449, 0X044A, 0X044B, 0X044C, 0X044D, 0X044E, 0X044F +}; +DEF_SB_TBL(cp1251, "Windows-1251", "Windows-1251", cp1251_aliases, 0x80, cp1251_ucs_table); + +static const char *cp1252_aliases[] = {"cp1252", NULL}; +static const unsigned short cp1252_ucs_table[] = { + 0X20AC,0X0000,0X201A,0X0192,0X201E,0X2026,0X2020,0X2021, + 0X02C6,0X2030,0X0160,0X2039,0X0152,0X0000,0X017D,0X0000, + 0X0000,0X2018,0X2019,0X201C,0X201D,0X2022,0X2013,0X2014, + 0X02DC,0X2122,0X0161,0X203A,0X0153,0X0000,0X017E,0X0178 +}; +DEF_SB(cp1252, "Windows-1252", "Windows-1252", cp1252_aliases); + +static int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter) +{ + if (c >= 0x100) { + for (int n = 0; n < 32; n++) { + if (c == cp1252_ucs_table[n]) { + CK((*filter->output_function)(0x80 + n, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } else if (c <= 0x7F || c >= 0xA0) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0x80 && c < 0xA0) { + s = cp1252_ucs_table[c - 0x80]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + } else { + s = c; + } + + CK((*filter->output_function)(s, filter->data)); + return c; +} + +static const char *cp1254_aliases[] = {"CP1254", "CP-1254", "WINDOWS-1254", NULL}; +static const unsigned short cp1254_ucs_table[] = { + 0X20AC, 0X0000, 0X201A, 0X0192, 0X201E, 0X2026, 0X2020, 0X2021, + 0X02C6, 0X2030, 0X0160, 0X2039, 0X0152, 0X0000, 0X0000, 0X0000, + 0X0000, 0X2018, 0X2019, 0X201C, 0X201D, 0X2022, 0X2013, 0X2014, + 0X02DC, 0X2122, 0X0161, 0X203A, 0X0153, 0X0000, 0X0000, 0X0178, + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00BA, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X011E, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0130, 0X015E, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X011F, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0131, 0X015F, 0X00FF +}; +DEF_SB_TBL(cp1254, "Windows-1254", "Windows-1254", cp1254_aliases, 0x80, cp1254_ucs_table); + +static const char *cp866_aliases[] = {"CP-866", "IBM866", "IBM-866", NULL}; +static const unsigned short cp866_ucs_table[] = { + 0X0410, 0X0411, 0X0412, 0X0413, 0X0414, 0X0415, 0X0416, 0X0417, + 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, 0X041F, + 0X0420, 0X0421, 0X0422, 0X0423, 0X0424, 0X0425, 0X0426, 0X0427, + 0X0428, 0X0429, 0X042A, 0X042B, 0X042C, 0X042D, 0X042E, 0X042F, + 0X0430, 0X0431, 0X0432, 0X0433, 0X0434, 0X0435, 0X0436, 0X0437, + 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, 0X043F, + 0X2591, 0X2592, 0X2593, 0X2502, 0X2524, 0X2561, 0X2562, 0X2556, + 0X2555, 0X2563, 0X2551, 0X2557, 0X255D, 0X255C, 0X255B, 0X2510, + 0X2514, 0X2534, 0X252C, 0X251C, 0X2500, 0X253C, 0X255E, 0X255F, + 0X255A, 0X2554, 0X2569, 0X2566, 0X2560, 0X2550, 0X256C, 0X2567, + 0X2568, 0X2564, 0X2565, 0X2559, 0X2558, 0X2552, 0X2553, 0X256B, + 0X256A, 0X2518, 0X250C, 0X2588, 0X2584, 0X258C, 0X2590, 0X2580, + 0X0440, 0X0441, 0X0442, 0X0443, 0X0444, 0X0445, 0X0446, 0X0447, + 0X0448, 0X0449, 0X044A, 0X044B, 0X044C, 0X044D, 0X044E, 0X044F, + 0X0401, 0X0451, 0X0404, 0X0454, 0X0407, 0X0457, 0X040E, 0X045E, + 0X00B0, 0X2219, 0X00B7, 0X221A, 0X2116, 0X00A4, 0X25A0, 0X00A0 +}; +DEF_SB_TBL(cp866, "CP866", "CP866", cp866_aliases, 0x80, cp866_ucs_table); + +static const char *cp850_aliases[] = {"CP-850", "IBM850", "IBM-850", NULL}; +static const unsigned short cp850_ucs_table[] = { + 0X00C7, 0X00FC, 0X00E9, 0X00E2, 0X00E4, 0X00E0, 0X00E5, 0X00E7, + 0X00EA, 0X00EB, 0X00E8, 0X00EF, 0X00EE, 0X00EC, 0X00C4, 0X00C5, + 0X00C9, 0X00E6, 0X00C6, 0X00F4, 0X00F6, 0X00F2, 0X00FB, 0X00F9, + 0X00FF, 0X00D6, 0X00DC, 0X00F8, 0X00A3, 0X00D8, 0X00D7, 0X0192, + 0X00E1, 0X00ED, 0X00F3, 0X00FA, 0X00F1, 0X00D1, 0X00AA, 0X00BA, + 0X00BF, 0X00AE, 0X00AC, 0X00BD, 0X00BC, 0X00A1, 0X00AB, 0X00BB, + 0X2591, 0X2592, 0X2593, 0X2502, 0X2524, 0X00C1, 0X00C2, 0X00C0, + 0X00A9, 0X2563, 0X2551, 0X2557, 0X255D, 0X00A2, 0X00A5, 0X2510, + 0X2514, 0X2534, 0X252C, 0X251C, 0X2500, 0X253C, 0X00E3, 0X00C3, + 0X255A, 0X2554, 0X2569, 0X2566, 0X2560, 0X2550, 0X256C, 0X00A4, + 0X00F0, 0X00D0, 0X00CA, 0X00CB, 0X00C8, 0X0131, 0X00CD, 0X00CE, + 0X00CF, 0X2518, 0X250C, 0X2588, 0X2584, 0X00A6, 0X00CC, 0X2580, + 0X00D3, 0X00DF, 0X00D4, 0X00D2, 0X00F5, 0X00D5, 0X00B5, 0X00FE, + 0X00DE, 0X00DA, 0X00DB, 0X00D9, 0X00FD, 0X00DD, 0X00AF, 0X00B4, + 0X00AD, 0X00B1, 0X2017, 0X00BE, 0X00B6, 0X00A7, 0X00F7, 0X00B8, + 0X00B0, 0X00A8, 0X00B7, 0X00B9, 0X00B3, 0X00B2, 0X25A0, 0X00A0 +}; +DEF_SB_TBL(cp850, "CP850", "CP850", cp850_aliases, 0x80, cp850_ucs_table); + +static const char *koi8r_aliases[] = {"KOI8R", NULL}; +static const unsigned short koi8r_ucs_table[] = { + 0X2500, 0X2502, 0X250C, 0X2510, 0X2514, 0X2518, 0X251C, 0X2524, + 0X252C, 0X2534, 0X253C, 0X2580, 0X2584, 0X2588, 0X258C, 0X2590, + 0X2591, 0X2592, 0X2593, 0X2320, 0X25A0, 0X2219, 0X221A, 0X2248, + 0X2264, 0X2265, 0X00A0, 0X2321, 0X00B0, 0X00B2, 0X00B7, 0X00F7, + 0X2550, 0X2551, 0X2552, 0X0451, 0X2553, 0X2554, 0X2555, 0X2556, + 0X2557, 0X2558, 0X2559, 0X255A, 0X255B, 0X255C, 0X255D, 0X255E, + 0X255F, 0X2560, 0X2561, 0X0401, 0X2562, 0X2563, 0X2564, 0X2565, + 0X2566, 0X2567, 0X2568, 0X2569, 0X256A, 0X256B, 0X256C, 0X00A9, + 0X044E, 0X0430, 0X0431, 0X0446, 0X0434, 0X0435, 0X0444, 0X0433, + 0X0445, 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, + 0X043F, 0X044F, 0X0440, 0X0441, 0X0442, 0X0443, 0X0436, 0X0432, + 0X044C, 0X044B, 0X0437, 0X0448, 0X044D, 0X0449, 0X0447, 0X044A, + 0X042E, 0X0410, 0X0411, 0X0426, 0X0414, 0X0415, 0X0424, 0X0413, + 0X0425, 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, + 0X041F, 0X042F, 0X0420, 0X0421, 0X0422, 0X0423, 0X0416, 0X0412, + 0X042C, 0X042B, 0X0417, 0X0428, 0X042D, 0X0429, 0X0427, 0X042A +}; +DEF_SB_TBL(koi8r, "KOI8-R", "KOI8-R", koi8r_aliases, 0x80, koi8r_ucs_table); + +static const char *koi8u_aliases[] = {"KOI8U", NULL}; +static const unsigned short koi8u_ucs_table[] = { + 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, + 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9, + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A +}; +DEF_SB_TBL(koi8u, "KOI8-U", "KOI8-U", koi8u_aliases, 0x80, koi8u_ucs_table); + +static const char *armscii8_aliases[] = {"ArmSCII8", "ARMSCII-8", "ARMSCII8", NULL}; +static const unsigned short armscii8_ucs_table[] = { + 0X00A0, 0X0000, 0X0587, 0X0589, 0X0029, 0X0028, 0X00BB, 0X00AB, + 0X2014, 0X002E, 0X055D, 0X002C, 0X002D, 0X058A, 0X2026, 0X055C, + 0X055B, 0X055E, 0X0531, 0X0561, 0X0532, 0X0562, 0X0533, 0X0563, + 0X0534, 0X0564, 0X0535, 0X0565, 0X0536, 0X0566, 0X0537, 0X0567, + 0X0538, 0X0568, 0X0539, 0X0569, 0X053A, 0X056A, 0X053B, 0X056B, + 0X053C, 0X056C, 0X053D, 0X056D, 0X053E, 0X056E, 0X053F, 0X056F, + 0X0540, 0X0570, 0X0541, 0X0571, 0X0542, 0X0572, 0X0543, 0X0573, + 0X0544, 0X0574, 0X0545, 0X0575, 0X0546, 0X0576, 0X0547, 0X0577, + 0X0548, 0X0578, 0X0549, 0X0579, 0X054A, 0X057A, 0X054B, 0X057B, + 0X054C, 0X057C, 0X054D, 0X057D, 0X054E, 0X057E, 0X054F, 0X057F, + 0X0550, 0X0580, 0X0551, 0X0581, 0X0552, 0X0582, 0X0553, 0X0583, + 0X0554, 0X0584, 0X0555, 0X0585, 0X0556, 0X0586, 0X055A, 0X0000 +}; +static const unsigned char ucs_armscii8_table[] = { + 0XA5, 0XA4, 0X2A, 0X2B, 0XAB, 0XAC, 0XA9, 0X2F +}; +DEF_SB(armscii8, "ArmSCII-8", "ArmSCII-8", armscii8_aliases); + +int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c < 0xA0) { + s = c; + } else { + s = armscii8_ucs_table[c - 0xA0]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + } + + CK((*filter->output_function)(s, filter->data)); + return c; +} + +int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter) +{ + if (c >= 0x28 && c <= 0x2F) { + CK((*filter->output_function)(ucs_armscii8_table[c - 0x28], filter->data)); + } else if (c < 0xA0) { + CK((*filter->output_function)(c, filter->data)); + } else { + for (int n = 0; n < 0x60; n++) { + if (c == armscii8_ucs_table[n]) { + CK((*filter->output_function)(0xA0 + n, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h new file mode 100644 index 0000000000000..ca7c6f806ce57 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h @@ -0,0 +1,44 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ +*/ + +#ifndef MBFL_SINGLEBYTE_H +#define MBFL_SINGLEBYTE_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_ascii; +extern const mbfl_encoding mbfl_encoding_8859_1; +extern const mbfl_encoding mbfl_encoding_8859_2; +extern const mbfl_encoding mbfl_encoding_8859_3; +extern const mbfl_encoding mbfl_encoding_8859_4; +extern const mbfl_encoding mbfl_encoding_8859_5; +extern const mbfl_encoding mbfl_encoding_8859_6; +extern const mbfl_encoding mbfl_encoding_8859_7; +extern const mbfl_encoding mbfl_encoding_8859_8; +extern const mbfl_encoding mbfl_encoding_8859_9; +extern const mbfl_encoding mbfl_encoding_8859_10; +extern const mbfl_encoding mbfl_encoding_8859_13; +extern const mbfl_encoding mbfl_encoding_8859_14; +extern const mbfl_encoding mbfl_encoding_8859_15; +extern const mbfl_encoding mbfl_encoding_8859_16; +extern const mbfl_encoding mbfl_encoding_cp1251; +extern const mbfl_encoding mbfl_encoding_cp1252; +extern const mbfl_encoding mbfl_encoding_cp1254; +extern const mbfl_encoding mbfl_encoding_cp866; +extern const mbfl_encoding mbfl_encoding_cp850; +extern const mbfl_encoding mbfl_encoding_koi8r; +extern const mbfl_encoding mbfl_encoding_koi8u; +extern const mbfl_encoding mbfl_encoding_armscii8; + +#endif /* MBFL_SINGLEBYTE_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c index dc5c2e4882739..39e7879c1a065 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c @@ -36,7 +36,7 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); +static int mbfl_filt_conv_sjis_wchar_flush(mbfl_convert_filter *filter); const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -63,27 +63,21 @@ const mbfl_encoding mbfl_encoding_sjis = { mbfl_no_encoding_sjis, "SJIS", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_aliases, + mbfl_encoding_sjis_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_wchar, &vtbl_wchar_sjis }; -const struct mbfl_identify_vtbl vtbl_identify_sjis = { - mbfl_no_encoding_sjis, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_wchar = { mbfl_no_encoding_sjis, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_sjis_wchar, - mbfl_filt_conv_common_flush, - NULL, + mbfl_filt_conv_sjis_wchar_flush, + NULL }; const struct mbfl_convert_vtbl vtbl_wchar_sjis = { @@ -93,7 +87,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis = { NULL, mbfl_filt_conv_wchar_sjis, mbfl_filt_conv_common_flush, - NULL, + NULL }; #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) @@ -141,35 +135,32 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis = { } \ } while (0) - -/* - * SJIS => wchar - */ -int -mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) +int mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) { - int c1, s1, s2, w; + int s1, s2, w; switch (filter->status) { case 0: - if (c >= 0 && c < 0x80) { /* latin */ + if (c == 0x5C) { + CK((*filter->output_function)(0xA5, filter->data)); + } else if (c == 0x7E) { + CK((*filter->output_function)(0x203E, filter->data)); + } else if (c >= 0 && c < 0x80) { /* ASCII */ CK((*filter->output_function)(c, filter->data)); - } else if (c > 0xa0 && c < 0xe0) { /* kana */ - CK((*filter->output_function)(0xfec0 + c, filter->data)); - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + } else if (c > 0xA0 && c < 0xE0) { /* Kana */ + CK((*filter->output_function)(0xFEC0 + c, filter->data)); + } else if (c > 0x80 && c < 0xF0 && c != 0xA0) { /* Kanji, first byte */ filter->status = 1; filter->cache = c; } else { - w = c & MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(w, filter->data)); + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); } break; - case 1: /* kanji second char */ + case 1: /* Kanji, second byte */ filter->status = 0; - c1 = filter->cache; - if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + int c1 = filter->cache; + if (c >= 0x40 && c <= 0xFC && c != 0x7F) { SJIS_DECODE(c1, c, s1, s2); w = (s1 - 0x21)*94 + s2 - 0x21; if (w >= 0 && w < jisx0208_ucs_table_size) { @@ -178,45 +169,45 @@ mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) w = 0; } if (w <= 0) { - if (s1 < 0x7f && s2 < 0x7f) { - w = (s1 << 8) | s2; - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0208; + if (s1 < 0x7F && s2 < 0x7F) { + w = (s1 << 8) | s2 | MBFL_WCSPLANE_JIS0208; } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; } } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } - break; - - default: - filter->status = 0; - break; } return c; } -/* - * wchar => SJIS - */ -int -mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) +static int mbfl_filt_conv_sjis_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + mbfl_filt_conv_illegal_output(filter->cache, filter); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + +int mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) { int c1, c2, s1, s2; s1 = 0; - if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + if (c == 0x5C) { + /* Unicode 0x5C is a backslash; but Shift-JIS uses 0x5C for the + * Yen sign. JIS X 0208 kuten 0x2140 is a backslash. */ + s1 = 0x2140; + } else if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; @@ -226,42 +217,39 @@ mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; } if (s1 <= 0) { - c1 = c & ~MBFL_WCSPLANE_MASK; - if (c1 == MBFL_WCSPLANE_JIS0208) { - s1 = c & MBFL_WCSPLANE_MASK; - } else if (c == 0xa5) { /* YEN SIGN */ - s1 = 0x216f; /* FULLWIDTH YEN SIGN */ - } else if (c == 0x203e) { /* OVER LINE */ - s1 = 0x2131; /* FULLWIDTH MACRON */ - } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + if (c == 0xA5) { /* YEN SIGN */ + s1 = 0x5C; + } else if (c == 0x203E) { /* OVER LINE */ + s1 = 0x7E; + } else if (c == 0xFF3C) { /* FULLWIDTH REVERSE SOLIDUS */ s1 = 0x2140; - } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + } else if (c == 0xFF5E) { /* FULLWIDTH TILDE */ s1 = 0x2141; - } else if (c == 0x2225) { /* PARALLEL TO */ + } else if (c == 0x2225) { /* PARALLEL TO */ s1 = 0x2142; - } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ - s1 = 0x215d; - } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + } else if (c == 0xFF0D) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215D; + } else if (c == 0xFFE0) { /* FULLWIDTH CENT SIGN */ s1 = 0x2171; - } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + } else if (c == 0xFFE1) { /* FULLWIDTH POUND SIGN */ s1 = 0x2172; - } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ - s1 = 0x224c; - } - if (c == 0) { + } else if (c == 0xFFE2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224C; + } else if (c == 0) { s1 = 0; - } else if (s1 <= 0) { + } else { s1 = -1; } - } else if (s1 >= 0x8080) { + } else if (s1 >= 0x8080) { /* JIS X 0212; not supported */ s1 = -1; } + if (s1 >= 0) { - if (s1 < 0x100) { /* latin or kana */ + if (s1 < 0x100) { /* Latin/Kana */ CK((*filter->output_function)(s1, filter->data)); - } else { /* kanji */ - c1 = (s1 >> 8) & 0xff; - c2 = s1 & 0xff; + } else { /* Kanji */ + c1 = (s1 >> 8) & 0xFF; + c2 = s1 & 0xFF; SJIS_ENCODE(c1, c2, s1, s2); CK((*filter->output_function)(s1, filter->data)); CK((*filter->output_function)(s2, filter->data)); @@ -272,23 +260,3 @@ mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xf0 && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h index f271f399c9227..b0689fce64388 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis; extern const struct mbfl_convert_vtbl vtbl_sjis_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c index 04e1d3af17af3..02bbdccdc8733 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c @@ -35,7 +35,6 @@ extern const unsigned char mblen_table_sjis[]; -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern int mbfl_bisec_srch(int w, const unsigned short *tbl, int n); extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); @@ -45,26 +44,20 @@ const mbfl_encoding mbfl_encoding_sjis2004 = { mbfl_no_encoding_sjis2004, "SJIS-2004", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis2004_aliases, + mbfl_encoding_sjis2004_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis2004_wchar, &vtbl_wchar_sjis2004 }; -const struct mbfl_identify_vtbl vtbl_identify_sjis2004 = { - mbfl_no_encoding_sjis2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis2004_wchar = { mbfl_no_encoding_sjis2004, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_jis2004_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_jis2004_wchar_flush, NULL, }; @@ -74,7 +67,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; @@ -209,6 +202,9 @@ mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter) } else if (filter->from->no_encoding == mbfl_no_encoding_sjis2004) { if (c >= 0x40 && c <= 0xfc && c != 0x7f) { SJIS_DECODE(c1, c, s1, s2); + } else { + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); + break; } } else { s1 = c1; @@ -478,13 +474,21 @@ mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter) return c; } +int mbfl_filt_conv_jis2004_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status & 0xF) { + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + return 0; +} + int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter) { int k; - int c1, c2, s1 = 0, s2; + int c1, c2, s1, s2; retry: - + s1 = 0; /* check for 1st char of combining characters */ if ((filter->status & 0xf)== 0 && ( c == 0x00E6 || @@ -672,7 +676,7 @@ mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter) { } int -mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter) +mbfl_filt_conv_wchar_jis2004_flush(mbfl_convert_filter *filter) { int k, c1, c2, s1, s2; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h index c75e3a910b741..869fd145c1ce0 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h @@ -33,14 +33,14 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis2004; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis2004; extern const struct mbfl_convert_vtbl vtbl_sjis2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis2004; int mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter); int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_jis2004_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_jis2004_wchar_flush(mbfl_convert_filter *filter); #endif /* MBFL_MBFILTER_SJIS_2004_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c index dc3d3692f4e67..45b87a8f989f1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c @@ -35,10 +35,10 @@ #include "sjis_mac2uni.h" -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_sjis[]; -static int mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter); +static int mbfl_filt_conv_wchar_sjis_mac_flush(mbfl_convert_filter *filter); +static int mbfl_filt_conv_sjis_mac_wchar_flush(mbfl_convert_filter *filter); static const char *mbfl_encoding_sjis_mac_aliases[] = {"MacJapanese", "x-Mac-Japanese", NULL}; @@ -46,26 +46,20 @@ const mbfl_encoding mbfl_encoding_sjis_mac = { mbfl_no_encoding_sjis_mac, "SJIS-mac", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_mac_aliases, + mbfl_encoding_sjis_mac_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_mac_wchar, &vtbl_wchar_sjis_mac }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_mac = { - mbfl_no_encoding_sjis_mac, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar = { mbfl_no_encoding_sjis_mac, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_sjis_mac_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_sjis_mac_wchar_flush, NULL, }; @@ -75,7 +69,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_sjis_mac, - mbfl_filt_conv_sjis_mac_flush, + mbfl_filt_conv_wchar_sjis_mac_flush, NULL, }; @@ -139,7 +133,7 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) CK((*filter->output_function)(c, filter->data)); } else if (c > 0xa0 && c < 0xe0) { /* kana */ CK((*filter->output_function)(0xfec0 + c, filter->data)); - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + } else if (c > 0x80 && c <= 0xed && c != 0xa0) { /* kanji first char */ filter->status = 1; filter->cache = c; } else if (c == 0x5c) { @@ -223,6 +217,10 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) for (i=0; i<8; i++) { if (s >= code_ofst_tbl[i][0] && s <= code_ofst_tbl[i][1]) { w = code_map[i][s - code_ofst_tbl[i][0]]; + if (w == 0) { + CK((*filter->output_function)((c1 << 8) | c | MBFL_WCSGROUP_THROUGH, filter->data)); + return c; + } s2 = 0; if (s >= 0x043e && s <= 0x0441) { s2 = 0xf87a; @@ -254,8 +252,6 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) w |= MBFL_WCSPLANE_WINCP932; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { w = (c1 << 8) | c; w &= MBFL_WCSGROUP_MASK; @@ -272,6 +268,15 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) return c; } +static int mbfl_filt_conv_sjis_mac_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status == 1) { + int w = (filter->cache & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + return 0; +} + /* * wchar => SJIS-mac */ @@ -367,6 +372,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) if (s2 <= 0 || s1 == -1) { break; } + s1 = s2 = 0; case 0: @@ -402,6 +408,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } if (c == 0xf860 || c == 0xf861 || c == 0xf862) { + /* Apple 'transcoding hint' codepoints (from private use area) */ filter->status = 2; filter->cache = c; return c; @@ -420,8 +427,10 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) s1 |= 0x8080; } else if (c == 0xa0) { s1 = 0x00a0; - } else if (c == 0xa5) { /* YEN SIGN */ - s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0xa5) { /* YEN SIGN */ + /* Unicode has codepoint 0xFFE5 for a fullwidth Yen sign; + * convert codepoint 0xA5 to halfwidth Yen sign */ + s1 = 0x5c; /* HALFWIDTH YEN SIGN */ } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ s1 = 0x2140; } @@ -519,8 +528,9 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } if (filter->status == 0) { + /* Didn't find any of expected codepoints after Apple transcoding hint */ CK(mbfl_filt_conv_illegal_output(c1, filter)); - CK(mbfl_filt_conv_illegal_output(c, filter)); + return mbfl_filt_conv_wchar_sjis_mac(c, filter); } break; @@ -667,7 +677,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } static int -mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter) +mbfl_filt_conv_wchar_sjis_mac_flush(mbfl_convert_filter *filter) { int i, c1, s1 = 0; if (filter->status == 1 && filter->cache > 0) { diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h index f4b2adfeac4fe..970d14a4c9c18 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h @@ -33,8 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis_mac; - -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_mac; extern const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c index 68084a0e0a39c..255a457c58364 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c @@ -36,7 +36,6 @@ #include "emoji2uni.h" extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_sjis[]; static const char *mbfl_encoding_sjis_docomo_aliases[] = {"SJIS-DOCOMO", "shift_jis-imode", "x-sjis-emoji-docomo", NULL}; @@ -47,7 +46,7 @@ const mbfl_encoding mbfl_encoding_sjis_docomo = { mbfl_no_encoding_sjis_docomo, "SJIS-Mobile#DOCOMO", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_docomo_aliases, + mbfl_encoding_sjis_docomo_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_docomo_wchar, @@ -58,7 +57,7 @@ const mbfl_encoding mbfl_encoding_sjis_kddi = { mbfl_no_encoding_sjis_kddi, "SJIS-Mobile#KDDI", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_kddi_aliases, + mbfl_encoding_sjis_kddi_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_kddi_wchar, @@ -69,31 +68,13 @@ const mbfl_encoding mbfl_encoding_sjis_sb = { mbfl_no_encoding_sjis_sb, "SJIS-Mobile#SOFTBANK", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_sb_aliases, + mbfl_encoding_sjis_sb_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_sb_wchar, &vtbl_wchar_sjis_sb }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo = { - mbfl_no_encoding_sjis_docomo, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - -const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi = { - mbfl_no_encoding_sjis_kddi, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - -const struct mbfl_identify_vtbl vtbl_identify_sjis_sb = { - mbfl_no_encoding_sjis_sb, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar = { mbfl_no_encoding_sjis_docomo, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h index 51b703da72964..19e1920c6e74d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h @@ -36,10 +36,6 @@ extern const mbfl_encoding mbfl_encoding_sjis_docomo; extern const mbfl_encoding mbfl_encoding_sjis_kddi; extern const mbfl_encoding mbfl_encoding_sjis_sb; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_sb; - extern const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_docomo; extern const struct mbfl_convert_vtbl vtbl_sjis_kddi_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c index 2535036e23a1a..d37f01568e281 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c @@ -33,8 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_sjis_open = { mbfl_no_encoding_sjis_open, "SJIS-win", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_open_aliases, + mbfl_encoding_sjis_open_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_open_wchar, &vtbl_wchar_sjis_open }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_open = { - mbfl_no_encoding_sjis_open, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis_open -}; - const struct mbfl_convert_vtbl vtbl_sjis_open_wchar = { mbfl_no_encoding_sjis_open, mbfl_no_encoding_wchar, @@ -323,23 +315,3 @@ mbfl_filt_conv_wchar_sjis_open(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h index 2c6c70373a5d2..764fad7e17aa0 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h @@ -34,7 +34,6 @@ extern const mbfl_encoding mbfl_encoding_sjis_open; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_open; extern const struct mbfl_convert_vtbl vtbl_sjis_open_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_open; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c index 68172efbe610c..c886654f61a94 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c @@ -30,13 +30,22 @@ #include "mbfilter.h" #include "mbfilter_ucs2.h" +static int mbfl_filt_conv_ucs2_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL}; +/* This library historically had encodings called 'byte2be' and 'byte2le' + * which were almost identical to UCS-2, except that they would truncate + * Unicode codepoints higher than 0xFFFF quietly + * Maintain minimal support by aliasing to UCS-2 */ +static const char *mbfl_encoding_ucs2be_aliases[] = {"byte2be", NULL}; +static const char *mbfl_encoding_ucs2le_aliases[] = {"byte2le", NULL}; + const mbfl_encoding mbfl_encoding_ucs2 = { mbfl_no_encoding_ucs2, "UCS-2", "UCS-2", - (const char *(*)[])&mbfl_encoding_ucs2_aliases, + mbfl_encoding_ucs2_aliases, NULL, MBFL_ENCTYPE_WCS2BE, &vtbl_ucs2_wchar, @@ -47,7 +56,7 @@ const mbfl_encoding mbfl_encoding_ucs2be = { mbfl_no_encoding_ucs2be, "UCS-2BE", "UCS-2BE", - NULL, + mbfl_encoding_ucs2be_aliases, NULL, MBFL_ENCTYPE_WCS2BE, &vtbl_ucs2be_wchar, @@ -58,7 +67,7 @@ const mbfl_encoding mbfl_encoding_ucs2le = { mbfl_no_encoding_ucs2le, "UCS-2LE", "UCS-2LE", - NULL, + mbfl_encoding_ucs2le_aliases, NULL, MBFL_ENCTYPE_WCS2LE, &vtbl_ucs2le_wchar, @@ -71,7 +80,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -91,7 +100,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -111,7 +120,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -127,113 +136,83 @@ const struct mbfl_convert_vtbl vtbl_wchar_ucs2le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UCS-2 => wchar - */ int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter) { - int n, endian; - - endian = filter->status & 0xff00; - switch (filter->status & 0xff) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xff) << 8; - } - filter->cache = n; - filter->status++; - break; - default: - if (endian) { - n = (c & 0xff) << 8; + if (filter->status == 0) { + filter->status = 1; + filter->cache = c & 0xFF; + } else { + filter->status = 0; + int n = (filter->cache << 8) | (c & 0xFF); + if (n == 0xFFFE) { + /* Found little-endian byte order mark */ + filter->filter_function = mbfl_filt_conv_ucs2le_wchar; } else { - n = c & 0xff; - } - n |= filter->cache; - if (n == 0xfffe) { - if (endian) { - filter->status = 0; /* big-endian */ - } else { - filter->status = 0x100; /* little-endian */ + filter->filter_function = mbfl_filt_conv_ucs2be_wchar; + if (n != 0xFEFF) { + CK((*filter->output_function)(n, filter->data)); } - CK((*filter->output_function)(0xfeff, filter->data)); - } else { - filter->status &= ~0xff; - CK((*filter->output_function)(n, filter->data)); } - break; } - return c; } -/* - * UCS-2BE => wchar - */ int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter) { - int n; - if (filter->status == 0) { filter->status = 1; - n = (c & 0xff) << 8; - filter->cache = n; + filter->cache = (c & 0xFF) << 8; } else { filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); + CK((*filter->output_function)((c & 0xFF) | filter->cache, filter->data)); } return c; } -/* - * wchar => UCS-2BE - */ int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xFF, filter->data)); + CK((*filter->output_function)(c & 0xFF, filter->data)); } else { CK(mbfl_filt_conv_illegal_output(c, filter)); } - return c; } -/* - * UCS-2LE => wchar - */ int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter) { - int n; - if (filter->status == 0) { filter->status = 1; - n = c & 0xff; - filter->cache = n; + filter->cache = c & 0xFF; } else { filter->status = 0; - n = ((c & 0xff) << 8) | filter->cache; - CK((*filter->output_function)(n, filter->data)); + CK((*filter->output_function)(((c & 0xFF) << 8) | filter->cache, filter->data)); } return c; } - -/* - * wchar => UCS-2LE - */ int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xFF, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xFF, filter->data)); } else { CK(mbfl_filt_conv_illegal_output(c, filter)); } - return c; } + +static int mbfl_filt_conv_ucs2_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + /* Input string was truncated */ + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c index fcdd20d6158d6..96ef6fbf6df57 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c @@ -32,11 +32,17 @@ static const char *mbfl_encoding_ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL}; +/* This library historically had encodings called 'byte4be' and 'byte4le' + * which were almost identical to UCS-4 + * Maintain minimal support by aliasing to UCS-2 */ +static const char *mbfl_encoding_ucs4be_aliases[] = {"byte4be", NULL}; +static const char *mbfl_encoding_ucs4le_aliases[] = {"byte4le", NULL}; + const mbfl_encoding mbfl_encoding_ucs4 = { mbfl_no_encoding_ucs4, "UCS-4", "UCS-4", - (const char *(*)[])&mbfl_encoding_ucs4_aliases, + mbfl_encoding_ucs4_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_ucs4_wchar, @@ -47,7 +53,7 @@ const mbfl_encoding mbfl_encoding_ucs4be = { mbfl_no_encoding_ucs4be, "UCS-4BE", "UCS-4BE", - NULL, + mbfl_encoding_ucs4be_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_ucs4be_wchar, @@ -58,7 +64,7 @@ const mbfl_encoding mbfl_encoding_ucs4le = { mbfl_no_encoding_ucs4le, "UCS-4LE", "UCS-4LE", - NULL, + mbfl_encoding_ucs4le_aliases, NULL, MBFL_ENCTYPE_WCS4LE, &vtbl_ucs4le_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c index 5dc4aa81a98a2..a164fccbcdb2c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c @@ -32,8 +32,6 @@ #define UNICODE_TABLE_UHC_DEF #include "unicode_table_uhc.h" -static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_uhc[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_uhc = { mbfl_no_encoding_uhc, "UHC", "UHC", - (const char *(*)[])&mbfl_encoding_uhc_aliases, + mbfl_encoding_uhc_aliases, mblen_table_uhc, MBFL_ENCTYPE_MBCS, &vtbl_uhc_wchar, &vtbl_wchar_uhc }; -const struct mbfl_identify_vtbl vtbl_identify_uhc = { - mbfl_no_encoding_uhc, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_uhc -}; - const struct mbfl_convert_vtbl vtbl_uhc_wchar = { mbfl_no_encoding_uhc, mbfl_no_encoding_wchar, @@ -220,43 +212,3 @@ mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c >= 0x81 && c <= 0xa0) { /* dbcs first char */ - filter->status= 1; - } else if (c >= 0xa1 && c <= 0xc6) { /* dbcs first char */ - filter->status= 2; - } else if (c >= 0xc7 && c <= 0xfe) { /* dbcs first char */ - filter->status= 3; - } else { /* bad */ - filter->flag = 1; - } - - case 1: - case 2: - if (c < 0x41 || (c > 0x5a && c < 0x61) - || (c > 0x7a && c < 0x81) || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h index 6ed5486767444..860d45eb86fe1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_uhc; -extern const struct mbfl_identify_vtbl vtbl_identify_uhc; extern const struct mbfl_convert_vtbl vtbl_uhc_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_uhc; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c index 620e8a76f7c52..10063883f2e61 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c @@ -30,13 +30,15 @@ #include "mbfilter.h" #include "mbfilter_utf16.h" +static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL}; const mbfl_encoding mbfl_encoding_utf16 = { mbfl_no_encoding_utf16, "UTF-16", "UTF-16", - (const char *(*)[])&mbfl_encoding_utf16_aliases, + mbfl_encoding_utf16_aliases, NULL, MBFL_ENCTYPE_MWC2BE, &vtbl_utf16_wchar, @@ -71,7 +73,7 @@ const struct mbfl_convert_vtbl vtbl_utf16_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -91,7 +93,7 @@ const struct mbfl_convert_vtbl vtbl_utf16be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -111,7 +113,7 @@ const struct mbfl_convert_vtbl vtbl_utf16le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -127,111 +129,89 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf16le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UTF-16 => wchar - */ int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter) { - int n, endian; - - endian = filter->status & 0xff00; - switch (filter->status & 0x0f) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xff) << 8; - } - filter->cache |= n; - filter->status++; - break; - default: - if (endian) { - n = (c & 0xff) << 8; + /* Start with the assumption that the string is big-endian; + * If we find a little-endian BOM, then we will change that assumption */ + if (filter->status == 0) { + filter->cache = c & 0xFF; + filter->status = 1; + } else { + int n = (filter->cache << 8) | (c & 0xFF); + if (n == 0xFFFE) { + /* Switch to little-endian mode */ + filter->filter_function = mbfl_filt_conv_utf16le_wchar; + filter->cache = filter->status = 0; } else { - n = c & 0xff; - } - n |= filter->cache & 0xffff; - filter->status &= ~0x0f; - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; + filter->filter_function = mbfl_filt_conv_utf16be_wchar; + if (n >= 0xD800 && n <= 0xDBFF) { + filter->cache = n & 0x3FF; /* Pick out 10 data bits */ + filter->status = 2; + return c; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + /* This is wrong; second part of surrogate pair has come first */ + CK((*filter->output_function)(n | MBFL_WCSGROUP_THROUGH, filter->data)); + } else if (n != 0xFEFF) { CK((*filter->output_function)(n, filter->data)); } - } else { - int is_first = filter->status & 0x10; - filter->cache = 0; - filter->status |= 0x10; - if (!is_first) { - if (n == 0xfffe) { - if (endian) { - filter->status &= ~0x100; /* big-endian */ - } else { - filter->status |= 0x100; /* little-endian */ - } - break; - } else if (n == 0xfeff) { - break; - } - } - CK((*filter->output_function)(n, filter->data)); + filter->cache = filter->status = 0; } - break; } return c; } -/* - * UTF-16BE => wchar - */ int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter) { int n; switch (filter->status) { - case 0: + case 0: /* First byte */ + filter->cache = c & 0xFF; filter->status = 1; - n = (c & 0xff) << 8; - filter->cache |= n; break; - default: - filter->status = 0; - n = (filter->cache & 0xff00) | (c & 0xff); - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + + case 1: /* Second byte */ + n = (filter->cache << 8) | (c & 0xFF); + if (n >= 0xD800 && n <= 0xDBFF) { + filter->cache = n & 0x3FF; /* Pick out 10 data bits */ + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + /* This is wrong; second part of surrogate pair has come first */ + CK((*filter->output_function)(n | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->status = 0; } else { - filter->cache = 0; CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } break; + + case 2: /* Second part of surrogate, first byte */ + filter->cache = (filter->cache << 8) | (c & 0xFF); + filter->status = 3; + break; + + case 3: /* Second part of surrogate, second byte */ + n = ((filter->cache & 0xFF) << 8) | (c & 0xFF); + if (n >= 0xD800 && n <= 0xDBFF) { + /* Wrong; that's the first half of a surrogate pair, not the second */ + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 8) | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->cache = n & 0x3FF; + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + n = ((filter->cache & 0x3FF00) << 2) + (n & 0x3FF) + 0x10000; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } else { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 8) | MBFL_WCSGROUP_THROUGH, filter->data)); + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } } return c; } -/* - * wchar => UTF-16BE - */ int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter) { int n; @@ -253,38 +233,53 @@ int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter) return c; } -/* - * UTF-16LE => wchar - */ int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter) { int n; switch (filter->status) { case 0: + filter->cache = c & 0xff; filter->status = 1; - n = c & 0xff; - filter->cache |= n; break; - default: - filter->status = 0; - n = (filter->cache & 0xff) | ((c & 0xff) << 8); - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + + case 1: + if ((c & 0xfc) == 0xd8) { + /* Looks like we have a surrogate pair here */ + filter->cache += ((c & 0x3) << 8); + filter->status = 2; + } else if ((c & 0xfc) == 0xdc) { + /* This is wrong; the second part of the surrogate pair has come first + * Flag it with `MBFL_WCSGROUP_THROUGH`; the following filter will handle + * the error */ + n = (filter->cache + ((c & 0xff) << 8)) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } else { - filter->cache = 0; + CK((*filter->output_function)(filter->cache + ((c & 0xff) << 8), filter->data)); + filter->status = 0; + } + break; + + case 2: + filter->cache = (filter->cache << 10) + (c & 0xff); + filter->status = 3; + break; + + case 3: + n = (filter->cache & 0xFF) | ((c & 0xFF) << 8); + if (n >= 0xD800 && n <= 0xDBFF) { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 10) | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->cache = n & 0x3FF; + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + n = filter->cache + ((c & 0x3) << 8) + 0x10000; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } else { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 10) | MBFL_WCSGROUP_THROUGH, filter->data)); CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } break; } @@ -292,9 +287,6 @@ int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter) return c; } -/* - * wchar => UTF-16LE - */ int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter) { int n; @@ -315,3 +307,21 @@ int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter) return c; } + +static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter) +{ + int status = filter->status; + int cache = filter->cache; + filter->status = filter->cache = 0; + + if (status) { + /* Input string was truncated */ + CK((*filter->output_function)(cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h index 4aa88619c7ce6..727c231b3479e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h @@ -33,6 +33,7 @@ extern const mbfl_encoding mbfl_encoding_utf16; extern const mbfl_encoding mbfl_encoding_utf16be; extern const mbfl_encoding mbfl_encoding_utf16le; + extern const struct mbfl_convert_vtbl vtbl_utf16_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf16; extern const struct mbfl_convert_vtbl vtbl_utf16be_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c index b936ab410241a..a9a7903b5db7a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c @@ -30,13 +30,15 @@ #include "mbfilter.h" #include "mbfilter_utf32.h" +static int mbfl_filt_conv_utf32_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_utf32_aliases[] = {"utf32", NULL}; const mbfl_encoding mbfl_encoding_utf32 = { mbfl_no_encoding_utf32, "UTF-32", "UTF-32", - (const char *(*)[])&mbfl_encoding_utf32_aliases, + mbfl_encoding_utf32_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_utf32_wchar, @@ -71,7 +73,7 @@ const struct mbfl_convert_vtbl vtbl_utf32_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -91,7 +93,7 @@ const struct mbfl_convert_vtbl vtbl_utf32be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -111,7 +113,7 @@ const struct mbfl_convert_vtbl vtbl_utf32le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -127,106 +129,53 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf32le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UTF-32 => wchar - */ -int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter) +static int emit_char_if_valid(int n, mbfl_convert_filter *filter) { - int n, endian; + if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xD800 || n > 0xDFFF)) { + CK((*filter->output_function)(n, filter->data)); + } else { + n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + return 0; +} - endian = filter->status & 0xff00; - switch (filter->status & 0xff) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xffu) << 24; - } - filter->cache = n; - filter->status++; - break; - case 1: - if (endian) { - n = (c & 0xff) << 8; - } else { - n = (c & 0xff) << 16; - } - filter->cache |= n; - filter->status++; - break; - case 2: - if (endian) { - n = (c & 0xff) << 16; - } else { - n = (c & 0xff) << 8; - } - filter->cache |= n; +int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter) +{ + if (filter->status < 3) { + filter->cache = (filter->cache << 8) | (c & 0xFF); filter->status++; - break; - default: - if (endian) { - n = (c & 0xffu) << 24; - } else { - n = c & 0xff; - } - n |= filter->cache; - if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) { - if (endian) { - filter->status = 0; /* big-endian */ - } else { - filter->status = 0x100; /* little-endian */ - } - CK((*filter->output_function)(0xfeff, filter->data)); + } else { + int n = ((unsigned int)filter->cache << 8) | (c & 0xFF); + filter->cache = filter->status = 0; + + if (n == 0xFFFE0000) { + /* Found a little-endian byte order mark */ + filter->filter_function = mbfl_filt_conv_utf32le_wchar; } else { - filter->status &= ~0xff; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); + filter->filter_function = mbfl_filt_conv_utf32be_wchar; + if (n != 0xFEFF) { + CK(emit_char_if_valid(n, filter)); } } - break; } return c; } -/* - * UTF-32BE => wchar - */ int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter) { - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xffu) << 24; - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 16; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 8; - filter->cache |= n; + if (filter->status < 3) { + filter->cache = (filter->cache << 8) | (c & 0xFF); + filter->status++; } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + int n = ((unsigned int)filter->cache << 8) | (c & 0xFF); + filter->cache = filter->status = 0; + CK(emit_char_if_valid(n, filter)); } return c; } -/* - * wchar => UTF-32BE - */ int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { @@ -241,41 +190,19 @@ int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter) return c; } -/* - * UTF-32LE => wchar - */ int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter) { - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff); - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 8; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 16; - filter->cache |= n; + if (filter->status < 3) { + filter->cache |= ((c & 0xFFU) << (8 * filter->status)); + filter->status++; } else { - filter->status = 0; - n = ((c & 0xffu) << 24) | filter->cache; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + int n = ((c & 0xFFU) << 24) | filter->cache; + filter->cache = filter->status = 0; + CK(emit_char_if_valid(n, filter)); } return c; } -/* - * wchar => UTF-32LE - */ int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { @@ -289,3 +216,17 @@ int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter) return c; } + +static int mbfl_filt_conv_utf32_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + /* Input string was truncated */ + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h index 14b9fa4823245..58c69d72f16d3 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h @@ -33,6 +33,7 @@ extern const mbfl_encoding mbfl_encoding_utf32; extern const mbfl_encoding mbfl_encoding_utf32be; extern const mbfl_encoding mbfl_encoding_utf32le; + extern const struct mbfl_convert_vtbl vtbl_utf32_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf32; extern const struct mbfl_convert_vtbl vtbl_utf32be_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c index b54bcf2b9ca1f..bda303ef6f84f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c @@ -30,8 +30,6 @@ #include "mbfilter.h" #include "mbfilter_utf7.h" -static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter); - static const unsigned char mbfl_base64_table[] = { /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */ 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d, @@ -51,19 +49,13 @@ const mbfl_encoding mbfl_encoding_utf7 = { mbfl_no_encoding_utf7, "UTF-7", "UTF-7", - (const char *(*)[])&mbfl_encoding_utf7_aliases, + mbfl_encoding_utf7_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_utf7_wchar, &vtbl_wchar_utf7 }; -const struct mbfl_identify_vtbl vtbl_identify_utf7 = { - mbfl_no_encoding_utf7, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf7 -}; - const struct mbfl_convert_vtbl vtbl_utf7_wchar = { mbfl_no_encoding_utf7, mbfl_no_encoding_wchar, @@ -409,52 +401,3 @@ int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter) -{ - int n; - - switch (filter->status) { - /* directly encoded characters */ - case 0: - if (c == 0x2b) { /* '+' shift character */ - filter->status++; - } else if (c == 0x5c || c == 0x7e || c < 0 || c > 0x7f) { /* illegal character */ - filter->flag = 1; /* bad */ - } - break; - - /* Modified Base64 */ - case 1: - case 2: - n = 0; - if (c >= 0x41 && c <= 0x5a) { /* A - Z */ - n = 1; - } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ - n = 1; - } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ - n = 1; - } else if (c == 0x2b) { /* '+' */ - n = 1; - } else if (c == 0x2f) { /* '/' */ - n = 1; - } - if (n <= 0) { - if (filter->status == 1 && c != 0x2d) { - filter->flag = 1; /* bad */ - } else if (c < 0 || c > 0x7f) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - } else { - filter->status = 2; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h index 6223bdba97e29..119937eb41722 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_utf7; -extern const struct mbfl_identify_vtbl vtbl_identify_utf7; extern const struct mbfl_convert_vtbl vtbl_utf7_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf7; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c index c8fe70fc7f67a..4c1cd8712fad9 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c @@ -27,14 +27,64 @@ * */ +/* Modified UTF-7 used for 'international mailbox names' in the IMAP protocol + * Also known as mUTF-7 + * Defined in RFC 3501 5.1.3 (https://tools.ietf.org/html/rfc3501) + * + * Quoting from the RFC: + * + *********************************************************************** + * In modified UTF-7, printable US-ASCII characters, except for "&", + * represent themselves; that is, characters with octet values 0x20-0x25 + * and 0x27-0x7e. The character "&" (0x26) is represented by the + * two-octet sequence "&-". + * + * All other characters (octet values 0x00-0x1f and 0x7f-0xff) are + * represented in modified BASE64, with a further modification from + * UTF-7 that "," is used instead of "/". Modified BASE64 MUST NOT be + * used to represent any printing US-ASCII character which can represent + * itself. + * + * "&" is used to shift to modified BASE64 and "-" to shift back to + * US-ASCII. There is no implicit shift from BASE64 to US-ASCII, and + * null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII + * means "&") are not permitted. However, all names start in US-ASCII, + * and MUST end in US-ASCII; that is, a name that ends with a non-ASCII + * ISO-10646 character MUST end with a "-"). + *********************************************************************** + * + * The purpose of all this is: 1) to keep all parts of IMAP messages 7-bit clean, + * 2) to avoid giving special treatment to +, /, \, and ~, since these are + * commonly used in mailbox names, and 3) to ensure there is only one + * representation of any mailbox name (vanilla UTF-7 does allow multiple + * representations of the same string, by Base64-encoding characters which + * could have been included as ASCII literals.) + * + * RFC 2152 also applies, since it defines vanilla UTF-7 (minus IMAP modifications) + * The following paragraph is notable: + * + *********************************************************************** + * Unicode is encoded using Modified Base64 by first converting Unicode + * 16-bit quantities to an octet stream (with the most significant octet first). + * Surrogate pairs (UTF-16) are converted by treating each half of the pair as + * a separate 16 bit quantity (i.e., no special treatment). Text with an odd + * number of octets is ill-formed. ISO 10646 characters outside the range + * addressable via surrogate pairs cannot be encoded. + *********************************************************************** + * + * So after reversing the modified Base64 encoding on an encoded section, + * the contents are interpreted as UTF-16BE. */ + #include "mbfilter.h" #include "mbfilter_utf7imap.h" +static const char *mbfl_encoding_utf7imap_aliases[] = {"mUTF-7", NULL}; + const mbfl_encoding mbfl_encoding_utf7imap = { mbfl_no_encoding_utf7imap, "UTF7-IMAP", NULL, - NULL, + mbfl_encoding_utf7imap_aliases, NULL, MBFL_ENCTYPE_MBCS, &vtbl_utf7imap_wchar, @@ -106,7 +156,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) case 0: if (c == 0x26) { /* '&' shift character */ filter->status++; - } else if (c >= 0 && c < 0x80) { /* ASCII */ + } else if (c >= 0x20 && c <= 0x7E) { /* ASCII */ CK((*filter->output_function)(c, filter->data)); } else { /* illegal character */ s = c & MBFL_WCSGROUP_MASK; @@ -145,7 +195,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = n; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; @@ -177,7 +235,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = n; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; @@ -204,7 +270,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = 0; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c index 9e97d5b0699c8..0c73952558cb7 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c @@ -30,8 +30,6 @@ #include "mbfilter.h" #include "mbfilter_utf8.h" -int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); - const unsigned char mblen_table_utf8[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -57,19 +55,13 @@ const mbfl_encoding mbfl_encoding_utf8 = { mbfl_no_encoding_utf8, "UTF-8", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_aliases, + mbfl_encoding_utf8_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_wchar, &vtbl_wchar_utf8 }; -const struct mbfl_identify_vtbl vtbl_identify_utf8 = { - mbfl_no_encoding_utf8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - const struct mbfl_convert_vtbl vtbl_utf8_wchar = { mbfl_no_encoding_utf8, mbfl_no_encoding_wchar, @@ -236,76 +228,3 @@ int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter) -{ - int c1; - - c1 = (filter->status >> 8) & 0xff; - filter->status &= 0xff; - - if (c < 0x80) { - if (c < 0) { - filter->flag = 1; /* bad */ - } else if (filter->status) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - } else if (c < 0xc0) { - switch (filter->status) { - case 0x20: /* 3 byte code 2nd char */ - if ((c1 == 0x0 && c >= 0xa0) || - (c1 == 0xd && c < 0xa0) || - (c1 > 0x0 && c1 != 0xd)) { - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - break; - case 0x30: /* 4 byte code 2nd char */ - if ((c1 == 0x0 && c >= 0x90) || - (c1 > 0x0 && c1 < 0x4) || - (c1 == 0x4 && c < 0x90)) { - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - break; - case 0x31: /* 4 byte code 3rd char */ - filter->status++; - break; - case 0x10: /* 2 byte code 2nd char */ - case 0x21: /* 3 byte code 3rd char */ - case 0x32: /* 4 byte code 4th char */ - filter->status = 0; - break; - default: - filter->flag = 1; /* bad */ - filter->status = 0; - break; - } - } else if (c < 0xc2) { /* 0xc0,0xc1 */ - filter->flag = 1; /* bad */ - filter->status = 0; - } else { - if (filter->status) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - if (c < 0xe0) { /* 2 byte code first char */ - filter->status = 0x10; - } else if (c < 0xf0) { /* 3 byte code 1st char */ - filter->status = 0x20; - filter->status |= (c & 0xf) << 8; - } else if (c < 0xf5) { /* 4 byte code 1st char */ - filter->status = 0x30; - filter->status |= (c & 0x7) << 8; - } else { - filter->flag = 1; /* bad */ - } - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h index b0c93ccd3db3c..24cb91ea5ac08 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h @@ -31,7 +31,6 @@ #define MBFL_MBFILTER_UTF8_H extern const mbfl_encoding mbfl_encoding_utf8; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8; extern const struct mbfl_convert_vtbl vtbl_utf8_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf8; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c index ef8d4cc0759a2..763ed90fabd4e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c @@ -32,7 +32,6 @@ #include "mbfilter_utf8_mobile.h" #include "mbfilter_sjis_mobile.h" -extern int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); extern int mbfl_filt_conv_utf8_wchar_flush(mbfl_convert_filter *filter); extern const unsigned char mblen_table_utf8[]; @@ -46,7 +45,7 @@ const mbfl_encoding mbfl_encoding_utf8_docomo = { mbfl_no_encoding_utf8_docomo, "UTF-8-Mobile#DOCOMO", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_docomo_aliases, + mbfl_encoding_utf8_docomo_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_docomo_wchar, @@ -57,7 +56,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_a = { mbfl_no_encoding_utf8_kddi_a, "UTF-8-Mobile#KDDI-A", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_kddi_a_aliases, + mbfl_encoding_utf8_kddi_a_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_kddi_a_wchar, @@ -68,7 +67,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_b = { mbfl_no_encoding_utf8_kddi_b, "UTF-8-Mobile#KDDI-B", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_kddi_b_aliases, + mbfl_encoding_utf8_kddi_b_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_kddi_b_wchar, @@ -79,37 +78,13 @@ const mbfl_encoding mbfl_encoding_utf8_sb = { mbfl_no_encoding_utf8_sb, "UTF-8-Mobile#SOFTBANK", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_sb_aliases, + mbfl_encoding_utf8_sb_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_sb_wchar, &vtbl_wchar_utf8_sb }; -const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo = { - mbfl_no_encoding_utf8_docomo, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a = { - mbfl_no_encoding_utf8_kddi_a, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b = { - mbfl_no_encoding_utf8_kddi_b, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_sb = { - mbfl_no_encoding_utf8_sb, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar = { mbfl_no_encoding_utf8_docomo, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h index 74ac6e195e5a2..116bc16299d61 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h @@ -35,11 +35,6 @@ extern const mbfl_encoding mbfl_encoding_utf8_kddi_a; extern const mbfl_encoding mbfl_encoding_utf8_kddi_b; extern const mbfl_encoding mbfl_encoding_utf8_sb; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_sb; - extern const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo; extern const struct mbfl_convert_vtbl vtbl_utf8_kddi_a_wchar; diff --git a/ext/mbstring/libmbfl/filters/unicode_prop.h b/ext/mbstring/libmbfl/filters/unicode_prop.h index 6eaefbc2e391e..1ecf42c556046 100644 --- a/ext/mbstring/libmbfl/filters/unicode_prop.h +++ b/ext/mbstring/libmbfl/filters/unicode_prop.h @@ -19,148 +19,136 @@ * Suite 330, Boston, MA 02111-1307 USA * * The authors of this file: PHP3 Internationalization team - * - */ - -/* character property table */ -#define MBFL_CHP_CTL 0x01 -#define MBFL_CHP_DIGIT 0x02 -#define MBFL_CHP_UALPHA 0x04 -#define MBFL_CHP_LALPHA 0x08 -#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */ -#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */ - -/* - * Unicode table */ -static const unsigned char mbfl_charprop_table[] = { -/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC, -/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SP 32 */ MBFL_CHP_MMHQENC , -/* ! 33 */ 0 , -/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* # 35 */ MBFL_CHP_MMHQENC , -/* $ 36 */ MBFL_CHP_MMHQENC , -/* % 37 */ MBFL_CHP_MMHQENC , -/* & 38 */ MBFL_CHP_MMHQENC , -/* ' 39 */ MBFL_CHP_MMHQENC , -/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* * 42 */ 0 , -/* + 43 */ 0 , -/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* - 45 */ 0 , -/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* / 47 */ 0 , -/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* = 61 */ 0 , -/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ? 63 */ MBFL_CHP_MMHQENC , -/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* A 65 */ MBFL_CHP_UALPHA , -/* B 66 */ MBFL_CHP_UALPHA , -/* C 67 */ MBFL_CHP_UALPHA , -/* D 68 */ MBFL_CHP_UALPHA , -/* E 69 */ MBFL_CHP_UALPHA , -/* F 70 */ MBFL_CHP_UALPHA , -/* G 71 */ MBFL_CHP_UALPHA , -/* H 72 */ MBFL_CHP_UALPHA , -/* I 73 */ MBFL_CHP_UALPHA , -/* J 74 */ MBFL_CHP_UALPHA , -/* K 75 */ MBFL_CHP_UALPHA , -/* L 76 */ MBFL_CHP_UALPHA , -/* M 77 */ MBFL_CHP_UALPHA , -/* N 78 */ MBFL_CHP_UALPHA , -/* O 79 */ MBFL_CHP_UALPHA , -/* P 80 */ MBFL_CHP_UALPHA , -/* Q 81 */ MBFL_CHP_UALPHA , -/* R 82 */ MBFL_CHP_UALPHA , -/* S 83 */ MBFL_CHP_UALPHA , -/* T 84 */ MBFL_CHP_UALPHA , -/* U 85 */ MBFL_CHP_UALPHA , -/* V 86 */ MBFL_CHP_UALPHA , -/* W 87 */ MBFL_CHP_UALPHA , -/* X 88 */ MBFL_CHP_UALPHA , -/* Y 89 */ MBFL_CHP_UALPHA , -/* Z 90 */ MBFL_CHP_UALPHA , -/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ^ 94 */ MBFL_CHP_MMHQENC , -/* _ 95 */ MBFL_CHP_MMHQENC , -/* ` 96 */ MBFL_CHP_MMHQENC , -/* a 97 */ MBFL_CHP_LALPHA , -/* b 98 */ MBFL_CHP_LALPHA , -/* c 99 */ MBFL_CHP_LALPHA , -/* d 100 */ MBFL_CHP_LALPHA , -/* e 101 */ MBFL_CHP_LALPHA , -/* f 102 */ MBFL_CHP_LALPHA , -/* g 103 */ MBFL_CHP_LALPHA , -/* h 104 */ MBFL_CHP_LALPHA , -/* i 105 */ MBFL_CHP_LALPHA , -/* j 106 */ MBFL_CHP_LALPHA , -/* k 107 */ MBFL_CHP_LALPHA , -/* l 108 */ MBFL_CHP_LALPHA , -/* m 109 */ MBFL_CHP_LALPHA , -/* n 110 */ MBFL_CHP_LALPHA , -/* o 111 */ MBFL_CHP_LALPHA , -/* p 112 */ MBFL_CHP_LALPHA , -/* q 113 */ MBFL_CHP_LALPHA , -/* r 114 */ MBFL_CHP_LALPHA , -/* s 115 */ MBFL_CHP_LALPHA , -/* t 116 */ MBFL_CHP_LALPHA , -/* u 117 */ MBFL_CHP_LALPHA , -/* v 118 */ MBFL_CHP_LALPHA , -/* w 119 */ MBFL_CHP_LALPHA , -/* x 120 */ MBFL_CHP_LALPHA , -/* y 121 */ MBFL_CHP_LALPHA , -/* z 122 */ MBFL_CHP_LALPHA , -/* { 123 */ MBFL_CHP_MMHQENC , -/* | 124 */ MBFL_CHP_MMHQENC , -/* } 125 */ MBFL_CHP_MMHQENC , -/* ~ 126 */ MBFL_CHP_MMHQENC , -/* DEL 127 */ MBFL_CHP_MMHQENC +/* Should we use QPrint-encoding in MIME Header encoded-word? */ +static const unsigned char mime_char_needs_qencode[] = { +/* NUL 0 */ 1, +/* SCH 1 */ 1, +/* SIX 2 */ 1, +/* EIX 3 */ 1, +/* EOT 4 */ 1, +/* ENQ 5 */ 1, +/* ACK 6 */ 1, +/* BEL 7 */ 1, +/* BS 8 */ 1, +/* HI 9 */ 1, +/* LF 10 */ 1, +/* VI 11 */ 1, +/* FF 12 */ 1, +/* CR 13 */ 1, +/* SO 14 */ 1, +/* SI 15 */ 1, +/* SLE 16 */ 1, +/* CSI 17 */ 1, +/* DC2 18 */ 1, +/* DC3 19 */ 1, +/* DC4 20 */ 1, +/* NAK 21 */ 1, +/* SYN 22 */ 1, +/* EIB 23 */ 1, +/* CAN 24 */ 1, +/* EM 25 */ 1, +/* SLB 26 */ 1, +/* ESC 27 */ 1, +/* FS 28 */ 1, +/* GS 29 */ 1, +/* RS 30 */ 1, +/* US 31 */ 1, +/* SP 32 */ 1, +/* ! 33 */ 0, +/* " 34 */ 1, +/* # 35 */ 1, +/* $ 36 */ 1, +/* % 37 */ 1, +/* & 38 */ 1, +/* ' 39 */ 1, +/* ( 40 */ 1, +/* ) 41 */ 1, +/* * 42 */ 0, +/* + 43 */ 0, +/* , 44 */ 1, +/* - 45 */ 0, +/* . 46 */ 1, +/* / 47 */ 0, +/* 0 48 */ 1, +/* 1 49 */ 1, +/* 2 50 */ 1, +/* 3 51 */ 1, +/* 4 52 */ 1, +/* 5 53 */ 1, +/* 6 54 */ 1, +/* 7 55 */ 1, +/* 8 56 */ 1, +/* 9 57 */ 1, +/* : 58 */ 1, +/* ; 59 */ 1, +/* < 60 */ 1, +/* = 61 */ 0, +/* > 62 */ 1, +/* ? 63 */ 1, +/* @ 64 */ 1, +/* A 65 */ 0, +/* B 66 */ 0, +/* C 67 */ 0, +/* D 68 */ 0, +/* E 69 */ 0, +/* F 70 */ 0, +/* G 71 */ 0, +/* H 72 */ 0, +/* I 73 */ 0, +/* J 74 */ 0, +/* K 75 */ 0, +/* L 76 */ 0, +/* M 77 */ 0, +/* N 78 */ 0, +/* O 79 */ 0, +/* P 80 */ 0, +/* Q 81 */ 0, +/* R 82 */ 0, +/* S 83 */ 0, +/* T 84 */ 0, +/* U 85 */ 0, +/* V 86 */ 0, +/* W 87 */ 0, +/* X 88 */ 0, +/* Y 89 */ 0, +/* Z 90 */ 0, +/* [ 91 */ 1, +/* \ 92 */ 1, +/* ] 93 */ 1, +/* ^ 94 */ 1, +/* _ 95 */ 1, +/* ` 96 */ 1, +/* a 97 */ 0, +/* b 98 */ 0, +/* c 99 */ 0, +/* d 100 */ 0, +/* e 101 */ 0, +/* f 102 */ 0, +/* g 103 */ 0, +/* h 104 */ 0, +/* i 105 */ 0, +/* j 106 */ 0, +/* k 107 */ 0, +/* l 108 */ 0, +/* m 109 */ 0, +/* n 110 */ 0, +/* o 111 */ 0, +/* p 112 */ 0, +/* q 113 */ 0, +/* r 114 */ 0, +/* s 115 */ 0, +/* t 116 */ 0, +/* u 117 */ 0, +/* v 118 */ 0, +/* w 119 */ 0, +/* x 120 */ 0, +/* y 121 */ 0, +/* z 122 */ 0, +/* { 123 */ 1, +/* | 124 */ 1, +/* } 125 */ 1, +/* ~ 126 */ 1, +/* DEL 127 */ 1 }; diff --git a/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h b/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h deleted file mode 100644 index abf89867eaabb..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan - * - */ - -#ifndef UNICODE_TABLE_ARMSCII8_H -#define UNICODE_TABLE_ARMSCII8_H - -/* ArmSCII-8 to Unicode table */ -static const unsigned short armscii8_ucs_table[] = { -/*0x00a0, 0x00a1, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab,*/ -0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, -0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c, -0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, -0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, -0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, -0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, -0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, -0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, -0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, -0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, -0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, -/*0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0x00ff*/ -0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd -}; - -static const unsigned char ucs_armscii8_table[] = { -0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f -}; - -static const int armscii8_ucs_table_min = 0xa0; -static const int armscii8_ucs_table_len = (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); -static const int armscii8_ucs_table_max = 0xa0 + (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_ARMSCII8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h deleted file mode 100644 index f504713805376..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The authors of this file: PHP3 internationalization team - * You can contact the primary author 金本 茂 . - * - */ - -#ifndef UNICODE_TABLE_CP1251_H - -/* cp1251 to Unicode table */ -static const unsigned short cp1251_ucs_table[] = { - 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, - 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, - 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, - 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, - 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, - 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, - 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f -}; -static const int cp1251_ucs_table_min = 0x80; -static const int cp1251_ucs_table_len = (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); -static const int cp1251_ucs_table_max = 0x80 + (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP1251_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h index 92d20893cd677..9eb813885b3df 100644 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h @@ -32,9 +32,9 @@ * as it only covers this range, while the rest cover 0xa0 onwards */ static const unsigned short cp1252_ucs_table[] = { - 0x20ac,0xfffd,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021, - 0x02c6,0x2030,0x0160,0x2039,0x0152,0xfffd,0x017d,0xfffd, - 0xfffd,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014, - 0x02dc,0x2122,0x0161,0x203a,0x0153,0xfffd,0x017e,0x0178 + 0x20ac,0x0000,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021, + 0x02c6,0x2030,0x0160,0x2039,0x0152,0x0000,0x017d,0x0000, + 0x0000,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014, + 0x02dc,0x2122,0x0161,0x203a,0x0153,0x0000,0x017e,0x0178 }; #endif /* UNICODE_TABLE_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h deleted file mode 100644 index 7a9c4424add5f..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The authors of this file: PHP3 internationalization team - * You can contact the primary author 金本 茂 . - * - */ - -#ifndef UNICODE_TABLE_CP1254_H - -/* cp1254 to Unicode table */ -static const unsigned short cp1254_ucs_table[] = { - 0x20ac, 0xfffe, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffe, 0xfffe, 0xfffe, - 0xfffe, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffe, 0xfffe, 0x0178, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; -static const int cp1254_ucs_table_min = 0x80; -static const int cp1254_ucs_table_len = (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); -static const int cp1254_ucs_table_max = 0x80 + (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp850.h b/ext/mbstring/libmbfl/filters/unicode_table_cp850.h deleted file mode 100644 index 57fb61dbc9dda..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp850.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa - * Adaption for CP850: D. Giffeler - * - */ - -#ifndef UNICODE_TABLE_CP850_H -#define UNICODE_TABLE_CP850_H - -/* cp850_DOS to Unicode table */ -static const unsigned short cp850_ucs_table[] = { - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7 -, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5 -, 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9 -, 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192 -, 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba -, 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb -, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0 -, 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510 -, 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3 -, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4 -, 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce -, 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580 -, 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe -, 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4 -, 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8 -, 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; -static const int cp850_ucs_table_min = 0x80; -static const int cp850_ucs_table_len = (sizeof (cp850_ucs_table) / sizeof (unsigned short)); -static const int cp850_ucs_table_max = 0x80 + (sizeof (cp850_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h b/ext/mbstring/libmbfl/filters/unicode_table_cp866.h deleted file mode 100644 index 468e1a77c2b85..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The original author of this file: Den V. Tsopa - * - */ - -#ifndef UNICODE_TABLE_CP866_H -#define UNICODE_TABLE_CP866_H - -/* cp866_DOSCyrillicRussian to Unicode table */ -static const unsigned short cp866_ucs_table[] = { - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0 -}; -static const int cp866_ucs_table_min = 0x80; -static const int cp866_ucs_table_len = (sizeof (cp866_ucs_table) / sizeof (unsigned short)); -static const int cp866_ucs_table_max = 0x80 + (sizeof (cp866_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h deleted file mode 100644 index 2b6b78f32bd67..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_10_H -static const int iso8859_10_ucs_table[] = { - 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, - 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, - 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, - 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138 -}; -#endif /* UNICODE_TABLE_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h deleted file mode 100644 index 5822396525c5e..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_13_H -static const int iso8859_13_ucs_table[] = { - 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, - 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, - 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, - 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, - 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, - 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, - 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, - 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, - 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, - 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, - 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019 -}; -#endif /* UNICODE_TABLE_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h deleted file mode 100644 index 6bd03b367ab43..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_14_H -static const int iso8859_14_ucs_table[] = { - 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, - 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, - 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, - 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h deleted file mode 100644 index 029a2bcfc4e43..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_15_H -static const int iso8859_15_ucs_table[] = { - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, - 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h deleted file mode 100644 index 555472d0dc149..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLEISO8859_16_H -static const int iso8859_16_ucs_table[] = { - 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, - 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, - 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, - 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, - 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff -}; -#endif /* UNICODE_TABLEISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h deleted file mode 100644 index 12bb3cb2dc3e3..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_2_H -static const int iso8859_2_ucs_table[] = { - 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, - 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, - 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, - 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, - 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, - 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, - 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, - 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, - 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, - 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h deleted file mode 100644 index f50c348affed6..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_3_H -static const int iso8859_3_ucs_table[] = { - 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7, - 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b, - 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, - 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, - 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, - 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h deleted file mode 100644 index ff7ecdb4c0b80..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_4_H -static const int iso8859_4_ucs_table[] = { - 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, - 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, - 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, - 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, - 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, - 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h deleted file mode 100644 index 411ab84b60574..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_5_H -static const int iso8859_5_ucs_table[] = { - 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f -}; -#endif /* UNICODE_TABLE_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h deleted file mode 100644 index 0b3952e3a0b87..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_6_H -static const int iso8859_6_ucs_table[] = { - 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, - 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, - 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, - 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, - 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h deleted file mode 100644 index 687f4cbc744af..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_7_H -static const int iso8859_7_ucs_table[] = { - 0x00a0, 0x2018, 0x2019, 0x00a3, 0x20ac, 0x20af, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x037a, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, - 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h deleted file mode 100644 index 4ec6490bae49b..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_8_H -static const int iso8859_8_ucs_table[] = { - 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h deleted file mode 100644 index 12f988ad7a2af..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_9_H -static const int iso8859_9_ucs_table[] = { - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h deleted file mode 100644 index fc850e5685087..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The original author of this file: Den V. Tsopa - * - */ - -#ifndef UNICODE_TABLE_KOI8R_H -#define UNICODE_TABLE_KOI8R_H - -/* KOI8-R (RFC1489) to Unicode */ -static const unsigned short koi8r_ucs_table[] = { - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; -static const int koi8r_ucs_table_min = 0x80; -static const int koi8r_ucs_table_len = (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); -static const int koi8r_ucs_table_max = 0x80 + (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); - - - -#endif /* UNNICODE_TABLE_KOI8R_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h deleted file mode 100644 index e59c685fe857a..0000000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko - * - */ - -#ifndef UNICODE_TABLE_KOI8U_H -#define UNICODE_TABLE_KOI8U_H - -/* KOI8-U (RFC2319) to Unicode */ -static const unsigned short koi8u_ucs_table[] = { - 0x2500, /* BOX DRAWINGS LIGHT HORIZONTAL */ - 0x2502, /* BOX DRAWINGS LIGHT VERTICAL */ - 0x250C, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ - 0x2510, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ - 0x2514, /* BOX DRAWINGS LIGHT UP AND RIGHT */ - 0x2518, /* BOX DRAWINGS LIGHT UP AND LEFT */ - 0x251C, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ - 0x2524, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ - 0x252C, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ - 0x2534, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ - 0x253C, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ - 0x2580, /* UPPER HALF BLOCK */ - 0x2584, /* LOWER HALF BLOCK */ - 0x2588, /* FULL BLOCK */ - 0x258C, /* LEFT HALF BLOCK */ - 0x2590, /* RIGHT HALF BLOCK */ - 0x2591, /* LIGHT SHADE */ - 0x2592, /* MEDIUM SHADE */ - 0x2593, /* DARK SHADE */ - 0x2320, /* TOP HALF INTEGRAL */ - 0x25A0, /* BLACK SQUARE */ - 0x2219, /* BULLET OPERATOR */ - 0x221A, /* SQUARE ROOT */ - 0x2248, /* ALMOST EQUAL TO */ - 0x2264, /* LESS THAN OR EQUAL TO */ - 0x2265, /* GREATER THAN OR EQUAL TO */ - 0x00A0, /* NO-BREAK SPACE */ - 0x2321, /* BOTTOM HALF INTEGRAL */ - 0x00B0, /* DEGREE SIGN */ - 0x00B2, /* SUPERSCRIPT TWO */ - 0x00B7, /* MIDDLE DOT */ - 0x00F7, /* DIVISION SIGN */ - 0x2550, /* BOX DRAWINGS DOUBLE HORIZONTAL */ - 0x2551, /* BOX DRAWINGS DOUBLE VERTICAL */ - 0x2552, /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ - 0x0451, /* CYRILLIC SMALL LETTER IO */ - 0x0454, /* CYRILLIC SMALL LETTER UKRAINIAN IE */ - 0x2554, /* BOX DRAWINGS DOUBLE DOWN AND RIGHT */ - 0x0456, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ - 0x0457, /* CYRILLIC SMALL LETTER YI (UKRAINIAN) */ - 0x2557, /* BOX DRAWINGS DOUBLE DOWN AND LEFT */ - 0x2558, /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ - 0x2559, /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ - 0x255A, /* BOX DRAWINGS DOUBLE UP AND RIGHT */ - 0x255B, /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ - 0x0491, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */ - 0x255D, /* BOX DRAWINGS DOUBLE UP AND LEFT */ - 0x255E, /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ - 0x255F, /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ - 0x2560, /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ - 0x2561, /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */ - 0x0401, /* CYRILLIC CAPITAL LETTER IO */ - 0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ - 0x2563, /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT */ - 0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ - 0x0407, /* CYRILLIC CAPITAL LETTER YI (UKRAINIAN) */ - 0x2566, /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ - 0x2567, /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ - 0x2568, /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ - 0x2569, /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ - 0x256A, /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ - 0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ - 0x256C, /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ - 0x00A9, /* COPYRIGHT SIGN */ - 0x044E, /* CYRILLIC SMALL LETTER YU */ - 0x0430, /* CYRILLIC SMALL LETTER A */ - 0x0431, /* CYRILLIC SMALL LETTER BE */ - 0x0446, /* CYRILLIC SMALL LETTER TSE */ - 0x0434, /* CYRILLIC SMALL LETTER DE */ - 0x0435, /* CYRILLIC SMALL LETTER IE */ - 0x0444, /* CYRILLIC SMALL LETTER EF */ - 0x0433, /* CYRILLIC SMALL LETTER GHE */ - 0x0445, /* CYRILLIC SMALL LETTER KHA */ - 0x0438, /* CYRILLIC SMALL LETTER I */ - 0x0439, /* CYRILLIC SMALL LETTER SHORT I */ - 0x043A, /* CYRILLIC SMALL LETTER KA */ - 0x043B, /* CYRILLIC SMALL LETTER EL */ - 0x043C, /* CYRILLIC SMALL LETTER EM */ - 0x043D, /* CYRILLIC SMALL LETTER EN */ - 0x043E, /* CYRILLIC SMALL LETTER O */ - 0x043F, /* CYRILLIC SMALL LETTER PE */ - 0x044F, /* CYRILLIC SMALL LETTER YA */ - 0x0440, /* CYRILLIC SMALL LETTER ER */ - 0x0441, /* CYRILLIC SMALL LETTER ES */ - 0x0442, /* CYRILLIC SMALL LETTER TE */ - 0x0443, /* CYRILLIC SMALL LETTER U */ - 0x0436, /* CYRILLIC SMALL LETTER ZHE */ - 0x0432, /* CYRILLIC SMALL LETTER VE */ - 0x044C, /* CYRILLIC SMALL LETTER SOFT SIGN */ - 0x044B, /* CYRILLIC SMALL LETTER YERU */ - 0x0437, /* CYRILLIC SMALL LETTER ZE */ - 0x0448, /* CYRILLIC SMALL LETTER SHA */ - 0x044D, /* CYRILLIC SMALL LETTER E */ - 0x0449, /* CYRILLIC SMALL LETTER SHCHA */ - 0x0447, /* CYRILLIC SMALL LETTER CHE */ - 0x044A, /* CYRILLIC SMALL LETTER HARD SIGN */ - 0x042E, /* CYRILLIC CAPITAL LETTER YU */ - 0x0410, /* CYRILLIC CAPITAL LETTER A */ - 0x0411, /* CYRILLIC CAPITAL LETTER BE */ - 0x0426, /* CYRILLIC CAPITAL LETTER TSE */ - 0x0414, /* CYRILLIC CAPITAL LETTER DE */ - 0x0415, /* CYRILLIC CAPITAL LETTER IE */ - 0x0424, /* CYRILLIC CAPITAL LETTER EF */ - 0x0413, /* CYRILLIC CAPITAL LETTER GHE */ - 0x0425, /* CYRILLIC CAPITAL LETTER KHA */ - 0x0418, /* CYRILLIC CAPITAL LETTER I */ - 0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */ - 0x041A, /* CYRILLIC CAPITAL LETTER KA */ - 0x041B, /* CYRILLIC CAPITAL LETTER EL */ - 0x041C, /* CYRILLIC CAPITAL LETTER EM */ - 0x041D, /* CYRILLIC CAPITAL LETTER EN */ - 0x041E, /* CYRILLIC CAPITAL LETTER O */ - 0x041F, /* CYRILLIC CAPITAL LETTER PE */ - 0x042F, /* CYRILLIC CAPITAL LETTER YA */ - 0x0420, /* CYRILLIC CAPITAL LETTER ER */ - 0x0421, /* CYRILLIC CAPITAL LETTER ES */ - 0x0422, /* CYRILLIC CAPITAL LETTER TE */ - 0x0423, /* CYRILLIC CAPITAL LETTER U */ - 0x0416, /* CYRILLIC CAPITAL LETTER ZHE */ - 0x0412, /* CYRILLIC CAPITAL LETTER VE */ - 0x042C, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ - 0x042B, /* CYRILLIC CAPITAL LETTER YERU */ - 0x0417, /* CYRILLIC CAPITAL LETTER ZE */ - 0x0428, /* CYRILLIC CAPITAL LETTER SHA */ - 0x042D, /* CYRILLIC CAPITAL LETTER E */ - 0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */ - 0x0427, /* CYRILLIC CAPITAL LETTER CHE */ - 0x042A /* CYRILLIC CAPITAL LETTER HARD SIGN */ -}; -static const int koi8u_ucs_table_min = 0x80; -static const int koi8u_ucs_table_len = (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); -static const int koi8u_ucs_table_max = 0x80 + (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); - - - -#endif /* UNNICODE_TABLE_KOI8U_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c index 793dd8e078194..a20960f92651c 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -86,9 +86,11 @@ #include "mbfl_filter_output.h" #include "mbfilter_8bit.h" #include "mbfilter_wchar.h" -#include "filters/mbfilter_ascii.h" +#include "mbstring.h" +#include "php_unicode.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" +#include "filters/mbfilter_singlebyte.h" #include "filters/mbfilter_tl_jisx0201_jisx0208.h" #include "filters/mbfilter_utf8.h" @@ -200,7 +202,6 @@ size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *str size_t n; unsigned char *p; mbfl_convert_filter *filter; - int (*filter_function)(int c, mbfl_convert_filter *filter); ZEND_ASSERT(convd); ZEND_ASSERT(string); @@ -212,9 +213,8 @@ size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *str filter = convd->filter1; if (filter != NULL) { - filter_function = filter->filter_function; while (n > 0) { - if ((*filter_function)(*p++, filter) < 0) { + if ((*filter->filter_function)(*p++, filter) < 0) { return p - string->val; } n--; @@ -234,9 +234,6 @@ mbfl_buffer_converter_flush(mbfl_buffer_converter *convd) if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } return 0; } @@ -262,9 +259,6 @@ mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *str if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } result->encoding = convd->to; return mbfl_memory_device_result(&convd->device, result); } @@ -291,126 +285,102 @@ size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd) /* * encoding detector */ -mbfl_encoding_detector * -mbfl_encoding_detector_new(const mbfl_encoding **elist, int elistsz, int strict) +static int mbfl_estimate_encoding_likelihood(int c, void* data) { - mbfl_encoding_detector *identd; - - int i, num; - mbfl_identify_filter *filter; + mbfl_convert_filter *filter = *((mbfl_convert_filter**)data); + uintptr_t *score = (uintptr_t*)(&filter->opaque); + + /* Receive wchars decoded from test string using candidate encoding + * If the test string was invalid in the candidate encoding, we assume + * it's the wrong one. */ + if (c & MBFL_WCSGROUP_THROUGH) { + filter->num_illegalchar++; + } else if (php_unicode_is_cntrl(c) || php_unicode_is_private(c)) { + /* Otherwise, count how many control characters and 'private use' + * codepoints we see. Those are rarely used and may indicate that + * the candidate encoding is not the right one. */ + *score += 10; + } else if (php_unicode_is_punct(c)) { + /* Punctuation is also less common than letters/digits */ + (*score)++; + } + return c; +} - if (elist == NULL || elistsz <= 0) { +mbfl_encoding_detector *mbfl_encoding_detector_new(const mbfl_encoding **elist, int elistsz, int strict) +{ + if (!elistsz) { return NULL; } - /* allocate */ - identd = emalloc(sizeof(mbfl_encoding_detector)); - identd->filter_list = ecalloc(elistsz, sizeof(mbfl_identify_filter *)); - - /* create filters */ - i = 0; - num = 0; - while (i < elistsz) { - filter = mbfl_identify_filter_new2(elist[i]); - if (filter != NULL) { - identd->filter_list[num] = filter; - num++; - } - i++; + mbfl_encoding_detector *identd = emalloc(sizeof(mbfl_encoding_detector)); + identd->filter_list = ecalloc(elistsz, sizeof(mbfl_convert_filter*)); + for (int i = 0; i < elistsz; i++) { + identd->filter_list[i] = mbfl_convert_filter_new(elist[i], &mbfl_encoding_wchar, + mbfl_estimate_encoding_likelihood, NULL, &identd->filter_list[i]); + identd->filter_list[i]->opaque = (void*)0; } - identd->filter_list_size = num; - - /* set strict flag */ + identd->filter_list_size = elistsz; identd->strict = strict; - return identd; } - -void -mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) +void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) { - int i; - - if (identd != NULL) { - if (identd->filter_list != NULL) { - i = identd->filter_list_size; - while (i > 0) { - i--; - mbfl_identify_filter_delete(identd->filter_list[i]); - } - efree((void *)identd->filter_list); - } - efree((void *)identd); + for (int i = 0; i < identd->filter_list_size; i++) { + mbfl_convert_filter_delete(identd->filter_list[i]); } + efree(identd->filter_list); + efree(identd); } -int -mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string) +int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string) { - int res = 0; - /* feed data */ - if (identd != NULL && string != NULL && string->val != NULL) { - int num = identd->filter_list_size; - size_t n = string->len; - unsigned char *p = string->val; - int bad = 0; - while (n > 0) { - int i; - for (i = 0; i < num; i++) { - mbfl_identify_filter *filter = identd->filter_list[i]; - if (!filter->flag) { - (*filter->filter_function)(*p, filter); - if (filter->flag) { - bad++; - } + int num = identd->filter_list_size; + size_t n = string->len; + unsigned char *p = string->val; + int bad = 0; + + while (n--) { + for (int i = 0; i < num; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + if (!filter->num_illegalchar) { + (*filter->filter_function)(*p, filter); + if (filter->num_illegalchar) { + bad++; } } - if ((num - 1) <= bad) { - res = 1; - break; - } - p++; - n--; } + if ((num - 1) <= bad && !identd->strict) { + return 1; + } + p++; } - return res; + if (identd->strict) { + for (int i = 0; i < num; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + (filter->filter_flush)(filter); + } + } + + return 0; } const mbfl_encoding *mbfl_encoding_detector_judge(mbfl_encoding_detector *identd) { - mbfl_identify_filter *filter; - const mbfl_encoding *encoding = NULL; - int n; - - /* judge */ - if (identd != NULL) { - n = identd->filter_list_size - 1; - while (n >= 0) { - filter = identd->filter_list[n]; - if (!filter->flag) { - if (!identd->strict || !filter->status) { - encoding = filter->encoding; - } - } - n--; - } + uintptr_t best_score = UINT_MAX; /* Low score is 'better' */ + const mbfl_encoding *enc = NULL; - /* fallback judge */ - if (!encoding) { - n = identd->filter_list_size - 1; - while (n >= 0) { - filter = identd->filter_list[n]; - if (!filter->flag) { - encoding = filter->encoding; - } - n--; - } + for (int i = 0; i < identd->filter_list_size; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + if (!filter->num_illegalchar && (uintptr_t)filter->opaque < best_score) { + enc = filter->from; + best_score = (uintptr_t)filter->opaque; } } - return encoding; + return enc; } /* @@ -479,83 +449,19 @@ mbfl_convert_encoding( return mbfl_memory_device_result(&device, result); } - /* * identify encoding */ -const mbfl_encoding * -mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict) +const mbfl_encoding *mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict) { - int i, num, bad; - size_t n; - unsigned char *p; - mbfl_identify_filter *flist, *filter; - const mbfl_encoding *encoding; - - /* flist is an array of mbfl_identify_filter instances */ - flist = ecalloc(elistsz, sizeof(mbfl_identify_filter)); - - num = 0; - if (elist != NULL) { - for (i = 0; i < elistsz; i++) { - if (!mbfl_identify_filter_init2(&flist[num], elist[i])) { - num++; - } - } - } - - /* feed data */ - n = string->len; - p = string->val; - - if (p != NULL) { - bad = 0; - while (n > 0) { - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag) { - (*filter->filter_function)(*p, filter); - if (filter->flag) { - bad++; - } - } - } - if ((num - 1) <= bad && !strict) { - break; - } - p++; - n--; - } - } - - /* judge */ - encoding = NULL; - - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag) { - if (strict && filter->status) { - continue; - } - encoding = filter->encoding; - break; - } - } - - /* fall-back judge */ - if (!encoding) { - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag && (!strict || !filter->status)) { - encoding = filter->encoding; - break; - } - } + if (!elistsz) { + return NULL; } - - efree((void *)flist); - - return encoding; + mbfl_encoding_detector *identd = mbfl_encoding_detector_new(elist, elistsz, strict); + mbfl_encoding_detector_feed(identd, string); + const mbfl_encoding *enc = mbfl_encoding_detector_judge(identd); + mbfl_encoding_detector_delete(identd); + return enc; } /* diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.h b/ext/mbstring/libmbfl/mbfl/mbfilter.h index 16742be96c3da..b914a36c9eff3 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.h +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.h @@ -93,7 +93,6 @@ #include "mbfl_language.h" #include "mbfl_string.h" #include "mbfl_convert.h" -#include "mbfl_ident.h" /* Prefer local fix, otherwise need to include too much. */ #ifndef ssize_t @@ -156,7 +155,7 @@ MBFLAPI extern size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd); typedef struct _mbfl_encoding_detector mbfl_encoding_detector; struct _mbfl_encoding_detector { - mbfl_identify_filter **filter_list; + mbfl_convert_filter **filter_list; int filter_list_size; int strict; }; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c index f4c74946c11b8..4017829cf807b 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c @@ -43,7 +43,7 @@ const mbfl_encoding mbfl_encoding_8bit = { mbfl_no_encoding_8bit, "8bit", "8bit", - (const char *(*)[])&mbfl_encoding_8bit_aliases, + mbfl_encoding_8bit_aliases, NULL, MBFL_ENCTYPE_SBCS, &vtbl_8bit_wchar, diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c index 3d7cffe9c14f7..e43f746ecca45 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c @@ -38,7 +38,7 @@ const mbfl_encoding mbfl_encoding_pass = { mbfl_no_encoding_pass, "pass", NULL, - (const char *(*)[])&mbfl_encoding_pass_aliases, + mbfl_encoding_pass_aliases, NULL, 0, NULL, diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h index 3e15400879466..0f57310d5e11f 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h @@ -51,33 +51,12 @@ #define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */ -#define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */ #define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */ -#define MBFL_WCSPLANE_CP1251 0x70f70000 -#define MBFL_WCSPLANE_CP866 0x70f80000 -#define MBFL_WCSPLANE_KOI8R 0x70f90000 -#define MBFL_WCSPLANE_8859_16 0x70fa0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_ARMSCII8 0x70fb0000 -#define MBFL_WCSPLANE_KOI8U 0x70fc0000 -#define MBFL_WCSPLANE_CP1254 0x70fd0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_CP850 0x70fe0000 /* 00h - FFh */ #define MBFL_WCSPLANE_GB18030 0x70ff0000 /* a1a1h-e3329a35h */ #define MBFL_WCSGROUP_MASK 0xffffff #define MBFL_WCSGROUP_UCS4MAX 0x70000000 diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c index 6a46c2b541a1f..cf35a4f4e4db4 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c @@ -57,29 +57,9 @@ #include "filters/mbfilter_euc_jp_2004.h" #include "filters/mbfilter_euc_jp_win.h" #include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" #include "filters/mbfilter_cp932.h" #include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" #include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" #include "filters/mbfilter_uuencode.h" @@ -90,13 +70,10 @@ #include "filters/mbfilter_utf8_mobile.h" #include "filters/mbfilter_utf16.h" #include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" #include "filters/mbfilter_ucs4.h" #include "filters/mbfilter_ucs2.h" #include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" +#include "filters/mbfilter_singlebyte.h" /* hex character table "0123456789ABCDEF" */ static char mbfl_hexchar_table[] = { @@ -115,7 +92,7 @@ static const struct mbfl_convert_vtbl *mbfl_special_filter_list[] = { NULL }; -static void mbfl_convert_filter_common_init(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to, +static void mbfl_convert_filter_init(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to, const struct mbfl_convert_vtbl *vtbl, output_function_t output_function, flush_function_t flush_function, void* data) { /* encoding structure */ @@ -136,13 +113,12 @@ static void mbfl_convert_filter_common_init(mbfl_convert_filter *filter, const m filter->filter_ctor = vtbl->filter_ctor; filter->filter_dtor = vtbl->filter_dtor; filter->filter_function = vtbl->filter_function; - filter->filter_flush = vtbl->filter_flush; + filter->filter_flush = (filter_flush_t)vtbl->filter_flush; filter->filter_copy = vtbl->filter_copy; (*filter->filter_ctor)(filter); } - mbfl_convert_filter* mbfl_convert_filter_new(const mbfl_encoding *from, const mbfl_encoding *to, output_function_t output_function, flush_function_t flush_function, void* data) { @@ -152,7 +128,7 @@ mbfl_convert_filter* mbfl_convert_filter_new(const mbfl_encoding *from, const mb } mbfl_convert_filter *filter = emalloc(sizeof(mbfl_convert_filter)); - mbfl_convert_filter_common_init(filter, from, to, vtbl, output_function, flush_function, data); + mbfl_convert_filter_init(filter, from, to, vtbl, output_function, flush_function, data); return filter; } @@ -163,7 +139,7 @@ mbfl_convert_filter* mbfl_convert_filter_new2(const struct mbfl_convert_vtbl *vt const mbfl_encoding *to_encoding = mbfl_no2encoding(vtbl->to); mbfl_convert_filter *filter = emalloc(sizeof(mbfl_convert_filter)); - mbfl_convert_filter_common_init(filter, from_encoding, to_encoding, vtbl, output_function, flush_function, data); + mbfl_convert_filter_init(filter, from_encoding, to_encoding, vtbl, output_function, flush_function, data); return filter; } @@ -195,7 +171,7 @@ unsigned char* mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, unsi int mbfl_convert_filter_flush(mbfl_convert_filter *filter) { (*filter->filter_flush)(filter); - return filter->flush_function ? (*filter->flush_function)(filter->data) : 0; + return 0; } void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to) @@ -210,8 +186,7 @@ void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding vtbl = &vtbl_pass; } - mbfl_convert_filter_common_init(filter, from, to, vtbl, - filter->output_function, filter->flush_function, filter->data); + mbfl_convert_filter_init(filter, from, to, vtbl, filter->output_function, filter->flush_function, filter->data); } void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest) @@ -287,9 +262,6 @@ int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter) case MBFL_WCSPLANE_GB18030: ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"GB+"); break; - case MBFL_WCSPLANE_8859_1: - ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"I8859_1+"); - break; default: ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"?+"); break; @@ -399,16 +371,12 @@ const struct mbfl_convert_vtbl* mbfl_convert_filter_get_vtbl(const mbfl_encoding */ void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter) { - filter->status = 0; - filter->cache = 0; + filter->status = filter->cache = 0; } int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter) { - filter->status = 0; - filter->cache = 0; - - if (filter->flush_function != NULL) { + if (filter->flush_function) { (*filter->flush_function)(filter->data); } return 0; diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c index 3ecb06553d2b6..e558fba4b91b8 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c @@ -61,30 +61,9 @@ #include "filters/mbfilter_euc_jp_win.h" #include "filters/mbfilter_euc_jp_2004.h" #include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" #include "filters/mbfilter_cp932.h" #include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" #include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" -#include "filters/mbfilter_iso8859_16.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" #include "filters/mbfilter_uuencode.h" @@ -95,13 +74,10 @@ #include "filters/mbfilter_utf8_mobile.h" #include "filters/mbfilter_utf16.h" #include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" #include "filters/mbfilter_ucs4.h" #include "filters/mbfilter_ucs2.h" #include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" +#include "filters/mbfilter_singlebyte.h" #ifndef HAVE_STRCASECMP #ifdef HAVE_STRICMP @@ -112,10 +88,6 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = { &mbfl_encoding_wchar, - &mbfl_encoding_byte2be, - &mbfl_encoding_byte2le, - &mbfl_encoding_byte4be, - &mbfl_encoding_byte4le, &mbfl_encoding_base64, &mbfl_encoding_uuencode, &mbfl_encoding_html_ent, @@ -199,44 +171,32 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = { NULL }; -/* encoding resolver */ -const mbfl_encoding * -mbfl_name2encoding(const char *name) +const mbfl_encoding *mbfl_name2encoding(const char *name) { - const mbfl_encoding *encoding; - int i, j; + const mbfl_encoding **encoding; - if (name == NULL) { - return NULL; - } - - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ - if (strcasecmp(encoding->name, name) == 0) { - return encoding; + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if (strcasecmp((*encoding)->name, name) == 0) { + return *encoding; } } - /* serch MIME charset name */ - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { - if (encoding->mime_name != NULL) { - if (strcasecmp(encoding->mime_name, name) == 0) { - return encoding; + /* search MIME charset name */ + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->mime_name) { + if (strcasecmp((*encoding)->mime_name, name) == 0) { + return *encoding; } } } - /* serch aliases */ - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { - if (encoding->aliases != NULL) { - j = 0; - while ((*encoding->aliases)[j] != NULL) { - if (strcasecmp((*encoding->aliases)[j], name) == 0) { - return encoding; + /* search aliases */ + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->aliases) { + for (const char **alias = (*encoding)->aliases; *alias; alias++) { + if (strcasecmp(*alias, name) == 0) { + return *encoding; } - j++; } } } @@ -244,63 +204,45 @@ mbfl_name2encoding(const char *name) return NULL; } -const mbfl_encoding * -mbfl_no2encoding(enum mbfl_no_encoding no_encoding) +const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; - int i; + const mbfl_encoding **encoding; - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ - if (encoding->no_encoding == no_encoding) { - return encoding; + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->no_encoding == no_encoding) { + return *encoding; } } return NULL; } -enum mbfl_no_encoding -mbfl_name2no_encoding(const char *name) +enum mbfl_no_encoding mbfl_name2no_encoding(const char *name) { - const mbfl_encoding *encoding; - - encoding = mbfl_name2encoding(name); - if (encoding == NULL) { - return mbfl_no_encoding_invalid; - } else { - return encoding->no_encoding; - } + const mbfl_encoding *encoding = mbfl_name2encoding(name); + return encoding ? encoding->no_encoding : mbfl_no_encoding_invalid; } -const char * -mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) +const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; - - encoding = mbfl_no2encoding(no_encoding); - if (encoding == NULL) { - return ""; - } else { - return encoding->name; - } + const mbfl_encoding *encoding = mbfl_no2encoding(no_encoding); + return encoding ? encoding->name : ""; } -const mbfl_encoding ** -mbfl_get_supported_encodings(void) +const mbfl_encoding **mbfl_get_supported_encodings(void) { return mbfl_encoding_ptr_list; } -const char * -mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) +const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; + return mbfl_encoding_preferred_mime_name(mbfl_no2encoding(no_encoding)); +} - encoding = mbfl_no2encoding(no_encoding); - if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') { +const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding) +{ + if (encoding->mime_name && encoding->mime_name[0] != '\0') { return encoding->mime_name; - } else { - return NULL; } + return NULL; } diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h index 0b39153c9d645..40eb6e9bb9735 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h @@ -37,10 +37,6 @@ enum mbfl_no_encoding { mbfl_no_encoding_invalid = -1, mbfl_no_encoding_pass, mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2be, - mbfl_no_encoding_byte2le, - mbfl_no_encoding_byte4be, - mbfl_no_encoding_byte4le, mbfl_no_encoding_base64, mbfl_no_encoding_uuencode, mbfl_no_encoding_html_ent, @@ -145,19 +141,19 @@ typedef struct _mbfl_encoding { enum mbfl_no_encoding no_encoding; const char *name; const char *mime_name; - const char *(*aliases)[]; + const char **aliases; const unsigned char *mblen_table; unsigned int flag; const struct mbfl_convert_vtbl *input_filter; const struct mbfl_convert_vtbl *output_filter; } mbfl_encoding; -MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name); -MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name); +MBFLAPI extern const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding); MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name); -MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings(); -MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); -MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); - +MBFLAPI extern const mbfl_encoding **mbfl_get_supported_encodings(); +MBFLAPI extern const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding); #endif /* MBFL_ENCODING_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c deleted file mode 100644 index 18144eb030d83..0000000000000 --- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi on 20 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include - -#include "mbfl_ident.h" -#include "mbfilter_pass.h" -#include "mbfilter_8bit.h" -#include "mbfilter_wchar.h" - -#include "filters/mbfilter_euc_cn.h" -#include "filters/mbfilter_hz.h" -#include "filters/mbfilter_euc_tw.h" -#include "filters/mbfilter_big5.h" -#include "filters/mbfilter_uhc.h" -#include "filters/mbfilter_euc_kr.h" -#include "filters/mbfilter_iso2022_kr.h" -#include "filters/mbfilter_sjis.h" -#include "filters/mbfilter_sjis_open.h" -#include "filters/mbfilter_sjis_mobile.h" -#include "filters/mbfilter_jis.h" -#include "filters/mbfilter_iso2022_jp_ms.h" -#include "filters/mbfilter_iso2022jp_2004.h" -#include "filters/mbfilter_iso2022jp_mobile.h" -#include "filters/mbfilter_euc_jp.h" -#include "filters/mbfilter_euc_jp_win.h" -#include "filters/mbfilter_euc_jp_2004.h" -#include "filters/mbfilter_utf8_mobile.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" -#include "filters/mbfilter_cp932.h" -#include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" -#include "filters/mbfilter_cp51932.h" -#include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" -#include "filters/mbfilter_base64.h" -#include "filters/mbfilter_qprint.h" -#include "filters/mbfilter_uuencode.h" -#include "filters/mbfilter_7bit.h" -#include "filters/mbfilter_utf7.h" -#include "filters/mbfilter_utf7imap.h" -#include "filters/mbfilter_utf8.h" -#include "filters/mbfilter_utf16.h" -#include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" -#include "filters/mbfilter_ucs4.h" -#include "filters/mbfilter_ucs2.h" -#include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" - -static const struct mbfl_identify_vtbl vtbl_identify_false = { - mbfl_no_encoding_pass, - mbfl_filt_ident_false_ctor, - mbfl_filt_ident_false -}; - -static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = { - &vtbl_identify_utf8, - &vtbl_identify_utf7, - &vtbl_identify_ascii, - &vtbl_identify_eucjp, - &vtbl_identify_sjis, - &vtbl_identify_sjis_open, - &vtbl_identify_eucjpwin, - &vtbl_identify_eucjp2004, - &vtbl_identify_cp932, - &vtbl_identify_jis, - &vtbl_identify_2022jp, - &vtbl_identify_2022jpms, - &vtbl_identify_2022jp_2004, - &vtbl_identify_2022jp_kddi, - &vtbl_identify_cp51932, - &vtbl_identify_sjis_docomo, - &vtbl_identify_sjis_kddi, - &vtbl_identify_sjis_sb, - &vtbl_identify_utf8_docomo, - &vtbl_identify_utf8_kddi_a, - &vtbl_identify_utf8_kddi_b, - &vtbl_identify_utf8_sb, - &vtbl_identify_euccn, - &vtbl_identify_cp936, - &vtbl_identify_hz, - &vtbl_identify_euctw, - &vtbl_identify_big5, - &vtbl_identify_cp950, - &vtbl_identify_euckr, - &vtbl_identify_uhc, - &vtbl_identify_2022kr, - &vtbl_identify_cp1251, - &vtbl_identify_cp866, - &vtbl_identify_koi8r, - &vtbl_identify_koi8u, - &vtbl_identify_cp1252, - &vtbl_identify_cp1254, - &vtbl_identify_8859_1, - &vtbl_identify_8859_2, - &vtbl_identify_8859_3, - &vtbl_identify_8859_4, - &vtbl_identify_8859_5, - &vtbl_identify_8859_6, - &vtbl_identify_8859_7, - &vtbl_identify_8859_8, - &vtbl_identify_8859_9, - &vtbl_identify_8859_10, - &vtbl_identify_8859_13, - &vtbl_identify_8859_14, - &vtbl_identify_8859_15, - &vtbl_identify_armscii8, - &vtbl_identify_cp850, - &vtbl_identify_jis_ms, - &vtbl_identify_cp50220, - &vtbl_identify_cp50221, - &vtbl_identify_cp50222, - &vtbl_identify_gb18030, - &vtbl_identify_false, - NULL -}; - -/* - * identify filter - */ -const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding) -{ - const struct mbfl_identify_vtbl * vtbl; - int i; - - i = 0; - while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) { - if (vtbl->encoding == encoding) { - break; - } - } - - return vtbl; -} - -mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding) -{ - mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter)); - if (mbfl_identify_filter_init(filter, encoding)) { - efree(filter); - return NULL; - } - - return filter; -} - -mbfl_identify_filter *mbfl_identify_filter_new2(const mbfl_encoding *encoding) -{ - mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter)); - if (mbfl_identify_filter_init2(filter, encoding)) { - efree(filter); - return NULL; - } - - return filter; -} - - -int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding) -{ - const mbfl_encoding *enc = mbfl_no2encoding(encoding); - return mbfl_identify_filter_init2(filter, enc ? enc: &mbfl_encoding_pass); -} - -int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding) -{ - const struct mbfl_identify_vtbl *vtbl; - - /* encoding structure */ - filter->encoding = encoding; - - filter->status = 0; - filter->flag = 0; - filter->score = 0; - - /* setup the function table */ - vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding); - if (vtbl == NULL) { - vtbl = &vtbl_identify_false; - } - filter->filter_ctor = vtbl->filter_ctor; - filter->filter_function = vtbl->filter_function; - - /* constructor */ - (*filter->filter_ctor)(filter); - - return 0; -} - -void mbfl_identify_filter_delete(mbfl_identify_filter *filter) -{ - if (filter == NULL) { - return; - } - - efree((void*)filter); -} - -void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter) -{ - filter->status = 0; - filter->flag = 0; -} - -int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter) -{ - filter->flag = 1; /* bad */ - return c; -} - -void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter) -{ - filter->status = 0; - filter->flag = 1; -} - -int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter) -{ - return c; -} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h deleted file mode 100644 index c9afd03fb4d98..0000000000000 --- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.h - * by Moriyoshi Koizumi on 20 Dec 2002. The file - * mbfilter.h is included in this package . - * - */ - -#ifndef MBFL_IDENT_H -#define MBFL_IDENT_H - -#include "mbfl_defs.h" -#include "mbfl_encoding.h" - -/* - * identify filter - */ -typedef struct _mbfl_identify_filter mbfl_identify_filter; - -struct _mbfl_identify_filter { - void (*filter_ctor)(mbfl_identify_filter *filter); - int (*filter_function)(int c, mbfl_identify_filter *filter); - int status; - int flag; - int score; - const mbfl_encoding *encoding; -}; - -struct mbfl_identify_vtbl { - enum mbfl_no_encoding encoding; - void (*filter_ctor)(mbfl_identify_filter *filter); - int (*filter_function)(int c, mbfl_identify_filter *filter); -}; - -MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding); -MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding); -MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new2(const mbfl_encoding *encoding); -MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter); -MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding); -MBFLAPI extern int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding); - -MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter); -MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter); - -MBFLAPI extern int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter); -MBFLAPI extern int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter); - -#endif /* MBFL_IDENT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c index 09746efcd071e..cd064e5ee8faa 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c @@ -37,106 +37,67 @@ /* * memory device output functions */ -void -mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - device->length = 0; - device->buffer = NULL; - if (initsz > 0) { - device->buffer = emalloc(initsz); - device->length = initsz; - } - device->pos = 0; - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } - } + device->buffer = (initsz > 0) ? emalloc(initsz) : NULL; + device->length = initsz; + device->pos = 0; + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - if (initsz > device->length) { - device->buffer = erealloc(device->buffer, initsz); - device->length = initsz; - } - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + if (initsz > device->length) { + device->buffer = erealloc(device->buffer, initsz); + device->length = initsz; } + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_clear(mbfl_memory_device *device) +void mbfl_memory_device_clear(mbfl_memory_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -void -mbfl_memory_device_reset(mbfl_memory_device *device) +void mbfl_memory_device_reset(mbfl_memory_device *device) { - if (device) { - device->pos = 0; - } + device->pos = 0; } -void -mbfl_memory_device_unput(mbfl_memory_device *device) +void mbfl_memory_device_unput(mbfl_memory_device *device) { if (device->pos > 0) { device->pos--; } } -mbfl_string * -mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) +mbfl_string* mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) { - if (device && result) { - result->len = device->pos; - mbfl_memory_device_output('\0', device); - result->val = device->buffer; - device->buffer = NULL; - device->length = 0; - device->pos= 0; - if (result->val == NULL) { - result->len = 0; - result = NULL; - } - } else { - result = NULL; - } - + result->len = device->pos; + mbfl_memory_device_output('\0', device); + result->val = device->buffer; + device->buffer = NULL; + device->length = device->pos = 0; return result; } -int -mbfl_memory_device_output(int c, void *data) +int mbfl_memory_device_output(int c, void *data) { mbfl_memory_device *device = (mbfl_memory_device *)data; if (device->pos >= device->length) { /* reallocate buffer */ - size_t newlen; if (device->length > SIZE_MAX - device->allocsz) { /* overflow */ return -1; } - newlen = device->length + device->allocsz; + size_t newlen = device->length + device->allocsz; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } @@ -145,20 +106,15 @@ mbfl_memory_device_output(int c, void *data) return c; } -int -mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) +int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) { return mbfl_memory_device_strncat(device, psrc, strlen(psrc)); } -int -mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) +int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) { - unsigned char *w; - if (len > device->length - device->pos) { /* reallocate buffer */ - size_t newlen; if (len > SIZE_MAX - MBFL_MEMORY_DEVICE_ALLOC_SIZE || device->length > SIZE_MAX - (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)) { @@ -166,50 +122,41 @@ mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t return -1; } - newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; + size_t newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } - w = &device->buffer[device->pos]; + unsigned char *w = &device->buffer[device->pos]; memcpy(w, psrc, len); device->pos += len; return 0; } -int -mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) +int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) { - return mbfl_memory_device_strncat(dest, (const char *) src->buffer, src->pos); + return mbfl_memory_device_strncat(dest, (const char*)src->buffer, src->pos); } -void -mbfl_wchar_device_init(mbfl_wchar_device *device) +void mbfl_wchar_device_init(mbfl_wchar_device *device) { - if (device) { - device->buffer = NULL; - device->length = 0; - device->pos= 0; - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + device->buffer = NULL; + device->length = 0; + device->pos = 0; + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; } -void -mbfl_wchar_device_clear(mbfl_wchar_device *device) +void mbfl_wchar_device_clear(mbfl_wchar_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -int -mbfl_wchar_device_output(int c, void *data) +int mbfl_wchar_device_output(int c, void *data) { mbfl_wchar_device *device = (mbfl_wchar_device *)data; @@ -228,11 +175,10 @@ mbfl_wchar_device_output(int c, void *data) return -1; } - device->buffer = erealloc(device->buffer, newlen*sizeof(int)); + device->buffer = erealloc(device->buffer, newlen * sizeof(int)); device->length = newlen; } device->buffer[device->pos++] = c; - return c; } diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h index 7e86db3e06622..b8a188ec84e69 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h @@ -69,6 +69,4 @@ MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device); MBFLAPI extern int mbfl_wchar_device_output(int c, void *data); MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device); - - #endif /* MBFL_MEMORY_DEVICE_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.c b/ext/mbstring/libmbfl/mbfl/mbfl_string.c index a036356dd2ce1..760634e65d06d 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_string.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_string.c @@ -31,31 +31,22 @@ #include "mbfl_string.h" #include "mbfilter_pass.h" -/* - * string object - */ -void -mbfl_string_init(mbfl_string *string) +void mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding) { - string->encoding = &mbfl_encoding_pass; - string->val = (unsigned char*)NULL; + string->encoding = encoding; + string->val = NULL; string->len = 0; } -void -mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding) +void mbfl_string_init(mbfl_string *string) { - string->encoding = encoding; - string->val = (unsigned char*)NULL; - string->len = 0; + mbfl_string_init_set(string, &mbfl_encoding_pass); } -void -mbfl_string_clear(mbfl_string *string) +void mbfl_string_clear(mbfl_string *string) { - if (string->val != (unsigned char*)NULL) { + if (string->val) { efree(string->val); } - string->val = (unsigned char*)NULL; - string->len = 0; + mbfl_string_init_set(string, NULL); /* Poison it so any attempt to reuse will fail hard */ } diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index ba992af930be6..6d5541f073f81 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -34,12 +34,12 @@ #include "libmbfl/mbfl/mbfilter_8bit.h" #include "libmbfl/mbfl/mbfilter_pass.h" #include "libmbfl/mbfl/mbfilter_wchar.h" -#include "libmbfl/filters/mbfilter_ascii.h" #include "libmbfl/filters/mbfilter_base64.h" #include "libmbfl/filters/mbfilter_qprint.h" #include "libmbfl/filters/mbfilter_ucs4.h" #include "libmbfl/filters/mbfilter_utf8.h" #include "libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h" +#include "libmbfl/filters/mbfilter_singlebyte.h" #include "php_variables.h" #include "php_globals.h" @@ -1193,7 +1193,7 @@ PHP_FUNCTION(mb_language) ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_STR(name) + Z_PARAM_STR_OR_NULL(name) ZEND_PARSE_PARAMETERS_END(); if (name == NULL) { @@ -1221,7 +1221,7 @@ PHP_FUNCTION(mb_internal_encoding) ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_STRING(name, name_len) + Z_PARAM_STRING_OR_NULL(name, name_len) ZEND_PARSE_PARAMETERS_END(); if (name == NULL) { @@ -1252,7 +1252,7 @@ PHP_FUNCTION(mb_http_input) ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_STRING(type, type_len) + Z_PARAM_STRING_OR_NULL(type, type_len) ZEND_PARSE_PARAMETERS_END(); if (type == NULL) { @@ -1328,7 +1328,7 @@ PHP_FUNCTION(mb_http_output) ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_STRING(name, name_len) + Z_PARAM_STRING_OR_NULL(name, name_len) ZEND_PARSE_PARAMETERS_END(); if (name == NULL) { @@ -1497,9 +1497,6 @@ PHP_FUNCTION(mb_preferred_mime_name) } /* }}} */ -#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0) -#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0) - /* {{{ Parses GET/POST/COOKIE data and sets global variables */ PHP_FUNCTION(mb_parse_str) { @@ -1866,7 +1863,7 @@ PHP_FUNCTION(mb_strpos) Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) - Z_PARAM_STR(enc_name) + Z_PARAM_STR_OR_NULL(enc_name) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -1900,7 +1897,7 @@ PHP_FUNCTION(mb_strrpos) Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) - Z_PARAM_STR(enc_name) + Z_PARAM_STR_OR_NULL(enc_name) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -1934,7 +1931,7 @@ PHP_FUNCTION(mb_stripos) Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) - Z_PARAM_STR(from_encoding) + Z_PARAM_STR_OR_NULL(from_encoding) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -1969,7 +1966,7 @@ PHP_FUNCTION(mb_strripos) Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) - Z_PARAM_STR(from_encoding) + Z_PARAM_STR_OR_NULL(from_encoding) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -2010,7 +2007,7 @@ static void php_mb_strstr_variants(INTERNAL_FUNCTION_PARAMETERS, unsigned int va Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL Z_PARAM_BOOL(part) - Z_PARAM_STR(encoding_name) + Z_PARAM_STR_OR_NULL(encoding_name) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -2093,7 +2090,7 @@ PHP_FUNCTION(mb_substr_count) Z_PARAM_STRING(haystack_val, haystack.len) Z_PARAM_STRING(needle_val, needle.len) Z_PARAM_OPTIONAL - Z_PARAM_STR(enc_name) + Z_PARAM_STR_OR_NULL(enc_name) ZEND_PARSE_PARAMETERS_END(); haystack.val = (unsigned char*)haystack_val; @@ -2130,12 +2127,12 @@ PHP_FUNCTION(mb_substr) zend_bool len_is_null = 1; mbfl_string string, result, *ret; - ZEND_PARSE_PARAMETERS_START(2, 5) + ZEND_PARSE_PARAMETERS_START(2, 4) Z_PARAM_STRING(str, str_len) Z_PARAM_LONG(from) Z_PARAM_OPTIONAL Z_PARAM_LONG_OR_NULL(len, len_is_null) - Z_PARAM_STR(encoding) + Z_PARAM_STR_OR_NULL(encoding) ZEND_PARSE_PARAMETERS_END(); string.encoding = php_mb_get_encoding(encoding, 4); @@ -2194,12 +2191,12 @@ PHP_FUNCTION(mb_strcut) zend_bool len_is_null = 1; mbfl_string string, result, *ret; - ZEND_PARSE_PARAMETERS_START(2, 5) + ZEND_PARSE_PARAMETERS_START(2, 4) Z_PARAM_STRING(string_val, string.len) Z_PARAM_LONG(from) Z_PARAM_OPTIONAL Z_PARAM_LONG_OR_NULL(len, len_is_null) - Z_PARAM_STR(encoding) + Z_PARAM_STR_OR_NULL(encoding) ZEND_PARSE_PARAMETERS_END(); string.val = (unsigned char*)string_val; @@ -2255,7 +2252,7 @@ PHP_FUNCTION(mb_strwidth) ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STRING(string_val, string.len) Z_PARAM_OPTIONAL - Z_PARAM_STR(enc_name) + Z_PARAM_STR_OR_NULL(enc_name) ZEND_PARSE_PARAMETERS_END(); string.val = (unsigned char*)string_val; @@ -2285,7 +2282,7 @@ PHP_FUNCTION(mb_strimwidth) Z_PARAM_LONG(width) Z_PARAM_OPTIONAL Z_PARAM_STRING(trimmarker, trimmarker_len) - Z_PARAM_STR(encoding) + Z_PARAM_STR_OR_NULL(encoding) ZEND_PARSE_PARAMETERS_END(); string.encoding = marker.encoding = php_mb_get_encoding(encoding, 5); @@ -2587,7 +2584,7 @@ PHP_FUNCTION(mb_convert_case) Z_PARAM_STRING(str, str_len) Z_PARAM_LONG(case_mode) Z_PARAM_OPTIONAL - Z_PARAM_STR(from_encoding) + Z_PARAM_STR_OR_NULL(from_encoding) ZEND_PARSE_PARAMETERS_END(); const mbfl_encoding *enc = php_mb_get_encoding(from_encoding, 3); @@ -2620,7 +2617,7 @@ PHP_FUNCTION(mb_strtoupper) ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STRING(str, str_len) Z_PARAM_OPTIONAL - Z_PARAM_STR(from_encoding) + Z_PARAM_STR_OR_NULL(from_encoding) ZEND_PARSE_PARAMETERS_END(); const mbfl_encoding *enc = php_mb_get_encoding(from_encoding, 2); @@ -2651,7 +2648,7 @@ PHP_FUNCTION(mb_strtolower) ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STRING(str, str_len) Z_PARAM_OPTIONAL - Z_PARAM_STR(from_encoding) + Z_PARAM_STR_OR_NULL(from_encoding) ZEND_PARSE_PARAMETERS_END(); enc = php_mb_get_encoding(from_encoding, 2); @@ -2764,8 +2761,7 @@ PHP_FUNCTION(mb_encoding_aliases) array_init(return_value); if (encoding->aliases != NULL) { - const char **alias; - for (alias = *encoding->aliases; *alias; ++alias) { + for (const char **alias = encoding->aliases; *alias; ++alias) { add_next_index_string(return_value, (char *)*alias); } } @@ -2864,7 +2860,7 @@ PHP_FUNCTION(mb_convert_kana) Z_PARAM_STRING(string_val, string.len) Z_PARAM_OPTIONAL Z_PARAM_STRING(optstr, optstr_len) - Z_PARAM_STR(encname) + Z_PARAM_STR_OR_NULL(encname) ZEND_PARSE_PARAMETERS_END(); string.val = (unsigned char*)string_val; @@ -3195,7 +3191,7 @@ PHP_FUNCTION(mb_encode_numericentity) Z_PARAM_STRING(str, string.len) Z_PARAM_ARRAY_HT(target_hash) Z_PARAM_OPTIONAL - Z_PARAM_STR(encoding) + Z_PARAM_STR_OR_NULL(encoding) Z_PARAM_BOOL(is_hex) ZEND_PARSE_PARAMETERS_END(); @@ -3232,7 +3228,7 @@ PHP_FUNCTION(mb_decode_numericentity) Z_PARAM_STRING(str, string.len) Z_PARAM_ARRAY_HT(target_hash) Z_PARAM_OPTIONAL - Z_PARAM_STR(encoding) + Z_PARAM_STR_OR_NULL(encoding) ZEND_PARSE_PARAMETERS_END(); string.val = (unsigned char *)str; @@ -3649,7 +3645,7 @@ PHP_FUNCTION(mb_send_mail) if (!suppressed_hdrs.cnt_type) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1); - p = (char *)mbfl_no2preferred_mime_name(tran_cs->no_encoding); + p = (char *)mbfl_encoding_preferred_mime_name(tran_cs); if (p != NULL) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1); mbfl_memory_device_strcat(&device, p); @@ -3658,7 +3654,7 @@ PHP_FUNCTION(mb_send_mail) } if (!suppressed_hdrs.cnt_trans_enc) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER4, sizeof(PHP_MBSTR_MAIL_MIME_HEADER4) - 1); - p = (char *)mbfl_no2preferred_mime_name(body_enc->no_encoding); + p = (char *)mbfl_encoding_preferred_mime_name(body_enc); if (p == NULL) { p = "7bit"; } @@ -3859,70 +3855,43 @@ PHP_FUNCTION(mb_get_info) } /* }}} */ - -static inline mbfl_buffer_converter *php_mb_init_convd(const mbfl_encoding *encoding) +static int mbfl_filt_check_errors(int c, void* data) { - mbfl_buffer_converter *convd; - - convd = mbfl_buffer_converter_new(encoding, encoding, 0); - if (convd == NULL) { - return NULL; + if (c & MBFL_WCSGROUP_THROUGH) { + (*((mbfl_convert_filter**)data))->num_illegalchar++; } - mbfl_buffer_converter_illegal_mode(convd, MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE); - mbfl_buffer_converter_illegal_substchar(convd, 0); - return convd; + return c; } +MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding) +{ + mbfl_convert_filter *filter = mbfl_convert_filter_new(encoding, &mbfl_encoding_wchar, mbfl_filt_check_errors, NULL, &filter); -static inline int php_mb_check_encoding_impl(mbfl_buffer_converter *convd, const char *input, size_t length, const mbfl_encoding *encoding) { - mbfl_string string, result; - - mbfl_string_init_set(&string, encoding); - mbfl_string_init(&result); - - string.val = (unsigned char *) input; - string.len = length; - - mbfl_string *ret = mbfl_buffer_converter_feed_result(convd, &string, &result); - size_t illegalchars = mbfl_buffer_illegalchars(convd); - - if (ret != NULL) { - if (illegalchars == 0 && string.len == result.len && memcmp(string.val, result.val, string.len) == 0) { - mbfl_string_clear(&result); - return 1; + while (length--) { + unsigned char c = *input++; + (filter->filter_function)(c, filter); + if (filter->num_illegalchar) { + mbfl_convert_filter_delete(filter); + return 0; } - mbfl_string_clear(&result); } - return 0; -} -MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding) -{ - mbfl_buffer_converter *convd = php_mb_init_convd(encoding); - /* If this assertion fails this means some memory allocation failure which is a bug */ - ZEND_ASSERT(convd != NULL); - - int result = php_mb_check_encoding_impl(convd, input, length, encoding); - mbfl_buffer_converter_delete(convd); + (filter->filter_flush)(filter); + int result = !filter->num_illegalchar; + mbfl_convert_filter_delete(filter); return result; } static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding *encoding) { - mbfl_buffer_converter *convd; zend_long idx; zend_string *key; zval *entry; int valid = 1; - (void)(idx); - - convd = php_mb_init_convd(encoding); - /* If this assertion fails this means some memory allocation failure which is a bug */ - ZEND_ASSERT(convd != NULL); + (void)(idx); /* Suppress spurious compiler warning that `idx` is not used */ if (GC_IS_RECURSIVE(vars)) { - mbfl_buffer_converter_delete(convd); php_error_docref(NULL, E_WARNING, "Cannot not handle circular references"); return 0; } @@ -3930,14 +3899,14 @@ static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding ZEND_HASH_FOREACH_KEY_VAL(vars, idx, key, entry) { ZVAL_DEREF(entry); if (key) { - if (!php_mb_check_encoding_impl(convd, ZSTR_VAL(key), ZSTR_LEN(key), encoding)) { + if (!php_mb_check_encoding(ZSTR_VAL(key), ZSTR_LEN(key), encoding)) { valid = 0; break; } } switch (Z_TYPE_P(entry)) { case IS_STRING: - if (!php_mb_check_encoding_impl(convd, Z_STRVAL_P(entry), Z_STRLEN_P(entry), encoding)) { + if (!php_mb_check_encoding(Z_STRVAL_P(entry), Z_STRLEN_P(entry), encoding)) { valid = 0; break; } @@ -3961,11 +3930,9 @@ static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding } } ZEND_HASH_FOREACH_END(); GC_TRY_UNPROTECT_RECURSION(vars); - mbfl_buffer_converter_delete(convd); return valid; } - /* {{{ Check if the string is valid for the specified encoding */ PHP_FUNCTION(mb_check_encoding) { diff --git a/ext/mbstring/mbstring.stub.php b/ext/mbstring/mbstring.stub.php index 14bf595fcfc2d..46a4c59bd5157 100644 --- a/ext/mbstring/mbstring.stub.php +++ b/ext/mbstring/mbstring.stub.php @@ -93,10 +93,10 @@ function mb_chr(int $codepoint, ?string $encoding = null): string|false {} function mb_regex_encoding(?string $encoding = null): string|bool {} /** @param array $matches */ -function mb_ereg(string $pattern, string $string, &$matches = null): int|false {} +function mb_ereg(string $pattern, string $string, &$matches = null): bool {} /** @param array $matches */ -function mb_eregi(string $pattern, string $string, &$matches = null): int|false {} +function mb_eregi(string $pattern, string $string, &$matches = null): bool {} function mb_ereg_replace(string $pattern, string $replacement, string $string, ?string $options = null): string|false|null {} diff --git a/ext/mbstring/mbstring_arginfo.h b/ext/mbstring/mbstring_arginfo.h index ca91c5cd6fec5..46cc3adf7722d 100644 --- a/ext/mbstring/mbstring_arginfo.h +++ b/ext/mbstring/mbstring_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 3e5b45cf71fe75bde026062816cb28eceea4aa38 */ + * Stub hash: 51f0769423c046d612adf81091192165ad265456 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mb_language, 0, 0, MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, language, IS_STRING, 1, "null") @@ -205,7 +205,7 @@ ZEND_END_ARG_INFO() #endif #if defined(HAVE_MBREGEX) -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mb_ereg, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mb_ereg, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, matches, "null") diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 45aac7baf21c3..e87a7c6131f6f 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -891,7 +891,7 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase) size_t arg_pattern_len, string_len; php_mb_regex_t *re; OnigRegion *regs = NULL; - int i, match_len, beg, end; + int i, beg, end; OnigOptionType options; char *str; @@ -938,11 +938,8 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase) goto out; } - match_len = 1; str = string; if (array != NULL) { - - match_len = regs->end[0] - regs->beg[0]; for (i = 0; i < regs->num_regs; i++) { beg = regs->beg[i]; end = regs->end[i]; @@ -959,10 +956,7 @@ static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase) } } - if (match_len == 0) { - match_len = 1; - } - RETVAL_LONG(match_len); + RETVAL_TRUE; out: if (regs != NULL) { onig_region_free(regs, 1); diff --git a/ext/mbstring/tests/armscii8_encoding.phpt b/ext/mbstring/tests/armscii8_encoding.phpt new file mode 100644 index 0000000000000..b5bea077d0e20 --- /dev/null +++ b/ext/mbstring/tests/armscii8_encoding.phpt @@ -0,0 +1,32 @@ +--TEST-- +Exhaustive test of verification and conversion of ARMSCII-8 text +--SKIPIF-- + +--FILE-- + UTF-16BE\n"; + +findInvalidChars($fromUnicode, $invalid, $unused, array_fill_keys(range(0,0xFF), 2)); +convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'ARMSCII-8', '%'); +echo "Tested UTF-16BE -> ARMSCII-8\n"; +?> +--EXPECT-- +Tested ARMSCII-8 -> UTF-16BE +Tested UTF-16BE -> ARMSCII-8 diff --git a/ext/mbstring/tests/bug45722.phpt b/ext/mbstring/tests/bug45722.phpt index 97f6fe5d9761b..f0649cbb2ad39 100644 --- a/ext/mbstring/tests/bug45722.phpt +++ b/ext/mbstring/tests/bug45722.phpt @@ -7,4 +7,4 @@ Bug #45722 (mb_check_encoding() crashes) var_dump(mb_check_encoding("&\xc2\xb7 TEST TEST TEST TEST TEST TEST", "HTML-ENTITIES")); ?> --EXPECT-- -bool(false) +bool(true) diff --git a/ext/mbstring/tests/bug47399.phpt b/ext/mbstring/tests/bug47399.phpt deleted file mode 100644 index 3586e5cc7207a..0000000000000 --- a/ext/mbstring/tests/bug47399.phpt +++ /dev/null @@ -1,525 +0,0 @@ ---TEST-- -Bug #47399 (mb_check_encoding() returns true for some illegal SJIS characters) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(false) -bool(false) diff --git a/ext/mbstring/tests/bug62545.phpt b/ext/mbstring/tests/bug62545.phpt deleted file mode 100644 index 49ecc559d81c2..0000000000000 --- a/ext/mbstring/tests/bug62545.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #62545 (wrong unicode mapping in some charsets) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -string(6) "efbfbd" -string(30) "efbfbdefbfbdefbfbdefbfbdefbfbd" diff --git a/ext/mbstring/tests/bug78633.phpt b/ext/mbstring/tests/bug78633.phpt index a1d6dd5602f21..3114c6feb2eee 100644 --- a/ext/mbstring/tests/bug78633.phpt +++ b/ext/mbstring/tests/bug78633.phpt @@ -8,7 +8,7 @@ if (!function_exists('mb_eregi')) die('skip mb_eregi function not available'); --FILE-- +--FILE-- + +--EXPECT-- +Tested CP1251 -> UTF-16BE +Tested UTF-16BE -> CP1251 diff --git a/ext/mbstring/tests/cp1252_encoding.phpt b/ext/mbstring/tests/cp1252_encoding.phpt new file mode 100644 index 0000000000000..cc2d81fdcdd8d --- /dev/null +++ b/ext/mbstring/tests/cp1252_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP1252 text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested CP1252 -> UTF-16BE +Tested UTF-16BE -> CP1252 diff --git a/ext/mbstring/tests/cp1254_encoding.phpt b/ext/mbstring/tests/cp1254_encoding.phpt new file mode 100644 index 0000000000000..4d5bbf81ab3f9 --- /dev/null +++ b/ext/mbstring/tests/cp1254_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP1254 text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested CP1254 -> UTF-16BE +Tested UTF-16BE -> CP1254 diff --git a/ext/mbstring/tests/cp850_encoding.phpt b/ext/mbstring/tests/cp850_encoding.phpt new file mode 100644 index 0000000000000..c736da1e14237 --- /dev/null +++ b/ext/mbstring/tests/cp850_encoding.phpt @@ -0,0 +1,14 @@ +--TEST-- +Exhaustive test of verification and conversion of CP850 text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested CP850 -> UTF-16BE +Tested UTF-16BE -> CP850 diff --git a/ext/mbstring/tests/cp866_encoding.phpt b/ext/mbstring/tests/cp866_encoding.phpt new file mode 100644 index 0000000000000..774d9e44884d4 --- /dev/null +++ b/ext/mbstring/tests/cp866_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP866 text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested CP866 -> UTF-16BE +Tested UTF-16BE -> CP866 diff --git a/ext/mbstring/tests/data/8859-1.txt b/ext/mbstring/tests/data/8859-1.txt new file mode 100644 index 0000000000000..3a55afefc462f --- /dev/null +++ b/ext/mbstring/tests/data/8859-1.txt @@ -0,0 +1,292 @@ +# 8859-1.TXT +# Date: 2015-12-02 20:19:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-1:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-1:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-1 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x00A1 # INVERTED EXCLAMATION MARK +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00AA # FEMININE ORDINAL INDICATOR +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00BA # MASCULINE ORDINAL INDICATOR +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF # INVERTED QUESTION MARK +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) +0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/8859-10.txt b/ext/mbstring/tests/data/8859-10.txt new file mode 100644 index 0000000000000..0ec67d72ee0aa --- /dev/null +++ b/ext/mbstring/tests/data/8859-10.txt @@ -0,0 +1,292 @@ +# 8859-10.TXT +# Date: 2015-12-02 21:53:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-10:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 October 11 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-10:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-10 order. +# +# Version history +# 1.0 version new. +# 1.1 corrected mistake in mapping of 0xA4 +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON +0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON +0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE +0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xA7 0x00A7 # SECTION SIGN +0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE +0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON +0xAF 0x014A # LATIN CAPITAL LETTER ENG +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON +0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA +0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON +0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE +0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA +0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE +0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBD 0x2015 # HORIZONTAL BAR +0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON +0xBF 0x014B # LATIN SMALL LETTER ENG +0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) +0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) +0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) +0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA +0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) +0xFF 0x0138 # LATIN SMALL LETTER KRA diff --git a/ext/mbstring/tests/data/8859-11.txt b/ext/mbstring/tests/data/8859-11.txt new file mode 100644 index 0000000000000..5334e3c27687b --- /dev/null +++ b/ext/mbstring/tests/data/8859-11.txt @@ -0,0 +1,286 @@ +# 8859-11.TXT +# Date: 2015-12-02 21:55:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-11:2001 to Unicode +# Unicode version: 3.2 +# Table version: 2.0 +# Table format: Format A +# Date: 2002 October 7 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-11:2001 characters map into Unicode. +# +# ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with +# the addition of 0xA0 NO-BREAK SPACE. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-11 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-11 order. +# +# Version history: +# 2002 October 7 Created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0E01 # THAI CHARACTER KO KAI +0xA2 0x0E02 # THAI CHARACTER KHO KHAI +0xA3 0x0E03 # THAI CHARACTER KHO KHUAT +0xA4 0x0E04 # THAI CHARACTER KHO KHWAI +0xA5 0x0E05 # THAI CHARACTER KHO KHON +0xA6 0x0E06 # THAI CHARACTER KHO RAKHANG +0xA7 0x0E07 # THAI CHARACTER NGO NGU +0xA8 0x0E08 # THAI CHARACTER CHO CHAN +0xA9 0x0E09 # THAI CHARACTER CHO CHING +0xAA 0x0E0A # THAI CHARACTER CHO CHANG +0xAB 0x0E0B # THAI CHARACTER SO SO +0xAC 0x0E0C # THAI CHARACTER CHO CHOE +0xAD 0x0E0D # THAI CHARACTER YO YING +0xAE 0x0E0E # THAI CHARACTER DO CHADA +0xAF 0x0E0F # THAI CHARACTER TO PATAK +0xB0 0x0E10 # THAI CHARACTER THO THAN +0xB1 0x0E11 # THAI CHARACTER THO NANGMONTHO +0xB2 0x0E12 # THAI CHARACTER THO PHUTHAO +0xB3 0x0E13 # THAI CHARACTER NO NEN +0xB4 0x0E14 # THAI CHARACTER DO DEK +0xB5 0x0E15 # THAI CHARACTER TO TAO +0xB6 0x0E16 # THAI CHARACTER THO THUNG +0xB7 0x0E17 # THAI CHARACTER THO THAHAN +0xB8 0x0E18 # THAI CHARACTER THO THONG +0xB9 0x0E19 # THAI CHARACTER NO NU +0xBA 0x0E1A # THAI CHARACTER BO BAIMAI +0xBB 0x0E1B # THAI CHARACTER PO PLA +0xBC 0x0E1C # THAI CHARACTER PHO PHUNG +0xBD 0x0E1D # THAI CHARACTER FO FA +0xBE 0x0E1E # THAI CHARACTER PHO PHAN +0xBF 0x0E1F # THAI CHARACTER FO FAN +0xC0 0x0E20 # THAI CHARACTER PHO SAMPHAO +0xC1 0x0E21 # THAI CHARACTER MO MA +0xC2 0x0E22 # THAI CHARACTER YO YAK +0xC3 0x0E23 # THAI CHARACTER RO RUA +0xC4 0x0E24 # THAI CHARACTER RU +0xC5 0x0E25 # THAI CHARACTER LO LING +0xC6 0x0E26 # THAI CHARACTER LU +0xC7 0x0E27 # THAI CHARACTER WO WAEN +0xC8 0x0E28 # THAI CHARACTER SO SALA +0xC9 0x0E29 # THAI CHARACTER SO RUSI +0xCA 0x0E2A # THAI CHARACTER SO SUA +0xCB 0x0E2B # THAI CHARACTER HO HIP +0xCC 0x0E2C # THAI CHARACTER LO CHULA +0xCD 0x0E2D # THAI CHARACTER O ANG +0xCE 0x0E2E # THAI CHARACTER HO NOKHUK +0xCF 0x0E2F # THAI CHARACTER PAIYANNOI +0xD0 0x0E30 # THAI CHARACTER SARA A +0xD1 0x0E31 # THAI CHARACTER MAI HAN-AKAT +0xD2 0x0E32 # THAI CHARACTER SARA AA +0xD3 0x0E33 # THAI CHARACTER SARA AM +0xD4 0x0E34 # THAI CHARACTER SARA I +0xD5 0x0E35 # THAI CHARACTER SARA II +0xD6 0x0E36 # THAI CHARACTER SARA UE +0xD7 0x0E37 # THAI CHARACTER SARA UEE +0xD8 0x0E38 # THAI CHARACTER SARA U +0xD9 0x0E39 # THAI CHARACTER SARA UU +0xDA 0x0E3A # THAI CHARACTER PHINTHU +0xDF 0x0E3F # THAI CURRENCY SYMBOL BAHT +0xE0 0x0E40 # THAI CHARACTER SARA E +0xE1 0x0E41 # THAI CHARACTER SARA AE +0xE2 0x0E42 # THAI CHARACTER SARA O +0xE3 0x0E43 # THAI CHARACTER SARA AI MAIMUAN +0xE4 0x0E44 # THAI CHARACTER SARA AI MAIMALAI +0xE5 0x0E45 # THAI CHARACTER LAKKHANGYAO +0xE6 0x0E46 # THAI CHARACTER MAIYAMOK +0xE7 0x0E47 # THAI CHARACTER MAITAIKHU +0xE8 0x0E48 # THAI CHARACTER MAI EK +0xE9 0x0E49 # THAI CHARACTER MAI THO +0xEA 0x0E4A # THAI CHARACTER MAI TRI +0xEB 0x0E4B # THAI CHARACTER MAI CHATTAWA +0xEC 0x0E4C # THAI CHARACTER THANTHAKHAT +0xED 0x0E4D # THAI CHARACTER NIKHAHIT +0xEE 0x0E4E # THAI CHARACTER YAMAKKAN +0xEF 0x0E4F # THAI CHARACTER FONGMAN +0xF0 0x0E50 # THAI DIGIT ZERO +0xF1 0x0E51 # THAI DIGIT ONE +0xF2 0x0E52 # THAI DIGIT TWO +0xF3 0x0E53 # THAI DIGIT THREE +0xF4 0x0E54 # THAI DIGIT FOUR +0xF5 0x0E55 # THAI DIGIT FIVE +0xF6 0x0E56 # THAI DIGIT SIX +0xF7 0x0E57 # THAI DIGIT SEVEN +0xF8 0x0E58 # THAI DIGIT EIGHT +0xF9 0x0E59 # THAI DIGIT NINE +0xFA 0x0E5A # THAI CHARACTER ANGKHANKHU +0xFB 0x0E5B # THAI CHARACTER KHOMUT diff --git a/ext/mbstring/tests/data/8859-13.txt b/ext/mbstring/tests/data/8859-13.txt new file mode 100644 index 0000000000000..b613dc00e11d2 --- /dev/null +++ b/ext/mbstring/tests/data/8859-13.txt @@ -0,0 +1,291 @@ +# 8859-13.TXT +# Date: 2015-12-02 22:03:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-13:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-13:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-13 order. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00C6 # LATIN CAPITAL LETTER AE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x201C # LEFT DOUBLE QUOTATION MARK +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xBF 0x00E6 # LATIN SMALL LETTER AE +0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK +0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON +0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON +0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE +0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) +0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK +0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON +0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE +0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA +0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA +0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON +0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA +0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON +0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE +0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK +0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE +0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE +0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK diff --git a/ext/mbstring/tests/data/8859-14.txt b/ext/mbstring/tests/data/8859-14.txt new file mode 100644 index 0000000000000..3c3a02466ba42 --- /dev/null +++ b/ext/mbstring/tests/data/8859-14.txt @@ -0,0 +1,292 @@ +# 8859-14.TXT +# Date: 2015-12-02 22:05:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-14:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Markus Kuhn +# Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-14:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-14 order. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE +0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE +0xA3 0x00A3 # POUND SIGN +0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE +0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE +0xA7 0x00A7 # SECTION SIGN +0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE +0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE +0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE +0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE +0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE +0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE +0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE +0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE +0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE +0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE +0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS +0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/8859-15.txt b/ext/mbstring/tests/data/8859-15.txt new file mode 100644 index 0000000000000..f21a76360087c --- /dev/null +++ b/ext/mbstring/tests/data/8859-15.txt @@ -0,0 +1,294 @@ +# 8859-15.TXT +# Date: 2015-12-02 22:06:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-15:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Markus Kuhn +# Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-15:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-15 order. +# +# Version history +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x00A1 # INVERTED EXCLAMATION MARK +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x20AC # EURO SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xA7 0x00A7 # SECTION SIGN +0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00AA # FEMININE ORDINAL INDICATOR +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00BA # MASCULINE ORDINAL INDICATOR +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x0152 # LATIN CAPITAL LIGATURE OE +0xBD 0x0153 # LATIN SMALL LIGATURE OE +0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xBF 0x00BF # INVERTED QUESTION MARK +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x00D0 # LATIN CAPITAL LETTER ETH +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x00DE # LATIN CAPITAL LETTER THORN +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x00F0 # LATIN SMALL LETTER ETH +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x00FE # LATIN SMALL LETTER THORN +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/8859-16.txt b/ext/mbstring/tests/data/8859-16.txt new file mode 100644 index 0000000000000..4a05225a78320 --- /dev/null +++ b/ext/mbstring/tests/data/8859-16.txt @@ -0,0 +1,293 @@ +# 8859-16.TXT +# Date: 2015-12-02 22:08:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-16:2001 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 2001 July 26 (header updated: 2015 December 02) +# Authors: Markus Kuhn +# +# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-16:2001 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-16 order. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xA4 0x20AC # EURO SIGN +0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xA7 0x00A7 # SECTION SIGN +0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE +0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE +0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON +0xB9 0x010D # LATIN SMALL LETTER C WITH CARON +0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x0152 # LATIN CAPITAL LIGATURE OE +0xBD 0x0153 # LATIN SMALL LIGATURE OE +0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE +0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE +0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/8859-2.txt b/ext/mbstring/tests/data/8859-2.txt new file mode 100644 index 0000000000000..20da9ba993757 --- /dev/null +++ b/ext/mbstring/tests/data/8859-2.txt @@ -0,0 +1,292 @@ +# 8859-2.TXT +# Date: 2015-12-02 21:34:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-2:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-2:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-2 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x02D8 # BREVE +0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON +0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON +0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xB2 0x02DB # OGONEK +0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x013E # LATIN SMALL LETTER L WITH CARON +0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE +0xB7 0x02C7 # CARON +0xB8 0x00B8 # CEDILLA +0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON +0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE +0xBD 0x02DD # DOUBLE ACUTE ACCENT +0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE +0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON +0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE +0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x011B # LATIN SMALL LETTER E WITH CARON +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x010F # LATIN SMALL LETTER D WITH CARON +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE +0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON +0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA +0xFF 0x02D9 # DOT ABOVE diff --git a/ext/mbstring/tests/data/8859-3.txt b/ext/mbstring/tests/data/8859-3.txt new file mode 100644 index 0000000000000..5a6c5de547072 --- /dev/null +++ b/ext/mbstring/tests/data/8859-3.txt @@ -0,0 +1,285 @@ +# 8859-3.TXT +# Date: 2015-12-02 21:39:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-3:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-3:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-3 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE +0xA2 0x02D8 # BREVE +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE +0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE +0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0xAD 0x00AD # SOFT HYPHEN +0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I +0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE +0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE +0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE +0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE +0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX +0xFF 0x02D9 # DOT ABOVE diff --git a/ext/mbstring/tests/data/8859-4.txt b/ext/mbstring/tests/data/8859-4.txt new file mode 100644 index 0000000000000..e2f5e725fd8c4 --- /dev/null +++ b/ext/mbstring/tests/data/8859-4.txt @@ -0,0 +1,292 @@ +# 8859-4.TXT +# Date: 2015-12-02 21:41:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-4:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-4:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-4 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x0138 # LATIN SMALL LETTER KRA +0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE +0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON +0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xB2 0x02DB # OGONEK +0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE +0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA +0xB7 0x02C7 # CARON +0xB8 0x00B8 # CEDILLA +0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON +0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA +0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE +0xBD 0x014A # LATIN CAPITAL LETTER ENG +0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBF 0x014B # LATIN SMALL LETTER ENG +0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON +0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE +0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA +0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON +0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE +0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON +0xFF 0x02D9 # DOT ABOVE diff --git a/ext/mbstring/tests/data/8859-5.txt b/ext/mbstring/tests/data/8859-5.txt new file mode 100644 index 0000000000000..a574c3feaf3cc --- /dev/null +++ b/ext/mbstring/tests/data/8859-5.txt @@ -0,0 +1,292 @@ +# 8859-5.TXT +# Date: 2015-12-02 21:43:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-5:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-5:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-5 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO +0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE +0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE +0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE +0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI +0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE +0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE +0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE +0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE +0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U +0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE +0xB0 0x0410 # CYRILLIC CAPITAL LETTER A +0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE +0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE +0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE +0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE +0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE +0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE +0xB8 0x0418 # CYRILLIC CAPITAL LETTER I +0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0xBA 0x041A # CYRILLIC CAPITAL LETTER KA +0xBB 0x041B # CYRILLIC CAPITAL LETTER EL +0xBC 0x041C # CYRILLIC CAPITAL LETTER EM +0xBD 0x041D # CYRILLIC CAPITAL LETTER EN +0xBE 0x041E # CYRILLIC CAPITAL LETTER O +0xBF 0x041F # CYRILLIC CAPITAL LETTER PE +0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER +0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES +0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE +0xC3 0x0423 # CYRILLIC CAPITAL LETTER U +0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF +0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA +0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE +0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE +0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA +0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU +0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0xCD 0x042D # CYRILLIC CAPITAL LETTER E +0xCE 0x042E # CYRILLIC CAPITAL LETTER YU +0xCF 0x042F # CYRILLIC CAPITAL LETTER YA +0xD0 0x0430 # CYRILLIC SMALL LETTER A +0xD1 0x0431 # CYRILLIC SMALL LETTER BE +0xD2 0x0432 # CYRILLIC SMALL LETTER VE +0xD3 0x0433 # CYRILLIC SMALL LETTER GHE +0xD4 0x0434 # CYRILLIC SMALL LETTER DE +0xD5 0x0435 # CYRILLIC SMALL LETTER IE +0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE +0xD7 0x0437 # CYRILLIC SMALL LETTER ZE +0xD8 0x0438 # CYRILLIC SMALL LETTER I +0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I +0xDA 0x043A # CYRILLIC SMALL LETTER KA +0xDB 0x043B # CYRILLIC SMALL LETTER EL +0xDC 0x043C # CYRILLIC SMALL LETTER EM +0xDD 0x043D # CYRILLIC SMALL LETTER EN +0xDE 0x043E # CYRILLIC SMALL LETTER O +0xDF 0x043F # CYRILLIC SMALL LETTER PE +0xE0 0x0440 # CYRILLIC SMALL LETTER ER +0xE1 0x0441 # CYRILLIC SMALL LETTER ES +0xE2 0x0442 # CYRILLIC SMALL LETTER TE +0xE3 0x0443 # CYRILLIC SMALL LETTER U +0xE4 0x0444 # CYRILLIC SMALL LETTER EF +0xE5 0x0445 # CYRILLIC SMALL LETTER HA +0xE6 0x0446 # CYRILLIC SMALL LETTER TSE +0xE7 0x0447 # CYRILLIC SMALL LETTER CHE +0xE8 0x0448 # CYRILLIC SMALL LETTER SHA +0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA +0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0xEB 0x044B # CYRILLIC SMALL LETTER YERU +0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0xED 0x044D # CYRILLIC SMALL LETTER E +0xEE 0x044E # CYRILLIC SMALL LETTER YU +0xEF 0x044F # CYRILLIC SMALL LETTER YA +0xF0 0x2116 # NUMERO SIGN +0xF1 0x0451 # CYRILLIC SMALL LETTER IO +0xF2 0x0452 # CYRILLIC SMALL LETTER DJE +0xF3 0x0453 # CYRILLIC SMALL LETTER GJE +0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0xF5 0x0455 # CYRILLIC SMALL LETTER DZE +0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xF7 0x0457 # CYRILLIC SMALL LETTER YI +0xF8 0x0458 # CYRILLIC SMALL LETTER JE +0xF9 0x0459 # CYRILLIC SMALL LETTER LJE +0xFA 0x045A # CYRILLIC SMALL LETTER NJE +0xFB 0x045B # CYRILLIC SMALL LETTER TSHE +0xFC 0x045C # CYRILLIC SMALL LETTER KJE +0xFD 0x00A7 # SECTION SIGN +0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U +0xFF 0x045F # CYRILLIC SMALL LETTER DZHE diff --git a/ext/mbstring/tests/data/8859-6.txt b/ext/mbstring/tests/data/8859-6.txt new file mode 100644 index 0000000000000..fed0af36316a0 --- /dev/null +++ b/ext/mbstring/tests/data/8859-6.txt @@ -0,0 +1,249 @@ +# 8859-6.TXT +# Date: 2015-12-02 21:44:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-6:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-6:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-6 order. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead +# of the Arabic digits (U+0660..U+0669). +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA4 0x00A4 # CURRENCY SIGN +0xAC 0x060C # ARABIC COMMA +0xAD 0x00AD # SOFT HYPHEN +0xBB 0x061B # ARABIC SEMICOLON +0xBF 0x061F # ARABIC QUESTION MARK +0xC1 0x0621 # ARABIC LETTER HAMZA +0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE +0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE +0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE +0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW +0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE +0xC7 0x0627 # ARABIC LETTER ALEF +0xC8 0x0628 # ARABIC LETTER BEH +0xC9 0x0629 # ARABIC LETTER TEH MARBUTA +0xCA 0x062A # ARABIC LETTER TEH +0xCB 0x062B # ARABIC LETTER THEH +0xCC 0x062C # ARABIC LETTER JEEM +0xCD 0x062D # ARABIC LETTER HAH +0xCE 0x062E # ARABIC LETTER KHAH +0xCF 0x062F # ARABIC LETTER DAL +0xD0 0x0630 # ARABIC LETTER THAL +0xD1 0x0631 # ARABIC LETTER REH +0xD2 0x0632 # ARABIC LETTER ZAIN +0xD3 0x0633 # ARABIC LETTER SEEN +0xD4 0x0634 # ARABIC LETTER SHEEN +0xD5 0x0635 # ARABIC LETTER SAD +0xD6 0x0636 # ARABIC LETTER DAD +0xD7 0x0637 # ARABIC LETTER TAH +0xD8 0x0638 # ARABIC LETTER ZAH +0xD9 0x0639 # ARABIC LETTER AIN +0xDA 0x063A # ARABIC LETTER GHAIN +0xE0 0x0640 # ARABIC TATWEEL +0xE1 0x0641 # ARABIC LETTER FEH +0xE2 0x0642 # ARABIC LETTER QAF +0xE3 0x0643 # ARABIC LETTER KAF +0xE4 0x0644 # ARABIC LETTER LAM +0xE5 0x0645 # ARABIC LETTER MEEM +0xE6 0x0646 # ARABIC LETTER NOON +0xE7 0x0647 # ARABIC LETTER HEH +0xE8 0x0648 # ARABIC LETTER WAW +0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA +0xEA 0x064A # ARABIC LETTER YEH +0xEB 0x064B # ARABIC FATHATAN +0xEC 0x064C # ARABIC DAMMATAN +0xED 0x064D # ARABIC KASRATAN +0xEE 0x064E # ARABIC FATHA +0xEF 0x064F # ARABIC DAMMA +0xF0 0x0650 # ARABIC KASRA +0xF1 0x0651 # ARABIC SHADDA +0xF2 0x0652 # ARABIC SUKUN diff --git a/ext/mbstring/tests/data/8859-7.txt b/ext/mbstring/tests/data/8859-7.txt new file mode 100644 index 0000000000000..49131a4d94368 --- /dev/null +++ b/ext/mbstring/tests/data/8859-7.txt @@ -0,0 +1,299 @@ +# 8859-7.TXT +# Date: 2015-12-02 21:47:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-7:2003 to Unicode +# Unicode version: 4.0 +# Table version: 3.0 +# Table format: Format A +# Date: 2003-Nov-12 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO 8859-7:2003 characters map into Unicode. +# +# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928, +# and ECMA 118. ISO 8859-7:2003 adds two currency signs +# and one other character not in the earlier standard. +# +# Format: Three tab-separated columns +# Column #1 is the ISO 8859-7 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO 8859-7 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7 +# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7 +# +# 2.0 version updates 1.0 version by adding mappings for the +# three newly added characters 0xA4, 0xA5, 0xAA. +# +# 3.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x2018 # LEFT SINGLE QUOTATION MARK +0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK +0xA3 0x00A3 # POUND SIGN +0xA4 0x20AC # EURO SIGN +0xA5 0x20AF # DRACHMA SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x037A # GREEK YPOGEGRAMMENI +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAF 0x2015 # HORIZONTAL BAR +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x0384 # GREEK TONOS +0xB5 0x0385 # GREEK DIALYTIKA TONOS +0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS +0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS +0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS +0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS +0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA +0xC2 0x0392 # GREEK CAPITAL LETTER BETA +0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA +0xC4 0x0394 # GREEK CAPITAL LETTER DELTA +0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON +0xC6 0x0396 # GREEK CAPITAL LETTER ZETA +0xC7 0x0397 # GREEK CAPITAL LETTER ETA +0xC8 0x0398 # GREEK CAPITAL LETTER THETA +0xC9 0x0399 # GREEK CAPITAL LETTER IOTA +0xCA 0x039A # GREEK CAPITAL LETTER KAPPA +0xCB 0x039B # GREEK CAPITAL LETTER LAMDA +0xCC 0x039C # GREEK CAPITAL LETTER MU +0xCD 0x039D # GREEK CAPITAL LETTER NU +0xCE 0x039E # GREEK CAPITAL LETTER XI +0xCF 0x039F # GREEK CAPITAL LETTER OMICRON +0xD0 0x03A0 # GREEK CAPITAL LETTER PI +0xD1 0x03A1 # GREEK CAPITAL LETTER RHO +0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA +0xD4 0x03A4 # GREEK CAPITAL LETTER TAU +0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON +0xD6 0x03A6 # GREEK CAPITAL LETTER PHI +0xD7 0x03A7 # GREEK CAPITAL LETTER CHI +0xD8 0x03A8 # GREEK CAPITAL LETTER PSI +0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS +0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS +0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS +0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS +0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +0xE1 0x03B1 # GREEK SMALL LETTER ALPHA +0xE2 0x03B2 # GREEK SMALL LETTER BETA +0xE3 0x03B3 # GREEK SMALL LETTER GAMMA +0xE4 0x03B4 # GREEK SMALL LETTER DELTA +0xE5 0x03B5 # GREEK SMALL LETTER EPSILON +0xE6 0x03B6 # GREEK SMALL LETTER ZETA +0xE7 0x03B7 # GREEK SMALL LETTER ETA +0xE8 0x03B8 # GREEK SMALL LETTER THETA +0xE9 0x03B9 # GREEK SMALL LETTER IOTA +0xEA 0x03BA # GREEK SMALL LETTER KAPPA +0xEB 0x03BB # GREEK SMALL LETTER LAMDA +0xEC 0x03BC # GREEK SMALL LETTER MU +0xED 0x03BD # GREEK SMALL LETTER NU +0xEE 0x03BE # GREEK SMALL LETTER XI +0xEF 0x03BF # GREEK SMALL LETTER OMICRON +0xF0 0x03C0 # GREEK SMALL LETTER PI +0xF1 0x03C1 # GREEK SMALL LETTER RHO +0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA +0xF3 0x03C3 # GREEK SMALL LETTER SIGMA +0xF4 0x03C4 # GREEK SMALL LETTER TAU +0xF5 0x03C5 # GREEK SMALL LETTER UPSILON +0xF6 0x03C6 # GREEK SMALL LETTER PHI +0xF7 0x03C7 # GREEK SMALL LETTER CHI +0xF8 0x03C8 # GREEK SMALL LETTER PSI +0xF9 0x03C9 # GREEK SMALL LETTER OMEGA +0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA +0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS +0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS +0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS diff --git a/ext/mbstring/tests/data/8859-8.txt b/ext/mbstring/tests/data/8859-8.txt new file mode 100644 index 0000000000000..ff068f7083715 --- /dev/null +++ b/ext/mbstring/tests/data/8859-8.txt @@ -0,0 +1,258 @@ +# 8859-8.TXT +# Date: 2015-12-02 21:50:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-8:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 2000-Jan-03 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-8:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-8 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# 1.1 version updates to the published 8859-8:1999, correcting +# the mapping of 0xAF and adding mappings for LRM and RLM. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00D7 # MULTIPLICATION SIGN +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00F7 # DIVISION SIGN +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xDF 0x2017 # DOUBLE LOW LINE +0xE0 0x05D0 # HEBREW LETTER ALEF +0xE1 0x05D1 # HEBREW LETTER BET +0xE2 0x05D2 # HEBREW LETTER GIMEL +0xE3 0x05D3 # HEBREW LETTER DALET +0xE4 0x05D4 # HEBREW LETTER HE +0xE5 0x05D5 # HEBREW LETTER VAV +0xE6 0x05D6 # HEBREW LETTER ZAYIN +0xE7 0x05D7 # HEBREW LETTER HET +0xE8 0x05D8 # HEBREW LETTER TET +0xE9 0x05D9 # HEBREW LETTER YOD +0xEA 0x05DA # HEBREW LETTER FINAL KAF +0xEB 0x05DB # HEBREW LETTER KAF +0xEC 0x05DC # HEBREW LETTER LAMED +0xED 0x05DD # HEBREW LETTER FINAL MEM +0xEE 0x05DE # HEBREW LETTER MEM +0xEF 0x05DF # HEBREW LETTER FINAL NUN +0xF0 0x05E0 # HEBREW LETTER NUN +0xF1 0x05E1 # HEBREW LETTER SAMEKH +0xF2 0x05E2 # HEBREW LETTER AYIN +0xF3 0x05E3 # HEBREW LETTER FINAL PE +0xF4 0x05E4 # HEBREW LETTER PE +0xF5 0x05E5 # HEBREW LETTER FINAL TSADI +0xF6 0x05E6 # HEBREW LETTER TSADI +0xF7 0x05E7 # HEBREW LETTER QOF +0xF8 0x05E8 # HEBREW LETTER RESH +0xF9 0x05E9 # HEBREW LETTER SHIN +0xFA 0x05EA # HEBREW LETTER TAV +0xFD 0x200E # LEFT-TO-RIGHT MARK +0xFE 0x200F # RIGHT-TO-LEFT MARK diff --git a/ext/mbstring/tests/data/8859-9.txt b/ext/mbstring/tests/data/8859-9.txt new file mode 100644 index 0000000000000..d0c9ff94e4ecb --- /dev/null +++ b/ext/mbstring/tests/data/8859-9.txt @@ -0,0 +1,294 @@ +# 8859-9.TXT +# Date: 2015-12-02 21:51:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-9:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-9:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-9 order. +# +# ISO/IEC 8859-9 is also equivalent to ISO-IR-148. +# +# Version history +# 1.0 version: updates 0.1 version by adding mappings for all +# control characters. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x00A1 # INVERTED EXCLAMATION MARK +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00AA # FEMININE ORDINAL INDICATOR +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00BA # MASCULINE ORDINAL INDICATOR +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF # INVERTED QUESTION MARK +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE +0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I +0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/ARMSCII-8.txt b/ext/mbstring/tests/data/ARMSCII-8.txt new file mode 100644 index 0000000000000..1854fddc1324e --- /dev/null +++ b/ext/mbstring/tests/data/ARMSCII-8.txt @@ -0,0 +1,255 @@ +# Derived from armscii-8(7) man page +0x0 0x0 +0x1 0x1 +0x2 0x2 +0x3 0x3 +0x4 0x4 +0x5 0x5 +0x6 0x6 +0x7 0x7 +0x8 0x8 +0x9 0x9 +0xA 0xA +0xB 0xB +0xC 0xC +0xD 0xD +0xE 0xE +0xF 0xF +0x10 0x10 +0x11 0x11 +0x12 0x12 +0x13 0x13 +0x14 0x14 +0x15 0x15 +0x16 0x16 +0x17 0x17 +0x18 0x18 +0x19 0x19 +0x1A 0x1A +0x1B 0x1B +0x1C 0x1C +0x1D 0x1D +0x1E 0x1E +0x1F 0x1F +0x20 0x20 +0x21 0x21 +0x22 0x22 +0x23 0x23 +0x24 0x24 +0x25 0x25 +0x26 0x26 +0x27 0x27 +0x28 0x28 +0x29 0x29 +0x2A 0x2A +0x2B 0x2B +0x2C 0x2C +0x2D 0x2D +0x2E 0x2E +0x2F 0x2F +0x30 0x30 +0x31 0x31 +0x32 0x32 +0x33 0x33 +0x34 0x34 +0x35 0x35 +0x36 0x36 +0x37 0x37 +0x38 0x38 +0x39 0x39 +0x3A 0x3A +0x3B 0x3B +0x3C 0x3C +0x3D 0x3D +0x3E 0x3E +0x3F 0x3F +0x40 0x40 +0x41 0x41 +0x42 0x42 +0x43 0x43 +0x44 0x44 +0x45 0x45 +0x46 0x46 +0x47 0x47 +0x48 0x48 +0x49 0x49 +0x4A 0x4A +0x4B 0x4B +0x4C 0x4C +0x4D 0x4D +0x4E 0x4E +0x4F 0x4F +0x50 0x50 +0x51 0x51 +0x52 0x52 +0x53 0x53 +0x54 0x54 +0x55 0x55 +0x56 0x56 +0x57 0x57 +0x58 0x58 +0x59 0x59 +0x5A 0x5A +0x5B 0x5B +0x5C 0x5C +0x5D 0x5D +0x5E 0x5E +0x5F 0x5F +0x60 0x60 +0x61 0x61 +0x62 0x62 +0x63 0x63 +0x64 0x64 +0x65 0x65 +0x66 0x66 +0x67 0x67 +0x68 0x68 +0x69 0x69 +0x6A 0x6A +0x6B 0x6B +0x6C 0x6C +0x6D 0x6D +0x6E 0x6E +0x6F 0x6F +0x70 0x70 +0x71 0x71 +0x72 0x72 +0x73 0x73 +0x74 0x74 +0x75 0x75 +0x76 0x76 +0x77 0x77 +0x78 0x78 +0x79 0x79 +0x7A 0x7A +0x7B 0x7B +0x7C 0x7C +0x7D 0x7D +0x7E 0x7E +0x7F 0x7F +0x80 0x80 +0x81 0x81 +0x82 0x82 +0x83 0x83 +0x84 0x84 +0x85 0x85 +0x86 0x86 +0x87 0x87 +0x88 0x88 +0x89 0x89 +0x8A 0x8A +0x8B 0x8B +0x8C 0x8C +0x8D 0x8D +0x8E 0x8E +0x8F 0x8F +0x90 0x90 +0x91 0x91 +0x92 0x92 +0x93 0x93 +0x94 0x94 +0x95 0x95 +0x96 0x96 +0x97 0x97 +0x98 0x98 +0x99 0x99 +0x9A 0x9A +0x9B 0x9B +0x9C 0x9C +0x9D 0x9D +0x9E 0x9E +0x9F 0x9F +0xA0 0x00A0 # NO-BREAK SPACE +0xA2 0x0587 # SMALL LIGATURE ECH YIWN +0xA3 0x0589 # ARMENIAN FULL STOP +0xA4 0x0029 # RIGHT PARENTHESIS +0xA5 0x0028 # LEFT PARENTHESIS +0xA6 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xA7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xA8 0x2014 # EM DASH +0xA9 0x002E # FULL STOP +0xAA 0x055D # ARMENIAN COMMA +0xAB 0x002C # COMMA +0xAC 0x002D # HYPHEN-MINUS +0xAD 0x058A # ARMENIAN HYPHEN +0xAE 0x2026 # HORIZONTAL ELLIPSIS +0xAF 0x055C # ARMENIAN EXCLAMATION MARK +0xB0 0x055B # ARMENIAN EMPHASIS MARK +0xB1 0x055E # ARMENIAN QUESTION MARK +0xB2 0x0531 +0xB3 0x0561 +0xB4 0x0532 +0xB5 0x0562 +0xB6 0x0533 +0xB7 0x0563 +0xB8 0x0534 +0xB9 0x0564 +0xBA 0x0535 +0xBB 0x0565 +0xBC 0x0536 +0xBD 0x0566 +0xBE 0x0537 +0xBF 0x0567 +0xC0 0x0538 +0xC1 0x0568 +0xC2 0x0539 +0xC3 0x0569 +0xC4 0x053A +0xC5 0x056A +0xC6 0x053B +0xC7 0x056B +0xC8 0x053C +0xC9 0x056C +0xCA 0x053D +0xCB 0x056D +0xCC 0x053E +0xCD 0x056E +0xCE 0x053F +0xCF 0x056F +0xD0 0x0540 +0xD1 0x0570 +0xD2 0x0541 +0xD3 0x0571 +0xD4 0x0542 +0xD5 0x0572 +0xD6 0x0543 +0xD7 0x0573 +0xD8 0x0544 +0xD9 0x0574 +0xDA 0x0545 +0xDB 0x0575 +0xDC 0x0546 +0xDD 0x0576 +0xDE 0x0547 +0xDF 0x0577 +0xE0 0x0548 +0xE1 0x0578 +0xE2 0x0549 +0xE3 0x0579 +0xE4 0x054A +0xE5 0x057A +0xE6 0x054B +0xE7 0x057B +0xE8 0x054C +0xE9 0x057C +0xEA 0x054D +0xEB 0x057D +0xEC 0x054E +0xED 0x057E +0xEE 0x054F +0xEF 0x057F +0xF0 0x0550 +0xF1 0x0580 +0xF2 0x0551 +0xF3 0x0581 +0xF4 0x0552 +0xF5 0x0582 +0xF6 0x0553 +0xF7 0x0583 +0xF8 0x0554 +0xF9 0x0584 +0xFA 0x0555 +0xFB 0x0585 +0xFC 0x0556 +0xFD 0x0586 +0xFE 0x055A diff --git a/ext/mbstring/tests/data/CP1251.txt b/ext/mbstring/tests/data/CP1251.txt new file mode 100644 index 0000000000000..4d9b3558acef3 --- /dev/null +++ b/ext/mbstring/tests/data/CP1251.txt @@ -0,0 +1,274 @@ +# +# Name: cp1251 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1251 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1251 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE +0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 0x0453 #CYRILLIC SMALL LETTER GJE +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 0x20AC #EURO SIGN +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE +0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE +0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE +0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE +0x90 0x0452 #CYRILLIC SMALL LETTER DJE +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 #UNDEFINED +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0459 #CYRILLIC SMALL LETTER LJE +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x045A #CYRILLIC SMALL LETTER NJE +0x9D 0x045C #CYRILLIC SMALL LETTER KJE +0x9E 0x045B #CYRILLIC SMALL LETTER TSHE +0x9F 0x045F #CYRILLIC SMALL LETTER DZHE +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U +0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U +0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x0451 #CYRILLIC SMALL LETTER IO +0xB9 0x2116 #NUMERO SIGN +0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x0458 #CYRILLIC SMALL LETTER JE +0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE +0xBE 0x0455 #CYRILLIC SMALL LETTER DZE +0xBF 0x0457 #CYRILLIC SMALL LETTER YI +0xC0 0x0410 #CYRILLIC CAPITAL LETTER A +0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE +0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE +0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE +0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE +0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE +0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE +0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE +0xC8 0x0418 #CYRILLIC CAPITAL LETTER I +0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I +0xCA 0x041A #CYRILLIC CAPITAL LETTER KA +0xCB 0x041B #CYRILLIC CAPITAL LETTER EL +0xCC 0x041C #CYRILLIC CAPITAL LETTER EM +0xCD 0x041D #CYRILLIC CAPITAL LETTER EN +0xCE 0x041E #CYRILLIC CAPITAL LETTER O +0xCF 0x041F #CYRILLIC CAPITAL LETTER PE +0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER +0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES +0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE +0xD3 0x0423 #CYRILLIC CAPITAL LETTER U +0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF +0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA +0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE +0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE +0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA +0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA +0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN +0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU +0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN +0xDD 0x042D #CYRILLIC CAPITAL LETTER E +0xDE 0x042E #CYRILLIC CAPITAL LETTER YU +0xDF 0x042F #CYRILLIC CAPITAL LETTER YA +0xE0 0x0430 #CYRILLIC SMALL LETTER A +0xE1 0x0431 #CYRILLIC SMALL LETTER BE +0xE2 0x0432 #CYRILLIC SMALL LETTER VE +0xE3 0x0433 #CYRILLIC SMALL LETTER GHE +0xE4 0x0434 #CYRILLIC SMALL LETTER DE +0xE5 0x0435 #CYRILLIC SMALL LETTER IE +0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE +0xE7 0x0437 #CYRILLIC SMALL LETTER ZE +0xE8 0x0438 #CYRILLIC SMALL LETTER I +0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I +0xEA 0x043A #CYRILLIC SMALL LETTER KA +0xEB 0x043B #CYRILLIC SMALL LETTER EL +0xEC 0x043C #CYRILLIC SMALL LETTER EM +0xED 0x043D #CYRILLIC SMALL LETTER EN +0xEE 0x043E #CYRILLIC SMALL LETTER O +0xEF 0x043F #CYRILLIC SMALL LETTER PE +0xF0 0x0440 #CYRILLIC SMALL LETTER ER +0xF1 0x0441 #CYRILLIC SMALL LETTER ES +0xF2 0x0442 #CYRILLIC SMALL LETTER TE +0xF3 0x0443 #CYRILLIC SMALL LETTER U +0xF4 0x0444 #CYRILLIC SMALL LETTER EF +0xF5 0x0445 #CYRILLIC SMALL LETTER HA +0xF6 0x0446 #CYRILLIC SMALL LETTER TSE +0xF7 0x0447 #CYRILLIC SMALL LETTER CHE +0xF8 0x0448 #CYRILLIC SMALL LETTER SHA +0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA +0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN +0xFB 0x044B #CYRILLIC SMALL LETTER YERU +0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN +0xFD 0x044D #CYRILLIC SMALL LETTER E +0xFE 0x044E #CYRILLIC SMALL LETTER YU +0xFF 0x044F #CYRILLIC SMALL LETTER YA diff --git a/ext/mbstring/tests/data/CP1252.txt b/ext/mbstring/tests/data/CP1252.txt new file mode 100644 index 0000000000000..8ff4b204b755e --- /dev/null +++ b/ext/mbstring/tests/data/CP1252.txt @@ -0,0 +1,274 @@ +# +# Name: cp1252 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1252 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1252 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x20AC #EURO SIGN +0x81 #UNDEFINED +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x0152 #LATIN CAPITAL LIGATURE OE +0x8D #UNDEFINED +0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON +0x8F #UNDEFINED +0x90 #UNDEFINED +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 0x02DC #SMALL TILDE +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x0153 #LATIN SMALL LIGATURE OE +0x9D #UNDEFINED +0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON +0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x00A1 #INVERTED EXCLAMATION MARK +0xA2 0x00A2 #CENT SIGN +0xA3 0x00A3 #POUND SIGN +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x00A5 #YEN SIGN +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x00A8 #DIAERESIS +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x00AA #FEMININE ORDINAL INDICATOR +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x00AF #MACRON +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x00B2 #SUPERSCRIPT TWO +0xB3 0x00B3 #SUPERSCRIPT THREE +0xB4 0x00B4 #ACUTE ACCENT +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x00B8 #CEDILLA +0xB9 0x00B9 #SUPERSCRIPT ONE +0xBA 0x00BA #MASCULINE ORDINAL INDICATOR +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC #VULGAR FRACTION ONE QUARTER +0xBD 0x00BD #VULGAR FRACTION ONE HALF +0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF #INVERTED QUESTION MARK +0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 #LATIN CAPITAL LETTER AE +0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x00D0 #LATIN CAPITAL LETTER ETH +0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 #MULTIPLICATION SIGN +0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x00DE #LATIN CAPITAL LETTER THORN +0xDF 0x00DF #LATIN SMALL LETTER SHARP S +0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 #LATIN SMALL LETTER AE +0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x00F0 #LATIN SMALL LETTER ETH +0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 #DIVISION SIGN +0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x00FE #LATIN SMALL LETTER THORN +0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/CP1254.txt b/ext/mbstring/tests/data/CP1254.txt new file mode 100644 index 0000000000000..987ed98f759de --- /dev/null +++ b/ext/mbstring/tests/data/CP1254.txt @@ -0,0 +1,274 @@ +# +# Name: cp1254 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp1254 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp1254 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0A 0x000A #LINE FEED +0x0B 0x000B #VERTICAL TABULATION +0x0C 0x000C #FORM FEED +0x0D 0x000D #CARRIAGE RETURN +0x0E 0x000E #SHIFT OUT +0x0F 0x000F #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1A 0x001A #SUBSTITUTE +0x1B 0x001B #ESCAPE +0x1C 0x001C #FILE SEPARATOR +0x1D 0x001D #GROUP SEPARATOR +0x1E 0x001E #RECORD SEPARATOR +0x1F 0x001F #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2A 0x002A #ASTERISK +0x2B 0x002B #PLUS SIGN +0x2C 0x002C #COMMA +0x2D 0x002D #HYPHEN-MINUS +0x2E 0x002E #FULL STOP +0x2F 0x002F #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3A 0x003A #COLON +0x3B 0x003B #SEMICOLON +0x3C 0x003C #LESS-THAN SIGN +0x3D 0x003D #EQUALS SIGN +0x3E 0x003E #GREATER-THAN SIGN +0x3F 0x003F #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4A 0x004A #LATIN CAPITAL LETTER J +0x4B 0x004B #LATIN CAPITAL LETTER K +0x4C 0x004C #LATIN CAPITAL LETTER L +0x4D 0x004D #LATIN CAPITAL LETTER M +0x4E 0x004E #LATIN CAPITAL LETTER N +0x4F 0x004F #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5A 0x005A #LATIN CAPITAL LETTER Z +0x5B 0x005B #LEFT SQUARE BRACKET +0x5C 0x005C #REVERSE SOLIDUS +0x5D 0x005D #RIGHT SQUARE BRACKET +0x5E 0x005E #CIRCUMFLEX ACCENT +0x5F 0x005F #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6A 0x006A #LATIN SMALL LETTER J +0x6B 0x006B #LATIN SMALL LETTER K +0x6C 0x006C #LATIN SMALL LETTER L +0x6D 0x006D #LATIN SMALL LETTER M +0x6E 0x006E #LATIN SMALL LETTER N +0x6F 0x006F #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7A 0x007A #LATIN SMALL LETTER Z +0x7B 0x007B #LEFT CURLY BRACKET +0x7C 0x007C #VERTICAL LINE +0x7D 0x007D #RIGHT CURLY BRACKET +0x7E 0x007E #TILDE +0x7F 0x007F #DELETE +0x80 0x20AC #EURO SIGN +0x81 #UNDEFINED +0x82 0x201A #SINGLE LOW-9 QUOTATION MARK +0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK +0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK +0x85 0x2026 #HORIZONTAL ELLIPSIS +0x86 0x2020 #DAGGER +0x87 0x2021 #DOUBLE DAGGER +0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT +0x89 0x2030 #PER MILLE SIGN +0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON +0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x8C 0x0152 #LATIN CAPITAL LIGATURE OE +0x8D #UNDEFINED +0x8E #UNDEFINED +0x8F #UNDEFINED +0x90 #UNDEFINED +0x91 0x2018 #LEFT SINGLE QUOTATION MARK +0x92 0x2019 #RIGHT SINGLE QUOTATION MARK +0x93 0x201C #LEFT DOUBLE QUOTATION MARK +0x94 0x201D #RIGHT DOUBLE QUOTATION MARK +0x95 0x2022 #BULLET +0x96 0x2013 #EN DASH +0x97 0x2014 #EM DASH +0x98 0x02DC #SMALL TILDE +0x99 0x2122 #TRADE MARK SIGN +0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON +0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x9C 0x0153 #LATIN SMALL LIGATURE OE +0x9D #UNDEFINED +0x9E #UNDEFINED +0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS +0xA0 0x00A0 #NO-BREAK SPACE +0xA1 0x00A1 #INVERTED EXCLAMATION MARK +0xA2 0x00A2 #CENT SIGN +0xA3 0x00A3 #POUND SIGN +0xA4 0x00A4 #CURRENCY SIGN +0xA5 0x00A5 #YEN SIGN +0xA6 0x00A6 #BROKEN BAR +0xA7 0x00A7 #SECTION SIGN +0xA8 0x00A8 #DIAERESIS +0xA9 0x00A9 #COPYRIGHT SIGN +0xAA 0x00AA #FEMININE ORDINAL INDICATOR +0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC #NOT SIGN +0xAD 0x00AD #SOFT HYPHEN +0xAE 0x00AE #REGISTERED SIGN +0xAF 0x00AF #MACRON +0xB0 0x00B0 #DEGREE SIGN +0xB1 0x00B1 #PLUS-MINUS SIGN +0xB2 0x00B2 #SUPERSCRIPT TWO +0xB3 0x00B3 #SUPERSCRIPT THREE +0xB4 0x00B4 #ACUTE ACCENT +0xB5 0x00B5 #MICRO SIGN +0xB6 0x00B6 #PILCROW SIGN +0xB7 0x00B7 #MIDDLE DOT +0xB8 0x00B8 #CEDILLA +0xB9 0x00B9 #SUPERSCRIPT ONE +0xBA 0x00BA #MASCULINE ORDINAL INDICATOR +0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC #VULGAR FRACTION ONE QUARTER +0xBD 0x00BD #VULGAR FRACTION ONE HALF +0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF #INVERTED QUESTION MARK +0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 #LATIN CAPITAL LETTER AE +0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x011E #LATIN CAPITAL LETTER G WITH BREVE +0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 #MULTIPLICATION SIGN +0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE +0xDE 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA +0xDF 0x00DF #LATIN SMALL LETTER SHARP S +0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 #LATIN SMALL LETTER AE +0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x011F #LATIN SMALL LETTER G WITH BREVE +0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 #DIVISION SIGN +0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I +0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA +0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/ext/mbstring/tests/data/CP850.txt b/ext/mbstring/tests/data/CP850.txt new file mode 100644 index 0000000000000..7f662c49c9ffc --- /dev/null +++ b/ext/mbstring/tests/data/CP850.txt @@ -0,0 +1,273 @@ +# +# Name: cp850_DOSLatin1 to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp850_DOSLatin1 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp850_DOSLatin1 order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0a 0x000a #LINE FEED +0x0b 0x000b #VERTICAL TABULATION +0x0c 0x000c #FORM FEED +0x0d 0x000d #CARRIAGE RETURN +0x0e 0x000e #SHIFT OUT +0x0f 0x000f #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1a 0x001a #SUBSTITUTE +0x1b 0x001b #ESCAPE +0x1c 0x001c #FILE SEPARATOR +0x1d 0x001d #GROUP SEPARATOR +0x1e 0x001e #RECORD SEPARATOR +0x1f 0x001f #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2a 0x002a #ASTERISK +0x2b 0x002b #PLUS SIGN +0x2c 0x002c #COMMA +0x2d 0x002d #HYPHEN-MINUS +0x2e 0x002e #FULL STOP +0x2f 0x002f #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3a 0x003a #COLON +0x3b 0x003b #SEMICOLON +0x3c 0x003c #LESS-THAN SIGN +0x3d 0x003d #EQUALS SIGN +0x3e 0x003e #GREATER-THAN SIGN +0x3f 0x003f #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4a 0x004a #LATIN CAPITAL LETTER J +0x4b 0x004b #LATIN CAPITAL LETTER K +0x4c 0x004c #LATIN CAPITAL LETTER L +0x4d 0x004d #LATIN CAPITAL LETTER M +0x4e 0x004e #LATIN CAPITAL LETTER N +0x4f 0x004f #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5a 0x005a #LATIN CAPITAL LETTER Z +0x5b 0x005b #LEFT SQUARE BRACKET +0x5c 0x005c #REVERSE SOLIDUS +0x5d 0x005d #RIGHT SQUARE BRACKET +0x5e 0x005e #CIRCUMFLEX ACCENT +0x5f 0x005f #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6a 0x006a #LATIN SMALL LETTER J +0x6b 0x006b #LATIN SMALL LETTER K +0x6c 0x006c #LATIN SMALL LETTER L +0x6d 0x006d #LATIN SMALL LETTER M +0x6e 0x006e #LATIN SMALL LETTER N +0x6f 0x006f #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7a 0x007a #LATIN SMALL LETTER Z +0x7b 0x007b #LEFT CURLY BRACKET +0x7c 0x007c #VERTICAL LINE +0x7d 0x007d #RIGHT CURLY BRACKET +0x7e 0x007e #TILDE +0x7f 0x007f #DELETE +0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA +0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS +0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE +0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS +0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE +0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE +0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA +0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX +0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS +0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE +0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS +0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX +0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE +0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE +0x91 0x00e6 #LATIN SMALL LIGATURE AE +0x92 0x00c6 #LATIN CAPITAL LIGATURE AE +0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS +0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE +0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX +0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE +0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS +0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS +0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE +0x9c 0x00a3 #POUND SIGN +0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE +0x9e 0x00d7 #MULTIPLICATION SIGN +0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK +0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE +0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE +0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE +0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE +0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE +0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE +0xa6 0x00aa #FEMININE ORDINAL INDICATOR +0xa7 0x00ba #MASCULINE ORDINAL INDICATOR +0xa8 0x00bf #INVERTED QUESTION MARK +0xa9 0x00ae #REGISTERED SIGN +0xaa 0x00ac #NOT SIGN +0xab 0x00bd #VULGAR FRACTION ONE HALF +0xac 0x00bc #VULGAR FRACTION ONE QUARTER +0xad 0x00a1 #INVERTED EXCLAMATION MARK +0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xb0 0x2591 #LIGHT SHADE +0xb1 0x2592 #MEDIUM SHADE +0xb2 0x2593 #DARK SHADE +0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE +0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE +0xb8 0x00a9 #COPYRIGHT SIGN +0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd 0x00a2 #CENT SIGN +0xbe 0x00a5 #YEN SIGN +0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE +0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE +0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf 0x00a4 #CURRENCY SIGN +0xd0 0x00f0 #LATIN SMALL LETTER ETH +0xd1 0x00d0 #LATIN CAPITAL LETTER ETH +0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS +0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE +0xd5 0x0131 #LATIN SMALL LETTER DOTLESS I +0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE +0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS +0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb 0x2588 #FULL BLOCK +0xdc 0x2584 #LOWER HALF BLOCK +0xdd 0x00a6 #BROKEN BAR +0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE +0xdf 0x2580 #UPPER HALF BLOCK +0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE +0xe1 0x00df #LATIN SMALL LETTER SHARP S +0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE +0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE +0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE +0xe6 0x00b5 #MICRO SIGN +0xe7 0x00fe #LATIN SMALL LETTER THORN +0xe8 0x00de #LATIN CAPITAL LETTER THORN +0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE +0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE +0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE +0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE +0xee 0x00af #MACRON +0xef 0x00b4 #ACUTE ACCENT +0xf0 0x00ad #SOFT HYPHEN +0xf1 0x00b1 #PLUS-MINUS SIGN +0xf2 0x2017 #DOUBLE LOW LINE +0xf3 0x00be #VULGAR FRACTION THREE QUARTERS +0xf4 0x00b6 #PILCROW SIGN +0xf5 0x00a7 #SECTION SIGN +0xf6 0x00f7 #DIVISION SIGN +0xf7 0x00b8 #CEDILLA +0xf8 0x00b0 #DEGREE SIGN +0xf9 0x00a8 #DIAERESIS +0xfa 0x00b7 #MIDDLE DOT +0xfb 0x00b9 #SUPERSCRIPT ONE +0xfc 0x00b3 #SUPERSCRIPT THREE +0xfd 0x00b2 #SUPERSCRIPT TWO +0xfe 0x25a0 #BLACK SQUARE +0xff 0x00a0 #NO-BREAK SPACE diff --git a/ext/mbstring/tests/data/CP866.txt b/ext/mbstring/tests/data/CP866.txt new file mode 100644 index 0000000000000..64d29ef1fbc46 --- /dev/null +++ b/ext/mbstring/tests/data/CP866.txt @@ -0,0 +1,273 @@ +# +# Name: cp866_DOSCyrillicRussian to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp866_DOSCyrillicRussian code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp866_DOSCyrillicRussian order +# +0x00 0x0000 #NULL +0x01 0x0001 #START OF HEADING +0x02 0x0002 #START OF TEXT +0x03 0x0003 #END OF TEXT +0x04 0x0004 #END OF TRANSMISSION +0x05 0x0005 #ENQUIRY +0x06 0x0006 #ACKNOWLEDGE +0x07 0x0007 #BELL +0x08 0x0008 #BACKSPACE +0x09 0x0009 #HORIZONTAL TABULATION +0x0a 0x000a #LINE FEED +0x0b 0x000b #VERTICAL TABULATION +0x0c 0x000c #FORM FEED +0x0d 0x000d #CARRIAGE RETURN +0x0e 0x000e #SHIFT OUT +0x0f 0x000f #SHIFT IN +0x10 0x0010 #DATA LINK ESCAPE +0x11 0x0011 #DEVICE CONTROL ONE +0x12 0x0012 #DEVICE CONTROL TWO +0x13 0x0013 #DEVICE CONTROL THREE +0x14 0x0014 #DEVICE CONTROL FOUR +0x15 0x0015 #NEGATIVE ACKNOWLEDGE +0x16 0x0016 #SYNCHRONOUS IDLE +0x17 0x0017 #END OF TRANSMISSION BLOCK +0x18 0x0018 #CANCEL +0x19 0x0019 #END OF MEDIUM +0x1a 0x001a #SUBSTITUTE +0x1b 0x001b #ESCAPE +0x1c 0x001c #FILE SEPARATOR +0x1d 0x001d #GROUP SEPARATOR +0x1e 0x001e #RECORD SEPARATOR +0x1f 0x001f #UNIT SEPARATOR +0x20 0x0020 #SPACE +0x21 0x0021 #EXCLAMATION MARK +0x22 0x0022 #QUOTATION MARK +0x23 0x0023 #NUMBER SIGN +0x24 0x0024 #DOLLAR SIGN +0x25 0x0025 #PERCENT SIGN +0x26 0x0026 #AMPERSAND +0x27 0x0027 #APOSTROPHE +0x28 0x0028 #LEFT PARENTHESIS +0x29 0x0029 #RIGHT PARENTHESIS +0x2a 0x002a #ASTERISK +0x2b 0x002b #PLUS SIGN +0x2c 0x002c #COMMA +0x2d 0x002d #HYPHEN-MINUS +0x2e 0x002e #FULL STOP +0x2f 0x002f #SOLIDUS +0x30 0x0030 #DIGIT ZERO +0x31 0x0031 #DIGIT ONE +0x32 0x0032 #DIGIT TWO +0x33 0x0033 #DIGIT THREE +0x34 0x0034 #DIGIT FOUR +0x35 0x0035 #DIGIT FIVE +0x36 0x0036 #DIGIT SIX +0x37 0x0037 #DIGIT SEVEN +0x38 0x0038 #DIGIT EIGHT +0x39 0x0039 #DIGIT NINE +0x3a 0x003a #COLON +0x3b 0x003b #SEMICOLON +0x3c 0x003c #LESS-THAN SIGN +0x3d 0x003d #EQUALS SIGN +0x3e 0x003e #GREATER-THAN SIGN +0x3f 0x003f #QUESTION MARK +0x40 0x0040 #COMMERCIAL AT +0x41 0x0041 #LATIN CAPITAL LETTER A +0x42 0x0042 #LATIN CAPITAL LETTER B +0x43 0x0043 #LATIN CAPITAL LETTER C +0x44 0x0044 #LATIN CAPITAL LETTER D +0x45 0x0045 #LATIN CAPITAL LETTER E +0x46 0x0046 #LATIN CAPITAL LETTER F +0x47 0x0047 #LATIN CAPITAL LETTER G +0x48 0x0048 #LATIN CAPITAL LETTER H +0x49 0x0049 #LATIN CAPITAL LETTER I +0x4a 0x004a #LATIN CAPITAL LETTER J +0x4b 0x004b #LATIN CAPITAL LETTER K +0x4c 0x004c #LATIN CAPITAL LETTER L +0x4d 0x004d #LATIN CAPITAL LETTER M +0x4e 0x004e #LATIN CAPITAL LETTER N +0x4f 0x004f #LATIN CAPITAL LETTER O +0x50 0x0050 #LATIN CAPITAL LETTER P +0x51 0x0051 #LATIN CAPITAL LETTER Q +0x52 0x0052 #LATIN CAPITAL LETTER R +0x53 0x0053 #LATIN CAPITAL LETTER S +0x54 0x0054 #LATIN CAPITAL LETTER T +0x55 0x0055 #LATIN CAPITAL LETTER U +0x56 0x0056 #LATIN CAPITAL LETTER V +0x57 0x0057 #LATIN CAPITAL LETTER W +0x58 0x0058 #LATIN CAPITAL LETTER X +0x59 0x0059 #LATIN CAPITAL LETTER Y +0x5a 0x005a #LATIN CAPITAL LETTER Z +0x5b 0x005b #LEFT SQUARE BRACKET +0x5c 0x005c #REVERSE SOLIDUS +0x5d 0x005d #RIGHT SQUARE BRACKET +0x5e 0x005e #CIRCUMFLEX ACCENT +0x5f 0x005f #LOW LINE +0x60 0x0060 #GRAVE ACCENT +0x61 0x0061 #LATIN SMALL LETTER A +0x62 0x0062 #LATIN SMALL LETTER B +0x63 0x0063 #LATIN SMALL LETTER C +0x64 0x0064 #LATIN SMALL LETTER D +0x65 0x0065 #LATIN SMALL LETTER E +0x66 0x0066 #LATIN SMALL LETTER F +0x67 0x0067 #LATIN SMALL LETTER G +0x68 0x0068 #LATIN SMALL LETTER H +0x69 0x0069 #LATIN SMALL LETTER I +0x6a 0x006a #LATIN SMALL LETTER J +0x6b 0x006b #LATIN SMALL LETTER K +0x6c 0x006c #LATIN SMALL LETTER L +0x6d 0x006d #LATIN SMALL LETTER M +0x6e 0x006e #LATIN SMALL LETTER N +0x6f 0x006f #LATIN SMALL LETTER O +0x70 0x0070 #LATIN SMALL LETTER P +0x71 0x0071 #LATIN SMALL LETTER Q +0x72 0x0072 #LATIN SMALL LETTER R +0x73 0x0073 #LATIN SMALL LETTER S +0x74 0x0074 #LATIN SMALL LETTER T +0x75 0x0075 #LATIN SMALL LETTER U +0x76 0x0076 #LATIN SMALL LETTER V +0x77 0x0077 #LATIN SMALL LETTER W +0x78 0x0078 #LATIN SMALL LETTER X +0x79 0x0079 #LATIN SMALL LETTER Y +0x7a 0x007a #LATIN SMALL LETTER Z +0x7b 0x007b #LEFT CURLY BRACKET +0x7c 0x007c #VERTICAL LINE +0x7d 0x007d #RIGHT CURLY BRACKET +0x7e 0x007e #TILDE +0x7f 0x007f #DELETE +0x80 0x0410 #CYRILLIC CAPITAL LETTER A +0x81 0x0411 #CYRILLIC CAPITAL LETTER BE +0x82 0x0412 #CYRILLIC CAPITAL LETTER VE +0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE +0x84 0x0414 #CYRILLIC CAPITAL LETTER DE +0x85 0x0415 #CYRILLIC CAPITAL LETTER IE +0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE +0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE +0x88 0x0418 #CYRILLIC CAPITAL LETTER I +0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I +0x8a 0x041a #CYRILLIC CAPITAL LETTER KA +0x8b 0x041b #CYRILLIC CAPITAL LETTER EL +0x8c 0x041c #CYRILLIC CAPITAL LETTER EM +0x8d 0x041d #CYRILLIC CAPITAL LETTER EN +0x8e 0x041e #CYRILLIC CAPITAL LETTER O +0x8f 0x041f #CYRILLIC CAPITAL LETTER PE +0x90 0x0420 #CYRILLIC CAPITAL LETTER ER +0x91 0x0421 #CYRILLIC CAPITAL LETTER ES +0x92 0x0422 #CYRILLIC CAPITAL LETTER TE +0x93 0x0423 #CYRILLIC CAPITAL LETTER U +0x94 0x0424 #CYRILLIC CAPITAL LETTER EF +0x95 0x0425 #CYRILLIC CAPITAL LETTER HA +0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE +0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE +0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA +0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA +0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN +0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU +0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN +0x9d 0x042d #CYRILLIC CAPITAL LETTER E +0x9e 0x042e #CYRILLIC CAPITAL LETTER YU +0x9f 0x042f #CYRILLIC CAPITAL LETTER YA +0xa0 0x0430 #CYRILLIC SMALL LETTER A +0xa1 0x0431 #CYRILLIC SMALL LETTER BE +0xa2 0x0432 #CYRILLIC SMALL LETTER VE +0xa3 0x0433 #CYRILLIC SMALL LETTER GHE +0xa4 0x0434 #CYRILLIC SMALL LETTER DE +0xa5 0x0435 #CYRILLIC SMALL LETTER IE +0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE +0xa7 0x0437 #CYRILLIC SMALL LETTER ZE +0xa8 0x0438 #CYRILLIC SMALL LETTER I +0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I +0xaa 0x043a #CYRILLIC SMALL LETTER KA +0xab 0x043b #CYRILLIC SMALL LETTER EL +0xac 0x043c #CYRILLIC SMALL LETTER EM +0xad 0x043d #CYRILLIC SMALL LETTER EN +0xae 0x043e #CYRILLIC SMALL LETTER O +0xaf 0x043f #CYRILLIC SMALL LETTER PE +0xb0 0x2591 #LIGHT SHADE +0xb1 0x2592 #MEDIUM SHADE +0xb2 0x2593 #DARK SHADE +0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb 0x2588 #FULL BLOCK +0xdc 0x2584 #LOWER HALF BLOCK +0xdd 0x258c #LEFT HALF BLOCK +0xde 0x2590 #RIGHT HALF BLOCK +0xdf 0x2580 #UPPER HALF BLOCK +0xe0 0x0440 #CYRILLIC SMALL LETTER ER +0xe1 0x0441 #CYRILLIC SMALL LETTER ES +0xe2 0x0442 #CYRILLIC SMALL LETTER TE +0xe3 0x0443 #CYRILLIC SMALL LETTER U +0xe4 0x0444 #CYRILLIC SMALL LETTER EF +0xe5 0x0445 #CYRILLIC SMALL LETTER HA +0xe6 0x0446 #CYRILLIC SMALL LETTER TSE +0xe7 0x0447 #CYRILLIC SMALL LETTER CHE +0xe8 0x0448 #CYRILLIC SMALL LETTER SHA +0xe9 0x0449 #CYRILLIC SMALL LETTER SHCHA +0xea 0x044a #CYRILLIC SMALL LETTER HARD SIGN +0xeb 0x044b #CYRILLIC SMALL LETTER YERU +0xec 0x044c #CYRILLIC SMALL LETTER SOFT SIGN +0xed 0x044d #CYRILLIC SMALL LETTER E +0xee 0x044e #CYRILLIC SMALL LETTER YU +0xef 0x044f #CYRILLIC SMALL LETTER YA +0xf0 0x0401 #CYRILLIC CAPITAL LETTER IO +0xf1 0x0451 #CYRILLIC SMALL LETTER IO +0xf2 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xf3 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE +0xf4 0x0407 #CYRILLIC CAPITAL LETTER YI +0xf5 0x0457 #CYRILLIC SMALL LETTER YI +0xf6 0x040e #CYRILLIC CAPITAL LETTER SHORT U +0xf7 0x045e #CYRILLIC SMALL LETTER SHORT U +0xf8 0x00b0 #DEGREE SIGN +0xf9 0x2219 #BULLET OPERATOR +0xfa 0x00b7 #MIDDLE DOT +0xfb 0x221a #SQUARE ROOT +0xfc 0x2116 #NUMERO SIGN +0xfd 0x00a4 #CURRENCY SIGN +0xfe 0x25a0 #BLACK SQUARE +0xff 0x00a0 #NO-BREAK SPACE diff --git a/ext/mbstring/tests/data/EUC-JP.txt b/ext/mbstring/tests/data/EUC-JP.txt new file mode 100644 index 0000000000000..8a56f460b139f --- /dev/null +++ b/ext/mbstring/tests/data/EUC-JP.txt @@ -0,0 +1,13137 @@ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0A 0x000A +0x0B 0x000B +0x0C 0x000C +0x0D 0x000D +0x0E 0x000E +0x0F 0x000F +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1A 0x001A +0x1B 0x001B +0x1C 0x001C +0x1D 0x001D +0x1E 0x001E +0x1F 0x001F +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2A 0x002A +0x2B 0x002B +0x2C 0x002C +0x2D 0x002D +0x2E 0x002E +0x2F 0x002F +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3A 0x003A +0x3B 0x003B +0x3C 0x003C +0x3D 0x003D +0x3E 0x003E +0x3F 0x003F +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4A 0x004A +0x4B 0x004B +0x4C 0x004C +0x4D 0x004D +0x4E 0x004E +0x4F 0x004F +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5A 0x005A +0x5B 0x005B +0x5C 0x005C +0x5D 0x005D +0x5E 0x005E +0x5F 0x005F +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6A 0x006A +0x6B 0x006B +0x6C 0x006C +0x6D 0x006D +0x6E 0x006E +0x6F 0x006F +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7A 0x007A +0x7B 0x007B +0x7C 0x007C +0x7D 0x007D +0x7E 0x007E +0x7F 0x007F +0x8EA1 0xFF61 +0x8EA2 0xFF62 +0x8EA3 0xFF63 +0x8EA4 0xFF64 +0x8EA5 0xFF65 +0x8EA6 0xFF66 +0x8EA7 0xFF67 +0x8EA8 0xFF68 +0x8EA9 0xFF69 +0x8EAA 0xFF6A +0x8EAB 0xFF6B +0x8EAC 0xFF6C +0x8EAD 0xFF6D +0x8EAE 0xFF6E +0x8EAF 0xFF6F +0x8EB0 0xFF70 +0x8EB1 0xFF71 +0x8EB2 0xFF72 +0x8EB3 0xFF73 +0x8EB4 0xFF74 +0x8EB5 0xFF75 +0x8EB6 0xFF76 +0x8EB7 0xFF77 +0x8EB8 0xFF78 +0x8EB9 0xFF79 +0x8EBA 0xFF7A +0x8EBB 0xFF7B +0x8EBC 0xFF7C +0x8EBD 0xFF7D +0x8EBE 0xFF7E +0x8EBF 0xFF7F +0x8EC0 0xFF80 +0x8EC1 0xFF81 +0x8EC2 0xFF82 +0x8EC3 0xFF83 +0x8EC4 0xFF84 +0x8EC5 0xFF85 +0x8EC6 0xFF86 +0x8EC7 0xFF87 +0x8EC8 0xFF88 +0x8EC9 0xFF89 +0x8ECA 0xFF8A +0x8ECB 0xFF8B +0x8ECC 0xFF8C +0x8ECD 0xFF8D +0x8ECE 0xFF8E +0x8ECF 0xFF8F +0x8ED0 0xFF90 +0x8ED1 0xFF91 +0x8ED2 0xFF92 +0x8ED3 0xFF93 +0x8ED4 0xFF94 +0x8ED5 0xFF95 +0x8ED6 0xFF96 +0x8ED7 0xFF97 +0x8ED8 0xFF98 +0x8ED9 0xFF99 +0x8EDA 0xFF9A +0x8EDB 0xFF9B +0x8EDC 0xFF9C +0x8EDD 0xFF9D +0x8EDE 0xFF9E +0x8EDF 0xFF9F +0x8FA2AF 0x02D8 +0x8FA2B0 0x02C7 +0x8FA2B1 0x00B8 +0x8FA2B2 0x02D9 +0x8FA2B3 0x02DD +0x8FA2B4 0x00AF +0x8FA2B5 0x02DB +0x8FA2B6 0x02DA +0x8FA2B7 0x007E +0x8FA2B8 0x0384 +0x8FA2B9 0x0385 +0x8FA2C2 0x00A1 +0x8FA2C3 0x00A6 +0x8FA2C4 0x00BF +0x8FA2EB 0x00BA +0x8FA2EC 0x00AA +0x8FA2ED 0x00A9 +0x8FA2EE 0x00AE +0x8FA2EF 0x2122 +0x8FA2F0 0x00A4 +0x8FA2F1 0x2116 +0x8FA6E1 0x0386 +0x8FA6E2 0x0388 +0x8FA6E3 0x0389 +0x8FA6E4 0x038A +0x8FA6E5 0x03AA +0x8FA6E7 0x038C +0x8FA6E9 0x038E +0x8FA6EA 0x03AB +0x8FA6EC 0x038F +0x8FA6F1 0x03AC +0x8FA6F2 0x03AD +0x8FA6F3 0x03AE +0x8FA6F4 0x03AF +0x8FA6F5 0x03CA +0x8FA6F6 0x0390 +0x8FA6F7 0x03CC +0x8FA6F8 0x03C2 +0x8FA6F9 0x03CD +0x8FA6FA 0x03CB +0x8FA6FB 0x03B0 +0x8FA6FC 0x03CE +0x8FA7C2 0x0402 +0x8FA7C3 0x0403 +0x8FA7C4 0x0404 +0x8FA7C5 0x0405 +0x8FA7C6 0x0406 +0x8FA7C7 0x0407 +0x8FA7C8 0x0408 +0x8FA7C9 0x0409 +0x8FA7CA 0x040A +0x8FA7CB 0x040B +0x8FA7CC 0x040C +0x8FA7CD 0x040E +0x8FA7CE 0x040F +0x8FA7F2 0x0452 +0x8FA7F3 0x0453 +0x8FA7F4 0x0454 +0x8FA7F5 0x0455 +0x8FA7F6 0x0456 +0x8FA7F7 0x0457 +0x8FA7F8 0x0458 +0x8FA7F9 0x0459 +0x8FA7FA 0x045A +0x8FA7FB 0x045B +0x8FA7FC 0x045C +0x8FA7FD 0x045E +0x8FA7FE 0x045F +0x8FA9A1 0x00C6 +0x8FA9A2 0x0110 +0x8FA9A4 0x0126 +0x8FA9A6 0x0132 +0x8FA9A8 0x0141 +0x8FA9A9 0x013F +0x8FA9AB 0x014A +0x8FA9AC 0x00D8 +0x8FA9AD 0x0152 +0x8FA9AF 0x0166 +0x8FA9B0 0x00DE +0x8FA9C1 0x00E6 +0x8FA9C2 0x0111 +0x8FA9C3 0x00F0 +0x8FA9C4 0x0127 +0x8FA9C5 0x0131 +0x8FA9C6 0x0133 +0x8FA9C7 0x0138 +0x8FA9C8 0x0142 +0x8FA9C9 0x0140 +0x8FA9CA 0x0149 +0x8FA9CB 0x014B +0x8FA9CC 0x00F8 +0x8FA9CD 0x0153 +0x8FA9CE 0x00DF +0x8FA9CF 0x0167 +0x8FA9D0 0x00FE +0x8FAAA1 0x00C1 +0x8FAAA2 0x00C0 +0x8FAAA3 0x00C4 +0x8FAAA4 0x00C2 +0x8FAAA5 0x0102 +0x8FAAA6 0x01CD +0x8FAAA7 0x0100 +0x8FAAA8 0x0104 +0x8FAAA9 0x00C5 +0x8FAAAA 0x00C3 +0x8FAAAB 0x0106 +0x8FAAAC 0x0108 +0x8FAAAD 0x010C +0x8FAAAE 0x00C7 +0x8FAAAF 0x010A +0x8FAAB0 0x010E +0x8FAAB1 0x00C9 +0x8FAAB2 0x00C8 +0x8FAAB3 0x00CB +0x8FAAB4 0x00CA +0x8FAAB5 0x011A +0x8FAAB6 0x0116 +0x8FAAB7 0x0112 +0x8FAAB8 0x0118 +0x8FAABA 0x011C +0x8FAABB 0x011E +0x8FAABC 0x0122 +0x8FAABD 0x0120 +0x8FAABE 0x0124 +0x8FAABF 0x00CD +0x8FAAC0 0x00CC +0x8FAAC1 0x00CF +0x8FAAC2 0x00CE +0x8FAAC3 0x01CF +0x8FAAC4 0x0130 +0x8FAAC5 0x012A +0x8FAAC6 0x012E +0x8FAAC7 0x0128 +0x8FAAC8 0x0134 +0x8FAAC9 0x0136 +0x8FAACA 0x0139 +0x8FAACB 0x013D +0x8FAACC 0x013B +0x8FAACD 0x0143 +0x8FAACE 0x0147 +0x8FAACF 0x0145 +0x8FAAD0 0x00D1 +0x8FAAD1 0x00D3 +0x8FAAD2 0x00D2 +0x8FAAD3 0x00D6 +0x8FAAD4 0x00D4 +0x8FAAD5 0x01D1 +0x8FAAD6 0x0150 +0x8FAAD7 0x014C +0x8FAAD8 0x00D5 +0x8FAAD9 0x0154 +0x8FAADA 0x0158 +0x8FAADB 0x0156 +0x8FAADC 0x015A +0x8FAADD 0x015C +0x8FAADE 0x0160 +0x8FAADF 0x015E +0x8FAAE0 0x0164 +0x8FAAE1 0x0162 +0x8FAAE2 0x00DA +0x8FAAE3 0x00D9 +0x8FAAE4 0x00DC +0x8FAAE5 0x00DB +0x8FAAE6 0x016C +0x8FAAE7 0x01D3 +0x8FAAE8 0x0170 +0x8FAAE9 0x016A +0x8FAAEA 0x0172 +0x8FAAEB 0x016E +0x8FAAEC 0x0168 +0x8FAAED 0x01D7 +0x8FAAEE 0x01DB +0x8FAAEF 0x01D9 +0x8FAAF0 0x01D5 +0x8FAAF1 0x0174 +0x8FAAF2 0x00DD +0x8FAAF3 0x0178 +0x8FAAF4 0x0176 +0x8FAAF5 0x0179 +0x8FAAF6 0x017D +0x8FAAF7 0x017B +0x8FABA1 0x00E1 +0x8FABA2 0x00E0 +0x8FABA3 0x00E4 +0x8FABA4 0x00E2 +0x8FABA5 0x0103 +0x8FABA6 0x01CE +0x8FABA7 0x0101 +0x8FABA8 0x0105 +0x8FABA9 0x00E5 +0x8FABAA 0x00E3 +0x8FABAB 0x0107 +0x8FABAC 0x0109 +0x8FABAD 0x010D +0x8FABAE 0x00E7 +0x8FABAF 0x010B +0x8FABB0 0x010F +0x8FABB1 0x00E9 +0x8FABB2 0x00E8 +0x8FABB3 0x00EB +0x8FABB4 0x00EA +0x8FABB5 0x011B +0x8FABB6 0x0117 +0x8FABB7 0x0113 +0x8FABB8 0x0119 +0x8FABB9 0x01F5 +0x8FABBA 0x011D +0x8FABBB 0x011F +0x8FABBD 0x0121 +0x8FABBE 0x0125 +0x8FABBF 0x00ED +0x8FABC0 0x00EC +0x8FABC1 0x00EF +0x8FABC2 0x00EE +0x8FABC3 0x01D0 +0x8FABC5 0x012B +0x8FABC6 0x012F +0x8FABC7 0x0129 +0x8FABC8 0x0135 +0x8FABC9 0x0137 +0x8FABCA 0x013A +0x8FABCB 0x013E +0x8FABCC 0x013C +0x8FABCD 0x0144 +0x8FABCE 0x0148 +0x8FABCF 0x0146 +0x8FABD0 0x00F1 +0x8FABD1 0x00F3 +0x8FABD2 0x00F2 +0x8FABD3 0x00F6 +0x8FABD4 0x00F4 +0x8FABD5 0x01D2 +0x8FABD6 0x0151 +0x8FABD7 0x014D +0x8FABD8 0x00F5 +0x8FABD9 0x0155 +0x8FABDA 0x0159 +0x8FABDB 0x0157 +0x8FABDC 0x015B +0x8FABDD 0x015D +0x8FABDE 0x0161 +0x8FABDF 0x015F +0x8FABE0 0x0165 +0x8FABE1 0x0163 +0x8FABE2 0x00FA +0x8FABE3 0x00F9 +0x8FABE4 0x00FC +0x8FABE5 0x00FB +0x8FABE6 0x016D +0x8FABE7 0x01D4 +0x8FABE8 0x0171 +0x8FABE9 0x016B +0x8FABEA 0x0173 +0x8FABEB 0x016F +0x8FABEC 0x0169 +0x8FABED 0x01D8 +0x8FABEE 0x01DC +0x8FABEF 0x01DA +0x8FABF0 0x01D6 +0x8FABF1 0x0175 +0x8FABF2 0x00FD +0x8FABF3 0x00FF +0x8FABF4 0x0177 +0x8FABF5 0x017A +0x8FABF6 0x017E +0x8FABF7 0x017C +0x8FB0A1 0x4E02 +0x8FB0A2 0x4E04 +0x8FB0A3 0x4E05 +0x8FB0A4 0x4E0C +0x8FB0A5 0x4E12 +0x8FB0A6 0x4E1F +0x8FB0A7 0x4E23 +0x8FB0A8 0x4E24 +0x8FB0A9 0x4E28 +0x8FB0AA 0x4E2B +0x8FB0AB 0x4E2E +0x8FB0AC 0x4E2F +0x8FB0AD 0x4E30 +0x8FB0AE 0x4E35 +0x8FB0AF 0x4E40 +0x8FB0B0 0x4E41 +0x8FB0B1 0x4E44 +0x8FB0B2 0x4E47 +0x8FB0B3 0x4E51 +0x8FB0B4 0x4E5A +0x8FB0B5 0x4E5C +0x8FB0B6 0x4E63 +0x8FB0B7 0x4E68 +0x8FB0B8 0x4E69 +0x8FB0B9 0x4E74 +0x8FB0BA 0x4E75 +0x8FB0BB 0x4E79 +0x8FB0BC 0x4E7F +0x8FB0BD 0x4E8D +0x8FB0BE 0x4E96 +0x8FB0BF 0x4E97 +0x8FB0C0 0x4E9D +0x8FB0C1 0x4EAF +0x8FB0C2 0x4EB9 +0x8FB0C3 0x4EC3 +0x8FB0C4 0x4ED0 +0x8FB0C5 0x4EDA +0x8FB0C6 0x4EDB +0x8FB0C7 0x4EE0 +0x8FB0C8 0x4EE1 +0x8FB0C9 0x4EE2 +0x8FB0CA 0x4EE8 +0x8FB0CB 0x4EEF +0x8FB0CC 0x4EF1 +0x8FB0CD 0x4EF3 +0x8FB0CE 0x4EF5 +0x8FB0CF 0x4EFD +0x8FB0D0 0x4EFE +0x8FB0D1 0x4EFF +0x8FB0D2 0x4F00 +0x8FB0D3 0x4F02 +0x8FB0D4 0x4F03 +0x8FB0D5 0x4F08 +0x8FB0D6 0x4F0B +0x8FB0D7 0x4F0C +0x8FB0D8 0x4F12 +0x8FB0D9 0x4F15 +0x8FB0DA 0x4F16 +0x8FB0DB 0x4F17 +0x8FB0DC 0x4F19 +0x8FB0DD 0x4F2E +0x8FB0DE 0x4F31 +0x8FB0DF 0x4F60 +0x8FB0E0 0x4F33 +0x8FB0E1 0x4F35 +0x8FB0E2 0x4F37 +0x8FB0E3 0x4F39 +0x8FB0E4 0x4F3B +0x8FB0E5 0x4F3E +0x8FB0E6 0x4F40 +0x8FB0E7 0x4F42 +0x8FB0E8 0x4F48 +0x8FB0E9 0x4F49 +0x8FB0EA 0x4F4B +0x8FB0EB 0x4F4C +0x8FB0EC 0x4F52 +0x8FB0ED 0x4F54 +0x8FB0EE 0x4F56 +0x8FB0EF 0x4F58 +0x8FB0F0 0x4F5F +0x8FB0F1 0x4F63 +0x8FB0F2 0x4F6A +0x8FB0F3 0x4F6C +0x8FB0F4 0x4F6E +0x8FB0F5 0x4F71 +0x8FB0F6 0x4F77 +0x8FB0F7 0x4F78 +0x8FB0F8 0x4F79 +0x8FB0F9 0x4F7A +0x8FB0FA 0x4F7D +0x8FB0FB 0x4F7E +0x8FB0FC 0x4F81 +0x8FB0FD 0x4F82 +0x8FB0FE 0x4F84 +0x8FB1A1 0x4F85 +0x8FB1A2 0x4F89 +0x8FB1A3 0x4F8A +0x8FB1A4 0x4F8C +0x8FB1A5 0x4F8E +0x8FB1A6 0x4F90 +0x8FB1A7 0x4F92 +0x8FB1A8 0x4F93 +0x8FB1A9 0x4F94 +0x8FB1AA 0x4F97 +0x8FB1AB 0x4F99 +0x8FB1AC 0x4F9A +0x8FB1AD 0x4F9E +0x8FB1AE 0x4F9F +0x8FB1AF 0x4FB2 +0x8FB1B0 0x4FB7 +0x8FB1B1 0x4FB9 +0x8FB1B2 0x4FBB +0x8FB1B3 0x4FBC +0x8FB1B4 0x4FBD +0x8FB1B5 0x4FBE +0x8FB1B6 0x4FC0 +0x8FB1B7 0x4FC1 +0x8FB1B8 0x4FC5 +0x8FB1B9 0x4FC6 +0x8FB1BA 0x4FC8 +0x8FB1BB 0x4FC9 +0x8FB1BC 0x4FCB +0x8FB1BD 0x4FCC +0x8FB1BE 0x4FCD +0x8FB1BF 0x4FCF +0x8FB1C0 0x4FD2 +0x8FB1C1 0x4FDC +0x8FB1C2 0x4FE0 +0x8FB1C3 0x4FE2 +0x8FB1C4 0x4FF0 +0x8FB1C5 0x4FF2 +0x8FB1C6 0x4FFC +0x8FB1C7 0x4FFD +0x8FB1C8 0x4FFF +0x8FB1C9 0x5000 +0x8FB1CA 0x5001 +0x8FB1CB 0x5004 +0x8FB1CC 0x5007 +0x8FB1CD 0x500A +0x8FB1CE 0x500C +0x8FB1CF 0x500E +0x8FB1D0 0x5010 +0x8FB1D1 0x5013 +0x8FB1D2 0x5017 +0x8FB1D3 0x5018 +0x8FB1D4 0x501B +0x8FB1D5 0x501C +0x8FB1D6 0x501D +0x8FB1D7 0x501E +0x8FB1D8 0x5022 +0x8FB1D9 0x5027 +0x8FB1DA 0x502E +0x8FB1DB 0x5030 +0x8FB1DC 0x5032 +0x8FB1DD 0x5033 +0x8FB1DE 0x5035 +0x8FB1DF 0x5040 +0x8FB1E0 0x5041 +0x8FB1E1 0x5042 +0x8FB1E2 0x5045 +0x8FB1E3 0x5046 +0x8FB1E4 0x504A +0x8FB1E5 0x504C +0x8FB1E6 0x504E +0x8FB1E7 0x5051 +0x8FB1E8 0x5052 +0x8FB1E9 0x5053 +0x8FB1EA 0x5057 +0x8FB1EB 0x5059 +0x8FB1EC 0x505F +0x8FB1ED 0x5060 +0x8FB1EE 0x5062 +0x8FB1EF 0x5063 +0x8FB1F0 0x5066 +0x8FB1F1 0x5067 +0x8FB1F2 0x506A +0x8FB1F3 0x506D +0x8FB1F4 0x5070 +0x8FB1F5 0x5071 +0x8FB1F6 0x503B +0x8FB1F7 0x5081 +0x8FB1F8 0x5083 +0x8FB1F9 0x5084 +0x8FB1FA 0x5086 +0x8FB1FB 0x508A +0x8FB1FC 0x508E +0x8FB1FD 0x508F +0x8FB1FE 0x5090 +0x8FB2A1 0x5092 +0x8FB2A2 0x5093 +0x8FB2A3 0x5094 +0x8FB2A4 0x5096 +0x8FB2A5 0x509B +0x8FB2A6 0x509C +0x8FB2A7 0x509E +0x8FB2A8 0x509F +0x8FB2A9 0x50A0 +0x8FB2AA 0x50A1 +0x8FB2AB 0x50A2 +0x8FB2AC 0x50AA +0x8FB2AD 0x50AF +0x8FB2AE 0x50B0 +0x8FB2AF 0x50B9 +0x8FB2B0 0x50BA +0x8FB2B1 0x50BD +0x8FB2B2 0x50C0 +0x8FB2B3 0x50C3 +0x8FB2B4 0x50C4 +0x8FB2B5 0x50C7 +0x8FB2B6 0x50CC +0x8FB2B7 0x50CE +0x8FB2B8 0x50D0 +0x8FB2B9 0x50D3 +0x8FB2BA 0x50D4 +0x8FB2BB 0x50D8 +0x8FB2BC 0x50DC +0x8FB2BD 0x50DD +0x8FB2BE 0x50DF +0x8FB2BF 0x50E2 +0x8FB2C0 0x50E4 +0x8FB2C1 0x50E6 +0x8FB2C2 0x50E8 +0x8FB2C3 0x50E9 +0x8FB2C4 0x50EF +0x8FB2C5 0x50F1 +0x8FB2C6 0x50F6 +0x8FB2C7 0x50FA +0x8FB2C8 0x50FE +0x8FB2C9 0x5103 +0x8FB2CA 0x5106 +0x8FB2CB 0x5107 +0x8FB2CC 0x5108 +0x8FB2CD 0x510B +0x8FB2CE 0x510C +0x8FB2CF 0x510D +0x8FB2D0 0x510E +0x8FB2D1 0x50F2 +0x8FB2D2 0x5110 +0x8FB2D3 0x5117 +0x8FB2D4 0x5119 +0x8FB2D5 0x511B +0x8FB2D6 0x511C +0x8FB2D7 0x511D +0x8FB2D8 0x511E +0x8FB2D9 0x5123 +0x8FB2DA 0x5127 +0x8FB2DB 0x5128 +0x8FB2DC 0x512C +0x8FB2DD 0x512D +0x8FB2DE 0x512F +0x8FB2DF 0x5131 +0x8FB2E0 0x5133 +0x8FB2E1 0x5134 +0x8FB2E2 0x5135 +0x8FB2E3 0x5138 +0x8FB2E4 0x5139 +0x8FB2E5 0x5142 +0x8FB2E6 0x514A +0x8FB2E7 0x514F +0x8FB2E8 0x5153 +0x8FB2E9 0x5155 +0x8FB2EA 0x5157 +0x8FB2EB 0x5158 +0x8FB2EC 0x515F +0x8FB2ED 0x5164 +0x8FB2EE 0x5166 +0x8FB2EF 0x517E +0x8FB2F0 0x5183 +0x8FB2F1 0x5184 +0x8FB2F2 0x518B +0x8FB2F3 0x518E +0x8FB2F4 0x5198 +0x8FB2F5 0x519D +0x8FB2F6 0x51A1 +0x8FB2F7 0x51A3 +0x8FB2F8 0x51AD +0x8FB2F9 0x51B8 +0x8FB2FA 0x51BA +0x8FB2FB 0x51BC +0x8FB2FC 0x51BE +0x8FB2FD 0x51BF +0x8FB2FE 0x51C2 +0x8FB3A1 0x51C8 +0x8FB3A2 0x51CF +0x8FB3A3 0x51D1 +0x8FB3A4 0x51D2 +0x8FB3A5 0x51D3 +0x8FB3A6 0x51D5 +0x8FB3A7 0x51D8 +0x8FB3A8 0x51DE +0x8FB3A9 0x51E2 +0x8FB3AA 0x51E5 +0x8FB3AB 0x51EE +0x8FB3AC 0x51F2 +0x8FB3AD 0x51F3 +0x8FB3AE 0x51F4 +0x8FB3AF 0x51F7 +0x8FB3B0 0x5201 +0x8FB3B1 0x5202 +0x8FB3B2 0x5205 +0x8FB3B3 0x5212 +0x8FB3B4 0x5213 +0x8FB3B5 0x5215 +0x8FB3B6 0x5216 +0x8FB3B7 0x5218 +0x8FB3B8 0x5222 +0x8FB3B9 0x5228 +0x8FB3BA 0x5231 +0x8FB3BB 0x5232 +0x8FB3BC 0x5235 +0x8FB3BD 0x523C +0x8FB3BE 0x5245 +0x8FB3BF 0x5249 +0x8FB3C0 0x5255 +0x8FB3C1 0x5257 +0x8FB3C2 0x5258 +0x8FB3C3 0x525A +0x8FB3C4 0x525C +0x8FB3C5 0x525F +0x8FB3C6 0x5260 +0x8FB3C7 0x5261 +0x8FB3C8 0x5266 +0x8FB3C9 0x526E +0x8FB3CA 0x5277 +0x8FB3CB 0x5278 +0x8FB3CC 0x5279 +0x8FB3CD 0x5280 +0x8FB3CE 0x5282 +0x8FB3CF 0x5285 +0x8FB3D0 0x528A +0x8FB3D1 0x528C +0x8FB3D2 0x5293 +0x8FB3D3 0x5295 +0x8FB3D4 0x5296 +0x8FB3D5 0x5297 +0x8FB3D6 0x5298 +0x8FB3D7 0x529A +0x8FB3D8 0x529C +0x8FB3D9 0x52A4 +0x8FB3DA 0x52A5 +0x8FB3DB 0x52A6 +0x8FB3DC 0x52A7 +0x8FB3DD 0x52AF +0x8FB3DE 0x52B0 +0x8FB3DF 0x52B6 +0x8FB3E0 0x52B7 +0x8FB3E1 0x52B8 +0x8FB3E2 0x52BA +0x8FB3E3 0x52BB +0x8FB3E4 0x52BD +0x8FB3E5 0x52C0 +0x8FB3E6 0x52C4 +0x8FB3E7 0x52C6 +0x8FB3E8 0x52C8 +0x8FB3E9 0x52CC +0x8FB3EA 0x52CF +0x8FB3EB 0x52D1 +0x8FB3EC 0x52D4 +0x8FB3ED 0x52D6 +0x8FB3EE 0x52DB +0x8FB3EF 0x52DC +0x8FB3F0 0x52E1 +0x8FB3F1 0x52E5 +0x8FB3F2 0x52E8 +0x8FB3F3 0x52E9 +0x8FB3F4 0x52EA +0x8FB3F5 0x52EC +0x8FB3F6 0x52F0 +0x8FB3F7 0x52F1 +0x8FB3F8 0x52F4 +0x8FB3F9 0x52F6 +0x8FB3FA 0x52F7 +0x8FB3FB 0x5300 +0x8FB3FC 0x5303 +0x8FB3FD 0x530A +0x8FB3FE 0x530B +0x8FB4A1 0x530C +0x8FB4A2 0x5311 +0x8FB4A3 0x5313 +0x8FB4A4 0x5318 +0x8FB4A5 0x531B +0x8FB4A6 0x531C +0x8FB4A7 0x531E +0x8FB4A8 0x531F +0x8FB4A9 0x5325 +0x8FB4AA 0x5327 +0x8FB4AB 0x5328 +0x8FB4AC 0x5329 +0x8FB4AD 0x532B +0x8FB4AE 0x532C +0x8FB4AF 0x532D +0x8FB4B0 0x5330 +0x8FB4B1 0x5332 +0x8FB4B2 0x5335 +0x8FB4B3 0x533C +0x8FB4B4 0x533D +0x8FB4B5 0x533E +0x8FB4B6 0x5342 +0x8FB4B7 0x534C +0x8FB4B8 0x534B +0x8FB4B9 0x5359 +0x8FB4BA 0x535B +0x8FB4BB 0x5361 +0x8FB4BC 0x5363 +0x8FB4BD 0x5365 +0x8FB4BE 0x536C +0x8FB4BF 0x536D +0x8FB4C0 0x5372 +0x8FB4C1 0x5379 +0x8FB4C2 0x537E +0x8FB4C3 0x5383 +0x8FB4C4 0x5387 +0x8FB4C5 0x5388 +0x8FB4C6 0x538E +0x8FB4C7 0x5393 +0x8FB4C8 0x5394 +0x8FB4C9 0x5399 +0x8FB4CA 0x539D +0x8FB4CB 0x53A1 +0x8FB4CC 0x53A4 +0x8FB4CD 0x53AA +0x8FB4CE 0x53AB +0x8FB4CF 0x53AF +0x8FB4D0 0x53B2 +0x8FB4D1 0x53B4 +0x8FB4D2 0x53B5 +0x8FB4D3 0x53B7 +0x8FB4D4 0x53B8 +0x8FB4D5 0x53BA +0x8FB4D6 0x53BD +0x8FB4D7 0x53C0 +0x8FB4D8 0x53C5 +0x8FB4D9 0x53CF +0x8FB4DA 0x53D2 +0x8FB4DB 0x53D3 +0x8FB4DC 0x53D5 +0x8FB4DD 0x53DA +0x8FB4DE 0x53DD +0x8FB4DF 0x53DE +0x8FB4E0 0x53E0 +0x8FB4E1 0x53E6 +0x8FB4E2 0x53E7 +0x8FB4E3 0x53F5 +0x8FB4E4 0x5402 +0x8FB4E5 0x5413 +0x8FB4E6 0x541A +0x8FB4E7 0x5421 +0x8FB4E8 0x5427 +0x8FB4E9 0x5428 +0x8FB4EA 0x542A +0x8FB4EB 0x542F +0x8FB4EC 0x5431 +0x8FB4ED 0x5434 +0x8FB4EE 0x5435 +0x8FB4EF 0x5443 +0x8FB4F0 0x5444 +0x8FB4F1 0x5447 +0x8FB4F2 0x544D +0x8FB4F3 0x544F +0x8FB4F4 0x545E +0x8FB4F5 0x5462 +0x8FB4F6 0x5464 +0x8FB4F7 0x5466 +0x8FB4F8 0x5467 +0x8FB4F9 0x5469 +0x8FB4FA 0x546B +0x8FB4FB 0x546D +0x8FB4FC 0x546E +0x8FB4FD 0x5474 +0x8FB4FE 0x547F +0x8FB5A1 0x5481 +0x8FB5A2 0x5483 +0x8FB5A3 0x5485 +0x8FB5A4 0x5488 +0x8FB5A5 0x5489 +0x8FB5A6 0x548D +0x8FB5A7 0x5491 +0x8FB5A8 0x5495 +0x8FB5A9 0x5496 +0x8FB5AA 0x549C +0x8FB5AB 0x549F +0x8FB5AC 0x54A1 +0x8FB5AD 0x54A6 +0x8FB5AE 0x54A7 +0x8FB5AF 0x54A9 +0x8FB5B0 0x54AA +0x8FB5B1 0x54AD +0x8FB5B2 0x54AE +0x8FB5B3 0x54B1 +0x8FB5B4 0x54B7 +0x8FB5B5 0x54B9 +0x8FB5B6 0x54BA +0x8FB5B7 0x54BB +0x8FB5B8 0x54BF +0x8FB5B9 0x54C6 +0x8FB5BA 0x54CA +0x8FB5BB 0x54CD +0x8FB5BC 0x54CE +0x8FB5BD 0x54E0 +0x8FB5BE 0x54EA +0x8FB5BF 0x54EC +0x8FB5C0 0x54EF +0x8FB5C1 0x54F6 +0x8FB5C2 0x54FC +0x8FB5C3 0x54FE +0x8FB5C4 0x54FF +0x8FB5C5 0x5500 +0x8FB5C6 0x5501 +0x8FB5C7 0x5505 +0x8FB5C8 0x5508 +0x8FB5C9 0x5509 +0x8FB5CA 0x550C +0x8FB5CB 0x550D +0x8FB5CC 0x550E +0x8FB5CD 0x5515 +0x8FB5CE 0x552A +0x8FB5CF 0x552B +0x8FB5D0 0x5532 +0x8FB5D1 0x5535 +0x8FB5D2 0x5536 +0x8FB5D3 0x553B +0x8FB5D4 0x553C +0x8FB5D5 0x553D +0x8FB5D6 0x5541 +0x8FB5D7 0x5547 +0x8FB5D8 0x5549 +0x8FB5D9 0x554A +0x8FB5DA 0x554D +0x8FB5DB 0x5550 +0x8FB5DC 0x5551 +0x8FB5DD 0x5558 +0x8FB5DE 0x555A +0x8FB5DF 0x555B +0x8FB5E0 0x555E +0x8FB5E1 0x5560 +0x8FB5E2 0x5561 +0x8FB5E3 0x5564 +0x8FB5E4 0x5566 +0x8FB5E5 0x557F +0x8FB5E6 0x5581 +0x8FB5E7 0x5582 +0x8FB5E8 0x5586 +0x8FB5E9 0x5588 +0x8FB5EA 0x558E +0x8FB5EB 0x558F +0x8FB5EC 0x5591 +0x8FB5ED 0x5592 +0x8FB5EE 0x5593 +0x8FB5EF 0x5594 +0x8FB5F0 0x5597 +0x8FB5F1 0x55A3 +0x8FB5F2 0x55A4 +0x8FB5F3 0x55AD +0x8FB5F4 0x55B2 +0x8FB5F5 0x55BF +0x8FB5F6 0x55C1 +0x8FB5F7 0x55C3 +0x8FB5F8 0x55C6 +0x8FB5F9 0x55C9 +0x8FB5FA 0x55CB +0x8FB5FB 0x55CC +0x8FB5FC 0x55CE +0x8FB5FD 0x55D1 +0x8FB5FE 0x55D2 +0x8FB6A1 0x55D3 +0x8FB6A2 0x55D7 +0x8FB6A3 0x55D8 +0x8FB6A4 0x55DB +0x8FB6A5 0x55DE +0x8FB6A6 0x55E2 +0x8FB6A7 0x55E9 +0x8FB6A8 0x55F6 +0x8FB6A9 0x55FF +0x8FB6AA 0x5605 +0x8FB6AB 0x5608 +0x8FB6AC 0x560A +0x8FB6AD 0x560D +0x8FB6AE 0x560E +0x8FB6AF 0x560F +0x8FB6B0 0x5610 +0x8FB6B1 0x5611 +0x8FB6B2 0x5612 +0x8FB6B3 0x5619 +0x8FB6B4 0x562C +0x8FB6B5 0x5630 +0x8FB6B6 0x5633 +0x8FB6B7 0x5635 +0x8FB6B8 0x5637 +0x8FB6B9 0x5639 +0x8FB6BA 0x563B +0x8FB6BB 0x563C +0x8FB6BC 0x563D +0x8FB6BD 0x563F +0x8FB6BE 0x5640 +0x8FB6BF 0x5641 +0x8FB6C0 0x5643 +0x8FB6C1 0x5644 +0x8FB6C2 0x5646 +0x8FB6C3 0x5649 +0x8FB6C4 0x564B +0x8FB6C5 0x564D +0x8FB6C6 0x564F +0x8FB6C7 0x5654 +0x8FB6C8 0x565E +0x8FB6C9 0x5660 +0x8FB6CA 0x5661 +0x8FB6CB 0x5662 +0x8FB6CC 0x5663 +0x8FB6CD 0x5666 +0x8FB6CE 0x5669 +0x8FB6CF 0x566D +0x8FB6D0 0x566F +0x8FB6D1 0x5671 +0x8FB6D2 0x5672 +0x8FB6D3 0x5675 +0x8FB6D4 0x5684 +0x8FB6D5 0x5685 +0x8FB6D6 0x5688 +0x8FB6D7 0x568B +0x8FB6D8 0x568C +0x8FB6D9 0x5695 +0x8FB6DA 0x5699 +0x8FB6DB 0x569A +0x8FB6DC 0x569D +0x8FB6DD 0x569E +0x8FB6DE 0x569F +0x8FB6DF 0x56A6 +0x8FB6E0 0x56A7 +0x8FB6E1 0x56A8 +0x8FB6E2 0x56A9 +0x8FB6E3 0x56AB +0x8FB6E4 0x56AC +0x8FB6E5 0x56AD +0x8FB6E6 0x56B1 +0x8FB6E7 0x56B3 +0x8FB6E8 0x56B7 +0x8FB6E9 0x56BE +0x8FB6EA 0x56C5 +0x8FB6EB 0x56C9 +0x8FB6EC 0x56CA +0x8FB6ED 0x56CB +0x8FB6EE 0x56CF +0x8FB6EF 0x56D0 +0x8FB6F0 0x56CC +0x8FB6F1 0x56CD +0x8FB6F2 0x56D9 +0x8FB6F3 0x56DC +0x8FB6F4 0x56DD +0x8FB6F5 0x56DF +0x8FB6F6 0x56E1 +0x8FB6F7 0x56E4 +0x8FB6F8 0x56E5 +0x8FB6F9 0x56E6 +0x8FB6FA 0x56E7 +0x8FB6FB 0x56E8 +0x8FB6FC 0x56F1 +0x8FB6FD 0x56EB +0x8FB6FE 0x56ED +0x8FB7A1 0x56F6 +0x8FB7A2 0x56F7 +0x8FB7A3 0x5701 +0x8FB7A4 0x5702 +0x8FB7A5 0x5707 +0x8FB7A6 0x570A +0x8FB7A7 0x570C +0x8FB7A8 0x5711 +0x8FB7A9 0x5715 +0x8FB7AA 0x571A +0x8FB7AB 0x571B +0x8FB7AC 0x571D +0x8FB7AD 0x5720 +0x8FB7AE 0x5722 +0x8FB7AF 0x5723 +0x8FB7B0 0x5724 +0x8FB7B1 0x5725 +0x8FB7B2 0x5729 +0x8FB7B3 0x572A +0x8FB7B4 0x572C +0x8FB7B5 0x572E +0x8FB7B6 0x572F +0x8FB7B7 0x5733 +0x8FB7B8 0x5734 +0x8FB7B9 0x573D +0x8FB7BA 0x573E +0x8FB7BB 0x573F +0x8FB7BC 0x5745 +0x8FB7BD 0x5746 +0x8FB7BE 0x574C +0x8FB7BF 0x574D +0x8FB7C0 0x5752 +0x8FB7C1 0x5762 +0x8FB7C2 0x5765 +0x8FB7C3 0x5767 +0x8FB7C4 0x5768 +0x8FB7C5 0x576B +0x8FB7C6 0x576D +0x8FB7C7 0x576E +0x8FB7C8 0x576F +0x8FB7C9 0x5770 +0x8FB7CA 0x5771 +0x8FB7CB 0x5773 +0x8FB7CC 0x5774 +0x8FB7CD 0x5775 +0x8FB7CE 0x5777 +0x8FB7CF 0x5779 +0x8FB7D0 0x577A +0x8FB7D1 0x577B +0x8FB7D2 0x577C +0x8FB7D3 0x577E +0x8FB7D4 0x5781 +0x8FB7D5 0x5783 +0x8FB7D6 0x578C +0x8FB7D7 0x5794 +0x8FB7D8 0x5797 +0x8FB7D9 0x5799 +0x8FB7DA 0x579A +0x8FB7DB 0x579C +0x8FB7DC 0x579D +0x8FB7DD 0x579E +0x8FB7DE 0x579F +0x8FB7DF 0x57A1 +0x8FB7E0 0x5795 +0x8FB7E1 0x57A7 +0x8FB7E2 0x57A8 +0x8FB7E3 0x57A9 +0x8FB7E4 0x57AC +0x8FB7E5 0x57B8 +0x8FB7E6 0x57BD +0x8FB7E7 0x57C7 +0x8FB7E8 0x57C8 +0x8FB7E9 0x57CC +0x8FB7EA 0x57CF +0x8FB7EB 0x57D5 +0x8FB7EC 0x57DD +0x8FB7ED 0x57DE +0x8FB7EE 0x57E4 +0x8FB7EF 0x57E6 +0x8FB7F0 0x57E7 +0x8FB7F1 0x57E9 +0x8FB7F2 0x57ED +0x8FB7F3 0x57F0 +0x8FB7F4 0x57F5 +0x8FB7F5 0x57F6 +0x8FB7F6 0x57F8 +0x8FB7F7 0x57FD +0x8FB7F8 0x57FE +0x8FB7F9 0x57FF +0x8FB7FA 0x5803 +0x8FB7FB 0x5804 +0x8FB7FC 0x5808 +0x8FB7FD 0x5809 +0x8FB7FE 0x57E1 +0x8FB8A1 0x580C +0x8FB8A2 0x580D +0x8FB8A3 0x581B +0x8FB8A4 0x581E +0x8FB8A5 0x581F +0x8FB8A6 0x5820 +0x8FB8A7 0x5826 +0x8FB8A8 0x5827 +0x8FB8A9 0x582D +0x8FB8AA 0x5832 +0x8FB8AB 0x5839 +0x8FB8AC 0x583F +0x8FB8AD 0x5849 +0x8FB8AE 0x584C +0x8FB8AF 0x584D +0x8FB8B0 0x584F +0x8FB8B1 0x5850 +0x8FB8B2 0x5855 +0x8FB8B3 0x585F +0x8FB8B4 0x5861 +0x8FB8B5 0x5864 +0x8FB8B6 0x5867 +0x8FB8B7 0x5868 +0x8FB8B8 0x5878 +0x8FB8B9 0x587C +0x8FB8BA 0x587F +0x8FB8BB 0x5880 +0x8FB8BC 0x5881 +0x8FB8BD 0x5887 +0x8FB8BE 0x5888 +0x8FB8BF 0x5889 +0x8FB8C0 0x588A +0x8FB8C1 0x588C +0x8FB8C2 0x588D +0x8FB8C3 0x588F +0x8FB8C4 0x5890 +0x8FB8C5 0x5894 +0x8FB8C6 0x5896 +0x8FB8C7 0x589D +0x8FB8C8 0x58A0 +0x8FB8C9 0x58A1 +0x8FB8CA 0x58A2 +0x8FB8CB 0x58A6 +0x8FB8CC 0x58A9 +0x8FB8CD 0x58B1 +0x8FB8CE 0x58B2 +0x8FB8CF 0x58C4 +0x8FB8D0 0x58BC +0x8FB8D1 0x58C2 +0x8FB8D2 0x58C8 +0x8FB8D3 0x58CD +0x8FB8D4 0x58CE +0x8FB8D5 0x58D0 +0x8FB8D6 0x58D2 +0x8FB8D7 0x58D4 +0x8FB8D8 0x58D6 +0x8FB8D9 0x58DA +0x8FB8DA 0x58DD +0x8FB8DB 0x58E1 +0x8FB8DC 0x58E2 +0x8FB8DD 0x58E9 +0x8FB8DE 0x58F3 +0x8FB8DF 0x5905 +0x8FB8E0 0x5906 +0x8FB8E1 0x590B +0x8FB8E2 0x590C +0x8FB8E3 0x5912 +0x8FB8E4 0x5913 +0x8FB8E5 0x5914 +0x8FB8E6 0x8641 +0x8FB8E7 0x591D +0x8FB8E8 0x5921 +0x8FB8E9 0x5923 +0x8FB8EA 0x5924 +0x8FB8EB 0x5928 +0x8FB8EC 0x592F +0x8FB8ED 0x5930 +0x8FB8EE 0x5933 +0x8FB8EF 0x5935 +0x8FB8F0 0x5936 +0x8FB8F1 0x593F +0x8FB8F2 0x5943 +0x8FB8F3 0x5946 +0x8FB8F4 0x5952 +0x8FB8F5 0x5953 +0x8FB8F6 0x5959 +0x8FB8F7 0x595B +0x8FB8F8 0x595D +0x8FB8F9 0x595E +0x8FB8FA 0x595F +0x8FB8FB 0x5961 +0x8FB8FC 0x5963 +0x8FB8FD 0x596B +0x8FB8FE 0x596D +0x8FB9A1 0x596F +0x8FB9A2 0x5972 +0x8FB9A3 0x5975 +0x8FB9A4 0x5976 +0x8FB9A5 0x5979 +0x8FB9A6 0x597B +0x8FB9A7 0x597C +0x8FB9A8 0x598B +0x8FB9A9 0x598C +0x8FB9AA 0x598E +0x8FB9AB 0x5992 +0x8FB9AC 0x5995 +0x8FB9AD 0x5997 +0x8FB9AE 0x599F +0x8FB9AF 0x59A4 +0x8FB9B0 0x59A7 +0x8FB9B1 0x59AD +0x8FB9B2 0x59AE +0x8FB9B3 0x59AF +0x8FB9B4 0x59B0 +0x8FB9B5 0x59B3 +0x8FB9B6 0x59B7 +0x8FB9B7 0x59BA +0x8FB9B8 0x59BC +0x8FB9B9 0x59C1 +0x8FB9BA 0x59C3 +0x8FB9BB 0x59C4 +0x8FB9BC 0x59C8 +0x8FB9BD 0x59CA +0x8FB9BE 0x59CD +0x8FB9BF 0x59D2 +0x8FB9C0 0x59DD +0x8FB9C1 0x59DE +0x8FB9C2 0x59DF +0x8FB9C3 0x59E3 +0x8FB9C4 0x59E4 +0x8FB9C5 0x59E7 +0x8FB9C6 0x59EE +0x8FB9C7 0x59EF +0x8FB9C8 0x59F1 +0x8FB9C9 0x59F2 +0x8FB9CA 0x59F4 +0x8FB9CB 0x59F7 +0x8FB9CC 0x5A00 +0x8FB9CD 0x5A04 +0x8FB9CE 0x5A0C +0x8FB9CF 0x5A0D +0x8FB9D0 0x5A0E +0x8FB9D1 0x5A12 +0x8FB9D2 0x5A13 +0x8FB9D3 0x5A1E +0x8FB9D4 0x5A23 +0x8FB9D5 0x5A24 +0x8FB9D6 0x5A27 +0x8FB9D7 0x5A28 +0x8FB9D8 0x5A2A +0x8FB9D9 0x5A2D +0x8FB9DA 0x5A30 +0x8FB9DB 0x5A44 +0x8FB9DC 0x5A45 +0x8FB9DD 0x5A47 +0x8FB9DE 0x5A48 +0x8FB9DF 0x5A4C +0x8FB9E0 0x5A50 +0x8FB9E1 0x5A55 +0x8FB9E2 0x5A5E +0x8FB9E3 0x5A63 +0x8FB9E4 0x5A65 +0x8FB9E5 0x5A67 +0x8FB9E6 0x5A6D +0x8FB9E7 0x5A77 +0x8FB9E8 0x5A7A +0x8FB9E9 0x5A7B +0x8FB9EA 0x5A7E +0x8FB9EB 0x5A8B +0x8FB9EC 0x5A90 +0x8FB9ED 0x5A93 +0x8FB9EE 0x5A96 +0x8FB9EF 0x5A99 +0x8FB9F0 0x5A9C +0x8FB9F1 0x5A9E +0x8FB9F2 0x5A9F +0x8FB9F3 0x5AA0 +0x8FB9F4 0x5AA2 +0x8FB9F5 0x5AA7 +0x8FB9F6 0x5AAC +0x8FB9F7 0x5AB1 +0x8FB9F8 0x5AB2 +0x8FB9F9 0x5AB3 +0x8FB9FA 0x5AB5 +0x8FB9FB 0x5AB8 +0x8FB9FC 0x5ABA +0x8FB9FD 0x5ABB +0x8FB9FE 0x5ABF +0x8FBAA1 0x5AC4 +0x8FBAA2 0x5AC6 +0x8FBAA3 0x5AC8 +0x8FBAA4 0x5ACF +0x8FBAA5 0x5ADA +0x8FBAA6 0x5ADC +0x8FBAA7 0x5AE0 +0x8FBAA8 0x5AE5 +0x8FBAA9 0x5AEA +0x8FBAAA 0x5AEE +0x8FBAAB 0x5AF5 +0x8FBAAC 0x5AF6 +0x8FBAAD 0x5AFD +0x8FBAAE 0x5B00 +0x8FBAAF 0x5B01 +0x8FBAB0 0x5B08 +0x8FBAB1 0x5B17 +0x8FBAB2 0x5B34 +0x8FBAB3 0x5B19 +0x8FBAB4 0x5B1B +0x8FBAB5 0x5B1D +0x8FBAB6 0x5B21 +0x8FBAB7 0x5B25 +0x8FBAB8 0x5B2D +0x8FBAB9 0x5B38 +0x8FBABA 0x5B41 +0x8FBABB 0x5B4B +0x8FBABC 0x5B4C +0x8FBABD 0x5B52 +0x8FBABE 0x5B56 +0x8FBABF 0x5B5E +0x8FBAC0 0x5B68 +0x8FBAC1 0x5B6E +0x8FBAC2 0x5B6F +0x8FBAC3 0x5B7C +0x8FBAC4 0x5B7D +0x8FBAC5 0x5B7E +0x8FBAC6 0x5B7F +0x8FBAC7 0x5B81 +0x8FBAC8 0x5B84 +0x8FBAC9 0x5B86 +0x8FBACA 0x5B8A +0x8FBACB 0x5B8E +0x8FBACC 0x5B90 +0x8FBACD 0x5B91 +0x8FBACE 0x5B93 +0x8FBACF 0x5B94 +0x8FBAD0 0x5B96 +0x8FBAD1 0x5BA8 +0x8FBAD2 0x5BA9 +0x8FBAD3 0x5BAC +0x8FBAD4 0x5BAD +0x8FBAD5 0x5BAF +0x8FBAD6 0x5BB1 +0x8FBAD7 0x5BB2 +0x8FBAD8 0x5BB7 +0x8FBAD9 0x5BBA +0x8FBADA 0x5BBC +0x8FBADB 0x5BC0 +0x8FBADC 0x5BC1 +0x8FBADD 0x5BCD +0x8FBADE 0x5BCF +0x8FBADF 0x5BD6 +0x8FBAE0 0x5BD7 +0x8FBAE1 0x5BD8 +0x8FBAE2 0x5BD9 +0x8FBAE3 0x5BDA +0x8FBAE4 0x5BE0 +0x8FBAE5 0x5BEF +0x8FBAE6 0x5BF1 +0x8FBAE7 0x5BF4 +0x8FBAE8 0x5BFD +0x8FBAE9 0x5C0C +0x8FBAEA 0x5C17 +0x8FBAEB 0x5C1E +0x8FBAEC 0x5C1F +0x8FBAED 0x5C23 +0x8FBAEE 0x5C26 +0x8FBAEF 0x5C29 +0x8FBAF0 0x5C2B +0x8FBAF1 0x5C2C +0x8FBAF2 0x5C2E +0x8FBAF3 0x5C30 +0x8FBAF4 0x5C32 +0x8FBAF5 0x5C35 +0x8FBAF6 0x5C36 +0x8FBAF7 0x5C59 +0x8FBAF8 0x5C5A +0x8FBAF9 0x5C5C +0x8FBAFA 0x5C62 +0x8FBAFB 0x5C63 +0x8FBAFC 0x5C67 +0x8FBAFD 0x5C68 +0x8FBAFE 0x5C69 +0x8FBBA1 0x5C6D +0x8FBBA2 0x5C70 +0x8FBBA3 0x5C74 +0x8FBBA4 0x5C75 +0x8FBBA5 0x5C7A +0x8FBBA6 0x5C7B +0x8FBBA7 0x5C7C +0x8FBBA8 0x5C7D +0x8FBBA9 0x5C87 +0x8FBBAA 0x5C88 +0x8FBBAB 0x5C8A +0x8FBBAC 0x5C8F +0x8FBBAD 0x5C92 +0x8FBBAE 0x5C9D +0x8FBBAF 0x5C9F +0x8FBBB0 0x5CA0 +0x8FBBB1 0x5CA2 +0x8FBBB2 0x5CA3 +0x8FBBB3 0x5CA6 +0x8FBBB4 0x5CAA +0x8FBBB5 0x5CB2 +0x8FBBB6 0x5CB4 +0x8FBBB7 0x5CB5 +0x8FBBB8 0x5CBA +0x8FBBB9 0x5CC9 +0x8FBBBA 0x5CCB +0x8FBBBB 0x5CD2 +0x8FBBBC 0x5CDD +0x8FBBBD 0x5CD7 +0x8FBBBE 0x5CEE +0x8FBBBF 0x5CF1 +0x8FBBC0 0x5CF2 +0x8FBBC1 0x5CF4 +0x8FBBC2 0x5D01 +0x8FBBC3 0x5D06 +0x8FBBC4 0x5D0D +0x8FBBC5 0x5D12 +0x8FBBC6 0x5D2B +0x8FBBC7 0x5D23 +0x8FBBC8 0x5D24 +0x8FBBC9 0x5D26 +0x8FBBCA 0x5D27 +0x8FBBCB 0x5D31 +0x8FBBCC 0x5D34 +0x8FBBCD 0x5D39 +0x8FBBCE 0x5D3D +0x8FBBCF 0x5D3F +0x8FBBD0 0x5D42 +0x8FBBD1 0x5D43 +0x8FBBD2 0x5D46 +0x8FBBD3 0x5D48 +0x8FBBD4 0x5D55 +0x8FBBD5 0x5D51 +0x8FBBD6 0x5D59 +0x8FBBD7 0x5D4A +0x8FBBD8 0x5D5F +0x8FBBD9 0x5D60 +0x8FBBDA 0x5D61 +0x8FBBDB 0x5D62 +0x8FBBDC 0x5D64 +0x8FBBDD 0x5D6A +0x8FBBDE 0x5D6D +0x8FBBDF 0x5D70 +0x8FBBE0 0x5D79 +0x8FBBE1 0x5D7A +0x8FBBE2 0x5D7E +0x8FBBE3 0x5D7F +0x8FBBE4 0x5D81 +0x8FBBE5 0x5D83 +0x8FBBE6 0x5D88 +0x8FBBE7 0x5D8A +0x8FBBE8 0x5D92 +0x8FBBE9 0x5D93 +0x8FBBEA 0x5D94 +0x8FBBEB 0x5D95 +0x8FBBEC 0x5D99 +0x8FBBED 0x5D9B +0x8FBBEE 0x5D9F +0x8FBBEF 0x5DA0 +0x8FBBF0 0x5DA7 +0x8FBBF1 0x5DAB +0x8FBBF2 0x5DB0 +0x8FBBF3 0x5DB4 +0x8FBBF4 0x5DB8 +0x8FBBF5 0x5DB9 +0x8FBBF6 0x5DC3 +0x8FBBF7 0x5DC7 +0x8FBBF8 0x5DCB +0x8FBBF9 0x5DD0 +0x8FBBFA 0x5DCE +0x8FBBFB 0x5DD8 +0x8FBBFC 0x5DD9 +0x8FBBFD 0x5DE0 +0x8FBBFE 0x5DE4 +0x8FBCA1 0x5DE9 +0x8FBCA2 0x5DF8 +0x8FBCA3 0x5DF9 +0x8FBCA4 0x5E00 +0x8FBCA5 0x5E07 +0x8FBCA6 0x5E0D +0x8FBCA7 0x5E12 +0x8FBCA8 0x5E14 +0x8FBCA9 0x5E15 +0x8FBCAA 0x5E18 +0x8FBCAB 0x5E1F +0x8FBCAC 0x5E20 +0x8FBCAD 0x5E2E +0x8FBCAE 0x5E28 +0x8FBCAF 0x5E32 +0x8FBCB0 0x5E35 +0x8FBCB1 0x5E3E +0x8FBCB2 0x5E4B +0x8FBCB3 0x5E50 +0x8FBCB4 0x5E49 +0x8FBCB5 0x5E51 +0x8FBCB6 0x5E56 +0x8FBCB7 0x5E58 +0x8FBCB8 0x5E5B +0x8FBCB9 0x5E5C +0x8FBCBA 0x5E5E +0x8FBCBB 0x5E68 +0x8FBCBC 0x5E6A +0x8FBCBD 0x5E6B +0x8FBCBE 0x5E6C +0x8FBCBF 0x5E6D +0x8FBCC0 0x5E6E +0x8FBCC1 0x5E70 +0x8FBCC2 0x5E80 +0x8FBCC3 0x5E8B +0x8FBCC4 0x5E8E +0x8FBCC5 0x5EA2 +0x8FBCC6 0x5EA4 +0x8FBCC7 0x5EA5 +0x8FBCC8 0x5EA8 +0x8FBCC9 0x5EAA +0x8FBCCA 0x5EAC +0x8FBCCB 0x5EB1 +0x8FBCCC 0x5EB3 +0x8FBCCD 0x5EBD +0x8FBCCE 0x5EBE +0x8FBCCF 0x5EBF +0x8FBCD0 0x5EC6 +0x8FBCD1 0x5ECC +0x8FBCD2 0x5ECB +0x8FBCD3 0x5ECE +0x8FBCD4 0x5ED1 +0x8FBCD5 0x5ED2 +0x8FBCD6 0x5ED4 +0x8FBCD7 0x5ED5 +0x8FBCD8 0x5EDC +0x8FBCD9 0x5EDE +0x8FBCDA 0x5EE5 +0x8FBCDB 0x5EEB +0x8FBCDC 0x5F02 +0x8FBCDD 0x5F06 +0x8FBCDE 0x5F07 +0x8FBCDF 0x5F08 +0x8FBCE0 0x5F0E +0x8FBCE1 0x5F19 +0x8FBCE2 0x5F1C +0x8FBCE3 0x5F1D +0x8FBCE4 0x5F21 +0x8FBCE5 0x5F22 +0x8FBCE6 0x5F23 +0x8FBCE7 0x5F24 +0x8FBCE8 0x5F28 +0x8FBCE9 0x5F2B +0x8FBCEA 0x5F2C +0x8FBCEB 0x5F2E +0x8FBCEC 0x5F30 +0x8FBCED 0x5F34 +0x8FBCEE 0x5F36 +0x8FBCEF 0x5F3B +0x8FBCF0 0x5F3D +0x8FBCF1 0x5F3F +0x8FBCF2 0x5F40 +0x8FBCF3 0x5F44 +0x8FBCF4 0x5F45 +0x8FBCF5 0x5F47 +0x8FBCF6 0x5F4D +0x8FBCF7 0x5F50 +0x8FBCF8 0x5F54 +0x8FBCF9 0x5F58 +0x8FBCFA 0x5F5B +0x8FBCFB 0x5F60 +0x8FBCFC 0x5F63 +0x8FBCFD 0x5F64 +0x8FBCFE 0x5F67 +0x8FBDA1 0x5F6F +0x8FBDA2 0x5F72 +0x8FBDA3 0x5F74 +0x8FBDA4 0x5F75 +0x8FBDA5 0x5F78 +0x8FBDA6 0x5F7A +0x8FBDA7 0x5F7D +0x8FBDA8 0x5F7E +0x8FBDA9 0x5F89 +0x8FBDAA 0x5F8D +0x8FBDAB 0x5F8F +0x8FBDAC 0x5F96 +0x8FBDAD 0x5F9C +0x8FBDAE 0x5F9D +0x8FBDAF 0x5FA2 +0x8FBDB0 0x5FA7 +0x8FBDB1 0x5FAB +0x8FBDB2 0x5FA4 +0x8FBDB3 0x5FAC +0x8FBDB4 0x5FAF +0x8FBDB5 0x5FB0 +0x8FBDB6 0x5FB1 +0x8FBDB7 0x5FB8 +0x8FBDB8 0x5FC4 +0x8FBDB9 0x5FC7 +0x8FBDBA 0x5FC8 +0x8FBDBB 0x5FC9 +0x8FBDBC 0x5FCB +0x8FBDBD 0x5FD0 +0x8FBDBE 0x5FD1 +0x8FBDBF 0x5FD2 +0x8FBDC0 0x5FD3 +0x8FBDC1 0x5FD4 +0x8FBDC2 0x5FDE +0x8FBDC3 0x5FE1 +0x8FBDC4 0x5FE2 +0x8FBDC5 0x5FE8 +0x8FBDC6 0x5FE9 +0x8FBDC7 0x5FEA +0x8FBDC8 0x5FEC +0x8FBDC9 0x5FED +0x8FBDCA 0x5FEE +0x8FBDCB 0x5FEF +0x8FBDCC 0x5FF2 +0x8FBDCD 0x5FF3 +0x8FBDCE 0x5FF6 +0x8FBDCF 0x5FFA +0x8FBDD0 0x5FFC +0x8FBDD1 0x6007 +0x8FBDD2 0x600A +0x8FBDD3 0x600D +0x8FBDD4 0x6013 +0x8FBDD5 0x6014 +0x8FBDD6 0x6017 +0x8FBDD7 0x6018 +0x8FBDD8 0x601A +0x8FBDD9 0x601F +0x8FBDDA 0x6024 +0x8FBDDB 0x602D +0x8FBDDC 0x6033 +0x8FBDDD 0x6035 +0x8FBDDE 0x6040 +0x8FBDDF 0x6047 +0x8FBDE0 0x6048 +0x8FBDE1 0x6049 +0x8FBDE2 0x604C +0x8FBDE3 0x6051 +0x8FBDE4 0x6054 +0x8FBDE5 0x6056 +0x8FBDE6 0x6057 +0x8FBDE7 0x605D +0x8FBDE8 0x6061 +0x8FBDE9 0x6067 +0x8FBDEA 0x6071 +0x8FBDEB 0x607E +0x8FBDEC 0x607F +0x8FBDED 0x6082 +0x8FBDEE 0x6086 +0x8FBDEF 0x6088 +0x8FBDF0 0x608A +0x8FBDF1 0x608E +0x8FBDF2 0x6091 +0x8FBDF3 0x6093 +0x8FBDF4 0x6095 +0x8FBDF5 0x6098 +0x8FBDF6 0x609D +0x8FBDF7 0x609E +0x8FBDF8 0x60A2 +0x8FBDF9 0x60A4 +0x8FBDFA 0x60A5 +0x8FBDFB 0x60A8 +0x8FBDFC 0x60B0 +0x8FBDFD 0x60B1 +0x8FBDFE 0x60B7 +0x8FBEA1 0x60BB +0x8FBEA2 0x60BE +0x8FBEA3 0x60C2 +0x8FBEA4 0x60C4 +0x8FBEA5 0x60C8 +0x8FBEA6 0x60C9 +0x8FBEA7 0x60CA +0x8FBEA8 0x60CB +0x8FBEA9 0x60CE +0x8FBEAA 0x60CF +0x8FBEAB 0x60D4 +0x8FBEAC 0x60D5 +0x8FBEAD 0x60D9 +0x8FBEAE 0x60DB +0x8FBEAF 0x60DD +0x8FBEB0 0x60DE +0x8FBEB1 0x60E2 +0x8FBEB2 0x60E5 +0x8FBEB3 0x60F2 +0x8FBEB4 0x60F5 +0x8FBEB5 0x60F8 +0x8FBEB6 0x60FC +0x8FBEB7 0x60FD +0x8FBEB8 0x6102 +0x8FBEB9 0x6107 +0x8FBEBA 0x610A +0x8FBEBB 0x610C +0x8FBEBC 0x6110 +0x8FBEBD 0x6111 +0x8FBEBE 0x6112 +0x8FBEBF 0x6113 +0x8FBEC0 0x6114 +0x8FBEC1 0x6116 +0x8FBEC2 0x6117 +0x8FBEC3 0x6119 +0x8FBEC4 0x611C +0x8FBEC5 0x611E +0x8FBEC6 0x6122 +0x8FBEC7 0x612A +0x8FBEC8 0x612B +0x8FBEC9 0x6130 +0x8FBECA 0x6131 +0x8FBECB 0x6135 +0x8FBECC 0x6136 +0x8FBECD 0x6137 +0x8FBECE 0x6139 +0x8FBECF 0x6141 +0x8FBED0 0x6145 +0x8FBED1 0x6146 +0x8FBED2 0x6149 +0x8FBED3 0x615E +0x8FBED4 0x6160 +0x8FBED5 0x616C +0x8FBED6 0x6172 +0x8FBED7 0x6178 +0x8FBED8 0x617B +0x8FBED9 0x617C +0x8FBEDA 0x617F +0x8FBEDB 0x6180 +0x8FBEDC 0x6181 +0x8FBEDD 0x6183 +0x8FBEDE 0x6184 +0x8FBEDF 0x618B +0x8FBEE0 0x618D +0x8FBEE1 0x6192 +0x8FBEE2 0x6193 +0x8FBEE3 0x6197 +0x8FBEE4 0x6198 +0x8FBEE5 0x619C +0x8FBEE6 0x619D +0x8FBEE7 0x619F +0x8FBEE8 0x61A0 +0x8FBEE9 0x61A5 +0x8FBEEA 0x61A8 +0x8FBEEB 0x61AA +0x8FBEEC 0x61AD +0x8FBEED 0x61B8 +0x8FBEEE 0x61B9 +0x8FBEEF 0x61BC +0x8FBEF0 0x61C0 +0x8FBEF1 0x61C1 +0x8FBEF2 0x61C2 +0x8FBEF3 0x61CE +0x8FBEF4 0x61CF +0x8FBEF5 0x61D5 +0x8FBEF6 0x61DC +0x8FBEF7 0x61DD +0x8FBEF8 0x61DE +0x8FBEF9 0x61DF +0x8FBEFA 0x61E1 +0x8FBEFB 0x61E2 +0x8FBEFC 0x61E7 +0x8FBEFD 0x61E9 +0x8FBEFE 0x61E5 +0x8FBFA1 0x61EC +0x8FBFA2 0x61ED +0x8FBFA3 0x61EF +0x8FBFA4 0x6201 +0x8FBFA5 0x6203 +0x8FBFA6 0x6204 +0x8FBFA7 0x6207 +0x8FBFA8 0x6213 +0x8FBFA9 0x6215 +0x8FBFAA 0x621C +0x8FBFAB 0x6220 +0x8FBFAC 0x6222 +0x8FBFAD 0x6223 +0x8FBFAE 0x6227 +0x8FBFAF 0x6229 +0x8FBFB0 0x622B +0x8FBFB1 0x6239 +0x8FBFB2 0x623D +0x8FBFB3 0x6242 +0x8FBFB4 0x6243 +0x8FBFB5 0x6244 +0x8FBFB6 0x6246 +0x8FBFB7 0x624C +0x8FBFB8 0x6250 +0x8FBFB9 0x6251 +0x8FBFBA 0x6252 +0x8FBFBB 0x6254 +0x8FBFBC 0x6256 +0x8FBFBD 0x625A +0x8FBFBE 0x625C +0x8FBFBF 0x6264 +0x8FBFC0 0x626D +0x8FBFC1 0x626F +0x8FBFC2 0x6273 +0x8FBFC3 0x627A +0x8FBFC4 0x627D +0x8FBFC5 0x628D +0x8FBFC6 0x628E +0x8FBFC7 0x628F +0x8FBFC8 0x6290 +0x8FBFC9 0x62A6 +0x8FBFCA 0x62A8 +0x8FBFCB 0x62B3 +0x8FBFCC 0x62B6 +0x8FBFCD 0x62B7 +0x8FBFCE 0x62BA +0x8FBFCF 0x62BE +0x8FBFD0 0x62BF +0x8FBFD1 0x62C4 +0x8FBFD2 0x62CE +0x8FBFD3 0x62D5 +0x8FBFD4 0x62D6 +0x8FBFD5 0x62DA +0x8FBFD6 0x62EA +0x8FBFD7 0x62F2 +0x8FBFD8 0x62F4 +0x8FBFD9 0x62FC +0x8FBFDA 0x62FD +0x8FBFDB 0x6303 +0x8FBFDC 0x6304 +0x8FBFDD 0x630A +0x8FBFDE 0x630B +0x8FBFDF 0x630D +0x8FBFE0 0x6310 +0x8FBFE1 0x6313 +0x8FBFE2 0x6316 +0x8FBFE3 0x6318 +0x8FBFE4 0x6329 +0x8FBFE5 0x632A +0x8FBFE6 0x632D +0x8FBFE7 0x6335 +0x8FBFE8 0x6336 +0x8FBFE9 0x6339 +0x8FBFEA 0x633C +0x8FBFEB 0x6341 +0x8FBFEC 0x6342 +0x8FBFED 0x6343 +0x8FBFEE 0x6344 +0x8FBFEF 0x6346 +0x8FBFF0 0x634A +0x8FBFF1 0x634B +0x8FBFF2 0x634E +0x8FBFF3 0x6352 +0x8FBFF4 0x6353 +0x8FBFF5 0x6354 +0x8FBFF6 0x6358 +0x8FBFF7 0x635B +0x8FBFF8 0x6365 +0x8FBFF9 0x6366 +0x8FBFFA 0x636C +0x8FBFFB 0x636D +0x8FBFFC 0x6371 +0x8FBFFD 0x6374 +0x8FBFFE 0x6375 +0x8FC0A1 0x6378 +0x8FC0A2 0x637C +0x8FC0A3 0x637D +0x8FC0A4 0x637F +0x8FC0A5 0x6382 +0x8FC0A6 0x6384 +0x8FC0A7 0x6387 +0x8FC0A8 0x638A +0x8FC0A9 0x6390 +0x8FC0AA 0x6394 +0x8FC0AB 0x6395 +0x8FC0AC 0x6399 +0x8FC0AD 0x639A +0x8FC0AE 0x639E +0x8FC0AF 0x63A4 +0x8FC0B0 0x63A6 +0x8FC0B1 0x63AD +0x8FC0B2 0x63AE +0x8FC0B3 0x63AF +0x8FC0B4 0x63BD +0x8FC0B5 0x63C1 +0x8FC0B6 0x63C5 +0x8FC0B7 0x63C8 +0x8FC0B8 0x63CE +0x8FC0B9 0x63D1 +0x8FC0BA 0x63D3 +0x8FC0BB 0x63D4 +0x8FC0BC 0x63D5 +0x8FC0BD 0x63DC +0x8FC0BE 0x63E0 +0x8FC0BF 0x63E5 +0x8FC0C0 0x63EA +0x8FC0C1 0x63EC +0x8FC0C2 0x63F2 +0x8FC0C3 0x63F3 +0x8FC0C4 0x63F5 +0x8FC0C5 0x63F8 +0x8FC0C6 0x63F9 +0x8FC0C7 0x6409 +0x8FC0C8 0x640A +0x8FC0C9 0x6410 +0x8FC0CA 0x6412 +0x8FC0CB 0x6414 +0x8FC0CC 0x6418 +0x8FC0CD 0x641E +0x8FC0CE 0x6420 +0x8FC0CF 0x6422 +0x8FC0D0 0x6424 +0x8FC0D1 0x6425 +0x8FC0D2 0x6429 +0x8FC0D3 0x642A +0x8FC0D4 0x642F +0x8FC0D5 0x6430 +0x8FC0D6 0x6435 +0x8FC0D7 0x643D +0x8FC0D8 0x643F +0x8FC0D9 0x644B +0x8FC0DA 0x644F +0x8FC0DB 0x6451 +0x8FC0DC 0x6452 +0x8FC0DD 0x6453 +0x8FC0DE 0x6454 +0x8FC0DF 0x645A +0x8FC0E0 0x645B +0x8FC0E1 0x645C +0x8FC0E2 0x645D +0x8FC0E3 0x645F +0x8FC0E4 0x6460 +0x8FC0E5 0x6461 +0x8FC0E6 0x6463 +0x8FC0E7 0x646D +0x8FC0E8 0x6473 +0x8FC0E9 0x6474 +0x8FC0EA 0x647B +0x8FC0EB 0x647D +0x8FC0EC 0x6485 +0x8FC0ED 0x6487 +0x8FC0EE 0x648F +0x8FC0EF 0x6490 +0x8FC0F0 0x6491 +0x8FC0F1 0x6498 +0x8FC0F2 0x6499 +0x8FC0F3 0x649B +0x8FC0F4 0x649D +0x8FC0F5 0x649F +0x8FC0F6 0x64A1 +0x8FC0F7 0x64A3 +0x8FC0F8 0x64A6 +0x8FC0F9 0x64A8 +0x8FC0FA 0x64AC +0x8FC0FB 0x64B3 +0x8FC0FC 0x64BD +0x8FC0FD 0x64BE +0x8FC0FE 0x64BF +0x8FC1A1 0x64C4 +0x8FC1A2 0x64C9 +0x8FC1A3 0x64CA +0x8FC1A4 0x64CB +0x8FC1A5 0x64CC +0x8FC1A6 0x64CE +0x8FC1A7 0x64D0 +0x8FC1A8 0x64D1 +0x8FC1A9 0x64D5 +0x8FC1AA 0x64D7 +0x8FC1AB 0x64E4 +0x8FC1AC 0x64E5 +0x8FC1AD 0x64E9 +0x8FC1AE 0x64EA +0x8FC1AF 0x64ED +0x8FC1B0 0x64F0 +0x8FC1B1 0x64F5 +0x8FC1B2 0x64F7 +0x8FC1B3 0x64FB +0x8FC1B4 0x64FF +0x8FC1B5 0x6501 +0x8FC1B6 0x6504 +0x8FC1B7 0x6508 +0x8FC1B8 0x6509 +0x8FC1B9 0x650A +0x8FC1BA 0x650F +0x8FC1BB 0x6513 +0x8FC1BC 0x6514 +0x8FC1BD 0x6516 +0x8FC1BE 0x6519 +0x8FC1BF 0x651B +0x8FC1C0 0x651E +0x8FC1C1 0x651F +0x8FC1C2 0x6522 +0x8FC1C3 0x6526 +0x8FC1C4 0x6529 +0x8FC1C5 0x652E +0x8FC1C6 0x6531 +0x8FC1C7 0x653A +0x8FC1C8 0x653C +0x8FC1C9 0x653D +0x8FC1CA 0x6543 +0x8FC1CB 0x6547 +0x8FC1CC 0x6549 +0x8FC1CD 0x6550 +0x8FC1CE 0x6552 +0x8FC1CF 0x6554 +0x8FC1D0 0x655F +0x8FC1D1 0x6560 +0x8FC1D2 0x6567 +0x8FC1D3 0x656B +0x8FC1D4 0x657A +0x8FC1D5 0x657D +0x8FC1D6 0x6581 +0x8FC1D7 0x6585 +0x8FC1D8 0x658A +0x8FC1D9 0x6592 +0x8FC1DA 0x6595 +0x8FC1DB 0x6598 +0x8FC1DC 0x659D +0x8FC1DD 0x65A0 +0x8FC1DE 0x65A3 +0x8FC1DF 0x65A6 +0x8FC1E0 0x65AE +0x8FC1E1 0x65B2 +0x8FC1E2 0x65B3 +0x8FC1E3 0x65B4 +0x8FC1E4 0x65BF +0x8FC1E5 0x65C2 +0x8FC1E6 0x65C8 +0x8FC1E7 0x65C9 +0x8FC1E8 0x65CE +0x8FC1E9 0x65D0 +0x8FC1EA 0x65D4 +0x8FC1EB 0x65D6 +0x8FC1EC 0x65D8 +0x8FC1ED 0x65DF +0x8FC1EE 0x65F0 +0x8FC1EF 0x65F2 +0x8FC1F0 0x65F4 +0x8FC1F1 0x65F5 +0x8FC1F2 0x65F9 +0x8FC1F3 0x65FE +0x8FC1F4 0x65FF +0x8FC1F5 0x6600 +0x8FC1F6 0x6604 +0x8FC1F7 0x6608 +0x8FC1F8 0x6609 +0x8FC1F9 0x660D +0x8FC1FA 0x6611 +0x8FC1FB 0x6612 +0x8FC1FC 0x6615 +0x8FC1FD 0x6616 +0x8FC1FE 0x661D +0x8FC2A1 0x661E +0x8FC2A2 0x6621 +0x8FC2A3 0x6622 +0x8FC2A4 0x6623 +0x8FC2A5 0x6624 +0x8FC2A6 0x6626 +0x8FC2A7 0x6629 +0x8FC2A8 0x662A +0x8FC2A9 0x662B +0x8FC2AA 0x662C +0x8FC2AB 0x662E +0x8FC2AC 0x6630 +0x8FC2AD 0x6631 +0x8FC2AE 0x6633 +0x8FC2AF 0x6639 +0x8FC2B0 0x6637 +0x8FC2B1 0x6640 +0x8FC2B2 0x6645 +0x8FC2B3 0x6646 +0x8FC2B4 0x664A +0x8FC2B5 0x664C +0x8FC2B6 0x6651 +0x8FC2B7 0x664E +0x8FC2B8 0x6657 +0x8FC2B9 0x6658 +0x8FC2BA 0x6659 +0x8FC2BB 0x665B +0x8FC2BC 0x665C +0x8FC2BD 0x6660 +0x8FC2BE 0x6661 +0x8FC2BF 0x66FB +0x8FC2C0 0x666A +0x8FC2C1 0x666B +0x8FC2C2 0x666C +0x8FC2C3 0x667E +0x8FC2C4 0x6673 +0x8FC2C5 0x6675 +0x8FC2C6 0x667F +0x8FC2C7 0x6677 +0x8FC2C8 0x6678 +0x8FC2C9 0x6679 +0x8FC2CA 0x667B +0x8FC2CB 0x6680 +0x8FC2CC 0x667C +0x8FC2CD 0x668B +0x8FC2CE 0x668C +0x8FC2CF 0x668D +0x8FC2D0 0x6690 +0x8FC2D1 0x6692 +0x8FC2D2 0x6699 +0x8FC2D3 0x669A +0x8FC2D4 0x669B +0x8FC2D5 0x669C +0x8FC2D6 0x669F +0x8FC2D7 0x66A0 +0x8FC2D8 0x66A4 +0x8FC2D9 0x66AD +0x8FC2DA 0x66B1 +0x8FC2DB 0x66B2 +0x8FC2DC 0x66B5 +0x8FC2DD 0x66BB +0x8FC2DE 0x66BF +0x8FC2DF 0x66C0 +0x8FC2E0 0x66C2 +0x8FC2E1 0x66C3 +0x8FC2E2 0x66C8 +0x8FC2E3 0x66CC +0x8FC2E4 0x66CE +0x8FC2E5 0x66CF +0x8FC2E6 0x66D4 +0x8FC2E7 0x66DB +0x8FC2E8 0x66DF +0x8FC2E9 0x66E8 +0x8FC2EA 0x66EB +0x8FC2EB 0x66EC +0x8FC2EC 0x66EE +0x8FC2ED 0x66FA +0x8FC2EE 0x6705 +0x8FC2EF 0x6707 +0x8FC2F0 0x670E +0x8FC2F1 0x6713 +0x8FC2F2 0x6719 +0x8FC2F3 0x671C +0x8FC2F4 0x6720 +0x8FC2F5 0x6722 +0x8FC2F6 0x6733 +0x8FC2F7 0x673E +0x8FC2F8 0x6745 +0x8FC2F9 0x6747 +0x8FC2FA 0x6748 +0x8FC2FB 0x674C +0x8FC2FC 0x6754 +0x8FC2FD 0x6755 +0x8FC2FE 0x675D +0x8FC3A1 0x6766 +0x8FC3A2 0x676C +0x8FC3A3 0x676E +0x8FC3A4 0x6774 +0x8FC3A5 0x6776 +0x8FC3A6 0x677B +0x8FC3A7 0x6781 +0x8FC3A8 0x6784 +0x8FC3A9 0x678E +0x8FC3AA 0x678F +0x8FC3AB 0x6791 +0x8FC3AC 0x6793 +0x8FC3AD 0x6796 +0x8FC3AE 0x6798 +0x8FC3AF 0x6799 +0x8FC3B0 0x679B +0x8FC3B1 0x67B0 +0x8FC3B2 0x67B1 +0x8FC3B3 0x67B2 +0x8FC3B4 0x67B5 +0x8FC3B5 0x67BB +0x8FC3B6 0x67BC +0x8FC3B7 0x67BD +0x8FC3B8 0x67F9 +0x8FC3B9 0x67C0 +0x8FC3BA 0x67C2 +0x8FC3BB 0x67C3 +0x8FC3BC 0x67C5 +0x8FC3BD 0x67C8 +0x8FC3BE 0x67C9 +0x8FC3BF 0x67D2 +0x8FC3C0 0x67D7 +0x8FC3C1 0x67D9 +0x8FC3C2 0x67DC +0x8FC3C3 0x67E1 +0x8FC3C4 0x67E6 +0x8FC3C5 0x67F0 +0x8FC3C6 0x67F2 +0x8FC3C7 0x67F6 +0x8FC3C8 0x67F7 +0x8FC3C9 0x6852 +0x8FC3CA 0x6814 +0x8FC3CB 0x6819 +0x8FC3CC 0x681D +0x8FC3CD 0x681F +0x8FC3CE 0x6828 +0x8FC3CF 0x6827 +0x8FC3D0 0x682C +0x8FC3D1 0x682D +0x8FC3D2 0x682F +0x8FC3D3 0x6830 +0x8FC3D4 0x6831 +0x8FC3D5 0x6833 +0x8FC3D6 0x683B +0x8FC3D7 0x683F +0x8FC3D8 0x6844 +0x8FC3D9 0x6845 +0x8FC3DA 0x684A +0x8FC3DB 0x684C +0x8FC3DC 0x6855 +0x8FC3DD 0x6857 +0x8FC3DE 0x6858 +0x8FC3DF 0x685B +0x8FC3E0 0x686B +0x8FC3E1 0x686E +0x8FC3E2 0x686F +0x8FC3E3 0x6870 +0x8FC3E4 0x6871 +0x8FC3E5 0x6872 +0x8FC3E6 0x6875 +0x8FC3E7 0x6879 +0x8FC3E8 0x687A +0x8FC3E9 0x687B +0x8FC3EA 0x687C +0x8FC3EB 0x6882 +0x8FC3EC 0x6884 +0x8FC3ED 0x6886 +0x8FC3EE 0x6888 +0x8FC3EF 0x6896 +0x8FC3F0 0x6898 +0x8FC3F1 0x689A +0x8FC3F2 0x689C +0x8FC3F3 0x68A1 +0x8FC3F4 0x68A3 +0x8FC3F5 0x68A5 +0x8FC3F6 0x68A9 +0x8FC3F7 0x68AA +0x8FC3F8 0x68AE +0x8FC3F9 0x68B2 +0x8FC3FA 0x68BB +0x8FC3FB 0x68C5 +0x8FC3FC 0x68C8 +0x8FC3FD 0x68CC +0x8FC3FE 0x68CF +0x8FC4A1 0x68D0 +0x8FC4A2 0x68D1 +0x8FC4A3 0x68D3 +0x8FC4A4 0x68D6 +0x8FC4A5 0x68D9 +0x8FC4A6 0x68DC +0x8FC4A7 0x68DD +0x8FC4A8 0x68E5 +0x8FC4A9 0x68E8 +0x8FC4AA 0x68EA +0x8FC4AB 0x68EB +0x8FC4AC 0x68EC +0x8FC4AD 0x68ED +0x8FC4AE 0x68F0 +0x8FC4AF 0x68F1 +0x8FC4B0 0x68F5 +0x8FC4B1 0x68F6 +0x8FC4B2 0x68FB +0x8FC4B3 0x68FC +0x8FC4B4 0x68FD +0x8FC4B5 0x6906 +0x8FC4B6 0x6909 +0x8FC4B7 0x690A +0x8FC4B8 0x6910 +0x8FC4B9 0x6911 +0x8FC4BA 0x6913 +0x8FC4BB 0x6916 +0x8FC4BC 0x6917 +0x8FC4BD 0x6931 +0x8FC4BE 0x6933 +0x8FC4BF 0x6935 +0x8FC4C0 0x6938 +0x8FC4C1 0x693B +0x8FC4C2 0x6942 +0x8FC4C3 0x6945 +0x8FC4C4 0x6949 +0x8FC4C5 0x694E +0x8FC4C6 0x6957 +0x8FC4C7 0x695B +0x8FC4C8 0x6963 +0x8FC4C9 0x6964 +0x8FC4CA 0x6965 +0x8FC4CB 0x6966 +0x8FC4CC 0x6968 +0x8FC4CD 0x6969 +0x8FC4CE 0x696C +0x8FC4CF 0x6970 +0x8FC4D0 0x6971 +0x8FC4D1 0x6972 +0x8FC4D2 0x697A +0x8FC4D3 0x697B +0x8FC4D4 0x697F +0x8FC4D5 0x6980 +0x8FC4D6 0x698D +0x8FC4D7 0x6992 +0x8FC4D8 0x6996 +0x8FC4D9 0x6998 +0x8FC4DA 0x69A1 +0x8FC4DB 0x69A5 +0x8FC4DC 0x69A6 +0x8FC4DD 0x69A8 +0x8FC4DE 0x69AB +0x8FC4DF 0x69AD +0x8FC4E0 0x69AF +0x8FC4E1 0x69B7 +0x8FC4E2 0x69B8 +0x8FC4E3 0x69BA +0x8FC4E4 0x69BC +0x8FC4E5 0x69C5 +0x8FC4E6 0x69C8 +0x8FC4E7 0x69D1 +0x8FC4E8 0x69D6 +0x8FC4E9 0x69D7 +0x8FC4EA 0x69E2 +0x8FC4EB 0x69E5 +0x8FC4EC 0x69EE +0x8FC4ED 0x69EF +0x8FC4EE 0x69F1 +0x8FC4EF 0x69F3 +0x8FC4F0 0x69F5 +0x8FC4F1 0x69FE +0x8FC4F2 0x6A00 +0x8FC4F3 0x6A01 +0x8FC4F4 0x6A03 +0x8FC4F5 0x6A0F +0x8FC4F6 0x6A11 +0x8FC4F7 0x6A15 +0x8FC4F8 0x6A1A +0x8FC4F9 0x6A1D +0x8FC4FA 0x6A20 +0x8FC4FB 0x6A24 +0x8FC4FC 0x6A28 +0x8FC4FD 0x6A30 +0x8FC4FE 0x6A32 +0x8FC5A1 0x6A34 +0x8FC5A2 0x6A37 +0x8FC5A3 0x6A3B +0x8FC5A4 0x6A3E +0x8FC5A5 0x6A3F +0x8FC5A6 0x6A45 +0x8FC5A7 0x6A46 +0x8FC5A8 0x6A49 +0x8FC5A9 0x6A4A +0x8FC5AA 0x6A4E +0x8FC5AB 0x6A50 +0x8FC5AC 0x6A51 +0x8FC5AD 0x6A52 +0x8FC5AE 0x6A55 +0x8FC5AF 0x6A56 +0x8FC5B0 0x6A5B +0x8FC5B1 0x6A64 +0x8FC5B2 0x6A67 +0x8FC5B3 0x6A6A +0x8FC5B4 0x6A71 +0x8FC5B5 0x6A73 +0x8FC5B6 0x6A7E +0x8FC5B7 0x6A81 +0x8FC5B8 0x6A83 +0x8FC5B9 0x6A86 +0x8FC5BA 0x6A87 +0x8FC5BB 0x6A89 +0x8FC5BC 0x6A8B +0x8FC5BD 0x6A91 +0x8FC5BE 0x6A9B +0x8FC5BF 0x6A9D +0x8FC5C0 0x6A9E +0x8FC5C1 0x6A9F +0x8FC5C2 0x6AA5 +0x8FC5C3 0x6AAB +0x8FC5C4 0x6AAF +0x8FC5C5 0x6AB0 +0x8FC5C6 0x6AB1 +0x8FC5C7 0x6AB4 +0x8FC5C8 0x6ABD +0x8FC5C9 0x6ABE +0x8FC5CA 0x6ABF +0x8FC5CB 0x6AC6 +0x8FC5CC 0x6AC9 +0x8FC5CD 0x6AC8 +0x8FC5CE 0x6ACC +0x8FC5CF 0x6AD0 +0x8FC5D0 0x6AD4 +0x8FC5D1 0x6AD5 +0x8FC5D2 0x6AD6 +0x8FC5D3 0x6ADC +0x8FC5D4 0x6ADD +0x8FC5D5 0x6AE4 +0x8FC5D6 0x6AE7 +0x8FC5D7 0x6AEC +0x8FC5D8 0x6AF0 +0x8FC5D9 0x6AF1 +0x8FC5DA 0x6AF2 +0x8FC5DB 0x6AFC +0x8FC5DC 0x6AFD +0x8FC5DD 0x6B02 +0x8FC5DE 0x6B03 +0x8FC5DF 0x6B06 +0x8FC5E0 0x6B07 +0x8FC5E1 0x6B09 +0x8FC5E2 0x6B0F +0x8FC5E3 0x6B10 +0x8FC5E4 0x6B11 +0x8FC5E5 0x6B17 +0x8FC5E6 0x6B1B +0x8FC5E7 0x6B1E +0x8FC5E8 0x6B24 +0x8FC5E9 0x6B28 +0x8FC5EA 0x6B2B +0x8FC5EB 0x6B2C +0x8FC5EC 0x6B2F +0x8FC5ED 0x6B35 +0x8FC5EE 0x6B36 +0x8FC5EF 0x6B3B +0x8FC5F0 0x6B3F +0x8FC5F1 0x6B46 +0x8FC5F2 0x6B4A +0x8FC5F3 0x6B4D +0x8FC5F4 0x6B52 +0x8FC5F5 0x6B56 +0x8FC5F6 0x6B58 +0x8FC5F7 0x6B5D +0x8FC5F8 0x6B60 +0x8FC5F9 0x6B67 +0x8FC5FA 0x6B6B +0x8FC5FB 0x6B6E +0x8FC5FC 0x6B70 +0x8FC5FD 0x6B75 +0x8FC5FE 0x6B7D +0x8FC6A1 0x6B7E +0x8FC6A2 0x6B82 +0x8FC6A3 0x6B85 +0x8FC6A4 0x6B97 +0x8FC6A5 0x6B9B +0x8FC6A6 0x6B9F +0x8FC6A7 0x6BA0 +0x8FC6A8 0x6BA2 +0x8FC6A9 0x6BA3 +0x8FC6AA 0x6BA8 +0x8FC6AB 0x6BA9 +0x8FC6AC 0x6BAC +0x8FC6AD 0x6BAD +0x8FC6AE 0x6BAE +0x8FC6AF 0x6BB0 +0x8FC6B0 0x6BB8 +0x8FC6B1 0x6BB9 +0x8FC6B2 0x6BBD +0x8FC6B3 0x6BBE +0x8FC6B4 0x6BC3 +0x8FC6B5 0x6BC4 +0x8FC6B6 0x6BC9 +0x8FC6B7 0x6BCC +0x8FC6B8 0x6BD6 +0x8FC6B9 0x6BDA +0x8FC6BA 0x6BE1 +0x8FC6BB 0x6BE3 +0x8FC6BC 0x6BE6 +0x8FC6BD 0x6BE7 +0x8FC6BE 0x6BEE +0x8FC6BF 0x6BF1 +0x8FC6C0 0x6BF7 +0x8FC6C1 0x6BF9 +0x8FC6C2 0x6BFF +0x8FC6C3 0x6C02 +0x8FC6C4 0x6C04 +0x8FC6C5 0x6C05 +0x8FC6C6 0x6C09 +0x8FC6C7 0x6C0D +0x8FC6C8 0x6C0E +0x8FC6C9 0x6C10 +0x8FC6CA 0x6C12 +0x8FC6CB 0x6C19 +0x8FC6CC 0x6C1F +0x8FC6CD 0x6C26 +0x8FC6CE 0x6C27 +0x8FC6CF 0x6C28 +0x8FC6D0 0x6C2C +0x8FC6D1 0x6C2E +0x8FC6D2 0x6C33 +0x8FC6D3 0x6C35 +0x8FC6D4 0x6C36 +0x8FC6D5 0x6C3A +0x8FC6D6 0x6C3B +0x8FC6D7 0x6C3F +0x8FC6D8 0x6C4A +0x8FC6D9 0x6C4B +0x8FC6DA 0x6C4D +0x8FC6DB 0x6C4F +0x8FC6DC 0x6C52 +0x8FC6DD 0x6C54 +0x8FC6DE 0x6C59 +0x8FC6DF 0x6C5B +0x8FC6E0 0x6C5C +0x8FC6E1 0x6C6B +0x8FC6E2 0x6C6D +0x8FC6E3 0x6C6F +0x8FC6E4 0x6C74 +0x8FC6E5 0x6C76 +0x8FC6E6 0x6C78 +0x8FC6E7 0x6C79 +0x8FC6E8 0x6C7B +0x8FC6E9 0x6C85 +0x8FC6EA 0x6C86 +0x8FC6EB 0x6C87 +0x8FC6EC 0x6C89 +0x8FC6ED 0x6C94 +0x8FC6EE 0x6C95 +0x8FC6EF 0x6C97 +0x8FC6F0 0x6C98 +0x8FC6F1 0x6C9C +0x8FC6F2 0x6C9F +0x8FC6F3 0x6CB0 +0x8FC6F4 0x6CB2 +0x8FC6F5 0x6CB4 +0x8FC6F6 0x6CC2 +0x8FC6F7 0x6CC6 +0x8FC6F8 0x6CCD +0x8FC6F9 0x6CCF +0x8FC6FA 0x6CD0 +0x8FC6FB 0x6CD1 +0x8FC6FC 0x6CD2 +0x8FC6FD 0x6CD4 +0x8FC6FE 0x6CD6 +0x8FC7A1 0x6CDA +0x8FC7A2 0x6CDC +0x8FC7A3 0x6CE0 +0x8FC7A4 0x6CE7 +0x8FC7A5 0x6CE9 +0x8FC7A6 0x6CEB +0x8FC7A7 0x6CEC +0x8FC7A8 0x6CEE +0x8FC7A9 0x6CF2 +0x8FC7AA 0x6CF4 +0x8FC7AB 0x6D04 +0x8FC7AC 0x6D07 +0x8FC7AD 0x6D0A +0x8FC7AE 0x6D0E +0x8FC7AF 0x6D0F +0x8FC7B0 0x6D11 +0x8FC7B1 0x6D13 +0x8FC7B2 0x6D1A +0x8FC7B3 0x6D26 +0x8FC7B4 0x6D27 +0x8FC7B5 0x6D28 +0x8FC7B6 0x6C67 +0x8FC7B7 0x6D2E +0x8FC7B8 0x6D2F +0x8FC7B9 0x6D31 +0x8FC7BA 0x6D39 +0x8FC7BB 0x6D3C +0x8FC7BC 0x6D3F +0x8FC7BD 0x6D57 +0x8FC7BE 0x6D5E +0x8FC7BF 0x6D5F +0x8FC7C0 0x6D61 +0x8FC7C1 0x6D65 +0x8FC7C2 0x6D67 +0x8FC7C3 0x6D6F +0x8FC7C4 0x6D70 +0x8FC7C5 0x6D7C +0x8FC7C6 0x6D82 +0x8FC7C7 0x6D87 +0x8FC7C8 0x6D91 +0x8FC7C9 0x6D92 +0x8FC7CA 0x6D94 +0x8FC7CB 0x6D96 +0x8FC7CC 0x6D97 +0x8FC7CD 0x6D98 +0x8FC7CE 0x6DAA +0x8FC7CF 0x6DAC +0x8FC7D0 0x6DB4 +0x8FC7D1 0x6DB7 +0x8FC7D2 0x6DB9 +0x8FC7D3 0x6DBD +0x8FC7D4 0x6DBF +0x8FC7D5 0x6DC4 +0x8FC7D6 0x6DC8 +0x8FC7D7 0x6DCA +0x8FC7D8 0x6DCE +0x8FC7D9 0x6DCF +0x8FC7DA 0x6DD6 +0x8FC7DB 0x6DDB +0x8FC7DC 0x6DDD +0x8FC7DD 0x6DDF +0x8FC7DE 0x6DE0 +0x8FC7DF 0x6DE2 +0x8FC7E0 0x6DE5 +0x8FC7E1 0x6DE9 +0x8FC7E2 0x6DEF +0x8FC7E3 0x6DF0 +0x8FC7E4 0x6DF4 +0x8FC7E5 0x6DF6 +0x8FC7E6 0x6DFC +0x8FC7E7 0x6E00 +0x8FC7E8 0x6E04 +0x8FC7E9 0x6E1E +0x8FC7EA 0x6E22 +0x8FC7EB 0x6E27 +0x8FC7EC 0x6E32 +0x8FC7ED 0x6E36 +0x8FC7EE 0x6E39 +0x8FC7EF 0x6E3B +0x8FC7F0 0x6E3C +0x8FC7F1 0x6E44 +0x8FC7F2 0x6E45 +0x8FC7F3 0x6E48 +0x8FC7F4 0x6E49 +0x8FC7F5 0x6E4B +0x8FC7F6 0x6E4F +0x8FC7F7 0x6E51 +0x8FC7F8 0x6E52 +0x8FC7F9 0x6E53 +0x8FC7FA 0x6E54 +0x8FC7FB 0x6E57 +0x8FC7FC 0x6E5C +0x8FC7FD 0x6E5D +0x8FC7FE 0x6E5E +0x8FC8A1 0x6E62 +0x8FC8A2 0x6E63 +0x8FC8A3 0x6E68 +0x8FC8A4 0x6E73 +0x8FC8A5 0x6E7B +0x8FC8A6 0x6E7D +0x8FC8A7 0x6E8D +0x8FC8A8 0x6E93 +0x8FC8A9 0x6E99 +0x8FC8AA 0x6EA0 +0x8FC8AB 0x6EA7 +0x8FC8AC 0x6EAD +0x8FC8AD 0x6EAE +0x8FC8AE 0x6EB1 +0x8FC8AF 0x6EB3 +0x8FC8B0 0x6EBB +0x8FC8B1 0x6EBF +0x8FC8B2 0x6EC0 +0x8FC8B3 0x6EC1 +0x8FC8B4 0x6EC3 +0x8FC8B5 0x6EC7 +0x8FC8B6 0x6EC8 +0x8FC8B7 0x6ECA +0x8FC8B8 0x6ECD +0x8FC8B9 0x6ECE +0x8FC8BA 0x6ECF +0x8FC8BB 0x6EEB +0x8FC8BC 0x6EED +0x8FC8BD 0x6EEE +0x8FC8BE 0x6EF9 +0x8FC8BF 0x6EFB +0x8FC8C0 0x6EFD +0x8FC8C1 0x6F04 +0x8FC8C2 0x6F08 +0x8FC8C3 0x6F0A +0x8FC8C4 0x6F0C +0x8FC8C5 0x6F0D +0x8FC8C6 0x6F16 +0x8FC8C7 0x6F18 +0x8FC8C8 0x6F1A +0x8FC8C9 0x6F1B +0x8FC8CA 0x6F26 +0x8FC8CB 0x6F29 +0x8FC8CC 0x6F2A +0x8FC8CD 0x6F2F +0x8FC8CE 0x6F30 +0x8FC8CF 0x6F33 +0x8FC8D0 0x6F36 +0x8FC8D1 0x6F3B +0x8FC8D2 0x6F3C +0x8FC8D3 0x6F2D +0x8FC8D4 0x6F4F +0x8FC8D5 0x6F51 +0x8FC8D6 0x6F52 +0x8FC8D7 0x6F53 +0x8FC8D8 0x6F57 +0x8FC8D9 0x6F59 +0x8FC8DA 0x6F5A +0x8FC8DB 0x6F5D +0x8FC8DC 0x6F5E +0x8FC8DD 0x6F61 +0x8FC8DE 0x6F62 +0x8FC8DF 0x6F68 +0x8FC8E0 0x6F6C +0x8FC8E1 0x6F7D +0x8FC8E2 0x6F7E +0x8FC8E3 0x6F83 +0x8FC8E4 0x6F87 +0x8FC8E5 0x6F88 +0x8FC8E6 0x6F8B +0x8FC8E7 0x6F8C +0x8FC8E8 0x6F8D +0x8FC8E9 0x6F90 +0x8FC8EA 0x6F92 +0x8FC8EB 0x6F93 +0x8FC8EC 0x6F94 +0x8FC8ED 0x6F96 +0x8FC8EE 0x6F9A +0x8FC8EF 0x6F9F +0x8FC8F0 0x6FA0 +0x8FC8F1 0x6FA5 +0x8FC8F2 0x6FA6 +0x8FC8F3 0x6FA7 +0x8FC8F4 0x6FA8 +0x8FC8F5 0x6FAE +0x8FC8F6 0x6FAF +0x8FC8F7 0x6FB0 +0x8FC8F8 0x6FB5 +0x8FC8F9 0x6FB6 +0x8FC8FA 0x6FBC +0x8FC8FB 0x6FC5 +0x8FC8FC 0x6FC7 +0x8FC8FD 0x6FC8 +0x8FC8FE 0x6FCA +0x8FC9A1 0x6FDA +0x8FC9A2 0x6FDE +0x8FC9A3 0x6FE8 +0x8FC9A4 0x6FE9 +0x8FC9A5 0x6FF0 +0x8FC9A6 0x6FF5 +0x8FC9A7 0x6FF9 +0x8FC9A8 0x6FFC +0x8FC9A9 0x6FFD +0x8FC9AA 0x7000 +0x8FC9AB 0x7005 +0x8FC9AC 0x7006 +0x8FC9AD 0x7007 +0x8FC9AE 0x700D +0x8FC9AF 0x7017 +0x8FC9B0 0x7020 +0x8FC9B1 0x7023 +0x8FC9B2 0x702F +0x8FC9B3 0x7034 +0x8FC9B4 0x7037 +0x8FC9B5 0x7039 +0x8FC9B6 0x703C +0x8FC9B7 0x7043 +0x8FC9B8 0x7044 +0x8FC9B9 0x7048 +0x8FC9BA 0x7049 +0x8FC9BB 0x704A +0x8FC9BC 0x704B +0x8FC9BD 0x7054 +0x8FC9BE 0x7055 +0x8FC9BF 0x705D +0x8FC9C0 0x705E +0x8FC9C1 0x704E +0x8FC9C2 0x7064 +0x8FC9C3 0x7065 +0x8FC9C4 0x706C +0x8FC9C5 0x706E +0x8FC9C6 0x7075 +0x8FC9C7 0x7076 +0x8FC9C8 0x707E +0x8FC9C9 0x7081 +0x8FC9CA 0x7085 +0x8FC9CB 0x7086 +0x8FC9CC 0x7094 +0x8FC9CD 0x7095 +0x8FC9CE 0x7096 +0x8FC9CF 0x7097 +0x8FC9D0 0x7098 +0x8FC9D1 0x709B +0x8FC9D2 0x70A4 +0x8FC9D3 0x70AB +0x8FC9D4 0x70B0 +0x8FC9D5 0x70B1 +0x8FC9D6 0x70B4 +0x8FC9D7 0x70B7 +0x8FC9D8 0x70CA +0x8FC9D9 0x70D1 +0x8FC9DA 0x70D3 +0x8FC9DB 0x70D4 +0x8FC9DC 0x70D5 +0x8FC9DD 0x70D6 +0x8FC9DE 0x70D8 +0x8FC9DF 0x70DC +0x8FC9E0 0x70E4 +0x8FC9E1 0x70FA +0x8FC9E2 0x7103 +0x8FC9E3 0x7104 +0x8FC9E4 0x7105 +0x8FC9E5 0x7106 +0x8FC9E6 0x7107 +0x8FC9E7 0x710B +0x8FC9E8 0x710C +0x8FC9E9 0x710F +0x8FC9EA 0x711E +0x8FC9EB 0x7120 +0x8FC9EC 0x712B +0x8FC9ED 0x712D +0x8FC9EE 0x712F +0x8FC9EF 0x7130 +0x8FC9F0 0x7131 +0x8FC9F1 0x7138 +0x8FC9F2 0x7141 +0x8FC9F3 0x7145 +0x8FC9F4 0x7146 +0x8FC9F5 0x7147 +0x8FC9F6 0x714A +0x8FC9F7 0x714B +0x8FC9F8 0x7150 +0x8FC9F9 0x7152 +0x8FC9FA 0x7157 +0x8FC9FB 0x715A +0x8FC9FC 0x715C +0x8FC9FD 0x715E +0x8FC9FE 0x7160 +0x8FCAA1 0x7168 +0x8FCAA2 0x7179 +0x8FCAA3 0x7180 +0x8FCAA4 0x7185 +0x8FCAA5 0x7187 +0x8FCAA6 0x718C +0x8FCAA7 0x7192 +0x8FCAA8 0x719A +0x8FCAA9 0x719B +0x8FCAAA 0x71A0 +0x8FCAAB 0x71A2 +0x8FCAAC 0x71AF +0x8FCAAD 0x71B0 +0x8FCAAE 0x71B2 +0x8FCAAF 0x71B3 +0x8FCAB0 0x71BA +0x8FCAB1 0x71BF +0x8FCAB2 0x71C0 +0x8FCAB3 0x71C1 +0x8FCAB4 0x71C4 +0x8FCAB5 0x71CB +0x8FCAB6 0x71CC +0x8FCAB7 0x71D3 +0x8FCAB8 0x71D6 +0x8FCAB9 0x71D9 +0x8FCABA 0x71DA +0x8FCABB 0x71DC +0x8FCABC 0x71F8 +0x8FCABD 0x71FE +0x8FCABE 0x7200 +0x8FCABF 0x7207 +0x8FCAC0 0x7208 +0x8FCAC1 0x7209 +0x8FCAC2 0x7213 +0x8FCAC3 0x7217 +0x8FCAC4 0x721A +0x8FCAC5 0x721D +0x8FCAC6 0x721F +0x8FCAC7 0x7224 +0x8FCAC8 0x722B +0x8FCAC9 0x722F +0x8FCACA 0x7234 +0x8FCACB 0x7238 +0x8FCACC 0x7239 +0x8FCACD 0x7241 +0x8FCACE 0x7242 +0x8FCACF 0x7243 +0x8FCAD0 0x7245 +0x8FCAD1 0x724E +0x8FCAD2 0x724F +0x8FCAD3 0x7250 +0x8FCAD4 0x7253 +0x8FCAD5 0x7255 +0x8FCAD6 0x7256 +0x8FCAD7 0x725A +0x8FCAD8 0x725C +0x8FCAD9 0x725E +0x8FCADA 0x7260 +0x8FCADB 0x7263 +0x8FCADC 0x7268 +0x8FCADD 0x726B +0x8FCADE 0x726E +0x8FCADF 0x726F +0x8FCAE0 0x7271 +0x8FCAE1 0x7277 +0x8FCAE2 0x7278 +0x8FCAE3 0x727B +0x8FCAE4 0x727C +0x8FCAE5 0x727F +0x8FCAE6 0x7284 +0x8FCAE7 0x7289 +0x8FCAE8 0x728D +0x8FCAE9 0x728E +0x8FCAEA 0x7293 +0x8FCAEB 0x729B +0x8FCAEC 0x72A8 +0x8FCAED 0x72AD +0x8FCAEE 0x72AE +0x8FCAEF 0x72B1 +0x8FCAF0 0x72B4 +0x8FCAF1 0x72BE +0x8FCAF2 0x72C1 +0x8FCAF3 0x72C7 +0x8FCAF4 0x72C9 +0x8FCAF5 0x72CC +0x8FCAF6 0x72D5 +0x8FCAF7 0x72D6 +0x8FCAF8 0x72D8 +0x8FCAF9 0x72DF +0x8FCAFA 0x72E5 +0x8FCAFB 0x72F3 +0x8FCAFC 0x72F4 +0x8FCAFD 0x72FA +0x8FCAFE 0x72FB +0x8FCBA1 0x72FE +0x8FCBA2 0x7302 +0x8FCBA3 0x7304 +0x8FCBA4 0x7305 +0x8FCBA5 0x7307 +0x8FCBA6 0x730B +0x8FCBA7 0x730D +0x8FCBA8 0x7312 +0x8FCBA9 0x7313 +0x8FCBAA 0x7318 +0x8FCBAB 0x7319 +0x8FCBAC 0x731E +0x8FCBAD 0x7322 +0x8FCBAE 0x7324 +0x8FCBAF 0x7327 +0x8FCBB0 0x7328 +0x8FCBB1 0x732C +0x8FCBB2 0x7331 +0x8FCBB3 0x7332 +0x8FCBB4 0x7335 +0x8FCBB5 0x733A +0x8FCBB6 0x733B +0x8FCBB7 0x733D +0x8FCBB8 0x7343 +0x8FCBB9 0x734D +0x8FCBBA 0x7350 +0x8FCBBB 0x7352 +0x8FCBBC 0x7356 +0x8FCBBD 0x7358 +0x8FCBBE 0x735D +0x8FCBBF 0x735E +0x8FCBC0 0x735F +0x8FCBC1 0x7360 +0x8FCBC2 0x7366 +0x8FCBC3 0x7367 +0x8FCBC4 0x7369 +0x8FCBC5 0x736B +0x8FCBC6 0x736C +0x8FCBC7 0x736E +0x8FCBC8 0x736F +0x8FCBC9 0x7371 +0x8FCBCA 0x7377 +0x8FCBCB 0x7379 +0x8FCBCC 0x737C +0x8FCBCD 0x7380 +0x8FCBCE 0x7381 +0x8FCBCF 0x7383 +0x8FCBD0 0x7385 +0x8FCBD1 0x7386 +0x8FCBD2 0x738E +0x8FCBD3 0x7390 +0x8FCBD4 0x7393 +0x8FCBD5 0x7395 +0x8FCBD6 0x7397 +0x8FCBD7 0x7398 +0x8FCBD8 0x739C +0x8FCBD9 0x739E +0x8FCBDA 0x739F +0x8FCBDB 0x73A0 +0x8FCBDC 0x73A2 +0x8FCBDD 0x73A5 +0x8FCBDE 0x73A6 +0x8FCBDF 0x73AA +0x8FCBE0 0x73AB +0x8FCBE1 0x73AD +0x8FCBE2 0x73B5 +0x8FCBE3 0x73B7 +0x8FCBE4 0x73B9 +0x8FCBE5 0x73BC +0x8FCBE6 0x73BD +0x8FCBE7 0x73BF +0x8FCBE8 0x73C5 +0x8FCBE9 0x73C6 +0x8FCBEA 0x73C9 +0x8FCBEB 0x73CB +0x8FCBEC 0x73CC +0x8FCBED 0x73CF +0x8FCBEE 0x73D2 +0x8FCBEF 0x73D3 +0x8FCBF0 0x73D6 +0x8FCBF1 0x73D9 +0x8FCBF2 0x73DD +0x8FCBF3 0x73E1 +0x8FCBF4 0x73E3 +0x8FCBF5 0x73E6 +0x8FCBF6 0x73E7 +0x8FCBF7 0x73E9 +0x8FCBF8 0x73F4 +0x8FCBF9 0x73F5 +0x8FCBFA 0x73F7 +0x8FCBFB 0x73F9 +0x8FCBFC 0x73FA +0x8FCBFD 0x73FB +0x8FCBFE 0x73FD +0x8FCCA1 0x73FF +0x8FCCA2 0x7400 +0x8FCCA3 0x7401 +0x8FCCA4 0x7404 +0x8FCCA5 0x7407 +0x8FCCA6 0x740A +0x8FCCA7 0x7411 +0x8FCCA8 0x741A +0x8FCCA9 0x741B +0x8FCCAA 0x7424 +0x8FCCAB 0x7426 +0x8FCCAC 0x7428 +0x8FCCAD 0x7429 +0x8FCCAE 0x742A +0x8FCCAF 0x742B +0x8FCCB0 0x742C +0x8FCCB1 0x742D +0x8FCCB2 0x742E +0x8FCCB3 0x742F +0x8FCCB4 0x7430 +0x8FCCB5 0x7431 +0x8FCCB6 0x7439 +0x8FCCB7 0x7440 +0x8FCCB8 0x7443 +0x8FCCB9 0x7444 +0x8FCCBA 0x7446 +0x8FCCBB 0x7447 +0x8FCCBC 0x744B +0x8FCCBD 0x744D +0x8FCCBE 0x7451 +0x8FCCBF 0x7452 +0x8FCCC0 0x7457 +0x8FCCC1 0x745D +0x8FCCC2 0x7462 +0x8FCCC3 0x7466 +0x8FCCC4 0x7467 +0x8FCCC5 0x7468 +0x8FCCC6 0x746B +0x8FCCC7 0x746D +0x8FCCC8 0x746E +0x8FCCC9 0x7471 +0x8FCCCA 0x7472 +0x8FCCCB 0x7480 +0x8FCCCC 0x7481 +0x8FCCCD 0x7485 +0x8FCCCE 0x7486 +0x8FCCCF 0x7487 +0x8FCCD0 0x7489 +0x8FCCD1 0x748F +0x8FCCD2 0x7490 +0x8FCCD3 0x7491 +0x8FCCD4 0x7492 +0x8FCCD5 0x7498 +0x8FCCD6 0x7499 +0x8FCCD7 0x749A +0x8FCCD8 0x749C +0x8FCCD9 0x749F +0x8FCCDA 0x74A0 +0x8FCCDB 0x74A1 +0x8FCCDC 0x74A3 +0x8FCCDD 0x74A6 +0x8FCCDE 0x74A8 +0x8FCCDF 0x74A9 +0x8FCCE0 0x74AA +0x8FCCE1 0x74AB +0x8FCCE2 0x74AE +0x8FCCE3 0x74AF +0x8FCCE4 0x74B1 +0x8FCCE5 0x74B2 +0x8FCCE6 0x74B5 +0x8FCCE7 0x74B9 +0x8FCCE8 0x74BB +0x8FCCE9 0x74BF +0x8FCCEA 0x74C8 +0x8FCCEB 0x74C9 +0x8FCCEC 0x74CC +0x8FCCED 0x74D0 +0x8FCCEE 0x74D3 +0x8FCCEF 0x74D8 +0x8FCCF0 0x74DA +0x8FCCF1 0x74DB +0x8FCCF2 0x74DE +0x8FCCF3 0x74DF +0x8FCCF4 0x74E4 +0x8FCCF5 0x74E8 +0x8FCCF6 0x74EA +0x8FCCF7 0x74EB +0x8FCCF8 0x74EF +0x8FCCF9 0x74F4 +0x8FCCFA 0x74FA +0x8FCCFB 0x74FB +0x8FCCFC 0x74FC +0x8FCCFD 0x74FF +0x8FCCFE 0x7506 +0x8FCDA1 0x7512 +0x8FCDA2 0x7516 +0x8FCDA3 0x7517 +0x8FCDA4 0x7520 +0x8FCDA5 0x7521 +0x8FCDA6 0x7524 +0x8FCDA7 0x7527 +0x8FCDA8 0x7529 +0x8FCDA9 0x752A +0x8FCDAA 0x752F +0x8FCDAB 0x7536 +0x8FCDAC 0x7539 +0x8FCDAD 0x753D +0x8FCDAE 0x753E +0x8FCDAF 0x753F +0x8FCDB0 0x7540 +0x8FCDB1 0x7543 +0x8FCDB2 0x7547 +0x8FCDB3 0x7548 +0x8FCDB4 0x754E +0x8FCDB5 0x7550 +0x8FCDB6 0x7552 +0x8FCDB7 0x7557 +0x8FCDB8 0x755E +0x8FCDB9 0x755F +0x8FCDBA 0x7561 +0x8FCDBB 0x756F +0x8FCDBC 0x7571 +0x8FCDBD 0x7579 +0x8FCDBE 0x757A +0x8FCDBF 0x757B +0x8FCDC0 0x757C +0x8FCDC1 0x757D +0x8FCDC2 0x757E +0x8FCDC3 0x7581 +0x8FCDC4 0x7585 +0x8FCDC5 0x7590 +0x8FCDC6 0x7592 +0x8FCDC7 0x7593 +0x8FCDC8 0x7595 +0x8FCDC9 0x7599 +0x8FCDCA 0x759C +0x8FCDCB 0x75A2 +0x8FCDCC 0x75A4 +0x8FCDCD 0x75B4 +0x8FCDCE 0x75BA +0x8FCDCF 0x75BF +0x8FCDD0 0x75C0 +0x8FCDD1 0x75C1 +0x8FCDD2 0x75C4 +0x8FCDD3 0x75C6 +0x8FCDD4 0x75CC +0x8FCDD5 0x75CE +0x8FCDD6 0x75CF +0x8FCDD7 0x75D7 +0x8FCDD8 0x75DC +0x8FCDD9 0x75DF +0x8FCDDA 0x75E0 +0x8FCDDB 0x75E1 +0x8FCDDC 0x75E4 +0x8FCDDD 0x75E7 +0x8FCDDE 0x75EC +0x8FCDDF 0x75EE +0x8FCDE0 0x75EF +0x8FCDE1 0x75F1 +0x8FCDE2 0x75F9 +0x8FCDE3 0x7600 +0x8FCDE4 0x7602 +0x8FCDE5 0x7603 +0x8FCDE6 0x7604 +0x8FCDE7 0x7607 +0x8FCDE8 0x7608 +0x8FCDE9 0x760A +0x8FCDEA 0x760C +0x8FCDEB 0x760F +0x8FCDEC 0x7612 +0x8FCDED 0x7613 +0x8FCDEE 0x7615 +0x8FCDEF 0x7616 +0x8FCDF0 0x7619 +0x8FCDF1 0x761B +0x8FCDF2 0x761C +0x8FCDF3 0x761D +0x8FCDF4 0x761E +0x8FCDF5 0x7623 +0x8FCDF6 0x7625 +0x8FCDF7 0x7626 +0x8FCDF8 0x7629 +0x8FCDF9 0x762D +0x8FCDFA 0x7632 +0x8FCDFB 0x7633 +0x8FCDFC 0x7635 +0x8FCDFD 0x7638 +0x8FCDFE 0x7639 +0x8FCEA1 0x763A +0x8FCEA2 0x763C +0x8FCEA3 0x764A +0x8FCEA4 0x7640 +0x8FCEA5 0x7641 +0x8FCEA6 0x7643 +0x8FCEA7 0x7644 +0x8FCEA8 0x7645 +0x8FCEA9 0x7649 +0x8FCEAA 0x764B +0x8FCEAB 0x7655 +0x8FCEAC 0x7659 +0x8FCEAD 0x765F +0x8FCEAE 0x7664 +0x8FCEAF 0x7665 +0x8FCEB0 0x766D +0x8FCEB1 0x766E +0x8FCEB2 0x766F +0x8FCEB3 0x7671 +0x8FCEB4 0x7674 +0x8FCEB5 0x7681 +0x8FCEB6 0x7685 +0x8FCEB7 0x768C +0x8FCEB8 0x768D +0x8FCEB9 0x7695 +0x8FCEBA 0x769B +0x8FCEBB 0x769C +0x8FCEBC 0x769D +0x8FCEBD 0x769F +0x8FCEBE 0x76A0 +0x8FCEBF 0x76A2 +0x8FCEC0 0x76A3 +0x8FCEC1 0x76A4 +0x8FCEC2 0x76A5 +0x8FCEC3 0x76A6 +0x8FCEC4 0x76A7 +0x8FCEC5 0x76A8 +0x8FCEC6 0x76AA +0x8FCEC7 0x76AD +0x8FCEC8 0x76BD +0x8FCEC9 0x76C1 +0x8FCECA 0x76C5 +0x8FCECB 0x76C9 +0x8FCECC 0x76CB +0x8FCECD 0x76CC +0x8FCECE 0x76CE +0x8FCECF 0x76D4 +0x8FCED0 0x76D9 +0x8FCED1 0x76E0 +0x8FCED2 0x76E6 +0x8FCED3 0x76E8 +0x8FCED4 0x76EC +0x8FCED5 0x76F0 +0x8FCED6 0x76F1 +0x8FCED7 0x76F6 +0x8FCED8 0x76F9 +0x8FCED9 0x76FC +0x8FCEDA 0x7700 +0x8FCEDB 0x7706 +0x8FCEDC 0x770A +0x8FCEDD 0x770E +0x8FCEDE 0x7712 +0x8FCEDF 0x7714 +0x8FCEE0 0x7715 +0x8FCEE1 0x7717 +0x8FCEE2 0x7719 +0x8FCEE3 0x771A +0x8FCEE4 0x771C +0x8FCEE5 0x7722 +0x8FCEE6 0x7728 +0x8FCEE7 0x772D +0x8FCEE8 0x772E +0x8FCEE9 0x772F +0x8FCEEA 0x7734 +0x8FCEEB 0x7735 +0x8FCEEC 0x7736 +0x8FCEED 0x7739 +0x8FCEEE 0x773D +0x8FCEEF 0x773E +0x8FCEF0 0x7742 +0x8FCEF1 0x7745 +0x8FCEF2 0x7746 +0x8FCEF3 0x774A +0x8FCEF4 0x774D +0x8FCEF5 0x774E +0x8FCEF6 0x774F +0x8FCEF7 0x7752 +0x8FCEF8 0x7756 +0x8FCEF9 0x7757 +0x8FCEFA 0x775C +0x8FCEFB 0x775E +0x8FCEFC 0x775F +0x8FCEFD 0x7760 +0x8FCEFE 0x7762 +0x8FCFA1 0x7764 +0x8FCFA2 0x7767 +0x8FCFA3 0x776A +0x8FCFA4 0x776C +0x8FCFA5 0x7770 +0x8FCFA6 0x7772 +0x8FCFA7 0x7773 +0x8FCFA8 0x7774 +0x8FCFA9 0x777A +0x8FCFAA 0x777D +0x8FCFAB 0x7780 +0x8FCFAC 0x7784 +0x8FCFAD 0x778C +0x8FCFAE 0x778D +0x8FCFAF 0x7794 +0x8FCFB0 0x7795 +0x8FCFB1 0x7796 +0x8FCFB2 0x779A +0x8FCFB3 0x779F +0x8FCFB4 0x77A2 +0x8FCFB5 0x77A7 +0x8FCFB6 0x77AA +0x8FCFB7 0x77AE +0x8FCFB8 0x77AF +0x8FCFB9 0x77B1 +0x8FCFBA 0x77B5 +0x8FCFBB 0x77BE +0x8FCFBC 0x77C3 +0x8FCFBD 0x77C9 +0x8FCFBE 0x77D1 +0x8FCFBF 0x77D2 +0x8FCFC0 0x77D5 +0x8FCFC1 0x77D9 +0x8FCFC2 0x77DE +0x8FCFC3 0x77DF +0x8FCFC4 0x77E0 +0x8FCFC5 0x77E4 +0x8FCFC6 0x77E6 +0x8FCFC7 0x77EA +0x8FCFC8 0x77EC +0x8FCFC9 0x77F0 +0x8FCFCA 0x77F1 +0x8FCFCB 0x77F4 +0x8FCFCC 0x77F8 +0x8FCFCD 0x77FB +0x8FCFCE 0x7805 +0x8FCFCF 0x7806 +0x8FCFD0 0x7809 +0x8FCFD1 0x780D +0x8FCFD2 0x780E +0x8FCFD3 0x7811 +0x8FCFD4 0x781D +0x8FCFD5 0x7821 +0x8FCFD6 0x7822 +0x8FCFD7 0x7823 +0x8FCFD8 0x782D +0x8FCFD9 0x782E +0x8FCFDA 0x7830 +0x8FCFDB 0x7835 +0x8FCFDC 0x7837 +0x8FCFDD 0x7843 +0x8FCFDE 0x7844 +0x8FCFDF 0x7847 +0x8FCFE0 0x7848 +0x8FCFE1 0x784C +0x8FCFE2 0x784E +0x8FCFE3 0x7852 +0x8FCFE4 0x785C +0x8FCFE5 0x785E +0x8FCFE6 0x7860 +0x8FCFE7 0x7861 +0x8FCFE8 0x7863 +0x8FCFE9 0x7864 +0x8FCFEA 0x7868 +0x8FCFEB 0x786A +0x8FCFEC 0x786E +0x8FCFED 0x787A +0x8FCFEE 0x787E +0x8FCFEF 0x788A +0x8FCFF0 0x788F +0x8FCFF1 0x7894 +0x8FCFF2 0x7898 +0x8FCFF3 0x78A1 +0x8FCFF4 0x789D +0x8FCFF5 0x789E +0x8FCFF6 0x789F +0x8FCFF7 0x78A4 +0x8FCFF8 0x78A8 +0x8FCFF9 0x78AC +0x8FCFFA 0x78AD +0x8FCFFB 0x78B0 +0x8FCFFC 0x78B1 +0x8FCFFD 0x78B2 +0x8FCFFE 0x78B3 +0x8FD0A1 0x78BB +0x8FD0A2 0x78BD +0x8FD0A3 0x78BF +0x8FD0A4 0x78C7 +0x8FD0A5 0x78C8 +0x8FD0A6 0x78C9 +0x8FD0A7 0x78CC +0x8FD0A8 0x78CE +0x8FD0A9 0x78D2 +0x8FD0AA 0x78D3 +0x8FD0AB 0x78D5 +0x8FD0AC 0x78D6 +0x8FD0AD 0x78E4 +0x8FD0AE 0x78DB +0x8FD0AF 0x78DF +0x8FD0B0 0x78E0 +0x8FD0B1 0x78E1 +0x8FD0B2 0x78E6 +0x8FD0B3 0x78EA +0x8FD0B4 0x78F2 +0x8FD0B5 0x78F3 +0x8FD0B6 0x7900 +0x8FD0B7 0x78F6 +0x8FD0B8 0x78F7 +0x8FD0B9 0x78FA +0x8FD0BA 0x78FB +0x8FD0BB 0x78FF +0x8FD0BC 0x7906 +0x8FD0BD 0x790C +0x8FD0BE 0x7910 +0x8FD0BF 0x791A +0x8FD0C0 0x791C +0x8FD0C1 0x791E +0x8FD0C2 0x791F +0x8FD0C3 0x7920 +0x8FD0C4 0x7925 +0x8FD0C5 0x7927 +0x8FD0C6 0x7929 +0x8FD0C7 0x792D +0x8FD0C8 0x7931 +0x8FD0C9 0x7934 +0x8FD0CA 0x7935 +0x8FD0CB 0x793B +0x8FD0CC 0x793D +0x8FD0CD 0x793F +0x8FD0CE 0x7944 +0x8FD0CF 0x7945 +0x8FD0D0 0x7946 +0x8FD0D1 0x794A +0x8FD0D2 0x794B +0x8FD0D3 0x794F +0x8FD0D4 0x7951 +0x8FD0D5 0x7954 +0x8FD0D6 0x7958 +0x8FD0D7 0x795B +0x8FD0D8 0x795C +0x8FD0D9 0x7967 +0x8FD0DA 0x7969 +0x8FD0DB 0x796B +0x8FD0DC 0x7972 +0x8FD0DD 0x7979 +0x8FD0DE 0x797B +0x8FD0DF 0x797C +0x8FD0E0 0x797E +0x8FD0E1 0x798B +0x8FD0E2 0x798C +0x8FD0E3 0x7991 +0x8FD0E4 0x7993 +0x8FD0E5 0x7994 +0x8FD0E6 0x7995 +0x8FD0E7 0x7996 +0x8FD0E8 0x7998 +0x8FD0E9 0x799B +0x8FD0EA 0x799C +0x8FD0EB 0x79A1 +0x8FD0EC 0x79A8 +0x8FD0ED 0x79A9 +0x8FD0EE 0x79AB +0x8FD0EF 0x79AF +0x8FD0F0 0x79B1 +0x8FD0F1 0x79B4 +0x8FD0F2 0x79B8 +0x8FD0F3 0x79BB +0x8FD0F4 0x79C2 +0x8FD0F5 0x79C4 +0x8FD0F6 0x79C7 +0x8FD0F7 0x79C8 +0x8FD0F8 0x79CA +0x8FD0F9 0x79CF +0x8FD0FA 0x79D4 +0x8FD0FB 0x79D6 +0x8FD0FC 0x79DA +0x8FD0FD 0x79DD +0x8FD0FE 0x79DE +0x8FD1A1 0x79E0 +0x8FD1A2 0x79E2 +0x8FD1A3 0x79E5 +0x8FD1A4 0x79EA +0x8FD1A5 0x79EB +0x8FD1A6 0x79ED +0x8FD1A7 0x79F1 +0x8FD1A8 0x79F8 +0x8FD1A9 0x79FC +0x8FD1AA 0x7A02 +0x8FD1AB 0x7A03 +0x8FD1AC 0x7A07 +0x8FD1AD 0x7A09 +0x8FD1AE 0x7A0A +0x8FD1AF 0x7A0C +0x8FD1B0 0x7A11 +0x8FD1B1 0x7A15 +0x8FD1B2 0x7A1B +0x8FD1B3 0x7A1E +0x8FD1B4 0x7A21 +0x8FD1B5 0x7A27 +0x8FD1B6 0x7A2B +0x8FD1B7 0x7A2D +0x8FD1B8 0x7A2F +0x8FD1B9 0x7A30 +0x8FD1BA 0x7A34 +0x8FD1BB 0x7A35 +0x8FD1BC 0x7A38 +0x8FD1BD 0x7A39 +0x8FD1BE 0x7A3A +0x8FD1BF 0x7A44 +0x8FD1C0 0x7A45 +0x8FD1C1 0x7A47 +0x8FD1C2 0x7A48 +0x8FD1C3 0x7A4C +0x8FD1C4 0x7A55 +0x8FD1C5 0x7A56 +0x8FD1C6 0x7A59 +0x8FD1C7 0x7A5C +0x8FD1C8 0x7A5D +0x8FD1C9 0x7A5F +0x8FD1CA 0x7A60 +0x8FD1CB 0x7A65 +0x8FD1CC 0x7A67 +0x8FD1CD 0x7A6A +0x8FD1CE 0x7A6D +0x8FD1CF 0x7A75 +0x8FD1D0 0x7A78 +0x8FD1D1 0x7A7E +0x8FD1D2 0x7A80 +0x8FD1D3 0x7A82 +0x8FD1D4 0x7A85 +0x8FD1D5 0x7A86 +0x8FD1D6 0x7A8A +0x8FD1D7 0x7A8B +0x8FD1D8 0x7A90 +0x8FD1D9 0x7A91 +0x8FD1DA 0x7A94 +0x8FD1DB 0x7A9E +0x8FD1DC 0x7AA0 +0x8FD1DD 0x7AA3 +0x8FD1DE 0x7AAC +0x8FD1DF 0x7AB3 +0x8FD1E0 0x7AB5 +0x8FD1E1 0x7AB9 +0x8FD1E2 0x7ABB +0x8FD1E3 0x7ABC +0x8FD1E4 0x7AC6 +0x8FD1E5 0x7AC9 +0x8FD1E6 0x7ACC +0x8FD1E7 0x7ACE +0x8FD1E8 0x7AD1 +0x8FD1E9 0x7ADB +0x8FD1EA 0x7AE8 +0x8FD1EB 0x7AE9 +0x8FD1EC 0x7AEB +0x8FD1ED 0x7AEC +0x8FD1EE 0x7AF1 +0x8FD1EF 0x7AF4 +0x8FD1F0 0x7AFB +0x8FD1F1 0x7AFD +0x8FD1F2 0x7AFE +0x8FD1F3 0x7B07 +0x8FD1F4 0x7B14 +0x8FD1F5 0x7B1F +0x8FD1F6 0x7B23 +0x8FD1F7 0x7B27 +0x8FD1F8 0x7B29 +0x8FD1F9 0x7B2A +0x8FD1FA 0x7B2B +0x8FD1FB 0x7B2D +0x8FD1FC 0x7B2E +0x8FD1FD 0x7B2F +0x8FD1FE 0x7B30 +0x8FD2A1 0x7B31 +0x8FD2A2 0x7B34 +0x8FD2A3 0x7B3D +0x8FD2A4 0x7B3F +0x8FD2A5 0x7B40 +0x8FD2A6 0x7B41 +0x8FD2A7 0x7B47 +0x8FD2A8 0x7B4E +0x8FD2A9 0x7B55 +0x8FD2AA 0x7B60 +0x8FD2AB 0x7B64 +0x8FD2AC 0x7B66 +0x8FD2AD 0x7B69 +0x8FD2AE 0x7B6A +0x8FD2AF 0x7B6D +0x8FD2B0 0x7B6F +0x8FD2B1 0x7B72 +0x8FD2B2 0x7B73 +0x8FD2B3 0x7B77 +0x8FD2B4 0x7B84 +0x8FD2B5 0x7B89 +0x8FD2B6 0x7B8E +0x8FD2B7 0x7B90 +0x8FD2B8 0x7B91 +0x8FD2B9 0x7B96 +0x8FD2BA 0x7B9B +0x8FD2BB 0x7B9E +0x8FD2BC 0x7BA0 +0x8FD2BD 0x7BA5 +0x8FD2BE 0x7BAC +0x8FD2BF 0x7BAF +0x8FD2C0 0x7BB0 +0x8FD2C1 0x7BB2 +0x8FD2C2 0x7BB5 +0x8FD2C3 0x7BB6 +0x8FD2C4 0x7BBA +0x8FD2C5 0x7BBB +0x8FD2C6 0x7BBC +0x8FD2C7 0x7BBD +0x8FD2C8 0x7BC2 +0x8FD2C9 0x7BC5 +0x8FD2CA 0x7BC8 +0x8FD2CB 0x7BCA +0x8FD2CC 0x7BD4 +0x8FD2CD 0x7BD6 +0x8FD2CE 0x7BD7 +0x8FD2CF 0x7BD9 +0x8FD2D0 0x7BDA +0x8FD2D1 0x7BDB +0x8FD2D2 0x7BE8 +0x8FD2D3 0x7BEA +0x8FD2D4 0x7BF2 +0x8FD2D5 0x7BF4 +0x8FD2D6 0x7BF5 +0x8FD2D7 0x7BF8 +0x8FD2D8 0x7BF9 +0x8FD2D9 0x7BFA +0x8FD2DA 0x7BFC +0x8FD2DB 0x7BFE +0x8FD2DC 0x7C01 +0x8FD2DD 0x7C02 +0x8FD2DE 0x7C03 +0x8FD2DF 0x7C04 +0x8FD2E0 0x7C06 +0x8FD2E1 0x7C09 +0x8FD2E2 0x7C0B +0x8FD2E3 0x7C0C +0x8FD2E4 0x7C0E +0x8FD2E5 0x7C0F +0x8FD2E6 0x7C19 +0x8FD2E7 0x7C1B +0x8FD2E8 0x7C20 +0x8FD2E9 0x7C25 +0x8FD2EA 0x7C26 +0x8FD2EB 0x7C28 +0x8FD2EC 0x7C2C +0x8FD2ED 0x7C31 +0x8FD2EE 0x7C33 +0x8FD2EF 0x7C34 +0x8FD2F0 0x7C36 +0x8FD2F1 0x7C39 +0x8FD2F2 0x7C3A +0x8FD2F3 0x7C46 +0x8FD2F4 0x7C4A +0x8FD2F5 0x7C55 +0x8FD2F6 0x7C51 +0x8FD2F7 0x7C52 +0x8FD2F8 0x7C53 +0x8FD2F9 0x7C59 +0x8FD2FA 0x7C5A +0x8FD2FB 0x7C5B +0x8FD2FC 0x7C5C +0x8FD2FD 0x7C5D +0x8FD2FE 0x7C5E +0x8FD3A1 0x7C61 +0x8FD3A2 0x7C63 +0x8FD3A3 0x7C67 +0x8FD3A4 0x7C69 +0x8FD3A5 0x7C6D +0x8FD3A6 0x7C6E +0x8FD3A7 0x7C70 +0x8FD3A8 0x7C72 +0x8FD3A9 0x7C79 +0x8FD3AA 0x7C7C +0x8FD3AB 0x7C7D +0x8FD3AC 0x7C86 +0x8FD3AD 0x7C87 +0x8FD3AE 0x7C8F +0x8FD3AF 0x7C94 +0x8FD3B0 0x7C9E +0x8FD3B1 0x7CA0 +0x8FD3B2 0x7CA6 +0x8FD3B3 0x7CB0 +0x8FD3B4 0x7CB6 +0x8FD3B5 0x7CB7 +0x8FD3B6 0x7CBA +0x8FD3B7 0x7CBB +0x8FD3B8 0x7CBC +0x8FD3B9 0x7CBF +0x8FD3BA 0x7CC4 +0x8FD3BB 0x7CC7 +0x8FD3BC 0x7CC8 +0x8FD3BD 0x7CC9 +0x8FD3BE 0x7CCD +0x8FD3BF 0x7CCF +0x8FD3C0 0x7CD3 +0x8FD3C1 0x7CD4 +0x8FD3C2 0x7CD5 +0x8FD3C3 0x7CD7 +0x8FD3C4 0x7CD9 +0x8FD3C5 0x7CDA +0x8FD3C6 0x7CDD +0x8FD3C7 0x7CE6 +0x8FD3C8 0x7CE9 +0x8FD3C9 0x7CEB +0x8FD3CA 0x7CF5 +0x8FD3CB 0x7D03 +0x8FD3CC 0x7D07 +0x8FD3CD 0x7D08 +0x8FD3CE 0x7D09 +0x8FD3CF 0x7D0F +0x8FD3D0 0x7D11 +0x8FD3D1 0x7D12 +0x8FD3D2 0x7D13 +0x8FD3D3 0x7D16 +0x8FD3D4 0x7D1D +0x8FD3D5 0x7D1E +0x8FD3D6 0x7D23 +0x8FD3D7 0x7D26 +0x8FD3D8 0x7D2A +0x8FD3D9 0x7D2D +0x8FD3DA 0x7D31 +0x8FD3DB 0x7D3C +0x8FD3DC 0x7D3D +0x8FD3DD 0x7D3E +0x8FD3DE 0x7D40 +0x8FD3DF 0x7D41 +0x8FD3E0 0x7D47 +0x8FD3E1 0x7D48 +0x8FD3E2 0x7D4D +0x8FD3E3 0x7D51 +0x8FD3E4 0x7D53 +0x8FD3E5 0x7D57 +0x8FD3E6 0x7D59 +0x8FD3E7 0x7D5A +0x8FD3E8 0x7D5C +0x8FD3E9 0x7D5D +0x8FD3EA 0x7D65 +0x8FD3EB 0x7D67 +0x8FD3EC 0x7D6A +0x8FD3ED 0x7D70 +0x8FD3EE 0x7D78 +0x8FD3EF 0x7D7A +0x8FD3F0 0x7D7B +0x8FD3F1 0x7D7F +0x8FD3F2 0x7D81 +0x8FD3F3 0x7D82 +0x8FD3F4 0x7D83 +0x8FD3F5 0x7D85 +0x8FD3F6 0x7D86 +0x8FD3F7 0x7D88 +0x8FD3F8 0x7D8B +0x8FD3F9 0x7D8C +0x8FD3FA 0x7D8D +0x8FD3FB 0x7D91 +0x8FD3FC 0x7D96 +0x8FD3FD 0x7D97 +0x8FD3FE 0x7D9D +0x8FD4A1 0x7D9E +0x8FD4A2 0x7DA6 +0x8FD4A3 0x7DA7 +0x8FD4A4 0x7DAA +0x8FD4A5 0x7DB3 +0x8FD4A6 0x7DB6 +0x8FD4A7 0x7DB7 +0x8FD4A8 0x7DB9 +0x8FD4A9 0x7DC2 +0x8FD4AA 0x7DC3 +0x8FD4AB 0x7DC4 +0x8FD4AC 0x7DC5 +0x8FD4AD 0x7DC6 +0x8FD4AE 0x7DCC +0x8FD4AF 0x7DCD +0x8FD4B0 0x7DCE +0x8FD4B1 0x7DD7 +0x8FD4B2 0x7DD9 +0x8FD4B3 0x7E00 +0x8FD4B4 0x7DE2 +0x8FD4B5 0x7DE5 +0x8FD4B6 0x7DE6 +0x8FD4B7 0x7DEA +0x8FD4B8 0x7DEB +0x8FD4B9 0x7DED +0x8FD4BA 0x7DF1 +0x8FD4BB 0x7DF5 +0x8FD4BC 0x7DF6 +0x8FD4BD 0x7DF9 +0x8FD4BE 0x7DFA +0x8FD4BF 0x7E08 +0x8FD4C0 0x7E10 +0x8FD4C1 0x7E11 +0x8FD4C2 0x7E15 +0x8FD4C3 0x7E17 +0x8FD4C4 0x7E1C +0x8FD4C5 0x7E1D +0x8FD4C6 0x7E20 +0x8FD4C7 0x7E27 +0x8FD4C8 0x7E28 +0x8FD4C9 0x7E2C +0x8FD4CA 0x7E2D +0x8FD4CB 0x7E2F +0x8FD4CC 0x7E33 +0x8FD4CD 0x7E36 +0x8FD4CE 0x7E3F +0x8FD4CF 0x7E44 +0x8FD4D0 0x7E45 +0x8FD4D1 0x7E47 +0x8FD4D2 0x7E4E +0x8FD4D3 0x7E50 +0x8FD4D4 0x7E52 +0x8FD4D5 0x7E58 +0x8FD4D6 0x7E5F +0x8FD4D7 0x7E61 +0x8FD4D8 0x7E62 +0x8FD4D9 0x7E65 +0x8FD4DA 0x7E6B +0x8FD4DB 0x7E6E +0x8FD4DC 0x7E6F +0x8FD4DD 0x7E73 +0x8FD4DE 0x7E78 +0x8FD4DF 0x7E7E +0x8FD4E0 0x7E81 +0x8FD4E1 0x7E86 +0x8FD4E2 0x7E87 +0x8FD4E3 0x7E8A +0x8FD4E4 0x7E8D +0x8FD4E5 0x7E91 +0x8FD4E6 0x7E95 +0x8FD4E7 0x7E98 +0x8FD4E8 0x7E9A +0x8FD4E9 0x7E9D +0x8FD4EA 0x7E9E +0x8FD4EB 0x7F3C +0x8FD4EC 0x7F3B +0x8FD4ED 0x7F3D +0x8FD4EE 0x7F3E +0x8FD4EF 0x7F3F +0x8FD4F0 0x7F43 +0x8FD4F1 0x7F44 +0x8FD4F2 0x7F47 +0x8FD4F3 0x7F4F +0x8FD4F4 0x7F52 +0x8FD4F5 0x7F53 +0x8FD4F6 0x7F5B +0x8FD4F7 0x7F5C +0x8FD4F8 0x7F5D +0x8FD4F9 0x7F61 +0x8FD4FA 0x7F63 +0x8FD4FB 0x7F64 +0x8FD4FC 0x7F65 +0x8FD4FD 0x7F66 +0x8FD4FE 0x7F6D +0x8FD5A1 0x7F71 +0x8FD5A2 0x7F7D +0x8FD5A3 0x7F7E +0x8FD5A4 0x7F7F +0x8FD5A5 0x7F80 +0x8FD5A6 0x7F8B +0x8FD5A7 0x7F8D +0x8FD5A8 0x7F8F +0x8FD5A9 0x7F90 +0x8FD5AA 0x7F91 +0x8FD5AB 0x7F96 +0x8FD5AC 0x7F97 +0x8FD5AD 0x7F9C +0x8FD5AE 0x7FA1 +0x8FD5AF 0x7FA2 +0x8FD5B0 0x7FA6 +0x8FD5B1 0x7FAA +0x8FD5B2 0x7FAD +0x8FD5B3 0x7FB4 +0x8FD5B4 0x7FBC +0x8FD5B5 0x7FBF +0x8FD5B6 0x7FC0 +0x8FD5B7 0x7FC3 +0x8FD5B8 0x7FC8 +0x8FD5B9 0x7FCE +0x8FD5BA 0x7FCF +0x8FD5BB 0x7FDB +0x8FD5BC 0x7FDF +0x8FD5BD 0x7FE3 +0x8FD5BE 0x7FE5 +0x8FD5BF 0x7FE8 +0x8FD5C0 0x7FEC +0x8FD5C1 0x7FEE +0x8FD5C2 0x7FEF +0x8FD5C3 0x7FF2 +0x8FD5C4 0x7FFA +0x8FD5C5 0x7FFD +0x8FD5C6 0x7FFE +0x8FD5C7 0x7FFF +0x8FD5C8 0x8007 +0x8FD5C9 0x8008 +0x8FD5CA 0x800A +0x8FD5CB 0x800D +0x8FD5CC 0x800E +0x8FD5CD 0x800F +0x8FD5CE 0x8011 +0x8FD5CF 0x8013 +0x8FD5D0 0x8014 +0x8FD5D1 0x8016 +0x8FD5D2 0x801D +0x8FD5D3 0x801E +0x8FD5D4 0x801F +0x8FD5D5 0x8020 +0x8FD5D6 0x8024 +0x8FD5D7 0x8026 +0x8FD5D8 0x802C +0x8FD5D9 0x802E +0x8FD5DA 0x8030 +0x8FD5DB 0x8034 +0x8FD5DC 0x8035 +0x8FD5DD 0x8037 +0x8FD5DE 0x8039 +0x8FD5DF 0x803A +0x8FD5E0 0x803C +0x8FD5E1 0x803E +0x8FD5E2 0x8040 +0x8FD5E3 0x8044 +0x8FD5E4 0x8060 +0x8FD5E5 0x8064 +0x8FD5E6 0x8066 +0x8FD5E7 0x806D +0x8FD5E8 0x8071 +0x8FD5E9 0x8075 +0x8FD5EA 0x8081 +0x8FD5EB 0x8088 +0x8FD5EC 0x808E +0x8FD5ED 0x809C +0x8FD5EE 0x809E +0x8FD5EF 0x80A6 +0x8FD5F0 0x80A7 +0x8FD5F1 0x80AB +0x8FD5F2 0x80B8 +0x8FD5F3 0x80B9 +0x8FD5F4 0x80C8 +0x8FD5F5 0x80CD +0x8FD5F6 0x80CF +0x8FD5F7 0x80D2 +0x8FD5F8 0x80D4 +0x8FD5F9 0x80D5 +0x8FD5FA 0x80D7 +0x8FD5FB 0x80D8 +0x8FD5FC 0x80E0 +0x8FD5FD 0x80ED +0x8FD5FE 0x80EE +0x8FD6A1 0x80F0 +0x8FD6A2 0x80F2 +0x8FD6A3 0x80F3 +0x8FD6A4 0x80F6 +0x8FD6A5 0x80F9 +0x8FD6A6 0x80FA +0x8FD6A7 0x80FE +0x8FD6A8 0x8103 +0x8FD6A9 0x810B +0x8FD6AA 0x8116 +0x8FD6AB 0x8117 +0x8FD6AC 0x8118 +0x8FD6AD 0x811C +0x8FD6AE 0x811E +0x8FD6AF 0x8120 +0x8FD6B0 0x8124 +0x8FD6B1 0x8127 +0x8FD6B2 0x812C +0x8FD6B3 0x8130 +0x8FD6B4 0x8135 +0x8FD6B5 0x813A +0x8FD6B6 0x813C +0x8FD6B7 0x8145 +0x8FD6B8 0x8147 +0x8FD6B9 0x814A +0x8FD6BA 0x814C +0x8FD6BB 0x8152 +0x8FD6BC 0x8157 +0x8FD6BD 0x8160 +0x8FD6BE 0x8161 +0x8FD6BF 0x8167 +0x8FD6C0 0x8168 +0x8FD6C1 0x8169 +0x8FD6C2 0x816D +0x8FD6C3 0x816F +0x8FD6C4 0x8177 +0x8FD6C5 0x8181 +0x8FD6C6 0x8190 +0x8FD6C7 0x8184 +0x8FD6C8 0x8185 +0x8FD6C9 0x8186 +0x8FD6CA 0x818B +0x8FD6CB 0x818E +0x8FD6CC 0x8196 +0x8FD6CD 0x8198 +0x8FD6CE 0x819B +0x8FD6CF 0x819E +0x8FD6D0 0x81A2 +0x8FD6D1 0x81AE +0x8FD6D2 0x81B2 +0x8FD6D3 0x81B4 +0x8FD6D4 0x81BB +0x8FD6D5 0x81CB +0x8FD6D6 0x81C3 +0x8FD6D7 0x81C5 +0x8FD6D8 0x81CA +0x8FD6D9 0x81CE +0x8FD6DA 0x81CF +0x8FD6DB 0x81D5 +0x8FD6DC 0x81D7 +0x8FD6DD 0x81DB +0x8FD6DE 0x81DD +0x8FD6DF 0x81DE +0x8FD6E0 0x81E1 +0x8FD6E1 0x81E4 +0x8FD6E2 0x81EB +0x8FD6E3 0x81EC +0x8FD6E4 0x81F0 +0x8FD6E5 0x81F1 +0x8FD6E6 0x81F2 +0x8FD6E7 0x81F5 +0x8FD6E8 0x81F6 +0x8FD6E9 0x81F8 +0x8FD6EA 0x81F9 +0x8FD6EB 0x81FD +0x8FD6EC 0x81FF +0x8FD6ED 0x8200 +0x8FD6EE 0x8203 +0x8FD6EF 0x820F +0x8FD6F0 0x8213 +0x8FD6F1 0x8214 +0x8FD6F2 0x8219 +0x8FD6F3 0x821A +0x8FD6F4 0x821D +0x8FD6F5 0x8221 +0x8FD6F6 0x8222 +0x8FD6F7 0x8228 +0x8FD6F8 0x8232 +0x8FD6F9 0x8234 +0x8FD6FA 0x823A +0x8FD6FB 0x8243 +0x8FD6FC 0x8244 +0x8FD6FD 0x8245 +0x8FD6FE 0x8246 +0x8FD7A1 0x824B +0x8FD7A2 0x824E +0x8FD7A3 0x824F +0x8FD7A4 0x8251 +0x8FD7A5 0x8256 +0x8FD7A6 0x825C +0x8FD7A7 0x8260 +0x8FD7A8 0x8263 +0x8FD7A9 0x8267 +0x8FD7AA 0x826D +0x8FD7AB 0x8274 +0x8FD7AC 0x827B +0x8FD7AD 0x827D +0x8FD7AE 0x827F +0x8FD7AF 0x8280 +0x8FD7B0 0x8281 +0x8FD7B1 0x8283 +0x8FD7B2 0x8284 +0x8FD7B3 0x8287 +0x8FD7B4 0x8289 +0x8FD7B5 0x828A +0x8FD7B6 0x828E +0x8FD7B7 0x8291 +0x8FD7B8 0x8294 +0x8FD7B9 0x8296 +0x8FD7BA 0x8298 +0x8FD7BB 0x829A +0x8FD7BC 0x829B +0x8FD7BD 0x82A0 +0x8FD7BE 0x82A1 +0x8FD7BF 0x82A3 +0x8FD7C0 0x82A4 +0x8FD7C1 0x82A7 +0x8FD7C2 0x82A8 +0x8FD7C3 0x82A9 +0x8FD7C4 0x82AA +0x8FD7C5 0x82AE +0x8FD7C6 0x82B0 +0x8FD7C7 0x82B2 +0x8FD7C8 0x82B4 +0x8FD7C9 0x82B7 +0x8FD7CA 0x82BA +0x8FD7CB 0x82BC +0x8FD7CC 0x82BE +0x8FD7CD 0x82BF +0x8FD7CE 0x82C6 +0x8FD7CF 0x82D0 +0x8FD7D0 0x82D5 +0x8FD7D1 0x82DA +0x8FD7D2 0x82E0 +0x8FD7D3 0x82E2 +0x8FD7D4 0x82E4 +0x8FD7D5 0x82E8 +0x8FD7D6 0x82EA +0x8FD7D7 0x82ED +0x8FD7D8 0x82EF +0x8FD7D9 0x82F6 +0x8FD7DA 0x82F7 +0x8FD7DB 0x82FD +0x8FD7DC 0x82FE +0x8FD7DD 0x8300 +0x8FD7DE 0x8301 +0x8FD7DF 0x8307 +0x8FD7E0 0x8308 +0x8FD7E1 0x830A +0x8FD7E2 0x830B +0x8FD7E3 0x8354 +0x8FD7E4 0x831B +0x8FD7E5 0x831D +0x8FD7E6 0x831E +0x8FD7E7 0x831F +0x8FD7E8 0x8321 +0x8FD7E9 0x8322 +0x8FD7EA 0x832C +0x8FD7EB 0x832D +0x8FD7EC 0x832E +0x8FD7ED 0x8330 +0x8FD7EE 0x8333 +0x8FD7EF 0x8337 +0x8FD7F0 0x833A +0x8FD7F1 0x833C +0x8FD7F2 0x833D +0x8FD7F3 0x8342 +0x8FD7F4 0x8343 +0x8FD7F5 0x8344 +0x8FD7F6 0x8347 +0x8FD7F7 0x834D +0x8FD7F8 0x834E +0x8FD7F9 0x8351 +0x8FD7FA 0x8355 +0x8FD7FB 0x8356 +0x8FD7FC 0x8357 +0x8FD7FD 0x8370 +0x8FD7FE 0x8378 +0x8FD8A1 0x837D +0x8FD8A2 0x837F +0x8FD8A3 0x8380 +0x8FD8A4 0x8382 +0x8FD8A5 0x8384 +0x8FD8A6 0x8386 +0x8FD8A7 0x838D +0x8FD8A8 0x8392 +0x8FD8A9 0x8394 +0x8FD8AA 0x8395 +0x8FD8AB 0x8398 +0x8FD8AC 0x8399 +0x8FD8AD 0x839B +0x8FD8AE 0x839C +0x8FD8AF 0x839D +0x8FD8B0 0x83A6 +0x8FD8B1 0x83A7 +0x8FD8B2 0x83A9 +0x8FD8B3 0x83AC +0x8FD8B4 0x83BE +0x8FD8B5 0x83BF +0x8FD8B6 0x83C0 +0x8FD8B7 0x83C7 +0x8FD8B8 0x83C9 +0x8FD8B9 0x83CF +0x8FD8BA 0x83D0 +0x8FD8BB 0x83D1 +0x8FD8BC 0x83D4 +0x8FD8BD 0x83DD +0x8FD8BE 0x8353 +0x8FD8BF 0x83E8 +0x8FD8C0 0x83EA +0x8FD8C1 0x83F6 +0x8FD8C2 0x83F8 +0x8FD8C3 0x83F9 +0x8FD8C4 0x83FC +0x8FD8C5 0x8401 +0x8FD8C6 0x8406 +0x8FD8C7 0x840A +0x8FD8C8 0x840F +0x8FD8C9 0x8411 +0x8FD8CA 0x8415 +0x8FD8CB 0x8419 +0x8FD8CC 0x83AD +0x8FD8CD 0x842F +0x8FD8CE 0x8439 +0x8FD8CF 0x8445 +0x8FD8D0 0x8447 +0x8FD8D1 0x8448 +0x8FD8D2 0x844A +0x8FD8D3 0x844D +0x8FD8D4 0x844F +0x8FD8D5 0x8451 +0x8FD8D6 0x8452 +0x8FD8D7 0x8456 +0x8FD8D8 0x8458 +0x8FD8D9 0x8459 +0x8FD8DA 0x845A +0x8FD8DB 0x845C +0x8FD8DC 0x8460 +0x8FD8DD 0x8464 +0x8FD8DE 0x8465 +0x8FD8DF 0x8467 +0x8FD8E0 0x846A +0x8FD8E1 0x8470 +0x8FD8E2 0x8473 +0x8FD8E3 0x8474 +0x8FD8E4 0x8476 +0x8FD8E5 0x8478 +0x8FD8E6 0x847C +0x8FD8E7 0x847D +0x8FD8E8 0x8481 +0x8FD8E9 0x8485 +0x8FD8EA 0x8492 +0x8FD8EB 0x8493 +0x8FD8EC 0x8495 +0x8FD8ED 0x849E +0x8FD8EE 0x84A6 +0x8FD8EF 0x84A8 +0x8FD8F0 0x84A9 +0x8FD8F1 0x84AA +0x8FD8F2 0x84AF +0x8FD8F3 0x84B1 +0x8FD8F4 0x84B4 +0x8FD8F5 0x84BA +0x8FD8F6 0x84BD +0x8FD8F7 0x84BE +0x8FD8F8 0x84C0 +0x8FD8F9 0x84C2 +0x8FD8FA 0x84C7 +0x8FD8FB 0x84C8 +0x8FD8FC 0x84CC +0x8FD8FD 0x84CF +0x8FD8FE 0x84D3 +0x8FD9A1 0x84DC +0x8FD9A2 0x84E7 +0x8FD9A3 0x84EA +0x8FD9A4 0x84EF +0x8FD9A5 0x84F0 +0x8FD9A6 0x84F1 +0x8FD9A7 0x84F2 +0x8FD9A8 0x84F7 +0x8FD9A9 0x8532 +0x8FD9AA 0x84FA +0x8FD9AB 0x84FB +0x8FD9AC 0x84FD +0x8FD9AD 0x8502 +0x8FD9AE 0x8503 +0x8FD9AF 0x8507 +0x8FD9B0 0x850C +0x8FD9B1 0x850E +0x8FD9B2 0x8510 +0x8FD9B3 0x851C +0x8FD9B4 0x851E +0x8FD9B5 0x8522 +0x8FD9B6 0x8523 +0x8FD9B7 0x8524 +0x8FD9B8 0x8525 +0x8FD9B9 0x8527 +0x8FD9BA 0x852A +0x8FD9BB 0x852B +0x8FD9BC 0x852F +0x8FD9BD 0x8533 +0x8FD9BE 0x8534 +0x8FD9BF 0x8536 +0x8FD9C0 0x853F +0x8FD9C1 0x8546 +0x8FD9C2 0x854F +0x8FD9C3 0x8550 +0x8FD9C4 0x8551 +0x8FD9C5 0x8552 +0x8FD9C6 0x8553 +0x8FD9C7 0x8556 +0x8FD9C8 0x8559 +0x8FD9C9 0x855C +0x8FD9CA 0x855D +0x8FD9CB 0x855E +0x8FD9CC 0x855F +0x8FD9CD 0x8560 +0x8FD9CE 0x8561 +0x8FD9CF 0x8562 +0x8FD9D0 0x8564 +0x8FD9D1 0x856B +0x8FD9D2 0x856F +0x8FD9D3 0x8579 +0x8FD9D4 0x857A +0x8FD9D5 0x857B +0x8FD9D6 0x857D +0x8FD9D7 0x857F +0x8FD9D8 0x8581 +0x8FD9D9 0x8585 +0x8FD9DA 0x8586 +0x8FD9DB 0x8589 +0x8FD9DC 0x858B +0x8FD9DD 0x858C +0x8FD9DE 0x858F +0x8FD9DF 0x8593 +0x8FD9E0 0x8598 +0x8FD9E1 0x859D +0x8FD9E2 0x859F +0x8FD9E3 0x85A0 +0x8FD9E4 0x85A2 +0x8FD9E5 0x85A5 +0x8FD9E6 0x85A7 +0x8FD9E7 0x85B4 +0x8FD9E8 0x85B6 +0x8FD9E9 0x85B7 +0x8FD9EA 0x85B8 +0x8FD9EB 0x85BC +0x8FD9EC 0x85BD +0x8FD9ED 0x85BE +0x8FD9EE 0x85BF +0x8FD9EF 0x85C2 +0x8FD9F0 0x85C7 +0x8FD9F1 0x85CA +0x8FD9F2 0x85CB +0x8FD9F3 0x85CE +0x8FD9F4 0x85AD +0x8FD9F5 0x85D8 +0x8FD9F6 0x85DA +0x8FD9F7 0x85DF +0x8FD9F8 0x85E0 +0x8FD9F9 0x85E6 +0x8FD9FA 0x85E8 +0x8FD9FB 0x85ED +0x8FD9FC 0x85F3 +0x8FD9FD 0x85F6 +0x8FD9FE 0x85FC +0x8FDAA1 0x85FF +0x8FDAA2 0x8600 +0x8FDAA3 0x8604 +0x8FDAA4 0x8605 +0x8FDAA5 0x860D +0x8FDAA6 0x860E +0x8FDAA7 0x8610 +0x8FDAA8 0x8611 +0x8FDAA9 0x8612 +0x8FDAAA 0x8618 +0x8FDAAB 0x8619 +0x8FDAAC 0x861B +0x8FDAAD 0x861E +0x8FDAAE 0x8621 +0x8FDAAF 0x8627 +0x8FDAB0 0x8629 +0x8FDAB1 0x8636 +0x8FDAB2 0x8638 +0x8FDAB3 0x863A +0x8FDAB4 0x863C +0x8FDAB5 0x863D +0x8FDAB6 0x8640 +0x8FDAB7 0x8642 +0x8FDAB8 0x8646 +0x8FDAB9 0x8652 +0x8FDABA 0x8653 +0x8FDABB 0x8656 +0x8FDABC 0x8657 +0x8FDABD 0x8658 +0x8FDABE 0x8659 +0x8FDABF 0x865D +0x8FDAC0 0x8660 +0x8FDAC1 0x8661 +0x8FDAC2 0x8662 +0x8FDAC3 0x8663 +0x8FDAC4 0x8664 +0x8FDAC5 0x8669 +0x8FDAC6 0x866C +0x8FDAC7 0x866F +0x8FDAC8 0x8675 +0x8FDAC9 0x8676 +0x8FDACA 0x8677 +0x8FDACB 0x867A +0x8FDACC 0x868D +0x8FDACD 0x8691 +0x8FDACE 0x8696 +0x8FDACF 0x8698 +0x8FDAD0 0x869A +0x8FDAD1 0x869C +0x8FDAD2 0x86A1 +0x8FDAD3 0x86A6 +0x8FDAD4 0x86A7 +0x8FDAD5 0x86A8 +0x8FDAD6 0x86AD +0x8FDAD7 0x86B1 +0x8FDAD8 0x86B3 +0x8FDAD9 0x86B4 +0x8FDADA 0x86B5 +0x8FDADB 0x86B7 +0x8FDADC 0x86B8 +0x8FDADD 0x86B9 +0x8FDADE 0x86BF +0x8FDADF 0x86C0 +0x8FDAE0 0x86C1 +0x8FDAE1 0x86C3 +0x8FDAE2 0x86C5 +0x8FDAE3 0x86D1 +0x8FDAE4 0x86D2 +0x8FDAE5 0x86D5 +0x8FDAE6 0x86D7 +0x8FDAE7 0x86DA +0x8FDAE8 0x86DC +0x8FDAE9 0x86E0 +0x8FDAEA 0x86E3 +0x8FDAEB 0x86E5 +0x8FDAEC 0x86E7 +0x8FDAED 0x8688 +0x8FDAEE 0x86FA +0x8FDAEF 0x86FC +0x8FDAF0 0x86FD +0x8FDAF1 0x8704 +0x8FDAF2 0x8705 +0x8FDAF3 0x8707 +0x8FDAF4 0x870B +0x8FDAF5 0x870E +0x8FDAF6 0x870F +0x8FDAF7 0x8710 +0x8FDAF8 0x8713 +0x8FDAF9 0x8714 +0x8FDAFA 0x8719 +0x8FDAFB 0x871E +0x8FDAFC 0x871F +0x8FDAFD 0x8721 +0x8FDAFE 0x8723 +0x8FDBA1 0x8728 +0x8FDBA2 0x872E +0x8FDBA3 0x872F +0x8FDBA4 0x8731 +0x8FDBA5 0x8732 +0x8FDBA6 0x8739 +0x8FDBA7 0x873A +0x8FDBA8 0x873C +0x8FDBA9 0x873D +0x8FDBAA 0x873E +0x8FDBAB 0x8740 +0x8FDBAC 0x8743 +0x8FDBAD 0x8745 +0x8FDBAE 0x874D +0x8FDBAF 0x8758 +0x8FDBB0 0x875D +0x8FDBB1 0x8761 +0x8FDBB2 0x8764 +0x8FDBB3 0x8765 +0x8FDBB4 0x876F +0x8FDBB5 0x8771 +0x8FDBB6 0x8772 +0x8FDBB7 0x877B +0x8FDBB8 0x8783 +0x8FDBB9 0x8784 +0x8FDBBA 0x8785 +0x8FDBBB 0x8786 +0x8FDBBC 0x8787 +0x8FDBBD 0x8788 +0x8FDBBE 0x8789 +0x8FDBBF 0x878B +0x8FDBC0 0x878C +0x8FDBC1 0x8790 +0x8FDBC2 0x8793 +0x8FDBC3 0x8795 +0x8FDBC4 0x8797 +0x8FDBC5 0x8798 +0x8FDBC6 0x8799 +0x8FDBC7 0x879E +0x8FDBC8 0x87A0 +0x8FDBC9 0x87A3 +0x8FDBCA 0x87A7 +0x8FDBCB 0x87AC +0x8FDBCC 0x87AD +0x8FDBCD 0x87AE +0x8FDBCE 0x87B1 +0x8FDBCF 0x87B5 +0x8FDBD0 0x87BE +0x8FDBD1 0x87BF +0x8FDBD2 0x87C1 +0x8FDBD3 0x87C8 +0x8FDBD4 0x87C9 +0x8FDBD5 0x87CA +0x8FDBD6 0x87CE +0x8FDBD7 0x87D5 +0x8FDBD8 0x87D6 +0x8FDBD9 0x87D9 +0x8FDBDA 0x87DA +0x8FDBDB 0x87DC +0x8FDBDC 0x87DF +0x8FDBDD 0x87E2 +0x8FDBDE 0x87E3 +0x8FDBDF 0x87E4 +0x8FDBE0 0x87EA +0x8FDBE1 0x87EB +0x8FDBE2 0x87ED +0x8FDBE3 0x87F1 +0x8FDBE4 0x87F3 +0x8FDBE5 0x87F8 +0x8FDBE6 0x87FA +0x8FDBE7 0x87FF +0x8FDBE8 0x8801 +0x8FDBE9 0x8803 +0x8FDBEA 0x8806 +0x8FDBEB 0x8809 +0x8FDBEC 0x880A +0x8FDBED 0x880B +0x8FDBEE 0x8810 +0x8FDBEF 0x8819 +0x8FDBF0 0x8812 +0x8FDBF1 0x8813 +0x8FDBF2 0x8814 +0x8FDBF3 0x8818 +0x8FDBF4 0x881A +0x8FDBF5 0x881B +0x8FDBF6 0x881C +0x8FDBF7 0x881E +0x8FDBF8 0x881F +0x8FDBF9 0x8828 +0x8FDBFA 0x882D +0x8FDBFB 0x882E +0x8FDBFC 0x8830 +0x8FDBFD 0x8832 +0x8FDBFE 0x8835 +0x8FDCA1 0x883A +0x8FDCA2 0x883C +0x8FDCA3 0x8841 +0x8FDCA4 0x8843 +0x8FDCA5 0x8845 +0x8FDCA6 0x8848 +0x8FDCA7 0x8849 +0x8FDCA8 0x884A +0x8FDCA9 0x884B +0x8FDCAA 0x884E +0x8FDCAB 0x8851 +0x8FDCAC 0x8855 +0x8FDCAD 0x8856 +0x8FDCAE 0x8858 +0x8FDCAF 0x885A +0x8FDCB0 0x885C +0x8FDCB1 0x885F +0x8FDCB2 0x8860 +0x8FDCB3 0x8864 +0x8FDCB4 0x8869 +0x8FDCB5 0x8871 +0x8FDCB6 0x8879 +0x8FDCB7 0x887B +0x8FDCB8 0x8880 +0x8FDCB9 0x8898 +0x8FDCBA 0x889A +0x8FDCBB 0x889B +0x8FDCBC 0x889C +0x8FDCBD 0x889F +0x8FDCBE 0x88A0 +0x8FDCBF 0x88A8 +0x8FDCC0 0x88AA +0x8FDCC1 0x88BA +0x8FDCC2 0x88BD +0x8FDCC3 0x88BE +0x8FDCC4 0x88C0 +0x8FDCC5 0x88CA +0x8FDCC6 0x88CB +0x8FDCC7 0x88CC +0x8FDCC8 0x88CD +0x8FDCC9 0x88CE +0x8FDCCA 0x88D1 +0x8FDCCB 0x88D2 +0x8FDCCC 0x88D3 +0x8FDCCD 0x88DB +0x8FDCCE 0x88DE +0x8FDCCF 0x88E7 +0x8FDCD0 0x88EF +0x8FDCD1 0x88F0 +0x8FDCD2 0x88F1 +0x8FDCD3 0x88F5 +0x8FDCD4 0x88F7 +0x8FDCD5 0x8901 +0x8FDCD6 0x8906 +0x8FDCD7 0x890D +0x8FDCD8 0x890E +0x8FDCD9 0x890F +0x8FDCDA 0x8915 +0x8FDCDB 0x8916 +0x8FDCDC 0x8918 +0x8FDCDD 0x8919 +0x8FDCDE 0x891A +0x8FDCDF 0x891C +0x8FDCE0 0x8920 +0x8FDCE1 0x8926 +0x8FDCE2 0x8927 +0x8FDCE3 0x8928 +0x8FDCE4 0x8930 +0x8FDCE5 0x8931 +0x8FDCE6 0x8932 +0x8FDCE7 0x8935 +0x8FDCE8 0x8939 +0x8FDCE9 0x893A +0x8FDCEA 0x893E +0x8FDCEB 0x8940 +0x8FDCEC 0x8942 +0x8FDCED 0x8945 +0x8FDCEE 0x8946 +0x8FDCEF 0x8949 +0x8FDCF0 0x894F +0x8FDCF1 0x8952 +0x8FDCF2 0x8957 +0x8FDCF3 0x895A +0x8FDCF4 0x895B +0x8FDCF5 0x895C +0x8FDCF6 0x8961 +0x8FDCF7 0x8962 +0x8FDCF8 0x8963 +0x8FDCF9 0x896B +0x8FDCFA 0x896E +0x8FDCFB 0x8970 +0x8FDCFC 0x8973 +0x8FDCFD 0x8975 +0x8FDCFE 0x897A +0x8FDDA1 0x897B +0x8FDDA2 0x897C +0x8FDDA3 0x897D +0x8FDDA4 0x8989 +0x8FDDA5 0x898D +0x8FDDA6 0x8990 +0x8FDDA7 0x8994 +0x8FDDA8 0x8995 +0x8FDDA9 0x899B +0x8FDDAA 0x899C +0x8FDDAB 0x899F +0x8FDDAC 0x89A0 +0x8FDDAD 0x89A5 +0x8FDDAE 0x89B0 +0x8FDDAF 0x89B4 +0x8FDDB0 0x89B5 +0x8FDDB1 0x89B6 +0x8FDDB2 0x89B7 +0x8FDDB3 0x89BC +0x8FDDB4 0x89D4 +0x8FDDB5 0x89D5 +0x8FDDB6 0x89D6 +0x8FDDB7 0x89D7 +0x8FDDB8 0x89D8 +0x8FDDB9 0x89E5 +0x8FDDBA 0x89E9 +0x8FDDBB 0x89EB +0x8FDDBC 0x89ED +0x8FDDBD 0x89F1 +0x8FDDBE 0x89F3 +0x8FDDBF 0x89F6 +0x8FDDC0 0x89F9 +0x8FDDC1 0x89FD +0x8FDDC2 0x89FF +0x8FDDC3 0x8A04 +0x8FDDC4 0x8A05 +0x8FDDC5 0x8A07 +0x8FDDC6 0x8A0F +0x8FDDC7 0x8A11 +0x8FDDC8 0x8A12 +0x8FDDC9 0x8A14 +0x8FDDCA 0x8A15 +0x8FDDCB 0x8A1E +0x8FDDCC 0x8A20 +0x8FDDCD 0x8A22 +0x8FDDCE 0x8A24 +0x8FDDCF 0x8A26 +0x8FDDD0 0x8A2B +0x8FDDD1 0x8A2C +0x8FDDD2 0x8A2F +0x8FDDD3 0x8A35 +0x8FDDD4 0x8A37 +0x8FDDD5 0x8A3D +0x8FDDD6 0x8A3E +0x8FDDD7 0x8A40 +0x8FDDD8 0x8A43 +0x8FDDD9 0x8A45 +0x8FDDDA 0x8A47 +0x8FDDDB 0x8A49 +0x8FDDDC 0x8A4D +0x8FDDDD 0x8A4E +0x8FDDDE 0x8A53 +0x8FDDDF 0x8A56 +0x8FDDE0 0x8A57 +0x8FDDE1 0x8A58 +0x8FDDE2 0x8A5C +0x8FDDE3 0x8A5D +0x8FDDE4 0x8A61 +0x8FDDE5 0x8A65 +0x8FDDE6 0x8A67 +0x8FDDE7 0x8A75 +0x8FDDE8 0x8A76 +0x8FDDE9 0x8A77 +0x8FDDEA 0x8A79 +0x8FDDEB 0x8A7A +0x8FDDEC 0x8A7B +0x8FDDED 0x8A7E +0x8FDDEE 0x8A7F +0x8FDDEF 0x8A80 +0x8FDDF0 0x8A83 +0x8FDDF1 0x8A86 +0x8FDDF2 0x8A8B +0x8FDDF3 0x8A8F +0x8FDDF4 0x8A90 +0x8FDDF5 0x8A92 +0x8FDDF6 0x8A96 +0x8FDDF7 0x8A97 +0x8FDDF8 0x8A99 +0x8FDDF9 0x8A9F +0x8FDDFA 0x8AA7 +0x8FDDFB 0x8AA9 +0x8FDDFC 0x8AAE +0x8FDDFD 0x8AAF +0x8FDDFE 0x8AB3 +0x8FDEA1 0x8AB6 +0x8FDEA2 0x8AB7 +0x8FDEA3 0x8ABB +0x8FDEA4 0x8ABE +0x8FDEA5 0x8AC3 +0x8FDEA6 0x8AC6 +0x8FDEA7 0x8AC8 +0x8FDEA8 0x8AC9 +0x8FDEA9 0x8ACA +0x8FDEAA 0x8AD1 +0x8FDEAB 0x8AD3 +0x8FDEAC 0x8AD4 +0x8FDEAD 0x8AD5 +0x8FDEAE 0x8AD7 +0x8FDEAF 0x8ADD +0x8FDEB0 0x8ADF +0x8FDEB1 0x8AEC +0x8FDEB2 0x8AF0 +0x8FDEB3 0x8AF4 +0x8FDEB4 0x8AF5 +0x8FDEB5 0x8AF6 +0x8FDEB6 0x8AFC +0x8FDEB7 0x8AFF +0x8FDEB8 0x8B05 +0x8FDEB9 0x8B06 +0x8FDEBA 0x8B0B +0x8FDEBB 0x8B11 +0x8FDEBC 0x8B1C +0x8FDEBD 0x8B1E +0x8FDEBE 0x8B1F +0x8FDEBF 0x8B0A +0x8FDEC0 0x8B2D +0x8FDEC1 0x8B30 +0x8FDEC2 0x8B37 +0x8FDEC3 0x8B3C +0x8FDEC4 0x8B42 +0x8FDEC5 0x8B43 +0x8FDEC6 0x8B44 +0x8FDEC7 0x8B45 +0x8FDEC8 0x8B46 +0x8FDEC9 0x8B48 +0x8FDECA 0x8B52 +0x8FDECB 0x8B53 +0x8FDECC 0x8B54 +0x8FDECD 0x8B59 +0x8FDECE 0x8B4D +0x8FDECF 0x8B5E +0x8FDED0 0x8B63 +0x8FDED1 0x8B6D +0x8FDED2 0x8B76 +0x8FDED3 0x8B78 +0x8FDED4 0x8B79 +0x8FDED5 0x8B7C +0x8FDED6 0x8B7E +0x8FDED7 0x8B81 +0x8FDED8 0x8B84 +0x8FDED9 0x8B85 +0x8FDEDA 0x8B8B +0x8FDEDB 0x8B8D +0x8FDEDC 0x8B8F +0x8FDEDD 0x8B94 +0x8FDEDE 0x8B95 +0x8FDEDF 0x8B9C +0x8FDEE0 0x8B9E +0x8FDEE1 0x8B9F +0x8FDEE2 0x8C38 +0x8FDEE3 0x8C39 +0x8FDEE4 0x8C3D +0x8FDEE5 0x8C3E +0x8FDEE6 0x8C45 +0x8FDEE7 0x8C47 +0x8FDEE8 0x8C49 +0x8FDEE9 0x8C4B +0x8FDEEA 0x8C4F +0x8FDEEB 0x8C51 +0x8FDEEC 0x8C53 +0x8FDEED 0x8C54 +0x8FDEEE 0x8C57 +0x8FDEEF 0x8C58 +0x8FDEF0 0x8C5B +0x8FDEF1 0x8C5D +0x8FDEF2 0x8C59 +0x8FDEF3 0x8C63 +0x8FDEF4 0x8C64 +0x8FDEF5 0x8C66 +0x8FDEF6 0x8C68 +0x8FDEF7 0x8C69 +0x8FDEF8 0x8C6D +0x8FDEF9 0x8C73 +0x8FDEFA 0x8C75 +0x8FDEFB 0x8C76 +0x8FDEFC 0x8C7B +0x8FDEFD 0x8C7E +0x8FDEFE 0x8C86 +0x8FDFA1 0x8C87 +0x8FDFA2 0x8C8B +0x8FDFA3 0x8C90 +0x8FDFA4 0x8C92 +0x8FDFA5 0x8C93 +0x8FDFA6 0x8C99 +0x8FDFA7 0x8C9B +0x8FDFA8 0x8C9C +0x8FDFA9 0x8CA4 +0x8FDFAA 0x8CB9 +0x8FDFAB 0x8CBA +0x8FDFAC 0x8CC5 +0x8FDFAD 0x8CC6 +0x8FDFAE 0x8CC9 +0x8FDFAF 0x8CCB +0x8FDFB0 0x8CCF +0x8FDFB1 0x8CD6 +0x8FDFB2 0x8CD5 +0x8FDFB3 0x8CD9 +0x8FDFB4 0x8CDD +0x8FDFB5 0x8CE1 +0x8FDFB6 0x8CE8 +0x8FDFB7 0x8CEC +0x8FDFB8 0x8CEF +0x8FDFB9 0x8CF0 +0x8FDFBA 0x8CF2 +0x8FDFBB 0x8CF5 +0x8FDFBC 0x8CF7 +0x8FDFBD 0x8CF8 +0x8FDFBE 0x8CFE +0x8FDFBF 0x8CFF +0x8FDFC0 0x8D01 +0x8FDFC1 0x8D03 +0x8FDFC2 0x8D09 +0x8FDFC3 0x8D12 +0x8FDFC4 0x8D17 +0x8FDFC5 0x8D1B +0x8FDFC6 0x8D65 +0x8FDFC7 0x8D69 +0x8FDFC8 0x8D6C +0x8FDFC9 0x8D6E +0x8FDFCA 0x8D7F +0x8FDFCB 0x8D82 +0x8FDFCC 0x8D84 +0x8FDFCD 0x8D88 +0x8FDFCE 0x8D8D +0x8FDFCF 0x8D90 +0x8FDFD0 0x8D91 +0x8FDFD1 0x8D95 +0x8FDFD2 0x8D9E +0x8FDFD3 0x8D9F +0x8FDFD4 0x8DA0 +0x8FDFD5 0x8DA6 +0x8FDFD6 0x8DAB +0x8FDFD7 0x8DAC +0x8FDFD8 0x8DAF +0x8FDFD9 0x8DB2 +0x8FDFDA 0x8DB5 +0x8FDFDB 0x8DB7 +0x8FDFDC 0x8DB9 +0x8FDFDD 0x8DBB +0x8FDFDE 0x8DC0 +0x8FDFDF 0x8DC5 +0x8FDFE0 0x8DC6 +0x8FDFE1 0x8DC7 +0x8FDFE2 0x8DC8 +0x8FDFE3 0x8DCA +0x8FDFE4 0x8DCE +0x8FDFE5 0x8DD1 +0x8FDFE6 0x8DD4 +0x8FDFE7 0x8DD5 +0x8FDFE8 0x8DD7 +0x8FDFE9 0x8DD9 +0x8FDFEA 0x8DE4 +0x8FDFEB 0x8DE5 +0x8FDFEC 0x8DE7 +0x8FDFED 0x8DEC +0x8FDFEE 0x8DF0 +0x8FDFEF 0x8DBC +0x8FDFF0 0x8DF1 +0x8FDFF1 0x8DF2 +0x8FDFF2 0x8DF4 +0x8FDFF3 0x8DFD +0x8FDFF4 0x8E01 +0x8FDFF5 0x8E04 +0x8FDFF6 0x8E05 +0x8FDFF7 0x8E06 +0x8FDFF8 0x8E0B +0x8FDFF9 0x8E11 +0x8FDFFA 0x8E14 +0x8FDFFB 0x8E16 +0x8FDFFC 0x8E20 +0x8FDFFD 0x8E21 +0x8FDFFE 0x8E22 +0x8FE0A1 0x8E23 +0x8FE0A2 0x8E26 +0x8FE0A3 0x8E27 +0x8FE0A4 0x8E31 +0x8FE0A5 0x8E33 +0x8FE0A6 0x8E36 +0x8FE0A7 0x8E37 +0x8FE0A8 0x8E38 +0x8FE0A9 0x8E39 +0x8FE0AA 0x8E3D +0x8FE0AB 0x8E40 +0x8FE0AC 0x8E41 +0x8FE0AD 0x8E4B +0x8FE0AE 0x8E4D +0x8FE0AF 0x8E4E +0x8FE0B0 0x8E4F +0x8FE0B1 0x8E54 +0x8FE0B2 0x8E5B +0x8FE0B3 0x8E5C +0x8FE0B4 0x8E5D +0x8FE0B5 0x8E5E +0x8FE0B6 0x8E61 +0x8FE0B7 0x8E62 +0x8FE0B8 0x8E69 +0x8FE0B9 0x8E6C +0x8FE0BA 0x8E6D +0x8FE0BB 0x8E6F +0x8FE0BC 0x8E70 +0x8FE0BD 0x8E71 +0x8FE0BE 0x8E79 +0x8FE0BF 0x8E7A +0x8FE0C0 0x8E7B +0x8FE0C1 0x8E82 +0x8FE0C2 0x8E83 +0x8FE0C3 0x8E89 +0x8FE0C4 0x8E90 +0x8FE0C5 0x8E92 +0x8FE0C6 0x8E95 +0x8FE0C7 0x8E9A +0x8FE0C8 0x8E9B +0x8FE0C9 0x8E9D +0x8FE0CA 0x8E9E +0x8FE0CB 0x8EA2 +0x8FE0CC 0x8EA7 +0x8FE0CD 0x8EA9 +0x8FE0CE 0x8EAD +0x8FE0CF 0x8EAE +0x8FE0D0 0x8EB3 +0x8FE0D1 0x8EB5 +0x8FE0D2 0x8EBA +0x8FE0D3 0x8EBB +0x8FE0D4 0x8EC0 +0x8FE0D5 0x8EC1 +0x8FE0D6 0x8EC3 +0x8FE0D7 0x8EC4 +0x8FE0D8 0x8EC7 +0x8FE0D9 0x8ECF +0x8FE0DA 0x8ED1 +0x8FE0DB 0x8ED4 +0x8FE0DC 0x8EDC +0x8FE0DD 0x8EE8 +0x8FE0DE 0x8EEE +0x8FE0DF 0x8EF0 +0x8FE0E0 0x8EF1 +0x8FE0E1 0x8EF7 +0x8FE0E2 0x8EF9 +0x8FE0E3 0x8EFA +0x8FE0E4 0x8EED +0x8FE0E5 0x8F00 +0x8FE0E6 0x8F02 +0x8FE0E7 0x8F07 +0x8FE0E8 0x8F08 +0x8FE0E9 0x8F0F +0x8FE0EA 0x8F10 +0x8FE0EB 0x8F16 +0x8FE0EC 0x8F17 +0x8FE0ED 0x8F18 +0x8FE0EE 0x8F1E +0x8FE0EF 0x8F20 +0x8FE0F0 0x8F21 +0x8FE0F1 0x8F23 +0x8FE0F2 0x8F25 +0x8FE0F3 0x8F27 +0x8FE0F4 0x8F28 +0x8FE0F5 0x8F2C +0x8FE0F6 0x8F2D +0x8FE0F7 0x8F2E +0x8FE0F8 0x8F34 +0x8FE0F9 0x8F35 +0x8FE0FA 0x8F36 +0x8FE0FB 0x8F37 +0x8FE0FC 0x8F3A +0x8FE0FD 0x8F40 +0x8FE0FE 0x8F41 +0x8FE1A1 0x8F43 +0x8FE1A2 0x8F47 +0x8FE1A3 0x8F4F +0x8FE1A4 0x8F51 +0x8FE1A5 0x8F52 +0x8FE1A6 0x8F53 +0x8FE1A7 0x8F54 +0x8FE1A8 0x8F55 +0x8FE1A9 0x8F58 +0x8FE1AA 0x8F5D +0x8FE1AB 0x8F5E +0x8FE1AC 0x8F65 +0x8FE1AD 0x8F9D +0x8FE1AE 0x8FA0 +0x8FE1AF 0x8FA1 +0x8FE1B0 0x8FA4 +0x8FE1B1 0x8FA5 +0x8FE1B2 0x8FA6 +0x8FE1B3 0x8FB5 +0x8FE1B4 0x8FB6 +0x8FE1B5 0x8FB8 +0x8FE1B6 0x8FBE +0x8FE1B7 0x8FC0 +0x8FE1B8 0x8FC1 +0x8FE1B9 0x8FC6 +0x8FE1BA 0x8FCA +0x8FE1BB 0x8FCB +0x8FE1BC 0x8FCD +0x8FE1BD 0x8FD0 +0x8FE1BE 0x8FD2 +0x8FE1BF 0x8FD3 +0x8FE1C0 0x8FD5 +0x8FE1C1 0x8FE0 +0x8FE1C2 0x8FE3 +0x8FE1C3 0x8FE4 +0x8FE1C4 0x8FE8 +0x8FE1C5 0x8FEE +0x8FE1C6 0x8FF1 +0x8FE1C7 0x8FF5 +0x8FE1C8 0x8FF6 +0x8FE1C9 0x8FFB +0x8FE1CA 0x8FFE +0x8FE1CB 0x9002 +0x8FE1CC 0x9004 +0x8FE1CD 0x9008 +0x8FE1CE 0x900C +0x8FE1CF 0x9018 +0x8FE1D0 0x901B +0x8FE1D1 0x9028 +0x8FE1D2 0x9029 +0x8FE1D3 0x902F +0x8FE1D4 0x902A +0x8FE1D5 0x902C +0x8FE1D6 0x902D +0x8FE1D7 0x9033 +0x8FE1D8 0x9034 +0x8FE1D9 0x9037 +0x8FE1DA 0x903F +0x8FE1DB 0x9043 +0x8FE1DC 0x9044 +0x8FE1DD 0x904C +0x8FE1DE 0x905B +0x8FE1DF 0x905D +0x8FE1E0 0x9062 +0x8FE1E1 0x9066 +0x8FE1E2 0x9067 +0x8FE1E3 0x906C +0x8FE1E4 0x9070 +0x8FE1E5 0x9074 +0x8FE1E6 0x9079 +0x8FE1E7 0x9085 +0x8FE1E8 0x9088 +0x8FE1E9 0x908B +0x8FE1EA 0x908C +0x8FE1EB 0x908E +0x8FE1EC 0x9090 +0x8FE1ED 0x9095 +0x8FE1EE 0x9097 +0x8FE1EF 0x9098 +0x8FE1F0 0x9099 +0x8FE1F1 0x909B +0x8FE1F2 0x90A0 +0x8FE1F3 0x90A1 +0x8FE1F4 0x90A2 +0x8FE1F5 0x90A5 +0x8FE1F6 0x90B0 +0x8FE1F7 0x90B2 +0x8FE1F8 0x90B3 +0x8FE1F9 0x90B4 +0x8FE1FA 0x90B6 +0x8FE1FB 0x90BD +0x8FE1FC 0x90CC +0x8FE1FD 0x90BE +0x8FE1FE 0x90C3 +0x8FE2A1 0x90C4 +0x8FE2A2 0x90C5 +0x8FE2A3 0x90C7 +0x8FE2A4 0x90C8 +0x8FE2A5 0x90D5 +0x8FE2A6 0x90D7 +0x8FE2A7 0x90D8 +0x8FE2A8 0x90D9 +0x8FE2A9 0x90DC +0x8FE2AA 0x90DD +0x8FE2AB 0x90DF +0x8FE2AC 0x90E5 +0x8FE2AD 0x90D2 +0x8FE2AE 0x90F6 +0x8FE2AF 0x90EB +0x8FE2B0 0x90EF +0x8FE2B1 0x90F0 +0x8FE2B2 0x90F4 +0x8FE2B3 0x90FE +0x8FE2B4 0x90FF +0x8FE2B5 0x9100 +0x8FE2B6 0x9104 +0x8FE2B7 0x9105 +0x8FE2B8 0x9106 +0x8FE2B9 0x9108 +0x8FE2BA 0x910D +0x8FE2BB 0x9110 +0x8FE2BC 0x9114 +0x8FE2BD 0x9116 +0x8FE2BE 0x9117 +0x8FE2BF 0x9118 +0x8FE2C0 0x911A +0x8FE2C1 0x911C +0x8FE2C2 0x911E +0x8FE2C3 0x9120 +0x8FE2C4 0x9125 +0x8FE2C5 0x9122 +0x8FE2C6 0x9123 +0x8FE2C7 0x9127 +0x8FE2C8 0x9129 +0x8FE2C9 0x912E +0x8FE2CA 0x912F +0x8FE2CB 0x9131 +0x8FE2CC 0x9134 +0x8FE2CD 0x9136 +0x8FE2CE 0x9137 +0x8FE2CF 0x9139 +0x8FE2D0 0x913A +0x8FE2D1 0x913C +0x8FE2D2 0x913D +0x8FE2D3 0x9143 +0x8FE2D4 0x9147 +0x8FE2D5 0x9148 +0x8FE2D6 0x914F +0x8FE2D7 0x9153 +0x8FE2D8 0x9157 +0x8FE2D9 0x9159 +0x8FE2DA 0x915A +0x8FE2DB 0x915B +0x8FE2DC 0x9161 +0x8FE2DD 0x9164 +0x8FE2DE 0x9167 +0x8FE2DF 0x916D +0x8FE2E0 0x9174 +0x8FE2E1 0x9179 +0x8FE2E2 0x917A +0x8FE2E3 0x917B +0x8FE2E4 0x9181 +0x8FE2E5 0x9183 +0x8FE2E6 0x9185 +0x8FE2E7 0x9186 +0x8FE2E8 0x918A +0x8FE2E9 0x918E +0x8FE2EA 0x9191 +0x8FE2EB 0x9193 +0x8FE2EC 0x9194 +0x8FE2ED 0x9195 +0x8FE2EE 0x9198 +0x8FE2EF 0x919E +0x8FE2F0 0x91A1 +0x8FE2F1 0x91A6 +0x8FE2F2 0x91A8 +0x8FE2F3 0x91AC +0x8FE2F4 0x91AD +0x8FE2F5 0x91AE +0x8FE2F6 0x91B0 +0x8FE2F7 0x91B1 +0x8FE2F8 0x91B2 +0x8FE2F9 0x91B3 +0x8FE2FA 0x91B6 +0x8FE2FB 0x91BB +0x8FE2FC 0x91BC +0x8FE2FD 0x91BD +0x8FE2FE 0x91BF +0x8FE3A1 0x91C2 +0x8FE3A2 0x91C3 +0x8FE3A3 0x91C5 +0x8FE3A4 0x91D3 +0x8FE3A5 0x91D4 +0x8FE3A6 0x91D7 +0x8FE3A7 0x91D9 +0x8FE3A8 0x91DA +0x8FE3A9 0x91DE +0x8FE3AA 0x91E4 +0x8FE3AB 0x91E5 +0x8FE3AC 0x91E9 +0x8FE3AD 0x91EA +0x8FE3AE 0x91EC +0x8FE3AF 0x91ED +0x8FE3B0 0x91EE +0x8FE3B1 0x91EF +0x8FE3B2 0x91F0 +0x8FE3B3 0x91F1 +0x8FE3B4 0x91F7 +0x8FE3B5 0x91F9 +0x8FE3B6 0x91FB +0x8FE3B7 0x91FD +0x8FE3B8 0x9200 +0x8FE3B9 0x9201 +0x8FE3BA 0x9204 +0x8FE3BB 0x9205 +0x8FE3BC 0x9206 +0x8FE3BD 0x9207 +0x8FE3BE 0x9209 +0x8FE3BF 0x920A +0x8FE3C0 0x920C +0x8FE3C1 0x9210 +0x8FE3C2 0x9212 +0x8FE3C3 0x9213 +0x8FE3C4 0x9216 +0x8FE3C5 0x9218 +0x8FE3C6 0x921C +0x8FE3C7 0x921D +0x8FE3C8 0x9223 +0x8FE3C9 0x9224 +0x8FE3CA 0x9225 +0x8FE3CB 0x9226 +0x8FE3CC 0x9228 +0x8FE3CD 0x922E +0x8FE3CE 0x922F +0x8FE3CF 0x9230 +0x8FE3D0 0x9233 +0x8FE3D1 0x9235 +0x8FE3D2 0x9236 +0x8FE3D3 0x9238 +0x8FE3D4 0x9239 +0x8FE3D5 0x923A +0x8FE3D6 0x923C +0x8FE3D7 0x923E +0x8FE3D8 0x9240 +0x8FE3D9 0x9242 +0x8FE3DA 0x9243 +0x8FE3DB 0x9246 +0x8FE3DC 0x9247 +0x8FE3DD 0x924A +0x8FE3DE 0x924D +0x8FE3DF 0x924E +0x8FE3E0 0x924F +0x8FE3E1 0x9251 +0x8FE3E2 0x9258 +0x8FE3E3 0x9259 +0x8FE3E4 0x925C +0x8FE3E5 0x925D +0x8FE3E6 0x9260 +0x8FE3E7 0x9261 +0x8FE3E8 0x9265 +0x8FE3E9 0x9267 +0x8FE3EA 0x9268 +0x8FE3EB 0x9269 +0x8FE3EC 0x926E +0x8FE3ED 0x926F +0x8FE3EE 0x9270 +0x8FE3EF 0x9275 +0x8FE3F0 0x9276 +0x8FE3F1 0x9277 +0x8FE3F2 0x9278 +0x8FE3F3 0x9279 +0x8FE3F4 0x927B +0x8FE3F5 0x927C +0x8FE3F6 0x927D +0x8FE3F7 0x927F +0x8FE3F8 0x9288 +0x8FE3F9 0x9289 +0x8FE3FA 0x928A +0x8FE3FB 0x928D +0x8FE3FC 0x928E +0x8FE3FD 0x9292 +0x8FE3FE 0x9297 +0x8FE4A1 0x9299 +0x8FE4A2 0x929F +0x8FE4A3 0x92A0 +0x8FE4A4 0x92A4 +0x8FE4A5 0x92A5 +0x8FE4A6 0x92A7 +0x8FE4A7 0x92A8 +0x8FE4A8 0x92AB +0x8FE4A9 0x92AF +0x8FE4AA 0x92B2 +0x8FE4AB 0x92B6 +0x8FE4AC 0x92B8 +0x8FE4AD 0x92BA +0x8FE4AE 0x92BB +0x8FE4AF 0x92BC +0x8FE4B0 0x92BD +0x8FE4B1 0x92BF +0x8FE4B2 0x92C0 +0x8FE4B3 0x92C1 +0x8FE4B4 0x92C2 +0x8FE4B5 0x92C3 +0x8FE4B6 0x92C5 +0x8FE4B7 0x92C6 +0x8FE4B8 0x92C7 +0x8FE4B9 0x92C8 +0x8FE4BA 0x92CB +0x8FE4BB 0x92CC +0x8FE4BC 0x92CD +0x8FE4BD 0x92CE +0x8FE4BE 0x92D0 +0x8FE4BF 0x92D3 +0x8FE4C0 0x92D5 +0x8FE4C1 0x92D7 +0x8FE4C2 0x92D8 +0x8FE4C3 0x92D9 +0x8FE4C4 0x92DC +0x8FE4C5 0x92DD +0x8FE4C6 0x92DF +0x8FE4C7 0x92E0 +0x8FE4C8 0x92E1 +0x8FE4C9 0x92E3 +0x8FE4CA 0x92E5 +0x8FE4CB 0x92E7 +0x8FE4CC 0x92E8 +0x8FE4CD 0x92EC +0x8FE4CE 0x92EE +0x8FE4CF 0x92F0 +0x8FE4D0 0x92F9 +0x8FE4D1 0x92FB +0x8FE4D2 0x92FF +0x8FE4D3 0x9300 +0x8FE4D4 0x9302 +0x8FE4D5 0x9308 +0x8FE4D6 0x930D +0x8FE4D7 0x9311 +0x8FE4D8 0x9314 +0x8FE4D9 0x9315 +0x8FE4DA 0x931C +0x8FE4DB 0x931D +0x8FE4DC 0x931E +0x8FE4DD 0x931F +0x8FE4DE 0x9321 +0x8FE4DF 0x9324 +0x8FE4E0 0x9325 +0x8FE4E1 0x9327 +0x8FE4E2 0x9329 +0x8FE4E3 0x932A +0x8FE4E4 0x9333 +0x8FE4E5 0x9334 +0x8FE4E6 0x9336 +0x8FE4E7 0x9337 +0x8FE4E8 0x9347 +0x8FE4E9 0x9348 +0x8FE4EA 0x9349 +0x8FE4EB 0x9350 +0x8FE4EC 0x9351 +0x8FE4ED 0x9352 +0x8FE4EE 0x9355 +0x8FE4EF 0x9357 +0x8FE4F0 0x9358 +0x8FE4F1 0x935A +0x8FE4F2 0x935E +0x8FE4F3 0x9364 +0x8FE4F4 0x9365 +0x8FE4F5 0x9367 +0x8FE4F6 0x9369 +0x8FE4F7 0x936A +0x8FE4F8 0x936D +0x8FE4F9 0x936F +0x8FE4FA 0x9370 +0x8FE4FB 0x9371 +0x8FE4FC 0x9373 +0x8FE4FD 0x9374 +0x8FE4FE 0x9376 +0x8FE5A1 0x937A +0x8FE5A2 0x937D +0x8FE5A3 0x937F +0x8FE5A4 0x9380 +0x8FE5A5 0x9381 +0x8FE5A6 0x9382 +0x8FE5A7 0x9388 +0x8FE5A8 0x938A +0x8FE5A9 0x938B +0x8FE5AA 0x938D +0x8FE5AB 0x938F +0x8FE5AC 0x9392 +0x8FE5AD 0x9395 +0x8FE5AE 0x9398 +0x8FE5AF 0x939B +0x8FE5B0 0x939E +0x8FE5B1 0x93A1 +0x8FE5B2 0x93A3 +0x8FE5B3 0x93A4 +0x8FE5B4 0x93A6 +0x8FE5B5 0x93A8 +0x8FE5B6 0x93AB +0x8FE5B7 0x93B4 +0x8FE5B8 0x93B5 +0x8FE5B9 0x93B6 +0x8FE5BA 0x93BA +0x8FE5BB 0x93A9 +0x8FE5BC 0x93C1 +0x8FE5BD 0x93C4 +0x8FE5BE 0x93C5 +0x8FE5BF 0x93C6 +0x8FE5C0 0x93C7 +0x8FE5C1 0x93C9 +0x8FE5C2 0x93CA +0x8FE5C3 0x93CB +0x8FE5C4 0x93CC +0x8FE5C5 0x93CD +0x8FE5C6 0x93D3 +0x8FE5C7 0x93D9 +0x8FE5C8 0x93DC +0x8FE5C9 0x93DE +0x8FE5CA 0x93DF +0x8FE5CB 0x93E2 +0x8FE5CC 0x93E6 +0x8FE5CD 0x93E7 +0x8FE5CE 0x93F9 +0x8FE5CF 0x93F7 +0x8FE5D0 0x93F8 +0x8FE5D1 0x93FA +0x8FE5D2 0x93FB +0x8FE5D3 0x93FD +0x8FE5D4 0x9401 +0x8FE5D5 0x9402 +0x8FE5D6 0x9404 +0x8FE5D7 0x9408 +0x8FE5D8 0x9409 +0x8FE5D9 0x940D +0x8FE5DA 0x940E +0x8FE5DB 0x940F +0x8FE5DC 0x9415 +0x8FE5DD 0x9416 +0x8FE5DE 0x9417 +0x8FE5DF 0x941F +0x8FE5E0 0x942E +0x8FE5E1 0x942F +0x8FE5E2 0x9431 +0x8FE5E3 0x9432 +0x8FE5E4 0x9433 +0x8FE5E5 0x9434 +0x8FE5E6 0x943B +0x8FE5E7 0x943F +0x8FE5E8 0x943D +0x8FE5E9 0x9443 +0x8FE5EA 0x9445 +0x8FE5EB 0x9448 +0x8FE5EC 0x944A +0x8FE5ED 0x944C +0x8FE5EE 0x9455 +0x8FE5EF 0x9459 +0x8FE5F0 0x945C +0x8FE5F1 0x945F +0x8FE5F2 0x9461 +0x8FE5F3 0x9463 +0x8FE5F4 0x9468 +0x8FE5F5 0x946B +0x8FE5F6 0x946D +0x8FE5F7 0x946E +0x8FE5F8 0x946F +0x8FE5F9 0x9471 +0x8FE5FA 0x9472 +0x8FE5FB 0x9484 +0x8FE5FC 0x9483 +0x8FE5FD 0x9578 +0x8FE5FE 0x9579 +0x8FE6A1 0x957E +0x8FE6A2 0x9584 +0x8FE6A3 0x9588 +0x8FE6A4 0x958C +0x8FE6A5 0x958D +0x8FE6A6 0x958E +0x8FE6A7 0x959D +0x8FE6A8 0x959E +0x8FE6A9 0x959F +0x8FE6AA 0x95A1 +0x8FE6AB 0x95A6 +0x8FE6AC 0x95A9 +0x8FE6AD 0x95AB +0x8FE6AE 0x95AC +0x8FE6AF 0x95B4 +0x8FE6B0 0x95B6 +0x8FE6B1 0x95BA +0x8FE6B2 0x95BD +0x8FE6B3 0x95BF +0x8FE6B4 0x95C6 +0x8FE6B5 0x95C8 +0x8FE6B6 0x95C9 +0x8FE6B7 0x95CB +0x8FE6B8 0x95D0 +0x8FE6B9 0x95D1 +0x8FE6BA 0x95D2 +0x8FE6BB 0x95D3 +0x8FE6BC 0x95D9 +0x8FE6BD 0x95DA +0x8FE6BE 0x95DD +0x8FE6BF 0x95DE +0x8FE6C0 0x95DF +0x8FE6C1 0x95E0 +0x8FE6C2 0x95E4 +0x8FE6C3 0x95E6 +0x8FE6C4 0x961D +0x8FE6C5 0x961E +0x8FE6C6 0x9622 +0x8FE6C7 0x9624 +0x8FE6C8 0x9625 +0x8FE6C9 0x9626 +0x8FE6CA 0x962C +0x8FE6CB 0x9631 +0x8FE6CC 0x9633 +0x8FE6CD 0x9637 +0x8FE6CE 0x9638 +0x8FE6CF 0x9639 +0x8FE6D0 0x963A +0x8FE6D1 0x963C +0x8FE6D2 0x963D +0x8FE6D3 0x9641 +0x8FE6D4 0x9652 +0x8FE6D5 0x9654 +0x8FE6D6 0x9656 +0x8FE6D7 0x9657 +0x8FE6D8 0x9658 +0x8FE6D9 0x9661 +0x8FE6DA 0x966E +0x8FE6DB 0x9674 +0x8FE6DC 0x967B +0x8FE6DD 0x967C +0x8FE6DE 0x967E +0x8FE6DF 0x967F +0x8FE6E0 0x9681 +0x8FE6E1 0x9682 +0x8FE6E2 0x9683 +0x8FE6E3 0x9684 +0x8FE6E4 0x9689 +0x8FE6E5 0x9691 +0x8FE6E6 0x9696 +0x8FE6E7 0x969A +0x8FE6E8 0x969D +0x8FE6E9 0x969F +0x8FE6EA 0x96A4 +0x8FE6EB 0x96A5 +0x8FE6EC 0x96A6 +0x8FE6ED 0x96A9 +0x8FE6EE 0x96AE +0x8FE6EF 0x96AF +0x8FE6F0 0x96B3 +0x8FE6F1 0x96BA +0x8FE6F2 0x96CA +0x8FE6F3 0x96D2 +0x8FE6F4 0x5DB2 +0x8FE6F5 0x96D8 +0x8FE6F6 0x96DA +0x8FE6F7 0x96DD +0x8FE6F8 0x96DE +0x8FE6F9 0x96DF +0x8FE6FA 0x96E9 +0x8FE6FB 0x96EF +0x8FE6FC 0x96F1 +0x8FE6FD 0x96FA +0x8FE6FE 0x9702 +0x8FE7A1 0x9703 +0x8FE7A2 0x9705 +0x8FE7A3 0x9709 +0x8FE7A4 0x971A +0x8FE7A5 0x971B +0x8FE7A6 0x971D +0x8FE7A7 0x9721 +0x8FE7A8 0x9722 +0x8FE7A9 0x9723 +0x8FE7AA 0x9728 +0x8FE7AB 0x9731 +0x8FE7AC 0x9733 +0x8FE7AD 0x9741 +0x8FE7AE 0x9743 +0x8FE7AF 0x974A +0x8FE7B0 0x974E +0x8FE7B1 0x974F +0x8FE7B2 0x9755 +0x8FE7B3 0x9757 +0x8FE7B4 0x9758 +0x8FE7B5 0x975A +0x8FE7B6 0x975B +0x8FE7B7 0x9763 +0x8FE7B8 0x9767 +0x8FE7B9 0x976A +0x8FE7BA 0x976E +0x8FE7BB 0x9773 +0x8FE7BC 0x9776 +0x8FE7BD 0x9777 +0x8FE7BE 0x9778 +0x8FE7BF 0x977B +0x8FE7C0 0x977D +0x8FE7C1 0x977F +0x8FE7C2 0x9780 +0x8FE7C3 0x9789 +0x8FE7C4 0x9795 +0x8FE7C5 0x9796 +0x8FE7C6 0x9797 +0x8FE7C7 0x9799 +0x8FE7C8 0x979A +0x8FE7C9 0x979E +0x8FE7CA 0x979F +0x8FE7CB 0x97A2 +0x8FE7CC 0x97AC +0x8FE7CD 0x97AE +0x8FE7CE 0x97B1 +0x8FE7CF 0x97B2 +0x8FE7D0 0x97B5 +0x8FE7D1 0x97B6 +0x8FE7D2 0x97B8 +0x8FE7D3 0x97B9 +0x8FE7D4 0x97BA +0x8FE7D5 0x97BC +0x8FE7D6 0x97BE +0x8FE7D7 0x97BF +0x8FE7D8 0x97C1 +0x8FE7D9 0x97C4 +0x8FE7DA 0x97C5 +0x8FE7DB 0x97C7 +0x8FE7DC 0x97C9 +0x8FE7DD 0x97CA +0x8FE7DE 0x97CC +0x8FE7DF 0x97CD +0x8FE7E0 0x97CE +0x8FE7E1 0x97D0 +0x8FE7E2 0x97D1 +0x8FE7E3 0x97D4 +0x8FE7E4 0x97D7 +0x8FE7E5 0x97D8 +0x8FE7E6 0x97D9 +0x8FE7E7 0x97DD +0x8FE7E8 0x97DE +0x8FE7E9 0x97E0 +0x8FE7EA 0x97DB +0x8FE7EB 0x97E1 +0x8FE7EC 0x97E4 +0x8FE7ED 0x97EF +0x8FE7EE 0x97F1 +0x8FE7EF 0x97F4 +0x8FE7F0 0x97F7 +0x8FE7F1 0x97F8 +0x8FE7F2 0x97FA +0x8FE7F3 0x9807 +0x8FE7F4 0x980A +0x8FE7F5 0x9819 +0x8FE7F6 0x980D +0x8FE7F7 0x980E +0x8FE7F8 0x9814 +0x8FE7F9 0x9816 +0x8FE7FA 0x981C +0x8FE7FB 0x981E +0x8FE7FC 0x9820 +0x8FE7FD 0x9823 +0x8FE7FE 0x9826 +0x8FE8A1 0x982B +0x8FE8A2 0x982E +0x8FE8A3 0x982F +0x8FE8A4 0x9830 +0x8FE8A5 0x9832 +0x8FE8A6 0x9833 +0x8FE8A7 0x9835 +0x8FE8A8 0x9825 +0x8FE8A9 0x983E +0x8FE8AA 0x9844 +0x8FE8AB 0x9847 +0x8FE8AC 0x984A +0x8FE8AD 0x9851 +0x8FE8AE 0x9852 +0x8FE8AF 0x9853 +0x8FE8B0 0x9856 +0x8FE8B1 0x9857 +0x8FE8B2 0x9859 +0x8FE8B3 0x985A +0x8FE8B4 0x9862 +0x8FE8B5 0x9863 +0x8FE8B6 0x9865 +0x8FE8B7 0x9866 +0x8FE8B8 0x986A +0x8FE8B9 0x986C +0x8FE8BA 0x98AB +0x8FE8BB 0x98AD +0x8FE8BC 0x98AE +0x8FE8BD 0x98B0 +0x8FE8BE 0x98B4 +0x8FE8BF 0x98B7 +0x8FE8C0 0x98B8 +0x8FE8C1 0x98BA +0x8FE8C2 0x98BB +0x8FE8C3 0x98BF +0x8FE8C4 0x98C2 +0x8FE8C5 0x98C5 +0x8FE8C6 0x98C8 +0x8FE8C7 0x98CC +0x8FE8C8 0x98E1 +0x8FE8C9 0x98E3 +0x8FE8CA 0x98E5 +0x8FE8CB 0x98E6 +0x8FE8CC 0x98E7 +0x8FE8CD 0x98EA +0x8FE8CE 0x98F3 +0x8FE8CF 0x98F6 +0x8FE8D0 0x9902 +0x8FE8D1 0x9907 +0x8FE8D2 0x9908 +0x8FE8D3 0x9911 +0x8FE8D4 0x9915 +0x8FE8D5 0x9916 +0x8FE8D6 0x9917 +0x8FE8D7 0x991A +0x8FE8D8 0x991B +0x8FE8D9 0x991C +0x8FE8DA 0x991F +0x8FE8DB 0x9922 +0x8FE8DC 0x9926 +0x8FE8DD 0x9927 +0x8FE8DE 0x992B +0x8FE8DF 0x9931 +0x8FE8E0 0x9932 +0x8FE8E1 0x9933 +0x8FE8E2 0x9934 +0x8FE8E3 0x9935 +0x8FE8E4 0x9939 +0x8FE8E5 0x993A +0x8FE8E6 0x993B +0x8FE8E7 0x993C +0x8FE8E8 0x9940 +0x8FE8E9 0x9941 +0x8FE8EA 0x9946 +0x8FE8EB 0x9947 +0x8FE8EC 0x9948 +0x8FE8ED 0x994D +0x8FE8EE 0x994E +0x8FE8EF 0x9954 +0x8FE8F0 0x9958 +0x8FE8F1 0x9959 +0x8FE8F2 0x995B +0x8FE8F3 0x995C +0x8FE8F4 0x995E +0x8FE8F5 0x995F +0x8FE8F6 0x9960 +0x8FE8F7 0x999B +0x8FE8F8 0x999D +0x8FE8F9 0x999F +0x8FE8FA 0x99A6 +0x8FE8FB 0x99B0 +0x8FE8FC 0x99B1 +0x8FE8FD 0x99B2 +0x8FE8FE 0x99B5 +0x8FE9A1 0x99B9 +0x8FE9A2 0x99BA +0x8FE9A3 0x99BD +0x8FE9A4 0x99BF +0x8FE9A5 0x99C3 +0x8FE9A6 0x99C9 +0x8FE9A7 0x99D3 +0x8FE9A8 0x99D4 +0x8FE9A9 0x99D9 +0x8FE9AA 0x99DA +0x8FE9AB 0x99DC +0x8FE9AC 0x99DE +0x8FE9AD 0x99E7 +0x8FE9AE 0x99EA +0x8FE9AF 0x99EB +0x8FE9B0 0x99EC +0x8FE9B1 0x99F0 +0x8FE9B2 0x99F4 +0x8FE9B3 0x99F5 +0x8FE9B4 0x99F9 +0x8FE9B5 0x99FD +0x8FE9B6 0x99FE +0x8FE9B7 0x9A02 +0x8FE9B8 0x9A03 +0x8FE9B9 0x9A04 +0x8FE9BA 0x9A0B +0x8FE9BB 0x9A0C +0x8FE9BC 0x9A10 +0x8FE9BD 0x9A11 +0x8FE9BE 0x9A16 +0x8FE9BF 0x9A1E +0x8FE9C0 0x9A20 +0x8FE9C1 0x9A22 +0x8FE9C2 0x9A23 +0x8FE9C3 0x9A24 +0x8FE9C4 0x9A27 +0x8FE9C5 0x9A2D +0x8FE9C6 0x9A2E +0x8FE9C7 0x9A33 +0x8FE9C8 0x9A35 +0x8FE9C9 0x9A36 +0x8FE9CA 0x9A38 +0x8FE9CB 0x9A47 +0x8FE9CC 0x9A41 +0x8FE9CD 0x9A44 +0x8FE9CE 0x9A4A +0x8FE9CF 0x9A4B +0x8FE9D0 0x9A4C +0x8FE9D1 0x9A4E +0x8FE9D2 0x9A51 +0x8FE9D3 0x9A54 +0x8FE9D4 0x9A56 +0x8FE9D5 0x9A5D +0x8FE9D6 0x9AAA +0x8FE9D7 0x9AAC +0x8FE9D8 0x9AAE +0x8FE9D9 0x9AAF +0x8FE9DA 0x9AB2 +0x8FE9DB 0x9AB4 +0x8FE9DC 0x9AB5 +0x8FE9DD 0x9AB6 +0x8FE9DE 0x9AB9 +0x8FE9DF 0x9ABB +0x8FE9E0 0x9ABE +0x8FE9E1 0x9ABF +0x8FE9E2 0x9AC1 +0x8FE9E3 0x9AC3 +0x8FE9E4 0x9AC6 +0x8FE9E5 0x9AC8 +0x8FE9E6 0x9ACE +0x8FE9E7 0x9AD0 +0x8FE9E8 0x9AD2 +0x8FE9E9 0x9AD5 +0x8FE9EA 0x9AD6 +0x8FE9EB 0x9AD7 +0x8FE9EC 0x9ADB +0x8FE9ED 0x9ADC +0x8FE9EE 0x9AE0 +0x8FE9EF 0x9AE4 +0x8FE9F0 0x9AE5 +0x8FE9F1 0x9AE7 +0x8FE9F2 0x9AE9 +0x8FE9F3 0x9AEC +0x8FE9F4 0x9AF2 +0x8FE9F5 0x9AF3 +0x8FE9F6 0x9AF5 +0x8FE9F7 0x9AF9 +0x8FE9F8 0x9AFA +0x8FE9F9 0x9AFD +0x8FE9FA 0x9AFF +0x8FE9FB 0x9B00 +0x8FE9FC 0x9B01 +0x8FE9FD 0x9B02 +0x8FE9FE 0x9B03 +0x8FEAA1 0x9B04 +0x8FEAA2 0x9B05 +0x8FEAA3 0x9B08 +0x8FEAA4 0x9B09 +0x8FEAA5 0x9B0B +0x8FEAA6 0x9B0C +0x8FEAA7 0x9B0D +0x8FEAA8 0x9B0E +0x8FEAA9 0x9B10 +0x8FEAAA 0x9B12 +0x8FEAAB 0x9B16 +0x8FEAAC 0x9B19 +0x8FEAAD 0x9B1B +0x8FEAAE 0x9B1C +0x8FEAAF 0x9B20 +0x8FEAB0 0x9B26 +0x8FEAB1 0x9B2B +0x8FEAB2 0x9B2D +0x8FEAB3 0x9B33 +0x8FEAB4 0x9B34 +0x8FEAB5 0x9B35 +0x8FEAB6 0x9B37 +0x8FEAB7 0x9B39 +0x8FEAB8 0x9B3A +0x8FEAB9 0x9B3D +0x8FEABA 0x9B48 +0x8FEABB 0x9B4B +0x8FEABC 0x9B4C +0x8FEABD 0x9B55 +0x8FEABE 0x9B56 +0x8FEABF 0x9B57 +0x8FEAC0 0x9B5B +0x8FEAC1 0x9B5E +0x8FEAC2 0x9B61 +0x8FEAC3 0x9B63 +0x8FEAC4 0x9B65 +0x8FEAC5 0x9B66 +0x8FEAC6 0x9B68 +0x8FEAC7 0x9B6A +0x8FEAC8 0x9B6B +0x8FEAC9 0x9B6C +0x8FEACA 0x9B6D +0x8FEACB 0x9B6E +0x8FEACC 0x9B73 +0x8FEACD 0x9B75 +0x8FEACE 0x9B77 +0x8FEACF 0x9B78 +0x8FEAD0 0x9B79 +0x8FEAD1 0x9B7F +0x8FEAD2 0x9B80 +0x8FEAD3 0x9B84 +0x8FEAD4 0x9B85 +0x8FEAD5 0x9B86 +0x8FEAD6 0x9B87 +0x8FEAD7 0x9B89 +0x8FEAD8 0x9B8A +0x8FEAD9 0x9B8B +0x8FEADA 0x9B8D +0x8FEADB 0x9B8F +0x8FEADC 0x9B90 +0x8FEADD 0x9B94 +0x8FEADE 0x9B9A +0x8FEADF 0x9B9D +0x8FEAE0 0x9B9E +0x8FEAE1 0x9BA6 +0x8FEAE2 0x9BA7 +0x8FEAE3 0x9BA9 +0x8FEAE4 0x9BAC +0x8FEAE5 0x9BB0 +0x8FEAE6 0x9BB1 +0x8FEAE7 0x9BB2 +0x8FEAE8 0x9BB7 +0x8FEAE9 0x9BB8 +0x8FEAEA 0x9BBB +0x8FEAEB 0x9BBC +0x8FEAEC 0x9BBE +0x8FEAED 0x9BBF +0x8FEAEE 0x9BC1 +0x8FEAEF 0x9BC7 +0x8FEAF0 0x9BC8 +0x8FEAF1 0x9BCE +0x8FEAF2 0x9BD0 +0x8FEAF3 0x9BD7 +0x8FEAF4 0x9BD8 +0x8FEAF5 0x9BDD +0x8FEAF6 0x9BDF +0x8FEAF7 0x9BE5 +0x8FEAF8 0x9BE7 +0x8FEAF9 0x9BEA +0x8FEAFA 0x9BEB +0x8FEAFB 0x9BEF +0x8FEAFC 0x9BF3 +0x8FEAFD 0x9BF7 +0x8FEAFE 0x9BF8 +0x8FEBA1 0x9BF9 +0x8FEBA2 0x9BFA +0x8FEBA3 0x9BFD +0x8FEBA4 0x9BFF +0x8FEBA5 0x9C00 +0x8FEBA6 0x9C02 +0x8FEBA7 0x9C0B +0x8FEBA8 0x9C0F +0x8FEBA9 0x9C11 +0x8FEBAA 0x9C16 +0x8FEBAB 0x9C18 +0x8FEBAC 0x9C19 +0x8FEBAD 0x9C1A +0x8FEBAE 0x9C1C +0x8FEBAF 0x9C1E +0x8FEBB0 0x9C22 +0x8FEBB1 0x9C23 +0x8FEBB2 0x9C26 +0x8FEBB3 0x9C27 +0x8FEBB4 0x9C28 +0x8FEBB5 0x9C29 +0x8FEBB6 0x9C2A +0x8FEBB7 0x9C31 +0x8FEBB8 0x9C35 +0x8FEBB9 0x9C36 +0x8FEBBA 0x9C37 +0x8FEBBB 0x9C3D +0x8FEBBC 0x9C41 +0x8FEBBD 0x9C43 +0x8FEBBE 0x9C44 +0x8FEBBF 0x9C45 +0x8FEBC0 0x9C49 +0x8FEBC1 0x9C4A +0x8FEBC2 0x9C4E +0x8FEBC3 0x9C4F +0x8FEBC4 0x9C50 +0x8FEBC5 0x9C53 +0x8FEBC6 0x9C54 +0x8FEBC7 0x9C56 +0x8FEBC8 0x9C58 +0x8FEBC9 0x9C5B +0x8FEBCA 0x9C5D +0x8FEBCB 0x9C5E +0x8FEBCC 0x9C5F +0x8FEBCD 0x9C63 +0x8FEBCE 0x9C69 +0x8FEBCF 0x9C6A +0x8FEBD0 0x9C5C +0x8FEBD1 0x9C6B +0x8FEBD2 0x9C68 +0x8FEBD3 0x9C6E +0x8FEBD4 0x9C70 +0x8FEBD5 0x9C72 +0x8FEBD6 0x9C75 +0x8FEBD7 0x9C77 +0x8FEBD8 0x9C7B +0x8FEBD9 0x9CE6 +0x8FEBDA 0x9CF2 +0x8FEBDB 0x9CF7 +0x8FEBDC 0x9CF9 +0x8FEBDD 0x9D0B +0x8FEBDE 0x9D02 +0x8FEBDF 0x9D11 +0x8FEBE0 0x9D17 +0x8FEBE1 0x9D18 +0x8FEBE2 0x9D1C +0x8FEBE3 0x9D1D +0x8FEBE4 0x9D1E +0x8FEBE5 0x9D2F +0x8FEBE6 0x9D30 +0x8FEBE7 0x9D32 +0x8FEBE8 0x9D33 +0x8FEBE9 0x9D34 +0x8FEBEA 0x9D3A +0x8FEBEB 0x9D3C +0x8FEBEC 0x9D45 +0x8FEBED 0x9D3D +0x8FEBEE 0x9D42 +0x8FEBEF 0x9D43 +0x8FEBF0 0x9D47 +0x8FEBF1 0x9D4A +0x8FEBF2 0x9D53 +0x8FEBF3 0x9D54 +0x8FEBF4 0x9D5F +0x8FEBF5 0x9D63 +0x8FEBF6 0x9D62 +0x8FEBF7 0x9D65 +0x8FEBF8 0x9D69 +0x8FEBF9 0x9D6A +0x8FEBFA 0x9D6B +0x8FEBFB 0x9D70 +0x8FEBFC 0x9D76 +0x8FEBFD 0x9D77 +0x8FEBFE 0x9D7B +0x8FECA1 0x9D7C +0x8FECA2 0x9D7E +0x8FECA3 0x9D83 +0x8FECA4 0x9D84 +0x8FECA5 0x9D86 +0x8FECA6 0x9D8A +0x8FECA7 0x9D8D +0x8FECA8 0x9D8E +0x8FECA9 0x9D92 +0x8FECAA 0x9D93 +0x8FECAB 0x9D95 +0x8FECAC 0x9D96 +0x8FECAD 0x9D97 +0x8FECAE 0x9D98 +0x8FECAF 0x9DA1 +0x8FECB0 0x9DAA +0x8FECB1 0x9DAC +0x8FECB2 0x9DAE +0x8FECB3 0x9DB1 +0x8FECB4 0x9DB5 +0x8FECB5 0x9DB9 +0x8FECB6 0x9DBC +0x8FECB7 0x9DBF +0x8FECB8 0x9DC3 +0x8FECB9 0x9DC7 +0x8FECBA 0x9DC9 +0x8FECBB 0x9DCA +0x8FECBC 0x9DD4 +0x8FECBD 0x9DD5 +0x8FECBE 0x9DD6 +0x8FECBF 0x9DD7 +0x8FECC0 0x9DDA +0x8FECC1 0x9DDE +0x8FECC2 0x9DDF +0x8FECC3 0x9DE0 +0x8FECC4 0x9DE5 +0x8FECC5 0x9DE7 +0x8FECC6 0x9DE9 +0x8FECC7 0x9DEB +0x8FECC8 0x9DEE +0x8FECC9 0x9DF0 +0x8FECCA 0x9DF3 +0x8FECCB 0x9DF4 +0x8FECCC 0x9DFE +0x8FECCD 0x9E0A +0x8FECCE 0x9E02 +0x8FECCF 0x9E07 +0x8FECD0 0x9E0E +0x8FECD1 0x9E10 +0x8FECD2 0x9E11 +0x8FECD3 0x9E12 +0x8FECD4 0x9E15 +0x8FECD5 0x9E16 +0x8FECD6 0x9E19 +0x8FECD7 0x9E1C +0x8FECD8 0x9E1D +0x8FECD9 0x9E7A +0x8FECDA 0x9E7B +0x8FECDB 0x9E7C +0x8FECDC 0x9E80 +0x8FECDD 0x9E82 +0x8FECDE 0x9E83 +0x8FECDF 0x9E84 +0x8FECE0 0x9E85 +0x8FECE1 0x9E87 +0x8FECE2 0x9E8E +0x8FECE3 0x9E8F +0x8FECE4 0x9E96 +0x8FECE5 0x9E98 +0x8FECE6 0x9E9B +0x8FECE7 0x9E9E +0x8FECE8 0x9EA4 +0x8FECE9 0x9EA8 +0x8FECEA 0x9EAC +0x8FECEB 0x9EAE +0x8FECEC 0x9EAF +0x8FECED 0x9EB0 +0x8FECEE 0x9EB3 +0x8FECEF 0x9EB4 +0x8FECF0 0x9EB5 +0x8FECF1 0x9EC6 +0x8FECF2 0x9EC8 +0x8FECF3 0x9ECB +0x8FECF4 0x9ED5 +0x8FECF5 0x9EDF +0x8FECF6 0x9EE4 +0x8FECF7 0x9EE7 +0x8FECF8 0x9EEC +0x8FECF9 0x9EED +0x8FECFA 0x9EEE +0x8FECFB 0x9EF0 +0x8FECFC 0x9EF1 +0x8FECFD 0x9EF2 +0x8FECFE 0x9EF5 +0x8FEDA1 0x9EF8 +0x8FEDA2 0x9EFF +0x8FEDA3 0x9F02 +0x8FEDA4 0x9F03 +0x8FEDA5 0x9F09 +0x8FEDA6 0x9F0F +0x8FEDA7 0x9F10 +0x8FEDA8 0x9F11 +0x8FEDA9 0x9F12 +0x8FEDAA 0x9F14 +0x8FEDAB 0x9F16 +0x8FEDAC 0x9F17 +0x8FEDAD 0x9F19 +0x8FEDAE 0x9F1A +0x8FEDAF 0x9F1B +0x8FEDB0 0x9F1F +0x8FEDB1 0x9F22 +0x8FEDB2 0x9F26 +0x8FEDB3 0x9F2A +0x8FEDB4 0x9F2B +0x8FEDB5 0x9F2F +0x8FEDB6 0x9F31 +0x8FEDB7 0x9F32 +0x8FEDB8 0x9F34 +0x8FEDB9 0x9F37 +0x8FEDBA 0x9F39 +0x8FEDBB 0x9F3A +0x8FEDBC 0x9F3C +0x8FEDBD 0x9F3D +0x8FEDBE 0x9F3F +0x8FEDBF 0x9F41 +0x8FEDC0 0x9F43 +0x8FEDC1 0x9F44 +0x8FEDC2 0x9F45 +0x8FEDC3 0x9F46 +0x8FEDC4 0x9F47 +0x8FEDC5 0x9F53 +0x8FEDC6 0x9F55 +0x8FEDC7 0x9F56 +0x8FEDC8 0x9F57 +0x8FEDC9 0x9F58 +0x8FEDCA 0x9F5A +0x8FEDCB 0x9F5D +0x8FEDCC 0x9F5E +0x8FEDCD 0x9F68 +0x8FEDCE 0x9F69 +0x8FEDCF 0x9F6D +0x8FEDD0 0x9F6E +0x8FEDD1 0x9F6F +0x8FEDD2 0x9F70 +0x8FEDD3 0x9F71 +0x8FEDD4 0x9F73 +0x8FEDD5 0x9F75 +0x8FEDD6 0x9F7A +0x8FEDD7 0x9F7D +0x8FEDD8 0x9F8F +0x8FEDD9 0x9F90 +0x8FEDDA 0x9F91 +0x8FEDDB 0x9F92 +0x8FEDDC 0x9F94 +0x8FEDDD 0x9F96 +0x8FEDDE 0x9F97 +0x8FEDDF 0x9F9E +0x8FEDE0 0x9FA1 +0x8FEDE1 0x9FA2 +0x8FEDE2 0x9FA3 +0x8FEDE3 0x9FA5 +0xA1A1 0x3000 +0xA1A2 0x3001 +0xA1A3 0x3002 +0xA1A4 0xFF0C +0xA1A5 0xFF0E +0xA1A6 0x30FB +0xA1A7 0xFF1A +0xA1A8 0xFF1B +0xA1A9 0xFF1F +0xA1AA 0xFF01 +0xA1AB 0x309B +0xA1AC 0x309C +0xA1AD 0x00B4 +0xA1AE 0xFF40 +0xA1AF 0x00A8 +0xA1B0 0xFF3E +0xA1B1 0xFFE3 +0xA1B2 0xFF3F +0xA1B3 0x30FD +0xA1B4 0x30FE +0xA1B5 0x309D +0xA1B6 0x309E +0xA1B7 0x3003 +0xA1B8 0x4EDD +0xA1B9 0x3005 +0xA1BA 0x3006 +0xA1BB 0x3007 +0xA1BC 0x30FC +0xA1BD 0x2015 +0xA1BE 0x2010 +0xA1BF 0xFF0F +0xA1C0 0x005C +0xA1C1 0x301C +0xA1C2 0x2016 +0xA1C3 0xFF5C +0xA1C4 0x2026 +0xA1C5 0x2025 +0xA1C6 0x2018 +0xA1C7 0x2019 +0xA1C8 0x201C +0xA1C9 0x201D +0xA1CA 0xFF08 +0xA1CB 0xFF09 +0xA1CC 0x3014 +0xA1CD 0x3015 +0xA1CE 0xFF3B +0xA1CF 0xFF3D +0xA1D0 0xFF5B +0xA1D1 0xFF5D +0xA1D2 0x3008 +0xA1D3 0x3009 +0xA1D4 0x300A +0xA1D5 0x300B +0xA1D6 0x300C +0xA1D7 0x300D +0xA1D8 0x300E +0xA1D9 0x300F +0xA1DA 0x3010 +0xA1DB 0x3011 +0xA1DC 0xFF0B +0xA1DD 0x2212 +0xA1DE 0x00B1 +0xA1DF 0x00D7 +0xA1E0 0x00F7 +0xA1E1 0xFF1D +0xA1E2 0x2260 +0xA1E3 0xFF1C +0xA1E4 0xFF1E +0xA1E5 0x2266 +0xA1E6 0x2267 +0xA1E7 0x221E +0xA1E8 0x2234 +0xA1E9 0x2642 +0xA1EA 0x2640 +0xA1EB 0x00B0 +0xA1EC 0x2032 +0xA1ED 0x2033 +0xA1EE 0x2103 +0xA1EF 0xFFE5 +0xA1F0 0xFF04 +0xA1F1 0x00A2 +0xA1F2 0x00A3 +0xA1F3 0xFF05 +0xA1F4 0xFF03 +0xA1F5 0xFF06 +0xA1F6 0xFF0A +0xA1F7 0xFF20 +0xA1F8 0x00A7 +0xA1F9 0x2606 +0xA1FA 0x2605 +0xA1FB 0x25CB +0xA1FC 0x25CF +0xA1FD 0x25CE +0xA1FE 0x25C7 +0xA2A1 0x25C6 +0xA2A2 0x25A1 +0xA2A3 0x25A0 +0xA2A4 0x25B3 +0xA2A5 0x25B2 +0xA2A6 0x25BD +0xA2A7 0x25BC +0xA2A8 0x203B +0xA2A9 0x3012 +0xA2AA 0x2192 +0xA2AB 0x2190 +0xA2AC 0x2191 +0xA2AD 0x2193 +0xA2AE 0x3013 +0xA2BA 0x2208 +0xA2BB 0x220B +0xA2BC 0x2286 +0xA2BD 0x2287 +0xA2BE 0x2282 +0xA2BF 0x2283 +0xA2C0 0x222A +0xA2C1 0x2229 +0xA2CA 0x2227 +0xA2CB 0x2228 +0xA2CC 0x00AC +0xA2CD 0x21D2 +0xA2CE 0x21D4 +0xA2CF 0x2200 +0xA2D0 0x2203 +0xA2DC 0x2220 +0xA2DD 0x22A5 +0xA2DE 0x2312 +0xA2DF 0x2202 +0xA2E0 0x2207 +0xA2E1 0x2261 +0xA2E2 0x2252 +0xA2E3 0x226A +0xA2E4 0x226B +0xA2E5 0x221A +0xA2E6 0x223D +0xA2E7 0x221D +0xA2E8 0x2235 +0xA2E9 0x222B +0xA2EA 0x222C +0xA2F2 0x212B +0xA2F3 0x2030 +0xA2F4 0x266F +0xA2F5 0x266D +0xA2F6 0x266A +0xA2F7 0x2020 +0xA2F8 0x2021 +0xA2F9 0x00B6 +0xA2FE 0x25EF +0xA3B0 0xFF10 +0xA3B1 0xFF11 +0xA3B2 0xFF12 +0xA3B3 0xFF13 +0xA3B4 0xFF14 +0xA3B5 0xFF15 +0xA3B6 0xFF16 +0xA3B7 0xFF17 +0xA3B8 0xFF18 +0xA3B9 0xFF19 +0xA3C1 0xFF21 +0xA3C2 0xFF22 +0xA3C3 0xFF23 +0xA3C4 0xFF24 +0xA3C5 0xFF25 +0xA3C6 0xFF26 +0xA3C7 0xFF27 +0xA3C8 0xFF28 +0xA3C9 0xFF29 +0xA3CA 0xFF2A +0xA3CB 0xFF2B +0xA3CC 0xFF2C +0xA3CD 0xFF2D +0xA3CE 0xFF2E +0xA3CF 0xFF2F +0xA3D0 0xFF30 +0xA3D1 0xFF31 +0xA3D2 0xFF32 +0xA3D3 0xFF33 +0xA3D4 0xFF34 +0xA3D5 0xFF35 +0xA3D6 0xFF36 +0xA3D7 0xFF37 +0xA3D8 0xFF38 +0xA3D9 0xFF39 +0xA3DA 0xFF3A +0xA3E1 0xFF41 +0xA3E2 0xFF42 +0xA3E3 0xFF43 +0xA3E4 0xFF44 +0xA3E5 0xFF45 +0xA3E6 0xFF46 +0xA3E7 0xFF47 +0xA3E8 0xFF48 +0xA3E9 0xFF49 +0xA3EA 0xFF4A +0xA3EB 0xFF4B +0xA3EC 0xFF4C +0xA3ED 0xFF4D +0xA3EE 0xFF4E +0xA3EF 0xFF4F +0xA3F0 0xFF50 +0xA3F1 0xFF51 +0xA3F2 0xFF52 +0xA3F3 0xFF53 +0xA3F4 0xFF54 +0xA3F5 0xFF55 +0xA3F6 0xFF56 +0xA3F7 0xFF57 +0xA3F8 0xFF58 +0xA3F9 0xFF59 +0xA3FA 0xFF5A +0xA4A1 0x3041 +0xA4A2 0x3042 +0xA4A3 0x3043 +0xA4A4 0x3044 +0xA4A5 0x3045 +0xA4A6 0x3046 +0xA4A7 0x3047 +0xA4A8 0x3048 +0xA4A9 0x3049 +0xA4AA 0x304A +0xA4AB 0x304B +0xA4AC 0x304C +0xA4AD 0x304D +0xA4AE 0x304E +0xA4AF 0x304F +0xA4B0 0x3050 +0xA4B1 0x3051 +0xA4B2 0x3052 +0xA4B3 0x3053 +0xA4B4 0x3054 +0xA4B5 0x3055 +0xA4B6 0x3056 +0xA4B7 0x3057 +0xA4B8 0x3058 +0xA4B9 0x3059 +0xA4BA 0x305A +0xA4BB 0x305B +0xA4BC 0x305C +0xA4BD 0x305D +0xA4BE 0x305E +0xA4BF 0x305F +0xA4C0 0x3060 +0xA4C1 0x3061 +0xA4C2 0x3062 +0xA4C3 0x3063 +0xA4C4 0x3064 +0xA4C5 0x3065 +0xA4C6 0x3066 +0xA4C7 0x3067 +0xA4C8 0x3068 +0xA4C9 0x3069 +0xA4CA 0x306A +0xA4CB 0x306B +0xA4CC 0x306C +0xA4CD 0x306D +0xA4CE 0x306E +0xA4CF 0x306F +0xA4D0 0x3070 +0xA4D1 0x3071 +0xA4D2 0x3072 +0xA4D3 0x3073 +0xA4D4 0x3074 +0xA4D5 0x3075 +0xA4D6 0x3076 +0xA4D7 0x3077 +0xA4D8 0x3078 +0xA4D9 0x3079 +0xA4DA 0x307A +0xA4DB 0x307B +0xA4DC 0x307C +0xA4DD 0x307D +0xA4DE 0x307E +0xA4DF 0x307F +0xA4E0 0x3080 +0xA4E1 0x3081 +0xA4E2 0x3082 +0xA4E3 0x3083 +0xA4E4 0x3084 +0xA4E5 0x3085 +0xA4E6 0x3086 +0xA4E7 0x3087 +0xA4E8 0x3088 +0xA4E9 0x3089 +0xA4EA 0x308A +0xA4EB 0x308B +0xA4EC 0x308C +0xA4ED 0x308D +0xA4EE 0x308E +0xA4EF 0x308F +0xA4F0 0x3090 +0xA4F1 0x3091 +0xA4F2 0x3092 +0xA4F3 0x3093 +0xA5A1 0x30A1 +0xA5A2 0x30A2 +0xA5A3 0x30A3 +0xA5A4 0x30A4 +0xA5A5 0x30A5 +0xA5A6 0x30A6 +0xA5A7 0x30A7 +0xA5A8 0x30A8 +0xA5A9 0x30A9 +0xA5AA 0x30AA +0xA5AB 0x30AB +0xA5AC 0x30AC +0xA5AD 0x30AD +0xA5AE 0x30AE +0xA5AF 0x30AF +0xA5B0 0x30B0 +0xA5B1 0x30B1 +0xA5B2 0x30B2 +0xA5B3 0x30B3 +0xA5B4 0x30B4 +0xA5B5 0x30B5 +0xA5B6 0x30B6 +0xA5B7 0x30B7 +0xA5B8 0x30B8 +0xA5B9 0x30B9 +0xA5BA 0x30BA +0xA5BB 0x30BB +0xA5BC 0x30BC +0xA5BD 0x30BD +0xA5BE 0x30BE +0xA5BF 0x30BF +0xA5C0 0x30C0 +0xA5C1 0x30C1 +0xA5C2 0x30C2 +0xA5C3 0x30C3 +0xA5C4 0x30C4 +0xA5C5 0x30C5 +0xA5C6 0x30C6 +0xA5C7 0x30C7 +0xA5C8 0x30C8 +0xA5C9 0x30C9 +0xA5CA 0x30CA +0xA5CB 0x30CB +0xA5CC 0x30CC +0xA5CD 0x30CD +0xA5CE 0x30CE +0xA5CF 0x30CF +0xA5D0 0x30D0 +0xA5D1 0x30D1 +0xA5D2 0x30D2 +0xA5D3 0x30D3 +0xA5D4 0x30D4 +0xA5D5 0x30D5 +0xA5D6 0x30D6 +0xA5D7 0x30D7 +0xA5D8 0x30D8 +0xA5D9 0x30D9 +0xA5DA 0x30DA +0xA5DB 0x30DB +0xA5DC 0x30DC +0xA5DD 0x30DD +0xA5DE 0x30DE +0xA5DF 0x30DF +0xA5E0 0x30E0 +0xA5E1 0x30E1 +0xA5E2 0x30E2 +0xA5E3 0x30E3 +0xA5E4 0x30E4 +0xA5E5 0x30E5 +0xA5E6 0x30E6 +0xA5E7 0x30E7 +0xA5E8 0x30E8 +0xA5E9 0x30E9 +0xA5EA 0x30EA +0xA5EB 0x30EB +0xA5EC 0x30EC +0xA5ED 0x30ED +0xA5EE 0x30EE +0xA5EF 0x30EF +0xA5F0 0x30F0 +0xA5F1 0x30F1 +0xA5F2 0x30F2 +0xA5F3 0x30F3 +0xA5F4 0x30F4 +0xA5F5 0x30F5 +0xA5F6 0x30F6 +0xA6A1 0x0391 +0xA6A2 0x0392 +0xA6A3 0x0393 +0xA6A4 0x0394 +0xA6A5 0x0395 +0xA6A6 0x0396 +0xA6A7 0x0397 +0xA6A8 0x0398 +0xA6A9 0x0399 +0xA6AA 0x039A +0xA6AB 0x039B +0xA6AC 0x039C +0xA6AD 0x039D +0xA6AE 0x039E +0xA6AF 0x039F +0xA6B0 0x03A0 +0xA6B1 0x03A1 +0xA6B2 0x03A3 +0xA6B3 0x03A4 +0xA6B4 0x03A5 +0xA6B5 0x03A6 +0xA6B6 0x03A7 +0xA6B7 0x03A8 +0xA6B8 0x03A9 +0xA6C1 0x03B1 +0xA6C2 0x03B2 +0xA6C3 0x03B3 +0xA6C4 0x03B4 +0xA6C5 0x03B5 +0xA6C6 0x03B6 +0xA6C7 0x03B7 +0xA6C8 0x03B8 +0xA6C9 0x03B9 +0xA6CA 0x03BA +0xA6CB 0x03BB +0xA6CC 0x03BC +0xA6CD 0x03BD +0xA6CE 0x03BE +0xA6CF 0x03BF +0xA6D0 0x03C0 +0xA6D1 0x03C1 +0xA6D2 0x03C3 +0xA6D3 0x03C4 +0xA6D4 0x03C5 +0xA6D5 0x03C6 +0xA6D6 0x03C7 +0xA6D7 0x03C8 +0xA6D8 0x03C9 +0xA7A1 0x0410 +0xA7A2 0x0411 +0xA7A3 0x0412 +0xA7A4 0x0413 +0xA7A5 0x0414 +0xA7A6 0x0415 +0xA7A7 0x0401 +0xA7A8 0x0416 +0xA7A9 0x0417 +0xA7AA 0x0418 +0xA7AB 0x0419 +0xA7AC 0x041A +0xA7AD 0x041B +0xA7AE 0x041C +0xA7AF 0x041D +0xA7B0 0x041E +0xA7B1 0x041F +0xA7B2 0x0420 +0xA7B3 0x0421 +0xA7B4 0x0422 +0xA7B5 0x0423 +0xA7B6 0x0424 +0xA7B7 0x0425 +0xA7B8 0x0426 +0xA7B9 0x0427 +0xA7BA 0x0428 +0xA7BB 0x0429 +0xA7BC 0x042A +0xA7BD 0x042B +0xA7BE 0x042C +0xA7BF 0x042D +0xA7C0 0x042E +0xA7C1 0x042F +0xA7D1 0x0430 +0xA7D2 0x0431 +0xA7D3 0x0432 +0xA7D4 0x0433 +0xA7D5 0x0434 +0xA7D6 0x0435 +0xA7D7 0x0451 +0xA7D8 0x0436 +0xA7D9 0x0437 +0xA7DA 0x0438 +0xA7DB 0x0439 +0xA7DC 0x043A +0xA7DD 0x043B +0xA7DE 0x043C +0xA7DF 0x043D +0xA7E0 0x043E +0xA7E1 0x043F +0xA7E2 0x0440 +0xA7E3 0x0441 +0xA7E4 0x0442 +0xA7E5 0x0443 +0xA7E6 0x0444 +0xA7E7 0x0445 +0xA7E8 0x0446 +0xA7E9 0x0447 +0xA7EA 0x0448 +0xA7EB 0x0449 +0xA7EC 0x044A +0xA7ED 0x044B +0xA7EE 0x044C +0xA7EF 0x044D +0xA7F0 0x044E +0xA7F1 0x044F +0xA8A1 0x2500 +0xA8A2 0x2502 +0xA8A3 0x250C +0xA8A4 0x2510 +0xA8A5 0x2518 +0xA8A6 0x2514 +0xA8A7 0x251C +0xA8A8 0x252C +0xA8A9 0x2524 +0xA8AA 0x2534 +0xA8AB 0x253C +0xA8AC 0x2501 +0xA8AD 0x2503 +0xA8AE 0x250F +0xA8AF 0x2513 +0xA8B0 0x251B +0xA8B1 0x2517 +0xA8B2 0x2523 +0xA8B3 0x2533 +0xA8B4 0x252B +0xA8B5 0x253B +0xA8B6 0x254B +0xA8B7 0x2520 +0xA8B8 0x252F +0xA8B9 0x2528 +0xA8BA 0x2537 +0xA8BB 0x253F +0xA8BC 0x251D +0xA8BD 0x2530 +0xA8BE 0x2525 +0xA8BF 0x2538 +0xA8C0 0x2542 +0xB0A1 0x4E9C +0xB0A2 0x5516 +0xB0A3 0x5A03 +0xB0A4 0x963F +0xB0A5 0x54C0 +0xB0A6 0x611B +0xB0A7 0x6328 +0xB0A8 0x59F6 +0xB0A9 0x9022 +0xB0AA 0x8475 +0xB0AB 0x831C +0xB0AC 0x7A50 +0xB0AD 0x60AA +0xB0AE 0x63E1 +0xB0AF 0x6E25 +0xB0B0 0x65ED +0xB0B1 0x8466 +0xB0B2 0x82A6 +0xB0B3 0x9BF5 +0xB0B4 0x6893 +0xB0B5 0x5727 +0xB0B6 0x65A1 +0xB0B7 0x6271 +0xB0B8 0x5B9B +0xB0B9 0x59D0 +0xB0BA 0x867B +0xB0BB 0x98F4 +0xB0BC 0x7D62 +0xB0BD 0x7DBE +0xB0BE 0x9B8E +0xB0BF 0x6216 +0xB0C0 0x7C9F +0xB0C1 0x88B7 +0xB0C2 0x5B89 +0xB0C3 0x5EB5 +0xB0C4 0x6309 +0xB0C5 0x6697 +0xB0C6 0x6848 +0xB0C7 0x95C7 +0xB0C8 0x978D +0xB0C9 0x674F +0xB0CA 0x4EE5 +0xB0CB 0x4F0A +0xB0CC 0x4F4D +0xB0CD 0x4F9D +0xB0CE 0x5049 +0xB0CF 0x56F2 +0xB0D0 0x5937 +0xB0D1 0x59D4 +0xB0D2 0x5A01 +0xB0D3 0x5C09 +0xB0D4 0x60DF +0xB0D5 0x610F +0xB0D6 0x6170 +0xB0D7 0x6613 +0xB0D8 0x6905 +0xB0D9 0x70BA +0xB0DA 0x754F +0xB0DB 0x7570 +0xB0DC 0x79FB +0xB0DD 0x7DAD +0xB0DE 0x7DEF +0xB0DF 0x80C3 +0xB0E0 0x840E +0xB0E1 0x8863 +0xB0E2 0x8B02 +0xB0E3 0x9055 +0xB0E4 0x907A +0xB0E5 0x533B +0xB0E6 0x4E95 +0xB0E7 0x4EA5 +0xB0E8 0x57DF +0xB0E9 0x80B2 +0xB0EA 0x90C1 +0xB0EB 0x78EF +0xB0EC 0x4E00 +0xB0ED 0x58F1 +0xB0EE 0x6EA2 +0xB0EF 0x9038 +0xB0F0 0x7A32 +0xB0F1 0x8328 +0xB0F2 0x828B +0xB0F3 0x9C2F +0xB0F4 0x5141 +0xB0F5 0x5370 +0xB0F6 0x54BD +0xB0F7 0x54E1 +0xB0F8 0x56E0 +0xB0F9 0x59FB +0xB0FA 0x5F15 +0xB0FB 0x98F2 +0xB0FC 0x6DEB +0xB0FD 0x80E4 +0xB0FE 0x852D +0xB1A1 0x9662 +0xB1A2 0x9670 +0xB1A3 0x96A0 +0xB1A4 0x97FB +0xB1A5 0x540B +0xB1A6 0x53F3 +0xB1A7 0x5B87 +0xB1A8 0x70CF +0xB1A9 0x7FBD +0xB1AA 0x8FC2 +0xB1AB 0x96E8 +0xB1AC 0x536F +0xB1AD 0x9D5C +0xB1AE 0x7ABA +0xB1AF 0x4E11 +0xB1B0 0x7893 +0xB1B1 0x81FC +0xB1B2 0x6E26 +0xB1B3 0x5618 +0xB1B4 0x5504 +0xB1B5 0x6B1D +0xB1B6 0x851A +0xB1B7 0x9C3B +0xB1B8 0x59E5 +0xB1B9 0x53A9 +0xB1BA 0x6D66 +0xB1BB 0x74DC +0xB1BC 0x958F +0xB1BD 0x5642 +0xB1BE 0x4E91 +0xB1BF 0x904B +0xB1C0 0x96F2 +0xB1C1 0x834F +0xB1C2 0x990C +0xB1C3 0x53E1 +0xB1C4 0x55B6 +0xB1C5 0x5B30 +0xB1C6 0x5F71 +0xB1C7 0x6620 +0xB1C8 0x66F3 +0xB1C9 0x6804 +0xB1CA 0x6C38 +0xB1CB 0x6CF3 +0xB1CC 0x6D29 +0xB1CD 0x745B +0xB1CE 0x76C8 +0xB1CF 0x7A4E +0xB1D0 0x9834 +0xB1D1 0x82F1 +0xB1D2 0x885B +0xB1D3 0x8A60 +0xB1D4 0x92ED +0xB1D5 0x6DB2 +0xB1D6 0x75AB +0xB1D7 0x76CA +0xB1D8 0x99C5 +0xB1D9 0x60A6 +0xB1DA 0x8B01 +0xB1DB 0x8D8A +0xB1DC 0x95B2 +0xB1DD 0x698E +0xB1DE 0x53AD +0xB1DF 0x5186 +0xB1E0 0x5712 +0xB1E1 0x5830 +0xB1E2 0x5944 +0xB1E3 0x5BB4 +0xB1E4 0x5EF6 +0xB1E5 0x6028 +0xB1E6 0x63A9 +0xB1E7 0x63F4 +0xB1E8 0x6CBF +0xB1E9 0x6F14 +0xB1EA 0x708E +0xB1EB 0x7114 +0xB1EC 0x7159 +0xB1ED 0x71D5 +0xB1EE 0x733F +0xB1EF 0x7E01 +0xB1F0 0x8276 +0xB1F1 0x82D1 +0xB1F2 0x8597 +0xB1F3 0x9060 +0xB1F4 0x925B +0xB1F5 0x9D1B +0xB1F6 0x5869 +0xB1F7 0x65BC +0xB1F8 0x6C5A +0xB1F9 0x7525 +0xB1FA 0x51F9 +0xB1FB 0x592E +0xB1FC 0x5965 +0xB1FD 0x5F80 +0xB1FE 0x5FDC +0xB2A1 0x62BC +0xB2A2 0x65FA +0xB2A3 0x6A2A +0xB2A4 0x6B27 +0xB2A5 0x6BB4 +0xB2A6 0x738B +0xB2A7 0x7FC1 +0xB2A8 0x8956 +0xB2A9 0x9D2C +0xB2AA 0x9D0E +0xB2AB 0x9EC4 +0xB2AC 0x5CA1 +0xB2AD 0x6C96 +0xB2AE 0x837B +0xB2AF 0x5104 +0xB2B0 0x5C4B +0xB2B1 0x61B6 +0xB2B2 0x81C6 +0xB2B3 0x6876 +0xB2B4 0x7261 +0xB2B5 0x4E59 +0xB2B6 0x4FFA +0xB2B7 0x5378 +0xB2B8 0x6069 +0xB2B9 0x6E29 +0xB2BA 0x7A4F +0xB2BB 0x97F3 +0xB2BC 0x4E0B +0xB2BD 0x5316 +0xB2BE 0x4EEE +0xB2BF 0x4F55 +0xB2C0 0x4F3D +0xB2C1 0x4FA1 +0xB2C2 0x4F73 +0xB2C3 0x52A0 +0xB2C4 0x53EF +0xB2C5 0x5609 +0xB2C6 0x590F +0xB2C7 0x5AC1 +0xB2C8 0x5BB6 +0xB2C9 0x5BE1 +0xB2CA 0x79D1 +0xB2CB 0x6687 +0xB2CC 0x679C +0xB2CD 0x67B6 +0xB2CE 0x6B4C +0xB2CF 0x6CB3 +0xB2D0 0x706B +0xB2D1 0x73C2 +0xB2D2 0x798D +0xB2D3 0x79BE +0xB2D4 0x7A3C +0xB2D5 0x7B87 +0xB2D6 0x82B1 +0xB2D7 0x82DB +0xB2D8 0x8304 +0xB2D9 0x8377 +0xB2DA 0x83EF +0xB2DB 0x83D3 +0xB2DC 0x8766 +0xB2DD 0x8AB2 +0xB2DE 0x5629 +0xB2DF 0x8CA8 +0xB2E0 0x8FE6 +0xB2E1 0x904E +0xB2E2 0x971E +0xB2E3 0x868A +0xB2E4 0x4FC4 +0xB2E5 0x5CE8 +0xB2E6 0x6211 +0xB2E7 0x7259 +0xB2E8 0x753B +0xB2E9 0x81E5 +0xB2EA 0x82BD +0xB2EB 0x86FE +0xB2EC 0x8CC0 +0xB2ED 0x96C5 +0xB2EE 0x9913 +0xB2EF 0x99D5 +0xB2F0 0x4ECB +0xB2F1 0x4F1A +0xB2F2 0x89E3 +0xB2F3 0x56DE +0xB2F4 0x584A +0xB2F5 0x58CA +0xB2F6 0x5EFB +0xB2F7 0x5FEB +0xB2F8 0x602A +0xB2F9 0x6094 +0xB2FA 0x6062 +0xB2FB 0x61D0 +0xB2FC 0x6212 +0xB2FD 0x62D0 +0xB2FE 0x6539 +0xB3A1 0x9B41 +0xB3A2 0x6666 +0xB3A3 0x68B0 +0xB3A4 0x6D77 +0xB3A5 0x7070 +0xB3A6 0x754C +0xB3A7 0x7686 +0xB3A8 0x7D75 +0xB3A9 0x82A5 +0xB3AA 0x87F9 +0xB3AB 0x958B +0xB3AC 0x968E +0xB3AD 0x8C9D +0xB3AE 0x51F1 +0xB3AF 0x52BE +0xB3B0 0x5916 +0xB3B1 0x54B3 +0xB3B2 0x5BB3 +0xB3B3 0x5D16 +0xB3B4 0x6168 +0xB3B5 0x6982 +0xB3B6 0x6DAF +0xB3B7 0x788D +0xB3B8 0x84CB +0xB3B9 0x8857 +0xB3BA 0x8A72 +0xB3BB 0x93A7 +0xB3BC 0x9AB8 +0xB3BD 0x6D6C +0xB3BE 0x99A8 +0xB3BF 0x86D9 +0xB3C0 0x57A3 +0xB3C1 0x67FF +0xB3C2 0x86CE +0xB3C3 0x920E +0xB3C4 0x5283 +0xB3C5 0x5687 +0xB3C6 0x5404 +0xB3C7 0x5ED3 +0xB3C8 0x62E1 +0xB3C9 0x64B9 +0xB3CA 0x683C +0xB3CB 0x6838 +0xB3CC 0x6BBB +0xB3CD 0x7372 +0xB3CE 0x78BA +0xB3CF 0x7A6B +0xB3D0 0x899A +0xB3D1 0x89D2 +0xB3D2 0x8D6B +0xB3D3 0x8F03 +0xB3D4 0x90ED +0xB3D5 0x95A3 +0xB3D6 0x9694 +0xB3D7 0x9769 +0xB3D8 0x5B66 +0xB3D9 0x5CB3 +0xB3DA 0x697D +0xB3DB 0x984D +0xB3DC 0x984E +0xB3DD 0x639B +0xB3DE 0x7B20 +0xB3DF 0x6A2B +0xB3E0 0x6A7F +0xB3E1 0x68B6 +0xB3E2 0x9C0D +0xB3E3 0x6F5F +0xB3E4 0x5272 +0xB3E5 0x559D +0xB3E6 0x6070 +0xB3E7 0x62EC +0xB3E8 0x6D3B +0xB3E9 0x6E07 +0xB3EA 0x6ED1 +0xB3EB 0x845B +0xB3EC 0x8910 +0xB3ED 0x8F44 +0xB3EE 0x4E14 +0xB3EF 0x9C39 +0xB3F0 0x53F6 +0xB3F1 0x691B +0xB3F2 0x6A3A +0xB3F3 0x9784 +0xB3F4 0x682A +0xB3F5 0x515C +0xB3F6 0x7AC3 +0xB3F7 0x84B2 +0xB3F8 0x91DC +0xB3F9 0x938C +0xB3FA 0x565B +0xB3FB 0x9D28 +0xB3FC 0x6822 +0xB3FD 0x8305 +0xB3FE 0x8431 +0xB4A1 0x7CA5 +0xB4A2 0x5208 +0xB4A3 0x82C5 +0xB4A4 0x74E6 +0xB4A5 0x4E7E +0xB4A6 0x4F83 +0xB4A7 0x51A0 +0xB4A8 0x5BD2 +0xB4A9 0x520A +0xB4AA 0x52D8 +0xB4AB 0x52E7 +0xB4AC 0x5DFB +0xB4AD 0x559A +0xB4AE 0x582A +0xB4AF 0x59E6 +0xB4B0 0x5B8C +0xB4B1 0x5B98 +0xB4B2 0x5BDB +0xB4B3 0x5E72 +0xB4B4 0x5E79 +0xB4B5 0x60A3 +0xB4B6 0x611F +0xB4B7 0x6163 +0xB4B8 0x61BE +0xB4B9 0x63DB +0xB4BA 0x6562 +0xB4BB 0x67D1 +0xB4BC 0x6853 +0xB4BD 0x68FA +0xB4BE 0x6B3E +0xB4BF 0x6B53 +0xB4C0 0x6C57 +0xB4C1 0x6F22 +0xB4C2 0x6F97 +0xB4C3 0x6F45 +0xB4C4 0x74B0 +0xB4C5 0x7518 +0xB4C6 0x76E3 +0xB4C7 0x770B +0xB4C8 0x7AFF +0xB4C9 0x7BA1 +0xB4CA 0x7C21 +0xB4CB 0x7DE9 +0xB4CC 0x7F36 +0xB4CD 0x7FF0 +0xB4CE 0x809D +0xB4CF 0x8266 +0xB4D0 0x839E +0xB4D1 0x89B3 +0xB4D2 0x8ACC +0xB4D3 0x8CAB +0xB4D4 0x9084 +0xB4D5 0x9451 +0xB4D6 0x9593 +0xB4D7 0x9591 +0xB4D8 0x95A2 +0xB4D9 0x9665 +0xB4DA 0x97D3 +0xB4DB 0x9928 +0xB4DC 0x8218 +0xB4DD 0x4E38 +0xB4DE 0x542B +0xB4DF 0x5CB8 +0xB4E0 0x5DCC +0xB4E1 0x73A9 +0xB4E2 0x764C +0xB4E3 0x773C +0xB4E4 0x5CA9 +0xB4E5 0x7FEB +0xB4E6 0x8D0B +0xB4E7 0x96C1 +0xB4E8 0x9811 +0xB4E9 0x9854 +0xB4EA 0x9858 +0xB4EB 0x4F01 +0xB4EC 0x4F0E +0xB4ED 0x5371 +0xB4EE 0x559C +0xB4EF 0x5668 +0xB4F0 0x57FA +0xB4F1 0x5947 +0xB4F2 0x5B09 +0xB4F3 0x5BC4 +0xB4F4 0x5C90 +0xB4F5 0x5E0C +0xB4F6 0x5E7E +0xB4F7 0x5FCC +0xB4F8 0x63EE +0xB4F9 0x673A +0xB4FA 0x65D7 +0xB4FB 0x65E2 +0xB4FC 0x671F +0xB4FD 0x68CB +0xB4FE 0x68C4 +0xB5A1 0x6A5F +0xB5A2 0x5E30 +0xB5A3 0x6BC5 +0xB5A4 0x6C17 +0xB5A5 0x6C7D +0xB5A6 0x757F +0xB5A7 0x7948 +0xB5A8 0x5B63 +0xB5A9 0x7A00 +0xB5AA 0x7D00 +0xB5AB 0x5FBD +0xB5AC 0x898F +0xB5AD 0x8A18 +0xB5AE 0x8CB4 +0xB5AF 0x8D77 +0xB5B0 0x8ECC +0xB5B1 0x8F1D +0xB5B2 0x98E2 +0xB5B3 0x9A0E +0xB5B4 0x9B3C +0xB5B5 0x4E80 +0xB5B6 0x507D +0xB5B7 0x5100 +0xB5B8 0x5993 +0xB5B9 0x5B9C +0xB5BA 0x622F +0xB5BB 0x6280 +0xB5BC 0x64EC +0xB5BD 0x6B3A +0xB5BE 0x72A0 +0xB5BF 0x7591 +0xB5C0 0x7947 +0xB5C1 0x7FA9 +0xB5C2 0x87FB +0xB5C3 0x8ABC +0xB5C4 0x8B70 +0xB5C5 0x63AC +0xB5C6 0x83CA +0xB5C7 0x97A0 +0xB5C8 0x5409 +0xB5C9 0x5403 +0xB5CA 0x55AB +0xB5CB 0x6854 +0xB5CC 0x6A58 +0xB5CD 0x8A70 +0xB5CE 0x7827 +0xB5CF 0x6775 +0xB5D0 0x9ECD +0xB5D1 0x5374 +0xB5D2 0x5BA2 +0xB5D3 0x811A +0xB5D4 0x8650 +0xB5D5 0x9006 +0xB5D6 0x4E18 +0xB5D7 0x4E45 +0xB5D8 0x4EC7 +0xB5D9 0x4F11 +0xB5DA 0x53CA +0xB5DB 0x5438 +0xB5DC 0x5BAE +0xB5DD 0x5F13 +0xB5DE 0x6025 +0xB5DF 0x6551 +0xB5E0 0x673D +0xB5E1 0x6C42 +0xB5E2 0x6C72 +0xB5E3 0x6CE3 +0xB5E4 0x7078 +0xB5E5 0x7403 +0xB5E6 0x7A76 +0xB5E7 0x7AAE +0xB5E8 0x7B08 +0xB5E9 0x7D1A +0xB5EA 0x7CFE +0xB5EB 0x7D66 +0xB5EC 0x65E7 +0xB5ED 0x725B +0xB5EE 0x53BB +0xB5EF 0x5C45 +0xB5F0 0x5DE8 +0xB5F1 0x62D2 +0xB5F2 0x62E0 +0xB5F3 0x6319 +0xB5F4 0x6E20 +0xB5F5 0x865A +0xB5F6 0x8A31 +0xB5F7 0x8DDD +0xB5F8 0x92F8 +0xB5F9 0x6F01 +0xB5FA 0x79A6 +0xB5FB 0x9B5A +0xB5FC 0x4EA8 +0xB5FD 0x4EAB +0xB5FE 0x4EAC +0xB6A1 0x4F9B +0xB6A2 0x4FA0 +0xB6A3 0x50D1 +0xB6A4 0x5147 +0xB6A5 0x7AF6 +0xB6A6 0x5171 +0xB6A7 0x51F6 +0xB6A8 0x5354 +0xB6A9 0x5321 +0xB6AA 0x537F +0xB6AB 0x53EB +0xB6AC 0x55AC +0xB6AD 0x5883 +0xB6AE 0x5CE1 +0xB6AF 0x5F37 +0xB6B0 0x5F4A +0xB6B1 0x602F +0xB6B2 0x6050 +0xB6B3 0x606D +0xB6B4 0x631F +0xB6B5 0x6559 +0xB6B6 0x6A4B +0xB6B7 0x6CC1 +0xB6B8 0x72C2 +0xB6B9 0x72ED +0xB6BA 0x77EF +0xB6BB 0x80F8 +0xB6BC 0x8105 +0xB6BD 0x8208 +0xB6BE 0x854E +0xB6BF 0x90F7 +0xB6C0 0x93E1 +0xB6C1 0x97FF +0xB6C2 0x9957 +0xB6C3 0x9A5A +0xB6C4 0x4EF0 +0xB6C5 0x51DD +0xB6C6 0x5C2D +0xB6C7 0x6681 +0xB6C8 0x696D +0xB6C9 0x5C40 +0xB6CA 0x66F2 +0xB6CB 0x6975 +0xB6CC 0x7389 +0xB6CD 0x6850 +0xB6CE 0x7C81 +0xB6CF 0x50C5 +0xB6D0 0x52E4 +0xB6D1 0x5747 +0xB6D2 0x5DFE +0xB6D3 0x9326 +0xB6D4 0x65A4 +0xB6D5 0x6B23 +0xB6D6 0x6B3D +0xB6D7 0x7434 +0xB6D8 0x7981 +0xB6D9 0x79BD +0xB6DA 0x7B4B +0xB6DB 0x7DCA +0xB6DC 0x82B9 +0xB6DD 0x83CC +0xB6DE 0x887F +0xB6DF 0x895F +0xB6E0 0x8B39 +0xB6E1 0x8FD1 +0xB6E2 0x91D1 +0xB6E3 0x541F +0xB6E4 0x9280 +0xB6E5 0x4E5D +0xB6E6 0x5036 +0xB6E7 0x53E5 +0xB6E8 0x533A +0xB6E9 0x72D7 +0xB6EA 0x7396 +0xB6EB 0x77E9 +0xB6EC 0x82E6 +0xB6ED 0x8EAF +0xB6EE 0x99C6 +0xB6EF 0x99C8 +0xB6F0 0x99D2 +0xB6F1 0x5177 +0xB6F2 0x611A +0xB6F3 0x865E +0xB6F4 0x55B0 +0xB6F5 0x7A7A +0xB6F6 0x5076 +0xB6F7 0x5BD3 +0xB6F8 0x9047 +0xB6F9 0x9685 +0xB6FA 0x4E32 +0xB6FB 0x6ADB +0xB6FC 0x91E7 +0xB6FD 0x5C51 +0xB6FE 0x5C48 +0xB7A1 0x6398 +0xB7A2 0x7A9F +0xB7A3 0x6C93 +0xB7A4 0x9774 +0xB7A5 0x8F61 +0xB7A6 0x7AAA +0xB7A7 0x718A +0xB7A8 0x9688 +0xB7A9 0x7C82 +0xB7AA 0x6817 +0xB7AB 0x7E70 +0xB7AC 0x6851 +0xB7AD 0x936C +0xB7AE 0x52F2 +0xB7AF 0x541B +0xB7B0 0x85AB +0xB7B1 0x8A13 +0xB7B2 0x7FA4 +0xB7B3 0x8ECD +0xB7B4 0x90E1 +0xB7B5 0x5366 +0xB7B6 0x8888 +0xB7B7 0x7941 +0xB7B8 0x4FC2 +0xB7B9 0x50BE +0xB7BA 0x5211 +0xB7BB 0x5144 +0xB7BC 0x5553 +0xB7BD 0x572D +0xB7BE 0x73EA +0xB7BF 0x578B +0xB7C0 0x5951 +0xB7C1 0x5F62 +0xB7C2 0x5F84 +0xB7C3 0x6075 +0xB7C4 0x6176 +0xB7C5 0x6167 +0xB7C6 0x61A9 +0xB7C7 0x63B2 +0xB7C8 0x643A +0xB7C9 0x656C +0xB7CA 0x666F +0xB7CB 0x6842 +0xB7CC 0x6E13 +0xB7CD 0x7566 +0xB7CE 0x7A3D +0xB7CF 0x7CFB +0xB7D0 0x7D4C +0xB7D1 0x7D99 +0xB7D2 0x7E4B +0xB7D3 0x7F6B +0xB7D4 0x830E +0xB7D5 0x834A +0xB7D6 0x86CD +0xB7D7 0x8A08 +0xB7D8 0x8A63 +0xB7D9 0x8B66 +0xB7DA 0x8EFD +0xB7DB 0x981A +0xB7DC 0x9D8F +0xB7DD 0x82B8 +0xB7DE 0x8FCE +0xB7DF 0x9BE8 +0xB7E0 0x5287 +0xB7E1 0x621F +0xB7E2 0x6483 +0xB7E3 0x6FC0 +0xB7E4 0x9699 +0xB7E5 0x6841 +0xB7E6 0x5091 +0xB7E7 0x6B20 +0xB7E8 0x6C7A +0xB7E9 0x6F54 +0xB7EA 0x7A74 +0xB7EB 0x7D50 +0xB7EC 0x8840 +0xB7ED 0x8A23 +0xB7EE 0x6708 +0xB7EF 0x4EF6 +0xB7F0 0x5039 +0xB7F1 0x5026 +0xB7F2 0x5065 +0xB7F3 0x517C +0xB7F4 0x5238 +0xB7F5 0x5263 +0xB7F6 0x55A7 +0xB7F7 0x570F +0xB7F8 0x5805 +0xB7F9 0x5ACC +0xB7FA 0x5EFA +0xB7FB 0x61B2 +0xB7FC 0x61F8 +0xB7FD 0x62F3 +0xB7FE 0x6372 +0xB8A1 0x691C +0xB8A2 0x6A29 +0xB8A3 0x727D +0xB8A4 0x72AC +0xB8A5 0x732E +0xB8A6 0x7814 +0xB8A7 0x786F +0xB8A8 0x7D79 +0xB8A9 0x770C +0xB8AA 0x80A9 +0xB8AB 0x898B +0xB8AC 0x8B19 +0xB8AD 0x8CE2 +0xB8AE 0x8ED2 +0xB8AF 0x9063 +0xB8B0 0x9375 +0xB8B1 0x967A +0xB8B2 0x9855 +0xB8B3 0x9A13 +0xB8B4 0x9E78 +0xB8B5 0x5143 +0xB8B6 0x539F +0xB8B7 0x53B3 +0xB8B8 0x5E7B +0xB8B9 0x5F26 +0xB8BA 0x6E1B +0xB8BB 0x6E90 +0xB8BC 0x7384 +0xB8BD 0x73FE +0xB8BE 0x7D43 +0xB8BF 0x8237 +0xB8C0 0x8A00 +0xB8C1 0x8AFA +0xB8C2 0x9650 +0xB8C3 0x4E4E +0xB8C4 0x500B +0xB8C5 0x53E4 +0xB8C6 0x547C +0xB8C7 0x56FA +0xB8C8 0x59D1 +0xB8C9 0x5B64 +0xB8CA 0x5DF1 +0xB8CB 0x5EAB +0xB8CC 0x5F27 +0xB8CD 0x6238 +0xB8CE 0x6545 +0xB8CF 0x67AF +0xB8D0 0x6E56 +0xB8D1 0x72D0 +0xB8D2 0x7CCA +0xB8D3 0x88B4 +0xB8D4 0x80A1 +0xB8D5 0x80E1 +0xB8D6 0x83F0 +0xB8D7 0x864E +0xB8D8 0x8A87 +0xB8D9 0x8DE8 +0xB8DA 0x9237 +0xB8DB 0x96C7 +0xB8DC 0x9867 +0xB8DD 0x9F13 +0xB8DE 0x4E94 +0xB8DF 0x4E92 +0xB8E0 0x4F0D +0xB8E1 0x5348 +0xB8E2 0x5449 +0xB8E3 0x543E +0xB8E4 0x5A2F +0xB8E5 0x5F8C +0xB8E6 0x5FA1 +0xB8E7 0x609F +0xB8E8 0x68A7 +0xB8E9 0x6A8E +0xB8EA 0x745A +0xB8EB 0x7881 +0xB8EC 0x8A9E +0xB8ED 0x8AA4 +0xB8EE 0x8B77 +0xB8EF 0x9190 +0xB8F0 0x4E5E +0xB8F1 0x9BC9 +0xB8F2 0x4EA4 +0xB8F3 0x4F7C +0xB8F4 0x4FAF +0xB8F5 0x5019 +0xB8F6 0x5016 +0xB8F7 0x5149 +0xB8F8 0x516C +0xB8F9 0x529F +0xB8FA 0x52B9 +0xB8FB 0x52FE +0xB8FC 0x539A +0xB8FD 0x53E3 +0xB8FE 0x5411 +0xB9A1 0x540E +0xB9A2 0x5589 +0xB9A3 0x5751 +0xB9A4 0x57A2 +0xB9A5 0x597D +0xB9A6 0x5B54 +0xB9A7 0x5B5D +0xB9A8 0x5B8F +0xB9A9 0x5DE5 +0xB9AA 0x5DE7 +0xB9AB 0x5DF7 +0xB9AC 0x5E78 +0xB9AD 0x5E83 +0xB9AE 0x5E9A +0xB9AF 0x5EB7 +0xB9B0 0x5F18 +0xB9B1 0x6052 +0xB9B2 0x614C +0xB9B3 0x6297 +0xB9B4 0x62D8 +0xB9B5 0x63A7 +0xB9B6 0x653B +0xB9B7 0x6602 +0xB9B8 0x6643 +0xB9B9 0x66F4 +0xB9BA 0x676D +0xB9BB 0x6821 +0xB9BC 0x6897 +0xB9BD 0x69CB +0xB9BE 0x6C5F +0xB9BF 0x6D2A +0xB9C0 0x6D69 +0xB9C1 0x6E2F +0xB9C2 0x6E9D +0xB9C3 0x7532 +0xB9C4 0x7687 +0xB9C5 0x786C +0xB9C6 0x7A3F +0xB9C7 0x7CE0 +0xB9C8 0x7D05 +0xB9C9 0x7D18 +0xB9CA 0x7D5E +0xB9CB 0x7DB1 +0xB9CC 0x8015 +0xB9CD 0x8003 +0xB9CE 0x80AF +0xB9CF 0x80B1 +0xB9D0 0x8154 +0xB9D1 0x818F +0xB9D2 0x822A +0xB9D3 0x8352 +0xB9D4 0x884C +0xB9D5 0x8861 +0xB9D6 0x8B1B +0xB9D7 0x8CA2 +0xB9D8 0x8CFC +0xB9D9 0x90CA +0xB9DA 0x9175 +0xB9DB 0x9271 +0xB9DC 0x783F +0xB9DD 0x92FC +0xB9DE 0x95A4 +0xB9DF 0x964D +0xB9E0 0x9805 +0xB9E1 0x9999 +0xB9E2 0x9AD8 +0xB9E3 0x9D3B +0xB9E4 0x525B +0xB9E5 0x52AB +0xB9E6 0x53F7 +0xB9E7 0x5408 +0xB9E8 0x58D5 +0xB9E9 0x62F7 +0xB9EA 0x6FE0 +0xB9EB 0x8C6A +0xB9EC 0x8F5F +0xB9ED 0x9EB9 +0xB9EE 0x514B +0xB9EF 0x523B +0xB9F0 0x544A +0xB9F1 0x56FD +0xB9F2 0x7A40 +0xB9F3 0x9177 +0xB9F4 0x9D60 +0xB9F5 0x9ED2 +0xB9F6 0x7344 +0xB9F7 0x6F09 +0xB9F8 0x8170 +0xB9F9 0x7511 +0xB9FA 0x5FFD +0xB9FB 0x60DA +0xB9FC 0x9AA8 +0xB9FD 0x72DB +0xB9FE 0x8FBC +0xBAA1 0x6B64 +0xBAA2 0x9803 +0xBAA3 0x4ECA +0xBAA4 0x56F0 +0xBAA5 0x5764 +0xBAA6 0x58BE +0xBAA7 0x5A5A +0xBAA8 0x6068 +0xBAA9 0x61C7 +0xBAAA 0x660F +0xBAAB 0x6606 +0xBAAC 0x6839 +0xBAAD 0x68B1 +0xBAAE 0x6DF7 +0xBAAF 0x75D5 +0xBAB0 0x7D3A +0xBAB1 0x826E +0xBAB2 0x9B42 +0xBAB3 0x4E9B +0xBAB4 0x4F50 +0xBAB5 0x53C9 +0xBAB6 0x5506 +0xBAB7 0x5D6F +0xBAB8 0x5DE6 +0xBAB9 0x5DEE +0xBABA 0x67FB +0xBABB 0x6C99 +0xBABC 0x7473 +0xBABD 0x7802 +0xBABE 0x8A50 +0xBABF 0x9396 +0xBAC0 0x88DF +0xBAC1 0x5750 +0xBAC2 0x5EA7 +0xBAC3 0x632B +0xBAC4 0x50B5 +0xBAC5 0x50AC +0xBAC6 0x518D +0xBAC7 0x6700 +0xBAC8 0x54C9 +0xBAC9 0x585E +0xBACA 0x59BB +0xBACB 0x5BB0 +0xBACC 0x5F69 +0xBACD 0x624D +0xBACE 0x63A1 +0xBACF 0x683D +0xBAD0 0x6B73 +0xBAD1 0x6E08 +0xBAD2 0x707D +0xBAD3 0x91C7 +0xBAD4 0x7280 +0xBAD5 0x7815 +0xBAD6 0x7826 +0xBAD7 0x796D +0xBAD8 0x658E +0xBAD9 0x7D30 +0xBADA 0x83DC +0xBADB 0x88C1 +0xBADC 0x8F09 +0xBADD 0x969B +0xBADE 0x5264 +0xBADF 0x5728 +0xBAE0 0x6750 +0xBAE1 0x7F6A +0xBAE2 0x8CA1 +0xBAE3 0x51B4 +0xBAE4 0x5742 +0xBAE5 0x962A +0xBAE6 0x583A +0xBAE7 0x698A +0xBAE8 0x80B4 +0xBAE9 0x54B2 +0xBAEA 0x5D0E +0xBAEB 0x57FC +0xBAEC 0x7895 +0xBAED 0x9DFA +0xBAEE 0x4F5C +0xBAEF 0x524A +0xBAF0 0x548B +0xBAF1 0x643E +0xBAF2 0x6628 +0xBAF3 0x6714 +0xBAF4 0x67F5 +0xBAF5 0x7A84 +0xBAF6 0x7B56 +0xBAF7 0x7D22 +0xBAF8 0x932F +0xBAF9 0x685C +0xBAFA 0x9BAD +0xBAFB 0x7B39 +0xBAFC 0x5319 +0xBAFD 0x518A +0xBAFE 0x5237 +0xBBA1 0x5BDF +0xBBA2 0x62F6 +0xBBA3 0x64AE +0xBBA4 0x64E6 +0xBBA5 0x672D +0xBBA6 0x6BBA +0xBBA7 0x85A9 +0xBBA8 0x96D1 +0xBBA9 0x7690 +0xBBAA 0x9BD6 +0xBBAB 0x634C +0xBBAC 0x9306 +0xBBAD 0x9BAB +0xBBAE 0x76BF +0xBBAF 0x6652 +0xBBB0 0x4E09 +0xBBB1 0x5098 +0xBBB2 0x53C2 +0xBBB3 0x5C71 +0xBBB4 0x60E8 +0xBBB5 0x6492 +0xBBB6 0x6563 +0xBBB7 0x685F +0xBBB8 0x71E6 +0xBBB9 0x73CA +0xBBBA 0x7523 +0xBBBB 0x7B97 +0xBBBC 0x7E82 +0xBBBD 0x8695 +0xBBBE 0x8B83 +0xBBBF 0x8CDB +0xBBC0 0x9178 +0xBBC1 0x9910 +0xBBC2 0x65AC +0xBBC3 0x66AB +0xBBC4 0x6B8B +0xBBC5 0x4ED5 +0xBBC6 0x4ED4 +0xBBC7 0x4F3A +0xBBC8 0x4F7F +0xBBC9 0x523A +0xBBCA 0x53F8 +0xBBCB 0x53F2 +0xBBCC 0x55E3 +0xBBCD 0x56DB +0xBBCE 0x58EB +0xBBCF 0x59CB +0xBBD0 0x59C9 +0xBBD1 0x59FF +0xBBD2 0x5B50 +0xBBD3 0x5C4D +0xBBD4 0x5E02 +0xBBD5 0x5E2B +0xBBD6 0x5FD7 +0xBBD7 0x601D +0xBBD8 0x6307 +0xBBD9 0x652F +0xBBDA 0x5B5C +0xBBDB 0x65AF +0xBBDC 0x65BD +0xBBDD 0x65E8 +0xBBDE 0x679D +0xBBDF 0x6B62 +0xBBE0 0x6B7B +0xBBE1 0x6C0F +0xBBE2 0x7345 +0xBBE3 0x7949 +0xBBE4 0x79C1 +0xBBE5 0x7CF8 +0xBBE6 0x7D19 +0xBBE7 0x7D2B +0xBBE8 0x80A2 +0xBBE9 0x8102 +0xBBEA 0x81F3 +0xBBEB 0x8996 +0xBBEC 0x8A5E +0xBBED 0x8A69 +0xBBEE 0x8A66 +0xBBEF 0x8A8C +0xBBF0 0x8AEE +0xBBF1 0x8CC7 +0xBBF2 0x8CDC +0xBBF3 0x96CC +0xBBF4 0x98FC +0xBBF5 0x6B6F +0xBBF6 0x4E8B +0xBBF7 0x4F3C +0xBBF8 0x4F8D +0xBBF9 0x5150 +0xBBFA 0x5B57 +0xBBFB 0x5BFA +0xBBFC 0x6148 +0xBBFD 0x6301 +0xBBFE 0x6642 +0xBCA1 0x6B21 +0xBCA2 0x6ECB +0xBCA3 0x6CBB +0xBCA4 0x723E +0xBCA5 0x74BD +0xBCA6 0x75D4 +0xBCA7 0x78C1 +0xBCA8 0x793A +0xBCA9 0x800C +0xBCAA 0x8033 +0xBCAB 0x81EA +0xBCAC 0x8494 +0xBCAD 0x8F9E +0xBCAE 0x6C50 +0xBCAF 0x9E7F +0xBCB0 0x5F0F +0xBCB1 0x8B58 +0xBCB2 0x9D2B +0xBCB3 0x7AFA +0xBCB4 0x8EF8 +0xBCB5 0x5B8D +0xBCB6 0x96EB +0xBCB7 0x4E03 +0xBCB8 0x53F1 +0xBCB9 0x57F7 +0xBCBA 0x5931 +0xBCBB 0x5AC9 +0xBCBC 0x5BA4 +0xBCBD 0x6089 +0xBCBE 0x6E7F +0xBCBF 0x6F06 +0xBCC0 0x75BE +0xBCC1 0x8CEA +0xBCC2 0x5B9F +0xBCC3 0x8500 +0xBCC4 0x7BE0 +0xBCC5 0x5072 +0xBCC6 0x67F4 +0xBCC7 0x829D +0xBCC8 0x5C61 +0xBCC9 0x854A +0xBCCA 0x7E1E +0xBCCB 0x820E +0xBCCC 0x5199 +0xBCCD 0x5C04 +0xBCCE 0x6368 +0xBCCF 0x8D66 +0xBCD0 0x659C +0xBCD1 0x716E +0xBCD2 0x793E +0xBCD3 0x7D17 +0xBCD4 0x8005 +0xBCD5 0x8B1D +0xBCD6 0x8ECA +0xBCD7 0x906E +0xBCD8 0x86C7 +0xBCD9 0x90AA +0xBCDA 0x501F +0xBCDB 0x52FA +0xBCDC 0x5C3A +0xBCDD 0x6753 +0xBCDE 0x707C +0xBCDF 0x7235 +0xBCE0 0x914C +0xBCE1 0x91C8 +0xBCE2 0x932B +0xBCE3 0x82E5 +0xBCE4 0x5BC2 +0xBCE5 0x5F31 +0xBCE6 0x60F9 +0xBCE7 0x4E3B +0xBCE8 0x53D6 +0xBCE9 0x5B88 +0xBCEA 0x624B +0xBCEB 0x6731 +0xBCEC 0x6B8A +0xBCED 0x72E9 +0xBCEE 0x73E0 +0xBCEF 0x7A2E +0xBCF0 0x816B +0xBCF1 0x8DA3 +0xBCF2 0x9152 +0xBCF3 0x9996 +0xBCF4 0x5112 +0xBCF5 0x53D7 +0xBCF6 0x546A +0xBCF7 0x5BFF +0xBCF8 0x6388 +0xBCF9 0x6A39 +0xBCFA 0x7DAC +0xBCFB 0x9700 +0xBCFC 0x56DA +0xBCFD 0x53CE +0xBCFE 0x5468 +0xBDA1 0x5B97 +0xBDA2 0x5C31 +0xBDA3 0x5DDE +0xBDA4 0x4FEE +0xBDA5 0x6101 +0xBDA6 0x62FE +0xBDA7 0x6D32 +0xBDA8 0x79C0 +0xBDA9 0x79CB +0xBDAA 0x7D42 +0xBDAB 0x7E4D +0xBDAC 0x7FD2 +0xBDAD 0x81ED +0xBDAE 0x821F +0xBDAF 0x8490 +0xBDB0 0x8846 +0xBDB1 0x8972 +0xBDB2 0x8B90 +0xBDB3 0x8E74 +0xBDB4 0x8F2F +0xBDB5 0x9031 +0xBDB6 0x914B +0xBDB7 0x916C +0xBDB8 0x96C6 +0xBDB9 0x919C +0xBDBA 0x4EC0 +0xBDBB 0x4F4F +0xBDBC 0x5145 +0xBDBD 0x5341 +0xBDBE 0x5F93 +0xBDBF 0x620E +0xBDC0 0x67D4 +0xBDC1 0x6C41 +0xBDC2 0x6E0B +0xBDC3 0x7363 +0xBDC4 0x7E26 +0xBDC5 0x91CD +0xBDC6 0x9283 +0xBDC7 0x53D4 +0xBDC8 0x5919 +0xBDC9 0x5BBF +0xBDCA 0x6DD1 +0xBDCB 0x795D +0xBDCC 0x7E2E +0xBDCD 0x7C9B +0xBDCE 0x587E +0xBDCF 0x719F +0xBDD0 0x51FA +0xBDD1 0x8853 +0xBDD2 0x8FF0 +0xBDD3 0x4FCA +0xBDD4 0x5CFB +0xBDD5 0x6625 +0xBDD6 0x77AC +0xBDD7 0x7AE3 +0xBDD8 0x821C +0xBDD9 0x99FF +0xBDDA 0x51C6 +0xBDDB 0x5FAA +0xBDDC 0x65EC +0xBDDD 0x696F +0xBDDE 0x6B89 +0xBDDF 0x6DF3 +0xBDE0 0x6E96 +0xBDE1 0x6F64 +0xBDE2 0x76FE +0xBDE3 0x7D14 +0xBDE4 0x5DE1 +0xBDE5 0x9075 +0xBDE6 0x9187 +0xBDE7 0x9806 +0xBDE8 0x51E6 +0xBDE9 0x521D +0xBDEA 0x6240 +0xBDEB 0x6691 +0xBDEC 0x66D9 +0xBDED 0x6E1A +0xBDEE 0x5EB6 +0xBDEF 0x7DD2 +0xBDF0 0x7F72 +0xBDF1 0x66F8 +0xBDF2 0x85AF +0xBDF3 0x85F7 +0xBDF4 0x8AF8 +0xBDF5 0x52A9 +0xBDF6 0x53D9 +0xBDF7 0x5973 +0xBDF8 0x5E8F +0xBDF9 0x5F90 +0xBDFA 0x6055 +0xBDFB 0x92E4 +0xBDFC 0x9664 +0xBDFD 0x50B7 +0xBDFE 0x511F +0xBEA1 0x52DD +0xBEA2 0x5320 +0xBEA3 0x5347 +0xBEA4 0x53EC +0xBEA5 0x54E8 +0xBEA6 0x5546 +0xBEA7 0x5531 +0xBEA8 0x5617 +0xBEA9 0x5968 +0xBEAA 0x59BE +0xBEAB 0x5A3C +0xBEAC 0x5BB5 +0xBEAD 0x5C06 +0xBEAE 0x5C0F +0xBEAF 0x5C11 +0xBEB0 0x5C1A +0xBEB1 0x5E84 +0xBEB2 0x5E8A +0xBEB3 0x5EE0 +0xBEB4 0x5F70 +0xBEB5 0x627F +0xBEB6 0x6284 +0xBEB7 0x62DB +0xBEB8 0x638C +0xBEB9 0x6377 +0xBEBA 0x6607 +0xBEBB 0x660C +0xBEBC 0x662D +0xBEBD 0x6676 +0xBEBE 0x677E +0xBEBF 0x68A2 +0xBEC0 0x6A1F +0xBEC1 0x6A35 +0xBEC2 0x6CBC +0xBEC3 0x6D88 +0xBEC4 0x6E09 +0xBEC5 0x6E58 +0xBEC6 0x713C +0xBEC7 0x7126 +0xBEC8 0x7167 +0xBEC9 0x75C7 +0xBECA 0x7701 +0xBECB 0x785D +0xBECC 0x7901 +0xBECD 0x7965 +0xBECE 0x79F0 +0xBECF 0x7AE0 +0xBED0 0x7B11 +0xBED1 0x7CA7 +0xBED2 0x7D39 +0xBED3 0x8096 +0xBED4 0x83D6 +0xBED5 0x848B +0xBED6 0x8549 +0xBED7 0x885D +0xBED8 0x88F3 +0xBED9 0x8A1F +0xBEDA 0x8A3C +0xBEDB 0x8A54 +0xBEDC 0x8A73 +0xBEDD 0x8C61 +0xBEDE 0x8CDE +0xBEDF 0x91A4 +0xBEE0 0x9266 +0xBEE1 0x937E +0xBEE2 0x9418 +0xBEE3 0x969C +0xBEE4 0x9798 +0xBEE5 0x4E0A +0xBEE6 0x4E08 +0xBEE7 0x4E1E +0xBEE8 0x4E57 +0xBEE9 0x5197 +0xBEEA 0x5270 +0xBEEB 0x57CE +0xBEEC 0x5834 +0xBEED 0x58CC +0xBEEE 0x5B22 +0xBEEF 0x5E38 +0xBEF0 0x60C5 +0xBEF1 0x64FE +0xBEF2 0x6761 +0xBEF3 0x6756 +0xBEF4 0x6D44 +0xBEF5 0x72B6 +0xBEF6 0x7573 +0xBEF7 0x7A63 +0xBEF8 0x84B8 +0xBEF9 0x8B72 +0xBEFA 0x91B8 +0xBEFB 0x9320 +0xBEFC 0x5631 +0xBEFD 0x57F4 +0xBEFE 0x98FE +0xBFA1 0x62ED +0xBFA2 0x690D +0xBFA3 0x6B96 +0xBFA4 0x71ED +0xBFA5 0x7E54 +0xBFA6 0x8077 +0xBFA7 0x8272 +0xBFA8 0x89E6 +0xBFA9 0x98DF +0xBFAA 0x8755 +0xBFAB 0x8FB1 +0xBFAC 0x5C3B +0xBFAD 0x4F38 +0xBFAE 0x4FE1 +0xBFAF 0x4FB5 +0xBFB0 0x5507 +0xBFB1 0x5A20 +0xBFB2 0x5BDD +0xBFB3 0x5BE9 +0xBFB4 0x5FC3 +0xBFB5 0x614E +0xBFB6 0x632F +0xBFB7 0x65B0 +0xBFB8 0x664B +0xBFB9 0x68EE +0xBFBA 0x699B +0xBFBB 0x6D78 +0xBFBC 0x6DF1 +0xBFBD 0x7533 +0xBFBE 0x75B9 +0xBFBF 0x771F +0xBFC0 0x795E +0xBFC1 0x79E6 +0xBFC2 0x7D33 +0xBFC3 0x81E3 +0xBFC4 0x82AF +0xBFC5 0x85AA +0xBFC6 0x89AA +0xBFC7 0x8A3A +0xBFC8 0x8EAB +0xBFC9 0x8F9B +0xBFCA 0x9032 +0xBFCB 0x91DD +0xBFCC 0x9707 +0xBFCD 0x4EBA +0xBFCE 0x4EC1 +0xBFCF 0x5203 +0xBFD0 0x5875 +0xBFD1 0x58EC +0xBFD2 0x5C0B +0xBFD3 0x751A +0xBFD4 0x5C3D +0xBFD5 0x814E +0xBFD6 0x8A0A +0xBFD7 0x8FC5 +0xBFD8 0x9663 +0xBFD9 0x976D +0xBFDA 0x7B25 +0xBFDB 0x8ACF +0xBFDC 0x9808 +0xBFDD 0x9162 +0xBFDE 0x56F3 +0xBFDF 0x53A8 +0xBFE0 0x9017 +0xBFE1 0x5439 +0xBFE2 0x5782 +0xBFE3 0x5E25 +0xBFE4 0x63A8 +0xBFE5 0x6C34 +0xBFE6 0x708A +0xBFE7 0x7761 +0xBFE8 0x7C8B +0xBFE9 0x7FE0 +0xBFEA 0x8870 +0xBFEB 0x9042 +0xBFEC 0x9154 +0xBFED 0x9310 +0xBFEE 0x9318 +0xBFEF 0x968F +0xBFF0 0x745E +0xBFF1 0x9AC4 +0xBFF2 0x5D07 +0xBFF3 0x5D69 +0xBFF4 0x6570 +0xBFF5 0x67A2 +0xBFF6 0x8DA8 +0xBFF7 0x96DB +0xBFF8 0x636E +0xBFF9 0x6749 +0xBFFA 0x6919 +0xBFFB 0x83C5 +0xBFFC 0x9817 +0xBFFD 0x96C0 +0xBFFE 0x88FE +0xC0A1 0x6F84 +0xC0A2 0x647A +0xC0A3 0x5BF8 +0xC0A4 0x4E16 +0xC0A5 0x702C +0xC0A6 0x755D +0xC0A7 0x662F +0xC0A8 0x51C4 +0xC0A9 0x5236 +0xC0AA 0x52E2 +0xC0AB 0x59D3 +0xC0AC 0x5F81 +0xC0AD 0x6027 +0xC0AE 0x6210 +0xC0AF 0x653F +0xC0B0 0x6574 +0xC0B1 0x661F +0xC0B2 0x6674 +0xC0B3 0x68F2 +0xC0B4 0x6816 +0xC0B5 0x6B63 +0xC0B6 0x6E05 +0xC0B7 0x7272 +0xC0B8 0x751F +0xC0B9 0x76DB +0xC0BA 0x7CBE +0xC0BB 0x8056 +0xC0BC 0x58F0 +0xC0BD 0x88FD +0xC0BE 0x897F +0xC0BF 0x8AA0 +0xC0C0 0x8A93 +0xC0C1 0x8ACB +0xC0C2 0x901D +0xC0C3 0x9192 +0xC0C4 0x9752 +0xC0C5 0x9759 +0xC0C6 0x6589 +0xC0C7 0x7A0E +0xC0C8 0x8106 +0xC0C9 0x96BB +0xC0CA 0x5E2D +0xC0CB 0x60DC +0xC0CC 0x621A +0xC0CD 0x65A5 +0xC0CE 0x6614 +0xC0CF 0x6790 +0xC0D0 0x77F3 +0xC0D1 0x7A4D +0xC0D2 0x7C4D +0xC0D3 0x7E3E +0xC0D4 0x810A +0xC0D5 0x8CAC +0xC0D6 0x8D64 +0xC0D7 0x8DE1 +0xC0D8 0x8E5F +0xC0D9 0x78A9 +0xC0DA 0x5207 +0xC0DB 0x62D9 +0xC0DC 0x63A5 +0xC0DD 0x6442 +0xC0DE 0x6298 +0xC0DF 0x8A2D +0xC0E0 0x7A83 +0xC0E1 0x7BC0 +0xC0E2 0x8AAC +0xC0E3 0x96EA +0xC0E4 0x7D76 +0xC0E5 0x820C +0xC0E6 0x8749 +0xC0E7 0x4ED9 +0xC0E8 0x5148 +0xC0E9 0x5343 +0xC0EA 0x5360 +0xC0EB 0x5BA3 +0xC0EC 0x5C02 +0xC0ED 0x5C16 +0xC0EE 0x5DDD +0xC0EF 0x6226 +0xC0F0 0x6247 +0xC0F1 0x64B0 +0xC0F2 0x6813 +0xC0F3 0x6834 +0xC0F4 0x6CC9 +0xC0F5 0x6D45 +0xC0F6 0x6D17 +0xC0F7 0x67D3 +0xC0F8 0x6F5C +0xC0F9 0x714E +0xC0FA 0x717D +0xC0FB 0x65CB +0xC0FC 0x7A7F +0xC0FD 0x7BAD +0xC0FE 0x7DDA +0xC1A1 0x7E4A +0xC1A2 0x7FA8 +0xC1A3 0x817A +0xC1A4 0x821B +0xC1A5 0x8239 +0xC1A6 0x85A6 +0xC1A7 0x8A6E +0xC1A8 0x8CCE +0xC1A9 0x8DF5 +0xC1AA 0x9078 +0xC1AB 0x9077 +0xC1AC 0x92AD +0xC1AD 0x9291 +0xC1AE 0x9583 +0xC1AF 0x9BAE +0xC1B0 0x524D +0xC1B1 0x5584 +0xC1B2 0x6F38 +0xC1B3 0x7136 +0xC1B4 0x5168 +0xC1B5 0x7985 +0xC1B6 0x7E55 +0xC1B7 0x81B3 +0xC1B8 0x7CCE +0xC1B9 0x564C +0xC1BA 0x5851 +0xC1BB 0x5CA8 +0xC1BC 0x63AA +0xC1BD 0x66FE +0xC1BE 0x66FD +0xC1BF 0x695A +0xC1C0 0x72D9 +0xC1C1 0x758F +0xC1C2 0x758E +0xC1C3 0x790E +0xC1C4 0x7956 +0xC1C5 0x79DF +0xC1C6 0x7C97 +0xC1C7 0x7D20 +0xC1C8 0x7D44 +0xC1C9 0x8607 +0xC1CA 0x8A34 +0xC1CB 0x963B +0xC1CC 0x9061 +0xC1CD 0x9F20 +0xC1CE 0x50E7 +0xC1CF 0x5275 +0xC1D0 0x53CC +0xC1D1 0x53E2 +0xC1D2 0x5009 +0xC1D3 0x55AA +0xC1D4 0x58EE +0xC1D5 0x594F +0xC1D6 0x723D +0xC1D7 0x5B8B +0xC1D8 0x5C64 +0xC1D9 0x531D +0xC1DA 0x60E3 +0xC1DB 0x60F3 +0xC1DC 0x635C +0xC1DD 0x6383 +0xC1DE 0x633F +0xC1DF 0x63BB +0xC1E0 0x64CD +0xC1E1 0x65E9 +0xC1E2 0x66F9 +0xC1E3 0x5DE3 +0xC1E4 0x69CD +0xC1E5 0x69FD +0xC1E6 0x6F15 +0xC1E7 0x71E5 +0xC1E8 0x4E89 +0xC1E9 0x75E9 +0xC1EA 0x76F8 +0xC1EB 0x7A93 +0xC1EC 0x7CDF +0xC1ED 0x7DCF +0xC1EE 0x7D9C +0xC1EF 0x8061 +0xC1F0 0x8349 +0xC1F1 0x8358 +0xC1F2 0x846C +0xC1F3 0x84BC +0xC1F4 0x85FB +0xC1F5 0x88C5 +0xC1F6 0x8D70 +0xC1F7 0x9001 +0xC1F8 0x906D +0xC1F9 0x9397 +0xC1FA 0x971C +0xC1FB 0x9A12 +0xC1FC 0x50CF +0xC1FD 0x5897 +0xC1FE 0x618E +0xC2A1 0x81D3 +0xC2A2 0x8535 +0xC2A3 0x8D08 +0xC2A4 0x9020 +0xC2A5 0x4FC3 +0xC2A6 0x5074 +0xC2A7 0x5247 +0xC2A8 0x5373 +0xC2A9 0x606F +0xC2AA 0x6349 +0xC2AB 0x675F +0xC2AC 0x6E2C +0xC2AD 0x8DB3 +0xC2AE 0x901F +0xC2AF 0x4FD7 +0xC2B0 0x5C5E +0xC2B1 0x8CCA +0xC2B2 0x65CF +0xC2B3 0x7D9A +0xC2B4 0x5352 +0xC2B5 0x8896 +0xC2B6 0x5176 +0xC2B7 0x63C3 +0xC2B8 0x5B58 +0xC2B9 0x5B6B +0xC2BA 0x5C0A +0xC2BB 0x640D +0xC2BC 0x6751 +0xC2BD 0x905C +0xC2BE 0x4ED6 +0xC2BF 0x591A +0xC2C0 0x592A +0xC2C1 0x6C70 +0xC2C2 0x8A51 +0xC2C3 0x553E +0xC2C4 0x5815 +0xC2C5 0x59A5 +0xC2C6 0x60F0 +0xC2C7 0x6253 +0xC2C8 0x67C1 +0xC2C9 0x8235 +0xC2CA 0x6955 +0xC2CB 0x9640 +0xC2CC 0x99C4 +0xC2CD 0x9A28 +0xC2CE 0x4F53 +0xC2CF 0x5806 +0xC2D0 0x5BFE +0xC2D1 0x8010 +0xC2D2 0x5CB1 +0xC2D3 0x5E2F +0xC2D4 0x5F85 +0xC2D5 0x6020 +0xC2D6 0x614B +0xC2D7 0x6234 +0xC2D8 0x66FF +0xC2D9 0x6CF0 +0xC2DA 0x6EDE +0xC2DB 0x80CE +0xC2DC 0x817F +0xC2DD 0x82D4 +0xC2DE 0x888B +0xC2DF 0x8CB8 +0xC2E0 0x9000 +0xC2E1 0x902E +0xC2E2 0x968A +0xC2E3 0x9EDB +0xC2E4 0x9BDB +0xC2E5 0x4EE3 +0xC2E6 0x53F0 +0xC2E7 0x5927 +0xC2E8 0x7B2C +0xC2E9 0x918D +0xC2EA 0x984C +0xC2EB 0x9DF9 +0xC2EC 0x6EDD +0xC2ED 0x7027 +0xC2EE 0x5353 +0xC2EF 0x5544 +0xC2F0 0x5B85 +0xC2F1 0x6258 +0xC2F2 0x629E +0xC2F3 0x62D3 +0xC2F4 0x6CA2 +0xC2F5 0x6FEF +0xC2F6 0x7422 +0xC2F7 0x8A17 +0xC2F8 0x9438 +0xC2F9 0x6FC1 +0xC2FA 0x8AFE +0xC2FB 0x8338 +0xC2FC 0x51E7 +0xC2FD 0x86F8 +0xC2FE 0x53EA +0xC3A1 0x53E9 +0xC3A2 0x4F46 +0xC3A3 0x9054 +0xC3A4 0x8FB0 +0xC3A5 0x596A +0xC3A6 0x8131 +0xC3A7 0x5DFD +0xC3A8 0x7AEA +0xC3A9 0x8FBF +0xC3AA 0x68DA +0xC3AB 0x8C37 +0xC3AC 0x72F8 +0xC3AD 0x9C48 +0xC3AE 0x6A3D +0xC3AF 0x8AB0 +0xC3B0 0x4E39 +0xC3B1 0x5358 +0xC3B2 0x5606 +0xC3B3 0x5766 +0xC3B4 0x62C5 +0xC3B5 0x63A2 +0xC3B6 0x65E6 +0xC3B7 0x6B4E +0xC3B8 0x6DE1 +0xC3B9 0x6E5B +0xC3BA 0x70AD +0xC3BB 0x77ED +0xC3BC 0x7AEF +0xC3BD 0x7BAA +0xC3BE 0x7DBB +0xC3BF 0x803D +0xC3C0 0x80C6 +0xC3C1 0x86CB +0xC3C2 0x8A95 +0xC3C3 0x935B +0xC3C4 0x56E3 +0xC3C5 0x58C7 +0xC3C6 0x5F3E +0xC3C7 0x65AD +0xC3C8 0x6696 +0xC3C9 0x6A80 +0xC3CA 0x6BB5 +0xC3CB 0x7537 +0xC3CC 0x8AC7 +0xC3CD 0x5024 +0xC3CE 0x77E5 +0xC3CF 0x5730 +0xC3D0 0x5F1B +0xC3D1 0x6065 +0xC3D2 0x667A +0xC3D3 0x6C60 +0xC3D4 0x75F4 +0xC3D5 0x7A1A +0xC3D6 0x7F6E +0xC3D7 0x81F4 +0xC3D8 0x8718 +0xC3D9 0x9045 +0xC3DA 0x99B3 +0xC3DB 0x7BC9 +0xC3DC 0x755C +0xC3DD 0x7AF9 +0xC3DE 0x7B51 +0xC3DF 0x84C4 +0xC3E0 0x9010 +0xC3E1 0x79E9 +0xC3E2 0x7A92 +0xC3E3 0x8336 +0xC3E4 0x5AE1 +0xC3E5 0x7740 +0xC3E6 0x4E2D +0xC3E7 0x4EF2 +0xC3E8 0x5B99 +0xC3E9 0x5FE0 +0xC3EA 0x62BD +0xC3EB 0x663C +0xC3EC 0x67F1 +0xC3ED 0x6CE8 +0xC3EE 0x866B +0xC3EF 0x8877 +0xC3F0 0x8A3B +0xC3F1 0x914E +0xC3F2 0x92F3 +0xC3F3 0x99D0 +0xC3F4 0x6A17 +0xC3F5 0x7026 +0xC3F6 0x732A +0xC3F7 0x82E7 +0xC3F8 0x8457 +0xC3F9 0x8CAF +0xC3FA 0x4E01 +0xC3FB 0x5146 +0xC3FC 0x51CB +0xC3FD 0x558B +0xC3FE 0x5BF5 +0xC4A1 0x5E16 +0xC4A2 0x5E33 +0xC4A3 0x5E81 +0xC4A4 0x5F14 +0xC4A5 0x5F35 +0xC4A6 0x5F6B +0xC4A7 0x5FB4 +0xC4A8 0x61F2 +0xC4A9 0x6311 +0xC4AA 0x66A2 +0xC4AB 0x671D +0xC4AC 0x6F6E +0xC4AD 0x7252 +0xC4AE 0x753A +0xC4AF 0x773A +0xC4B0 0x8074 +0xC4B1 0x8139 +0xC4B2 0x8178 +0xC4B3 0x8776 +0xC4B4 0x8ABF +0xC4B5 0x8ADC +0xC4B6 0x8D85 +0xC4B7 0x8DF3 +0xC4B8 0x929A +0xC4B9 0x9577 +0xC4BA 0x9802 +0xC4BB 0x9CE5 +0xC4BC 0x52C5 +0xC4BD 0x6357 +0xC4BE 0x76F4 +0xC4BF 0x6715 +0xC4C0 0x6C88 +0xC4C1 0x73CD +0xC4C2 0x8CC3 +0xC4C3 0x93AE +0xC4C4 0x9673 +0xC4C5 0x6D25 +0xC4C6 0x589C +0xC4C7 0x690E +0xC4C8 0x69CC +0xC4C9 0x8FFD +0xC4CA 0x939A +0xC4CB 0x75DB +0xC4CC 0x901A +0xC4CD 0x585A +0xC4CE 0x6802 +0xC4CF 0x63B4 +0xC4D0 0x69FB +0xC4D1 0x4F43 +0xC4D2 0x6F2C +0xC4D3 0x67D8 +0xC4D4 0x8FBB +0xC4D5 0x8526 +0xC4D6 0x7DB4 +0xC4D7 0x9354 +0xC4D8 0x693F +0xC4D9 0x6F70 +0xC4DA 0x576A +0xC4DB 0x58F7 +0xC4DC 0x5B2C +0xC4DD 0x7D2C +0xC4DE 0x722A +0xC4DF 0x540A +0xC4E0 0x91E3 +0xC4E1 0x9DB4 +0xC4E2 0x4EAD +0xC4E3 0x4F4E +0xC4E4 0x505C +0xC4E5 0x5075 +0xC4E6 0x5243 +0xC4E7 0x8C9E +0xC4E8 0x5448 +0xC4E9 0x5824 +0xC4EA 0x5B9A +0xC4EB 0x5E1D +0xC4EC 0x5E95 +0xC4ED 0x5EAD +0xC4EE 0x5EF7 +0xC4EF 0x5F1F +0xC4F0 0x608C +0xC4F1 0x62B5 +0xC4F2 0x633A +0xC4F3 0x63D0 +0xC4F4 0x68AF +0xC4F5 0x6C40 +0xC4F6 0x7887 +0xC4F7 0x798E +0xC4F8 0x7A0B +0xC4F9 0x7DE0 +0xC4FA 0x8247 +0xC4FB 0x8A02 +0xC4FC 0x8AE6 +0xC4FD 0x8E44 +0xC4FE 0x9013 +0xC5A1 0x90B8 +0xC5A2 0x912D +0xC5A3 0x91D8 +0xC5A4 0x9F0E +0xC5A5 0x6CE5 +0xC5A6 0x6458 +0xC5A7 0x64E2 +0xC5A8 0x6575 +0xC5A9 0x6EF4 +0xC5AA 0x7684 +0xC5AB 0x7B1B +0xC5AC 0x9069 +0xC5AD 0x93D1 +0xC5AE 0x6EBA +0xC5AF 0x54F2 +0xC5B0 0x5FB9 +0xC5B1 0x64A4 +0xC5B2 0x8F4D +0xC5B3 0x8FED +0xC5B4 0x9244 +0xC5B5 0x5178 +0xC5B6 0x586B +0xC5B7 0x5929 +0xC5B8 0x5C55 +0xC5B9 0x5E97 +0xC5BA 0x6DFB +0xC5BB 0x7E8F +0xC5BC 0x751C +0xC5BD 0x8CBC +0xC5BE 0x8EE2 +0xC5BF 0x985B +0xC5C0 0x70B9 +0xC5C1 0x4F1D +0xC5C2 0x6BBF +0xC5C3 0x6FB1 +0xC5C4 0x7530 +0xC5C5 0x96FB +0xC5C6 0x514E +0xC5C7 0x5410 +0xC5C8 0x5835 +0xC5C9 0x5857 +0xC5CA 0x59AC +0xC5CB 0x5C60 +0xC5CC 0x5F92 +0xC5CD 0x6597 +0xC5CE 0x675C +0xC5CF 0x6E21 +0xC5D0 0x767B +0xC5D1 0x83DF +0xC5D2 0x8CED +0xC5D3 0x9014 +0xC5D4 0x90FD +0xC5D5 0x934D +0xC5D6 0x7825 +0xC5D7 0x783A +0xC5D8 0x52AA +0xC5D9 0x5EA6 +0xC5DA 0x571F +0xC5DB 0x5974 +0xC5DC 0x6012 +0xC5DD 0x5012 +0xC5DE 0x515A +0xC5DF 0x51AC +0xC5E0 0x51CD +0xC5E1 0x5200 +0xC5E2 0x5510 +0xC5E3 0x5854 +0xC5E4 0x5858 +0xC5E5 0x5957 +0xC5E6 0x5B95 +0xC5E7 0x5CF6 +0xC5E8 0x5D8B +0xC5E9 0x60BC +0xC5EA 0x6295 +0xC5EB 0x642D +0xC5EC 0x6771 +0xC5ED 0x6843 +0xC5EE 0x68BC +0xC5EF 0x68DF +0xC5F0 0x76D7 +0xC5F1 0x6DD8 +0xC5F2 0x6E6F +0xC5F3 0x6D9B +0xC5F4 0x706F +0xC5F5 0x71C8 +0xC5F6 0x5F53 +0xC5F7 0x75D8 +0xC5F8 0x7977 +0xC5F9 0x7B49 +0xC5FA 0x7B54 +0xC5FB 0x7B52 +0xC5FC 0x7CD6 +0xC5FD 0x7D71 +0xC5FE 0x5230 +0xC6A1 0x8463 +0xC6A2 0x8569 +0xC6A3 0x85E4 +0xC6A4 0x8A0E +0xC6A5 0x8B04 +0xC6A6 0x8C46 +0xC6A7 0x8E0F +0xC6A8 0x9003 +0xC6A9 0x900F +0xC6AA 0x9419 +0xC6AB 0x9676 +0xC6AC 0x982D +0xC6AD 0x9A30 +0xC6AE 0x95D8 +0xC6AF 0x50CD +0xC6B0 0x52D5 +0xC6B1 0x540C +0xC6B2 0x5802 +0xC6B3 0x5C0E +0xC6B4 0x61A7 +0xC6B5 0x649E +0xC6B6 0x6D1E +0xC6B7 0x77B3 +0xC6B8 0x7AE5 +0xC6B9 0x80F4 +0xC6BA 0x8404 +0xC6BB 0x9053 +0xC6BC 0x9285 +0xC6BD 0x5CE0 +0xC6BE 0x9D07 +0xC6BF 0x533F +0xC6C0 0x5F97 +0xC6C1 0x5FB3 +0xC6C2 0x6D9C +0xC6C3 0x7279 +0xC6C4 0x7763 +0xC6C5 0x79BF +0xC6C6 0x7BE4 +0xC6C7 0x6BD2 +0xC6C8 0x72EC +0xC6C9 0x8AAD +0xC6CA 0x6803 +0xC6CB 0x6A61 +0xC6CC 0x51F8 +0xC6CD 0x7A81 +0xC6CE 0x6934 +0xC6CF 0x5C4A +0xC6D0 0x9CF6 +0xC6D1 0x82EB +0xC6D2 0x5BC5 +0xC6D3 0x9149 +0xC6D4 0x701E +0xC6D5 0x5678 +0xC6D6 0x5C6F +0xC6D7 0x60C7 +0xC6D8 0x6566 +0xC6D9 0x6C8C +0xC6DA 0x8C5A +0xC6DB 0x9041 +0xC6DC 0x9813 +0xC6DD 0x5451 +0xC6DE 0x66C7 +0xC6DF 0x920D +0xC6E0 0x5948 +0xC6E1 0x90A3 +0xC6E2 0x5185 +0xC6E3 0x4E4D +0xC6E4 0x51EA +0xC6E5 0x8599 +0xC6E6 0x8B0E +0xC6E7 0x7058 +0xC6E8 0x637A +0xC6E9 0x934B +0xC6EA 0x6962 +0xC6EB 0x99B4 +0xC6EC 0x7E04 +0xC6ED 0x7577 +0xC6EE 0x5357 +0xC6EF 0x6960 +0xC6F0 0x8EDF +0xC6F1 0x96E3 +0xC6F2 0x6C5D +0xC6F3 0x4E8C +0xC6F4 0x5C3C +0xC6F5 0x5F10 +0xC6F6 0x8FE9 +0xC6F7 0x5302 +0xC6F8 0x8CD1 +0xC6F9 0x8089 +0xC6FA 0x8679 +0xC6FB 0x5EFF +0xC6FC 0x65E5 +0xC6FD 0x4E73 +0xC6FE 0x5165 +0xC7A1 0x5982 +0xC7A2 0x5C3F +0xC7A3 0x97EE +0xC7A4 0x4EFB +0xC7A5 0x598A +0xC7A6 0x5FCD +0xC7A7 0x8A8D +0xC7A8 0x6FE1 +0xC7A9 0x79B0 +0xC7AA 0x7962 +0xC7AB 0x5BE7 +0xC7AC 0x8471 +0xC7AD 0x732B +0xC7AE 0x71B1 +0xC7AF 0x5E74 +0xC7B0 0x5FF5 +0xC7B1 0x637B +0xC7B2 0x649A +0xC7B3 0x71C3 +0xC7B4 0x7C98 +0xC7B5 0x4E43 +0xC7B6 0x5EFC +0xC7B7 0x4E4B +0xC7B8 0x57DC +0xC7B9 0x56A2 +0xC7BA 0x60A9 +0xC7BB 0x6FC3 +0xC7BC 0x7D0D +0xC7BD 0x80FD +0xC7BE 0x8133 +0xC7BF 0x81BF +0xC7C0 0x8FB2 +0xC7C1 0x8997 +0xC7C2 0x86A4 +0xC7C3 0x5DF4 +0xC7C4 0x628A +0xC7C5 0x64AD +0xC7C6 0x8987 +0xC7C7 0x6777 +0xC7C8 0x6CE2 +0xC7C9 0x6D3E +0xC7CA 0x7436 +0xC7CB 0x7834 +0xC7CC 0x5A46 +0xC7CD 0x7F75 +0xC7CE 0x82AD +0xC7CF 0x99AC +0xC7D0 0x4FF3 +0xC7D1 0x5EC3 +0xC7D2 0x62DD +0xC7D3 0x6392 +0xC7D4 0x6557 +0xC7D5 0x676F +0xC7D6 0x76C3 +0xC7D7 0x724C +0xC7D8 0x80CC +0xC7D9 0x80BA +0xC7DA 0x8F29 +0xC7DB 0x914D +0xC7DC 0x500D +0xC7DD 0x57F9 +0xC7DE 0x5A92 +0xC7DF 0x6885 +0xC7E0 0x6973 +0xC7E1 0x7164 +0xC7E2 0x72FD +0xC7E3 0x8CB7 +0xC7E4 0x58F2 +0xC7E5 0x8CE0 +0xC7E6 0x966A +0xC7E7 0x9019 +0xC7E8 0x877F +0xC7E9 0x79E4 +0xC7EA 0x77E7 +0xC7EB 0x8429 +0xC7EC 0x4F2F +0xC7ED 0x5265 +0xC7EE 0x535A +0xC7EF 0x62CD +0xC7F0 0x67CF +0xC7F1 0x6CCA +0xC7F2 0x767D +0xC7F3 0x7B94 +0xC7F4 0x7C95 +0xC7F5 0x8236 +0xC7F6 0x8584 +0xC7F7 0x8FEB +0xC7F8 0x66DD +0xC7F9 0x6F20 +0xC7FA 0x7206 +0xC7FB 0x7E1B +0xC7FC 0x83AB +0xC7FD 0x99C1 +0xC7FE 0x9EA6 +0xC8A1 0x51FD +0xC8A2 0x7BB1 +0xC8A3 0x7872 +0xC8A4 0x7BB8 +0xC8A5 0x8087 +0xC8A6 0x7B48 +0xC8A7 0x6AE8 +0xC8A8 0x5E61 +0xC8A9 0x808C +0xC8AA 0x7551 +0xC8AB 0x7560 +0xC8AC 0x516B +0xC8AD 0x9262 +0xC8AE 0x6E8C +0xC8AF 0x767A +0xC8B0 0x9197 +0xC8B1 0x9AEA +0xC8B2 0x4F10 +0xC8B3 0x7F70 +0xC8B4 0x629C +0xC8B5 0x7B4F +0xC8B6 0x95A5 +0xC8B7 0x9CE9 +0xC8B8 0x567A +0xC8B9 0x5859 +0xC8BA 0x86E4 +0xC8BB 0x96BC +0xC8BC 0x4F34 +0xC8BD 0x5224 +0xC8BE 0x534A +0xC8BF 0x53CD +0xC8C0 0x53DB +0xC8C1 0x5E06 +0xC8C2 0x642C +0xC8C3 0x6591 +0xC8C4 0x677F +0xC8C5 0x6C3E +0xC8C6 0x6C4E +0xC8C7 0x7248 +0xC8C8 0x72AF +0xC8C9 0x73ED +0xC8CA 0x7554 +0xC8CB 0x7E41 +0xC8CC 0x822C +0xC8CD 0x85E9 +0xC8CE 0x8CA9 +0xC8CF 0x7BC4 +0xC8D0 0x91C6 +0xC8D1 0x7169 +0xC8D2 0x9812 +0xC8D3 0x98EF +0xC8D4 0x633D +0xC8D5 0x6669 +0xC8D6 0x756A +0xC8D7 0x76E4 +0xC8D8 0x78D0 +0xC8D9 0x8543 +0xC8DA 0x86EE +0xC8DB 0x532A +0xC8DC 0x5351 +0xC8DD 0x5426 +0xC8DE 0x5983 +0xC8DF 0x5E87 +0xC8E0 0x5F7C +0xC8E1 0x60B2 +0xC8E2 0x6249 +0xC8E3 0x6279 +0xC8E4 0x62AB +0xC8E5 0x6590 +0xC8E6 0x6BD4 +0xC8E7 0x6CCC +0xC8E8 0x75B2 +0xC8E9 0x76AE +0xC8EA 0x7891 +0xC8EB 0x79D8 +0xC8EC 0x7DCB +0xC8ED 0x7F77 +0xC8EE 0x80A5 +0xC8EF 0x88AB +0xC8F0 0x8AB9 +0xC8F1 0x8CBB +0xC8F2 0x907F +0xC8F3 0x975E +0xC8F4 0x98DB +0xC8F5 0x6A0B +0xC8F6 0x7C38 +0xC8F7 0x5099 +0xC8F8 0x5C3E +0xC8F9 0x5FAE +0xC8FA 0x6787 +0xC8FB 0x6BD8 +0xC8FC 0x7435 +0xC8FD 0x7709 +0xC8FE 0x7F8E +0xC9A1 0x9F3B +0xC9A2 0x67CA +0xC9A3 0x7A17 +0xC9A4 0x5339 +0xC9A5 0x758B +0xC9A6 0x9AED +0xC9A7 0x5F66 +0xC9A8 0x819D +0xC9A9 0x83F1 +0xC9AA 0x8098 +0xC9AB 0x5F3C +0xC9AC 0x5FC5 +0xC9AD 0x7562 +0xC9AE 0x7B46 +0xC9AF 0x903C +0xC9B0 0x6867 +0xC9B1 0x59EB +0xC9B2 0x5A9B +0xC9B3 0x7D10 +0xC9B4 0x767E +0xC9B5 0x8B2C +0xC9B6 0x4FF5 +0xC9B7 0x5F6A +0xC9B8 0x6A19 +0xC9B9 0x6C37 +0xC9BA 0x6F02 +0xC9BB 0x74E2 +0xC9BC 0x7968 +0xC9BD 0x8868 +0xC9BE 0x8A55 +0xC9BF 0x8C79 +0xC9C0 0x5EDF +0xC9C1 0x63CF +0xC9C2 0x75C5 +0xC9C3 0x79D2 +0xC9C4 0x82D7 +0xC9C5 0x9328 +0xC9C6 0x92F2 +0xC9C7 0x849C +0xC9C8 0x86ED +0xC9C9 0x9C2D +0xC9CA 0x54C1 +0xC9CB 0x5F6C +0xC9CC 0x658C +0xC9CD 0x6D5C +0xC9CE 0x7015 +0xC9CF 0x8CA7 +0xC9D0 0x8CD3 +0xC9D1 0x983B +0xC9D2 0x654F +0xC9D3 0x74F6 +0xC9D4 0x4E0D +0xC9D5 0x4ED8 +0xC9D6 0x57E0 +0xC9D7 0x592B +0xC9D8 0x5A66 +0xC9D9 0x5BCC +0xC9DA 0x51A8 +0xC9DB 0x5E03 +0xC9DC 0x5E9C +0xC9DD 0x6016 +0xC9DE 0x6276 +0xC9DF 0x6577 +0xC9E0 0x65A7 +0xC9E1 0x666E +0xC9E2 0x6D6E +0xC9E3 0x7236 +0xC9E4 0x7B26 +0xC9E5 0x8150 +0xC9E6 0x819A +0xC9E7 0x8299 +0xC9E8 0x8B5C +0xC9E9 0x8CA0 +0xC9EA 0x8CE6 +0xC9EB 0x8D74 +0xC9EC 0x961C +0xC9ED 0x9644 +0xC9EE 0x4FAE +0xC9EF 0x64AB +0xC9F0 0x6B66 +0xC9F1 0x821E +0xC9F2 0x8461 +0xC9F3 0x856A +0xC9F4 0x90E8 +0xC9F5 0x5C01 +0xC9F6 0x6953 +0xC9F7 0x98A8 +0xC9F8 0x847A +0xC9F9 0x8557 +0xC9FA 0x4F0F +0xC9FB 0x526F +0xC9FC 0x5FA9 +0xC9FD 0x5E45 +0xC9FE 0x670D +0xCAA1 0x798F +0xCAA2 0x8179 +0xCAA3 0x8907 +0xCAA4 0x8986 +0xCAA5 0x6DF5 +0xCAA6 0x5F17 +0xCAA7 0x6255 +0xCAA8 0x6CB8 +0xCAA9 0x4ECF +0xCAAA 0x7269 +0xCAAB 0x9B92 +0xCAAC 0x5206 +0xCAAD 0x543B +0xCAAE 0x5674 +0xCAAF 0x58B3 +0xCAB0 0x61A4 +0xCAB1 0x626E +0xCAB2 0x711A +0xCAB3 0x596E +0xCAB4 0x7C89 +0xCAB5 0x7CDE +0xCAB6 0x7D1B +0xCAB7 0x96F0 +0xCAB8 0x6587 +0xCAB9 0x805E +0xCABA 0x4E19 +0xCABB 0x4F75 +0xCABC 0x5175 +0xCABD 0x5840 +0xCABE 0x5E63 +0xCABF 0x5E73 +0xCAC0 0x5F0A +0xCAC1 0x67C4 +0xCAC2 0x4E26 +0xCAC3 0x853D +0xCAC4 0x9589 +0xCAC5 0x965B +0xCAC6 0x7C73 +0xCAC7 0x9801 +0xCAC8 0x50FB +0xCAC9 0x58C1 +0xCACA 0x7656 +0xCACB 0x78A7 +0xCACC 0x5225 +0xCACD 0x77A5 +0xCACE 0x8511 +0xCACF 0x7B86 +0xCAD0 0x504F +0xCAD1 0x5909 +0xCAD2 0x7247 +0xCAD3 0x7BC7 +0xCAD4 0x7DE8 +0xCAD5 0x8FBA +0xCAD6 0x8FD4 +0xCAD7 0x904D +0xCAD8 0x4FBF +0xCAD9 0x52C9 +0xCADA 0x5A29 +0xCADB 0x5F01 +0xCADC 0x97AD +0xCADD 0x4FDD +0xCADE 0x8217 +0xCADF 0x92EA +0xCAE0 0x5703 +0xCAE1 0x6355 +0xCAE2 0x6B69 +0xCAE3 0x752B +0xCAE4 0x88DC +0xCAE5 0x8F14 +0xCAE6 0x7A42 +0xCAE7 0x52DF +0xCAE8 0x5893 +0xCAE9 0x6155 +0xCAEA 0x620A +0xCAEB 0x66AE +0xCAEC 0x6BCD +0xCAED 0x7C3F +0xCAEE 0x83E9 +0xCAEF 0x5023 +0xCAF0 0x4FF8 +0xCAF1 0x5305 +0xCAF2 0x5446 +0xCAF3 0x5831 +0xCAF4 0x5949 +0xCAF5 0x5B9D +0xCAF6 0x5CF0 +0xCAF7 0x5CEF +0xCAF8 0x5D29 +0xCAF9 0x5E96 +0xCAFA 0x62B1 +0xCAFB 0x6367 +0xCAFC 0x653E +0xCAFD 0x65B9 +0xCAFE 0x670B +0xCBA1 0x6CD5 +0xCBA2 0x6CE1 +0xCBA3 0x70F9 +0xCBA4 0x7832 +0xCBA5 0x7E2B +0xCBA6 0x80DE +0xCBA7 0x82B3 +0xCBA8 0x840C +0xCBA9 0x84EC +0xCBAA 0x8702 +0xCBAB 0x8912 +0xCBAC 0x8A2A +0xCBAD 0x8C4A +0xCBAE 0x90A6 +0xCBAF 0x92D2 +0xCBB0 0x98FD +0xCBB1 0x9CF3 +0xCBB2 0x9D6C +0xCBB3 0x4E4F +0xCBB4 0x4EA1 +0xCBB5 0x508D +0xCBB6 0x5256 +0xCBB7 0x574A +0xCBB8 0x59A8 +0xCBB9 0x5E3D +0xCBBA 0x5FD8 +0xCBBB 0x5FD9 +0xCBBC 0x623F +0xCBBD 0x66B4 +0xCBBE 0x671B +0xCBBF 0x67D0 +0xCBC0 0x68D2 +0xCBC1 0x5192 +0xCBC2 0x7D21 +0xCBC3 0x80AA +0xCBC4 0x81A8 +0xCBC5 0x8B00 +0xCBC6 0x8C8C +0xCBC7 0x8CBF +0xCBC8 0x927E +0xCBC9 0x9632 +0xCBCA 0x5420 +0xCBCB 0x982C +0xCBCC 0x5317 +0xCBCD 0x50D5 +0xCBCE 0x535C +0xCBCF 0x58A8 +0xCBD0 0x64B2 +0xCBD1 0x6734 +0xCBD2 0x7267 +0xCBD3 0x7766 +0xCBD4 0x7A46 +0xCBD5 0x91E6 +0xCBD6 0x52C3 +0xCBD7 0x6CA1 +0xCBD8 0x6B86 +0xCBD9 0x5800 +0xCBDA 0x5E4C +0xCBDB 0x5954 +0xCBDC 0x672C +0xCBDD 0x7FFB +0xCBDE 0x51E1 +0xCBDF 0x76C6 +0xCBE0 0x6469 +0xCBE1 0x78E8 +0xCBE2 0x9B54 +0xCBE3 0x9EBB +0xCBE4 0x57CB +0xCBE5 0x59B9 +0xCBE6 0x6627 +0xCBE7 0x679A +0xCBE8 0x6BCE +0xCBE9 0x54E9 +0xCBEA 0x69D9 +0xCBEB 0x5E55 +0xCBEC 0x819C +0xCBED 0x6795 +0xCBEE 0x9BAA +0xCBEF 0x67FE +0xCBF0 0x9C52 +0xCBF1 0x685D +0xCBF2 0x4EA6 +0xCBF3 0x4FE3 +0xCBF4 0x53C8 +0xCBF5 0x62B9 +0xCBF6 0x672B +0xCBF7 0x6CAB +0xCBF8 0x8FC4 +0xCBF9 0x4FAD +0xCBFA 0x7E6D +0xCBFB 0x9EBF +0xCBFC 0x4E07 +0xCBFD 0x6162 +0xCBFE 0x6E80 +0xCCA1 0x6F2B +0xCCA2 0x8513 +0xCCA3 0x5473 +0xCCA4 0x672A +0xCCA5 0x9B45 +0xCCA6 0x5DF3 +0xCCA7 0x7B95 +0xCCA8 0x5CAC +0xCCA9 0x5BC6 +0xCCAA 0x871C +0xCCAB 0x6E4A +0xCCAC 0x84D1 +0xCCAD 0x7A14 +0xCCAE 0x8108 +0xCCAF 0x5999 +0xCCB0 0x7C8D +0xCCB1 0x6C11 +0xCCB2 0x7720 +0xCCB3 0x52D9 +0xCCB4 0x5922 +0xCCB5 0x7121 +0xCCB6 0x725F +0xCCB7 0x77DB +0xCCB8 0x9727 +0xCCB9 0x9D61 +0xCCBA 0x690B +0xCCBB 0x5A7F +0xCCBC 0x5A18 +0xCCBD 0x51A5 +0xCCBE 0x540D +0xCCBF 0x547D +0xCCC0 0x660E +0xCCC1 0x76DF +0xCCC2 0x8FF7 +0xCCC3 0x9298 +0xCCC4 0x9CF4 +0xCCC5 0x59EA +0xCCC6 0x725D +0xCCC7 0x6EC5 +0xCCC8 0x514D +0xCCC9 0x68C9 +0xCCCA 0x7DBF +0xCCCB 0x7DEC +0xCCCC 0x9762 +0xCCCD 0x9EBA +0xCCCE 0x6478 +0xCCCF 0x6A21 +0xCCD0 0x8302 +0xCCD1 0x5984 +0xCCD2 0x5B5F +0xCCD3 0x6BDB +0xCCD4 0x731B +0xCCD5 0x76F2 +0xCCD6 0x7DB2 +0xCCD7 0x8017 +0xCCD8 0x8499 +0xCCD9 0x5132 +0xCCDA 0x6728 +0xCCDB 0x9ED9 +0xCCDC 0x76EE +0xCCDD 0x6762 +0xCCDE 0x52FF +0xCCDF 0x9905 +0xCCE0 0x5C24 +0xCCE1 0x623B +0xCCE2 0x7C7E +0xCCE3 0x8CB0 +0xCCE4 0x554F +0xCCE5 0x60B6 +0xCCE6 0x7D0B +0xCCE7 0x9580 +0xCCE8 0x5301 +0xCCE9 0x4E5F +0xCCEA 0x51B6 +0xCCEB 0x591C +0xCCEC 0x723A +0xCCED 0x8036 +0xCCEE 0x91CE +0xCCEF 0x5F25 +0xCCF0 0x77E2 +0xCCF1 0x5384 +0xCCF2 0x5F79 +0xCCF3 0x7D04 +0xCCF4 0x85AC +0xCCF5 0x8A33 +0xCCF6 0x8E8D +0xCCF7 0x9756 +0xCCF8 0x67F3 +0xCCF9 0x85AE +0xCCFA 0x9453 +0xCCFB 0x6109 +0xCCFC 0x6108 +0xCCFD 0x6CB9 +0xCCFE 0x7652 +0xCDA1 0x8AED +0xCDA2 0x8F38 +0xCDA3 0x552F +0xCDA4 0x4F51 +0xCDA5 0x512A +0xCDA6 0x52C7 +0xCDA7 0x53CB +0xCDA8 0x5BA5 +0xCDA9 0x5E7D +0xCDAA 0x60A0 +0xCDAB 0x6182 +0xCDAC 0x63D6 +0xCDAD 0x6709 +0xCDAE 0x67DA +0xCDAF 0x6E67 +0xCDB0 0x6D8C +0xCDB1 0x7336 +0xCDB2 0x7337 +0xCDB3 0x7531 +0xCDB4 0x7950 +0xCDB5 0x88D5 +0xCDB6 0x8A98 +0xCDB7 0x904A +0xCDB8 0x9091 +0xCDB9 0x90F5 +0xCDBA 0x96C4 +0xCDBB 0x878D +0xCDBC 0x5915 +0xCDBD 0x4E88 +0xCDBE 0x4F59 +0xCDBF 0x4E0E +0xCDC0 0x8A89 +0xCDC1 0x8F3F +0xCDC2 0x9810 +0xCDC3 0x50AD +0xCDC4 0x5E7C +0xCDC5 0x5996 +0xCDC6 0x5BB9 +0xCDC7 0x5EB8 +0xCDC8 0x63DA +0xCDC9 0x63FA +0xCDCA 0x64C1 +0xCDCB 0x66DC +0xCDCC 0x694A +0xCDCD 0x69D8 +0xCDCE 0x6D0B +0xCDCF 0x6EB6 +0xCDD0 0x7194 +0xCDD1 0x7528 +0xCDD2 0x7AAF +0xCDD3 0x7F8A +0xCDD4 0x8000 +0xCDD5 0x8449 +0xCDD6 0x84C9 +0xCDD7 0x8981 +0xCDD8 0x8B21 +0xCDD9 0x8E0A +0xCDDA 0x9065 +0xCDDB 0x967D +0xCDDC 0x990A +0xCDDD 0x617E +0xCDDE 0x6291 +0xCDDF 0x6B32 +0xCDE0 0x6C83 +0xCDE1 0x6D74 +0xCDE2 0x7FCC +0xCDE3 0x7FFC +0xCDE4 0x6DC0 +0xCDE5 0x7F85 +0xCDE6 0x87BA +0xCDE7 0x88F8 +0xCDE8 0x6765 +0xCDE9 0x83B1 +0xCDEA 0x983C +0xCDEB 0x96F7 +0xCDEC 0x6D1B +0xCDED 0x7D61 +0xCDEE 0x843D +0xCDEF 0x916A +0xCDF0 0x4E71 +0xCDF1 0x5375 +0xCDF2 0x5D50 +0xCDF3 0x6B04 +0xCDF4 0x6FEB +0xCDF5 0x85CD +0xCDF6 0x862D +0xCDF7 0x89A7 +0xCDF8 0x5229 +0xCDF9 0x540F +0xCDFA 0x5C65 +0xCDFB 0x674E +0xCDFC 0x68A8 +0xCDFD 0x7406 +0xCDFE 0x7483 +0xCEA1 0x75E2 +0xCEA2 0x88CF +0xCEA3 0x88E1 +0xCEA4 0x91CC +0xCEA5 0x96E2 +0xCEA6 0x9678 +0xCEA7 0x5F8B +0xCEA8 0x7387 +0xCEA9 0x7ACB +0xCEAA 0x844E +0xCEAB 0x63A0 +0xCEAC 0x7565 +0xCEAD 0x5289 +0xCEAE 0x6D41 +0xCEAF 0x6E9C +0xCEB0 0x7409 +0xCEB1 0x7559 +0xCEB2 0x786B +0xCEB3 0x7C92 +0xCEB4 0x9686 +0xCEB5 0x7ADC +0xCEB6 0x9F8D +0xCEB7 0x4FB6 +0xCEB8 0x616E +0xCEB9 0x65C5 +0xCEBA 0x865C +0xCEBB 0x4E86 +0xCEBC 0x4EAE +0xCEBD 0x50DA +0xCEBE 0x4E21 +0xCEBF 0x51CC +0xCEC0 0x5BEE +0xCEC1 0x6599 +0xCEC2 0x6881 +0xCEC3 0x6DBC +0xCEC4 0x731F +0xCEC5 0x7642 +0xCEC6 0x77AD +0xCEC7 0x7A1C +0xCEC8 0x7CE7 +0xCEC9 0x826F +0xCECA 0x8AD2 +0xCECB 0x907C +0xCECC 0x91CF +0xCECD 0x9675 +0xCECE 0x9818 +0xCECF 0x529B +0xCED0 0x7DD1 +0xCED1 0x502B +0xCED2 0x5398 +0xCED3 0x6797 +0xCED4 0x6DCB +0xCED5 0x71D0 +0xCED6 0x7433 +0xCED7 0x81E8 +0xCED8 0x8F2A +0xCED9 0x96A3 +0xCEDA 0x9C57 +0xCEDB 0x9E9F +0xCEDC 0x7460 +0xCEDD 0x5841 +0xCEDE 0x6D99 +0xCEDF 0x7D2F +0xCEE0 0x985E +0xCEE1 0x4EE4 +0xCEE2 0x4F36 +0xCEE3 0x4F8B +0xCEE4 0x51B7 +0xCEE5 0x52B1 +0xCEE6 0x5DBA +0xCEE7 0x601C +0xCEE8 0x73B2 +0xCEE9 0x793C +0xCEEA 0x82D3 +0xCEEB 0x9234 +0xCEEC 0x96B7 +0xCEED 0x96F6 +0xCEEE 0x970A +0xCEEF 0x9E97 +0xCEF0 0x9F62 +0xCEF1 0x66A6 +0xCEF2 0x6B74 +0xCEF3 0x5217 +0xCEF4 0x52A3 +0xCEF5 0x70C8 +0xCEF6 0x88C2 +0xCEF7 0x5EC9 +0xCEF8 0x604B +0xCEF9 0x6190 +0xCEFA 0x6F23 +0xCEFB 0x7149 +0xCEFC 0x7C3E +0xCEFD 0x7DF4 +0xCEFE 0x806F +0xCFA1 0x84EE +0xCFA2 0x9023 +0xCFA3 0x932C +0xCFA4 0x5442 +0xCFA5 0x9B6F +0xCFA6 0x6AD3 +0xCFA7 0x7089 +0xCFA8 0x8CC2 +0xCFA9 0x8DEF +0xCFAA 0x9732 +0xCFAB 0x52B4 +0xCFAC 0x5A41 +0xCFAD 0x5ECA +0xCFAE 0x5F04 +0xCFAF 0x6717 +0xCFB0 0x697C +0xCFB1 0x6994 +0xCFB2 0x6D6A +0xCFB3 0x6F0F +0xCFB4 0x7262 +0xCFB5 0x72FC +0xCFB6 0x7BED +0xCFB7 0x8001 +0xCFB8 0x807E +0xCFB9 0x874B +0xCFBA 0x90CE +0xCFBB 0x516D +0xCFBC 0x9E93 +0xCFBD 0x7984 +0xCFBE 0x808B +0xCFBF 0x9332 +0xCFC0 0x8AD6 +0xCFC1 0x502D +0xCFC2 0x548C +0xCFC3 0x8A71 +0xCFC4 0x6B6A +0xCFC5 0x8CC4 +0xCFC6 0x8107 +0xCFC7 0x60D1 +0xCFC8 0x67A0 +0xCFC9 0x9DF2 +0xCFCA 0x4E99 +0xCFCB 0x4E98 +0xCFCC 0x9C10 +0xCFCD 0x8A6B +0xCFCE 0x85C1 +0xCFCF 0x8568 +0xCFD0 0x6900 +0xCFD1 0x6E7E +0xCFD2 0x7897 +0xCFD3 0x8155 +0xD0A1 0x5F0C +0xD0A2 0x4E10 +0xD0A3 0x4E15 +0xD0A4 0x4E2A +0xD0A5 0x4E31 +0xD0A6 0x4E36 +0xD0A7 0x4E3C +0xD0A8 0x4E3F +0xD0A9 0x4E42 +0xD0AA 0x4E56 +0xD0AB 0x4E58 +0xD0AC 0x4E82 +0xD0AD 0x4E85 +0xD0AE 0x8C6B +0xD0AF 0x4E8A +0xD0B0 0x8212 +0xD0B1 0x5F0D +0xD0B2 0x4E8E +0xD0B3 0x4E9E +0xD0B4 0x4E9F +0xD0B5 0x4EA0 +0xD0B6 0x4EA2 +0xD0B7 0x4EB0 +0xD0B8 0x4EB3 +0xD0B9 0x4EB6 +0xD0BA 0x4ECE +0xD0BB 0x4ECD +0xD0BC 0x4EC4 +0xD0BD 0x4EC6 +0xD0BE 0x4EC2 +0xD0BF 0x4ED7 +0xD0C0 0x4EDE +0xD0C1 0x4EED +0xD0C2 0x4EDF +0xD0C3 0x4EF7 +0xD0C4 0x4F09 +0xD0C5 0x4F5A +0xD0C6 0x4F30 +0xD0C7 0x4F5B +0xD0C8 0x4F5D +0xD0C9 0x4F57 +0xD0CA 0x4F47 +0xD0CB 0x4F76 +0xD0CC 0x4F88 +0xD0CD 0x4F8F +0xD0CE 0x4F98 +0xD0CF 0x4F7B +0xD0D0 0x4F69 +0xD0D1 0x4F70 +0xD0D2 0x4F91 +0xD0D3 0x4F6F +0xD0D4 0x4F86 +0xD0D5 0x4F96 +0xD0D6 0x5118 +0xD0D7 0x4FD4 +0xD0D8 0x4FDF +0xD0D9 0x4FCE +0xD0DA 0x4FD8 +0xD0DB 0x4FDB +0xD0DC 0x4FD1 +0xD0DD 0x4FDA +0xD0DE 0x4FD0 +0xD0DF 0x4FE4 +0xD0E0 0x4FE5 +0xD0E1 0x501A +0xD0E2 0x5028 +0xD0E3 0x5014 +0xD0E4 0x502A +0xD0E5 0x5025 +0xD0E6 0x5005 +0xD0E7 0x4F1C +0xD0E8 0x4FF6 +0xD0E9 0x5021 +0xD0EA 0x5029 +0xD0EB 0x502C +0xD0EC 0x4FFE +0xD0ED 0x4FEF +0xD0EE 0x5011 +0xD0EF 0x5006 +0xD0F0 0x5043 +0xD0F1 0x5047 +0xD0F2 0x6703 +0xD0F3 0x5055 +0xD0F4 0x5050 +0xD0F5 0x5048 +0xD0F6 0x505A +0xD0F7 0x5056 +0xD0F8 0x506C +0xD0F9 0x5078 +0xD0FA 0x5080 +0xD0FB 0x509A +0xD0FC 0x5085 +0xD0FD 0x50B4 +0xD0FE 0x50B2 +0xD1A1 0x50C9 +0xD1A2 0x50CA +0xD1A3 0x50B3 +0xD1A4 0x50C2 +0xD1A5 0x50D6 +0xD1A6 0x50DE +0xD1A7 0x50E5 +0xD1A8 0x50ED +0xD1A9 0x50E3 +0xD1AA 0x50EE +0xD1AB 0x50F9 +0xD1AC 0x50F5 +0xD1AD 0x5109 +0xD1AE 0x5101 +0xD1AF 0x5102 +0xD1B0 0x5116 +0xD1B1 0x5115 +0xD1B2 0x5114 +0xD1B3 0x511A +0xD1B4 0x5121 +0xD1B5 0x513A +0xD1B6 0x5137 +0xD1B7 0x513C +0xD1B8 0x513B +0xD1B9 0x513F +0xD1BA 0x5140 +0xD1BB 0x5152 +0xD1BC 0x514C +0xD1BD 0x5154 +0xD1BE 0x5162 +0xD1BF 0x7AF8 +0xD1C0 0x5169 +0xD1C1 0x516A +0xD1C2 0x516E +0xD1C3 0x5180 +0xD1C4 0x5182 +0xD1C5 0x56D8 +0xD1C6 0x518C +0xD1C7 0x5189 +0xD1C8 0x518F +0xD1C9 0x5191 +0xD1CA 0x5193 +0xD1CB 0x5195 +0xD1CC 0x5196 +0xD1CD 0x51A4 +0xD1CE 0x51A6 +0xD1CF 0x51A2 +0xD1D0 0x51A9 +0xD1D1 0x51AA +0xD1D2 0x51AB +0xD1D3 0x51B3 +0xD1D4 0x51B1 +0xD1D5 0x51B2 +0xD1D6 0x51B0 +0xD1D7 0x51B5 +0xD1D8 0x51BD +0xD1D9 0x51C5 +0xD1DA 0x51C9 +0xD1DB 0x51DB +0xD1DC 0x51E0 +0xD1DD 0x8655 +0xD1DE 0x51E9 +0xD1DF 0x51ED +0xD1E0 0x51F0 +0xD1E1 0x51F5 +0xD1E2 0x51FE +0xD1E3 0x5204 +0xD1E4 0x520B +0xD1E5 0x5214 +0xD1E6 0x520E +0xD1E7 0x5227 +0xD1E8 0x522A +0xD1E9 0x522E +0xD1EA 0x5233 +0xD1EB 0x5239 +0xD1EC 0x524F +0xD1ED 0x5244 +0xD1EE 0x524B +0xD1EF 0x524C +0xD1F0 0x525E +0xD1F1 0x5254 +0xD1F2 0x526A +0xD1F3 0x5274 +0xD1F4 0x5269 +0xD1F5 0x5273 +0xD1F6 0x527F +0xD1F7 0x527D +0xD1F8 0x528D +0xD1F9 0x5294 +0xD1FA 0x5292 +0xD1FB 0x5271 +0xD1FC 0x5288 +0xD1FD 0x5291 +0xD1FE 0x8FA8 +0xD2A1 0x8FA7 +0xD2A2 0x52AC +0xD2A3 0x52AD +0xD2A4 0x52BC +0xD2A5 0x52B5 +0xD2A6 0x52C1 +0xD2A7 0x52CD +0xD2A8 0x52D7 +0xD2A9 0x52DE +0xD2AA 0x52E3 +0xD2AB 0x52E6 +0xD2AC 0x98ED +0xD2AD 0x52E0 +0xD2AE 0x52F3 +0xD2AF 0x52F5 +0xD2B0 0x52F8 +0xD2B1 0x52F9 +0xD2B2 0x5306 +0xD2B3 0x5308 +0xD2B4 0x7538 +0xD2B5 0x530D +0xD2B6 0x5310 +0xD2B7 0x530F +0xD2B8 0x5315 +0xD2B9 0x531A +0xD2BA 0x5323 +0xD2BB 0x532F +0xD2BC 0x5331 +0xD2BD 0x5333 +0xD2BE 0x5338 +0xD2BF 0x5340 +0xD2C0 0x5346 +0xD2C1 0x5345 +0xD2C2 0x4E17 +0xD2C3 0x5349 +0xD2C4 0x534D +0xD2C5 0x51D6 +0xD2C6 0x535E +0xD2C7 0x5369 +0xD2C8 0x536E +0xD2C9 0x5918 +0xD2CA 0x537B +0xD2CB 0x5377 +0xD2CC 0x5382 +0xD2CD 0x5396 +0xD2CE 0x53A0 +0xD2CF 0x53A6 +0xD2D0 0x53A5 +0xD2D1 0x53AE +0xD2D2 0x53B0 +0xD2D3 0x53B6 +0xD2D4 0x53C3 +0xD2D5 0x7C12 +0xD2D6 0x96D9 +0xD2D7 0x53DF +0xD2D8 0x66FC +0xD2D9 0x71EE +0xD2DA 0x53EE +0xD2DB 0x53E8 +0xD2DC 0x53ED +0xD2DD 0x53FA +0xD2DE 0x5401 +0xD2DF 0x543D +0xD2E0 0x5440 +0xD2E1 0x542C +0xD2E2 0x542D +0xD2E3 0x543C +0xD2E4 0x542E +0xD2E5 0x5436 +0xD2E6 0x5429 +0xD2E7 0x541D +0xD2E8 0x544E +0xD2E9 0x548F +0xD2EA 0x5475 +0xD2EB 0x548E +0xD2EC 0x545F +0xD2ED 0x5471 +0xD2EE 0x5477 +0xD2EF 0x5470 +0xD2F0 0x5492 +0xD2F1 0x547B +0xD2F2 0x5480 +0xD2F3 0x5476 +0xD2F4 0x5484 +0xD2F5 0x5490 +0xD2F6 0x5486 +0xD2F7 0x54C7 +0xD2F8 0x54A2 +0xD2F9 0x54B8 +0xD2FA 0x54A5 +0xD2FB 0x54AC +0xD2FC 0x54C4 +0xD2FD 0x54C8 +0xD2FE 0x54A8 +0xD3A1 0x54AB +0xD3A2 0x54C2 +0xD3A3 0x54A4 +0xD3A4 0x54BE +0xD3A5 0x54BC +0xD3A6 0x54D8 +0xD3A7 0x54E5 +0xD3A8 0x54E6 +0xD3A9 0x550F +0xD3AA 0x5514 +0xD3AB 0x54FD +0xD3AC 0x54EE +0xD3AD 0x54ED +0xD3AE 0x54FA +0xD3AF 0x54E2 +0xD3B0 0x5539 +0xD3B1 0x5540 +0xD3B2 0x5563 +0xD3B3 0x554C +0xD3B4 0x552E +0xD3B5 0x555C +0xD3B6 0x5545 +0xD3B7 0x5556 +0xD3B8 0x5557 +0xD3B9 0x5538 +0xD3BA 0x5533 +0xD3BB 0x555D +0xD3BC 0x5599 +0xD3BD 0x5580 +0xD3BE 0x54AF +0xD3BF 0x558A +0xD3C0 0x559F +0xD3C1 0x557B +0xD3C2 0x557E +0xD3C3 0x5598 +0xD3C4 0x559E +0xD3C5 0x55AE +0xD3C6 0x557C +0xD3C7 0x5583 +0xD3C8 0x55A9 +0xD3C9 0x5587 +0xD3CA 0x55A8 +0xD3CB 0x55DA +0xD3CC 0x55C5 +0xD3CD 0x55DF +0xD3CE 0x55C4 +0xD3CF 0x55DC +0xD3D0 0x55E4 +0xD3D1 0x55D4 +0xD3D2 0x5614 +0xD3D3 0x55F7 +0xD3D4 0x5616 +0xD3D5 0x55FE +0xD3D6 0x55FD +0xD3D7 0x561B +0xD3D8 0x55F9 +0xD3D9 0x564E +0xD3DA 0x5650 +0xD3DB 0x71DF +0xD3DC 0x5634 +0xD3DD 0x5636 +0xD3DE 0x5632 +0xD3DF 0x5638 +0xD3E0 0x566B +0xD3E1 0x5664 +0xD3E2 0x562F +0xD3E3 0x566C +0xD3E4 0x566A +0xD3E5 0x5686 +0xD3E6 0x5680 +0xD3E7 0x568A +0xD3E8 0x56A0 +0xD3E9 0x5694 +0xD3EA 0x568F +0xD3EB 0x56A5 +0xD3EC 0x56AE +0xD3ED 0x56B6 +0xD3EE 0x56B4 +0xD3EF 0x56C2 +0xD3F0 0x56BC +0xD3F1 0x56C1 +0xD3F2 0x56C3 +0xD3F3 0x56C0 +0xD3F4 0x56C8 +0xD3F5 0x56CE +0xD3F6 0x56D1 +0xD3F7 0x56D3 +0xD3F8 0x56D7 +0xD3F9 0x56EE +0xD3FA 0x56F9 +0xD3FB 0x5700 +0xD3FC 0x56FF +0xD3FD 0x5704 +0xD3FE 0x5709 +0xD4A1 0x5708 +0xD4A2 0x570B +0xD4A3 0x570D +0xD4A4 0x5713 +0xD4A5 0x5718 +0xD4A6 0x5716 +0xD4A7 0x55C7 +0xD4A8 0x571C +0xD4A9 0x5726 +0xD4AA 0x5737 +0xD4AB 0x5738 +0xD4AC 0x574E +0xD4AD 0x573B +0xD4AE 0x5740 +0xD4AF 0x574F +0xD4B0 0x5769 +0xD4B1 0x57C0 +0xD4B2 0x5788 +0xD4B3 0x5761 +0xD4B4 0x577F +0xD4B5 0x5789 +0xD4B6 0x5793 +0xD4B7 0x57A0 +0xD4B8 0x57B3 +0xD4B9 0x57A4 +0xD4BA 0x57AA +0xD4BB 0x57B0 +0xD4BC 0x57C3 +0xD4BD 0x57C6 +0xD4BE 0x57D4 +0xD4BF 0x57D2 +0xD4C0 0x57D3 +0xD4C1 0x580A +0xD4C2 0x57D6 +0xD4C3 0x57E3 +0xD4C4 0x580B +0xD4C5 0x5819 +0xD4C6 0x581D +0xD4C7 0x5872 +0xD4C8 0x5821 +0xD4C9 0x5862 +0xD4CA 0x584B +0xD4CB 0x5870 +0xD4CC 0x6BC0 +0xD4CD 0x5852 +0xD4CE 0x583D +0xD4CF 0x5879 +0xD4D0 0x5885 +0xD4D1 0x58B9 +0xD4D2 0x589F +0xD4D3 0x58AB +0xD4D4 0x58BA +0xD4D5 0x58DE +0xD4D6 0x58BB +0xD4D7 0x58B8 +0xD4D8 0x58AE +0xD4D9 0x58C5 +0xD4DA 0x58D3 +0xD4DB 0x58D1 +0xD4DC 0x58D7 +0xD4DD 0x58D9 +0xD4DE 0x58D8 +0xD4DF 0x58E5 +0xD4E0 0x58DC +0xD4E1 0x58E4 +0xD4E2 0x58DF +0xD4E3 0x58EF +0xD4E4 0x58FA +0xD4E5 0x58F9 +0xD4E6 0x58FB +0xD4E7 0x58FC +0xD4E8 0x58FD +0xD4E9 0x5902 +0xD4EA 0x590A +0xD4EB 0x5910 +0xD4EC 0x591B +0xD4ED 0x68A6 +0xD4EE 0x5925 +0xD4EF 0x592C +0xD4F0 0x592D +0xD4F1 0x5932 +0xD4F2 0x5938 +0xD4F3 0x593E +0xD4F4 0x7AD2 +0xD4F5 0x5955 +0xD4F6 0x5950 +0xD4F7 0x594E +0xD4F8 0x595A +0xD4F9 0x5958 +0xD4FA 0x5962 +0xD4FB 0x5960 +0xD4FC 0x5967 +0xD4FD 0x596C +0xD4FE 0x5969 +0xD5A1 0x5978 +0xD5A2 0x5981 +0xD5A3 0x599D +0xD5A4 0x4F5E +0xD5A5 0x4FAB +0xD5A6 0x59A3 +0xD5A7 0x59B2 +0xD5A8 0x59C6 +0xD5A9 0x59E8 +0xD5AA 0x59DC +0xD5AB 0x598D +0xD5AC 0x59D9 +0xD5AD 0x59DA +0xD5AE 0x5A25 +0xD5AF 0x5A1F +0xD5B0 0x5A11 +0xD5B1 0x5A1C +0xD5B2 0x5A09 +0xD5B3 0x5A1A +0xD5B4 0x5A40 +0xD5B5 0x5A6C +0xD5B6 0x5A49 +0xD5B7 0x5A35 +0xD5B8 0x5A36 +0xD5B9 0x5A62 +0xD5BA 0x5A6A +0xD5BB 0x5A9A +0xD5BC 0x5ABC +0xD5BD 0x5ABE +0xD5BE 0x5ACB +0xD5BF 0x5AC2 +0xD5C0 0x5ABD +0xD5C1 0x5AE3 +0xD5C2 0x5AD7 +0xD5C3 0x5AE6 +0xD5C4 0x5AE9 +0xD5C5 0x5AD6 +0xD5C6 0x5AFA +0xD5C7 0x5AFB +0xD5C8 0x5B0C +0xD5C9 0x5B0B +0xD5CA 0x5B16 +0xD5CB 0x5B32 +0xD5CC 0x5AD0 +0xD5CD 0x5B2A +0xD5CE 0x5B36 +0xD5CF 0x5B3E +0xD5D0 0x5B43 +0xD5D1 0x5B45 +0xD5D2 0x5B40 +0xD5D3 0x5B51 +0xD5D4 0x5B55 +0xD5D5 0x5B5A +0xD5D6 0x5B5B +0xD5D7 0x5B65 +0xD5D8 0x5B69 +0xD5D9 0x5B70 +0xD5DA 0x5B73 +0xD5DB 0x5B75 +0xD5DC 0x5B78 +0xD5DD 0x6588 +0xD5DE 0x5B7A +0xD5DF 0x5B80 +0xD5E0 0x5B83 +0xD5E1 0x5BA6 +0xD5E2 0x5BB8 +0xD5E3 0x5BC3 +0xD5E4 0x5BC7 +0xD5E5 0x5BC9 +0xD5E6 0x5BD4 +0xD5E7 0x5BD0 +0xD5E8 0x5BE4 +0xD5E9 0x5BE6 +0xD5EA 0x5BE2 +0xD5EB 0x5BDE +0xD5EC 0x5BE5 +0xD5ED 0x5BEB +0xD5EE 0x5BF0 +0xD5EF 0x5BF6 +0xD5F0 0x5BF3 +0xD5F1 0x5C05 +0xD5F2 0x5C07 +0xD5F3 0x5C08 +0xD5F4 0x5C0D +0xD5F5 0x5C13 +0xD5F6 0x5C20 +0xD5F7 0x5C22 +0xD5F8 0x5C28 +0xD5F9 0x5C38 +0xD5FA 0x5C39 +0xD5FB 0x5C41 +0xD5FC 0x5C46 +0xD5FD 0x5C4E +0xD5FE 0x5C53 +0xD6A1 0x5C50 +0xD6A2 0x5C4F +0xD6A3 0x5B71 +0xD6A4 0x5C6C +0xD6A5 0x5C6E +0xD6A6 0x4E62 +0xD6A7 0x5C76 +0xD6A8 0x5C79 +0xD6A9 0x5C8C +0xD6AA 0x5C91 +0xD6AB 0x5C94 +0xD6AC 0x599B +0xD6AD 0x5CAB +0xD6AE 0x5CBB +0xD6AF 0x5CB6 +0xD6B0 0x5CBC +0xD6B1 0x5CB7 +0xD6B2 0x5CC5 +0xD6B3 0x5CBE +0xD6B4 0x5CC7 +0xD6B5 0x5CD9 +0xD6B6 0x5CE9 +0xD6B7 0x5CFD +0xD6B8 0x5CFA +0xD6B9 0x5CED +0xD6BA 0x5D8C +0xD6BB 0x5CEA +0xD6BC 0x5D0B +0xD6BD 0x5D15 +0xD6BE 0x5D17 +0xD6BF 0x5D5C +0xD6C0 0x5D1F +0xD6C1 0x5D1B +0xD6C2 0x5D11 +0xD6C3 0x5D14 +0xD6C4 0x5D22 +0xD6C5 0x5D1A +0xD6C6 0x5D19 +0xD6C7 0x5D18 +0xD6C8 0x5D4C +0xD6C9 0x5D52 +0xD6CA 0x5D4E +0xD6CB 0x5D4B +0xD6CC 0x5D6C +0xD6CD 0x5D73 +0xD6CE 0x5D76 +0xD6CF 0x5D87 +0xD6D0 0x5D84 +0xD6D1 0x5D82 +0xD6D2 0x5DA2 +0xD6D3 0x5D9D +0xD6D4 0x5DAC +0xD6D5 0x5DAE +0xD6D6 0x5DBD +0xD6D7 0x5D90 +0xD6D8 0x5DB7 +0xD6D9 0x5DBC +0xD6DA 0x5DC9 +0xD6DB 0x5DCD +0xD6DC 0x5DD3 +0xD6DD 0x5DD2 +0xD6DE 0x5DD6 +0xD6DF 0x5DDB +0xD6E0 0x5DEB +0xD6E1 0x5DF2 +0xD6E2 0x5DF5 +0xD6E3 0x5E0B +0xD6E4 0x5E1A +0xD6E5 0x5E19 +0xD6E6 0x5E11 +0xD6E7 0x5E1B +0xD6E8 0x5E36 +0xD6E9 0x5E37 +0xD6EA 0x5E44 +0xD6EB 0x5E43 +0xD6EC 0x5E40 +0xD6ED 0x5E4E +0xD6EE 0x5E57 +0xD6EF 0x5E54 +0xD6F0 0x5E5F +0xD6F1 0x5E62 +0xD6F2 0x5E64 +0xD6F3 0x5E47 +0xD6F4 0x5E75 +0xD6F5 0x5E76 +0xD6F6 0x5E7A +0xD6F7 0x9EBC +0xD6F8 0x5E7F +0xD6F9 0x5EA0 +0xD6FA 0x5EC1 +0xD6FB 0x5EC2 +0xD6FC 0x5EC8 +0xD6FD 0x5ED0 +0xD6FE 0x5ECF +0xD7A1 0x5ED6 +0xD7A2 0x5EE3 +0xD7A3 0x5EDD +0xD7A4 0x5EDA +0xD7A5 0x5EDB +0xD7A6 0x5EE2 +0xD7A7 0x5EE1 +0xD7A8 0x5EE8 +0xD7A9 0x5EE9 +0xD7AA 0x5EEC +0xD7AB 0x5EF1 +0xD7AC 0x5EF3 +0xD7AD 0x5EF0 +0xD7AE 0x5EF4 +0xD7AF 0x5EF8 +0xD7B0 0x5EFE +0xD7B1 0x5F03 +0xD7B2 0x5F09 +0xD7B3 0x5F5D +0xD7B4 0x5F5C +0xD7B5 0x5F0B +0xD7B6 0x5F11 +0xD7B7 0x5F16 +0xD7B8 0x5F29 +0xD7B9 0x5F2D +0xD7BA 0x5F38 +0xD7BB 0x5F41 +0xD7BC 0x5F48 +0xD7BD 0x5F4C +0xD7BE 0x5F4E +0xD7BF 0x5F2F +0xD7C0 0x5F51 +0xD7C1 0x5F56 +0xD7C2 0x5F57 +0xD7C3 0x5F59 +0xD7C4 0x5F61 +0xD7C5 0x5F6D +0xD7C6 0x5F73 +0xD7C7 0x5F77 +0xD7C8 0x5F83 +0xD7C9 0x5F82 +0xD7CA 0x5F7F +0xD7CB 0x5F8A +0xD7CC 0x5F88 +0xD7CD 0x5F91 +0xD7CE 0x5F87 +0xD7CF 0x5F9E +0xD7D0 0x5F99 +0xD7D1 0x5F98 +0xD7D2 0x5FA0 +0xD7D3 0x5FA8 +0xD7D4 0x5FAD +0xD7D5 0x5FBC +0xD7D6 0x5FD6 +0xD7D7 0x5FFB +0xD7D8 0x5FE4 +0xD7D9 0x5FF8 +0xD7DA 0x5FF1 +0xD7DB 0x5FDD +0xD7DC 0x60B3 +0xD7DD 0x5FFF +0xD7DE 0x6021 +0xD7DF 0x6060 +0xD7E0 0x6019 +0xD7E1 0x6010 +0xD7E2 0x6029 +0xD7E3 0x600E +0xD7E4 0x6031 +0xD7E5 0x601B +0xD7E6 0x6015 +0xD7E7 0x602B +0xD7E8 0x6026 +0xD7E9 0x600F +0xD7EA 0x603A +0xD7EB 0x605A +0xD7EC 0x6041 +0xD7ED 0x606A +0xD7EE 0x6077 +0xD7EF 0x605F +0xD7F0 0x604A +0xD7F1 0x6046 +0xD7F2 0x604D +0xD7F3 0x6063 +0xD7F4 0x6043 +0xD7F5 0x6064 +0xD7F6 0x6042 +0xD7F7 0x606C +0xD7F8 0x606B +0xD7F9 0x6059 +0xD7FA 0x6081 +0xD7FB 0x608D +0xD7FC 0x60E7 +0xD7FD 0x6083 +0xD7FE 0x609A +0xD8A1 0x6084 +0xD8A2 0x609B +0xD8A3 0x6096 +0xD8A4 0x6097 +0xD8A5 0x6092 +0xD8A6 0x60A7 +0xD8A7 0x608B +0xD8A8 0x60E1 +0xD8A9 0x60B8 +0xD8AA 0x60E0 +0xD8AB 0x60D3 +0xD8AC 0x60B4 +0xD8AD 0x5FF0 +0xD8AE 0x60BD +0xD8AF 0x60C6 +0xD8B0 0x60B5 +0xD8B1 0x60D8 +0xD8B2 0x614D +0xD8B3 0x6115 +0xD8B4 0x6106 +0xD8B5 0x60F6 +0xD8B6 0x60F7 +0xD8B7 0x6100 +0xD8B8 0x60F4 +0xD8B9 0x60FA +0xD8BA 0x6103 +0xD8BB 0x6121 +0xD8BC 0x60FB +0xD8BD 0x60F1 +0xD8BE 0x610D +0xD8BF 0x610E +0xD8C0 0x6147 +0xD8C1 0x613E +0xD8C2 0x6128 +0xD8C3 0x6127 +0xD8C4 0x614A +0xD8C5 0x613F +0xD8C6 0x613C +0xD8C7 0x612C +0xD8C8 0x6134 +0xD8C9 0x613D +0xD8CA 0x6142 +0xD8CB 0x6144 +0xD8CC 0x6173 +0xD8CD 0x6177 +0xD8CE 0x6158 +0xD8CF 0x6159 +0xD8D0 0x615A +0xD8D1 0x616B +0xD8D2 0x6174 +0xD8D3 0x616F +0xD8D4 0x6165 +0xD8D5 0x6171 +0xD8D6 0x615F +0xD8D7 0x615D +0xD8D8 0x6153 +0xD8D9 0x6175 +0xD8DA 0x6199 +0xD8DB 0x6196 +0xD8DC 0x6187 +0xD8DD 0x61AC +0xD8DE 0x6194 +0xD8DF 0x619A +0xD8E0 0x618A +0xD8E1 0x6191 +0xD8E2 0x61AB +0xD8E3 0x61AE +0xD8E4 0x61CC +0xD8E5 0x61CA +0xD8E6 0x61C9 +0xD8E7 0x61F7 +0xD8E8 0x61C8 +0xD8E9 0x61C3 +0xD8EA 0x61C6 +0xD8EB 0x61BA +0xD8EC 0x61CB +0xD8ED 0x7F79 +0xD8EE 0x61CD +0xD8EF 0x61E6 +0xD8F0 0x61E3 +0xD8F1 0x61F6 +0xD8F2 0x61FA +0xD8F3 0x61F4 +0xD8F4 0x61FF +0xD8F5 0x61FD +0xD8F6 0x61FC +0xD8F7 0x61FE +0xD8F8 0x6200 +0xD8F9 0x6208 +0xD8FA 0x6209 +0xD8FB 0x620D +0xD8FC 0x620C +0xD8FD 0x6214 +0xD8FE 0x621B +0xD9A1 0x621E +0xD9A2 0x6221 +0xD9A3 0x622A +0xD9A4 0x622E +0xD9A5 0x6230 +0xD9A6 0x6232 +0xD9A7 0x6233 +0xD9A8 0x6241 +0xD9A9 0x624E +0xD9AA 0x625E +0xD9AB 0x6263 +0xD9AC 0x625B +0xD9AD 0x6260 +0xD9AE 0x6268 +0xD9AF 0x627C +0xD9B0 0x6282 +0xD9B1 0x6289 +0xD9B2 0x627E +0xD9B3 0x6292 +0xD9B4 0x6293 +0xD9B5 0x6296 +0xD9B6 0x62D4 +0xD9B7 0x6283 +0xD9B8 0x6294 +0xD9B9 0x62D7 +0xD9BA 0x62D1 +0xD9BB 0x62BB +0xD9BC 0x62CF +0xD9BD 0x62FF +0xD9BE 0x62C6 +0xD9BF 0x64D4 +0xD9C0 0x62C8 +0xD9C1 0x62DC +0xD9C2 0x62CC +0xD9C3 0x62CA +0xD9C4 0x62C2 +0xD9C5 0x62C7 +0xD9C6 0x629B +0xD9C7 0x62C9 +0xD9C8 0x630C +0xD9C9 0x62EE +0xD9CA 0x62F1 +0xD9CB 0x6327 +0xD9CC 0x6302 +0xD9CD 0x6308 +0xD9CE 0x62EF +0xD9CF 0x62F5 +0xD9D0 0x6350 +0xD9D1 0x633E +0xD9D2 0x634D +0xD9D3 0x641C +0xD9D4 0x634F +0xD9D5 0x6396 +0xD9D6 0x638E +0xD9D7 0x6380 +0xD9D8 0x63AB +0xD9D9 0x6376 +0xD9DA 0x63A3 +0xD9DB 0x638F +0xD9DC 0x6389 +0xD9DD 0x639F +0xD9DE 0x63B5 +0xD9DF 0x636B +0xD9E0 0x6369 +0xD9E1 0x63BE +0xD9E2 0x63E9 +0xD9E3 0x63C0 +0xD9E4 0x63C6 +0xD9E5 0x63E3 +0xD9E6 0x63C9 +0xD9E7 0x63D2 +0xD9E8 0x63F6 +0xD9E9 0x63C4 +0xD9EA 0x6416 +0xD9EB 0x6434 +0xD9EC 0x6406 +0xD9ED 0x6413 +0xD9EE 0x6426 +0xD9EF 0x6436 +0xD9F0 0x651D +0xD9F1 0x6417 +0xD9F2 0x6428 +0xD9F3 0x640F +0xD9F4 0x6467 +0xD9F5 0x646F +0xD9F6 0x6476 +0xD9F7 0x644E +0xD9F8 0x652A +0xD9F9 0x6495 +0xD9FA 0x6493 +0xD9FB 0x64A5 +0xD9FC 0x64A9 +0xD9FD 0x6488 +0xD9FE 0x64BC +0xDAA1 0x64DA +0xDAA2 0x64D2 +0xDAA3 0x64C5 +0xDAA4 0x64C7 +0xDAA5 0x64BB +0xDAA6 0x64D8 +0xDAA7 0x64C2 +0xDAA8 0x64F1 +0xDAA9 0x64E7 +0xDAAA 0x8209 +0xDAAB 0x64E0 +0xDAAC 0x64E1 +0xDAAD 0x62AC +0xDAAE 0x64E3 +0xDAAF 0x64EF +0xDAB0 0x652C +0xDAB1 0x64F6 +0xDAB2 0x64F4 +0xDAB3 0x64F2 +0xDAB4 0x64FA +0xDAB5 0x6500 +0xDAB6 0x64FD +0xDAB7 0x6518 +0xDAB8 0x651C +0xDAB9 0x6505 +0xDABA 0x6524 +0xDABB 0x6523 +0xDABC 0x652B +0xDABD 0x6534 +0xDABE 0x6535 +0xDABF 0x6537 +0xDAC0 0x6536 +0xDAC1 0x6538 +0xDAC2 0x754B +0xDAC3 0x6548 +0xDAC4 0x6556 +0xDAC5 0x6555 +0xDAC6 0x654D +0xDAC7 0x6558 +0xDAC8 0x655E +0xDAC9 0x655D +0xDACA 0x6572 +0xDACB 0x6578 +0xDACC 0x6582 +0xDACD 0x6583 +0xDACE 0x8B8A +0xDACF 0x659B +0xDAD0 0x659F +0xDAD1 0x65AB +0xDAD2 0x65B7 +0xDAD3 0x65C3 +0xDAD4 0x65C6 +0xDAD5 0x65C1 +0xDAD6 0x65C4 +0xDAD7 0x65CC +0xDAD8 0x65D2 +0xDAD9 0x65DB +0xDADA 0x65D9 +0xDADB 0x65E0 +0xDADC 0x65E1 +0xDADD 0x65F1 +0xDADE 0x6772 +0xDADF 0x660A +0xDAE0 0x6603 +0xDAE1 0x65FB +0xDAE2 0x6773 +0xDAE3 0x6635 +0xDAE4 0x6636 +0xDAE5 0x6634 +0xDAE6 0x661C +0xDAE7 0x664F +0xDAE8 0x6644 +0xDAE9 0x6649 +0xDAEA 0x6641 +0xDAEB 0x665E +0xDAEC 0x665D +0xDAED 0x6664 +0xDAEE 0x6667 +0xDAEF 0x6668 +0xDAF0 0x665F +0xDAF1 0x6662 +0xDAF2 0x6670 +0xDAF3 0x6683 +0xDAF4 0x6688 +0xDAF5 0x668E +0xDAF6 0x6689 +0xDAF7 0x6684 +0xDAF8 0x6698 +0xDAF9 0x669D +0xDAFA 0x66C1 +0xDAFB 0x66B9 +0xDAFC 0x66C9 +0xDAFD 0x66BE +0xDAFE 0x66BC +0xDBA1 0x66C4 +0xDBA2 0x66B8 +0xDBA3 0x66D6 +0xDBA4 0x66DA +0xDBA5 0x66E0 +0xDBA6 0x663F +0xDBA7 0x66E6 +0xDBA8 0x66E9 +0xDBA9 0x66F0 +0xDBAA 0x66F5 +0xDBAB 0x66F7 +0xDBAC 0x670F +0xDBAD 0x6716 +0xDBAE 0x671E +0xDBAF 0x6726 +0xDBB0 0x6727 +0xDBB1 0x9738 +0xDBB2 0x672E +0xDBB3 0x673F +0xDBB4 0x6736 +0xDBB5 0x6741 +0xDBB6 0x6738 +0xDBB7 0x6737 +0xDBB8 0x6746 +0xDBB9 0x675E +0xDBBA 0x6760 +0xDBBB 0x6759 +0xDBBC 0x6763 +0xDBBD 0x6764 +0xDBBE 0x6789 +0xDBBF 0x6770 +0xDBC0 0x67A9 +0xDBC1 0x677C +0xDBC2 0x676A +0xDBC3 0x678C +0xDBC4 0x678B +0xDBC5 0x67A6 +0xDBC6 0x67A1 +0xDBC7 0x6785 +0xDBC8 0x67B7 +0xDBC9 0x67EF +0xDBCA 0x67B4 +0xDBCB 0x67EC +0xDBCC 0x67B3 +0xDBCD 0x67E9 +0xDBCE 0x67B8 +0xDBCF 0x67E4 +0xDBD0 0x67DE +0xDBD1 0x67DD +0xDBD2 0x67E2 +0xDBD3 0x67EE +0xDBD4 0x67B9 +0xDBD5 0x67CE +0xDBD6 0x67C6 +0xDBD7 0x67E7 +0xDBD8 0x6A9C +0xDBD9 0x681E +0xDBDA 0x6846 +0xDBDB 0x6829 +0xDBDC 0x6840 +0xDBDD 0x684D +0xDBDE 0x6832 +0xDBDF 0x684E +0xDBE0 0x68B3 +0xDBE1 0x682B +0xDBE2 0x6859 +0xDBE3 0x6863 +0xDBE4 0x6877 +0xDBE5 0x687F +0xDBE6 0x689F +0xDBE7 0x688F +0xDBE8 0x68AD +0xDBE9 0x6894 +0xDBEA 0x689D +0xDBEB 0x689B +0xDBEC 0x6883 +0xDBED 0x6AAE +0xDBEE 0x68B9 +0xDBEF 0x6874 +0xDBF0 0x68B5 +0xDBF1 0x68A0 +0xDBF2 0x68BA +0xDBF3 0x690F +0xDBF4 0x688D +0xDBF5 0x687E +0xDBF6 0x6901 +0xDBF7 0x68CA +0xDBF8 0x6908 +0xDBF9 0x68D8 +0xDBFA 0x6922 +0xDBFB 0x6926 +0xDBFC 0x68E1 +0xDBFD 0x690C +0xDBFE 0x68CD +0xDCA1 0x68D4 +0xDCA2 0x68E7 +0xDCA3 0x68D5 +0xDCA4 0x6936 +0xDCA5 0x6912 +0xDCA6 0x6904 +0xDCA7 0x68D7 +0xDCA8 0x68E3 +0xDCA9 0x6925 +0xDCAA 0x68F9 +0xDCAB 0x68E0 +0xDCAC 0x68EF +0xDCAD 0x6928 +0xDCAE 0x692A +0xDCAF 0x691A +0xDCB0 0x6923 +0xDCB1 0x6921 +0xDCB2 0x68C6 +0xDCB3 0x6979 +0xDCB4 0x6977 +0xDCB5 0x695C +0xDCB6 0x6978 +0xDCB7 0x696B +0xDCB8 0x6954 +0xDCB9 0x697E +0xDCBA 0x696E +0xDCBB 0x6939 +0xDCBC 0x6974 +0xDCBD 0x693D +0xDCBE 0x6959 +0xDCBF 0x6930 +0xDCC0 0x6961 +0xDCC1 0x695E +0xDCC2 0x695D +0xDCC3 0x6981 +0xDCC4 0x696A +0xDCC5 0x69B2 +0xDCC6 0x69AE +0xDCC7 0x69D0 +0xDCC8 0x69BF +0xDCC9 0x69C1 +0xDCCA 0x69D3 +0xDCCB 0x69BE +0xDCCC 0x69CE +0xDCCD 0x5BE8 +0xDCCE 0x69CA +0xDCCF 0x69DD +0xDCD0 0x69BB +0xDCD1 0x69C3 +0xDCD2 0x69A7 +0xDCD3 0x6A2E +0xDCD4 0x6991 +0xDCD5 0x69A0 +0xDCD6 0x699C +0xDCD7 0x6995 +0xDCD8 0x69B4 +0xDCD9 0x69DE +0xDCDA 0x69E8 +0xDCDB 0x6A02 +0xDCDC 0x6A1B +0xDCDD 0x69FF +0xDCDE 0x6B0A +0xDCDF 0x69F9 +0xDCE0 0x69F2 +0xDCE1 0x69E7 +0xDCE2 0x6A05 +0xDCE3 0x69B1 +0xDCE4 0x6A1E +0xDCE5 0x69ED +0xDCE6 0x6A14 +0xDCE7 0x69EB +0xDCE8 0x6A0A +0xDCE9 0x6A12 +0xDCEA 0x6AC1 +0xDCEB 0x6A23 +0xDCEC 0x6A13 +0xDCED 0x6A44 +0xDCEE 0x6A0C +0xDCEF 0x6A72 +0xDCF0 0x6A36 +0xDCF1 0x6A78 +0xDCF2 0x6A47 +0xDCF3 0x6A62 +0xDCF4 0x6A59 +0xDCF5 0x6A66 +0xDCF6 0x6A48 +0xDCF7 0x6A38 +0xDCF8 0x6A22 +0xDCF9 0x6A90 +0xDCFA 0x6A8D +0xDCFB 0x6AA0 +0xDCFC 0x6A84 +0xDCFD 0x6AA2 +0xDCFE 0x6AA3 +0xDDA1 0x6A97 +0xDDA2 0x8617 +0xDDA3 0x6ABB +0xDDA4 0x6AC3 +0xDDA5 0x6AC2 +0xDDA6 0x6AB8 +0xDDA7 0x6AB3 +0xDDA8 0x6AAC +0xDDA9 0x6ADE +0xDDAA 0x6AD1 +0xDDAB 0x6ADF +0xDDAC 0x6AAA +0xDDAD 0x6ADA +0xDDAE 0x6AEA +0xDDAF 0x6AFB +0xDDB0 0x6B05 +0xDDB1 0x8616 +0xDDB2 0x6AFA +0xDDB3 0x6B12 +0xDDB4 0x6B16 +0xDDB5 0x9B31 +0xDDB6 0x6B1F +0xDDB7 0x6B38 +0xDDB8 0x6B37 +0xDDB9 0x76DC +0xDDBA 0x6B39 +0xDDBB 0x98EE +0xDDBC 0x6B47 +0xDDBD 0x6B43 +0xDDBE 0x6B49 +0xDDBF 0x6B50 +0xDDC0 0x6B59 +0xDDC1 0x6B54 +0xDDC2 0x6B5B +0xDDC3 0x6B5F +0xDDC4 0x6B61 +0xDDC5 0x6B78 +0xDDC6 0x6B79 +0xDDC7 0x6B7F +0xDDC8 0x6B80 +0xDDC9 0x6B84 +0xDDCA 0x6B83 +0xDDCB 0x6B8D +0xDDCC 0x6B98 +0xDDCD 0x6B95 +0xDDCE 0x6B9E +0xDDCF 0x6BA4 +0xDDD0 0x6BAA +0xDDD1 0x6BAB +0xDDD2 0x6BAF +0xDDD3 0x6BB2 +0xDDD4 0x6BB1 +0xDDD5 0x6BB3 +0xDDD6 0x6BB7 +0xDDD7 0x6BBC +0xDDD8 0x6BC6 +0xDDD9 0x6BCB +0xDDDA 0x6BD3 +0xDDDB 0x6BDF +0xDDDC 0x6BEC +0xDDDD 0x6BEB +0xDDDE 0x6BF3 +0xDDDF 0x6BEF +0xDDE0 0x9EBE +0xDDE1 0x6C08 +0xDDE2 0x6C13 +0xDDE3 0x6C14 +0xDDE4 0x6C1B +0xDDE5 0x6C24 +0xDDE6 0x6C23 +0xDDE7 0x6C5E +0xDDE8 0x6C55 +0xDDE9 0x6C62 +0xDDEA 0x6C6A +0xDDEB 0x6C82 +0xDDEC 0x6C8D +0xDDED 0x6C9A +0xDDEE 0x6C81 +0xDDEF 0x6C9B +0xDDF0 0x6C7E +0xDDF1 0x6C68 +0xDDF2 0x6C73 +0xDDF3 0x6C92 +0xDDF4 0x6C90 +0xDDF5 0x6CC4 +0xDDF6 0x6CF1 +0xDDF7 0x6CD3 +0xDDF8 0x6CBD +0xDDF9 0x6CD7 +0xDDFA 0x6CC5 +0xDDFB 0x6CDD +0xDDFC 0x6CAE +0xDDFD 0x6CB1 +0xDDFE 0x6CBE +0xDEA1 0x6CBA +0xDEA2 0x6CDB +0xDEA3 0x6CEF +0xDEA4 0x6CD9 +0xDEA5 0x6CEA +0xDEA6 0x6D1F +0xDEA7 0x884D +0xDEA8 0x6D36 +0xDEA9 0x6D2B +0xDEAA 0x6D3D +0xDEAB 0x6D38 +0xDEAC 0x6D19 +0xDEAD 0x6D35 +0xDEAE 0x6D33 +0xDEAF 0x6D12 +0xDEB0 0x6D0C +0xDEB1 0x6D63 +0xDEB2 0x6D93 +0xDEB3 0x6D64 +0xDEB4 0x6D5A +0xDEB5 0x6D79 +0xDEB6 0x6D59 +0xDEB7 0x6D8E +0xDEB8 0x6D95 +0xDEB9 0x6FE4 +0xDEBA 0x6D85 +0xDEBB 0x6DF9 +0xDEBC 0x6E15 +0xDEBD 0x6E0A +0xDEBE 0x6DB5 +0xDEBF 0x6DC7 +0xDEC0 0x6DE6 +0xDEC1 0x6DB8 +0xDEC2 0x6DC6 +0xDEC3 0x6DEC +0xDEC4 0x6DDE +0xDEC5 0x6DCC +0xDEC6 0x6DE8 +0xDEC7 0x6DD2 +0xDEC8 0x6DC5 +0xDEC9 0x6DFA +0xDECA 0x6DD9 +0xDECB 0x6DE4 +0xDECC 0x6DD5 +0xDECD 0x6DEA +0xDECE 0x6DEE +0xDECF 0x6E2D +0xDED0 0x6E6E +0xDED1 0x6E2E +0xDED2 0x6E19 +0xDED3 0x6E72 +0xDED4 0x6E5F +0xDED5 0x6E3E +0xDED6 0x6E23 +0xDED7 0x6E6B +0xDED8 0x6E2B +0xDED9 0x6E76 +0xDEDA 0x6E4D +0xDEDB 0x6E1F +0xDEDC 0x6E43 +0xDEDD 0x6E3A +0xDEDE 0x6E4E +0xDEDF 0x6E24 +0xDEE0 0x6EFF +0xDEE1 0x6E1D +0xDEE2 0x6E38 +0xDEE3 0x6E82 +0xDEE4 0x6EAA +0xDEE5 0x6E98 +0xDEE6 0x6EC9 +0xDEE7 0x6EB7 +0xDEE8 0x6ED3 +0xDEE9 0x6EBD +0xDEEA 0x6EAF +0xDEEB 0x6EC4 +0xDEEC 0x6EB2 +0xDEED 0x6ED4 +0xDEEE 0x6ED5 +0xDEEF 0x6E8F +0xDEF0 0x6EA5 +0xDEF1 0x6EC2 +0xDEF2 0x6E9F +0xDEF3 0x6F41 +0xDEF4 0x6F11 +0xDEF5 0x704C +0xDEF6 0x6EEC +0xDEF7 0x6EF8 +0xDEF8 0x6EFE +0xDEF9 0x6F3F +0xDEFA 0x6EF2 +0xDEFB 0x6F31 +0xDEFC 0x6EEF +0xDEFD 0x6F32 +0xDEFE 0x6ECC +0xDFA1 0x6F3E +0xDFA2 0x6F13 +0xDFA3 0x6EF7 +0xDFA4 0x6F86 +0xDFA5 0x6F7A +0xDFA6 0x6F78 +0xDFA7 0x6F81 +0xDFA8 0x6F80 +0xDFA9 0x6F6F +0xDFAA 0x6F5B +0xDFAB 0x6FF3 +0xDFAC 0x6F6D +0xDFAD 0x6F82 +0xDFAE 0x6F7C +0xDFAF 0x6F58 +0xDFB0 0x6F8E +0xDFB1 0x6F91 +0xDFB2 0x6FC2 +0xDFB3 0x6F66 +0xDFB4 0x6FB3 +0xDFB5 0x6FA3 +0xDFB6 0x6FA1 +0xDFB7 0x6FA4 +0xDFB8 0x6FB9 +0xDFB9 0x6FC6 +0xDFBA 0x6FAA +0xDFBB 0x6FDF +0xDFBC 0x6FD5 +0xDFBD 0x6FEC +0xDFBE 0x6FD4 +0xDFBF 0x6FD8 +0xDFC0 0x6FF1 +0xDFC1 0x6FEE +0xDFC2 0x6FDB +0xDFC3 0x7009 +0xDFC4 0x700B +0xDFC5 0x6FFA +0xDFC6 0x7011 +0xDFC7 0x7001 +0xDFC8 0x700F +0xDFC9 0x6FFE +0xDFCA 0x701B +0xDFCB 0x701A +0xDFCC 0x6F74 +0xDFCD 0x701D +0xDFCE 0x7018 +0xDFCF 0x701F +0xDFD0 0x7030 +0xDFD1 0x703E +0xDFD2 0x7032 +0xDFD3 0x7051 +0xDFD4 0x7063 +0xDFD5 0x7099 +0xDFD6 0x7092 +0xDFD7 0x70AF +0xDFD8 0x70F1 +0xDFD9 0x70AC +0xDFDA 0x70B8 +0xDFDB 0x70B3 +0xDFDC 0x70AE +0xDFDD 0x70DF +0xDFDE 0x70CB +0xDFDF 0x70DD +0xDFE0 0x70D9 +0xDFE1 0x7109 +0xDFE2 0x70FD +0xDFE3 0x711C +0xDFE4 0x7119 +0xDFE5 0x7165 +0xDFE6 0x7155 +0xDFE7 0x7188 +0xDFE8 0x7166 +0xDFE9 0x7162 +0xDFEA 0x714C +0xDFEB 0x7156 +0xDFEC 0x716C +0xDFED 0x718F +0xDFEE 0x71FB +0xDFEF 0x7184 +0xDFF0 0x7195 +0xDFF1 0x71A8 +0xDFF2 0x71AC +0xDFF3 0x71D7 +0xDFF4 0x71B9 +0xDFF5 0x71BE +0xDFF6 0x71D2 +0xDFF7 0x71C9 +0xDFF8 0x71D4 +0xDFF9 0x71CE +0xDFFA 0x71E0 +0xDFFB 0x71EC +0xDFFC 0x71E7 +0xDFFD 0x71F5 +0xDFFE 0x71FC +0xE0A1 0x71F9 +0xE0A2 0x71FF +0xE0A3 0x720D +0xE0A4 0x7210 +0xE0A5 0x721B +0xE0A6 0x7228 +0xE0A7 0x722D +0xE0A8 0x722C +0xE0A9 0x7230 +0xE0AA 0x7232 +0xE0AB 0x723B +0xE0AC 0x723C +0xE0AD 0x723F +0xE0AE 0x7240 +0xE0AF 0x7246 +0xE0B0 0x724B +0xE0B1 0x7258 +0xE0B2 0x7274 +0xE0B3 0x727E +0xE0B4 0x7282 +0xE0B5 0x7281 +0xE0B6 0x7287 +0xE0B7 0x7292 +0xE0B8 0x7296 +0xE0B9 0x72A2 +0xE0BA 0x72A7 +0xE0BB 0x72B9 +0xE0BC 0x72B2 +0xE0BD 0x72C3 +0xE0BE 0x72C6 +0xE0BF 0x72C4 +0xE0C0 0x72CE +0xE0C1 0x72D2 +0xE0C2 0x72E2 +0xE0C3 0x72E0 +0xE0C4 0x72E1 +0xE0C5 0x72F9 +0xE0C6 0x72F7 +0xE0C7 0x500F +0xE0C8 0x7317 +0xE0C9 0x730A +0xE0CA 0x731C +0xE0CB 0x7316 +0xE0CC 0x731D +0xE0CD 0x7334 +0xE0CE 0x732F +0xE0CF 0x7329 +0xE0D0 0x7325 +0xE0D1 0x733E +0xE0D2 0x734E +0xE0D3 0x734F +0xE0D4 0x9ED8 +0xE0D5 0x7357 +0xE0D6 0x736A +0xE0D7 0x7368 +0xE0D8 0x7370 +0xE0D9 0x7378 +0xE0DA 0x7375 +0xE0DB 0x737B +0xE0DC 0x737A +0xE0DD 0x73C8 +0xE0DE 0x73B3 +0xE0DF 0x73CE +0xE0E0 0x73BB +0xE0E1 0x73C0 +0xE0E2 0x73E5 +0xE0E3 0x73EE +0xE0E4 0x73DE +0xE0E5 0x74A2 +0xE0E6 0x7405 +0xE0E7 0x746F +0xE0E8 0x7425 +0xE0E9 0x73F8 +0xE0EA 0x7432 +0xE0EB 0x743A +0xE0EC 0x7455 +0xE0ED 0x743F +0xE0EE 0x745F +0xE0EF 0x7459 +0xE0F0 0x7441 +0xE0F1 0x745C +0xE0F2 0x7469 +0xE0F3 0x7470 +0xE0F4 0x7463 +0xE0F5 0x746A +0xE0F6 0x7476 +0xE0F7 0x747E +0xE0F8 0x748B +0xE0F9 0x749E +0xE0FA 0x74A7 +0xE0FB 0x74CA +0xE0FC 0x74CF +0xE0FD 0x74D4 +0xE0FE 0x73F1 +0xE1A1 0x74E0 +0xE1A2 0x74E3 +0xE1A3 0x74E7 +0xE1A4 0x74E9 +0xE1A5 0x74EE +0xE1A6 0x74F2 +0xE1A7 0x74F0 +0xE1A8 0x74F1 +0xE1A9 0x74F8 +0xE1AA 0x74F7 +0xE1AB 0x7504 +0xE1AC 0x7503 +0xE1AD 0x7505 +0xE1AE 0x750C +0xE1AF 0x750E +0xE1B0 0x750D +0xE1B1 0x7515 +0xE1B2 0x7513 +0xE1B3 0x751E +0xE1B4 0x7526 +0xE1B5 0x752C +0xE1B6 0x753C +0xE1B7 0x7544 +0xE1B8 0x754D +0xE1B9 0x754A +0xE1BA 0x7549 +0xE1BB 0x755B +0xE1BC 0x7546 +0xE1BD 0x755A +0xE1BE 0x7569 +0xE1BF 0x7564 +0xE1C0 0x7567 +0xE1C1 0x756B +0xE1C2 0x756D +0xE1C3 0x7578 +0xE1C4 0x7576 +0xE1C5 0x7586 +0xE1C6 0x7587 +0xE1C7 0x7574 +0xE1C8 0x758A +0xE1C9 0x7589 +0xE1CA 0x7582 +0xE1CB 0x7594 +0xE1CC 0x759A +0xE1CD 0x759D +0xE1CE 0x75A5 +0xE1CF 0x75A3 +0xE1D0 0x75C2 +0xE1D1 0x75B3 +0xE1D2 0x75C3 +0xE1D3 0x75B5 +0xE1D4 0x75BD +0xE1D5 0x75B8 +0xE1D6 0x75BC +0xE1D7 0x75B1 +0xE1D8 0x75CD +0xE1D9 0x75CA +0xE1DA 0x75D2 +0xE1DB 0x75D9 +0xE1DC 0x75E3 +0xE1DD 0x75DE +0xE1DE 0x75FE +0xE1DF 0x75FF +0xE1E0 0x75FC +0xE1E1 0x7601 +0xE1E2 0x75F0 +0xE1E3 0x75FA +0xE1E4 0x75F2 +0xE1E5 0x75F3 +0xE1E6 0x760B +0xE1E7 0x760D +0xE1E8 0x7609 +0xE1E9 0x761F +0xE1EA 0x7627 +0xE1EB 0x7620 +0xE1EC 0x7621 +0xE1ED 0x7622 +0xE1EE 0x7624 +0xE1EF 0x7634 +0xE1F0 0x7630 +0xE1F1 0x763B +0xE1F2 0x7647 +0xE1F3 0x7648 +0xE1F4 0x7646 +0xE1F5 0x765C +0xE1F6 0x7658 +0xE1F7 0x7661 +0xE1F8 0x7662 +0xE1F9 0x7668 +0xE1FA 0x7669 +0xE1FB 0x766A +0xE1FC 0x7667 +0xE1FD 0x766C +0xE1FE 0x7670 +0xE2A1 0x7672 +0xE2A2 0x7676 +0xE2A3 0x7678 +0xE2A4 0x767C +0xE2A5 0x7680 +0xE2A6 0x7683 +0xE2A7 0x7688 +0xE2A8 0x768B +0xE2A9 0x768E +0xE2AA 0x7696 +0xE2AB 0x7693 +0xE2AC 0x7699 +0xE2AD 0x769A +0xE2AE 0x76B0 +0xE2AF 0x76B4 +0xE2B0 0x76B8 +0xE2B1 0x76B9 +0xE2B2 0x76BA +0xE2B3 0x76C2 +0xE2B4 0x76CD +0xE2B5 0x76D6 +0xE2B6 0x76D2 +0xE2B7 0x76DE +0xE2B8 0x76E1 +0xE2B9 0x76E5 +0xE2BA 0x76E7 +0xE2BB 0x76EA +0xE2BC 0x862F +0xE2BD 0x76FB +0xE2BE 0x7708 +0xE2BF 0x7707 +0xE2C0 0x7704 +0xE2C1 0x7729 +0xE2C2 0x7724 +0xE2C3 0x771E +0xE2C4 0x7725 +0xE2C5 0x7726 +0xE2C6 0x771B +0xE2C7 0x7737 +0xE2C8 0x7738 +0xE2C9 0x7747 +0xE2CA 0x775A +0xE2CB 0x7768 +0xE2CC 0x776B +0xE2CD 0x775B +0xE2CE 0x7765 +0xE2CF 0x777F +0xE2D0 0x777E +0xE2D1 0x7779 +0xE2D2 0x778E +0xE2D3 0x778B +0xE2D4 0x7791 +0xE2D5 0x77A0 +0xE2D6 0x779E +0xE2D7 0x77B0 +0xE2D8 0x77B6 +0xE2D9 0x77B9 +0xE2DA 0x77BF +0xE2DB 0x77BC +0xE2DC 0x77BD +0xE2DD 0x77BB +0xE2DE 0x77C7 +0xE2DF 0x77CD +0xE2E0 0x77D7 +0xE2E1 0x77DA +0xE2E2 0x77DC +0xE2E3 0x77E3 +0xE2E4 0x77EE +0xE2E5 0x77FC +0xE2E6 0x780C +0xE2E7 0x7812 +0xE2E8 0x7926 +0xE2E9 0x7820 +0xE2EA 0x792A +0xE2EB 0x7845 +0xE2EC 0x788E +0xE2ED 0x7874 +0xE2EE 0x7886 +0xE2EF 0x787C +0xE2F0 0x789A +0xE2F1 0x788C +0xE2F2 0x78A3 +0xE2F3 0x78B5 +0xE2F4 0x78AA +0xE2F5 0x78AF +0xE2F6 0x78D1 +0xE2F7 0x78C6 +0xE2F8 0x78CB +0xE2F9 0x78D4 +0xE2FA 0x78BE +0xE2FB 0x78BC +0xE2FC 0x78C5 +0xE2FD 0x78CA +0xE2FE 0x78EC +0xE3A1 0x78E7 +0xE3A2 0x78DA +0xE3A3 0x78FD +0xE3A4 0x78F4 +0xE3A5 0x7907 +0xE3A6 0x7912 +0xE3A7 0x7911 +0xE3A8 0x7919 +0xE3A9 0x792C +0xE3AA 0x792B +0xE3AB 0x7940 +0xE3AC 0x7960 +0xE3AD 0x7957 +0xE3AE 0x795F +0xE3AF 0x795A +0xE3B0 0x7955 +0xE3B1 0x7953 +0xE3B2 0x797A +0xE3B3 0x797F +0xE3B4 0x798A +0xE3B5 0x799D +0xE3B6 0x79A7 +0xE3B7 0x9F4B +0xE3B8 0x79AA +0xE3B9 0x79AE +0xE3BA 0x79B3 +0xE3BB 0x79B9 +0xE3BC 0x79BA +0xE3BD 0x79C9 +0xE3BE 0x79D5 +0xE3BF 0x79E7 +0xE3C0 0x79EC +0xE3C1 0x79E1 +0xE3C2 0x79E3 +0xE3C3 0x7A08 +0xE3C4 0x7A0D +0xE3C5 0x7A18 +0xE3C6 0x7A19 +0xE3C7 0x7A20 +0xE3C8 0x7A1F +0xE3C9 0x7980 +0xE3CA 0x7A31 +0xE3CB 0x7A3B +0xE3CC 0x7A3E +0xE3CD 0x7A37 +0xE3CE 0x7A43 +0xE3CF 0x7A57 +0xE3D0 0x7A49 +0xE3D1 0x7A61 +0xE3D2 0x7A62 +0xE3D3 0x7A69 +0xE3D4 0x9F9D +0xE3D5 0x7A70 +0xE3D6 0x7A79 +0xE3D7 0x7A7D +0xE3D8 0x7A88 +0xE3D9 0x7A97 +0xE3DA 0x7A95 +0xE3DB 0x7A98 +0xE3DC 0x7A96 +0xE3DD 0x7AA9 +0xE3DE 0x7AC8 +0xE3DF 0x7AB0 +0xE3E0 0x7AB6 +0xE3E1 0x7AC5 +0xE3E2 0x7AC4 +0xE3E3 0x7ABF +0xE3E4 0x9083 +0xE3E5 0x7AC7 +0xE3E6 0x7ACA +0xE3E7 0x7ACD +0xE3E8 0x7ACF +0xE3E9 0x7AD5 +0xE3EA 0x7AD3 +0xE3EB 0x7AD9 +0xE3EC 0x7ADA +0xE3ED 0x7ADD +0xE3EE 0x7AE1 +0xE3EF 0x7AE2 +0xE3F0 0x7AE6 +0xE3F1 0x7AED +0xE3F2 0x7AF0 +0xE3F3 0x7B02 +0xE3F4 0x7B0F +0xE3F5 0x7B0A +0xE3F6 0x7B06 +0xE3F7 0x7B33 +0xE3F8 0x7B18 +0xE3F9 0x7B19 +0xE3FA 0x7B1E +0xE3FB 0x7B35 +0xE3FC 0x7B28 +0xE3FD 0x7B36 +0xE3FE 0x7B50 +0xE4A1 0x7B7A +0xE4A2 0x7B04 +0xE4A3 0x7B4D +0xE4A4 0x7B0B +0xE4A5 0x7B4C +0xE4A6 0x7B45 +0xE4A7 0x7B75 +0xE4A8 0x7B65 +0xE4A9 0x7B74 +0xE4AA 0x7B67 +0xE4AB 0x7B70 +0xE4AC 0x7B71 +0xE4AD 0x7B6C +0xE4AE 0x7B6E +0xE4AF 0x7B9D +0xE4B0 0x7B98 +0xE4B1 0x7B9F +0xE4B2 0x7B8D +0xE4B3 0x7B9C +0xE4B4 0x7B9A +0xE4B5 0x7B8B +0xE4B6 0x7B92 +0xE4B7 0x7B8F +0xE4B8 0x7B5D +0xE4B9 0x7B99 +0xE4BA 0x7BCB +0xE4BB 0x7BC1 +0xE4BC 0x7BCC +0xE4BD 0x7BCF +0xE4BE 0x7BB4 +0xE4BF 0x7BC6 +0xE4C0 0x7BDD +0xE4C1 0x7BE9 +0xE4C2 0x7C11 +0xE4C3 0x7C14 +0xE4C4 0x7BE6 +0xE4C5 0x7BE5 +0xE4C6 0x7C60 +0xE4C7 0x7C00 +0xE4C8 0x7C07 +0xE4C9 0x7C13 +0xE4CA 0x7BF3 +0xE4CB 0x7BF7 +0xE4CC 0x7C17 +0xE4CD 0x7C0D +0xE4CE 0x7BF6 +0xE4CF 0x7C23 +0xE4D0 0x7C27 +0xE4D1 0x7C2A +0xE4D2 0x7C1F +0xE4D3 0x7C37 +0xE4D4 0x7C2B +0xE4D5 0x7C3D +0xE4D6 0x7C4C +0xE4D7 0x7C43 +0xE4D8 0x7C54 +0xE4D9 0x7C4F +0xE4DA 0x7C40 +0xE4DB 0x7C50 +0xE4DC 0x7C58 +0xE4DD 0x7C5F +0xE4DE 0x7C64 +0xE4DF 0x7C56 +0xE4E0 0x7C65 +0xE4E1 0x7C6C +0xE4E2 0x7C75 +0xE4E3 0x7C83 +0xE4E4 0x7C90 +0xE4E5 0x7CA4 +0xE4E6 0x7CAD +0xE4E7 0x7CA2 +0xE4E8 0x7CAB +0xE4E9 0x7CA1 +0xE4EA 0x7CA8 +0xE4EB 0x7CB3 +0xE4EC 0x7CB2 +0xE4ED 0x7CB1 +0xE4EE 0x7CAE +0xE4EF 0x7CB9 +0xE4F0 0x7CBD +0xE4F1 0x7CC0 +0xE4F2 0x7CC5 +0xE4F3 0x7CC2 +0xE4F4 0x7CD8 +0xE4F5 0x7CD2 +0xE4F6 0x7CDC +0xE4F7 0x7CE2 +0xE4F8 0x9B3B +0xE4F9 0x7CEF +0xE4FA 0x7CF2 +0xE4FB 0x7CF4 +0xE4FC 0x7CF6 +0xE4FD 0x7CFA +0xE4FE 0x7D06 +0xE5A1 0x7D02 +0xE5A2 0x7D1C +0xE5A3 0x7D15 +0xE5A4 0x7D0A +0xE5A5 0x7D45 +0xE5A6 0x7D4B +0xE5A7 0x7D2E +0xE5A8 0x7D32 +0xE5A9 0x7D3F +0xE5AA 0x7D35 +0xE5AB 0x7D46 +0xE5AC 0x7D73 +0xE5AD 0x7D56 +0xE5AE 0x7D4E +0xE5AF 0x7D72 +0xE5B0 0x7D68 +0xE5B1 0x7D6E +0xE5B2 0x7D4F +0xE5B3 0x7D63 +0xE5B4 0x7D93 +0xE5B5 0x7D89 +0xE5B6 0x7D5B +0xE5B7 0x7D8F +0xE5B8 0x7D7D +0xE5B9 0x7D9B +0xE5BA 0x7DBA +0xE5BB 0x7DAE +0xE5BC 0x7DA3 +0xE5BD 0x7DB5 +0xE5BE 0x7DC7 +0xE5BF 0x7DBD +0xE5C0 0x7DAB +0xE5C1 0x7E3D +0xE5C2 0x7DA2 +0xE5C3 0x7DAF +0xE5C4 0x7DDC +0xE5C5 0x7DB8 +0xE5C6 0x7D9F +0xE5C7 0x7DB0 +0xE5C8 0x7DD8 +0xE5C9 0x7DDD +0xE5CA 0x7DE4 +0xE5CB 0x7DDE +0xE5CC 0x7DFB +0xE5CD 0x7DF2 +0xE5CE 0x7DE1 +0xE5CF 0x7E05 +0xE5D0 0x7E0A +0xE5D1 0x7E23 +0xE5D2 0x7E21 +0xE5D3 0x7E12 +0xE5D4 0x7E31 +0xE5D5 0x7E1F +0xE5D6 0x7E09 +0xE5D7 0x7E0B +0xE5D8 0x7E22 +0xE5D9 0x7E46 +0xE5DA 0x7E66 +0xE5DB 0x7E3B +0xE5DC 0x7E35 +0xE5DD 0x7E39 +0xE5DE 0x7E43 +0xE5DF 0x7E37 +0xE5E0 0x7E32 +0xE5E1 0x7E3A +0xE5E2 0x7E67 +0xE5E3 0x7E5D +0xE5E4 0x7E56 +0xE5E5 0x7E5E +0xE5E6 0x7E59 +0xE5E7 0x7E5A +0xE5E8 0x7E79 +0xE5E9 0x7E6A +0xE5EA 0x7E69 +0xE5EB 0x7E7C +0xE5EC 0x7E7B +0xE5ED 0x7E83 +0xE5EE 0x7DD5 +0xE5EF 0x7E7D +0xE5F0 0x8FAE +0xE5F1 0x7E7F +0xE5F2 0x7E88 +0xE5F3 0x7E89 +0xE5F4 0x7E8C +0xE5F5 0x7E92 +0xE5F6 0x7E90 +0xE5F7 0x7E93 +0xE5F8 0x7E94 +0xE5F9 0x7E96 +0xE5FA 0x7E8E +0xE5FB 0x7E9B +0xE5FC 0x7E9C +0xE5FD 0x7F38 +0xE5FE 0x7F3A +0xE6A1 0x7F45 +0xE6A2 0x7F4C +0xE6A3 0x7F4D +0xE6A4 0x7F4E +0xE6A5 0x7F50 +0xE6A6 0x7F51 +0xE6A7 0x7F55 +0xE6A8 0x7F54 +0xE6A9 0x7F58 +0xE6AA 0x7F5F +0xE6AB 0x7F60 +0xE6AC 0x7F68 +0xE6AD 0x7F69 +0xE6AE 0x7F67 +0xE6AF 0x7F78 +0xE6B0 0x7F82 +0xE6B1 0x7F86 +0xE6B2 0x7F83 +0xE6B3 0x7F88 +0xE6B4 0x7F87 +0xE6B5 0x7F8C +0xE6B6 0x7F94 +0xE6B7 0x7F9E +0xE6B8 0x7F9D +0xE6B9 0x7F9A +0xE6BA 0x7FA3 +0xE6BB 0x7FAF +0xE6BC 0x7FB2 +0xE6BD 0x7FB9 +0xE6BE 0x7FAE +0xE6BF 0x7FB6 +0xE6C0 0x7FB8 +0xE6C1 0x8B71 +0xE6C2 0x7FC5 +0xE6C3 0x7FC6 +0xE6C4 0x7FCA +0xE6C5 0x7FD5 +0xE6C6 0x7FD4 +0xE6C7 0x7FE1 +0xE6C8 0x7FE6 +0xE6C9 0x7FE9 +0xE6CA 0x7FF3 +0xE6CB 0x7FF9 +0xE6CC 0x98DC +0xE6CD 0x8006 +0xE6CE 0x8004 +0xE6CF 0x800B +0xE6D0 0x8012 +0xE6D1 0x8018 +0xE6D2 0x8019 +0xE6D3 0x801C +0xE6D4 0x8021 +0xE6D5 0x8028 +0xE6D6 0x803F +0xE6D7 0x803B +0xE6D8 0x804A +0xE6D9 0x8046 +0xE6DA 0x8052 +0xE6DB 0x8058 +0xE6DC 0x805A +0xE6DD 0x805F +0xE6DE 0x8062 +0xE6DF 0x8068 +0xE6E0 0x8073 +0xE6E1 0x8072 +0xE6E2 0x8070 +0xE6E3 0x8076 +0xE6E4 0x8079 +0xE6E5 0x807D +0xE6E6 0x807F +0xE6E7 0x8084 +0xE6E8 0x8086 +0xE6E9 0x8085 +0xE6EA 0x809B +0xE6EB 0x8093 +0xE6EC 0x809A +0xE6ED 0x80AD +0xE6EE 0x5190 +0xE6EF 0x80AC +0xE6F0 0x80DB +0xE6F1 0x80E5 +0xE6F2 0x80D9 +0xE6F3 0x80DD +0xE6F4 0x80C4 +0xE6F5 0x80DA +0xE6F6 0x80D6 +0xE6F7 0x8109 +0xE6F8 0x80EF +0xE6F9 0x80F1 +0xE6FA 0x811B +0xE6FB 0x8129 +0xE6FC 0x8123 +0xE6FD 0x812F +0xE6FE 0x814B +0xE7A1 0x968B +0xE7A2 0x8146 +0xE7A3 0x813E +0xE7A4 0x8153 +0xE7A5 0x8151 +0xE7A6 0x80FC +0xE7A7 0x8171 +0xE7A8 0x816E +0xE7A9 0x8165 +0xE7AA 0x8166 +0xE7AB 0x8174 +0xE7AC 0x8183 +0xE7AD 0x8188 +0xE7AE 0x818A +0xE7AF 0x8180 +0xE7B0 0x8182 +0xE7B1 0x81A0 +0xE7B2 0x8195 +0xE7B3 0x81A4 +0xE7B4 0x81A3 +0xE7B5 0x815F +0xE7B6 0x8193 +0xE7B7 0x81A9 +0xE7B8 0x81B0 +0xE7B9 0x81B5 +0xE7BA 0x81BE +0xE7BB 0x81B8 +0xE7BC 0x81BD +0xE7BD 0x81C0 +0xE7BE 0x81C2 +0xE7BF 0x81BA +0xE7C0 0x81C9 +0xE7C1 0x81CD +0xE7C2 0x81D1 +0xE7C3 0x81D9 +0xE7C4 0x81D8 +0xE7C5 0x81C8 +0xE7C6 0x81DA +0xE7C7 0x81DF +0xE7C8 0x81E0 +0xE7C9 0x81E7 +0xE7CA 0x81FA +0xE7CB 0x81FB +0xE7CC 0x81FE +0xE7CD 0x8201 +0xE7CE 0x8202 +0xE7CF 0x8205 +0xE7D0 0x8207 +0xE7D1 0x820A +0xE7D2 0x820D +0xE7D3 0x8210 +0xE7D4 0x8216 +0xE7D5 0x8229 +0xE7D6 0x822B +0xE7D7 0x8238 +0xE7D8 0x8233 +0xE7D9 0x8240 +0xE7DA 0x8259 +0xE7DB 0x8258 +0xE7DC 0x825D +0xE7DD 0x825A +0xE7DE 0x825F +0xE7DF 0x8264 +0xE7E0 0x8262 +0xE7E1 0x8268 +0xE7E2 0x826A +0xE7E3 0x826B +0xE7E4 0x822E +0xE7E5 0x8271 +0xE7E6 0x8277 +0xE7E7 0x8278 +0xE7E8 0x827E +0xE7E9 0x828D +0xE7EA 0x8292 +0xE7EB 0x82AB +0xE7EC 0x829F +0xE7ED 0x82BB +0xE7EE 0x82AC +0xE7EF 0x82E1 +0xE7F0 0x82E3 +0xE7F1 0x82DF +0xE7F2 0x82D2 +0xE7F3 0x82F4 +0xE7F4 0x82F3 +0xE7F5 0x82FA +0xE7F6 0x8393 +0xE7F7 0x8303 +0xE7F8 0x82FB +0xE7F9 0x82F9 +0xE7FA 0x82DE +0xE7FB 0x8306 +0xE7FC 0x82DC +0xE7FD 0x8309 +0xE7FE 0x82D9 +0xE8A1 0x8335 +0xE8A2 0x8334 +0xE8A3 0x8316 +0xE8A4 0x8332 +0xE8A5 0x8331 +0xE8A6 0x8340 +0xE8A7 0x8339 +0xE8A8 0x8350 +0xE8A9 0x8345 +0xE8AA 0x832F +0xE8AB 0x832B +0xE8AC 0x8317 +0xE8AD 0x8318 +0xE8AE 0x8385 +0xE8AF 0x839A +0xE8B0 0x83AA +0xE8B1 0x839F +0xE8B2 0x83A2 +0xE8B3 0x8396 +0xE8B4 0x8323 +0xE8B5 0x838E +0xE8B6 0x8387 +0xE8B7 0x838A +0xE8B8 0x837C +0xE8B9 0x83B5 +0xE8BA 0x8373 +0xE8BB 0x8375 +0xE8BC 0x83A0 +0xE8BD 0x8389 +0xE8BE 0x83A8 +0xE8BF 0x83F4 +0xE8C0 0x8413 +0xE8C1 0x83EB +0xE8C2 0x83CE +0xE8C3 0x83FD +0xE8C4 0x8403 +0xE8C5 0x83D8 +0xE8C6 0x840B +0xE8C7 0x83C1 +0xE8C8 0x83F7 +0xE8C9 0x8407 +0xE8CA 0x83E0 +0xE8CB 0x83F2 +0xE8CC 0x840D +0xE8CD 0x8422 +0xE8CE 0x8420 +0xE8CF 0x83BD +0xE8D0 0x8438 +0xE8D1 0x8506 +0xE8D2 0x83FB +0xE8D3 0x846D +0xE8D4 0x842A +0xE8D5 0x843C +0xE8D6 0x855A +0xE8D7 0x8484 +0xE8D8 0x8477 +0xE8D9 0x846B +0xE8DA 0x84AD +0xE8DB 0x846E +0xE8DC 0x8482 +0xE8DD 0x8469 +0xE8DE 0x8446 +0xE8DF 0x842C +0xE8E0 0x846F +0xE8E1 0x8479 +0xE8E2 0x8435 +0xE8E3 0x84CA +0xE8E4 0x8462 +0xE8E5 0x84B9 +0xE8E6 0x84BF +0xE8E7 0x849F +0xE8E8 0x84D9 +0xE8E9 0x84CD +0xE8EA 0x84BB +0xE8EB 0x84DA +0xE8EC 0x84D0 +0xE8ED 0x84C1 +0xE8EE 0x84C6 +0xE8EF 0x84D6 +0xE8F0 0x84A1 +0xE8F1 0x8521 +0xE8F2 0x84FF +0xE8F3 0x84F4 +0xE8F4 0x8517 +0xE8F5 0x8518 +0xE8F6 0x852C +0xE8F7 0x851F +0xE8F8 0x8515 +0xE8F9 0x8514 +0xE8FA 0x84FC +0xE8FB 0x8540 +0xE8FC 0x8563 +0xE8FD 0x8558 +0xE8FE 0x8548 +0xE9A1 0x8541 +0xE9A2 0x8602 +0xE9A3 0x854B +0xE9A4 0x8555 +0xE9A5 0x8580 +0xE9A6 0x85A4 +0xE9A7 0x8588 +0xE9A8 0x8591 +0xE9A9 0x858A +0xE9AA 0x85A8 +0xE9AB 0x856D +0xE9AC 0x8594 +0xE9AD 0x859B +0xE9AE 0x85EA +0xE9AF 0x8587 +0xE9B0 0x859C +0xE9B1 0x8577 +0xE9B2 0x857E +0xE9B3 0x8590 +0xE9B4 0x85C9 +0xE9B5 0x85BA +0xE9B6 0x85CF +0xE9B7 0x85B9 +0xE9B8 0x85D0 +0xE9B9 0x85D5 +0xE9BA 0x85DD +0xE9BB 0x85E5 +0xE9BC 0x85DC +0xE9BD 0x85F9 +0xE9BE 0x860A +0xE9BF 0x8613 +0xE9C0 0x860B +0xE9C1 0x85FE +0xE9C2 0x85FA +0xE9C3 0x8606 +0xE9C4 0x8622 +0xE9C5 0x861A +0xE9C6 0x8630 +0xE9C7 0x863F +0xE9C8 0x864D +0xE9C9 0x4E55 +0xE9CA 0x8654 +0xE9CB 0x865F +0xE9CC 0x8667 +0xE9CD 0x8671 +0xE9CE 0x8693 +0xE9CF 0x86A3 +0xE9D0 0x86A9 +0xE9D1 0x86AA +0xE9D2 0x868B +0xE9D3 0x868C +0xE9D4 0x86B6 +0xE9D5 0x86AF +0xE9D6 0x86C4 +0xE9D7 0x86C6 +0xE9D8 0x86B0 +0xE9D9 0x86C9 +0xE9DA 0x8823 +0xE9DB 0x86AB +0xE9DC 0x86D4 +0xE9DD 0x86DE +0xE9DE 0x86E9 +0xE9DF 0x86EC +0xE9E0 0x86DF +0xE9E1 0x86DB +0xE9E2 0x86EF +0xE9E3 0x8712 +0xE9E4 0x8706 +0xE9E5 0x8708 +0xE9E6 0x8700 +0xE9E7 0x8703 +0xE9E8 0x86FB +0xE9E9 0x8711 +0xE9EA 0x8709 +0xE9EB 0x870D +0xE9EC 0x86F9 +0xE9ED 0x870A +0xE9EE 0x8734 +0xE9EF 0x873F +0xE9F0 0x8737 +0xE9F1 0x873B +0xE9F2 0x8725 +0xE9F3 0x8729 +0xE9F4 0x871A +0xE9F5 0x8760 +0xE9F6 0x875F +0xE9F7 0x8778 +0xE9F8 0x874C +0xE9F9 0x874E +0xE9FA 0x8774 +0xE9FB 0x8757 +0xE9FC 0x8768 +0xE9FD 0x876E +0xE9FE 0x8759 +0xEAA1 0x8753 +0xEAA2 0x8763 +0xEAA3 0x876A +0xEAA4 0x8805 +0xEAA5 0x87A2 +0xEAA6 0x879F +0xEAA7 0x8782 +0xEAA8 0x87AF +0xEAA9 0x87CB +0xEAAA 0x87BD +0xEAAB 0x87C0 +0xEAAC 0x87D0 +0xEAAD 0x96D6 +0xEAAE 0x87AB +0xEAAF 0x87C4 +0xEAB0 0x87B3 +0xEAB1 0x87C7 +0xEAB2 0x87C6 +0xEAB3 0x87BB +0xEAB4 0x87EF +0xEAB5 0x87F2 +0xEAB6 0x87E0 +0xEAB7 0x880F +0xEAB8 0x880D +0xEAB9 0x87FE +0xEABA 0x87F6 +0xEABB 0x87F7 +0xEABC 0x880E +0xEABD 0x87D2 +0xEABE 0x8811 +0xEABF 0x8816 +0xEAC0 0x8815 +0xEAC1 0x8822 +0xEAC2 0x8821 +0xEAC3 0x8831 +0xEAC4 0x8836 +0xEAC5 0x8839 +0xEAC6 0x8827 +0xEAC7 0x883B +0xEAC8 0x8844 +0xEAC9 0x8842 +0xEACA 0x8852 +0xEACB 0x8859 +0xEACC 0x885E +0xEACD 0x8862 +0xEACE 0x886B +0xEACF 0x8881 +0xEAD0 0x887E +0xEAD1 0x889E +0xEAD2 0x8875 +0xEAD3 0x887D +0xEAD4 0x88B5 +0xEAD5 0x8872 +0xEAD6 0x8882 +0xEAD7 0x8897 +0xEAD8 0x8892 +0xEAD9 0x88AE +0xEADA 0x8899 +0xEADB 0x88A2 +0xEADC 0x888D +0xEADD 0x88A4 +0xEADE 0x88B0 +0xEADF 0x88BF +0xEAE0 0x88B1 +0xEAE1 0x88C3 +0xEAE2 0x88C4 +0xEAE3 0x88D4 +0xEAE4 0x88D8 +0xEAE5 0x88D9 +0xEAE6 0x88DD +0xEAE7 0x88F9 +0xEAE8 0x8902 +0xEAE9 0x88FC +0xEAEA 0x88F4 +0xEAEB 0x88E8 +0xEAEC 0x88F2 +0xEAED 0x8904 +0xEAEE 0x890C +0xEAEF 0x890A +0xEAF0 0x8913 +0xEAF1 0x8943 +0xEAF2 0x891E +0xEAF3 0x8925 +0xEAF4 0x892A +0xEAF5 0x892B +0xEAF6 0x8941 +0xEAF7 0x8944 +0xEAF8 0x893B +0xEAF9 0x8936 +0xEAFA 0x8938 +0xEAFB 0x894C +0xEAFC 0x891D +0xEAFD 0x8960 +0xEAFE 0x895E +0xEBA1 0x8966 +0xEBA2 0x8964 +0xEBA3 0x896D +0xEBA4 0x896A +0xEBA5 0x896F +0xEBA6 0x8974 +0xEBA7 0x8977 +0xEBA8 0x897E +0xEBA9 0x8983 +0xEBAA 0x8988 +0xEBAB 0x898A +0xEBAC 0x8993 +0xEBAD 0x8998 +0xEBAE 0x89A1 +0xEBAF 0x89A9 +0xEBB0 0x89A6 +0xEBB1 0x89AC +0xEBB2 0x89AF +0xEBB3 0x89B2 +0xEBB4 0x89BA +0xEBB5 0x89BD +0xEBB6 0x89BF +0xEBB7 0x89C0 +0xEBB8 0x89DA +0xEBB9 0x89DC +0xEBBA 0x89DD +0xEBBB 0x89E7 +0xEBBC 0x89F4 +0xEBBD 0x89F8 +0xEBBE 0x8A03 +0xEBBF 0x8A16 +0xEBC0 0x8A10 +0xEBC1 0x8A0C +0xEBC2 0x8A1B +0xEBC3 0x8A1D +0xEBC4 0x8A25 +0xEBC5 0x8A36 +0xEBC6 0x8A41 +0xEBC7 0x8A5B +0xEBC8 0x8A52 +0xEBC9 0x8A46 +0xEBCA 0x8A48 +0xEBCB 0x8A7C +0xEBCC 0x8A6D +0xEBCD 0x8A6C +0xEBCE 0x8A62 +0xEBCF 0x8A85 +0xEBD0 0x8A82 +0xEBD1 0x8A84 +0xEBD2 0x8AA8 +0xEBD3 0x8AA1 +0xEBD4 0x8A91 +0xEBD5 0x8AA5 +0xEBD6 0x8AA6 +0xEBD7 0x8A9A +0xEBD8 0x8AA3 +0xEBD9 0x8AC4 +0xEBDA 0x8ACD +0xEBDB 0x8AC2 +0xEBDC 0x8ADA +0xEBDD 0x8AEB +0xEBDE 0x8AF3 +0xEBDF 0x8AE7 +0xEBE0 0x8AE4 +0xEBE1 0x8AF1 +0xEBE2 0x8B14 +0xEBE3 0x8AE0 +0xEBE4 0x8AE2 +0xEBE5 0x8AF7 +0xEBE6 0x8ADE +0xEBE7 0x8ADB +0xEBE8 0x8B0C +0xEBE9 0x8B07 +0xEBEA 0x8B1A +0xEBEB 0x8AE1 +0xEBEC 0x8B16 +0xEBED 0x8B10 +0xEBEE 0x8B17 +0xEBEF 0x8B20 +0xEBF0 0x8B33 +0xEBF1 0x97AB +0xEBF2 0x8B26 +0xEBF3 0x8B2B +0xEBF4 0x8B3E +0xEBF5 0x8B28 +0xEBF6 0x8B41 +0xEBF7 0x8B4C +0xEBF8 0x8B4F +0xEBF9 0x8B4E +0xEBFA 0x8B49 +0xEBFB 0x8B56 +0xEBFC 0x8B5B +0xEBFD 0x8B5A +0xEBFE 0x8B6B +0xECA1 0x8B5F +0xECA2 0x8B6C +0xECA3 0x8B6F +0xECA4 0x8B74 +0xECA5 0x8B7D +0xECA6 0x8B80 +0xECA7 0x8B8C +0xECA8 0x8B8E +0xECA9 0x8B92 +0xECAA 0x8B93 +0xECAB 0x8B96 +0xECAC 0x8B99 +0xECAD 0x8B9A +0xECAE 0x8C3A +0xECAF 0x8C41 +0xECB0 0x8C3F +0xECB1 0x8C48 +0xECB2 0x8C4C +0xECB3 0x8C4E +0xECB4 0x8C50 +0xECB5 0x8C55 +0xECB6 0x8C62 +0xECB7 0x8C6C +0xECB8 0x8C78 +0xECB9 0x8C7A +0xECBA 0x8C82 +0xECBB 0x8C89 +0xECBC 0x8C85 +0xECBD 0x8C8A +0xECBE 0x8C8D +0xECBF 0x8C8E +0xECC0 0x8C94 +0xECC1 0x8C7C +0xECC2 0x8C98 +0xECC3 0x621D +0xECC4 0x8CAD +0xECC5 0x8CAA +0xECC6 0x8CBD +0xECC7 0x8CB2 +0xECC8 0x8CB3 +0xECC9 0x8CAE +0xECCA 0x8CB6 +0xECCB 0x8CC8 +0xECCC 0x8CC1 +0xECCD 0x8CE4 +0xECCE 0x8CE3 +0xECCF 0x8CDA +0xECD0 0x8CFD +0xECD1 0x8CFA +0xECD2 0x8CFB +0xECD3 0x8D04 +0xECD4 0x8D05 +0xECD5 0x8D0A +0xECD6 0x8D07 +0xECD7 0x8D0F +0xECD8 0x8D0D +0xECD9 0x8D10 +0xECDA 0x9F4E +0xECDB 0x8D13 +0xECDC 0x8CCD +0xECDD 0x8D14 +0xECDE 0x8D16 +0xECDF 0x8D67 +0xECE0 0x8D6D +0xECE1 0x8D71 +0xECE2 0x8D73 +0xECE3 0x8D81 +0xECE4 0x8D99 +0xECE5 0x8DC2 +0xECE6 0x8DBE +0xECE7 0x8DBA +0xECE8 0x8DCF +0xECE9 0x8DDA +0xECEA 0x8DD6 +0xECEB 0x8DCC +0xECEC 0x8DDB +0xECED 0x8DCB +0xECEE 0x8DEA +0xECEF 0x8DEB +0xECF0 0x8DDF +0xECF1 0x8DE3 +0xECF2 0x8DFC +0xECF3 0x8E08 +0xECF4 0x8E09 +0xECF5 0x8DFF +0xECF6 0x8E1D +0xECF7 0x8E1E +0xECF8 0x8E10 +0xECF9 0x8E1F +0xECFA 0x8E42 +0xECFB 0x8E35 +0xECFC 0x8E30 +0xECFD 0x8E34 +0xECFE 0x8E4A +0xEDA1 0x8E47 +0xEDA2 0x8E49 +0xEDA3 0x8E4C +0xEDA4 0x8E50 +0xEDA5 0x8E48 +0xEDA6 0x8E59 +0xEDA7 0x8E64 +0xEDA8 0x8E60 +0xEDA9 0x8E2A +0xEDAA 0x8E63 +0xEDAB 0x8E55 +0xEDAC 0x8E76 +0xEDAD 0x8E72 +0xEDAE 0x8E7C +0xEDAF 0x8E81 +0xEDB0 0x8E87 +0xEDB1 0x8E85 +0xEDB2 0x8E84 +0xEDB3 0x8E8B +0xEDB4 0x8E8A +0xEDB5 0x8E93 +0xEDB6 0x8E91 +0xEDB7 0x8E94 +0xEDB8 0x8E99 +0xEDB9 0x8EAA +0xEDBA 0x8EA1 +0xEDBB 0x8EAC +0xEDBC 0x8EB0 +0xEDBD 0x8EC6 +0xEDBE 0x8EB1 +0xEDBF 0x8EBE +0xEDC0 0x8EC5 +0xEDC1 0x8EC8 +0xEDC2 0x8ECB +0xEDC3 0x8EDB +0xEDC4 0x8EE3 +0xEDC5 0x8EFC +0xEDC6 0x8EFB +0xEDC7 0x8EEB +0xEDC8 0x8EFE +0xEDC9 0x8F0A +0xEDCA 0x8F05 +0xEDCB 0x8F15 +0xEDCC 0x8F12 +0xEDCD 0x8F19 +0xEDCE 0x8F13 +0xEDCF 0x8F1C +0xEDD0 0x8F1F +0xEDD1 0x8F1B +0xEDD2 0x8F0C +0xEDD3 0x8F26 +0xEDD4 0x8F33 +0xEDD5 0x8F3B +0xEDD6 0x8F39 +0xEDD7 0x8F45 +0xEDD8 0x8F42 +0xEDD9 0x8F3E +0xEDDA 0x8F4C +0xEDDB 0x8F49 +0xEDDC 0x8F46 +0xEDDD 0x8F4E +0xEDDE 0x8F57 +0xEDDF 0x8F5C +0xEDE0 0x8F62 +0xEDE1 0x8F63 +0xEDE2 0x8F64 +0xEDE3 0x8F9C +0xEDE4 0x8F9F +0xEDE5 0x8FA3 +0xEDE6 0x8FAD +0xEDE7 0x8FAF +0xEDE8 0x8FB7 +0xEDE9 0x8FDA +0xEDEA 0x8FE5 +0xEDEB 0x8FE2 +0xEDEC 0x8FEA +0xEDED 0x8FEF +0xEDEE 0x9087 +0xEDEF 0x8FF4 +0xEDF0 0x9005 +0xEDF1 0x8FF9 +0xEDF2 0x8FFA +0xEDF3 0x9011 +0xEDF4 0x9015 +0xEDF5 0x9021 +0xEDF6 0x900D +0xEDF7 0x901E +0xEDF8 0x9016 +0xEDF9 0x900B +0xEDFA 0x9027 +0xEDFB 0x9036 +0xEDFC 0x9035 +0xEDFD 0x9039 +0xEDFE 0x8FF8 +0xEEA1 0x904F +0xEEA2 0x9050 +0xEEA3 0x9051 +0xEEA4 0x9052 +0xEEA5 0x900E +0xEEA6 0x9049 +0xEEA7 0x903E +0xEEA8 0x9056 +0xEEA9 0x9058 +0xEEAA 0x905E +0xEEAB 0x9068 +0xEEAC 0x906F +0xEEAD 0x9076 +0xEEAE 0x96A8 +0xEEAF 0x9072 +0xEEB0 0x9082 +0xEEB1 0x907D +0xEEB2 0x9081 +0xEEB3 0x9080 +0xEEB4 0x908A +0xEEB5 0x9089 +0xEEB6 0x908F +0xEEB7 0x90A8 +0xEEB8 0x90AF +0xEEB9 0x90B1 +0xEEBA 0x90B5 +0xEEBB 0x90E2 +0xEEBC 0x90E4 +0xEEBD 0x6248 +0xEEBE 0x90DB +0xEEBF 0x9102 +0xEEC0 0x9112 +0xEEC1 0x9119 +0xEEC2 0x9132 +0xEEC3 0x9130 +0xEEC4 0x914A +0xEEC5 0x9156 +0xEEC6 0x9158 +0xEEC7 0x9163 +0xEEC8 0x9165 +0xEEC9 0x9169 +0xEECA 0x9173 +0xEECB 0x9172 +0xEECC 0x918B +0xEECD 0x9189 +0xEECE 0x9182 +0xEECF 0x91A2 +0xEED0 0x91AB +0xEED1 0x91AF +0xEED2 0x91AA +0xEED3 0x91B5 +0xEED4 0x91B4 +0xEED5 0x91BA +0xEED6 0x91C0 +0xEED7 0x91C1 +0xEED8 0x91C9 +0xEED9 0x91CB +0xEEDA 0x91D0 +0xEEDB 0x91D6 +0xEEDC 0x91DF +0xEEDD 0x91E1 +0xEEDE 0x91DB +0xEEDF 0x91FC +0xEEE0 0x91F5 +0xEEE1 0x91F6 +0xEEE2 0x921E +0xEEE3 0x91FF +0xEEE4 0x9214 +0xEEE5 0x922C +0xEEE6 0x9215 +0xEEE7 0x9211 +0xEEE8 0x925E +0xEEE9 0x9257 +0xEEEA 0x9245 +0xEEEB 0x9249 +0xEEEC 0x9264 +0xEEED 0x9248 +0xEEEE 0x9295 +0xEEEF 0x923F +0xEEF0 0x924B +0xEEF1 0x9250 +0xEEF2 0x929C +0xEEF3 0x9296 +0xEEF4 0x9293 +0xEEF5 0x929B +0xEEF6 0x925A +0xEEF7 0x92CF +0xEEF8 0x92B9 +0xEEF9 0x92B7 +0xEEFA 0x92E9 +0xEEFB 0x930F +0xEEFC 0x92FA +0xEEFD 0x9344 +0xEEFE 0x932E +0xEFA1 0x9319 +0xEFA2 0x9322 +0xEFA3 0x931A +0xEFA4 0x9323 +0xEFA5 0x933A +0xEFA6 0x9335 +0xEFA7 0x933B +0xEFA8 0x935C +0xEFA9 0x9360 +0xEFAA 0x937C +0xEFAB 0x936E +0xEFAC 0x9356 +0xEFAD 0x93B0 +0xEFAE 0x93AC +0xEFAF 0x93AD +0xEFB0 0x9394 +0xEFB1 0x93B9 +0xEFB2 0x93D6 +0xEFB3 0x93D7 +0xEFB4 0x93E8 +0xEFB5 0x93E5 +0xEFB6 0x93D8 +0xEFB7 0x93C3 +0xEFB8 0x93DD +0xEFB9 0x93D0 +0xEFBA 0x93C8 +0xEFBB 0x93E4 +0xEFBC 0x941A +0xEFBD 0x9414 +0xEFBE 0x9413 +0xEFBF 0x9403 +0xEFC0 0x9407 +0xEFC1 0x9410 +0xEFC2 0x9436 +0xEFC3 0x942B +0xEFC4 0x9435 +0xEFC5 0x9421 +0xEFC6 0x943A +0xEFC7 0x9441 +0xEFC8 0x9452 +0xEFC9 0x9444 +0xEFCA 0x945B +0xEFCB 0x9460 +0xEFCC 0x9462 +0xEFCD 0x945E +0xEFCE 0x946A +0xEFCF 0x9229 +0xEFD0 0x9470 +0xEFD1 0x9475 +0xEFD2 0x9477 +0xEFD3 0x947D +0xEFD4 0x945A +0xEFD5 0x947C +0xEFD6 0x947E +0xEFD7 0x9481 +0xEFD8 0x947F +0xEFD9 0x9582 +0xEFDA 0x9587 +0xEFDB 0x958A +0xEFDC 0x9594 +0xEFDD 0x9596 +0xEFDE 0x9598 +0xEFDF 0x9599 +0xEFE0 0x95A0 +0xEFE1 0x95A8 +0xEFE2 0x95A7 +0xEFE3 0x95AD +0xEFE4 0x95BC +0xEFE5 0x95BB +0xEFE6 0x95B9 +0xEFE7 0x95BE +0xEFE8 0x95CA +0xEFE9 0x6FF6 +0xEFEA 0x95C3 +0xEFEB 0x95CD +0xEFEC 0x95CC +0xEFED 0x95D5 +0xEFEE 0x95D4 +0xEFEF 0x95D6 +0xEFF0 0x95DC +0xEFF1 0x95E1 +0xEFF2 0x95E5 +0xEFF3 0x95E2 +0xEFF4 0x9621 +0xEFF5 0x9628 +0xEFF6 0x962E +0xEFF7 0x962F +0xEFF8 0x9642 +0xEFF9 0x964C +0xEFFA 0x964F +0xEFFB 0x964B +0xEFFC 0x9677 +0xEFFD 0x965C +0xEFFE 0x965E +0xF0A1 0x965D +0xF0A2 0x965F +0xF0A3 0x9666 +0xF0A4 0x9672 +0xF0A5 0x966C +0xF0A6 0x968D +0xF0A7 0x9698 +0xF0A8 0x9695 +0xF0A9 0x9697 +0xF0AA 0x96AA +0xF0AB 0x96A7 +0xF0AC 0x96B1 +0xF0AD 0x96B2 +0xF0AE 0x96B0 +0xF0AF 0x96B4 +0xF0B0 0x96B6 +0xF0B1 0x96B8 +0xF0B2 0x96B9 +0xF0B3 0x96CE +0xF0B4 0x96CB +0xF0B5 0x96C9 +0xF0B6 0x96CD +0xF0B7 0x894D +0xF0B8 0x96DC +0xF0B9 0x970D +0xF0BA 0x96D5 +0xF0BB 0x96F9 +0xF0BC 0x9704 +0xF0BD 0x9706 +0xF0BE 0x9708 +0xF0BF 0x9713 +0xF0C0 0x970E +0xF0C1 0x9711 +0xF0C2 0x970F +0xF0C3 0x9716 +0xF0C4 0x9719 +0xF0C5 0x9724 +0xF0C6 0x972A +0xF0C7 0x9730 +0xF0C8 0x9739 +0xF0C9 0x973D +0xF0CA 0x973E +0xF0CB 0x9744 +0xF0CC 0x9746 +0xF0CD 0x9748 +0xF0CE 0x9742 +0xF0CF 0x9749 +0xF0D0 0x975C +0xF0D1 0x9760 +0xF0D2 0x9764 +0xF0D3 0x9766 +0xF0D4 0x9768 +0xF0D5 0x52D2 +0xF0D6 0x976B +0xF0D7 0x9771 +0xF0D8 0x9779 +0xF0D9 0x9785 +0xF0DA 0x977C +0xF0DB 0x9781 +0xF0DC 0x977A +0xF0DD 0x9786 +0xF0DE 0x978B +0xF0DF 0x978F +0xF0E0 0x9790 +0xF0E1 0x979C +0xF0E2 0x97A8 +0xF0E3 0x97A6 +0xF0E4 0x97A3 +0xF0E5 0x97B3 +0xF0E6 0x97B4 +0xF0E7 0x97C3 +0xF0E8 0x97C6 +0xF0E9 0x97C8 +0xF0EA 0x97CB +0xF0EB 0x97DC +0xF0EC 0x97ED +0xF0ED 0x9F4F +0xF0EE 0x97F2 +0xF0EF 0x7ADF +0xF0F0 0x97F6 +0xF0F1 0x97F5 +0xF0F2 0x980F +0xF0F3 0x980C +0xF0F4 0x9838 +0xF0F5 0x9824 +0xF0F6 0x9821 +0xF0F7 0x9837 +0xF0F8 0x983D +0xF0F9 0x9846 +0xF0FA 0x984F +0xF0FB 0x984B +0xF0FC 0x986B +0xF0FD 0x986F +0xF0FE 0x9870 +0xF1A1 0x9871 +0xF1A2 0x9874 +0xF1A3 0x9873 +0xF1A4 0x98AA +0xF1A5 0x98AF +0xF1A6 0x98B1 +0xF1A7 0x98B6 +0xF1A8 0x98C4 +0xF1A9 0x98C3 +0xF1AA 0x98C6 +0xF1AB 0x98E9 +0xF1AC 0x98EB +0xF1AD 0x9903 +0xF1AE 0x9909 +0xF1AF 0x9912 +0xF1B0 0x9914 +0xF1B1 0x9918 +0xF1B2 0x9921 +0xF1B3 0x991D +0xF1B4 0x991E +0xF1B5 0x9924 +0xF1B6 0x9920 +0xF1B7 0x992C +0xF1B8 0x992E +0xF1B9 0x993D +0xF1BA 0x993E +0xF1BB 0x9942 +0xF1BC 0x9949 +0xF1BD 0x9945 +0xF1BE 0x9950 +0xF1BF 0x994B +0xF1C0 0x9951 +0xF1C1 0x9952 +0xF1C2 0x994C +0xF1C3 0x9955 +0xF1C4 0x9997 +0xF1C5 0x9998 +0xF1C6 0x99A5 +0xF1C7 0x99AD +0xF1C8 0x99AE +0xF1C9 0x99BC +0xF1CA 0x99DF +0xF1CB 0x99DB +0xF1CC 0x99DD +0xF1CD 0x99D8 +0xF1CE 0x99D1 +0xF1CF 0x99ED +0xF1D0 0x99EE +0xF1D1 0x99F1 +0xF1D2 0x99F2 +0xF1D3 0x99FB +0xF1D4 0x99F8 +0xF1D5 0x9A01 +0xF1D6 0x9A0F +0xF1D7 0x9A05 +0xF1D8 0x99E2 +0xF1D9 0x9A19 +0xF1DA 0x9A2B +0xF1DB 0x9A37 +0xF1DC 0x9A45 +0xF1DD 0x9A42 +0xF1DE 0x9A40 +0xF1DF 0x9A43 +0xF1E0 0x9A3E +0xF1E1 0x9A55 +0xF1E2 0x9A4D +0xF1E3 0x9A5B +0xF1E4 0x9A57 +0xF1E5 0x9A5F +0xF1E6 0x9A62 +0xF1E7 0x9A65 +0xF1E8 0x9A64 +0xF1E9 0x9A69 +0xF1EA 0x9A6B +0xF1EB 0x9A6A +0xF1EC 0x9AAD +0xF1ED 0x9AB0 +0xF1EE 0x9ABC +0xF1EF 0x9AC0 +0xF1F0 0x9ACF +0xF1F1 0x9AD1 +0xF1F2 0x9AD3 +0xF1F3 0x9AD4 +0xF1F4 0x9ADE +0xF1F5 0x9ADF +0xF1F6 0x9AE2 +0xF1F7 0x9AE3 +0xF1F8 0x9AE6 +0xF1F9 0x9AEF +0xF1FA 0x9AEB +0xF1FB 0x9AEE +0xF1FC 0x9AF4 +0xF1FD 0x9AF1 +0xF1FE 0x9AF7 +0xF2A1 0x9AFB +0xF2A2 0x9B06 +0xF2A3 0x9B18 +0xF2A4 0x9B1A +0xF2A5 0x9B1F +0xF2A6 0x9B22 +0xF2A7 0x9B23 +0xF2A8 0x9B25 +0xF2A9 0x9B27 +0xF2AA 0x9B28 +0xF2AB 0x9B29 +0xF2AC 0x9B2A +0xF2AD 0x9B2E +0xF2AE 0x9B2F +0xF2AF 0x9B32 +0xF2B0 0x9B44 +0xF2B1 0x9B43 +0xF2B2 0x9B4F +0xF2B3 0x9B4D +0xF2B4 0x9B4E +0xF2B5 0x9B51 +0xF2B6 0x9B58 +0xF2B7 0x9B74 +0xF2B8 0x9B93 +0xF2B9 0x9B83 +0xF2BA 0x9B91 +0xF2BB 0x9B96 +0xF2BC 0x9B97 +0xF2BD 0x9B9F +0xF2BE 0x9BA0 +0xF2BF 0x9BA8 +0xF2C0 0x9BB4 +0xF2C1 0x9BC0 +0xF2C2 0x9BCA +0xF2C3 0x9BB9 +0xF2C4 0x9BC6 +0xF2C5 0x9BCF +0xF2C6 0x9BD1 +0xF2C7 0x9BD2 +0xF2C8 0x9BE3 +0xF2C9 0x9BE2 +0xF2CA 0x9BE4 +0xF2CB 0x9BD4 +0xF2CC 0x9BE1 +0xF2CD 0x9C3A +0xF2CE 0x9BF2 +0xF2CF 0x9BF1 +0xF2D0 0x9BF0 +0xF2D1 0x9C15 +0xF2D2 0x9C14 +0xF2D3 0x9C09 +0xF2D4 0x9C13 +0xF2D5 0x9C0C +0xF2D6 0x9C06 +0xF2D7 0x9C08 +0xF2D8 0x9C12 +0xF2D9 0x9C0A +0xF2DA 0x9C04 +0xF2DB 0x9C2E +0xF2DC 0x9C1B +0xF2DD 0x9C25 +0xF2DE 0x9C24 +0xF2DF 0x9C21 +0xF2E0 0x9C30 +0xF2E1 0x9C47 +0xF2E2 0x9C32 +0xF2E3 0x9C46 +0xF2E4 0x9C3E +0xF2E5 0x9C5A +0xF2E6 0x9C60 +0xF2E7 0x9C67 +0xF2E8 0x9C76 +0xF2E9 0x9C78 +0xF2EA 0x9CE7 +0xF2EB 0x9CEC +0xF2EC 0x9CF0 +0xF2ED 0x9D09 +0xF2EE 0x9D08 +0xF2EF 0x9CEB +0xF2F0 0x9D03 +0xF2F1 0x9D06 +0xF2F2 0x9D2A +0xF2F3 0x9D26 +0xF2F4 0x9DAF +0xF2F5 0x9D23 +0xF2F6 0x9D1F +0xF2F7 0x9D44 +0xF2F8 0x9D15 +0xF2F9 0x9D12 +0xF2FA 0x9D41 +0xF2FB 0x9D3F +0xF2FC 0x9D3E +0xF2FD 0x9D46 +0xF2FE 0x9D48 +0xF3A1 0x9D5D +0xF3A2 0x9D5E +0xF3A3 0x9D64 +0xF3A4 0x9D51 +0xF3A5 0x9D50 +0xF3A6 0x9D59 +0xF3A7 0x9D72 +0xF3A8 0x9D89 +0xF3A9 0x9D87 +0xF3AA 0x9DAB +0xF3AB 0x9D6F +0xF3AC 0x9D7A +0xF3AD 0x9D9A +0xF3AE 0x9DA4 +0xF3AF 0x9DA9 +0xF3B0 0x9DB2 +0xF3B1 0x9DC4 +0xF3B2 0x9DC1 +0xF3B3 0x9DBB +0xF3B4 0x9DB8 +0xF3B5 0x9DBA +0xF3B6 0x9DC6 +0xF3B7 0x9DCF +0xF3B8 0x9DC2 +0xF3B9 0x9DD9 +0xF3BA 0x9DD3 +0xF3BB 0x9DF8 +0xF3BC 0x9DE6 +0xF3BD 0x9DED +0xF3BE 0x9DEF +0xF3BF 0x9DFD +0xF3C0 0x9E1A +0xF3C1 0x9E1B +0xF3C2 0x9E1E +0xF3C3 0x9E75 +0xF3C4 0x9E79 +0xF3C5 0x9E7D +0xF3C6 0x9E81 +0xF3C7 0x9E88 +0xF3C8 0x9E8B +0xF3C9 0x9E8C +0xF3CA 0x9E92 +0xF3CB 0x9E95 +0xF3CC 0x9E91 +0xF3CD 0x9E9D +0xF3CE 0x9EA5 +0xF3CF 0x9EA9 +0xF3D0 0x9EB8 +0xF3D1 0x9EAA +0xF3D2 0x9EAD +0xF3D3 0x9761 +0xF3D4 0x9ECC +0xF3D5 0x9ECE +0xF3D6 0x9ECF +0xF3D7 0x9ED0 +0xF3D8 0x9ED4 +0xF3D9 0x9EDC +0xF3DA 0x9EDE +0xF3DB 0x9EDD +0xF3DC 0x9EE0 +0xF3DD 0x9EE5 +0xF3DE 0x9EE8 +0xF3DF 0x9EEF +0xF3E0 0x9EF4 +0xF3E1 0x9EF6 +0xF3E2 0x9EF7 +0xF3E3 0x9EF9 +0xF3E4 0x9EFB +0xF3E5 0x9EFC +0xF3E6 0x9EFD +0xF3E7 0x9F07 +0xF3E8 0x9F08 +0xF3E9 0x76B7 +0xF3EA 0x9F15 +0xF3EB 0x9F21 +0xF3EC 0x9F2C +0xF3ED 0x9F3E +0xF3EE 0x9F4A +0xF3EF 0x9F52 +0xF3F0 0x9F54 +0xF3F1 0x9F63 +0xF3F2 0x9F5F +0xF3F3 0x9F60 +0xF3F4 0x9F61 +0xF3F5 0x9F66 +0xF3F6 0x9F67 +0xF3F7 0x9F6C +0xF3F8 0x9F6A +0xF3F9 0x9F77 +0xF3FA 0x9F72 +0xF3FB 0x9F76 +0xF3FC 0x9F95 +0xF3FD 0x9F9C +0xF3FE 0x9FA0 +0xF4A1 0x582F +0xF4A2 0x69C7 +0xF4A3 0x9059 +0xF4A4 0x7464 +0xF4A5 0x51DC +0xF4A6 0x7199 diff --git a/ext/mbstring/tests/data/KOI8-R.txt b/ext/mbstring/tests/data/KOI8-R.txt new file mode 100644 index 0000000000000..2a1afb70d9643 --- /dev/null +++ b/ext/mbstring/tests/data/KOI8-R.txt @@ -0,0 +1,294 @@ +# KOI8-R.TXT +# Date: 2016-01-04 23:05:00 GMT [KW] +# © 2016 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: KOI8-R (RFC1489) to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 18 August 1999 (header updated: 2016-January-04) +# Authors: Helmut Richter +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# KOI8-R characters map into Unicode. The underlying document is the +# mapping described in RFC 1489. No statements are made as to whether +# this mapping is the same as the mapping defined as "Code Page 878" +# with some vendors. +# +# Format: Three tab-separated columns +# Column #1 is the KOI8-R code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in KOI8-R order. +# +# Version history +# 1.0 version: created. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us at: +# http://www.unicode.org/reporting.html +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x8B 0x2580 # UPPER HALF BLOCK +0x8C 0x2584 # LOWER HALF BLOCK +0x8D 0x2588 # FULL BLOCK +0x8E 0x258C # LEFT HALF BLOCK +0x8F 0x2590 # RIGHT HALF BLOCK +0x90 0x2591 # LIGHT SHADE +0x91 0x2592 # MEDIUM SHADE +0x92 0x2593 # DARK SHADE +0x93 0x2320 # TOP HALF INTEGRAL +0x94 0x25A0 # BLACK SQUARE +0x95 0x2219 # BULLET OPERATOR +0x96 0x221A # SQUARE ROOT +0x97 0x2248 # ALMOST EQUAL TO +0x98 0x2264 # LESS-THAN OR EQUAL TO +0x99 0x2265 # GREATER-THAN OR EQUAL TO +0x9A 0x00A0 # NO-BREAK SPACE +0x9B 0x2321 # BOTTOM HALF INTEGRAL +0x9C 0x00B0 # DEGREE SIGN +0x9D 0x00B2 # SUPERSCRIPT TWO +0x9E 0x00B7 # MIDDLE DOT +0x9F 0x00F7 # DIVISION SIGN +0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL +0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL +0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +0xA3 0x0451 # CYRILLIC SMALL LETTER IO +0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT +0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT +0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT +0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO +0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xBF 0x00A9 # COPYRIGHT SIGN +0xC0 0x044E # CYRILLIC SMALL LETTER YU +0xC1 0x0430 # CYRILLIC SMALL LETTER A +0xC2 0x0431 # CYRILLIC SMALL LETTER BE +0xC3 0x0446 # CYRILLIC SMALL LETTER TSE +0xC4 0x0434 # CYRILLIC SMALL LETTER DE +0xC5 0x0435 # CYRILLIC SMALL LETTER IE +0xC6 0x0444 # CYRILLIC SMALL LETTER EF +0xC7 0x0433 # CYRILLIC SMALL LETTER GHE +0xC8 0x0445 # CYRILLIC SMALL LETTER HA +0xC9 0x0438 # CYRILLIC SMALL LETTER I +0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I +0xCB 0x043A # CYRILLIC SMALL LETTER KA +0xCC 0x043B # CYRILLIC SMALL LETTER EL +0xCD 0x043C # CYRILLIC SMALL LETTER EM +0xCE 0x043D # CYRILLIC SMALL LETTER EN +0xCF 0x043E # CYRILLIC SMALL LETTER O +0xD0 0x043F # CYRILLIC SMALL LETTER PE +0xD1 0x044F # CYRILLIC SMALL LETTER YA +0xD2 0x0440 # CYRILLIC SMALL LETTER ER +0xD3 0x0441 # CYRILLIC SMALL LETTER ES +0xD4 0x0442 # CYRILLIC SMALL LETTER TE +0xD5 0x0443 # CYRILLIC SMALL LETTER U +0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE +0xD7 0x0432 # CYRILLIC SMALL LETTER VE +0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0xD9 0x044B # CYRILLIC SMALL LETTER YERU +0xDA 0x0437 # CYRILLIC SMALL LETTER ZE +0xDB 0x0448 # CYRILLIC SMALL LETTER SHA +0xDC 0x044D # CYRILLIC SMALL LETTER E +0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA +0xDE 0x0447 # CYRILLIC SMALL LETTER CHE +0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0xE0 0x042E # CYRILLIC CAPITAL LETTER YU +0xE1 0x0410 # CYRILLIC CAPITAL LETTER A +0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE +0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE +0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE +0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE +0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF +0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE +0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA +0xE9 0x0418 # CYRILLIC CAPITAL LETTER I +0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0xEB 0x041A # CYRILLIC CAPITAL LETTER KA +0xEC 0x041B # CYRILLIC CAPITAL LETTER EL +0xED 0x041C # CYRILLIC CAPITAL LETTER EM +0xEE 0x041D # CYRILLIC CAPITAL LETTER EN +0xEF 0x041E # CYRILLIC CAPITAL LETTER O +0xF0 0x041F # CYRILLIC CAPITAL LETTER PE +0xF1 0x042F # CYRILLIC CAPITAL LETTER YA +0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER +0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES +0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE +0xF5 0x0423 # CYRILLIC CAPITAL LETTER U +0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE +0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU +0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE +0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA +0xFC 0x042D # CYRILLIC CAPITAL LETTER E +0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE +0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN diff --git a/ext/mbstring/tests/data/KOI8-U.txt b/ext/mbstring/tests/data/KOI8-U.txt new file mode 100644 index 0000000000000..c533b394097d2 --- /dev/null +++ b/ext/mbstring/tests/data/KOI8-U.txt @@ -0,0 +1,301 @@ +# KOI8-U.TXT +# Date: 2016-01-04 23:09:00 GMT [KW] +# © 2016 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# +# Name: KOI8-U (RFC2319) to Unicode +# Unicode version: 5.1 +# Table version: 2.0 +# Table format: Format A +# Date: 13 October 2008 (header updated: 2016-January-04) +# Authors: Philippe Verdy , +# Helmut Richter +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# KOI8-U characters map into Unicode. The underlying document is the +# mapping described in RFC 2319. No statements are made as to whether +# this mapping is the same as the mapping defined as "Code Page 878" +# with some vendors. +# +# The KOI8-U (RFC2319) encoding is a variant based on KOI8-R (RFC1489), +# where the support for four additional Cyrillic letters was added (both small +# and capital letters), replacing 8 box-drawing characters. It is still widely +# used to encode texts in Ukrainian, Byelorussian and Bulgarian. +# +# Format: Three tab-separated columns +# Column #1 is the KOI8-U code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in KOI8-U order. +# +# Version history +# 1.0 version: created. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact the Unicode Consortium at: +# +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x8B 0x2580 # UPPER HALF BLOCK +0x8C 0x2584 # LOWER HALF BLOCK +0x8D 0x2588 # FULL BLOCK +0x8E 0x258C # LEFT HALF BLOCK +0x8F 0x2590 # RIGHT HALF BLOCK +0x90 0x2591 # LIGHT SHADE +0x91 0x2592 # MEDIUM SHADE +0x92 0x2593 # DARK SHADE +0x93 0x2320 # TOP HALF INTEGRAL +0x94 0x25A0 # BLACK SQUARE +0x95 0x2219 # BULLET OPERATOR +0x96 0x221A # SQUARE ROOT +0x97 0x2248 # ALMOST EQUAL TO +0x98 0x2264 # LESS-THAN OR EQUAL TO +0x99 0x2265 # GREATER-THAN OR EQUAL TO +0x9A 0x00A0 # NO-BREAK SPACE +0x9B 0x2321 # BOTTOM HALF INTEGRAL +0x9C 0x00B0 # DEGREE SIGN +0x9D 0x00B2 # SUPERSCRIPT TWO +0x9E 0x00B7 # MIDDLE DOT +0x9F 0x00F7 # DIVISION SIGN +0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL +0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL +0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +0xA3 0x0451 # CYRILLIC SMALL LETTER IO +0xA4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xA6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xA7 0x0457 # CYRILLIC SMALL LETTER YI (UKRAINIAN) +0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT +0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT +0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +0xAD 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN +0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT +0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO +0xB4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xB6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xB7 0x0407 # CYRILLIC CAPITAL LETTER YI (UKRAINIAN) +0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +0xBD 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xBF 0x00A9 # COPYRIGHT SIGN +0xC0 0x044E # CYRILLIC SMALL LETTER YU +0xC1 0x0430 # CYRILLIC SMALL LETTER A +0xC2 0x0431 # CYRILLIC SMALL LETTER BE +0xC3 0x0446 # CYRILLIC SMALL LETTER TSE +0xC4 0x0434 # CYRILLIC SMALL LETTER DE +0xC5 0x0435 # CYRILLIC SMALL LETTER IE +0xC6 0x0444 # CYRILLIC SMALL LETTER EF +0xC7 0x0433 # CYRILLIC SMALL LETTER GHE +0xC8 0x0445 # CYRILLIC SMALL LETTER HA +0xC9 0x0438 # CYRILLIC SMALL LETTER I +0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I +0xCB 0x043A # CYRILLIC SMALL LETTER KA +0xCC 0x043B # CYRILLIC SMALL LETTER EL +0xCD 0x043C # CYRILLIC SMALL LETTER EM +0xCE 0x043D # CYRILLIC SMALL LETTER EN +0xCF 0x043E # CYRILLIC SMALL LETTER O +0xD0 0x043F # CYRILLIC SMALL LETTER PE +0xD1 0x044F # CYRILLIC SMALL LETTER YA +0xD2 0x0440 # CYRILLIC SMALL LETTER ER +0xD3 0x0441 # CYRILLIC SMALL LETTER ES +0xD4 0x0442 # CYRILLIC SMALL LETTER TE +0xD5 0x0443 # CYRILLIC SMALL LETTER U +0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE +0xD7 0x0432 # CYRILLIC SMALL LETTER VE +0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0xD9 0x044B # CYRILLIC SMALL LETTER YERU +0xDA 0x0437 # CYRILLIC SMALL LETTER ZE +0xDB 0x0448 # CYRILLIC SMALL LETTER SHA +0xDC 0x044D # CYRILLIC SMALL LETTER E +0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA +0xDE 0x0447 # CYRILLIC SMALL LETTER CHE +0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0xE0 0x042E # CYRILLIC CAPITAL LETTER YU +0xE1 0x0410 # CYRILLIC CAPITAL LETTER A +0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE +0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE +0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE +0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE +0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF +0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE +0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA +0xE9 0x0418 # CYRILLIC CAPITAL LETTER I +0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0xEB 0x041A # CYRILLIC CAPITAL LETTER KA +0xEC 0x041B # CYRILLIC CAPITAL LETTER EL +0xED 0x041C # CYRILLIC CAPITAL LETTER EM +0xEE 0x041D # CYRILLIC CAPITAL LETTER EN +0xEF 0x041E # CYRILLIC CAPITAL LETTER O +0xF0 0x041F # CYRILLIC CAPITAL LETTER PE +0xF1 0x042F # CYRILLIC CAPITAL LETTER YA +0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER +0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES +0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE +0xF5 0x0423 # CYRILLIC CAPITAL LETTER U +0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE +0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU +0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE +0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA +0xFC 0x042D # CYRILLIC CAPITAL LETTER E +0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE +0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN diff --git a/ext/mbstring/tests/data/MacJapanese-SJIS.txt b/ext/mbstring/tests/data/MacJapanese-SJIS.txt new file mode 100644 index 0000000000000..a604c019aae31 --- /dev/null +++ b/ext/mbstring/tests/data/MacJapanese-SJIS.txt @@ -0,0 +1,7728 @@ +#======================================================================= +# File name: JAPANESE.TXT +# +# Contents: Map (external version) from Mac OS Japanese +# encoding to Unicode 2.1 and later. +# +# Copyright: (c) 1994-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b4,c1 2002-Dec-19 Update URLs. Matches internal utom. +# b03 1999-Sep-22 Change mappings for 0xFF, 0x8150, 0x8163, +# 0xEB50, and 0xEB63 to reduce problems in +# interconversion with CP 932. Update contact +# e-mail address. Matches internal utom, +# ufrm, and Text Encoding Converter +# version 1.5. +# b02 1998-Aug-18 Update the mappings for Mac OS Japanese +# 0x8650 and 0x8855. Update the description of +# the PostScript screen variant. Matches +# internal utom, ufrm. +# n06 1998-Feb-05 Update to match internal utom, ufrm +# and Text Encoding Converter version 1.3: +# Use standard Unicodes plus transcoding hints +# instead of single corporate characters; see +# details below. Also reorder into single list +# with all one-byte characters at the +# beginning, and rewrite all the initial +# comments. +# n03 1995-Apr-15 Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Japanese code (in hex as 0xNN or 0xNNNN) +# Column #2 is the corresponding Unicode or Unicode sequence (in +# hex as 0xNNNN, 0xNNNN+0xNNNN, etc.). Sequences of up to 5 +# Unicode characters are used here. +# Column #3 is a comment containing the Unicode name. +# In some cases an additional comment follows the Unicode name. +# +# The entries are in Mac OS Japanese code order. +# All one-byte characters are at the beginning. +# +# Some of these mappings require the use of corporate characters. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Japanese encoding uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Japanese: +# ------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported directly in programming +# interfaces for QuickDraw Text, the Script Manager, and related +# Text Utilities. For other purposes it is supported via transcoding +# to and from Unicode. +# +# This table covers the standard Mac OS Japanese encoding used +# in Mac OS versions 7.1 and later. The Mac OS Japanese encoding is +# based on Shift-JIS, but adds another 300 or so characters using +# code points that are unassigned in Shift-JIS. Certain Mac OS +# Japanese fonts are based on a modified version of the Mac OS +# Japanese encoding; see below. +# +# Some of the information below comes from Ken Lunde's book +# "Understanding Japanese Information Processing", O'Reilly & Assoc., +# 1993. +# +# 1. Conventional Shift-JIS +# +# Most Shift-JIS implementations include the following characters: +# +# a) One-byte characters from JIS X0201-1976. This has two parts: +# +# - JIS-Roman, the Japanese national variant of ISO 646 (the +# international version of ASCII). This is identical to ASCII +# except that 0x5C is YEN SIGN instead of REVERSE SOLIDUS, +# 0x7E is OVERLINE instead of TILDE, and usually 0x7C is +# BROKEN BAR instead of VERTICAL LINE (although this last +# difference is sometimes seen as just a glyph variant). +# +# - "Halfwidth" katakana and punctuation characters with codes +# 0xA1-0xDF. +# +# c) Two-byte characters with first/lead/high byte in the range +# 0x81-0x9F or 0xE0-0xFC, and second/trail/low byte in the +# range 0x40-0x7E or 0x80-0xFC. The first byte range was chosen +# to avoid any JIS X0201 characters. The two-byte characters +# include: +# +# - Characters from JIS X0208-1990, transformed so they map +# onto Shift-JIS code points 0x8140-0xEFFC. The original JIS +# X0208 characters have code points in the range 0x2121 to +# 0x7E7E (corresponding to "ku-ten" codes in the range 1,1 to +# 94,94 - i.e. row and column on a JIS X0208 chart). +# +# - A user-defined range using Shift-JIS code points +# 0xF040-0xFCFC, providing 2444 code points. +# +# Note: PostScript fonts are based on JIS X0208-1983 (formerly +# known as JIS C6226-1983). This earlier version of JIS X0208 +# lacks two Kanji characters that were added for JIS X0208-1990; +# these have Shift-JIS codes xEAA3 and 0xEAA4. +# +# 2. Mac OS Japanese changes and additions +# +# a) One-byte changes and additions +# +# - Changes to JIS-Roman: In Mac OS Japanese, 0x7C and 0x7E +# are assigned as in ASCII, not as in JIS-Roman: +# 0x7C VERTICAL LINE (can be considered a glyph difference) +# 0x7E TILDE +# +# - Additional one-byte characters: basic Shift-JIS leaves +# five one-byte code points unassigned. Mac OS Japanese assigns +# these as follows: +# 0x80 REVERSE SOLIDUS (the character at 0x5C in ASCII) +# 0xA0 NO-BREAK SPACE ("halfwidth"; common Shift-JIS addition) +# 0xFD COPYRIGHT SIGN +# 0xFE TRADE MARK SIGN +# 0xFF halfwidth horizontal ellipsis +# +# b) Two-byte additions +# +# Many JIS X0208 code points are unassigned; these correspond to +# many unassigned code points in Shift-JIS. Many implementations +# of Shift-JIS, including Mac OS Japanese, add characters using +# these code points. The standard Mac OS Japanese additions are: +# +# - 260 symbols and dingbat-like number and letter forms using +# Shift-JIS codes in the range 0x8540-0x886D. These include +# circled and parenthesized numbers and letters, square katakana +# and Kanji forms, etc. +# +# - 53 vertical forms for hiragana, katakana, and punctuation, +# using Shift-JIS codes in the range 0xEB41-0xED96. These are +# so-called "ku+84" vertical forms, since their ku-ten code is +# derived from that of the corresponding abstract or horizontal +# form character by adding 84 to the ku (row) number. +# +# Most of these additional characters are found in other vendor +# implementations of Shift-JIS, although often with different +# code points, and so most of these characters are also found +# in Unicode. However, some of these additional characters do +# not correspond to any standard single Unicode character. +# +# 3. Mac OS Japanese font variants +# +# Some fonts used with Mac OS Japanese implement variants of the +# encoding described above. +# +# a) Basic variant +# +# This is used with the fonts TohabaGothic and TohabaMincho. This +# variant has none of the two-byte additions described in section 2b +# above, but it does have all the one-byte changes and additions +# described in section 2a. +# +# These fonts also lack glyphs for the Kanji characters at 0xEAA3 +# and 0xEAA4. +# +# b) PostScript screen variant +# +# This is used with the screen fonts ChuGothic and SaiMincho. This +# variant does not have the Apple 260 symbols and dingbat-like +# additions in the range 0x8540-0x886D; instead it has a different +# set of about 160 symbols and dingbat-like additions in the range +# 0x86A2-0x879C. Like the standard variant, it does have the ku+84 +# vertical forms in the range 0xEB41-0xED96; it also has additional +# vertical forms in the ranges 0xEE5F-0xEE6E and 0xEE80-0xEE81 +# (although many fonts do not have glyphs for these additional +# vertical forms). This variant also has the one-byte changes at +# 0x7C and 0x7E and the additions at 0x80 and 0xA0, but these fonts +# lack glyphs for the one-byte additions at 0xFD-0xFF. These fonts +# also lack glyphs for the Kanji characters at 0xEAA3 and 0xEAA4. +# +# c) PostScript printer variant +# +# When the screen fonts ChuGothic and SaiMincho are printed on +# certain printers such as Apple's LaserWriter NTX-J, the printer +# will use a built-in font that is supposed to match the screen font. +# In fact, the printer fonts implement a superset of the screen +# variant described above; the PostScript printer variant adds a +# set of about 440 additional characters in the range 0x8540-0x879C. +# This is a different set of additions than the 260 in standard +# Mac OS Japanese, and is similar to the "NEC" additions found in +# some other implementations. It includes circled and parenthesized +# numbers and letters and square katakana, as well as many two-byte +# "halfwidth" forms for Latin, katakana, punctuation, and box +# drawing characters. It also includes several duplicates of +# standard JIS X0208 characters. +# +# d) Old ku+10 verticals variant +# +# This is used with certain old versions of the fonts MaruGothic and +# HonMincho - only the versions of those fonts used in the Japanese +# localized versions of System 7.1. +# +# This variant has none of the two-byte additions described in +# section 2b above. Instead, it has a set of "ku+10" vertical forms +# for hiragana, katakana, and punctuation, using Shift-JIS codes in +# the range 0x8641-0x8896. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# 1. Mapping the user-defined range +# +# The table below covers only the standard Mac OS Japanese encoding. +# It does not include mappings for the Shift-JIS user-defined range; +# this is mapped onto Unicodes 0xE000-0xE98B as follows: +# 0xF040-0xF07E -> 0xE000-0xE03E +# 0xF080-0xF0FC -> 0xE03F-0xE0BB +# 0xF140-0xF17E -> 0xE0BC-0xE0FA +# 0xF180-0xF1FC -> 0xE0FB-0xE177 +# ... +# 0xFC40-0xFC7E -> 0xE8D0-0xE90E +# 0xFC80-0xFCFC -> 0xE90F-0xE98B +# +# 2. Mapping the Apple two-byte additions +# +# The goals in the mappings provided here are: +# - Ensure roundtrip mapping from every character in Mac OS Japanese +# to Unicode and back +# - Use standard Unicode characters as much as possible, to maximize +# interchangeability of the resulting Unicode text. Whenever possible, +# avoid having content carried by private-use characters. +# +# Since not all of the Mac OS Japanese characters correspond to +# distinct, single Unicode characters, we employ various strategies. +# +# a) Map a single Mac OS Japanese character to a sequence of Unicode +# characters +# +# For example, the character 0x8791 in the Apple extensions is a +# circled Kanji for "big". There is no single Unicode character for +# this. However, this can be mapped to the Unicode sequence +# 0x5927+0x20DD, ideograph "big" + COMBINING ENCLOSING CIRCLE. +# +# b) Use private use characters to mark variants or groupings that +# are similar to a sequence of one or more standard Unicode +# characters. +# +# Apple has defined a block of 32 corporate characters as "transcoding +# hints." These are used in combination with standard Unicode characters +# to force them to be treated in a special way for mapping to other +# encodings; they have no other effect. Sixteen of these transcoding +# hints are "grouping hints" - they indicate that the next 2-4 Unicode +# characters should be treated as a single entity for transcoding. The +# other sixteen transcoding hints are "variant tags" - they are like +# combining characters, and can follow a standard Unicode (or a sequence +# consisting of a base character and other combining characters) to +# cause it to be treated in a special way for transcoding. These always +# terminate a combining-character sequence. +# +# The transcoding coding hints used in this mapping table are: +# +# 0xF860 group next 2 characters as a single entity for transcoding +# 0xF861 group next 3 characters as a single entity for transcoding +# 0xF862 group next 4 characters as a single entity for transcoding +# 0xF87A variant tag for "negative" (i.e. black & white reversed) +# 0xF87E variant tag for vertical form +# 0xF87F variant tag for other alternate form +# +# For example, the Apple addition character 0x85AB is Roman numeral +# thirteen. There is no single Unicode for this (although there are +# standard Unicodes for Roman numerals 1-12). Using the grouping hint +# 0xF862 in combination with standard Unicodes, we can map this as +# 0xF862+0x0058+0x0049+0x0049+0x0049 (i.e. X + I + I + I). +# +# 3. Mapping the basic Shift-JIS characters and Apple one-byte additions +# +# The mappings for basic Shift-JIS are based on the UTC mappings for +# Shift-JIS dated 8 March 1994, by Glenn Adams and John H. Jenkins. +# +# There were adjusted as necessary to accommodate the Apple one-byte +# changes and additions. They were also adjusted to accommodate some +# changes to the UTC mapping suggested by the Japanese Standards +# Association. +# +# code UTC Apple reason +# point mapping mapping for change +# ----- ------- ------- ---------- +# 0x7E 0x203E 0x007E Mac OS Japanese has TILDE here, not +# OVERLINE +# 0x815C 0x2015 0x2014 Suggested by JSA +# 0x815F 0x005C 0xFF3C Avoid conflict with Apple one-byte +# addition 0x80, which maps to 0x005C. +# (CP 932 also maps 0x815F to 0xFF3C). +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version b02 to version b03: +# +# - Change the mapping for 0x8150 from 0x203E to 0xFFE3; change the +# mapping of the corresponding vertical form 0xEB50 from +# 0x203E+0xF87E to 0xFFE3+0xF87E. Change the mapping of 0x8163 from +# 0x22EF to 0x2026; change the mapping of the corresponding vertical +# form 0xEB63 from 0x22EF+0xF87E to 0x2026+0xF87E. These changes +# reduce problems in interconversion with CP 932. +# - Consequently, change the mapping of 0xFF from 0x2026 to +# 0x2026+0xF87F to avoid conflict with the new mapping of 0x8163. +# +# Changes from version n06 to version b02: +# +# - Change the mapping for 0x8650 from 0xFF4C+0xF87F to 0x2113; change +# the mapping for 0x8855 from 0x301E to 0x301F. Update the description +# of the PostScript screen variant to include the 160 characters in the +# range 0x86A2-0x879C. +# +# Changes from version n03 to version n06: +# +# - Changed mappings of several Apple additions from single corporate +# character to standard Unicodes + transcoding hint: +# 0x8591, 0x85AB-AD, 0x85BF-C1, 0x8645, 0x864B, 0x8650, 0x865D, 0x869E, +# 0x86CE, 0x86D3-D6, 0x87FB-FC. +# - Changed mapping of one Apple addition from single corporate character +# to standard Unicode: 0x8855. +# - Changed mappings of several Apple vertical forms additions from +# single corporate character to standard Unicodes + transcoding hint: +# 0xEB41-42, 0xEB50, 0xEB5B, 0xEB5D, 0xEB60-63, 0xEB6D-6E, 0xEB81, +# plus all vertical forms in the range 0xEC9F-ED96. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x00A5 # YEN SIGN +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE # Apple change from standard Shift-JIS +# +0x80 0x005C # REVERSE SOLIDUS # Apple addition; changes mapping of 0x815F +# +0xA0 0x00A0 # NO-BREAK SPACE # Apple addition +0xA1 0xFF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 0xFF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 0xFF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 0xFF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 0xFF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 0xFF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 0xFF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 0xFF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA 0xFF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB 0xFF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC 0xFF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD 0xFF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE 0xFF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF 0xFF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 0xFF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 0xFF71 # HALFWIDTH KATAKANA LETTER A +0xB2 0xFF72 # HALFWIDTH KATAKANA LETTER I +0xB3 0xFF73 # HALFWIDTH KATAKANA LETTER U +0xB4 0xFF74 # HALFWIDTH KATAKANA LETTER E +0xB5 0xFF75 # HALFWIDTH KATAKANA LETTER O +0xB6 0xFF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 0xFF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 0xFF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 0xFF79 # HALFWIDTH KATAKANA LETTER KE +0xBA 0xFF7A # HALFWIDTH KATAKANA LETTER KO +0xBB 0xFF7B # HALFWIDTH KATAKANA LETTER SA +0xBC 0xFF7C # HALFWIDTH KATAKANA LETTER SI +0xBD 0xFF7D # HALFWIDTH KATAKANA LETTER SU +0xBE 0xFF7E # HALFWIDTH KATAKANA LETTER SE +0xBF 0xFF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 0xFF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 0xFF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 0xFF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 0xFF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 0xFF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 0xFF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 0xFF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 0xFF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 0xFF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 0xFF89 # HALFWIDTH KATAKANA LETTER NO +0xCA 0xFF8A # HALFWIDTH KATAKANA LETTER HA +0xCB 0xFF8B # HALFWIDTH KATAKANA LETTER HI +0xCC 0xFF8C # HALFWIDTH KATAKANA LETTER HU +0xCD 0xFF8D # HALFWIDTH KATAKANA LETTER HE +0xCE 0xFF8E # HALFWIDTH KATAKANA LETTER HO +0xCF 0xFF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 0xFF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 0xFF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 0xFF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 0xFF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 0xFF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 0xFF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 0xFF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 0xFF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 0xFF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 0xFF99 # HALFWIDTH KATAKANA LETTER RU +0xDA 0xFF9A # HALFWIDTH KATAKANA LETTER RE +0xDB 0xFF9B # HALFWIDTH KATAKANA LETTER RO +0xDC 0xFF9C # HALFWIDTH KATAKANA LETTER WA +0xDD 0xFF9D # HALFWIDTH KATAKANA LETTER N +0xDE 0xFF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF 0xFF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +# +0xFD 0x00A9 # COPYRIGHT SIGN # Apple addition +0xFE 0x2122 # TRADE MARK SIGN # Apple addition +0xFF 0x2026+0xF87F # halfwidth horizontal ellipsis # Apple addition +# +0x8140 0x3000 # IDEOGRAPHIC SPACE +0x8141 0x3001 # IDEOGRAPHIC COMMA +0x8142 0x3002 # IDEOGRAPHIC FULL STOP +0x8143 0xFF0C # FULLWIDTH COMMA +0x8144 0xFF0E # FULLWIDTH FULL STOP +0x8145 0x30FB # KATAKANA MIDDLE DOT +0x8146 0xFF1A # FULLWIDTH COLON +0x8147 0xFF1B # FULLWIDTH SEMICOLON +0x8148 0xFF1F # FULLWIDTH QUESTION MARK +0x8149 0xFF01 # FULLWIDTH EXCLAMATION MARK +0x814A 0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B 0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C 0x00B4 # ACUTE ACCENT +0x814D 0xFF40 # FULLWIDTH GRAVE ACCENT +0x814E 0x00A8 # DIAERESIS +0x814F 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 0xFFE3 # FULLWIDTH MACRON +0x8151 0xFF3F # FULLWIDTH LOW LINE +0x8152 0x30FD # KATAKANA ITERATION MARK +0x8153 0x30FE # KATAKANA VOICED ITERATION MARK +0x8154 0x309D # HIRAGANA ITERATION MARK +0x8155 0x309E # HIRAGANA VOICED ITERATION MARK +0x8156 0x3003 # DITTO MARK +0x8157 0x4EDD # +0x8158 0x3005 # IDEOGRAPHIC ITERATION MARK +0x8159 0x3006 # IDEOGRAPHIC CLOSING MARK +0x815A 0x3007 # IDEOGRAPHIC NUMBER ZERO +0x815B 0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C 0x2014 # EM DASH # change UTC mapping to match JIS spec +0x815D 0x2010 # HYPHEN +0x815E 0xFF0F # FULLWIDTH SOLIDUS +0x815F 0xFF3C # FULLWIDTH REVERSE SOLIDUS # change UTC mapping to separate from 0x80 +0x8160 0x301C # WAVE DASH +0x8161 0x2016 # DOUBLE VERTICAL LINE +0x8162 0xFF5C # FULLWIDTH VERTICAL LINE +0x8163 0x2026 # HORIZONTAL ELLIPSIS +0x8164 0x2025 # TWO DOT LEADER +0x8165 0x2018 # LEFT SINGLE QUOTATION MARK +0x8166 0x2019 # RIGHT SINGLE QUOTATION MARK +0x8167 0x201C # LEFT DOUBLE QUOTATION MARK +0x8168 0x201D # RIGHT DOUBLE QUOTATION MARK +0x8169 0xFF08 # FULLWIDTH LEFT PARENTHESIS +0x816A 0xFF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B 0x3014 # LEFT TORTOISE SHELL BRACKET +0x816C 0x3015 # RIGHT TORTOISE SHELL BRACKET +0x816D 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F 0xFF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 0x3008 # LEFT ANGLE BRACKET +0x8172 0x3009 # RIGHT ANGLE BRACKET +0x8173 0x300A # LEFT DOUBLE ANGLE BRACKET +0x8174 0x300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 0x300C # LEFT CORNER BRACKET +0x8176 0x300D # RIGHT CORNER BRACKET +0x8177 0x300E # LEFT WHITE CORNER BRACKET +0x8178 0x300F # RIGHT WHITE CORNER BRACKET +0x8179 0x3010 # LEFT BLACK LENTICULAR BRACKET +0x817A 0x3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B 0xFF0B # FULLWIDTH PLUS SIGN +0x817C 0x2212 # MINUS SIGN +0x817D 0x00B1 # PLUS-MINUS SIGN +0x817E 0x00D7 # MULTIPLICATION SIGN +0x8180 0x00F7 # DIVISION SIGN +0x8181 0xFF1D # FULLWIDTH EQUALS SIGN +0x8182 0x2260 # NOT EQUAL TO +0x8183 0xFF1C # FULLWIDTH LESS-THAN SIGN +0x8184 0xFF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 0x2266 # LESS-THAN OVER EQUAL TO +0x8186 0x2267 # GREATER-THAN OVER EQUAL TO +0x8187 0x221E # INFINITY +0x8188 0x2234 # THEREFORE +0x8189 0x2642 # MALE SIGN +0x818A 0x2640 # FEMALE SIGN +0x818B 0x00B0 # DEGREE SIGN +0x818C 0x2032 # PRIME +0x818D 0x2033 # DOUBLE PRIME +0x818E 0x2103 # DEGREE CELSIUS +0x818F 0xFFE5 # FULLWIDTH YEN SIGN +0x8190 0xFF04 # FULLWIDTH DOLLAR SIGN +0x8191 0x00A2 # CENT SIGN +0x8192 0x00A3 # POUND SIGN +0x8193 0xFF05 # FULLWIDTH PERCENT SIGN +0x8194 0xFF03 # FULLWIDTH NUMBER SIGN +0x8195 0xFF06 # FULLWIDTH AMPERSAND +0x8196 0xFF0A # FULLWIDTH ASTERISK +0x8197 0xFF20 # FULLWIDTH COMMERCIAL AT +0x8198 0x00A7 # SECTION SIGN +0x8199 0x2606 # WHITE STAR +0x819A 0x2605 # BLACK STAR +0x819B 0x25CB # WHITE CIRCLE +0x819C 0x25CF # BLACK CIRCLE +0x819D 0x25CE # BULLSEYE +0x819E 0x25C7 # WHITE DIAMOND +0x819F 0x25C6 # BLACK DIAMOND +0x81A0 0x25A1 # WHITE SQUARE +0x81A1 0x25A0 # BLACK SQUARE +0x81A2 0x25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 0x25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 0x25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 0x25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 0x203B # REFERENCE MARK +0x81A7 0x3012 # POSTAL MARK +0x81A8 0x2192 # RIGHTWARDS ARROW +0x81A9 0x2190 # LEFTWARDS ARROW +0x81AA 0x2191 # UPWARDS ARROW +0x81AB 0x2193 # DOWNWARDS ARROW +0x81AC 0x3013 # GETA MARK +0x81B8 0x2208 # ELEMENT OF +0x81B9 0x220B # CONTAINS AS MEMBER +0x81BA 0x2286 # SUBSET OF OR EQUAL TO +0x81BB 0x2287 # SUPERSET OF OR EQUAL TO +0x81BC 0x2282 # SUBSET OF +0x81BD 0x2283 # SUPERSET OF +0x81BE 0x222A # UNION +0x81BF 0x2229 # INTERSECTION +0x81C8 0x2227 # LOGICAL AND +0x81C9 0x2228 # LOGICAL OR +0x81CA 0x00AC # NOT SIGN +0x81CB 0x21D2 # RIGHTWARDS DOUBLE ARROW +0x81CC 0x21D4 # LEFT RIGHT DOUBLE ARROW +0x81CD 0x2200 # FOR ALL +0x81CE 0x2203 # THERE EXISTS +0x81DA 0x2220 # ANGLE +0x81DB 0x22A5 # UP TACK +0x81DC 0x2312 # ARC +0x81DD 0x2202 # PARTIAL DIFFERENTIAL +0x81DE 0x2207 # NABLA +0x81DF 0x2261 # IDENTICAL TO +0x81E0 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +0x81E1 0x226A # MUCH LESS-THAN +0x81E2 0x226B # MUCH GREATER-THAN +0x81E3 0x221A # SQUARE ROOT +0x81E4 0x223D # REVERSED TILDE # This UTC mapping is questionable +0x81E5 0x221D # PROPORTIONAL TO +0x81E6 0x2235 # BECAUSE +0x81E7 0x222B # INTEGRAL +0x81E8 0x222C # DOUBLE INTEGRAL +0x81F0 0x212B # ANGSTROM SIGN +0x81F1 0x2030 # PER MILLE SIGN +0x81F2 0x266F # MUSIC SHARP SIGN +0x81F3 0x266D # MUSIC FLAT SIGN +0x81F4 0x266A # EIGHTH NOTE +0x81F5 0x2020 # DAGGER +0x81F6 0x2021 # DOUBLE DAGGER +0x81F7 0x00B6 # PILCROW SIGN +0x81FC 0x25EF # LARGE CIRCLE +0x824F 0xFF10 # FULLWIDTH DIGIT ZERO +0x8250 0xFF11 # FULLWIDTH DIGIT ONE +0x8251 0xFF12 # FULLWIDTH DIGIT TWO +0x8252 0xFF13 # FULLWIDTH DIGIT THREE +0x8253 0xFF14 # FULLWIDTH DIGIT FOUR +0x8254 0xFF15 # FULLWIDTH DIGIT FIVE +0x8255 0xFF16 # FULLWIDTH DIGIT SIX +0x8256 0xFF17 # FULLWIDTH DIGIT SEVEN +0x8257 0xFF18 # FULLWIDTH DIGIT EIGHT +0x8258 0xFF19 # FULLWIDTH DIGIT NINE +0x8260 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x8281 0xFF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 0xFF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 0xFF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 0xFF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 0xFF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 0xFF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 0xFF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 0xFF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 0xFF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A 0xFF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B 0xFF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C 0xFF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D 0xFF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E 0xFF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F 0xFF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 0xFF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 0xFF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 0xFF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 0xFF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 0xFF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 0xFF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 0xFF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 0xFF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829F 0x3041 # HIRAGANA LETTER SMALL A +0x82A0 0x3042 # HIRAGANA LETTER A +0x82A1 0x3043 # HIRAGANA LETTER SMALL I +0x82A2 0x3044 # HIRAGANA LETTER I +0x82A3 0x3045 # HIRAGANA LETTER SMALL U +0x82A4 0x3046 # HIRAGANA LETTER U +0x82A5 0x3047 # HIRAGANA LETTER SMALL E +0x82A6 0x3048 # HIRAGANA LETTER E +0x82A7 0x3049 # HIRAGANA LETTER SMALL O +0x82A8 0x304A # HIRAGANA LETTER O +0x82A9 0x304B # HIRAGANA LETTER KA +0x82AA 0x304C # HIRAGANA LETTER GA +0x82AB 0x304D # HIRAGANA LETTER KI +0x82AC 0x304E # HIRAGANA LETTER GI +0x82AD 0x304F # HIRAGANA LETTER KU +0x82AE 0x3050 # HIRAGANA LETTER GU +0x82AF 0x3051 # HIRAGANA LETTER KE +0x82B0 0x3052 # HIRAGANA LETTER GE +0x82B1 0x3053 # HIRAGANA LETTER KO +0x82B2 0x3054 # HIRAGANA LETTER GO +0x82B3 0x3055 # HIRAGANA LETTER SA +0x82B4 0x3056 # HIRAGANA LETTER ZA +0x82B5 0x3057 # HIRAGANA LETTER SI +0x82B6 0x3058 # HIRAGANA LETTER ZI +0x82B7 0x3059 # HIRAGANA LETTER SU +0x82B8 0x305A # HIRAGANA LETTER ZU +0x82B9 0x305B # HIRAGANA LETTER SE +0x82BA 0x305C # HIRAGANA LETTER ZE +0x82BB 0x305D # HIRAGANA LETTER SO +0x82BC 0x305E # HIRAGANA LETTER ZO +0x82BD 0x305F # HIRAGANA LETTER TA +0x82BE 0x3060 # HIRAGANA LETTER DA +0x82BF 0x3061 # HIRAGANA LETTER TI +0x82C0 0x3062 # HIRAGANA LETTER DI +0x82C1 0x3063 # HIRAGANA LETTER SMALL TU +0x82C2 0x3064 # HIRAGANA LETTER TU +0x82C3 0x3065 # HIRAGANA LETTER DU +0x82C4 0x3066 # HIRAGANA LETTER TE +0x82C5 0x3067 # HIRAGANA LETTER DE +0x82C6 0x3068 # HIRAGANA LETTER TO +0x82C7 0x3069 # HIRAGANA LETTER DO +0x82C8 0x306A # HIRAGANA LETTER NA +0x82C9 0x306B # HIRAGANA LETTER NI +0x82CA 0x306C # HIRAGANA LETTER NU +0x82CB 0x306D # HIRAGANA LETTER NE +0x82CC 0x306E # HIRAGANA LETTER NO +0x82CD 0x306F # HIRAGANA LETTER HA +0x82CE 0x3070 # HIRAGANA LETTER BA +0x82CF 0x3071 # HIRAGANA LETTER PA +0x82D0 0x3072 # HIRAGANA LETTER HI +0x82D1 0x3073 # HIRAGANA LETTER BI +0x82D2 0x3074 # HIRAGANA LETTER PI +0x82D3 0x3075 # HIRAGANA LETTER HU +0x82D4 0x3076 # HIRAGANA LETTER BU +0x82D5 0x3077 # HIRAGANA LETTER PU +0x82D6 0x3078 # HIRAGANA LETTER HE +0x82D7 0x3079 # HIRAGANA LETTER BE +0x82D8 0x307A # HIRAGANA LETTER PE +0x82D9 0x307B # HIRAGANA LETTER HO +0x82DA 0x307C # HIRAGANA LETTER BO +0x82DB 0x307D # HIRAGANA LETTER PO +0x82DC 0x307E # HIRAGANA LETTER MA +0x82DD 0x307F # HIRAGANA LETTER MI +0x82DE 0x3080 # HIRAGANA LETTER MU +0x82DF 0x3081 # HIRAGANA LETTER ME +0x82E0 0x3082 # HIRAGANA LETTER MO +0x82E1 0x3083 # HIRAGANA LETTER SMALL YA +0x82E2 0x3084 # HIRAGANA LETTER YA +0x82E3 0x3085 # HIRAGANA LETTER SMALL YU +0x82E4 0x3086 # HIRAGANA LETTER YU +0x82E5 0x3087 # HIRAGANA LETTER SMALL YO +0x82E6 0x3088 # HIRAGANA LETTER YO +0x82E7 0x3089 # HIRAGANA LETTER RA +0x82E8 0x308A # HIRAGANA LETTER RI +0x82E9 0x308B # HIRAGANA LETTER RU +0x82EA 0x308C # HIRAGANA LETTER RE +0x82EB 0x308D # HIRAGANA LETTER RO +0x82EC 0x308E # HIRAGANA LETTER SMALL WA +0x82ED 0x308F # HIRAGANA LETTER WA +0x82EE 0x3090 # HIRAGANA LETTER WI +0x82EF 0x3091 # HIRAGANA LETTER WE +0x82F0 0x3092 # HIRAGANA LETTER WO +0x82F1 0x3093 # HIRAGANA LETTER N +0x8340 0x30A1 # KATAKANA LETTER SMALL A +0x8341 0x30A2 # KATAKANA LETTER A +0x8342 0x30A3 # KATAKANA LETTER SMALL I +0x8343 0x30A4 # KATAKANA LETTER I +0x8344 0x30A5 # KATAKANA LETTER SMALL U +0x8345 0x30A6 # KATAKANA LETTER U +0x8346 0x30A7 # KATAKANA LETTER SMALL E +0x8347 0x30A8 # KATAKANA LETTER E +0x8348 0x30A9 # KATAKANA LETTER SMALL O +0x8349 0x30AA # KATAKANA LETTER O +0x834A 0x30AB # KATAKANA LETTER KA +0x834B 0x30AC # KATAKANA LETTER GA +0x834C 0x30AD # KATAKANA LETTER KI +0x834D 0x30AE # KATAKANA LETTER GI +0x834E 0x30AF # KATAKANA LETTER KU +0x834F 0x30B0 # KATAKANA LETTER GU +0x8350 0x30B1 # KATAKANA LETTER KE +0x8351 0x30B2 # KATAKANA LETTER GE +0x8352 0x30B3 # KATAKANA LETTER KO +0x8353 0x30B4 # KATAKANA LETTER GO +0x8354 0x30B5 # KATAKANA LETTER SA +0x8355 0x30B6 # KATAKANA LETTER ZA +0x8356 0x30B7 # KATAKANA LETTER SI +0x8357 0x30B8 # KATAKANA LETTER ZI +0x8358 0x30B9 # KATAKANA LETTER SU +0x8359 0x30BA # KATAKANA LETTER ZU +0x835A 0x30BB # KATAKANA LETTER SE +0x835B 0x30BC # KATAKANA LETTER ZE +0x835C 0x30BD # KATAKANA LETTER SO +0x835D 0x30BE # KATAKANA LETTER ZO +0x835E 0x30BF # KATAKANA LETTER TA +0x835F 0x30C0 # KATAKANA LETTER DA +0x8360 0x30C1 # KATAKANA LETTER TI +0x8361 0x30C2 # KATAKANA LETTER DI +0x8362 0x30C3 # KATAKANA LETTER SMALL TU +0x8363 0x30C4 # KATAKANA LETTER TU +0x8364 0x30C5 # KATAKANA LETTER DU +0x8365 0x30C6 # KATAKANA LETTER TE +0x8366 0x30C7 # KATAKANA LETTER DE +0x8367 0x30C8 # KATAKANA LETTER TO +0x8368 0x30C9 # KATAKANA LETTER DO +0x8369 0x30CA # KATAKANA LETTER NA +0x836A 0x30CB # KATAKANA LETTER NI +0x836B 0x30CC # KATAKANA LETTER NU +0x836C 0x30CD # KATAKANA LETTER NE +0x836D 0x30CE # KATAKANA LETTER NO +0x836E 0x30CF # KATAKANA LETTER HA +0x836F 0x30D0 # KATAKANA LETTER BA +0x8370 0x30D1 # KATAKANA LETTER PA +0x8371 0x30D2 # KATAKANA LETTER HI +0x8372 0x30D3 # KATAKANA LETTER BI +0x8373 0x30D4 # KATAKANA LETTER PI +0x8374 0x30D5 # KATAKANA LETTER HU +0x8375 0x30D6 # KATAKANA LETTER BU +0x8376 0x30D7 # KATAKANA LETTER PU +0x8377 0x30D8 # KATAKANA LETTER HE +0x8378 0x30D9 # KATAKANA LETTER BE +0x8379 0x30DA # KATAKANA LETTER PE +0x837A 0x30DB # KATAKANA LETTER HO +0x837B 0x30DC # KATAKANA LETTER BO +0x837C 0x30DD # KATAKANA LETTER PO +0x837D 0x30DE # KATAKANA LETTER MA +0x837E 0x30DF # KATAKANA LETTER MI +0x8380 0x30E0 # KATAKANA LETTER MU +0x8381 0x30E1 # KATAKANA LETTER ME +0x8382 0x30E2 # KATAKANA LETTER MO +0x8383 0x30E3 # KATAKANA LETTER SMALL YA +0x8384 0x30E4 # KATAKANA LETTER YA +0x8385 0x30E5 # KATAKANA LETTER SMALL YU +0x8386 0x30E6 # KATAKANA LETTER YU +0x8387 0x30E7 # KATAKANA LETTER SMALL YO +0x8388 0x30E8 # KATAKANA LETTER YO +0x8389 0x30E9 # KATAKANA LETTER RA +0x838A 0x30EA # KATAKANA LETTER RI +0x838B 0x30EB # KATAKANA LETTER RU +0x838C 0x30EC # KATAKANA LETTER RE +0x838D 0x30ED # KATAKANA LETTER RO +0x838E 0x30EE # KATAKANA LETTER SMALL WA +0x838F 0x30EF # KATAKANA LETTER WA +0x8390 0x30F0 # KATAKANA LETTER WI +0x8391 0x30F1 # KATAKANA LETTER WE +0x8392 0x30F2 # KATAKANA LETTER WO +0x8393 0x30F3 # KATAKANA LETTER N +0x8394 0x30F4 # KATAKANA LETTER VU +0x8395 0x30F5 # KATAKANA LETTER SMALL KA +0x8396 0x30F6 # KATAKANA LETTER SMALL KE +0x839F 0x0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 0x0392 # GREEK CAPITAL LETTER BETA +0x83A1 0x0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 0x0394 # GREEK CAPITAL LETTER DELTA +0x83A3 0x0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 0x0396 # GREEK CAPITAL LETTER ZETA +0x83A5 0x0397 # GREEK CAPITAL LETTER ETA +0x83A6 0x0398 # GREEK CAPITAL LETTER THETA +0x83A7 0x0399 # GREEK CAPITAL LETTER IOTA +0x83A8 0x039A # GREEK CAPITAL LETTER KAPPA +0x83A9 0x039B # GREEK CAPITAL LETTER LAMDA +0x83AA 0x039C # GREEK CAPITAL LETTER MU +0x83AB 0x039D # GREEK CAPITAL LETTER NU +0x83AC 0x039E # GREEK CAPITAL LETTER XI +0x83AD 0x039F # GREEK CAPITAL LETTER OMICRON +0x83AE 0x03A0 # GREEK CAPITAL LETTER PI +0x83AF 0x03A1 # GREEK CAPITAL LETTER RHO +0x83B0 0x03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 0x03A4 # GREEK CAPITAL LETTER TAU +0x83B2 0x03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 0x03A6 # GREEK CAPITAL LETTER PHI +0x83B4 0x03A7 # GREEK CAPITAL LETTER CHI +0x83B5 0x03A8 # GREEK CAPITAL LETTER PSI +0x83B6 0x03A9 # GREEK CAPITAL LETTER OMEGA +0x83BF 0x03B1 # GREEK SMALL LETTER ALPHA +0x83C0 0x03B2 # GREEK SMALL LETTER BETA +0x83C1 0x03B3 # GREEK SMALL LETTER GAMMA +0x83C2 0x03B4 # GREEK SMALL LETTER DELTA +0x83C3 0x03B5 # GREEK SMALL LETTER EPSILON +0x83C4 0x03B6 # GREEK SMALL LETTER ZETA +0x83C5 0x03B7 # GREEK SMALL LETTER ETA +0x83C6 0x03B8 # GREEK SMALL LETTER THETA +0x83C7 0x03B9 # GREEK SMALL LETTER IOTA +0x83C8 0x03BA # GREEK SMALL LETTER KAPPA +0x83C9 0x03BB # GREEK SMALL LETTER LAMDA +0x83CA 0x03BC # GREEK SMALL LETTER MU +0x83CB 0x03BD # GREEK SMALL LETTER NU +0x83CC 0x03BE # GREEK SMALL LETTER XI +0x83CD 0x03BF # GREEK SMALL LETTER OMICRON +0x83CE 0x03C0 # GREEK SMALL LETTER PI +0x83CF 0x03C1 # GREEK SMALL LETTER RHO +0x83D0 0x03C3 # GREEK SMALL LETTER SIGMA +0x83D1 0x03C4 # GREEK SMALL LETTER TAU +0x83D2 0x03C5 # GREEK SMALL LETTER UPSILON +0x83D3 0x03C6 # GREEK SMALL LETTER PHI +0x83D4 0x03C7 # GREEK SMALL LETTER CHI +0x83D5 0x03C8 # GREEK SMALL LETTER PSI +0x83D6 0x03C9 # GREEK SMALL LETTER OMEGA +0x8440 0x0410 # CYRILLIC CAPITAL LETTER A +0x8441 0x0411 # CYRILLIC CAPITAL LETTER BE +0x8442 0x0412 # CYRILLIC CAPITAL LETTER VE +0x8443 0x0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 0x0414 # CYRILLIC CAPITAL LETTER DE +0x8445 0x0415 # CYRILLIC CAPITAL LETTER IE +0x8446 0x0401 # CYRILLIC CAPITAL LETTER IO +0x8447 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 0x0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 0x0418 # CYRILLIC CAPITAL LETTER I +0x844A 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B 0x041A # CYRILLIC CAPITAL LETTER KA +0x844C 0x041B # CYRILLIC CAPITAL LETTER EL +0x844D 0x041C # CYRILLIC CAPITAL LETTER EM +0x844E 0x041D # CYRILLIC CAPITAL LETTER EN +0x844F 0x041E # CYRILLIC CAPITAL LETTER O +0x8450 0x041F # CYRILLIC CAPITAL LETTER PE +0x8451 0x0420 # CYRILLIC CAPITAL LETTER ER +0x8452 0x0421 # CYRILLIC CAPITAL LETTER ES +0x8453 0x0422 # CYRILLIC CAPITAL LETTER TE +0x8454 0x0423 # CYRILLIC CAPITAL LETTER U +0x8455 0x0424 # CYRILLIC CAPITAL LETTER EF +0x8456 0x0425 # CYRILLIC CAPITAL LETTER HA +0x8457 0x0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 0x0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 0x0428 # CYRILLIC CAPITAL LETTER SHA +0x845A 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C 0x042B # CYRILLIC CAPITAL LETTER YERU +0x845D 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E 0x042D # CYRILLIC CAPITAL LETTER E +0x845F 0x042E # CYRILLIC CAPITAL LETTER YU +0x8460 0x042F # CYRILLIC CAPITAL LETTER YA +0x8470 0x0430 # CYRILLIC SMALL LETTER A +0x8471 0x0431 # CYRILLIC SMALL LETTER BE +0x8472 0x0432 # CYRILLIC SMALL LETTER VE +0x8473 0x0433 # CYRILLIC SMALL LETTER GHE +0x8474 0x0434 # CYRILLIC SMALL LETTER DE +0x8475 0x0435 # CYRILLIC SMALL LETTER IE +0x8476 0x0451 # CYRILLIC SMALL LETTER IO +0x8477 0x0436 # CYRILLIC SMALL LETTER ZHE +0x8478 0x0437 # CYRILLIC SMALL LETTER ZE +0x8479 0x0438 # CYRILLIC SMALL LETTER I +0x847A 0x0439 # CYRILLIC SMALL LETTER SHORT I +0x847B 0x043A # CYRILLIC SMALL LETTER KA +0x847C 0x043B # CYRILLIC SMALL LETTER EL +0x847D 0x043C # CYRILLIC SMALL LETTER EM +0x847E 0x043D # CYRILLIC SMALL LETTER EN +0x8480 0x043E # CYRILLIC SMALL LETTER O +0x8481 0x043F # CYRILLIC SMALL LETTER PE +0x8482 0x0440 # CYRILLIC SMALL LETTER ER +0x8483 0x0441 # CYRILLIC SMALL LETTER ES +0x8484 0x0442 # CYRILLIC SMALL LETTER TE +0x8485 0x0443 # CYRILLIC SMALL LETTER U +0x8486 0x0444 # CYRILLIC SMALL LETTER EF +0x8487 0x0445 # CYRILLIC SMALL LETTER HA +0x8488 0x0446 # CYRILLIC SMALL LETTER TSE +0x8489 0x0447 # CYRILLIC SMALL LETTER CHE +0x848A 0x0448 # CYRILLIC SMALL LETTER SHA +0x848B 0x0449 # CYRILLIC SMALL LETTER SHCHA +0x848C 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D 0x044B # CYRILLIC SMALL LETTER YERU +0x848E 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F 0x044D # CYRILLIC SMALL LETTER E +0x8490 0x044E # CYRILLIC SMALL LETTER YU +0x8491 0x044F # CYRILLIC SMALL LETTER YA +0x849F 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x84A0 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x84A1 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x84A2 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84A3 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x84A4 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x84A5 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x84A6 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x84A7 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x84A8 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x84A9 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x84AA 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL +0x84AB 0x2503 # BOX DRAWINGS HEAVY VERTICAL +0x84AC 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT +0x84AD 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT +0x84AE 0x251B # BOX DRAWINGS HEAVY UP AND LEFT +0x84AF 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT +0x84B0 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT +0x84B1 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +0x84B2 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT +0x84B3 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL +0x84B4 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +0x84B5 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +0x84B6 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +0x84B7 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +0x84B8 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +0x84B9 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +0x84BA 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +0x84BB 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +0x84BC 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +0x84BD 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +0x84BE 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + +# Apple additions +0x8540 0x2460 # CIRCLED DIGIT ONE +0x8541 0x2461 # CIRCLED DIGIT TWO +0x8542 0x2462 # CIRCLED DIGIT THREE +0x8543 0x2463 # CIRCLED DIGIT FOUR +0x8544 0x2464 # CIRCLED DIGIT FIVE +0x8545 0x2465 # CIRCLED DIGIT SIX +0x8546 0x2466 # CIRCLED DIGIT SEVEN +0x8547 0x2467 # CIRCLED DIGIT EIGHT +0x8548 0x2468 # CIRCLED DIGIT NINE +0x8549 0x2469 # CIRCLED NUMBER TEN +0x854A 0x246A # CIRCLED NUMBER ELEVEN +0x854B 0x246B # CIRCLED NUMBER TWELVE +0x854C 0x246C # CIRCLED NUMBER THIRTEEN +0x854D 0x246D # CIRCLED NUMBER FOURTEEN +0x854E 0x246E # CIRCLED NUMBER FIFTEEN +0x854F 0x246F # CIRCLED NUMBER SIXTEEN +0x8550 0x2470 # CIRCLED NUMBER SEVENTEEN +0x8551 0x2471 # CIRCLED NUMBER EIGHTEEN +0x8552 0x2472 # CIRCLED NUMBER NINETEEN +0x8553 0x2473 # CIRCLED NUMBER TWENTY +0x855E 0x2474 # PARENTHESIZED DIGIT ONE +0x855F 0x2475 # PARENTHESIZED DIGIT TWO +0x8560 0x2476 # PARENTHESIZED DIGIT THREE +0x8561 0x2477 # PARENTHESIZED DIGIT FOUR +0x8562 0x2478 # PARENTHESIZED DIGIT FIVE +0x8563 0x2479 # PARENTHESIZED DIGIT SIX +0x8564 0x247A # PARENTHESIZED DIGIT SEVEN +0x8565 0x247B # PARENTHESIZED DIGIT EIGHT +0x8566 0x247C # PARENTHESIZED DIGIT NINE +0x8567 0x247D # PARENTHESIZED NUMBER TEN +0x8568 0x247E # PARENTHESIZED NUMBER ELEVEN +0x8569 0x247F # PARENTHESIZED NUMBER TWELVE +0x856A 0x2480 # PARENTHESIZED NUMBER THIRTEEN +0x856B 0x2481 # PARENTHESIZED NUMBER FOURTEEN +0x856C 0x2482 # PARENTHESIZED NUMBER FIFTEEN +0x856D 0x2483 # PARENTHESIZED NUMBER SIXTEEN +0x856E 0x2484 # PARENTHESIZED NUMBER SEVENTEEN +0x856F 0x2485 # PARENTHESIZED NUMBER EIGHTEEN +0x8570 0x2486 # PARENTHESIZED NUMBER NINETEEN +0x8571 0x2487 # PARENTHESIZED NUMBER TWENTY +0x857C 0x2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE +0x857D 0x2777 # DINGBAT NEGATIVE CIRCLED DIGIT TWO +0x857E 0x2778 # DINGBAT NEGATIVE CIRCLED DIGIT THREE +0x8580 0x2779 # DINGBAT NEGATIVE CIRCLED DIGIT FOUR +0x8581 0x277A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE +0x8582 0x277B # DINGBAT NEGATIVE CIRCLED DIGIT SIX +0x8583 0x277C # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN +0x8584 0x277D # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT +0x8585 0x277E # DINGBAT NEGATIVE CIRCLED DIGIT NINE +0x8591 0xF860+0x0030+0x002E # digit zero full stop +0x8592 0x2488 # DIGIT ONE FULL STOP +0x8593 0x2489 # DIGIT TWO FULL STOP +0x8594 0x248A # DIGIT THREE FULL STOP +0x8595 0x248B # DIGIT FOUR FULL STOP +0x8596 0x248C # DIGIT FIVE FULL STOP +0x8597 0x248D # DIGIT SIX FULL STOP +0x8598 0x248E # DIGIT SEVEN FULL STOP +0x8599 0x248F # DIGIT EIGHT FULL STOP +0x859A 0x2490 # DIGIT NINE FULL STOP +0x859F 0x2160 # ROMAN NUMERAL ONE +0x85A0 0x2161 # ROMAN NUMERAL TWO +0x85A1 0x2162 # ROMAN NUMERAL THREE +0x85A2 0x2163 # ROMAN NUMERAL FOUR +0x85A3 0x2164 # ROMAN NUMERAL FIVE +0x85A4 0x2165 # ROMAN NUMERAL SIX +0x85A5 0x2166 # ROMAN NUMERAL SEVEN +0x85A6 0x2167 # ROMAN NUMERAL EIGHT +0x85A7 0x2168 # ROMAN NUMERAL NINE +0x85A8 0x2169 # ROMAN NUMERAL TEN +0x85A9 0x216A # ROMAN NUMERAL ELEVEN +0x85AA 0x216B # ROMAN NUMERAL TWELVE +0x85AB 0xF862+0x0058+0x0049+0x0049+0x0049 # roman numeral thirteen +0x85AC 0xF861+0x0058+0x0049+0x0056 # roman numeral fourteen +0x85AD 0xF860+0x0058+0x0056 # roman numeral fifteen +0x85B3 0x2170 # SMALL ROMAN NUMERAL ONE +0x85B4 0x2171 # SMALL ROMAN NUMERAL TWO +0x85B5 0x2172 # SMALL ROMAN NUMERAL THREE +0x85B6 0x2173 # SMALL ROMAN NUMERAL FOUR +0x85B7 0x2174 # SMALL ROMAN NUMERAL FIVE +0x85B8 0x2175 # SMALL ROMAN NUMERAL SIX +0x85B9 0x2176 # SMALL ROMAN NUMERAL SEVEN +0x85BA 0x2177 # SMALL ROMAN NUMERAL EIGHT +0x85BB 0x2178 # SMALL ROMAN NUMERAL NINE +0x85BC 0x2179 # SMALL ROMAN NUMERAL TEN +0x85BD 0x217A # SMALL ROMAN NUMERAL ELEVEN +0x85BE 0x217B # SMALL ROMAN NUMERAL TWELVE +0x85BF 0xF862+0x0078+0x0069+0x0069+0x0069 # small roman numeral thirteen +0x85C0 0xF861+0x0078+0x0069+0x0076 # small roman numeral fourteen +0x85C1 0xF860+0x0078+0x0076 # small roman numeral fifteen +0x85DB 0x249C # PARENTHESIZED LATIN SMALL LETTER A +0x85DC 0x249D # PARENTHESIZED LATIN SMALL LETTER B +0x85DD 0x249E # PARENTHESIZED LATIN SMALL LETTER C +0x85DE 0x249F # PARENTHESIZED LATIN SMALL LETTER D +0x85DF 0x24A0 # PARENTHESIZED LATIN SMALL LETTER E +0x85E0 0x24A1 # PARENTHESIZED LATIN SMALL LETTER F +0x85E1 0x24A2 # PARENTHESIZED LATIN SMALL LETTER G +0x85E2 0x24A3 # PARENTHESIZED LATIN SMALL LETTER H +0x85E3 0x24A4 # PARENTHESIZED LATIN SMALL LETTER I +0x85E4 0x24A5 # PARENTHESIZED LATIN SMALL LETTER J +0x85E5 0x24A6 # PARENTHESIZED LATIN SMALL LETTER K +0x85E6 0x24A7 # PARENTHESIZED LATIN SMALL LETTER L +0x85E7 0x24A8 # PARENTHESIZED LATIN SMALL LETTER M +0x85E8 0x24A9 # PARENTHESIZED LATIN SMALL LETTER N +0x85E9 0x24AA # PARENTHESIZED LATIN SMALL LETTER O +0x85EA 0x24AB # PARENTHESIZED LATIN SMALL LETTER P +0x85EB 0x24AC # PARENTHESIZED LATIN SMALL LETTER Q +0x85EC 0x24AD # PARENTHESIZED LATIN SMALL LETTER R +0x85ED 0x24AE # PARENTHESIZED LATIN SMALL LETTER S +0x85EE 0x24AF # PARENTHESIZED LATIN SMALL LETTER T +0x85EF 0x24B0 # PARENTHESIZED LATIN SMALL LETTER U +0x85F0 0x24B1 # PARENTHESIZED LATIN SMALL LETTER V +0x85F1 0x24B2 # PARENTHESIZED LATIN SMALL LETTER W +0x85F2 0x24B3 # PARENTHESIZED LATIN SMALL LETTER X +0x85F3 0x24B4 # PARENTHESIZED LATIN SMALL LETTER Y +0x85F4 0x24B5 # PARENTHESIZED LATIN SMALL LETTER Z +0x8640 0x339C # SQUARE MM +0x8641 0x339F # SQUARE MM SQUARED +0x8642 0x339D # SQUARE CM +0x8643 0x33A0 # SQUARE CM SQUARED +0x8644 0x33A4 # SQUARE CM CUBED +0x8645 0xFF4D+0xF87F # square m +0x8646 0x33A1 # SQUARE M SQUARED +0x8647 0x33A5 # SQUARE M CUBED +0x8648 0x339E # SQUARE KM +0x8649 0x33A2 # SQUARE KM SQUARED +0x864A 0x338E # SQUARE MG +0x864B 0xFF47+0xF87F # square g +0x864C 0x338F # SQUARE KG +0x864D 0x33C4 # SQUARE CC +0x864E 0x3396 # SQUARE ML +0x864F 0x3397 # SQUARE DL +0x8650 0x2113 # SCRIPT SMALL L +0x8651 0x3398 # SQUARE KL +0x8652 0x33B3 # SQUARE MS +0x8653 0x33B2 # SQUARE MU S +0x8654 0x33B1 # SQUARE NS +0x8655 0x33B0 # SQUARE PS +0x8656 0x2109 # DEGREE FAHRENHEIT +0x8657 0x33D4 # SQUARE MB SMALL +0x8658 0x33CB # SQUARE HP +0x8659 0x3390 # SQUARE HZ +0x865A 0x3385 # SQUARE KB +0x865B 0x3386 # SQUARE MB +0x865C 0x3387 # SQUARE GB +0x865D 0xF860+0x0054+0x0042 # square TB +0x869B 0x2116 # NUMERO SIGN +0x869C 0x33CD # SQUARE KK +0x869D 0x2121 # TELEPHONE SIGN +0x869E 0xF861+0x0046+0x0041+0x0058 # FAX sign # or for Unicode 4.0, 0x213B FACSIMILE SIGN +0x869F 0x2664 # WHITE SPADE SUIT +0x86A0 0x2667 # WHITE CLUB SUIT +0x86A1 0x2661 # WHITE HEART SUIT +0x86A2 0x2662 # WHITE DIAMOND SUIT +0x86A3 0x2660 # BLACK SPADE SUIT +0x86A4 0x2663 # BLACK CLUB SUIT +0x86A5 0x2665 # BLACK HEART SUIT +0x86A6 0x2666 # BLACK DIAMOND SUIT +0x86B3 0x3020 # POSTAL MARK FACE +0x86B4 0x260E # BLACK TELEPHONE +0x86B5 0x3004 # JAPANESE INDUSTRIAL STANDARD SYMBOL +0x86C7 0x261E # WHITE RIGHT POINTING INDEX +0x86C8 0x261C # WHITE LEFT POINTING INDEX +0x86C9 0x261D # WHITE UP POINTING INDEX +0x86CA 0x261F # WHITE DOWN POINTING INDEX +0x86CB 0x21C6 # LEFTWARDS ARROW OVER RIGHTWARDS ARROW +0x86CC 0x21C4 # RIGHTWARDS ARROW OVER LEFTWARDS ARROW +0x86CD 0x21C5 # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW +0x86CE 0xF860+0x2193+0x2191 # downwards arrow leftwards of upwards arrow +0x86CF 0x21E8 # RIGHTWARDS WHITE ARROW +0x86D0 0x21E6 # LEFTWARDS WHITE ARROW +0x86D1 0x21E7 # UPWARDS WHITE ARROW +0x86D2 0x21E9 # DOWNWARDS WHITE ARROW +0x86D3 0x21E8+0xF87A # rightwards black arrow # or 0x27A1 BLACK RIGHTWARDS ARROW +0x86D4 0x21E6+0xF87A # leftwards black arrow # or for Unicode 4.0, 0x2B05 LEFTWARDS BLACK ARROW +0x86D5 0x21E7+0xF87A # upwards black arrow # or for Unicode 4.0, 0x2B06 UPWARDS BLACK ARROW +0x86D6 0x21E9+0xF87A # downwards black arrow # or for Unicode 4.0, 0x2B07 DOWNWARDS BLACK ARROW +0x8740 0x3230 # PARENTHESIZED IDEOGRAPH SUN +0x8741 0x322A # PARENTHESIZED IDEOGRAPH MOON +0x8742 0x322B # PARENTHESIZED IDEOGRAPH FIRE +0x8743 0x322C # PARENTHESIZED IDEOGRAPH WATER +0x8744 0x322D # PARENTHESIZED IDEOGRAPH WOOD +0x8745 0x322E # PARENTHESIZED IDEOGRAPH METAL +0x8746 0x322F # PARENTHESIZED IDEOGRAPH EARTH +0x8747 0x3240 # PARENTHESIZED IDEOGRAPH FESTIVAL +0x8748 0x3237 # PARENTHESIZED IDEOGRAPH CONGRATULATION +0x8749 0x3242 # PARENTHESIZED IDEOGRAPH SELF +0x874A 0x3243 # PARENTHESIZED IDEOGRAPH REACH +0x874B 0x3239 # PARENTHESIZED IDEOGRAPH REPRESENT +0x874C 0x323A # PARENTHESIZED IDEOGRAPH CALL +0x874D 0x3231 # PARENTHESIZED IDEOGRAPH STOCK +0x874E 0x323E # PARENTHESIZED IDEOGRAPH RESOURCE +0x874F 0x3234 # PARENTHESIZED IDEOGRAPH NAME +0x8750 0x3232 # PARENTHESIZED IDEOGRAPH HAVE +0x8751 0x323B # PARENTHESIZED IDEOGRAPH STUDY +0x8752 0x3236 # PARENTHESIZED IDEOGRAPH FINANCIAL +0x8753 0x3233 # PARENTHESIZED IDEOGRAPH SOCIETY +0x8754 0x3235 # PARENTHESIZED IDEOGRAPH SPECIAL +0x8755 0x323C # PARENTHESIZED IDEOGRAPH SUPERVISE +0x8756 0x323D # PARENTHESIZED IDEOGRAPH ENTERPRISE +0x8757 0x323F # PARENTHESIZED IDEOGRAPH ALLIANCE +0x8758 0x3238 # PARENTHESIZED IDEOGRAPH LABOR +0x8791 0x5927+0x20DD # ideograph big + COMBINING ENCLOSING CIRCLE +0x8792 0x5C0F+0x20DD # ideograph small + COMBINING ENCLOSING CIRCLE +0x8793 0x32A4 # CIRCLED IDEOGRAPH HIGH +0x8794 0x32A5 # CIRCLED IDEOGRAPH CENTRE +0x8795 0x32A6 # CIRCLED IDEOGRAPH LOW +0x8796 0x32A7 # CIRCLED IDEOGRAPH LEFT +0x8797 0x32A8 # CIRCLED IDEOGRAPH RIGHT +0x8798 0x32A9 # CIRCLED IDEOGRAPH MEDICINE +0x8799 0x3296 # CIRCLED IDEOGRAPH FINANCIAL +0x879A 0x329D # CIRCLED IDEOGRAPH EXCELLENT +0x879B 0x3298 # CIRCLED IDEOGRAPH LABOR +0x879C 0x329E # CIRCLED IDEOGRAPH PRINT +0x879D 0x63A7+0x20DD # ideograph memo + COMBINING ENCLOSING CIRCLE +0x879E 0x3299 # CIRCLED IDEOGRAPH SECRET +0x879F 0x3349 # SQUARE MIRI +0x87A0 0x3322 # SQUARE SENTI +0x87A1 0x334D # SQUARE MEETORU +0x87A2 0x3314 # SQUARE KIRO +0x87A3 0x3316 # SQUARE KIROMEETORU +0x87A4 0x3305 # SQUARE INTI +0x87A5 0x3333 # SQUARE HUIITO +0x87A6 0x334E # SQUARE YAADO +0x87A7 0x3303 # SQUARE AARU +0x87A8 0x3336 # SQUARE HEKUTAARU +0x87A9 0x3318 # SQUARE GURAMU +0x87AA 0x3315 # SQUARE KIROGURAMU +0x87AB 0x3327 # SQUARE TON +0x87AC 0x3351 # SQUARE RITTORU +0x87AD 0x334A # SQUARE MIRIBAARU +0x87AE 0x3339 # SQUARE HERUTU +0x87AF 0x3357 # SQUARE WATTO +0x87B0 0x330D # SQUARE KARORII +0x87B1 0x3342 # SQUARE HOON +0x87B2 0x3323 # SQUARE SENTO +0x87B3 0x3326 # SQUARE DORU +0x87B4 0x333B # SQUARE PEEZI +0x87B5 0x332B # SQUARE PAASENTO +0x87BD 0x3300 # SQUARE APAATO +0x87BE 0x331E # SQUARE KOOPO +0x87BF 0x332A # SQUARE HAITU +0x87C0 0x3331 # SQUARE BIRU +0x87C1 0x3347 # SQUARE MANSYON +0x87E5 0x337E # SQUARE ERA NAME MEIZI +0x87E6 0x337D # SQUARE ERA NAME TAISYOU +0x87E7 0x337C # SQUARE ERA NAME SYOUWA +0x87E8 0x337B # SQUARE ERA NAME HEISEI +0x87FA 0x337F # SQUARE CORPORATION +0x87FB 0xF862+0x6709+0x9650+0x4F1A+0x793E # square "limited company, ltd. [yuugen gaisha]" +0x87FC 0xF862+0x8CA1+0x56E3+0x6CD5+0x4EBA # square "foundation [zaidan houjin]" +0x8840 0x222E # CONTOUR INTEGRAL +0x8841 0x221F # RIGHT ANGLE +0x8842 0x22BF # RIGHT TRIANGLE +0x8854 0x301D # REVERSED DOUBLE PRIME QUOTATION MARK +0x8855 0x301F # LOW DOUBLE PRIME QUOTATION MARK +0x8868 0x3094 # HIRAGANA LETTER VU +0x886A 0x30F7 # KATAKANA LETTER VA +0x886B 0x30F8 # KATAKANA LETTER VI +0x886C 0x30F9 # KATAKANA LETTER VE +0x886D 0x30FA # KATAKANA LETTER VO + +# Standard +0x889F 0x4E9C # +0x88A0 0x5516 # +0x88A1 0x5A03 # +0x88A2 0x963F # +0x88A3 0x54C0 # +0x88A4 0x611B # +0x88A5 0x6328 # +0x88A6 0x59F6 # +0x88A7 0x9022 # +0x88A8 0x8475 # +0x88A9 0x831C # +0x88AA 0x7A50 # +0x88AB 0x60AA # +0x88AC 0x63E1 # +0x88AD 0x6E25 # +0x88AE 0x65ED # +0x88AF 0x8466 # +0x88B0 0x82A6 # +0x88B1 0x9BF5 # +0x88B2 0x6893 # +0x88B3 0x5727 # +0x88B4 0x65A1 # +0x88B5 0x6271 # +0x88B6 0x5B9B # +0x88B7 0x59D0 # +0x88B8 0x867B # +0x88B9 0x98F4 # +0x88BA 0x7D62 # +0x88BB 0x7DBE # +0x88BC 0x9B8E # +0x88BD 0x6216 # +0x88BE 0x7C9F # +0x88BF 0x88B7 # +0x88C0 0x5B89 # +0x88C1 0x5EB5 # +0x88C2 0x6309 # +0x88C3 0x6697 # +0x88C4 0x6848 # +0x88C5 0x95C7 # +0x88C6 0x978D # +0x88C7 0x674F # +0x88C8 0x4EE5 # +0x88C9 0x4F0A # +0x88CA 0x4F4D # +0x88CB 0x4F9D # +0x88CC 0x5049 # +0x88CD 0x56F2 # +0x88CE 0x5937 # +0x88CF 0x59D4 # +0x88D0 0x5A01 # +0x88D1 0x5C09 # +0x88D2 0x60DF # +0x88D3 0x610F # +0x88D4 0x6170 # +0x88D5 0x6613 # +0x88D6 0x6905 # +0x88D7 0x70BA # +0x88D8 0x754F # +0x88D9 0x7570 # +0x88DA 0x79FB # +0x88DB 0x7DAD # +0x88DC 0x7DEF # +0x88DD 0x80C3 # +0x88DE 0x840E # +0x88DF 0x8863 # +0x88E0 0x8B02 # +0x88E1 0x9055 # +0x88E2 0x907A # +0x88E3 0x533B # +0x88E4 0x4E95 # +0x88E5 0x4EA5 # +0x88E6 0x57DF # +0x88E7 0x80B2 # +0x88E8 0x90C1 # +0x88E9 0x78EF # +0x88EA 0x4E00 # +0x88EB 0x58F1 # +0x88EC 0x6EA2 # +0x88ED 0x9038 # +0x88EE 0x7A32 # +0x88EF 0x8328 # +0x88F0 0x828B # +0x88F1 0x9C2F # +0x88F2 0x5141 # +0x88F3 0x5370 # +0x88F4 0x54BD # +0x88F5 0x54E1 # +0x88F6 0x56E0 # +0x88F7 0x59FB # +0x88F8 0x5F15 # +0x88F9 0x98F2 # +0x88FA 0x6DEB # +0x88FB 0x80E4 # +0x88FC 0x852D # +0x8940 0x9662 # +0x8941 0x9670 # +0x8942 0x96A0 # +0x8943 0x97FB # +0x8944 0x540B # +0x8945 0x53F3 # +0x8946 0x5B87 # +0x8947 0x70CF # +0x8948 0x7FBD # +0x8949 0x8FC2 # +0x894A 0x96E8 # +0x894B 0x536F # +0x894C 0x9D5C # +0x894D 0x7ABA # +0x894E 0x4E11 # +0x894F 0x7893 # +0x8950 0x81FC # +0x8951 0x6E26 # +0x8952 0x5618 # +0x8953 0x5504 # +0x8954 0x6B1D # +0x8955 0x851A # +0x8956 0x9C3B # +0x8957 0x59E5 # +0x8958 0x53A9 # +0x8959 0x6D66 # +0x895A 0x74DC # +0x895B 0x958F # +0x895C 0x5642 # +0x895D 0x4E91 # +0x895E 0x904B # +0x895F 0x96F2 # +0x8960 0x834F # +0x8961 0x990C # +0x8962 0x53E1 # +0x8963 0x55B6 # +0x8964 0x5B30 # +0x8965 0x5F71 # +0x8966 0x6620 # +0x8967 0x66F3 # +0x8968 0x6804 # +0x8969 0x6C38 # +0x896A 0x6CF3 # +0x896B 0x6D29 # +0x896C 0x745B # +0x896D 0x76C8 # +0x896E 0x7A4E # +0x896F 0x9834 # +0x8970 0x82F1 # +0x8971 0x885B # +0x8972 0x8A60 # +0x8973 0x92ED # +0x8974 0x6DB2 # +0x8975 0x75AB # +0x8976 0x76CA # +0x8977 0x99C5 # +0x8978 0x60A6 # +0x8979 0x8B01 # +0x897A 0x8D8A # +0x897B 0x95B2 # +0x897C 0x698E # +0x897D 0x53AD # +0x897E 0x5186 # +0x8980 0x5712 # +0x8981 0x5830 # +0x8982 0x5944 # +0x8983 0x5BB4 # +0x8984 0x5EF6 # +0x8985 0x6028 # +0x8986 0x63A9 # +0x8987 0x63F4 # +0x8988 0x6CBF # +0x8989 0x6F14 # +0x898A 0x708E # +0x898B 0x7114 # +0x898C 0x7159 # +0x898D 0x71D5 # +0x898E 0x733F # +0x898F 0x7E01 # +0x8990 0x8276 # +0x8991 0x82D1 # +0x8992 0x8597 # +0x8993 0x9060 # +0x8994 0x925B # +0x8995 0x9D1B # +0x8996 0x5869 # +0x8997 0x65BC # +0x8998 0x6C5A # +0x8999 0x7525 # +0x899A 0x51F9 # +0x899B 0x592E # +0x899C 0x5965 # +0x899D 0x5F80 # +0x899E 0x5FDC # +0x899F 0x62BC # +0x89A0 0x65FA # +0x89A1 0x6A2A # +0x89A2 0x6B27 # +0x89A3 0x6BB4 # +0x89A4 0x738B # +0x89A5 0x7FC1 # +0x89A6 0x8956 # +0x89A7 0x9D2C # +0x89A8 0x9D0E # +0x89A9 0x9EC4 # +0x89AA 0x5CA1 # +0x89AB 0x6C96 # +0x89AC 0x837B # +0x89AD 0x5104 # +0x89AE 0x5C4B # +0x89AF 0x61B6 # +0x89B0 0x81C6 # +0x89B1 0x6876 # +0x89B2 0x7261 # +0x89B3 0x4E59 # +0x89B4 0x4FFA # +0x89B5 0x5378 # +0x89B6 0x6069 # +0x89B7 0x6E29 # +0x89B8 0x7A4F # +0x89B9 0x97F3 # +0x89BA 0x4E0B # +0x89BB 0x5316 # +0x89BC 0x4EEE # +0x89BD 0x4F55 # +0x89BE 0x4F3D # +0x89BF 0x4FA1 # +0x89C0 0x4F73 # +0x89C1 0x52A0 # +0x89C2 0x53EF # +0x89C3 0x5609 # +0x89C4 0x590F # +0x89C5 0x5AC1 # +0x89C6 0x5BB6 # +0x89C7 0x5BE1 # +0x89C8 0x79D1 # +0x89C9 0x6687 # +0x89CA 0x679C # +0x89CB 0x67B6 # +0x89CC 0x6B4C # +0x89CD 0x6CB3 # +0x89CE 0x706B # +0x89CF 0x73C2 # +0x89D0 0x798D # +0x89D1 0x79BE # +0x89D2 0x7A3C # +0x89D3 0x7B87 # +0x89D4 0x82B1 # +0x89D5 0x82DB # +0x89D6 0x8304 # +0x89D7 0x8377 # +0x89D8 0x83EF # +0x89D9 0x83D3 # +0x89DA 0x8766 # +0x89DB 0x8AB2 # +0x89DC 0x5629 # +0x89DD 0x8CA8 # +0x89DE 0x8FE6 # +0x89DF 0x904E # +0x89E0 0x971E # +0x89E1 0x868A # +0x89E2 0x4FC4 # +0x89E3 0x5CE8 # +0x89E4 0x6211 # +0x89E5 0x7259 # +0x89E6 0x753B # +0x89E7 0x81E5 # +0x89E8 0x82BD # +0x89E9 0x86FE # +0x89EA 0x8CC0 # +0x89EB 0x96C5 # +0x89EC 0x9913 # +0x89ED 0x99D5 # +0x89EE 0x4ECB # +0x89EF 0x4F1A # +0x89F0 0x89E3 # +0x89F1 0x56DE # +0x89F2 0x584A # +0x89F3 0x58CA # +0x89F4 0x5EFB # +0x89F5 0x5FEB # +0x89F6 0x602A # +0x89F7 0x6094 # +0x89F8 0x6062 # +0x89F9 0x61D0 # +0x89FA 0x6212 # +0x89FB 0x62D0 # +0x89FC 0x6539 # +0x8A40 0x9B41 # +0x8A41 0x6666 # +0x8A42 0x68B0 # +0x8A43 0x6D77 # +0x8A44 0x7070 # +0x8A45 0x754C # +0x8A46 0x7686 # +0x8A47 0x7D75 # +0x8A48 0x82A5 # +0x8A49 0x87F9 # +0x8A4A 0x958B # +0x8A4B 0x968E # +0x8A4C 0x8C9D # +0x8A4D 0x51F1 # +0x8A4E 0x52BE # +0x8A4F 0x5916 # +0x8A50 0x54B3 # +0x8A51 0x5BB3 # +0x8A52 0x5D16 # +0x8A53 0x6168 # +0x8A54 0x6982 # +0x8A55 0x6DAF # +0x8A56 0x788D # +0x8A57 0x84CB # +0x8A58 0x8857 # +0x8A59 0x8A72 # +0x8A5A 0x93A7 # +0x8A5B 0x9AB8 # +0x8A5C 0x6D6C # +0x8A5D 0x99A8 # +0x8A5E 0x86D9 # +0x8A5F 0x57A3 # +0x8A60 0x67FF # +0x8A61 0x86CE # +0x8A62 0x920E # +0x8A63 0x5283 # +0x8A64 0x5687 # +0x8A65 0x5404 # +0x8A66 0x5ED3 # +0x8A67 0x62E1 # +0x8A68 0x64B9 # +0x8A69 0x683C # +0x8A6A 0x6838 # +0x8A6B 0x6BBB # +0x8A6C 0x7372 # +0x8A6D 0x78BA # +0x8A6E 0x7A6B # +0x8A6F 0x899A # +0x8A70 0x89D2 # +0x8A71 0x8D6B # +0x8A72 0x8F03 # +0x8A73 0x90ED # +0x8A74 0x95A3 # +0x8A75 0x9694 # +0x8A76 0x9769 # +0x8A77 0x5B66 # +0x8A78 0x5CB3 # +0x8A79 0x697D # +0x8A7A 0x984D # +0x8A7B 0x984E # +0x8A7C 0x639B # +0x8A7D 0x7B20 # +0x8A7E 0x6A2B # +0x8A80 0x6A7F # +0x8A81 0x68B6 # +0x8A82 0x9C0D # +0x8A83 0x6F5F # +0x8A84 0x5272 # +0x8A85 0x559D # +0x8A86 0x6070 # +0x8A87 0x62EC # +0x8A88 0x6D3B # +0x8A89 0x6E07 # +0x8A8A 0x6ED1 # +0x8A8B 0x845B # +0x8A8C 0x8910 # +0x8A8D 0x8F44 # +0x8A8E 0x4E14 # +0x8A8F 0x9C39 # +0x8A90 0x53F6 # +0x8A91 0x691B # +0x8A92 0x6A3A # +0x8A93 0x9784 # +0x8A94 0x682A # +0x8A95 0x515C # +0x8A96 0x7AC3 # +0x8A97 0x84B2 # +0x8A98 0x91DC # +0x8A99 0x938C # +0x8A9A 0x565B # +0x8A9B 0x9D28 # +0x8A9C 0x6822 # +0x8A9D 0x8305 # +0x8A9E 0x8431 # +0x8A9F 0x7CA5 # +0x8AA0 0x5208 # +0x8AA1 0x82C5 # +0x8AA2 0x74E6 # +0x8AA3 0x4E7E # +0x8AA4 0x4F83 # +0x8AA5 0x51A0 # +0x8AA6 0x5BD2 # +0x8AA7 0x520A # +0x8AA8 0x52D8 # +0x8AA9 0x52E7 # +0x8AAA 0x5DFB # +0x8AAB 0x559A # +0x8AAC 0x582A # +0x8AAD 0x59E6 # +0x8AAE 0x5B8C # +0x8AAF 0x5B98 # +0x8AB0 0x5BDB # +0x8AB1 0x5E72 # +0x8AB2 0x5E79 # +0x8AB3 0x60A3 # +0x8AB4 0x611F # +0x8AB5 0x6163 # +0x8AB6 0x61BE # +0x8AB7 0x63DB # +0x8AB8 0x6562 # +0x8AB9 0x67D1 # +0x8ABA 0x6853 # +0x8ABB 0x68FA # +0x8ABC 0x6B3E # +0x8ABD 0x6B53 # +0x8ABE 0x6C57 # +0x8ABF 0x6F22 # +0x8AC0 0x6F97 # +0x8AC1 0x6F45 # +0x8AC2 0x74B0 # +0x8AC3 0x7518 # +0x8AC4 0x76E3 # +0x8AC5 0x770B # +0x8AC6 0x7AFF # +0x8AC7 0x7BA1 # +0x8AC8 0x7C21 # +0x8AC9 0x7DE9 # +0x8ACA 0x7F36 # +0x8ACB 0x7FF0 # +0x8ACC 0x809D # +0x8ACD 0x8266 # +0x8ACE 0x839E # +0x8ACF 0x89B3 # +0x8AD0 0x8ACC # +0x8AD1 0x8CAB # +0x8AD2 0x9084 # +0x8AD3 0x9451 # +0x8AD4 0x9593 # +0x8AD5 0x9591 # +0x8AD6 0x95A2 # +0x8AD7 0x9665 # +0x8AD8 0x97D3 # +0x8AD9 0x9928 # +0x8ADA 0x8218 # +0x8ADB 0x4E38 # +0x8ADC 0x542B # +0x8ADD 0x5CB8 # +0x8ADE 0x5DCC # +0x8ADF 0x73A9 # +0x8AE0 0x764C # +0x8AE1 0x773C # +0x8AE2 0x5CA9 # +0x8AE3 0x7FEB # +0x8AE4 0x8D0B # +0x8AE5 0x96C1 # +0x8AE6 0x9811 # +0x8AE7 0x9854 # +0x8AE8 0x9858 # +0x8AE9 0x4F01 # +0x8AEA 0x4F0E # +0x8AEB 0x5371 # +0x8AEC 0x559C # +0x8AED 0x5668 # +0x8AEE 0x57FA # +0x8AEF 0x5947 # +0x8AF0 0x5B09 # +0x8AF1 0x5BC4 # +0x8AF2 0x5C90 # +0x8AF3 0x5E0C # +0x8AF4 0x5E7E # +0x8AF5 0x5FCC # +0x8AF6 0x63EE # +0x8AF7 0x673A # +0x8AF8 0x65D7 # +0x8AF9 0x65E2 # +0x8AFA 0x671F # +0x8AFB 0x68CB # +0x8AFC 0x68C4 # +0x8B40 0x6A5F # +0x8B41 0x5E30 # +0x8B42 0x6BC5 # +0x8B43 0x6C17 # +0x8B44 0x6C7D # +0x8B45 0x757F # +0x8B46 0x7948 # +0x8B47 0x5B63 # +0x8B48 0x7A00 # +0x8B49 0x7D00 # +0x8B4A 0x5FBD # +0x8B4B 0x898F # +0x8B4C 0x8A18 # +0x8B4D 0x8CB4 # +0x8B4E 0x8D77 # +0x8B4F 0x8ECC # +0x8B50 0x8F1D # +0x8B51 0x98E2 # +0x8B52 0x9A0E # +0x8B53 0x9B3C # +0x8B54 0x4E80 # +0x8B55 0x507D # +0x8B56 0x5100 # +0x8B57 0x5993 # +0x8B58 0x5B9C # +0x8B59 0x622F # +0x8B5A 0x6280 # +0x8B5B 0x64EC # +0x8B5C 0x6B3A # +0x8B5D 0x72A0 # +0x8B5E 0x7591 # +0x8B5F 0x7947 # +0x8B60 0x7FA9 # +0x8B61 0x87FB # +0x8B62 0x8ABC # +0x8B63 0x8B70 # +0x8B64 0x63AC # +0x8B65 0x83CA # +0x8B66 0x97A0 # +0x8B67 0x5409 # +0x8B68 0x5403 # +0x8B69 0x55AB # +0x8B6A 0x6854 # +0x8B6B 0x6A58 # +0x8B6C 0x8A70 # +0x8B6D 0x7827 # +0x8B6E 0x6775 # +0x8B6F 0x9ECD # +0x8B70 0x5374 # +0x8B71 0x5BA2 # +0x8B72 0x811A # +0x8B73 0x8650 # +0x8B74 0x9006 # +0x8B75 0x4E18 # +0x8B76 0x4E45 # +0x8B77 0x4EC7 # +0x8B78 0x4F11 # +0x8B79 0x53CA # +0x8B7A 0x5438 # +0x8B7B 0x5BAE # +0x8B7C 0x5F13 # +0x8B7D 0x6025 # +0x8B7E 0x6551 # +0x8B80 0x673D # +0x8B81 0x6C42 # +0x8B82 0x6C72 # +0x8B83 0x6CE3 # +0x8B84 0x7078 # +0x8B85 0x7403 # +0x8B86 0x7A76 # +0x8B87 0x7AAE # +0x8B88 0x7B08 # +0x8B89 0x7D1A # +0x8B8A 0x7CFE # +0x8B8B 0x7D66 # +0x8B8C 0x65E7 # +0x8B8D 0x725B # +0x8B8E 0x53BB # +0x8B8F 0x5C45 # +0x8B90 0x5DE8 # +0x8B91 0x62D2 # +0x8B92 0x62E0 # +0x8B93 0x6319 # +0x8B94 0x6E20 # +0x8B95 0x865A # +0x8B96 0x8A31 # +0x8B97 0x8DDD # +0x8B98 0x92F8 # +0x8B99 0x6F01 # +0x8B9A 0x79A6 # +0x8B9B 0x9B5A # +0x8B9C 0x4EA8 # +0x8B9D 0x4EAB # +0x8B9E 0x4EAC # +0x8B9F 0x4F9B # +0x8BA0 0x4FA0 # +0x8BA1 0x50D1 # +0x8BA2 0x5147 # +0x8BA3 0x7AF6 # +0x8BA4 0x5171 # +0x8BA5 0x51F6 # +0x8BA6 0x5354 # +0x8BA7 0x5321 # +0x8BA8 0x537F # +0x8BA9 0x53EB # +0x8BAA 0x55AC # +0x8BAB 0x5883 # +0x8BAC 0x5CE1 # +0x8BAD 0x5F37 # +0x8BAE 0x5F4A # +0x8BAF 0x602F # +0x8BB0 0x6050 # +0x8BB1 0x606D # +0x8BB2 0x631F # +0x8BB3 0x6559 # +0x8BB4 0x6A4B # +0x8BB5 0x6CC1 # +0x8BB6 0x72C2 # +0x8BB7 0x72ED # +0x8BB8 0x77EF # +0x8BB9 0x80F8 # +0x8BBA 0x8105 # +0x8BBB 0x8208 # +0x8BBC 0x854E # +0x8BBD 0x90F7 # +0x8BBE 0x93E1 # +0x8BBF 0x97FF # +0x8BC0 0x9957 # +0x8BC1 0x9A5A # +0x8BC2 0x4EF0 # +0x8BC3 0x51DD # +0x8BC4 0x5C2D # +0x8BC5 0x6681 # +0x8BC6 0x696D # +0x8BC7 0x5C40 # +0x8BC8 0x66F2 # +0x8BC9 0x6975 # +0x8BCA 0x7389 # +0x8BCB 0x6850 # +0x8BCC 0x7C81 # +0x8BCD 0x50C5 # +0x8BCE 0x52E4 # +0x8BCF 0x5747 # +0x8BD0 0x5DFE # +0x8BD1 0x9326 # +0x8BD2 0x65A4 # +0x8BD3 0x6B23 # +0x8BD4 0x6B3D # +0x8BD5 0x7434 # +0x8BD6 0x7981 # +0x8BD7 0x79BD # +0x8BD8 0x7B4B # +0x8BD9 0x7DCA # +0x8BDA 0x82B9 # +0x8BDB 0x83CC # +0x8BDC 0x887F # +0x8BDD 0x895F # +0x8BDE 0x8B39 # +0x8BDF 0x8FD1 # +0x8BE0 0x91D1 # +0x8BE1 0x541F # +0x8BE2 0x9280 # +0x8BE3 0x4E5D # +0x8BE4 0x5036 # +0x8BE5 0x53E5 # +0x8BE6 0x533A # +0x8BE7 0x72D7 # +0x8BE8 0x7396 # +0x8BE9 0x77E9 # +0x8BEA 0x82E6 # +0x8BEB 0x8EAF # +0x8BEC 0x99C6 # +0x8BED 0x99C8 # +0x8BEE 0x99D2 # +0x8BEF 0x5177 # +0x8BF0 0x611A # +0x8BF1 0x865E # +0x8BF2 0x55B0 # +0x8BF3 0x7A7A # +0x8BF4 0x5076 # +0x8BF5 0x5BD3 # +0x8BF6 0x9047 # +0x8BF7 0x9685 # +0x8BF8 0x4E32 # +0x8BF9 0x6ADB # +0x8BFA 0x91E7 # +0x8BFB 0x5C51 # +0x8BFC 0x5C48 # +0x8C40 0x6398 # +0x8C41 0x7A9F # +0x8C42 0x6C93 # +0x8C43 0x9774 # +0x8C44 0x8F61 # +0x8C45 0x7AAA # +0x8C46 0x718A # +0x8C47 0x9688 # +0x8C48 0x7C82 # +0x8C49 0x6817 # +0x8C4A 0x7E70 # +0x8C4B 0x6851 # +0x8C4C 0x936C # +0x8C4D 0x52F2 # +0x8C4E 0x541B # +0x8C4F 0x85AB # +0x8C50 0x8A13 # +0x8C51 0x7FA4 # +0x8C52 0x8ECD # +0x8C53 0x90E1 # +0x8C54 0x5366 # +0x8C55 0x8888 # +0x8C56 0x7941 # +0x8C57 0x4FC2 # +0x8C58 0x50BE # +0x8C59 0x5211 # +0x8C5A 0x5144 # +0x8C5B 0x5553 # +0x8C5C 0x572D # +0x8C5D 0x73EA # +0x8C5E 0x578B # +0x8C5F 0x5951 # +0x8C60 0x5F62 # +0x8C61 0x5F84 # +0x8C62 0x6075 # +0x8C63 0x6176 # +0x8C64 0x6167 # +0x8C65 0x61A9 # +0x8C66 0x63B2 # +0x8C67 0x643A # +0x8C68 0x656C # +0x8C69 0x666F # +0x8C6A 0x6842 # +0x8C6B 0x6E13 # +0x8C6C 0x7566 # +0x8C6D 0x7A3D # +0x8C6E 0x7CFB # +0x8C6F 0x7D4C # +0x8C70 0x7D99 # +0x8C71 0x7E4B # +0x8C72 0x7F6B # +0x8C73 0x830E # +0x8C74 0x834A # +0x8C75 0x86CD # +0x8C76 0x8A08 # +0x8C77 0x8A63 # +0x8C78 0x8B66 # +0x8C79 0x8EFD # +0x8C7A 0x981A # +0x8C7B 0x9D8F # +0x8C7C 0x82B8 # +0x8C7D 0x8FCE # +0x8C7E 0x9BE8 # +0x8C80 0x5287 # +0x8C81 0x621F # +0x8C82 0x6483 # +0x8C83 0x6FC0 # +0x8C84 0x9699 # +0x8C85 0x6841 # +0x8C86 0x5091 # +0x8C87 0x6B20 # +0x8C88 0x6C7A # +0x8C89 0x6F54 # +0x8C8A 0x7A74 # +0x8C8B 0x7D50 # +0x8C8C 0x8840 # +0x8C8D 0x8A23 # +0x8C8E 0x6708 # +0x8C8F 0x4EF6 # +0x8C90 0x5039 # +0x8C91 0x5026 # +0x8C92 0x5065 # +0x8C93 0x517C # +0x8C94 0x5238 # +0x8C95 0x5263 # +0x8C96 0x55A7 # +0x8C97 0x570F # +0x8C98 0x5805 # +0x8C99 0x5ACC # +0x8C9A 0x5EFA # +0x8C9B 0x61B2 # +0x8C9C 0x61F8 # +0x8C9D 0x62F3 # +0x8C9E 0x6372 # +0x8C9F 0x691C # +0x8CA0 0x6A29 # +0x8CA1 0x727D # +0x8CA2 0x72AC # +0x8CA3 0x732E # +0x8CA4 0x7814 # +0x8CA5 0x786F # +0x8CA6 0x7D79 # +0x8CA7 0x770C # +0x8CA8 0x80A9 # +0x8CA9 0x898B # +0x8CAA 0x8B19 # +0x8CAB 0x8CE2 # +0x8CAC 0x8ED2 # +0x8CAD 0x9063 # +0x8CAE 0x9375 # +0x8CAF 0x967A # +0x8CB0 0x9855 # +0x8CB1 0x9A13 # +0x8CB2 0x9E78 # +0x8CB3 0x5143 # +0x8CB4 0x539F # +0x8CB5 0x53B3 # +0x8CB6 0x5E7B # +0x8CB7 0x5F26 # +0x8CB8 0x6E1B # +0x8CB9 0x6E90 # +0x8CBA 0x7384 # +0x8CBB 0x73FE # +0x8CBC 0x7D43 # +0x8CBD 0x8237 # +0x8CBE 0x8A00 # +0x8CBF 0x8AFA # +0x8CC0 0x9650 # +0x8CC1 0x4E4E # +0x8CC2 0x500B # +0x8CC3 0x53E4 # +0x8CC4 0x547C # +0x8CC5 0x56FA # +0x8CC6 0x59D1 # +0x8CC7 0x5B64 # +0x8CC8 0x5DF1 # +0x8CC9 0x5EAB # +0x8CCA 0x5F27 # +0x8CCB 0x6238 # +0x8CCC 0x6545 # +0x8CCD 0x67AF # +0x8CCE 0x6E56 # +0x8CCF 0x72D0 # +0x8CD0 0x7CCA # +0x8CD1 0x88B4 # +0x8CD2 0x80A1 # +0x8CD3 0x80E1 # +0x8CD4 0x83F0 # +0x8CD5 0x864E # +0x8CD6 0x8A87 # +0x8CD7 0x8DE8 # +0x8CD8 0x9237 # +0x8CD9 0x96C7 # +0x8CDA 0x9867 # +0x8CDB 0x9F13 # +0x8CDC 0x4E94 # +0x8CDD 0x4E92 # +0x8CDE 0x4F0D # +0x8CDF 0x5348 # +0x8CE0 0x5449 # +0x8CE1 0x543E # +0x8CE2 0x5A2F # +0x8CE3 0x5F8C # +0x8CE4 0x5FA1 # +0x8CE5 0x609F # +0x8CE6 0x68A7 # +0x8CE7 0x6A8E # +0x8CE8 0x745A # +0x8CE9 0x7881 # +0x8CEA 0x8A9E # +0x8CEB 0x8AA4 # +0x8CEC 0x8B77 # +0x8CED 0x9190 # +0x8CEE 0x4E5E # +0x8CEF 0x9BC9 # +0x8CF0 0x4EA4 # +0x8CF1 0x4F7C # +0x8CF2 0x4FAF # +0x8CF3 0x5019 # +0x8CF4 0x5016 # +0x8CF5 0x5149 # +0x8CF6 0x516C # +0x8CF7 0x529F # +0x8CF8 0x52B9 # +0x8CF9 0x52FE # +0x8CFA 0x539A # +0x8CFB 0x53E3 # +0x8CFC 0x5411 # +0x8D40 0x540E # +0x8D41 0x5589 # +0x8D42 0x5751 # +0x8D43 0x57A2 # +0x8D44 0x597D # +0x8D45 0x5B54 # +0x8D46 0x5B5D # +0x8D47 0x5B8F # +0x8D48 0x5DE5 # +0x8D49 0x5DE7 # +0x8D4A 0x5DF7 # +0x8D4B 0x5E78 # +0x8D4C 0x5E83 # +0x8D4D 0x5E9A # +0x8D4E 0x5EB7 # +0x8D4F 0x5F18 # +0x8D50 0x6052 # +0x8D51 0x614C # +0x8D52 0x6297 # +0x8D53 0x62D8 # +0x8D54 0x63A7 # +0x8D55 0x653B # +0x8D56 0x6602 # +0x8D57 0x6643 # +0x8D58 0x66F4 # +0x8D59 0x676D # +0x8D5A 0x6821 # +0x8D5B 0x6897 # +0x8D5C 0x69CB # +0x8D5D 0x6C5F # +0x8D5E 0x6D2A # +0x8D5F 0x6D69 # +0x8D60 0x6E2F # +0x8D61 0x6E9D # +0x8D62 0x7532 # +0x8D63 0x7687 # +0x8D64 0x786C # +0x8D65 0x7A3F # +0x8D66 0x7CE0 # +0x8D67 0x7D05 # +0x8D68 0x7D18 # +0x8D69 0x7D5E # +0x8D6A 0x7DB1 # +0x8D6B 0x8015 # +0x8D6C 0x8003 # +0x8D6D 0x80AF # +0x8D6E 0x80B1 # +0x8D6F 0x8154 # +0x8D70 0x818F # +0x8D71 0x822A # +0x8D72 0x8352 # +0x8D73 0x884C # +0x8D74 0x8861 # +0x8D75 0x8B1B # +0x8D76 0x8CA2 # +0x8D77 0x8CFC # +0x8D78 0x90CA # +0x8D79 0x9175 # +0x8D7A 0x9271 # +0x8D7B 0x783F # +0x8D7C 0x92FC # +0x8D7D 0x95A4 # +0x8D7E 0x964D # +0x8D80 0x9805 # +0x8D81 0x9999 # +0x8D82 0x9AD8 # +0x8D83 0x9D3B # +0x8D84 0x525B # +0x8D85 0x52AB # +0x8D86 0x53F7 # +0x8D87 0x5408 # +0x8D88 0x58D5 # +0x8D89 0x62F7 # +0x8D8A 0x6FE0 # +0x8D8B 0x8C6A # +0x8D8C 0x8F5F # +0x8D8D 0x9EB9 # +0x8D8E 0x514B # +0x8D8F 0x523B # +0x8D90 0x544A # +0x8D91 0x56FD # +0x8D92 0x7A40 # +0x8D93 0x9177 # +0x8D94 0x9D60 # +0x8D95 0x9ED2 # +0x8D96 0x7344 # +0x8D97 0x6F09 # +0x8D98 0x8170 # +0x8D99 0x7511 # +0x8D9A 0x5FFD # +0x8D9B 0x60DA # +0x8D9C 0x9AA8 # +0x8D9D 0x72DB # +0x8D9E 0x8FBC # +0x8D9F 0x6B64 # +0x8DA0 0x9803 # +0x8DA1 0x4ECA # +0x8DA2 0x56F0 # +0x8DA3 0x5764 # +0x8DA4 0x58BE # +0x8DA5 0x5A5A # +0x8DA6 0x6068 # +0x8DA7 0x61C7 # +0x8DA8 0x660F # +0x8DA9 0x6606 # +0x8DAA 0x6839 # +0x8DAB 0x68B1 # +0x8DAC 0x6DF7 # +0x8DAD 0x75D5 # +0x8DAE 0x7D3A # +0x8DAF 0x826E # +0x8DB0 0x9B42 # +0x8DB1 0x4E9B # +0x8DB2 0x4F50 # +0x8DB3 0x53C9 # +0x8DB4 0x5506 # +0x8DB5 0x5D6F # +0x8DB6 0x5DE6 # +0x8DB7 0x5DEE # +0x8DB8 0x67FB # +0x8DB9 0x6C99 # +0x8DBA 0x7473 # +0x8DBB 0x7802 # +0x8DBC 0x8A50 # +0x8DBD 0x9396 # +0x8DBE 0x88DF # +0x8DBF 0x5750 # +0x8DC0 0x5EA7 # +0x8DC1 0x632B # +0x8DC2 0x50B5 # +0x8DC3 0x50AC # +0x8DC4 0x518D # +0x8DC5 0x6700 # +0x8DC6 0x54C9 # +0x8DC7 0x585E # +0x8DC8 0x59BB # +0x8DC9 0x5BB0 # +0x8DCA 0x5F69 # +0x8DCB 0x624D # +0x8DCC 0x63A1 # +0x8DCD 0x683D # +0x8DCE 0x6B73 # +0x8DCF 0x6E08 # +0x8DD0 0x707D # +0x8DD1 0x91C7 # +0x8DD2 0x7280 # +0x8DD3 0x7815 # +0x8DD4 0x7826 # +0x8DD5 0x796D # +0x8DD6 0x658E # +0x8DD7 0x7D30 # +0x8DD8 0x83DC # +0x8DD9 0x88C1 # +0x8DDA 0x8F09 # +0x8DDB 0x969B # +0x8DDC 0x5264 # +0x8DDD 0x5728 # +0x8DDE 0x6750 # +0x8DDF 0x7F6A # +0x8DE0 0x8CA1 # +0x8DE1 0x51B4 # +0x8DE2 0x5742 # +0x8DE3 0x962A # +0x8DE4 0x583A # +0x8DE5 0x698A # +0x8DE6 0x80B4 # +0x8DE7 0x54B2 # +0x8DE8 0x5D0E # +0x8DE9 0x57FC # +0x8DEA 0x7895 # +0x8DEB 0x9DFA # +0x8DEC 0x4F5C # +0x8DED 0x524A # +0x8DEE 0x548B # +0x8DEF 0x643E # +0x8DF0 0x6628 # +0x8DF1 0x6714 # +0x8DF2 0x67F5 # +0x8DF3 0x7A84 # +0x8DF4 0x7B56 # +0x8DF5 0x7D22 # +0x8DF6 0x932F # +0x8DF7 0x685C # +0x8DF8 0x9BAD # +0x8DF9 0x7B39 # +0x8DFA 0x5319 # +0x8DFB 0x518A # +0x8DFC 0x5237 # +0x8E40 0x5BDF # +0x8E41 0x62F6 # +0x8E42 0x64AE # +0x8E43 0x64E6 # +0x8E44 0x672D # +0x8E45 0x6BBA # +0x8E46 0x85A9 # +0x8E47 0x96D1 # +0x8E48 0x7690 # +0x8E49 0x9BD6 # +0x8E4A 0x634C # +0x8E4B 0x9306 # +0x8E4C 0x9BAB # +0x8E4D 0x76BF # +0x8E4E 0x6652 # +0x8E4F 0x4E09 # +0x8E50 0x5098 # +0x8E51 0x53C2 # +0x8E52 0x5C71 # +0x8E53 0x60E8 # +0x8E54 0x6492 # +0x8E55 0x6563 # +0x8E56 0x685F # +0x8E57 0x71E6 # +0x8E58 0x73CA # +0x8E59 0x7523 # +0x8E5A 0x7B97 # +0x8E5B 0x7E82 # +0x8E5C 0x8695 # +0x8E5D 0x8B83 # +0x8E5E 0x8CDB # +0x8E5F 0x9178 # +0x8E60 0x9910 # +0x8E61 0x65AC # +0x8E62 0x66AB # +0x8E63 0x6B8B # +0x8E64 0x4ED5 # +0x8E65 0x4ED4 # +0x8E66 0x4F3A # +0x8E67 0x4F7F # +0x8E68 0x523A # +0x8E69 0x53F8 # +0x8E6A 0x53F2 # +0x8E6B 0x55E3 # +0x8E6C 0x56DB # +0x8E6D 0x58EB # +0x8E6E 0x59CB # +0x8E6F 0x59C9 # +0x8E70 0x59FF # +0x8E71 0x5B50 # +0x8E72 0x5C4D # +0x8E73 0x5E02 # +0x8E74 0x5E2B # +0x8E75 0x5FD7 # +0x8E76 0x601D # +0x8E77 0x6307 # +0x8E78 0x652F # +0x8E79 0x5B5C # +0x8E7A 0x65AF # +0x8E7B 0x65BD # +0x8E7C 0x65E8 # +0x8E7D 0x679D # +0x8E7E 0x6B62 # +0x8E80 0x6B7B # +0x8E81 0x6C0F # +0x8E82 0x7345 # +0x8E83 0x7949 # +0x8E84 0x79C1 # +0x8E85 0x7CF8 # +0x8E86 0x7D19 # +0x8E87 0x7D2B # +0x8E88 0x80A2 # +0x8E89 0x8102 # +0x8E8A 0x81F3 # +0x8E8B 0x8996 # +0x8E8C 0x8A5E # +0x8E8D 0x8A69 # +0x8E8E 0x8A66 # +0x8E8F 0x8A8C # +0x8E90 0x8AEE # +0x8E91 0x8CC7 # +0x8E92 0x8CDC # +0x8E93 0x96CC # +0x8E94 0x98FC # +0x8E95 0x6B6F # +0x8E96 0x4E8B # +0x8E97 0x4F3C # +0x8E98 0x4F8D # +0x8E99 0x5150 # +0x8E9A 0x5B57 # +0x8E9B 0x5BFA # +0x8E9C 0x6148 # +0x8E9D 0x6301 # +0x8E9E 0x6642 # +0x8E9F 0x6B21 # +0x8EA0 0x6ECB # +0x8EA1 0x6CBB # +0x8EA2 0x723E # +0x8EA3 0x74BD # +0x8EA4 0x75D4 # +0x8EA5 0x78C1 # +0x8EA6 0x793A # +0x8EA7 0x800C # +0x8EA8 0x8033 # +0x8EA9 0x81EA # +0x8EAA 0x8494 # +0x8EAB 0x8F9E # +0x8EAC 0x6C50 # +0x8EAD 0x9E7F # +0x8EAE 0x5F0F # +0x8EAF 0x8B58 # +0x8EB0 0x9D2B # +0x8EB1 0x7AFA # +0x8EB2 0x8EF8 # +0x8EB3 0x5B8D # +0x8EB4 0x96EB # +0x8EB5 0x4E03 # +0x8EB6 0x53F1 # +0x8EB7 0x57F7 # +0x8EB8 0x5931 # +0x8EB9 0x5AC9 # +0x8EBA 0x5BA4 # +0x8EBB 0x6089 # +0x8EBC 0x6E7F # +0x8EBD 0x6F06 # +0x8EBE 0x75BE # +0x8EBF 0x8CEA # +0x8EC0 0x5B9F # +0x8EC1 0x8500 # +0x8EC2 0x7BE0 # +0x8EC3 0x5072 # +0x8EC4 0x67F4 # +0x8EC5 0x829D # +0x8EC6 0x5C61 # +0x8EC7 0x854A # +0x8EC8 0x7E1E # +0x8EC9 0x820E # +0x8ECA 0x5199 # +0x8ECB 0x5C04 # +0x8ECC 0x6368 # +0x8ECD 0x8D66 # +0x8ECE 0x659C # +0x8ECF 0x716E # +0x8ED0 0x793E # +0x8ED1 0x7D17 # +0x8ED2 0x8005 # +0x8ED3 0x8B1D # +0x8ED4 0x8ECA # +0x8ED5 0x906E # +0x8ED6 0x86C7 # +0x8ED7 0x90AA # +0x8ED8 0x501F # +0x8ED9 0x52FA # +0x8EDA 0x5C3A # +0x8EDB 0x6753 # +0x8EDC 0x707C # +0x8EDD 0x7235 # +0x8EDE 0x914C # +0x8EDF 0x91C8 # +0x8EE0 0x932B # +0x8EE1 0x82E5 # +0x8EE2 0x5BC2 # +0x8EE3 0x5F31 # +0x8EE4 0x60F9 # +0x8EE5 0x4E3B # +0x8EE6 0x53D6 # +0x8EE7 0x5B88 # +0x8EE8 0x624B # +0x8EE9 0x6731 # +0x8EEA 0x6B8A # +0x8EEB 0x72E9 # +0x8EEC 0x73E0 # +0x8EED 0x7A2E # +0x8EEE 0x816B # +0x8EEF 0x8DA3 # +0x8EF0 0x9152 # +0x8EF1 0x9996 # +0x8EF2 0x5112 # +0x8EF3 0x53D7 # +0x8EF4 0x546A # +0x8EF5 0x5BFF # +0x8EF6 0x6388 # +0x8EF7 0x6A39 # +0x8EF8 0x7DAC # +0x8EF9 0x9700 # +0x8EFA 0x56DA # +0x8EFB 0x53CE # +0x8EFC 0x5468 # +0x8F40 0x5B97 # +0x8F41 0x5C31 # +0x8F42 0x5DDE # +0x8F43 0x4FEE # +0x8F44 0x6101 # +0x8F45 0x62FE # +0x8F46 0x6D32 # +0x8F47 0x79C0 # +0x8F48 0x79CB # +0x8F49 0x7D42 # +0x8F4A 0x7E4D # +0x8F4B 0x7FD2 # +0x8F4C 0x81ED # +0x8F4D 0x821F # +0x8F4E 0x8490 # +0x8F4F 0x8846 # +0x8F50 0x8972 # +0x8F51 0x8B90 # +0x8F52 0x8E74 # +0x8F53 0x8F2F # +0x8F54 0x9031 # +0x8F55 0x914B # +0x8F56 0x916C # +0x8F57 0x96C6 # +0x8F58 0x919C # +0x8F59 0x4EC0 # +0x8F5A 0x4F4F # +0x8F5B 0x5145 # +0x8F5C 0x5341 # +0x8F5D 0x5F93 # +0x8F5E 0x620E # +0x8F5F 0x67D4 # +0x8F60 0x6C41 # +0x8F61 0x6E0B # +0x8F62 0x7363 # +0x8F63 0x7E26 # +0x8F64 0x91CD # +0x8F65 0x9283 # +0x8F66 0x53D4 # +0x8F67 0x5919 # +0x8F68 0x5BBF # +0x8F69 0x6DD1 # +0x8F6A 0x795D # +0x8F6B 0x7E2E # +0x8F6C 0x7C9B # +0x8F6D 0x587E # +0x8F6E 0x719F # +0x8F6F 0x51FA # +0x8F70 0x8853 # +0x8F71 0x8FF0 # +0x8F72 0x4FCA # +0x8F73 0x5CFB # +0x8F74 0x6625 # +0x8F75 0x77AC # +0x8F76 0x7AE3 # +0x8F77 0x821C # +0x8F78 0x99FF # +0x8F79 0x51C6 # +0x8F7A 0x5FAA # +0x8F7B 0x65EC # +0x8F7C 0x696F # +0x8F7D 0x6B89 # +0x8F7E 0x6DF3 # +0x8F80 0x6E96 # +0x8F81 0x6F64 # +0x8F82 0x76FE # +0x8F83 0x7D14 # +0x8F84 0x5DE1 # +0x8F85 0x9075 # +0x8F86 0x9187 # +0x8F87 0x9806 # +0x8F88 0x51E6 # +0x8F89 0x521D # +0x8F8A 0x6240 # +0x8F8B 0x6691 # +0x8F8C 0x66D9 # +0x8F8D 0x6E1A # +0x8F8E 0x5EB6 # +0x8F8F 0x7DD2 # +0x8F90 0x7F72 # +0x8F91 0x66F8 # +0x8F92 0x85AF # +0x8F93 0x85F7 # +0x8F94 0x8AF8 # +0x8F95 0x52A9 # +0x8F96 0x53D9 # +0x8F97 0x5973 # +0x8F98 0x5E8F # +0x8F99 0x5F90 # +0x8F9A 0x6055 # +0x8F9B 0x92E4 # +0x8F9C 0x9664 # +0x8F9D 0x50B7 # +0x8F9E 0x511F # +0x8F9F 0x52DD # +0x8FA0 0x5320 # +0x8FA1 0x5347 # +0x8FA2 0x53EC # +0x8FA3 0x54E8 # +0x8FA4 0x5546 # +0x8FA5 0x5531 # +0x8FA6 0x5617 # +0x8FA7 0x5968 # +0x8FA8 0x59BE # +0x8FA9 0x5A3C # +0x8FAA 0x5BB5 # +0x8FAB 0x5C06 # +0x8FAC 0x5C0F # +0x8FAD 0x5C11 # +0x8FAE 0x5C1A # +0x8FAF 0x5E84 # +0x8FB0 0x5E8A # +0x8FB1 0x5EE0 # +0x8FB2 0x5F70 # +0x8FB3 0x627F # +0x8FB4 0x6284 # +0x8FB5 0x62DB # +0x8FB6 0x638C # +0x8FB7 0x6377 # +0x8FB8 0x6607 # +0x8FB9 0x660C # +0x8FBA 0x662D # +0x8FBB 0x6676 # +0x8FBC 0x677E # +0x8FBD 0x68A2 # +0x8FBE 0x6A1F # +0x8FBF 0x6A35 # +0x8FC0 0x6CBC # +0x8FC1 0x6D88 # +0x8FC2 0x6E09 # +0x8FC3 0x6E58 # +0x8FC4 0x713C # +0x8FC5 0x7126 # +0x8FC6 0x7167 # +0x8FC7 0x75C7 # +0x8FC8 0x7701 # +0x8FC9 0x785D # +0x8FCA 0x7901 # +0x8FCB 0x7965 # +0x8FCC 0x79F0 # +0x8FCD 0x7AE0 # +0x8FCE 0x7B11 # +0x8FCF 0x7CA7 # +0x8FD0 0x7D39 # +0x8FD1 0x8096 # +0x8FD2 0x83D6 # +0x8FD3 0x848B # +0x8FD4 0x8549 # +0x8FD5 0x885D # +0x8FD6 0x88F3 # +0x8FD7 0x8A1F # +0x8FD8 0x8A3C # +0x8FD9 0x8A54 # +0x8FDA 0x8A73 # +0x8FDB 0x8C61 # +0x8FDC 0x8CDE # +0x8FDD 0x91A4 # +0x8FDE 0x9266 # +0x8FDF 0x937E # +0x8FE0 0x9418 # +0x8FE1 0x969C # +0x8FE2 0x9798 # +0x8FE3 0x4E0A # +0x8FE4 0x4E08 # +0x8FE5 0x4E1E # +0x8FE6 0x4E57 # +0x8FE7 0x5197 # +0x8FE8 0x5270 # +0x8FE9 0x57CE # +0x8FEA 0x5834 # +0x8FEB 0x58CC # +0x8FEC 0x5B22 # +0x8FED 0x5E38 # +0x8FEE 0x60C5 # +0x8FEF 0x64FE # +0x8FF0 0x6761 # +0x8FF1 0x6756 # +0x8FF2 0x6D44 # +0x8FF3 0x72B6 # +0x8FF4 0x7573 # +0x8FF5 0x7A63 # +0x8FF6 0x84B8 # +0x8FF7 0x8B72 # +0x8FF8 0x91B8 # +0x8FF9 0x9320 # +0x8FFA 0x5631 # +0x8FFB 0x57F4 # +0x8FFC 0x98FE # +0x9040 0x62ED # +0x9041 0x690D # +0x9042 0x6B96 # +0x9043 0x71ED # +0x9044 0x7E54 # +0x9045 0x8077 # +0x9046 0x8272 # +0x9047 0x89E6 # +0x9048 0x98DF # +0x9049 0x8755 # +0x904A 0x8FB1 # +0x904B 0x5C3B # +0x904C 0x4F38 # +0x904D 0x4FE1 # +0x904E 0x4FB5 # +0x904F 0x5507 # +0x9050 0x5A20 # +0x9051 0x5BDD # +0x9052 0x5BE9 # +0x9053 0x5FC3 # +0x9054 0x614E # +0x9055 0x632F # +0x9056 0x65B0 # +0x9057 0x664B # +0x9058 0x68EE # +0x9059 0x699B # +0x905A 0x6D78 # +0x905B 0x6DF1 # +0x905C 0x7533 # +0x905D 0x75B9 # +0x905E 0x771F # +0x905F 0x795E # +0x9060 0x79E6 # +0x9061 0x7D33 # +0x9062 0x81E3 # +0x9063 0x82AF # +0x9064 0x85AA # +0x9065 0x89AA # +0x9066 0x8A3A # +0x9067 0x8EAB # +0x9068 0x8F9B # +0x9069 0x9032 # +0x906A 0x91DD # +0x906B 0x9707 # +0x906C 0x4EBA # +0x906D 0x4EC1 # +0x906E 0x5203 # +0x906F 0x5875 # +0x9070 0x58EC # +0x9071 0x5C0B # +0x9072 0x751A # +0x9073 0x5C3D # +0x9074 0x814E # +0x9075 0x8A0A # +0x9076 0x8FC5 # +0x9077 0x9663 # +0x9078 0x976D # +0x9079 0x7B25 # +0x907A 0x8ACF # +0x907B 0x9808 # +0x907C 0x9162 # +0x907D 0x56F3 # +0x907E 0x53A8 # +0x9080 0x9017 # +0x9081 0x5439 # +0x9082 0x5782 # +0x9083 0x5E25 # +0x9084 0x63A8 # +0x9085 0x6C34 # +0x9086 0x708A # +0x9087 0x7761 # +0x9088 0x7C8B # +0x9089 0x7FE0 # +0x908A 0x8870 # +0x908B 0x9042 # +0x908C 0x9154 # +0x908D 0x9310 # +0x908E 0x9318 # +0x908F 0x968F # +0x9090 0x745E # +0x9091 0x9AC4 # +0x9092 0x5D07 # +0x9093 0x5D69 # +0x9094 0x6570 # +0x9095 0x67A2 # +0x9096 0x8DA8 # +0x9097 0x96DB # +0x9098 0x636E # +0x9099 0x6749 # +0x909A 0x6919 # +0x909B 0x83C5 # +0x909C 0x9817 # +0x909D 0x96C0 # +0x909E 0x88FE # +0x909F 0x6F84 # +0x90A0 0x647A # +0x90A1 0x5BF8 # +0x90A2 0x4E16 # +0x90A3 0x702C # +0x90A4 0x755D # +0x90A5 0x662F # +0x90A6 0x51C4 # +0x90A7 0x5236 # +0x90A8 0x52E2 # +0x90A9 0x59D3 # +0x90AA 0x5F81 # +0x90AB 0x6027 # +0x90AC 0x6210 # +0x90AD 0x653F # +0x90AE 0x6574 # +0x90AF 0x661F # +0x90B0 0x6674 # +0x90B1 0x68F2 # +0x90B2 0x6816 # +0x90B3 0x6B63 # +0x90B4 0x6E05 # +0x90B5 0x7272 # +0x90B6 0x751F # +0x90B7 0x76DB # +0x90B8 0x7CBE # +0x90B9 0x8056 # +0x90BA 0x58F0 # +0x90BB 0x88FD # +0x90BC 0x897F # +0x90BD 0x8AA0 # +0x90BE 0x8A93 # +0x90BF 0x8ACB # +0x90C0 0x901D # +0x90C1 0x9192 # +0x90C2 0x9752 # +0x90C3 0x9759 # +0x90C4 0x6589 # +0x90C5 0x7A0E # +0x90C6 0x8106 # +0x90C7 0x96BB # +0x90C8 0x5E2D # +0x90C9 0x60DC # +0x90CA 0x621A # +0x90CB 0x65A5 # +0x90CC 0x6614 # +0x90CD 0x6790 # +0x90CE 0x77F3 # +0x90CF 0x7A4D # +0x90D0 0x7C4D # +0x90D1 0x7E3E # +0x90D2 0x810A # +0x90D3 0x8CAC # +0x90D4 0x8D64 # +0x90D5 0x8DE1 # +0x90D6 0x8E5F # +0x90D7 0x78A9 # +0x90D8 0x5207 # +0x90D9 0x62D9 # +0x90DA 0x63A5 # +0x90DB 0x6442 # +0x90DC 0x6298 # +0x90DD 0x8A2D # +0x90DE 0x7A83 # +0x90DF 0x7BC0 # +0x90E0 0x8AAC # +0x90E1 0x96EA # +0x90E2 0x7D76 # +0x90E3 0x820C # +0x90E4 0x8749 # +0x90E5 0x4ED9 # +0x90E6 0x5148 # +0x90E7 0x5343 # +0x90E8 0x5360 # +0x90E9 0x5BA3 # +0x90EA 0x5C02 # +0x90EB 0x5C16 # +0x90EC 0x5DDD # +0x90ED 0x6226 # +0x90EE 0x6247 # +0x90EF 0x64B0 # +0x90F0 0x6813 # +0x90F1 0x6834 # +0x90F2 0x6CC9 # +0x90F3 0x6D45 # +0x90F4 0x6D17 # +0x90F5 0x67D3 # +0x90F6 0x6F5C # +0x90F7 0x714E # +0x90F8 0x717D # +0x90F9 0x65CB # +0x90FA 0x7A7F # +0x90FB 0x7BAD # +0x90FC 0x7DDA # +0x9140 0x7E4A # +0x9141 0x7FA8 # +0x9142 0x817A # +0x9143 0x821B # +0x9144 0x8239 # +0x9145 0x85A6 # +0x9146 0x8A6E # +0x9147 0x8CCE # +0x9148 0x8DF5 # +0x9149 0x9078 # +0x914A 0x9077 # +0x914B 0x92AD # +0x914C 0x9291 # +0x914D 0x9583 # +0x914E 0x9BAE # +0x914F 0x524D # +0x9150 0x5584 # +0x9151 0x6F38 # +0x9152 0x7136 # +0x9153 0x5168 # +0x9154 0x7985 # +0x9155 0x7E55 # +0x9156 0x81B3 # +0x9157 0x7CCE # +0x9158 0x564C # +0x9159 0x5851 # +0x915A 0x5CA8 # +0x915B 0x63AA # +0x915C 0x66FE # +0x915D 0x66FD # +0x915E 0x695A # +0x915F 0x72D9 # +0x9160 0x758F # +0x9161 0x758E # +0x9162 0x790E # +0x9163 0x7956 # +0x9164 0x79DF # +0x9165 0x7C97 # +0x9166 0x7D20 # +0x9167 0x7D44 # +0x9168 0x8607 # +0x9169 0x8A34 # +0x916A 0x963B # +0x916B 0x9061 # +0x916C 0x9F20 # +0x916D 0x50E7 # +0x916E 0x5275 # +0x916F 0x53CC # +0x9170 0x53E2 # +0x9171 0x5009 # +0x9172 0x55AA # +0x9173 0x58EE # +0x9174 0x594F # +0x9175 0x723D # +0x9176 0x5B8B # +0x9177 0x5C64 # +0x9178 0x531D # +0x9179 0x60E3 # +0x917A 0x60F3 # +0x917B 0x635C # +0x917C 0x6383 # +0x917D 0x633F # +0x917E 0x63BB # +0x9180 0x64CD # +0x9181 0x65E9 # +0x9182 0x66F9 # +0x9183 0x5DE3 # +0x9184 0x69CD # +0x9185 0x69FD # +0x9186 0x6F15 # +0x9187 0x71E5 # +0x9188 0x4E89 # +0x9189 0x75E9 # +0x918A 0x76F8 # +0x918B 0x7A93 # +0x918C 0x7CDF # +0x918D 0x7DCF # +0x918E 0x7D9C # +0x918F 0x8061 # +0x9190 0x8349 # +0x9191 0x8358 # +0x9192 0x846C # +0x9193 0x84BC # +0x9194 0x85FB # +0x9195 0x88C5 # +0x9196 0x8D70 # +0x9197 0x9001 # +0x9198 0x906D # +0x9199 0x9397 # +0x919A 0x971C # +0x919B 0x9A12 # +0x919C 0x50CF # +0x919D 0x5897 # +0x919E 0x618E # +0x919F 0x81D3 # +0x91A0 0x8535 # +0x91A1 0x8D08 # +0x91A2 0x9020 # +0x91A3 0x4FC3 # +0x91A4 0x5074 # +0x91A5 0x5247 # +0x91A6 0x5373 # +0x91A7 0x606F # +0x91A8 0x6349 # +0x91A9 0x675F # +0x91AA 0x6E2C # +0x91AB 0x8DB3 # +0x91AC 0x901F # +0x91AD 0x4FD7 # +0x91AE 0x5C5E # +0x91AF 0x8CCA # +0x91B0 0x65CF # +0x91B1 0x7D9A # +0x91B2 0x5352 # +0x91B3 0x8896 # +0x91B4 0x5176 # +0x91B5 0x63C3 # +0x91B6 0x5B58 # +0x91B7 0x5B6B # +0x91B8 0x5C0A # +0x91B9 0x640D # +0x91BA 0x6751 # +0x91BB 0x905C # +0x91BC 0x4ED6 # +0x91BD 0x591A # +0x91BE 0x592A # +0x91BF 0x6C70 # +0x91C0 0x8A51 # +0x91C1 0x553E # +0x91C2 0x5815 # +0x91C3 0x59A5 # +0x91C4 0x60F0 # +0x91C5 0x6253 # +0x91C6 0x67C1 # +0x91C7 0x8235 # +0x91C8 0x6955 # +0x91C9 0x9640 # +0x91CA 0x99C4 # +0x91CB 0x9A28 # +0x91CC 0x4F53 # +0x91CD 0x5806 # +0x91CE 0x5BFE # +0x91CF 0x8010 # +0x91D0 0x5CB1 # +0x91D1 0x5E2F # +0x91D2 0x5F85 # +0x91D3 0x6020 # +0x91D4 0x614B # +0x91D5 0x6234 # +0x91D6 0x66FF # +0x91D7 0x6CF0 # +0x91D8 0x6EDE # +0x91D9 0x80CE # +0x91DA 0x817F # +0x91DB 0x82D4 # +0x91DC 0x888B # +0x91DD 0x8CB8 # +0x91DE 0x9000 # +0x91DF 0x902E # +0x91E0 0x968A # +0x91E1 0x9EDB # +0x91E2 0x9BDB # +0x91E3 0x4EE3 # +0x91E4 0x53F0 # +0x91E5 0x5927 # +0x91E6 0x7B2C # +0x91E7 0x918D # +0x91E8 0x984C # +0x91E9 0x9DF9 # +0x91EA 0x6EDD # +0x91EB 0x7027 # +0x91EC 0x5353 # +0x91ED 0x5544 # +0x91EE 0x5B85 # +0x91EF 0x6258 # +0x91F0 0x629E # +0x91F1 0x62D3 # +0x91F2 0x6CA2 # +0x91F3 0x6FEF # +0x91F4 0x7422 # +0x91F5 0x8A17 # +0x91F6 0x9438 # +0x91F7 0x6FC1 # +0x91F8 0x8AFE # +0x91F9 0x8338 # +0x91FA 0x51E7 # +0x91FB 0x86F8 # +0x91FC 0x53EA # +0x9240 0x53E9 # +0x9241 0x4F46 # +0x9242 0x9054 # +0x9243 0x8FB0 # +0x9244 0x596A # +0x9245 0x8131 # +0x9246 0x5DFD # +0x9247 0x7AEA # +0x9248 0x8FBF # +0x9249 0x68DA # +0x924A 0x8C37 # +0x924B 0x72F8 # +0x924C 0x9C48 # +0x924D 0x6A3D # +0x924E 0x8AB0 # +0x924F 0x4E39 # +0x9250 0x5358 # +0x9251 0x5606 # +0x9252 0x5766 # +0x9253 0x62C5 # +0x9254 0x63A2 # +0x9255 0x65E6 # +0x9256 0x6B4E # +0x9257 0x6DE1 # +0x9258 0x6E5B # +0x9259 0x70AD # +0x925A 0x77ED # +0x925B 0x7AEF # +0x925C 0x7BAA # +0x925D 0x7DBB # +0x925E 0x803D # +0x925F 0x80C6 # +0x9260 0x86CB # +0x9261 0x8A95 # +0x9262 0x935B # +0x9263 0x56E3 # +0x9264 0x58C7 # +0x9265 0x5F3E # +0x9266 0x65AD # +0x9267 0x6696 # +0x9268 0x6A80 # +0x9269 0x6BB5 # +0x926A 0x7537 # +0x926B 0x8AC7 # +0x926C 0x5024 # +0x926D 0x77E5 # +0x926E 0x5730 # +0x926F 0x5F1B # +0x9270 0x6065 # +0x9271 0x667A # +0x9272 0x6C60 # +0x9273 0x75F4 # +0x9274 0x7A1A # +0x9275 0x7F6E # +0x9276 0x81F4 # +0x9277 0x8718 # +0x9278 0x9045 # +0x9279 0x99B3 # +0x927A 0x7BC9 # +0x927B 0x755C # +0x927C 0x7AF9 # +0x927D 0x7B51 # +0x927E 0x84C4 # +0x9280 0x9010 # +0x9281 0x79E9 # +0x9282 0x7A92 # +0x9283 0x8336 # +0x9284 0x5AE1 # +0x9285 0x7740 # +0x9286 0x4E2D # +0x9287 0x4EF2 # +0x9288 0x5B99 # +0x9289 0x5FE0 # +0x928A 0x62BD # +0x928B 0x663C # +0x928C 0x67F1 # +0x928D 0x6CE8 # +0x928E 0x866B # +0x928F 0x8877 # +0x9290 0x8A3B # +0x9291 0x914E # +0x9292 0x92F3 # +0x9293 0x99D0 # +0x9294 0x6A17 # +0x9295 0x7026 # +0x9296 0x732A # +0x9297 0x82E7 # +0x9298 0x8457 # +0x9299 0x8CAF # +0x929A 0x4E01 # +0x929B 0x5146 # +0x929C 0x51CB # +0x929D 0x558B # +0x929E 0x5BF5 # +0x929F 0x5E16 # +0x92A0 0x5E33 # +0x92A1 0x5E81 # +0x92A2 0x5F14 # +0x92A3 0x5F35 # +0x92A4 0x5F6B # +0x92A5 0x5FB4 # +0x92A6 0x61F2 # +0x92A7 0x6311 # +0x92A8 0x66A2 # +0x92A9 0x671D # +0x92AA 0x6F6E # +0x92AB 0x7252 # +0x92AC 0x753A # +0x92AD 0x773A # +0x92AE 0x8074 # +0x92AF 0x8139 # +0x92B0 0x8178 # +0x92B1 0x8776 # +0x92B2 0x8ABF # +0x92B3 0x8ADC # +0x92B4 0x8D85 # +0x92B5 0x8DF3 # +0x92B6 0x929A # +0x92B7 0x9577 # +0x92B8 0x9802 # +0x92B9 0x9CE5 # +0x92BA 0x52C5 # +0x92BB 0x6357 # +0x92BC 0x76F4 # +0x92BD 0x6715 # +0x92BE 0x6C88 # +0x92BF 0x73CD # +0x92C0 0x8CC3 # +0x92C1 0x93AE # +0x92C2 0x9673 # +0x92C3 0x6D25 # +0x92C4 0x589C # +0x92C5 0x690E # +0x92C6 0x69CC # +0x92C7 0x8FFD # +0x92C8 0x939A # +0x92C9 0x75DB # +0x92CA 0x901A # +0x92CB 0x585A # +0x92CC 0x6802 # +0x92CD 0x63B4 # +0x92CE 0x69FB # +0x92CF 0x4F43 # +0x92D0 0x6F2C # +0x92D1 0x67D8 # +0x92D2 0x8FBB # +0x92D3 0x8526 # +0x92D4 0x7DB4 # +0x92D5 0x9354 # +0x92D6 0x693F # +0x92D7 0x6F70 # +0x92D8 0x576A # +0x92D9 0x58F7 # +0x92DA 0x5B2C # +0x92DB 0x7D2C # +0x92DC 0x722A # +0x92DD 0x540A # +0x92DE 0x91E3 # +0x92DF 0x9DB4 # +0x92E0 0x4EAD # +0x92E1 0x4F4E # +0x92E2 0x505C # +0x92E3 0x5075 # +0x92E4 0x5243 # +0x92E5 0x8C9E # +0x92E6 0x5448 # +0x92E7 0x5824 # +0x92E8 0x5B9A # +0x92E9 0x5E1D # +0x92EA 0x5E95 # +0x92EB 0x5EAD # +0x92EC 0x5EF7 # +0x92ED 0x5F1F # +0x92EE 0x608C # +0x92EF 0x62B5 # +0x92F0 0x633A # +0x92F1 0x63D0 # +0x92F2 0x68AF # +0x92F3 0x6C40 # +0x92F4 0x7887 # +0x92F5 0x798E # +0x92F6 0x7A0B # +0x92F7 0x7DE0 # +0x92F8 0x8247 # +0x92F9 0x8A02 # +0x92FA 0x8AE6 # +0x92FB 0x8E44 # +0x92FC 0x9013 # +0x9340 0x90B8 # +0x9341 0x912D # +0x9342 0x91D8 # +0x9343 0x9F0E # +0x9344 0x6CE5 # +0x9345 0x6458 # +0x9346 0x64E2 # +0x9347 0x6575 # +0x9348 0x6EF4 # +0x9349 0x7684 # +0x934A 0x7B1B # +0x934B 0x9069 # +0x934C 0x93D1 # +0x934D 0x6EBA # +0x934E 0x54F2 # +0x934F 0x5FB9 # +0x9350 0x64A4 # +0x9351 0x8F4D # +0x9352 0x8FED # +0x9353 0x9244 # +0x9354 0x5178 # +0x9355 0x586B # +0x9356 0x5929 # +0x9357 0x5C55 # +0x9358 0x5E97 # +0x9359 0x6DFB # +0x935A 0x7E8F # +0x935B 0x751C # +0x935C 0x8CBC # +0x935D 0x8EE2 # +0x935E 0x985B # +0x935F 0x70B9 # +0x9360 0x4F1D # +0x9361 0x6BBF # +0x9362 0x6FB1 # +0x9363 0x7530 # +0x9364 0x96FB # +0x9365 0x514E # +0x9366 0x5410 # +0x9367 0x5835 # +0x9368 0x5857 # +0x9369 0x59AC # +0x936A 0x5C60 # +0x936B 0x5F92 # +0x936C 0x6597 # +0x936D 0x675C # +0x936E 0x6E21 # +0x936F 0x767B # +0x9370 0x83DF # +0x9371 0x8CED # +0x9372 0x9014 # +0x9373 0x90FD # +0x9374 0x934D # +0x9375 0x7825 # +0x9376 0x783A # +0x9377 0x52AA # +0x9378 0x5EA6 # +0x9379 0x571F # +0x937A 0x5974 # +0x937B 0x6012 # +0x937C 0x5012 # +0x937D 0x515A # +0x937E 0x51AC # +0x9380 0x51CD # +0x9381 0x5200 # +0x9382 0x5510 # +0x9383 0x5854 # +0x9384 0x5858 # +0x9385 0x5957 # +0x9386 0x5B95 # +0x9387 0x5CF6 # +0x9388 0x5D8B # +0x9389 0x60BC # +0x938A 0x6295 # +0x938B 0x642D # +0x938C 0x6771 # +0x938D 0x6843 # +0x938E 0x68BC # +0x938F 0x68DF # +0x9390 0x76D7 # +0x9391 0x6DD8 # +0x9392 0x6E6F # +0x9393 0x6D9B # +0x9394 0x706F # +0x9395 0x71C8 # +0x9396 0x5F53 # +0x9397 0x75D8 # +0x9398 0x7977 # +0x9399 0x7B49 # +0x939A 0x7B54 # +0x939B 0x7B52 # +0x939C 0x7CD6 # +0x939D 0x7D71 # +0x939E 0x5230 # +0x939F 0x8463 # +0x93A0 0x8569 # +0x93A1 0x85E4 # +0x93A2 0x8A0E # +0x93A3 0x8B04 # +0x93A4 0x8C46 # +0x93A5 0x8E0F # +0x93A6 0x9003 # +0x93A7 0x900F # +0x93A8 0x9419 # +0x93A9 0x9676 # +0x93AA 0x982D # +0x93AB 0x9A30 # +0x93AC 0x95D8 # +0x93AD 0x50CD # +0x93AE 0x52D5 # +0x93AF 0x540C # +0x93B0 0x5802 # +0x93B1 0x5C0E # +0x93B2 0x61A7 # +0x93B3 0x649E # +0x93B4 0x6D1E # +0x93B5 0x77B3 # +0x93B6 0x7AE5 # +0x93B7 0x80F4 # +0x93B8 0x8404 # +0x93B9 0x9053 # +0x93BA 0x9285 # +0x93BB 0x5CE0 # +0x93BC 0x9D07 # +0x93BD 0x533F # +0x93BE 0x5F97 # +0x93BF 0x5FB3 # +0x93C0 0x6D9C # +0x93C1 0x7279 # +0x93C2 0x7763 # +0x93C3 0x79BF # +0x93C4 0x7BE4 # +0x93C5 0x6BD2 # +0x93C6 0x72EC # +0x93C7 0x8AAD # +0x93C8 0x6803 # +0x93C9 0x6A61 # +0x93CA 0x51F8 # +0x93CB 0x7A81 # +0x93CC 0x6934 # +0x93CD 0x5C4A # +0x93CE 0x9CF6 # +0x93CF 0x82EB # +0x93D0 0x5BC5 # +0x93D1 0x9149 # +0x93D2 0x701E # +0x93D3 0x5678 # +0x93D4 0x5C6F # +0x93D5 0x60C7 # +0x93D6 0x6566 # +0x93D7 0x6C8C # +0x93D8 0x8C5A # +0x93D9 0x9041 # +0x93DA 0x9813 # +0x93DB 0x5451 # +0x93DC 0x66C7 # +0x93DD 0x920D # +0x93DE 0x5948 # +0x93DF 0x90A3 # +0x93E0 0x5185 # +0x93E1 0x4E4D # +0x93E2 0x51EA # +0x93E3 0x8599 # +0x93E4 0x8B0E # +0x93E5 0x7058 # +0x93E6 0x637A # +0x93E7 0x934B # +0x93E8 0x6962 # +0x93E9 0x99B4 # +0x93EA 0x7E04 # +0x93EB 0x7577 # +0x93EC 0x5357 # +0x93ED 0x6960 # +0x93EE 0x8EDF # +0x93EF 0x96E3 # +0x93F0 0x6C5D # +0x93F1 0x4E8C # +0x93F2 0x5C3C # +0x93F3 0x5F10 # +0x93F4 0x8FE9 # +0x93F5 0x5302 # +0x93F6 0x8CD1 # +0x93F7 0x8089 # +0x93F8 0x8679 # +0x93F9 0x5EFF # +0x93FA 0x65E5 # +0x93FB 0x4E73 # +0x93FC 0x5165 # +0x9440 0x5982 # +0x9441 0x5C3F # +0x9442 0x97EE # +0x9443 0x4EFB # +0x9444 0x598A # +0x9445 0x5FCD # +0x9446 0x8A8D # +0x9447 0x6FE1 # +0x9448 0x79B0 # +0x9449 0x7962 # +0x944A 0x5BE7 # +0x944B 0x8471 # +0x944C 0x732B # +0x944D 0x71B1 # +0x944E 0x5E74 # +0x944F 0x5FF5 # +0x9450 0x637B # +0x9451 0x649A # +0x9452 0x71C3 # +0x9453 0x7C98 # +0x9454 0x4E43 # +0x9455 0x5EFC # +0x9456 0x4E4B # +0x9457 0x57DC # +0x9458 0x56A2 # +0x9459 0x60A9 # +0x945A 0x6FC3 # +0x945B 0x7D0D # +0x945C 0x80FD # +0x945D 0x8133 # +0x945E 0x81BF # +0x945F 0x8FB2 # +0x9460 0x8997 # +0x9461 0x86A4 # +0x9462 0x5DF4 # +0x9463 0x628A # +0x9464 0x64AD # +0x9465 0x8987 # +0x9466 0x6777 # +0x9467 0x6CE2 # +0x9468 0x6D3E # +0x9469 0x7436 # +0x946A 0x7834 # +0x946B 0x5A46 # +0x946C 0x7F75 # +0x946D 0x82AD # +0x946E 0x99AC # +0x946F 0x4FF3 # +0x9470 0x5EC3 # +0x9471 0x62DD # +0x9472 0x6392 # +0x9473 0x6557 # +0x9474 0x676F # +0x9475 0x76C3 # +0x9476 0x724C # +0x9477 0x80CC # +0x9478 0x80BA # +0x9479 0x8F29 # +0x947A 0x914D # +0x947B 0x500D # +0x947C 0x57F9 # +0x947D 0x5A92 # +0x947E 0x6885 # +0x9480 0x6973 # +0x9481 0x7164 # +0x9482 0x72FD # +0x9483 0x8CB7 # +0x9484 0x58F2 # +0x9485 0x8CE0 # +0x9486 0x966A # +0x9487 0x9019 # +0x9488 0x877F # +0x9489 0x79E4 # +0x948A 0x77E7 # +0x948B 0x8429 # +0x948C 0x4F2F # +0x948D 0x5265 # +0x948E 0x535A # +0x948F 0x62CD # +0x9490 0x67CF # +0x9491 0x6CCA # +0x9492 0x767D # +0x9493 0x7B94 # +0x9494 0x7C95 # +0x9495 0x8236 # +0x9496 0x8584 # +0x9497 0x8FEB # +0x9498 0x66DD # +0x9499 0x6F20 # +0x949A 0x7206 # +0x949B 0x7E1B # +0x949C 0x83AB # +0x949D 0x99C1 # +0x949E 0x9EA6 # +0x949F 0x51FD # +0x94A0 0x7BB1 # +0x94A1 0x7872 # +0x94A2 0x7BB8 # +0x94A3 0x8087 # +0x94A4 0x7B48 # +0x94A5 0x6AE8 # +0x94A6 0x5E61 # +0x94A7 0x808C # +0x94A8 0x7551 # +0x94A9 0x7560 # +0x94AA 0x516B # +0x94AB 0x9262 # +0x94AC 0x6E8C # +0x94AD 0x767A # +0x94AE 0x9197 # +0x94AF 0x9AEA # +0x94B0 0x4F10 # +0x94B1 0x7F70 # +0x94B2 0x629C # +0x94B3 0x7B4F # +0x94B4 0x95A5 # +0x94B5 0x9CE9 # +0x94B6 0x567A # +0x94B7 0x5859 # +0x94B8 0x86E4 # +0x94B9 0x96BC # +0x94BA 0x4F34 # +0x94BB 0x5224 # +0x94BC 0x534A # +0x94BD 0x53CD # +0x94BE 0x53DB # +0x94BF 0x5E06 # +0x94C0 0x642C # +0x94C1 0x6591 # +0x94C2 0x677F # +0x94C3 0x6C3E # +0x94C4 0x6C4E # +0x94C5 0x7248 # +0x94C6 0x72AF # +0x94C7 0x73ED # +0x94C8 0x7554 # +0x94C9 0x7E41 # +0x94CA 0x822C # +0x94CB 0x85E9 # +0x94CC 0x8CA9 # +0x94CD 0x7BC4 # +0x94CE 0x91C6 # +0x94CF 0x7169 # +0x94D0 0x9812 # +0x94D1 0x98EF # +0x94D2 0x633D # +0x94D3 0x6669 # +0x94D4 0x756A # +0x94D5 0x76E4 # +0x94D6 0x78D0 # +0x94D7 0x8543 # +0x94D8 0x86EE # +0x94D9 0x532A # +0x94DA 0x5351 # +0x94DB 0x5426 # +0x94DC 0x5983 # +0x94DD 0x5E87 # +0x94DE 0x5F7C # +0x94DF 0x60B2 # +0x94E0 0x6249 # +0x94E1 0x6279 # +0x94E2 0x62AB # +0x94E3 0x6590 # +0x94E4 0x6BD4 # +0x94E5 0x6CCC # +0x94E6 0x75B2 # +0x94E7 0x76AE # +0x94E8 0x7891 # +0x94E9 0x79D8 # +0x94EA 0x7DCB # +0x94EB 0x7F77 # +0x94EC 0x80A5 # +0x94ED 0x88AB # +0x94EE 0x8AB9 # +0x94EF 0x8CBB # +0x94F0 0x907F # +0x94F1 0x975E # +0x94F2 0x98DB # +0x94F3 0x6A0B # +0x94F4 0x7C38 # +0x94F5 0x5099 # +0x94F6 0x5C3E # +0x94F7 0x5FAE # +0x94F8 0x6787 # +0x94F9 0x6BD8 # +0x94FA 0x7435 # +0x94FB 0x7709 # +0x94FC 0x7F8E # +0x9540 0x9F3B # +0x9541 0x67CA # +0x9542 0x7A17 # +0x9543 0x5339 # +0x9544 0x758B # +0x9545 0x9AED # +0x9546 0x5F66 # +0x9547 0x819D # +0x9548 0x83F1 # +0x9549 0x8098 # +0x954A 0x5F3C # +0x954B 0x5FC5 # +0x954C 0x7562 # +0x954D 0x7B46 # +0x954E 0x903C # +0x954F 0x6867 # +0x9550 0x59EB # +0x9551 0x5A9B # +0x9552 0x7D10 # +0x9553 0x767E # +0x9554 0x8B2C # +0x9555 0x4FF5 # +0x9556 0x5F6A # +0x9557 0x6A19 # +0x9558 0x6C37 # +0x9559 0x6F02 # +0x955A 0x74E2 # +0x955B 0x7968 # +0x955C 0x8868 # +0x955D 0x8A55 # +0x955E 0x8C79 # +0x955F 0x5EDF # +0x9560 0x63CF # +0x9561 0x75C5 # +0x9562 0x79D2 # +0x9563 0x82D7 # +0x9564 0x9328 # +0x9565 0x92F2 # +0x9566 0x849C # +0x9567 0x86ED # +0x9568 0x9C2D # +0x9569 0x54C1 # +0x956A 0x5F6C # +0x956B 0x658C # +0x956C 0x6D5C # +0x956D 0x7015 # +0x956E 0x8CA7 # +0x956F 0x8CD3 # +0x9570 0x983B # +0x9571 0x654F # +0x9572 0x74F6 # +0x9573 0x4E0D # +0x9574 0x4ED8 # +0x9575 0x57E0 # +0x9576 0x592B # +0x9577 0x5A66 # +0x9578 0x5BCC # +0x9579 0x51A8 # +0x957A 0x5E03 # +0x957B 0x5E9C # +0x957C 0x6016 # +0x957D 0x6276 # +0x957E 0x6577 # +0x9580 0x65A7 # +0x9581 0x666E # +0x9582 0x6D6E # +0x9583 0x7236 # +0x9584 0x7B26 # +0x9585 0x8150 # +0x9586 0x819A # +0x9587 0x8299 # +0x9588 0x8B5C # +0x9589 0x8CA0 # +0x958A 0x8CE6 # +0x958B 0x8D74 # +0x958C 0x961C # +0x958D 0x9644 # +0x958E 0x4FAE # +0x958F 0x64AB # +0x9590 0x6B66 # +0x9591 0x821E # +0x9592 0x8461 # +0x9593 0x856A # +0x9594 0x90E8 # +0x9595 0x5C01 # +0x9596 0x6953 # +0x9597 0x98A8 # +0x9598 0x847A # +0x9599 0x8557 # +0x959A 0x4F0F # +0x959B 0x526F # +0x959C 0x5FA9 # +0x959D 0x5E45 # +0x959E 0x670D # +0x959F 0x798F # +0x95A0 0x8179 # +0x95A1 0x8907 # +0x95A2 0x8986 # +0x95A3 0x6DF5 # +0x95A4 0x5F17 # +0x95A5 0x6255 # +0x95A6 0x6CB8 # +0x95A7 0x4ECF # +0x95A8 0x7269 # +0x95A9 0x9B92 # +0x95AA 0x5206 # +0x95AB 0x543B # +0x95AC 0x5674 # +0x95AD 0x58B3 # +0x95AE 0x61A4 # +0x95AF 0x626E # +0x95B0 0x711A # +0x95B1 0x596E # +0x95B2 0x7C89 # +0x95B3 0x7CDE # +0x95B4 0x7D1B # +0x95B5 0x96F0 # +0x95B6 0x6587 # +0x95B7 0x805E # +0x95B8 0x4E19 # +0x95B9 0x4F75 # +0x95BA 0x5175 # +0x95BB 0x5840 # +0x95BC 0x5E63 # +0x95BD 0x5E73 # +0x95BE 0x5F0A # +0x95BF 0x67C4 # +0x95C0 0x4E26 # +0x95C1 0x853D # +0x95C2 0x9589 # +0x95C3 0x965B # +0x95C4 0x7C73 # +0x95C5 0x9801 # +0x95C6 0x50FB # +0x95C7 0x58C1 # +0x95C8 0x7656 # +0x95C9 0x78A7 # +0x95CA 0x5225 # +0x95CB 0x77A5 # +0x95CC 0x8511 # +0x95CD 0x7B86 # +0x95CE 0x504F # +0x95CF 0x5909 # +0x95D0 0x7247 # +0x95D1 0x7BC7 # +0x95D2 0x7DE8 # +0x95D3 0x8FBA # +0x95D4 0x8FD4 # +0x95D5 0x904D # +0x95D6 0x4FBF # +0x95D7 0x52C9 # +0x95D8 0x5A29 # +0x95D9 0x5F01 # +0x95DA 0x97AD # +0x95DB 0x4FDD # +0x95DC 0x8217 # +0x95DD 0x92EA # +0x95DE 0x5703 # +0x95DF 0x6355 # +0x95E0 0x6B69 # +0x95E1 0x752B # +0x95E2 0x88DC # +0x95E3 0x8F14 # +0x95E4 0x7A42 # +0x95E5 0x52DF # +0x95E6 0x5893 # +0x95E7 0x6155 # +0x95E8 0x620A # +0x95E9 0x66AE # +0x95EA 0x6BCD # +0x95EB 0x7C3F # +0x95EC 0x83E9 # +0x95ED 0x5023 # +0x95EE 0x4FF8 # +0x95EF 0x5305 # +0x95F0 0x5446 # +0x95F1 0x5831 # +0x95F2 0x5949 # +0x95F3 0x5B9D # +0x95F4 0x5CF0 # +0x95F5 0x5CEF # +0x95F6 0x5D29 # +0x95F7 0x5E96 # +0x95F8 0x62B1 # +0x95F9 0x6367 # +0x95FA 0x653E # +0x95FB 0x65B9 # +0x95FC 0x670B # +0x9640 0x6CD5 # +0x9641 0x6CE1 # +0x9642 0x70F9 # +0x9643 0x7832 # +0x9644 0x7E2B # +0x9645 0x80DE # +0x9646 0x82B3 # +0x9647 0x840C # +0x9648 0x84EC # +0x9649 0x8702 # +0x964A 0x8912 # +0x964B 0x8A2A # +0x964C 0x8C4A # +0x964D 0x90A6 # +0x964E 0x92D2 # +0x964F 0x98FD # +0x9650 0x9CF3 # +0x9651 0x9D6C # +0x9652 0x4E4F # +0x9653 0x4EA1 # +0x9654 0x508D # +0x9655 0x5256 # +0x9656 0x574A # +0x9657 0x59A8 # +0x9658 0x5E3D # +0x9659 0x5FD8 # +0x965A 0x5FD9 # +0x965B 0x623F # +0x965C 0x66B4 # +0x965D 0x671B # +0x965E 0x67D0 # +0x965F 0x68D2 # +0x9660 0x5192 # +0x9661 0x7D21 # +0x9662 0x80AA # +0x9663 0x81A8 # +0x9664 0x8B00 # +0x9665 0x8C8C # +0x9666 0x8CBF # +0x9667 0x927E # +0x9668 0x9632 # +0x9669 0x5420 # +0x966A 0x982C # +0x966B 0x5317 # +0x966C 0x50D5 # +0x966D 0x535C # +0x966E 0x58A8 # +0x966F 0x64B2 # +0x9670 0x6734 # +0x9671 0x7267 # +0x9672 0x7766 # +0x9673 0x7A46 # +0x9674 0x91E6 # +0x9675 0x52C3 # +0x9676 0x6CA1 # +0x9677 0x6B86 # +0x9678 0x5800 # +0x9679 0x5E4C # +0x967A 0x5954 # +0x967B 0x672C # +0x967C 0x7FFB # +0x967D 0x51E1 # +0x967E 0x76C6 # +0x9680 0x6469 # +0x9681 0x78E8 # +0x9682 0x9B54 # +0x9683 0x9EBB # +0x9684 0x57CB # +0x9685 0x59B9 # +0x9686 0x6627 # +0x9687 0x679A # +0x9688 0x6BCE # +0x9689 0x54E9 # +0x968A 0x69D9 # +0x968B 0x5E55 # +0x968C 0x819C # +0x968D 0x6795 # +0x968E 0x9BAA # +0x968F 0x67FE # +0x9690 0x9C52 # +0x9691 0x685D # +0x9692 0x4EA6 # +0x9693 0x4FE3 # +0x9694 0x53C8 # +0x9695 0x62B9 # +0x9696 0x672B # +0x9697 0x6CAB # +0x9698 0x8FC4 # +0x9699 0x4FAD # +0x969A 0x7E6D # +0x969B 0x9EBF # +0x969C 0x4E07 # +0x969D 0x6162 # +0x969E 0x6E80 # +0x969F 0x6F2B # +0x96A0 0x8513 # +0x96A1 0x5473 # +0x96A2 0x672A # +0x96A3 0x9B45 # +0x96A4 0x5DF3 # +0x96A5 0x7B95 # +0x96A6 0x5CAC # +0x96A7 0x5BC6 # +0x96A8 0x871C # +0x96A9 0x6E4A # +0x96AA 0x84D1 # +0x96AB 0x7A14 # +0x96AC 0x8108 # +0x96AD 0x5999 # +0x96AE 0x7C8D # +0x96AF 0x6C11 # +0x96B0 0x7720 # +0x96B1 0x52D9 # +0x96B2 0x5922 # +0x96B3 0x7121 # +0x96B4 0x725F # +0x96B5 0x77DB # +0x96B6 0x9727 # +0x96B7 0x9D61 # +0x96B8 0x690B # +0x96B9 0x5A7F # +0x96BA 0x5A18 # +0x96BB 0x51A5 # +0x96BC 0x540D # +0x96BD 0x547D # +0x96BE 0x660E # +0x96BF 0x76DF # +0x96C0 0x8FF7 # +0x96C1 0x9298 # +0x96C2 0x9CF4 # +0x96C3 0x59EA # +0x96C4 0x725D # +0x96C5 0x6EC5 # +0x96C6 0x514D # +0x96C7 0x68C9 # +0x96C8 0x7DBF # +0x96C9 0x7DEC # +0x96CA 0x9762 # +0x96CB 0x9EBA # +0x96CC 0x6478 # +0x96CD 0x6A21 # +0x96CE 0x8302 # +0x96CF 0x5984 # +0x96D0 0x5B5F # +0x96D1 0x6BDB # +0x96D2 0x731B # +0x96D3 0x76F2 # +0x96D4 0x7DB2 # +0x96D5 0x8017 # +0x96D6 0x8499 # +0x96D7 0x5132 # +0x96D8 0x6728 # +0x96D9 0x9ED9 # +0x96DA 0x76EE # +0x96DB 0x6762 # +0x96DC 0x52FF # +0x96DD 0x9905 # +0x96DE 0x5C24 # +0x96DF 0x623B # +0x96E0 0x7C7E # +0x96E1 0x8CB0 # +0x96E2 0x554F # +0x96E3 0x60B6 # +0x96E4 0x7D0B # +0x96E5 0x9580 # +0x96E6 0x5301 # +0x96E7 0x4E5F # +0x96E8 0x51B6 # +0x96E9 0x591C # +0x96EA 0x723A # +0x96EB 0x8036 # +0x96EC 0x91CE # +0x96ED 0x5F25 # +0x96EE 0x77E2 # +0x96EF 0x5384 # +0x96F0 0x5F79 # +0x96F1 0x7D04 # +0x96F2 0x85AC # +0x96F3 0x8A33 # +0x96F4 0x8E8D # +0x96F5 0x9756 # +0x96F6 0x67F3 # +0x96F7 0x85AE # +0x96F8 0x9453 # +0x96F9 0x6109 # +0x96FA 0x6108 # +0x96FB 0x6CB9 # +0x96FC 0x7652 # +0x9740 0x8AED # +0x9741 0x8F38 # +0x9742 0x552F # +0x9743 0x4F51 # +0x9744 0x512A # +0x9745 0x52C7 # +0x9746 0x53CB # +0x9747 0x5BA5 # +0x9748 0x5E7D # +0x9749 0x60A0 # +0x974A 0x6182 # +0x974B 0x63D6 # +0x974C 0x6709 # +0x974D 0x67DA # +0x974E 0x6E67 # +0x974F 0x6D8C # +0x9750 0x7336 # +0x9751 0x7337 # +0x9752 0x7531 # +0x9753 0x7950 # +0x9754 0x88D5 # +0x9755 0x8A98 # +0x9756 0x904A # +0x9757 0x9091 # +0x9758 0x90F5 # +0x9759 0x96C4 # +0x975A 0x878D # +0x975B 0x5915 # +0x975C 0x4E88 # +0x975D 0x4F59 # +0x975E 0x4E0E # +0x975F 0x8A89 # +0x9760 0x8F3F # +0x9761 0x9810 # +0x9762 0x50AD # +0x9763 0x5E7C # +0x9764 0x5996 # +0x9765 0x5BB9 # +0x9766 0x5EB8 # +0x9767 0x63DA # +0x9768 0x63FA # +0x9769 0x64C1 # +0x976A 0x66DC # +0x976B 0x694A # +0x976C 0x69D8 # +0x976D 0x6D0B # +0x976E 0x6EB6 # +0x976F 0x7194 # +0x9770 0x7528 # +0x9771 0x7AAF # +0x9772 0x7F8A # +0x9773 0x8000 # +0x9774 0x8449 # +0x9775 0x84C9 # +0x9776 0x8981 # +0x9777 0x8B21 # +0x9778 0x8E0A # +0x9779 0x9065 # +0x977A 0x967D # +0x977B 0x990A # +0x977C 0x617E # +0x977D 0x6291 # +0x977E 0x6B32 # +0x9780 0x6C83 # +0x9781 0x6D74 # +0x9782 0x7FCC # +0x9783 0x7FFC # +0x9784 0x6DC0 # +0x9785 0x7F85 # +0x9786 0x87BA # +0x9787 0x88F8 # +0x9788 0x6765 # +0x9789 0x83B1 # +0x978A 0x983C # +0x978B 0x96F7 # +0x978C 0x6D1B # +0x978D 0x7D61 # +0x978E 0x843D # +0x978F 0x916A # +0x9790 0x4E71 # +0x9791 0x5375 # +0x9792 0x5D50 # +0x9793 0x6B04 # +0x9794 0x6FEB # +0x9795 0x85CD # +0x9796 0x862D # +0x9797 0x89A7 # +0x9798 0x5229 # +0x9799 0x540F # +0x979A 0x5C65 # +0x979B 0x674E # +0x979C 0x68A8 # +0x979D 0x7406 # +0x979E 0x7483 # +0x979F 0x75E2 # +0x97A0 0x88CF # +0x97A1 0x88E1 # +0x97A2 0x91CC # +0x97A3 0x96E2 # +0x97A4 0x9678 # +0x97A5 0x5F8B # +0x97A6 0x7387 # +0x97A7 0x7ACB # +0x97A8 0x844E # +0x97A9 0x63A0 # +0x97AA 0x7565 # +0x97AB 0x5289 # +0x97AC 0x6D41 # +0x97AD 0x6E9C # +0x97AE 0x7409 # +0x97AF 0x7559 # +0x97B0 0x786B # +0x97B1 0x7C92 # +0x97B2 0x9686 # +0x97B3 0x7ADC # +0x97B4 0x9F8D # +0x97B5 0x4FB6 # +0x97B6 0x616E # +0x97B7 0x65C5 # +0x97B8 0x865C # +0x97B9 0x4E86 # +0x97BA 0x4EAE # +0x97BB 0x50DA # +0x97BC 0x4E21 # +0x97BD 0x51CC # +0x97BE 0x5BEE # +0x97BF 0x6599 # +0x97C0 0x6881 # +0x97C1 0x6DBC # +0x97C2 0x731F # +0x97C3 0x7642 # +0x97C4 0x77AD # +0x97C5 0x7A1C # +0x97C6 0x7CE7 # +0x97C7 0x826F # +0x97C8 0x8AD2 # +0x97C9 0x907C # +0x97CA 0x91CF # +0x97CB 0x9675 # +0x97CC 0x9818 # +0x97CD 0x529B # +0x97CE 0x7DD1 # +0x97CF 0x502B # +0x97D0 0x5398 # +0x97D1 0x6797 # +0x97D2 0x6DCB # +0x97D3 0x71D0 # +0x97D4 0x7433 # +0x97D5 0x81E8 # +0x97D6 0x8F2A # +0x97D7 0x96A3 # +0x97D8 0x9C57 # +0x97D9 0x9E9F # +0x97DA 0x7460 # +0x97DB 0x5841 # +0x97DC 0x6D99 # +0x97DD 0x7D2F # +0x97DE 0x985E # +0x97DF 0x4EE4 # +0x97E0 0x4F36 # +0x97E1 0x4F8B # +0x97E2 0x51B7 # +0x97E3 0x52B1 # +0x97E4 0x5DBA # +0x97E5 0x601C # +0x97E6 0x73B2 # +0x97E7 0x793C # +0x97E8 0x82D3 # +0x97E9 0x9234 # +0x97EA 0x96B7 # +0x97EB 0x96F6 # +0x97EC 0x970A # +0x97ED 0x9E97 # +0x97EE 0x9F62 # +0x97EF 0x66A6 # +0x97F0 0x6B74 # +0x97F1 0x5217 # +0x97F2 0x52A3 # +0x97F3 0x70C8 # +0x97F4 0x88C2 # +0x97F5 0x5EC9 # +0x97F6 0x604B # +0x97F7 0x6190 # +0x97F8 0x6F23 # +0x97F9 0x7149 # +0x97FA 0x7C3E # +0x97FB 0x7DF4 # +0x97FC 0x806F # +0x9840 0x84EE # +0x9841 0x9023 # +0x9842 0x932C # +0x9843 0x5442 # +0x9844 0x9B6F # +0x9845 0x6AD3 # +0x9846 0x7089 # +0x9847 0x8CC2 # +0x9848 0x8DEF # +0x9849 0x9732 # +0x984A 0x52B4 # +0x984B 0x5A41 # +0x984C 0x5ECA # +0x984D 0x5F04 # +0x984E 0x6717 # +0x984F 0x697C # +0x9850 0x6994 # +0x9851 0x6D6A # +0x9852 0x6F0F # +0x9853 0x7262 # +0x9854 0x72FC # +0x9855 0x7BED # +0x9856 0x8001 # +0x9857 0x807E # +0x9858 0x874B # +0x9859 0x90CE # +0x985A 0x516D # +0x985B 0x9E93 # +0x985C 0x7984 # +0x985D 0x808B # +0x985E 0x9332 # +0x985F 0x8AD6 # +0x9860 0x502D # +0x9861 0x548C # +0x9862 0x8A71 # +0x9863 0x6B6A # +0x9864 0x8CC4 # +0x9865 0x8107 # +0x9866 0x60D1 # +0x9867 0x67A0 # +0x9868 0x9DF2 # +0x9869 0x4E99 # +0x986A 0x4E98 # +0x986B 0x9C10 # +0x986C 0x8A6B # +0x986D 0x85C1 # +0x986E 0x8568 # +0x986F 0x6900 # +0x9870 0x6E7E # +0x9871 0x7897 # +0x9872 0x8155 # +0x989F 0x5F0C # +0x98A0 0x4E10 # +0x98A1 0x4E15 # +0x98A2 0x4E2A # +0x98A3 0x4E31 # +0x98A4 0x4E36 # +0x98A5 0x4E3C # +0x98A6 0x4E3F # +0x98A7 0x4E42 # +0x98A8 0x4E56 # +0x98A9 0x4E58 # +0x98AA 0x4E82 # +0x98AB 0x4E85 # +0x98AC 0x8C6B # +0x98AD 0x4E8A # +0x98AE 0x8212 # +0x98AF 0x5F0D # +0x98B0 0x4E8E # +0x98B1 0x4E9E # +0x98B2 0x4E9F # +0x98B3 0x4EA0 # +0x98B4 0x4EA2 # +0x98B5 0x4EB0 # +0x98B6 0x4EB3 # +0x98B7 0x4EB6 # +0x98B8 0x4ECE # +0x98B9 0x4ECD # +0x98BA 0x4EC4 # +0x98BB 0x4EC6 # +0x98BC 0x4EC2 # +0x98BD 0x4ED7 # +0x98BE 0x4EDE # +0x98BF 0x4EED # +0x98C0 0x4EDF # +0x98C1 0x4EF7 # +0x98C2 0x4F09 # +0x98C3 0x4F5A # +0x98C4 0x4F30 # +0x98C5 0x4F5B # +0x98C6 0x4F5D # +0x98C7 0x4F57 # +0x98C8 0x4F47 # +0x98C9 0x4F76 # +0x98CA 0x4F88 # +0x98CB 0x4F8F # +0x98CC 0x4F98 # +0x98CD 0x4F7B # +0x98CE 0x4F69 # +0x98CF 0x4F70 # +0x98D0 0x4F91 # +0x98D1 0x4F6F # +0x98D2 0x4F86 # +0x98D3 0x4F96 # +0x98D4 0x5118 # +0x98D5 0x4FD4 # +0x98D6 0x4FDF # +0x98D7 0x4FCE # +0x98D8 0x4FD8 # +0x98D9 0x4FDB # +0x98DA 0x4FD1 # +0x98DB 0x4FDA # +0x98DC 0x4FD0 # +0x98DD 0x4FE4 # +0x98DE 0x4FE5 # +0x98DF 0x501A # +0x98E0 0x5028 # +0x98E1 0x5014 # +0x98E2 0x502A # +0x98E3 0x5025 # +0x98E4 0x5005 # +0x98E5 0x4F1C # +0x98E6 0x4FF6 # +0x98E7 0x5021 # +0x98E8 0x5029 # +0x98E9 0x502C # +0x98EA 0x4FFE # +0x98EB 0x4FEF # +0x98EC 0x5011 # +0x98ED 0x5006 # +0x98EE 0x5043 # +0x98EF 0x5047 # +0x98F0 0x6703 # +0x98F1 0x5055 # +0x98F2 0x5050 # +0x98F3 0x5048 # +0x98F4 0x505A # +0x98F5 0x5056 # +0x98F6 0x506C # +0x98F7 0x5078 # +0x98F8 0x5080 # +0x98F9 0x509A # +0x98FA 0x5085 # +0x98FB 0x50B4 # +0x98FC 0x50B2 # +0x9940 0x50C9 # +0x9941 0x50CA # +0x9942 0x50B3 # +0x9943 0x50C2 # +0x9944 0x50D6 # +0x9945 0x50DE # +0x9946 0x50E5 # +0x9947 0x50ED # +0x9948 0x50E3 # +0x9949 0x50EE # +0x994A 0x50F9 # +0x994B 0x50F5 # +0x994C 0x5109 # +0x994D 0x5101 # +0x994E 0x5102 # +0x994F 0x5116 # +0x9950 0x5115 # +0x9951 0x5114 # +0x9952 0x511A # +0x9953 0x5121 # +0x9954 0x513A # +0x9955 0x5137 # +0x9956 0x513C # +0x9957 0x513B # +0x9958 0x513F # +0x9959 0x5140 # +0x995A 0x5152 # +0x995B 0x514C # +0x995C 0x5154 # +0x995D 0x5162 # +0x995E 0x7AF8 # +0x995F 0x5169 # +0x9960 0x516A # +0x9961 0x516E # +0x9962 0x5180 # +0x9963 0x5182 # +0x9964 0x56D8 # +0x9965 0x518C # +0x9966 0x5189 # +0x9967 0x518F # +0x9968 0x5191 # +0x9969 0x5193 # +0x996A 0x5195 # +0x996B 0x5196 # +0x996C 0x51A4 # +0x996D 0x51A6 # +0x996E 0x51A2 # +0x996F 0x51A9 # +0x9970 0x51AA # +0x9971 0x51AB # +0x9972 0x51B3 # +0x9973 0x51B1 # +0x9974 0x51B2 # +0x9975 0x51B0 # +0x9976 0x51B5 # +0x9977 0x51BD # +0x9978 0x51C5 # +0x9979 0x51C9 # +0x997A 0x51DB # +0x997B 0x51E0 # +0x997C 0x8655 # +0x997D 0x51E9 # +0x997E 0x51ED # +0x9980 0x51F0 # +0x9981 0x51F5 # +0x9982 0x51FE # +0x9983 0x5204 # +0x9984 0x520B # +0x9985 0x5214 # +0x9986 0x520E # +0x9987 0x5227 # +0x9988 0x522A # +0x9989 0x522E # +0x998A 0x5233 # +0x998B 0x5239 # +0x998C 0x524F # +0x998D 0x5244 # +0x998E 0x524B # +0x998F 0x524C # +0x9990 0x525E # +0x9991 0x5254 # +0x9992 0x526A # +0x9993 0x5274 # +0x9994 0x5269 # +0x9995 0x5273 # +0x9996 0x527F # +0x9997 0x527D # +0x9998 0x528D # +0x9999 0x5294 # +0x999A 0x5292 # +0x999B 0x5271 # +0x999C 0x5288 # +0x999D 0x5291 # +0x999E 0x8FA8 # +0x999F 0x8FA7 # +0x99A0 0x52AC # +0x99A1 0x52AD # +0x99A2 0x52BC # +0x99A3 0x52B5 # +0x99A4 0x52C1 # +0x99A5 0x52CD # +0x99A6 0x52D7 # +0x99A7 0x52DE # +0x99A8 0x52E3 # +0x99A9 0x52E6 # +0x99AA 0x98ED # +0x99AB 0x52E0 # +0x99AC 0x52F3 # +0x99AD 0x52F5 # +0x99AE 0x52F8 # +0x99AF 0x52F9 # +0x99B0 0x5306 # +0x99B1 0x5308 # +0x99B2 0x7538 # +0x99B3 0x530D # +0x99B4 0x5310 # +0x99B5 0x530F # +0x99B6 0x5315 # +0x99B7 0x531A # +0x99B8 0x5323 # +0x99B9 0x532F # +0x99BA 0x5331 # +0x99BB 0x5333 # +0x99BC 0x5338 # +0x99BD 0x5340 # +0x99BE 0x5346 # +0x99BF 0x5345 # +0x99C0 0x4E17 # +0x99C1 0x5349 # +0x99C2 0x534D # +0x99C3 0x51D6 # +0x99C4 0x535E # +0x99C5 0x5369 # +0x99C6 0x536E # +0x99C7 0x5918 # +0x99C8 0x537B # +0x99C9 0x5377 # +0x99CA 0x5382 # +0x99CB 0x5396 # +0x99CC 0x53A0 # +0x99CD 0x53A6 # +0x99CE 0x53A5 # +0x99CF 0x53AE # +0x99D0 0x53B0 # +0x99D1 0x53B6 # +0x99D2 0x53C3 # +0x99D3 0x7C12 # +0x99D4 0x96D9 # +0x99D5 0x53DF # +0x99D6 0x66FC # +0x99D7 0x71EE # +0x99D8 0x53EE # +0x99D9 0x53E8 # +0x99DA 0x53ED # +0x99DB 0x53FA # +0x99DC 0x5401 # +0x99DD 0x543D # +0x99DE 0x5440 # +0x99DF 0x542C # +0x99E0 0x542D # +0x99E1 0x543C # +0x99E2 0x542E # +0x99E3 0x5436 # +0x99E4 0x5429 # +0x99E5 0x541D # +0x99E6 0x544E # +0x99E7 0x548F # +0x99E8 0x5475 # +0x99E9 0x548E # +0x99EA 0x545F # +0x99EB 0x5471 # +0x99EC 0x5477 # +0x99ED 0x5470 # +0x99EE 0x5492 # +0x99EF 0x547B # +0x99F0 0x5480 # +0x99F1 0x5476 # +0x99F2 0x5484 # +0x99F3 0x5490 # +0x99F4 0x5486 # +0x99F5 0x54C7 # +0x99F6 0x54A2 # +0x99F7 0x54B8 # +0x99F8 0x54A5 # +0x99F9 0x54AC # +0x99FA 0x54C4 # +0x99FB 0x54C8 # +0x99FC 0x54A8 # +0x9A40 0x54AB # +0x9A41 0x54C2 # +0x9A42 0x54A4 # +0x9A43 0x54BE # +0x9A44 0x54BC # +0x9A45 0x54D8 # +0x9A46 0x54E5 # +0x9A47 0x54E6 # +0x9A48 0x550F # +0x9A49 0x5514 # +0x9A4A 0x54FD # +0x9A4B 0x54EE # +0x9A4C 0x54ED # +0x9A4D 0x54FA # +0x9A4E 0x54E2 # +0x9A4F 0x5539 # +0x9A50 0x5540 # +0x9A51 0x5563 # +0x9A52 0x554C # +0x9A53 0x552E # +0x9A54 0x555C # +0x9A55 0x5545 # +0x9A56 0x5556 # +0x9A57 0x5557 # +0x9A58 0x5538 # +0x9A59 0x5533 # +0x9A5A 0x555D # +0x9A5B 0x5599 # +0x9A5C 0x5580 # +0x9A5D 0x54AF # +0x9A5E 0x558A # +0x9A5F 0x559F # +0x9A60 0x557B # +0x9A61 0x557E # +0x9A62 0x5598 # +0x9A63 0x559E # +0x9A64 0x55AE # +0x9A65 0x557C # +0x9A66 0x5583 # +0x9A67 0x55A9 # +0x9A68 0x5587 # +0x9A69 0x55A8 # +0x9A6A 0x55DA # +0x9A6B 0x55C5 # +0x9A6C 0x55DF # +0x9A6D 0x55C4 # +0x9A6E 0x55DC # +0x9A6F 0x55E4 # +0x9A70 0x55D4 # +0x9A71 0x5614 # +0x9A72 0x55F7 # +0x9A73 0x5616 # +0x9A74 0x55FE # +0x9A75 0x55FD # +0x9A76 0x561B # +0x9A77 0x55F9 # +0x9A78 0x564E # +0x9A79 0x5650 # +0x9A7A 0x71DF # +0x9A7B 0x5634 # +0x9A7C 0x5636 # +0x9A7D 0x5632 # +0x9A7E 0x5638 # +0x9A80 0x566B # +0x9A81 0x5664 # +0x9A82 0x562F # +0x9A83 0x566C # +0x9A84 0x566A # +0x9A85 0x5686 # +0x9A86 0x5680 # +0x9A87 0x568A # +0x9A88 0x56A0 # +0x9A89 0x5694 # +0x9A8A 0x568F # +0x9A8B 0x56A5 # +0x9A8C 0x56AE # +0x9A8D 0x56B6 # +0x9A8E 0x56B4 # +0x9A8F 0x56C2 # +0x9A90 0x56BC # +0x9A91 0x56C1 # +0x9A92 0x56C3 # +0x9A93 0x56C0 # +0x9A94 0x56C8 # +0x9A95 0x56CE # +0x9A96 0x56D1 # +0x9A97 0x56D3 # +0x9A98 0x56D7 # +0x9A99 0x56EE # +0x9A9A 0x56F9 # +0x9A9B 0x5700 # +0x9A9C 0x56FF # +0x9A9D 0x5704 # +0x9A9E 0x5709 # +0x9A9F 0x5708 # +0x9AA0 0x570B # +0x9AA1 0x570D # +0x9AA2 0x5713 # +0x9AA3 0x5718 # +0x9AA4 0x5716 # +0x9AA5 0x55C7 # +0x9AA6 0x571C # +0x9AA7 0x5726 # +0x9AA8 0x5737 # +0x9AA9 0x5738 # +0x9AAA 0x574E # +0x9AAB 0x573B # +0x9AAC 0x5740 # +0x9AAD 0x574F # +0x9AAE 0x5769 # +0x9AAF 0x57C0 # +0x9AB0 0x5788 # +0x9AB1 0x5761 # +0x9AB2 0x577F # +0x9AB3 0x5789 # +0x9AB4 0x5793 # +0x9AB5 0x57A0 # +0x9AB6 0x57B3 # +0x9AB7 0x57A4 # +0x9AB8 0x57AA # +0x9AB9 0x57B0 # +0x9ABA 0x57C3 # +0x9ABB 0x57C6 # +0x9ABC 0x57D4 # +0x9ABD 0x57D2 # +0x9ABE 0x57D3 # +0x9ABF 0x580A # +0x9AC0 0x57D6 # +0x9AC1 0x57E3 # +0x9AC2 0x580B # +0x9AC3 0x5819 # +0x9AC4 0x581D # +0x9AC5 0x5872 # +0x9AC6 0x5821 # +0x9AC7 0x5862 # +0x9AC8 0x584B # +0x9AC9 0x5870 # +0x9ACA 0x6BC0 # +0x9ACB 0x5852 # +0x9ACC 0x583D # +0x9ACD 0x5879 # +0x9ACE 0x5885 # +0x9ACF 0x58B9 # +0x9AD0 0x589F # +0x9AD1 0x58AB # +0x9AD2 0x58BA # +0x9AD3 0x58DE # +0x9AD4 0x58BB # +0x9AD5 0x58B8 # +0x9AD6 0x58AE # +0x9AD7 0x58C5 # +0x9AD8 0x58D3 # +0x9AD9 0x58D1 # +0x9ADA 0x58D7 # +0x9ADB 0x58D9 # +0x9ADC 0x58D8 # +0x9ADD 0x58E5 # +0x9ADE 0x58DC # +0x9ADF 0x58E4 # +0x9AE0 0x58DF # +0x9AE1 0x58EF # +0x9AE2 0x58FA # +0x9AE3 0x58F9 # +0x9AE4 0x58FB # +0x9AE5 0x58FC # +0x9AE6 0x58FD # +0x9AE7 0x5902 # +0x9AE8 0x590A # +0x9AE9 0x5910 # +0x9AEA 0x591B # +0x9AEB 0x68A6 # +0x9AEC 0x5925 # +0x9AED 0x592C # +0x9AEE 0x592D # +0x9AEF 0x5932 # +0x9AF0 0x5938 # +0x9AF1 0x593E # +0x9AF2 0x7AD2 # +0x9AF3 0x5955 # +0x9AF4 0x5950 # +0x9AF5 0x594E # +0x9AF6 0x595A # +0x9AF7 0x5958 # +0x9AF8 0x5962 # +0x9AF9 0x5960 # +0x9AFA 0x5967 # +0x9AFB 0x596C # +0x9AFC 0x5969 # +0x9B40 0x5978 # +0x9B41 0x5981 # +0x9B42 0x599D # +0x9B43 0x4F5E # +0x9B44 0x4FAB # +0x9B45 0x59A3 # +0x9B46 0x59B2 # +0x9B47 0x59C6 # +0x9B48 0x59E8 # +0x9B49 0x59DC # +0x9B4A 0x598D # +0x9B4B 0x59D9 # +0x9B4C 0x59DA # +0x9B4D 0x5A25 # +0x9B4E 0x5A1F # +0x9B4F 0x5A11 # +0x9B50 0x5A1C # +0x9B51 0x5A09 # +0x9B52 0x5A1A # +0x9B53 0x5A40 # +0x9B54 0x5A6C # +0x9B55 0x5A49 # +0x9B56 0x5A35 # +0x9B57 0x5A36 # +0x9B58 0x5A62 # +0x9B59 0x5A6A # +0x9B5A 0x5A9A # +0x9B5B 0x5ABC # +0x9B5C 0x5ABE # +0x9B5D 0x5ACB # +0x9B5E 0x5AC2 # +0x9B5F 0x5ABD # +0x9B60 0x5AE3 # +0x9B61 0x5AD7 # +0x9B62 0x5AE6 # +0x9B63 0x5AE9 # +0x9B64 0x5AD6 # +0x9B65 0x5AFA # +0x9B66 0x5AFB # +0x9B67 0x5B0C # +0x9B68 0x5B0B # +0x9B69 0x5B16 # +0x9B6A 0x5B32 # +0x9B6B 0x5AD0 # +0x9B6C 0x5B2A # +0x9B6D 0x5B36 # +0x9B6E 0x5B3E # +0x9B6F 0x5B43 # +0x9B70 0x5B45 # +0x9B71 0x5B40 # +0x9B72 0x5B51 # +0x9B73 0x5B55 # +0x9B74 0x5B5A # +0x9B75 0x5B5B # +0x9B76 0x5B65 # +0x9B77 0x5B69 # +0x9B78 0x5B70 # +0x9B79 0x5B73 # +0x9B7A 0x5B75 # +0x9B7B 0x5B78 # +0x9B7C 0x6588 # +0x9B7D 0x5B7A # +0x9B7E 0x5B80 # +0x9B80 0x5B83 # +0x9B81 0x5BA6 # +0x9B82 0x5BB8 # +0x9B83 0x5BC3 # +0x9B84 0x5BC7 # +0x9B85 0x5BC9 # +0x9B86 0x5BD4 # +0x9B87 0x5BD0 # +0x9B88 0x5BE4 # +0x9B89 0x5BE6 # +0x9B8A 0x5BE2 # +0x9B8B 0x5BDE # +0x9B8C 0x5BE5 # +0x9B8D 0x5BEB # +0x9B8E 0x5BF0 # +0x9B8F 0x5BF6 # +0x9B90 0x5BF3 # +0x9B91 0x5C05 # +0x9B92 0x5C07 # +0x9B93 0x5C08 # +0x9B94 0x5C0D # +0x9B95 0x5C13 # +0x9B96 0x5C20 # +0x9B97 0x5C22 # +0x9B98 0x5C28 # +0x9B99 0x5C38 # +0x9B9A 0x5C39 # +0x9B9B 0x5C41 # +0x9B9C 0x5C46 # +0x9B9D 0x5C4E # +0x9B9E 0x5C53 # +0x9B9F 0x5C50 # +0x9BA0 0x5C4F # +0x9BA1 0x5B71 # +0x9BA2 0x5C6C # +0x9BA3 0x5C6E # +0x9BA4 0x4E62 # +0x9BA5 0x5C76 # +0x9BA6 0x5C79 # +0x9BA7 0x5C8C # +0x9BA8 0x5C91 # +0x9BA9 0x5C94 # +0x9BAA 0x599B # +0x9BAB 0x5CAB # +0x9BAC 0x5CBB # +0x9BAD 0x5CB6 # +0x9BAE 0x5CBC # +0x9BAF 0x5CB7 # +0x9BB0 0x5CC5 # +0x9BB1 0x5CBE # +0x9BB2 0x5CC7 # +0x9BB3 0x5CD9 # +0x9BB4 0x5CE9 # +0x9BB5 0x5CFD # +0x9BB6 0x5CFA # +0x9BB7 0x5CED # +0x9BB8 0x5D8C # +0x9BB9 0x5CEA # +0x9BBA 0x5D0B # +0x9BBB 0x5D15 # +0x9BBC 0x5D17 # +0x9BBD 0x5D5C # +0x9BBE 0x5D1F # +0x9BBF 0x5D1B # +0x9BC0 0x5D11 # +0x9BC1 0x5D14 # +0x9BC2 0x5D22 # +0x9BC3 0x5D1A # +0x9BC4 0x5D19 # +0x9BC5 0x5D18 # +0x9BC6 0x5D4C # +0x9BC7 0x5D52 # +0x9BC8 0x5D4E # +0x9BC9 0x5D4B # +0x9BCA 0x5D6C # +0x9BCB 0x5D73 # +0x9BCC 0x5D76 # +0x9BCD 0x5D87 # +0x9BCE 0x5D84 # +0x9BCF 0x5D82 # +0x9BD0 0x5DA2 # +0x9BD1 0x5D9D # +0x9BD2 0x5DAC # +0x9BD3 0x5DAE # +0x9BD4 0x5DBD # +0x9BD5 0x5D90 # +0x9BD6 0x5DB7 # +0x9BD7 0x5DBC # +0x9BD8 0x5DC9 # +0x9BD9 0x5DCD # +0x9BDA 0x5DD3 # +0x9BDB 0x5DD2 # +0x9BDC 0x5DD6 # +0x9BDD 0x5DDB # +0x9BDE 0x5DEB # +0x9BDF 0x5DF2 # +0x9BE0 0x5DF5 # +0x9BE1 0x5E0B # +0x9BE2 0x5E1A # +0x9BE3 0x5E19 # +0x9BE4 0x5E11 # +0x9BE5 0x5E1B # +0x9BE6 0x5E36 # +0x9BE7 0x5E37 # +0x9BE8 0x5E44 # +0x9BE9 0x5E43 # +0x9BEA 0x5E40 # +0x9BEB 0x5E4E # +0x9BEC 0x5E57 # +0x9BED 0x5E54 # +0x9BEE 0x5E5F # +0x9BEF 0x5E62 # +0x9BF0 0x5E64 # +0x9BF1 0x5E47 # +0x9BF2 0x5E75 # +0x9BF3 0x5E76 # +0x9BF4 0x5E7A # +0x9BF5 0x9EBC # +0x9BF6 0x5E7F # +0x9BF7 0x5EA0 # +0x9BF8 0x5EC1 # +0x9BF9 0x5EC2 # +0x9BFA 0x5EC8 # +0x9BFB 0x5ED0 # +0x9BFC 0x5ECF # +0x9C40 0x5ED6 # +0x9C41 0x5EE3 # +0x9C42 0x5EDD # +0x9C43 0x5EDA # +0x9C44 0x5EDB # +0x9C45 0x5EE2 # +0x9C46 0x5EE1 # +0x9C47 0x5EE8 # +0x9C48 0x5EE9 # +0x9C49 0x5EEC # +0x9C4A 0x5EF1 # +0x9C4B 0x5EF3 # +0x9C4C 0x5EF0 # +0x9C4D 0x5EF4 # +0x9C4E 0x5EF8 # +0x9C4F 0x5EFE # +0x9C50 0x5F03 # +0x9C51 0x5F09 # +0x9C52 0x5F5D # +0x9C53 0x5F5C # +0x9C54 0x5F0B # +0x9C55 0x5F11 # +0x9C56 0x5F16 # +0x9C57 0x5F29 # +0x9C58 0x5F2D # +0x9C59 0x5F38 # +0x9C5A 0x5F41 # +0x9C5B 0x5F48 # +0x9C5C 0x5F4C # +0x9C5D 0x5F4E # +0x9C5E 0x5F2F # +0x9C5F 0x5F51 # +0x9C60 0x5F56 # +0x9C61 0x5F57 # +0x9C62 0x5F59 # +0x9C63 0x5F61 # +0x9C64 0x5F6D # +0x9C65 0x5F73 # +0x9C66 0x5F77 # +0x9C67 0x5F83 # +0x9C68 0x5F82 # +0x9C69 0x5F7F # +0x9C6A 0x5F8A # +0x9C6B 0x5F88 # +0x9C6C 0x5F91 # +0x9C6D 0x5F87 # +0x9C6E 0x5F9E # +0x9C6F 0x5F99 # +0x9C70 0x5F98 # +0x9C71 0x5FA0 # +0x9C72 0x5FA8 # +0x9C73 0x5FAD # +0x9C74 0x5FBC # +0x9C75 0x5FD6 # +0x9C76 0x5FFB # +0x9C77 0x5FE4 # +0x9C78 0x5FF8 # +0x9C79 0x5FF1 # +0x9C7A 0x5FDD # +0x9C7B 0x60B3 # +0x9C7C 0x5FFF # +0x9C7D 0x6021 # +0x9C7E 0x6060 # +0x9C80 0x6019 # +0x9C81 0x6010 # +0x9C82 0x6029 # +0x9C83 0x600E # +0x9C84 0x6031 # +0x9C85 0x601B # +0x9C86 0x6015 # +0x9C87 0x602B # +0x9C88 0x6026 # +0x9C89 0x600F # +0x9C8A 0x603A # +0x9C8B 0x605A # +0x9C8C 0x6041 # +0x9C8D 0x606A # +0x9C8E 0x6077 # +0x9C8F 0x605F # +0x9C90 0x604A # +0x9C91 0x6046 # +0x9C92 0x604D # +0x9C93 0x6063 # +0x9C94 0x6043 # +0x9C95 0x6064 # +0x9C96 0x6042 # +0x9C97 0x606C # +0x9C98 0x606B # +0x9C99 0x6059 # +0x9C9A 0x6081 # +0x9C9B 0x608D # +0x9C9C 0x60E7 # +0x9C9D 0x6083 # +0x9C9E 0x609A # +0x9C9F 0x6084 # +0x9CA0 0x609B # +0x9CA1 0x6096 # +0x9CA2 0x6097 # +0x9CA3 0x6092 # +0x9CA4 0x60A7 # +0x9CA5 0x608B # +0x9CA6 0x60E1 # +0x9CA7 0x60B8 # +0x9CA8 0x60E0 # +0x9CA9 0x60D3 # +0x9CAA 0x60B4 # +0x9CAB 0x5FF0 # +0x9CAC 0x60BD # +0x9CAD 0x60C6 # +0x9CAE 0x60B5 # +0x9CAF 0x60D8 # +0x9CB0 0x614D # +0x9CB1 0x6115 # +0x9CB2 0x6106 # +0x9CB3 0x60F6 # +0x9CB4 0x60F7 # +0x9CB5 0x6100 # +0x9CB6 0x60F4 # +0x9CB7 0x60FA # +0x9CB8 0x6103 # +0x9CB9 0x6121 # +0x9CBA 0x60FB # +0x9CBB 0x60F1 # +0x9CBC 0x610D # +0x9CBD 0x610E # +0x9CBE 0x6147 # +0x9CBF 0x613E # +0x9CC0 0x6128 # +0x9CC1 0x6127 # +0x9CC2 0x614A # +0x9CC3 0x613F # +0x9CC4 0x613C # +0x9CC5 0x612C # +0x9CC6 0x6134 # +0x9CC7 0x613D # +0x9CC8 0x6142 # +0x9CC9 0x6144 # +0x9CCA 0x6173 # +0x9CCB 0x6177 # +0x9CCC 0x6158 # +0x9CCD 0x6159 # +0x9CCE 0x615A # +0x9CCF 0x616B # +0x9CD0 0x6174 # +0x9CD1 0x616F # +0x9CD2 0x6165 # +0x9CD3 0x6171 # +0x9CD4 0x615F # +0x9CD5 0x615D # +0x9CD6 0x6153 # +0x9CD7 0x6175 # +0x9CD8 0x6199 # +0x9CD9 0x6196 # +0x9CDA 0x6187 # +0x9CDB 0x61AC # +0x9CDC 0x6194 # +0x9CDD 0x619A # +0x9CDE 0x618A # +0x9CDF 0x6191 # +0x9CE0 0x61AB # +0x9CE1 0x61AE # +0x9CE2 0x61CC # +0x9CE3 0x61CA # +0x9CE4 0x61C9 # +0x9CE5 0x61F7 # +0x9CE6 0x61C8 # +0x9CE7 0x61C3 # +0x9CE8 0x61C6 # +0x9CE9 0x61BA # +0x9CEA 0x61CB # +0x9CEB 0x7F79 # +0x9CEC 0x61CD # +0x9CED 0x61E6 # +0x9CEE 0x61E3 # +0x9CEF 0x61F6 # +0x9CF0 0x61FA # +0x9CF1 0x61F4 # +0x9CF2 0x61FF # +0x9CF3 0x61FD # +0x9CF4 0x61FC # +0x9CF5 0x61FE # +0x9CF6 0x6200 # +0x9CF7 0x6208 # +0x9CF8 0x6209 # +0x9CF9 0x620D # +0x9CFA 0x620C # +0x9CFB 0x6214 # +0x9CFC 0x621B # +0x9D40 0x621E # +0x9D41 0x6221 # +0x9D42 0x622A # +0x9D43 0x622E # +0x9D44 0x6230 # +0x9D45 0x6232 # +0x9D46 0x6233 # +0x9D47 0x6241 # +0x9D48 0x624E # +0x9D49 0x625E # +0x9D4A 0x6263 # +0x9D4B 0x625B # +0x9D4C 0x6260 # +0x9D4D 0x6268 # +0x9D4E 0x627C # +0x9D4F 0x6282 # +0x9D50 0x6289 # +0x9D51 0x627E # +0x9D52 0x6292 # +0x9D53 0x6293 # +0x9D54 0x6296 # +0x9D55 0x62D4 # +0x9D56 0x6283 # +0x9D57 0x6294 # +0x9D58 0x62D7 # +0x9D59 0x62D1 # +0x9D5A 0x62BB # +0x9D5B 0x62CF # +0x9D5C 0x62FF # +0x9D5D 0x62C6 # +0x9D5E 0x64D4 # +0x9D5F 0x62C8 # +0x9D60 0x62DC # +0x9D61 0x62CC # +0x9D62 0x62CA # +0x9D63 0x62C2 # +0x9D64 0x62C7 # +0x9D65 0x629B # +0x9D66 0x62C9 # +0x9D67 0x630C # +0x9D68 0x62EE # +0x9D69 0x62F1 # +0x9D6A 0x6327 # +0x9D6B 0x6302 # +0x9D6C 0x6308 # +0x9D6D 0x62EF # +0x9D6E 0x62F5 # +0x9D6F 0x6350 # +0x9D70 0x633E # +0x9D71 0x634D # +0x9D72 0x641C # +0x9D73 0x634F # +0x9D74 0x6396 # +0x9D75 0x638E # +0x9D76 0x6380 # +0x9D77 0x63AB # +0x9D78 0x6376 # +0x9D79 0x63A3 # +0x9D7A 0x638F # +0x9D7B 0x6389 # +0x9D7C 0x639F # +0x9D7D 0x63B5 # +0x9D7E 0x636B # +0x9D80 0x6369 # +0x9D81 0x63BE # +0x9D82 0x63E9 # +0x9D83 0x63C0 # +0x9D84 0x63C6 # +0x9D85 0x63E3 # +0x9D86 0x63C9 # +0x9D87 0x63D2 # +0x9D88 0x63F6 # +0x9D89 0x63C4 # +0x9D8A 0x6416 # +0x9D8B 0x6434 # +0x9D8C 0x6406 # +0x9D8D 0x6413 # +0x9D8E 0x6426 # +0x9D8F 0x6436 # +0x9D90 0x651D # +0x9D91 0x6417 # +0x9D92 0x6428 # +0x9D93 0x640F # +0x9D94 0x6467 # +0x9D95 0x646F # +0x9D96 0x6476 # +0x9D97 0x644E # +0x9D98 0x652A # +0x9D99 0x6495 # +0x9D9A 0x6493 # +0x9D9B 0x64A5 # +0x9D9C 0x64A9 # +0x9D9D 0x6488 # +0x9D9E 0x64BC # +0x9D9F 0x64DA # +0x9DA0 0x64D2 # +0x9DA1 0x64C5 # +0x9DA2 0x64C7 # +0x9DA3 0x64BB # +0x9DA4 0x64D8 # +0x9DA5 0x64C2 # +0x9DA6 0x64F1 # +0x9DA7 0x64E7 # +0x9DA8 0x8209 # +0x9DA9 0x64E0 # +0x9DAA 0x64E1 # +0x9DAB 0x62AC # +0x9DAC 0x64E3 # +0x9DAD 0x64EF # +0x9DAE 0x652C # +0x9DAF 0x64F6 # +0x9DB0 0x64F4 # +0x9DB1 0x64F2 # +0x9DB2 0x64FA # +0x9DB3 0x6500 # +0x9DB4 0x64FD # +0x9DB5 0x6518 # +0x9DB6 0x651C # +0x9DB7 0x6505 # +0x9DB8 0x6524 # +0x9DB9 0x6523 # +0x9DBA 0x652B # +0x9DBB 0x6534 # +0x9DBC 0x6535 # +0x9DBD 0x6537 # +0x9DBE 0x6536 # +0x9DBF 0x6538 # +0x9DC0 0x754B # +0x9DC1 0x6548 # +0x9DC2 0x6556 # +0x9DC3 0x6555 # +0x9DC4 0x654D # +0x9DC5 0x6558 # +0x9DC6 0x655E # +0x9DC7 0x655D # +0x9DC8 0x6572 # +0x9DC9 0x6578 # +0x9DCA 0x6582 # +0x9DCB 0x6583 # +0x9DCC 0x8B8A # +0x9DCD 0x659B # +0x9DCE 0x659F # +0x9DCF 0x65AB # +0x9DD0 0x65B7 # +0x9DD1 0x65C3 # +0x9DD2 0x65C6 # +0x9DD3 0x65C1 # +0x9DD4 0x65C4 # +0x9DD5 0x65CC # +0x9DD6 0x65D2 # +0x9DD7 0x65DB # +0x9DD8 0x65D9 # +0x9DD9 0x65E0 # +0x9DDA 0x65E1 # +0x9DDB 0x65F1 # +0x9DDC 0x6772 # +0x9DDD 0x660A # +0x9DDE 0x6603 # +0x9DDF 0x65FB # +0x9DE0 0x6773 # +0x9DE1 0x6635 # +0x9DE2 0x6636 # +0x9DE3 0x6634 # +0x9DE4 0x661C # +0x9DE5 0x664F # +0x9DE6 0x6644 # +0x9DE7 0x6649 # +0x9DE8 0x6641 # +0x9DE9 0x665E # +0x9DEA 0x665D # +0x9DEB 0x6664 # +0x9DEC 0x6667 # +0x9DED 0x6668 # +0x9DEE 0x665F # +0x9DEF 0x6662 # +0x9DF0 0x6670 # +0x9DF1 0x6683 # +0x9DF2 0x6688 # +0x9DF3 0x668E # +0x9DF4 0x6689 # +0x9DF5 0x6684 # +0x9DF6 0x6698 # +0x9DF7 0x669D # +0x9DF8 0x66C1 # +0x9DF9 0x66B9 # +0x9DFA 0x66C9 # +0x9DFB 0x66BE # +0x9DFC 0x66BC # +0x9E40 0x66C4 # +0x9E41 0x66B8 # +0x9E42 0x66D6 # +0x9E43 0x66DA # +0x9E44 0x66E0 # +0x9E45 0x663F # +0x9E46 0x66E6 # +0x9E47 0x66E9 # +0x9E48 0x66F0 # +0x9E49 0x66F5 # +0x9E4A 0x66F7 # +0x9E4B 0x670F # +0x9E4C 0x6716 # +0x9E4D 0x671E # +0x9E4E 0x6726 # +0x9E4F 0x6727 # +0x9E50 0x9738 # +0x9E51 0x672E # +0x9E52 0x673F # +0x9E53 0x6736 # +0x9E54 0x6741 # +0x9E55 0x6738 # +0x9E56 0x6737 # +0x9E57 0x6746 # +0x9E58 0x675E # +0x9E59 0x6760 # +0x9E5A 0x6759 # +0x9E5B 0x6763 # +0x9E5C 0x6764 # +0x9E5D 0x6789 # +0x9E5E 0x6770 # +0x9E5F 0x67A9 # +0x9E60 0x677C # +0x9E61 0x676A # +0x9E62 0x678C # +0x9E63 0x678B # +0x9E64 0x67A6 # +0x9E65 0x67A1 # +0x9E66 0x6785 # +0x9E67 0x67B7 # +0x9E68 0x67EF # +0x9E69 0x67B4 # +0x9E6A 0x67EC # +0x9E6B 0x67B3 # +0x9E6C 0x67E9 # +0x9E6D 0x67B8 # +0x9E6E 0x67E4 # +0x9E6F 0x67DE # +0x9E70 0x67DD # +0x9E71 0x67E2 # +0x9E72 0x67EE # +0x9E73 0x67B9 # +0x9E74 0x67CE # +0x9E75 0x67C6 # +0x9E76 0x67E7 # +0x9E77 0x6A9C # +0x9E78 0x681E # +0x9E79 0x6846 # +0x9E7A 0x6829 # +0x9E7B 0x6840 # +0x9E7C 0x684D # +0x9E7D 0x6832 # +0x9E7E 0x684E # +0x9E80 0x68B3 # +0x9E81 0x682B # +0x9E82 0x6859 # +0x9E83 0x6863 # +0x9E84 0x6877 # +0x9E85 0x687F # +0x9E86 0x689F # +0x9E87 0x688F # +0x9E88 0x68AD # +0x9E89 0x6894 # +0x9E8A 0x689D # +0x9E8B 0x689B # +0x9E8C 0x6883 # +0x9E8D 0x6AAE # +0x9E8E 0x68B9 # +0x9E8F 0x6874 # +0x9E90 0x68B5 # +0x9E91 0x68A0 # +0x9E92 0x68BA # +0x9E93 0x690F # +0x9E94 0x688D # +0x9E95 0x687E # +0x9E96 0x6901 # +0x9E97 0x68CA # +0x9E98 0x6908 # +0x9E99 0x68D8 # +0x9E9A 0x6922 # +0x9E9B 0x6926 # +0x9E9C 0x68E1 # +0x9E9D 0x690C # +0x9E9E 0x68CD # +0x9E9F 0x68D4 # +0x9EA0 0x68E7 # +0x9EA1 0x68D5 # +0x9EA2 0x6936 # +0x9EA3 0x6912 # +0x9EA4 0x6904 # +0x9EA5 0x68D7 # +0x9EA6 0x68E3 # +0x9EA7 0x6925 # +0x9EA8 0x68F9 # +0x9EA9 0x68E0 # +0x9EAA 0x68EF # +0x9EAB 0x6928 # +0x9EAC 0x692A # +0x9EAD 0x691A # +0x9EAE 0x6923 # +0x9EAF 0x6921 # +0x9EB0 0x68C6 # +0x9EB1 0x6979 # +0x9EB2 0x6977 # +0x9EB3 0x695C # +0x9EB4 0x6978 # +0x9EB5 0x696B # +0x9EB6 0x6954 # +0x9EB7 0x697E # +0x9EB8 0x696E # +0x9EB9 0x6939 # +0x9EBA 0x6974 # +0x9EBB 0x693D # +0x9EBC 0x6959 # +0x9EBD 0x6930 # +0x9EBE 0x6961 # +0x9EBF 0x695E # +0x9EC0 0x695D # +0x9EC1 0x6981 # +0x9EC2 0x696A # +0x9EC3 0x69B2 # +0x9EC4 0x69AE # +0x9EC5 0x69D0 # +0x9EC6 0x69BF # +0x9EC7 0x69C1 # +0x9EC8 0x69D3 # +0x9EC9 0x69BE # +0x9ECA 0x69CE # +0x9ECB 0x5BE8 # +0x9ECC 0x69CA # +0x9ECD 0x69DD # +0x9ECE 0x69BB # +0x9ECF 0x69C3 # +0x9ED0 0x69A7 # +0x9ED1 0x6A2E # +0x9ED2 0x6991 # +0x9ED3 0x69A0 # +0x9ED4 0x699C # +0x9ED5 0x6995 # +0x9ED6 0x69B4 # +0x9ED7 0x69DE # +0x9ED8 0x69E8 # +0x9ED9 0x6A02 # +0x9EDA 0x6A1B # +0x9EDB 0x69FF # +0x9EDC 0x6B0A # +0x9EDD 0x69F9 # +0x9EDE 0x69F2 # +0x9EDF 0x69E7 # +0x9EE0 0x6A05 # +0x9EE1 0x69B1 # +0x9EE2 0x6A1E # +0x9EE3 0x69ED # +0x9EE4 0x6A14 # +0x9EE5 0x69EB # +0x9EE6 0x6A0A # +0x9EE7 0x6A12 # +0x9EE8 0x6AC1 # +0x9EE9 0x6A23 # +0x9EEA 0x6A13 # +0x9EEB 0x6A44 # +0x9EEC 0x6A0C # +0x9EED 0x6A72 # +0x9EEE 0x6A36 # +0x9EEF 0x6A78 # +0x9EF0 0x6A47 # +0x9EF1 0x6A62 # +0x9EF2 0x6A59 # +0x9EF3 0x6A66 # +0x9EF4 0x6A48 # +0x9EF5 0x6A38 # +0x9EF6 0x6A22 # +0x9EF7 0x6A90 # +0x9EF8 0x6A8D # +0x9EF9 0x6AA0 # +0x9EFA 0x6A84 # +0x9EFB 0x6AA2 # +0x9EFC 0x6AA3 # +0x9F40 0x6A97 # +0x9F41 0x8617 # +0x9F42 0x6ABB # +0x9F43 0x6AC3 # +0x9F44 0x6AC2 # +0x9F45 0x6AB8 # +0x9F46 0x6AB3 # +0x9F47 0x6AAC # +0x9F48 0x6ADE # +0x9F49 0x6AD1 # +0x9F4A 0x6ADF # +0x9F4B 0x6AAA # +0x9F4C 0x6ADA # +0x9F4D 0x6AEA # +0x9F4E 0x6AFB # +0x9F4F 0x6B05 # +0x9F50 0x8616 # +0x9F51 0x6AFA # +0x9F52 0x6B12 # +0x9F53 0x6B16 # +0x9F54 0x9B31 # +0x9F55 0x6B1F # +0x9F56 0x6B38 # +0x9F57 0x6B37 # +0x9F58 0x76DC # +0x9F59 0x6B39 # +0x9F5A 0x98EE # +0x9F5B 0x6B47 # +0x9F5C 0x6B43 # +0x9F5D 0x6B49 # +0x9F5E 0x6B50 # +0x9F5F 0x6B59 # +0x9F60 0x6B54 # +0x9F61 0x6B5B # +0x9F62 0x6B5F # +0x9F63 0x6B61 # +0x9F64 0x6B78 # +0x9F65 0x6B79 # +0x9F66 0x6B7F # +0x9F67 0x6B80 # +0x9F68 0x6B84 # +0x9F69 0x6B83 # +0x9F6A 0x6B8D # +0x9F6B 0x6B98 # +0x9F6C 0x6B95 # +0x9F6D 0x6B9E # +0x9F6E 0x6BA4 # +0x9F6F 0x6BAA # +0x9F70 0x6BAB # +0x9F71 0x6BAF # +0x9F72 0x6BB2 # +0x9F73 0x6BB1 # +0x9F74 0x6BB3 # +0x9F75 0x6BB7 # +0x9F76 0x6BBC # +0x9F77 0x6BC6 # +0x9F78 0x6BCB # +0x9F79 0x6BD3 # +0x9F7A 0x6BDF # +0x9F7B 0x6BEC # +0x9F7C 0x6BEB # +0x9F7D 0x6BF3 # +0x9F7E 0x6BEF # +0x9F80 0x9EBE # +0x9F81 0x6C08 # +0x9F82 0x6C13 # +0x9F83 0x6C14 # +0x9F84 0x6C1B # +0x9F85 0x6C24 # +0x9F86 0x6C23 # +0x9F87 0x6C5E # +0x9F88 0x6C55 # +0x9F89 0x6C62 # +0x9F8A 0x6C6A # +0x9F8B 0x6C82 # +0x9F8C 0x6C8D # +0x9F8D 0x6C9A # +0x9F8E 0x6C81 # +0x9F8F 0x6C9B # +0x9F90 0x6C7E # +0x9F91 0x6C68 # +0x9F92 0x6C73 # +0x9F93 0x6C92 # +0x9F94 0x6C90 # +0x9F95 0x6CC4 # +0x9F96 0x6CF1 # +0x9F97 0x6CD3 # +0x9F98 0x6CBD # +0x9F99 0x6CD7 # +0x9F9A 0x6CC5 # +0x9F9B 0x6CDD # +0x9F9C 0x6CAE # +0x9F9D 0x6CB1 # +0x9F9E 0x6CBE # +0x9F9F 0x6CBA # +0x9FA0 0x6CDB # +0x9FA1 0x6CEF # +0x9FA2 0x6CD9 # +0x9FA3 0x6CEA # +0x9FA4 0x6D1F # +0x9FA5 0x884D # +0x9FA6 0x6D36 # +0x9FA7 0x6D2B # +0x9FA8 0x6D3D # +0x9FA9 0x6D38 # +0x9FAA 0x6D19 # +0x9FAB 0x6D35 # +0x9FAC 0x6D33 # +0x9FAD 0x6D12 # +0x9FAE 0x6D0C # +0x9FAF 0x6D63 # +0x9FB0 0x6D93 # +0x9FB1 0x6D64 # +0x9FB2 0x6D5A # +0x9FB3 0x6D79 # +0x9FB4 0x6D59 # +0x9FB5 0x6D8E # +0x9FB6 0x6D95 # +0x9FB7 0x6FE4 # +0x9FB8 0x6D85 # +0x9FB9 0x6DF9 # +0x9FBA 0x6E15 # +0x9FBB 0x6E0A # +0x9FBC 0x6DB5 # +0x9FBD 0x6DC7 # +0x9FBE 0x6DE6 # +0x9FBF 0x6DB8 # +0x9FC0 0x6DC6 # +0x9FC1 0x6DEC # +0x9FC2 0x6DDE # +0x9FC3 0x6DCC # +0x9FC4 0x6DE8 # +0x9FC5 0x6DD2 # +0x9FC6 0x6DC5 # +0x9FC7 0x6DFA # +0x9FC8 0x6DD9 # +0x9FC9 0x6DE4 # +0x9FCA 0x6DD5 # +0x9FCB 0x6DEA # +0x9FCC 0x6DEE # +0x9FCD 0x6E2D # +0x9FCE 0x6E6E # +0x9FCF 0x6E2E # +0x9FD0 0x6E19 # +0x9FD1 0x6E72 # +0x9FD2 0x6E5F # +0x9FD3 0x6E3E # +0x9FD4 0x6E23 # +0x9FD5 0x6E6B # +0x9FD6 0x6E2B # +0x9FD7 0x6E76 # +0x9FD8 0x6E4D # +0x9FD9 0x6E1F # +0x9FDA 0x6E43 # +0x9FDB 0x6E3A # +0x9FDC 0x6E4E # +0x9FDD 0x6E24 # +0x9FDE 0x6EFF # +0x9FDF 0x6E1D # +0x9FE0 0x6E38 # +0x9FE1 0x6E82 # +0x9FE2 0x6EAA # +0x9FE3 0x6E98 # +0x9FE4 0x6EC9 # +0x9FE5 0x6EB7 # +0x9FE6 0x6ED3 # +0x9FE7 0x6EBD # +0x9FE8 0x6EAF # +0x9FE9 0x6EC4 # +0x9FEA 0x6EB2 # +0x9FEB 0x6ED4 # +0x9FEC 0x6ED5 # +0x9FED 0x6E8F # +0x9FEE 0x6EA5 # +0x9FEF 0x6EC2 # +0x9FF0 0x6E9F # +0x9FF1 0x6F41 # +0x9FF2 0x6F11 # +0x9FF3 0x704C # +0x9FF4 0x6EEC # +0x9FF5 0x6EF8 # +0x9FF6 0x6EFE # +0x9FF7 0x6F3F # +0x9FF8 0x6EF2 # +0x9FF9 0x6F31 # +0x9FFA 0x6EEF # +0x9FFB 0x6F32 # +0x9FFC 0x6ECC # +# +0xE040 0x6F3E # +0xE041 0x6F13 # +0xE042 0x6EF7 # +0xE043 0x6F86 # +0xE044 0x6F7A # +0xE045 0x6F78 # +0xE046 0x6F81 # +0xE047 0x6F80 # +0xE048 0x6F6F # +0xE049 0x6F5B # +0xE04A 0x6FF3 # +0xE04B 0x6F6D # +0xE04C 0x6F82 # +0xE04D 0x6F7C # +0xE04E 0x6F58 # +0xE04F 0x6F8E # +0xE050 0x6F91 # +0xE051 0x6FC2 # +0xE052 0x6F66 # +0xE053 0x6FB3 # +0xE054 0x6FA3 # +0xE055 0x6FA1 # +0xE056 0x6FA4 # +0xE057 0x6FB9 # +0xE058 0x6FC6 # +0xE059 0x6FAA # +0xE05A 0x6FDF # +0xE05B 0x6FD5 # +0xE05C 0x6FEC # +0xE05D 0x6FD4 # +0xE05E 0x6FD8 # +0xE05F 0x6FF1 # +0xE060 0x6FEE # +0xE061 0x6FDB # +0xE062 0x7009 # +0xE063 0x700B # +0xE064 0x6FFA # +0xE065 0x7011 # +0xE066 0x7001 # +0xE067 0x700F # +0xE068 0x6FFE # +0xE069 0x701B # +0xE06A 0x701A # +0xE06B 0x6F74 # +0xE06C 0x701D # +0xE06D 0x7018 # +0xE06E 0x701F # +0xE06F 0x7030 # +0xE070 0x703E # +0xE071 0x7032 # +0xE072 0x7051 # +0xE073 0x7063 # +0xE074 0x7099 # +0xE075 0x7092 # +0xE076 0x70AF # +0xE077 0x70F1 # +0xE078 0x70AC # +0xE079 0x70B8 # +0xE07A 0x70B3 # +0xE07B 0x70AE # +0xE07C 0x70DF # +0xE07D 0x70CB # +0xE07E 0x70DD # +0xE080 0x70D9 # +0xE081 0x7109 # +0xE082 0x70FD # +0xE083 0x711C # +0xE084 0x7119 # +0xE085 0x7165 # +0xE086 0x7155 # +0xE087 0x7188 # +0xE088 0x7166 # +0xE089 0x7162 # +0xE08A 0x714C # +0xE08B 0x7156 # +0xE08C 0x716C # +0xE08D 0x718F # +0xE08E 0x71FB # +0xE08F 0x7184 # +0xE090 0x7195 # +0xE091 0x71A8 # +0xE092 0x71AC # +0xE093 0x71D7 # +0xE094 0x71B9 # +0xE095 0x71BE # +0xE096 0x71D2 # +0xE097 0x71C9 # +0xE098 0x71D4 # +0xE099 0x71CE # +0xE09A 0x71E0 # +0xE09B 0x71EC # +0xE09C 0x71E7 # +0xE09D 0x71F5 # +0xE09E 0x71FC # +0xE09F 0x71F9 # +0xE0A0 0x71FF # +0xE0A1 0x720D # +0xE0A2 0x7210 # +0xE0A3 0x721B # +0xE0A4 0x7228 # +0xE0A5 0x722D # +0xE0A6 0x722C # +0xE0A7 0x7230 # +0xE0A8 0x7232 # +0xE0A9 0x723B # +0xE0AA 0x723C # +0xE0AB 0x723F # +0xE0AC 0x7240 # +0xE0AD 0x7246 # +0xE0AE 0x724B # +0xE0AF 0x7258 # +0xE0B0 0x7274 # +0xE0B1 0x727E # +0xE0B2 0x7282 # +0xE0B3 0x7281 # +0xE0B4 0x7287 # +0xE0B5 0x7292 # +0xE0B6 0x7296 # +0xE0B7 0x72A2 # +0xE0B8 0x72A7 # +0xE0B9 0x72B9 # +0xE0BA 0x72B2 # +0xE0BB 0x72C3 # +0xE0BC 0x72C6 # +0xE0BD 0x72C4 # +0xE0BE 0x72CE # +0xE0BF 0x72D2 # +0xE0C0 0x72E2 # +0xE0C1 0x72E0 # +0xE0C2 0x72E1 # +0xE0C3 0x72F9 # +0xE0C4 0x72F7 # +0xE0C5 0x500F # +0xE0C6 0x7317 # +0xE0C7 0x730A # +0xE0C8 0x731C # +0xE0C9 0x7316 # +0xE0CA 0x731D # +0xE0CB 0x7334 # +0xE0CC 0x732F # +0xE0CD 0x7329 # +0xE0CE 0x7325 # +0xE0CF 0x733E # +0xE0D0 0x734E # +0xE0D1 0x734F # +0xE0D2 0x9ED8 # +0xE0D3 0x7357 # +0xE0D4 0x736A # +0xE0D5 0x7368 # +0xE0D6 0x7370 # +0xE0D7 0x7378 # +0xE0D8 0x7375 # +0xE0D9 0x737B # +0xE0DA 0x737A # +0xE0DB 0x73C8 # +0xE0DC 0x73B3 # +0xE0DD 0x73CE # +0xE0DE 0x73BB # +0xE0DF 0x73C0 # +0xE0E0 0x73E5 # +0xE0E1 0x73EE # +0xE0E2 0x73DE # +0xE0E3 0x74A2 # +0xE0E4 0x7405 # +0xE0E5 0x746F # +0xE0E6 0x7425 # +0xE0E7 0x73F8 # +0xE0E8 0x7432 # +0xE0E9 0x743A # +0xE0EA 0x7455 # +0xE0EB 0x743F # +0xE0EC 0x745F # +0xE0ED 0x7459 # +0xE0EE 0x7441 # +0xE0EF 0x745C # +0xE0F0 0x7469 # +0xE0F1 0x7470 # +0xE0F2 0x7463 # +0xE0F3 0x746A # +0xE0F4 0x7476 # +0xE0F5 0x747E # +0xE0F6 0x748B # +0xE0F7 0x749E # +0xE0F8 0x74A7 # +0xE0F9 0x74CA # +0xE0FA 0x74CF # +0xE0FB 0x74D4 # +0xE0FC 0x73F1 # +0xE140 0x74E0 # +0xE141 0x74E3 # +0xE142 0x74E7 # +0xE143 0x74E9 # +0xE144 0x74EE # +0xE145 0x74F2 # +0xE146 0x74F0 # +0xE147 0x74F1 # +0xE148 0x74F8 # +0xE149 0x74F7 # +0xE14A 0x7504 # +0xE14B 0x7503 # +0xE14C 0x7505 # +0xE14D 0x750C # +0xE14E 0x750E # +0xE14F 0x750D # +0xE150 0x7515 # +0xE151 0x7513 # +0xE152 0x751E # +0xE153 0x7526 # +0xE154 0x752C # +0xE155 0x753C # +0xE156 0x7544 # +0xE157 0x754D # +0xE158 0x754A # +0xE159 0x7549 # +0xE15A 0x755B # +0xE15B 0x7546 # +0xE15C 0x755A # +0xE15D 0x7569 # +0xE15E 0x7564 # +0xE15F 0x7567 # +0xE160 0x756B # +0xE161 0x756D # +0xE162 0x7578 # +0xE163 0x7576 # +0xE164 0x7586 # +0xE165 0x7587 # +0xE166 0x7574 # +0xE167 0x758A # +0xE168 0x7589 # +0xE169 0x7582 # +0xE16A 0x7594 # +0xE16B 0x759A # +0xE16C 0x759D # +0xE16D 0x75A5 # +0xE16E 0x75A3 # +0xE16F 0x75C2 # +0xE170 0x75B3 # +0xE171 0x75C3 # +0xE172 0x75B5 # +0xE173 0x75BD # +0xE174 0x75B8 # +0xE175 0x75BC # +0xE176 0x75B1 # +0xE177 0x75CD # +0xE178 0x75CA # +0xE179 0x75D2 # +0xE17A 0x75D9 # +0xE17B 0x75E3 # +0xE17C 0x75DE # +0xE17D 0x75FE # +0xE17E 0x75FF # +0xE180 0x75FC # +0xE181 0x7601 # +0xE182 0x75F0 # +0xE183 0x75FA # +0xE184 0x75F2 # +0xE185 0x75F3 # +0xE186 0x760B # +0xE187 0x760D # +0xE188 0x7609 # +0xE189 0x761F # +0xE18A 0x7627 # +0xE18B 0x7620 # +0xE18C 0x7621 # +0xE18D 0x7622 # +0xE18E 0x7624 # +0xE18F 0x7634 # +0xE190 0x7630 # +0xE191 0x763B # +0xE192 0x7647 # +0xE193 0x7648 # +0xE194 0x7646 # +0xE195 0x765C # +0xE196 0x7658 # +0xE197 0x7661 # +0xE198 0x7662 # +0xE199 0x7668 # +0xE19A 0x7669 # +0xE19B 0x766A # +0xE19C 0x7667 # +0xE19D 0x766C # +0xE19E 0x7670 # +0xE19F 0x7672 # +0xE1A0 0x7676 # +0xE1A1 0x7678 # +0xE1A2 0x767C # +0xE1A3 0x7680 # +0xE1A4 0x7683 # +0xE1A5 0x7688 # +0xE1A6 0x768B # +0xE1A7 0x768E # +0xE1A8 0x7696 # +0xE1A9 0x7693 # +0xE1AA 0x7699 # +0xE1AB 0x769A # +0xE1AC 0x76B0 # +0xE1AD 0x76B4 # +0xE1AE 0x76B8 # +0xE1AF 0x76B9 # +0xE1B0 0x76BA # +0xE1B1 0x76C2 # +0xE1B2 0x76CD # +0xE1B3 0x76D6 # +0xE1B4 0x76D2 # +0xE1B5 0x76DE # +0xE1B6 0x76E1 # +0xE1B7 0x76E5 # +0xE1B8 0x76E7 # +0xE1B9 0x76EA # +0xE1BA 0x862F # +0xE1BB 0x76FB # +0xE1BC 0x7708 # +0xE1BD 0x7707 # +0xE1BE 0x7704 # +0xE1BF 0x7729 # +0xE1C0 0x7724 # +0xE1C1 0x771E # +0xE1C2 0x7725 # +0xE1C3 0x7726 # +0xE1C4 0x771B # +0xE1C5 0x7737 # +0xE1C6 0x7738 # +0xE1C7 0x7747 # +0xE1C8 0x775A # +0xE1C9 0x7768 # +0xE1CA 0x776B # +0xE1CB 0x775B # +0xE1CC 0x7765 # +0xE1CD 0x777F # +0xE1CE 0x777E # +0xE1CF 0x7779 # +0xE1D0 0x778E # +0xE1D1 0x778B # +0xE1D2 0x7791 # +0xE1D3 0x77A0 # +0xE1D4 0x779E # +0xE1D5 0x77B0 # +0xE1D6 0x77B6 # +0xE1D7 0x77B9 # +0xE1D8 0x77BF # +0xE1D9 0x77BC # +0xE1DA 0x77BD # +0xE1DB 0x77BB # +0xE1DC 0x77C7 # +0xE1DD 0x77CD # +0xE1DE 0x77D7 # +0xE1DF 0x77DA # +0xE1E0 0x77DC # +0xE1E1 0x77E3 # +0xE1E2 0x77EE # +0xE1E3 0x77FC # +0xE1E4 0x780C # +0xE1E5 0x7812 # +0xE1E6 0x7926 # +0xE1E7 0x7820 # +0xE1E8 0x792A # +0xE1E9 0x7845 # +0xE1EA 0x788E # +0xE1EB 0x7874 # +0xE1EC 0x7886 # +0xE1ED 0x787C # +0xE1EE 0x789A # +0xE1EF 0x788C # +0xE1F0 0x78A3 # +0xE1F1 0x78B5 # +0xE1F2 0x78AA # +0xE1F3 0x78AF # +0xE1F4 0x78D1 # +0xE1F5 0x78C6 # +0xE1F6 0x78CB # +0xE1F7 0x78D4 # +0xE1F8 0x78BE # +0xE1F9 0x78BC # +0xE1FA 0x78C5 # +0xE1FB 0x78CA # +0xE1FC 0x78EC # +0xE240 0x78E7 # +0xE241 0x78DA # +0xE242 0x78FD # +0xE243 0x78F4 # +0xE244 0x7907 # +0xE245 0x7912 # +0xE246 0x7911 # +0xE247 0x7919 # +0xE248 0x792C # +0xE249 0x792B # +0xE24A 0x7940 # +0xE24B 0x7960 # +0xE24C 0x7957 # +0xE24D 0x795F # +0xE24E 0x795A # +0xE24F 0x7955 # +0xE250 0x7953 # +0xE251 0x797A # +0xE252 0x797F # +0xE253 0x798A # +0xE254 0x799D # +0xE255 0x79A7 # +0xE256 0x9F4B # +0xE257 0x79AA # +0xE258 0x79AE # +0xE259 0x79B3 # +0xE25A 0x79B9 # +0xE25B 0x79BA # +0xE25C 0x79C9 # +0xE25D 0x79D5 # +0xE25E 0x79E7 # +0xE25F 0x79EC # +0xE260 0x79E1 # +0xE261 0x79E3 # +0xE262 0x7A08 # +0xE263 0x7A0D # +0xE264 0x7A18 # +0xE265 0x7A19 # +0xE266 0x7A20 # +0xE267 0x7A1F # +0xE268 0x7980 # +0xE269 0x7A31 # +0xE26A 0x7A3B # +0xE26B 0x7A3E # +0xE26C 0x7A37 # +0xE26D 0x7A43 # +0xE26E 0x7A57 # +0xE26F 0x7A49 # +0xE270 0x7A61 # +0xE271 0x7A62 # +0xE272 0x7A69 # +0xE273 0x9F9D # +0xE274 0x7A70 # +0xE275 0x7A79 # +0xE276 0x7A7D # +0xE277 0x7A88 # +0xE278 0x7A97 # +0xE279 0x7A95 # +0xE27A 0x7A98 # +0xE27B 0x7A96 # +0xE27C 0x7AA9 # +0xE27D 0x7AC8 # +0xE27E 0x7AB0 # +0xE280 0x7AB6 # +0xE281 0x7AC5 # +0xE282 0x7AC4 # +0xE283 0x7ABF # +0xE284 0x9083 # +0xE285 0x7AC7 # +0xE286 0x7ACA # +0xE287 0x7ACD # +0xE288 0x7ACF # +0xE289 0x7AD5 # +0xE28A 0x7AD3 # +0xE28B 0x7AD9 # +0xE28C 0x7ADA # +0xE28D 0x7ADD # +0xE28E 0x7AE1 # +0xE28F 0x7AE2 # +0xE290 0x7AE6 # +0xE291 0x7AED # +0xE292 0x7AF0 # +0xE293 0x7B02 # +0xE294 0x7B0F # +0xE295 0x7B0A # +0xE296 0x7B06 # +0xE297 0x7B33 # +0xE298 0x7B18 # +0xE299 0x7B19 # +0xE29A 0x7B1E # +0xE29B 0x7B35 # +0xE29C 0x7B28 # +0xE29D 0x7B36 # +0xE29E 0x7B50 # +0xE29F 0x7B7A # +0xE2A0 0x7B04 # +0xE2A1 0x7B4D # +0xE2A2 0x7B0B # +0xE2A3 0x7B4C # +0xE2A4 0x7B45 # +0xE2A5 0x7B75 # +0xE2A6 0x7B65 # +0xE2A7 0x7B74 # +0xE2A8 0x7B67 # +0xE2A9 0x7B70 # +0xE2AA 0x7B71 # +0xE2AB 0x7B6C # +0xE2AC 0x7B6E # +0xE2AD 0x7B9D # +0xE2AE 0x7B98 # +0xE2AF 0x7B9F # +0xE2B0 0x7B8D # +0xE2B1 0x7B9C # +0xE2B2 0x7B9A # +0xE2B3 0x7B8B # +0xE2B4 0x7B92 # +0xE2B5 0x7B8F # +0xE2B6 0x7B5D # +0xE2B7 0x7B99 # +0xE2B8 0x7BCB # +0xE2B9 0x7BC1 # +0xE2BA 0x7BCC # +0xE2BB 0x7BCF # +0xE2BC 0x7BB4 # +0xE2BD 0x7BC6 # +0xE2BE 0x7BDD # +0xE2BF 0x7BE9 # +0xE2C0 0x7C11 # +0xE2C1 0x7C14 # +0xE2C2 0x7BE6 # +0xE2C3 0x7BE5 # +0xE2C4 0x7C60 # +0xE2C5 0x7C00 # +0xE2C6 0x7C07 # +0xE2C7 0x7C13 # +0xE2C8 0x7BF3 # +0xE2C9 0x7BF7 # +0xE2CA 0x7C17 # +0xE2CB 0x7C0D # +0xE2CC 0x7BF6 # +0xE2CD 0x7C23 # +0xE2CE 0x7C27 # +0xE2CF 0x7C2A # +0xE2D0 0x7C1F # +0xE2D1 0x7C37 # +0xE2D2 0x7C2B # +0xE2D3 0x7C3D # +0xE2D4 0x7C4C # +0xE2D5 0x7C43 # +0xE2D6 0x7C54 # +0xE2D7 0x7C4F # +0xE2D8 0x7C40 # +0xE2D9 0x7C50 # +0xE2DA 0x7C58 # +0xE2DB 0x7C5F # +0xE2DC 0x7C64 # +0xE2DD 0x7C56 # +0xE2DE 0x7C65 # +0xE2DF 0x7C6C # +0xE2E0 0x7C75 # +0xE2E1 0x7C83 # +0xE2E2 0x7C90 # +0xE2E3 0x7CA4 # +0xE2E4 0x7CAD # +0xE2E5 0x7CA2 # +0xE2E6 0x7CAB # +0xE2E7 0x7CA1 # +0xE2E8 0x7CA8 # +0xE2E9 0x7CB3 # +0xE2EA 0x7CB2 # +0xE2EB 0x7CB1 # +0xE2EC 0x7CAE # +0xE2ED 0x7CB9 # +0xE2EE 0x7CBD # +0xE2EF 0x7CC0 # +0xE2F0 0x7CC5 # +0xE2F1 0x7CC2 # +0xE2F2 0x7CD8 # +0xE2F3 0x7CD2 # +0xE2F4 0x7CDC # +0xE2F5 0x7CE2 # +0xE2F6 0x9B3B # +0xE2F7 0x7CEF # +0xE2F8 0x7CF2 # +0xE2F9 0x7CF4 # +0xE2FA 0x7CF6 # +0xE2FB 0x7CFA # +0xE2FC 0x7D06 # +0xE340 0x7D02 # +0xE341 0x7D1C # +0xE342 0x7D15 # +0xE343 0x7D0A # +0xE344 0x7D45 # +0xE345 0x7D4B # +0xE346 0x7D2E # +0xE347 0x7D32 # +0xE348 0x7D3F # +0xE349 0x7D35 # +0xE34A 0x7D46 # +0xE34B 0x7D73 # +0xE34C 0x7D56 # +0xE34D 0x7D4E # +0xE34E 0x7D72 # +0xE34F 0x7D68 # +0xE350 0x7D6E # +0xE351 0x7D4F # +0xE352 0x7D63 # +0xE353 0x7D93 # +0xE354 0x7D89 # +0xE355 0x7D5B # +0xE356 0x7D8F # +0xE357 0x7D7D # +0xE358 0x7D9B # +0xE359 0x7DBA # +0xE35A 0x7DAE # +0xE35B 0x7DA3 # +0xE35C 0x7DB5 # +0xE35D 0x7DC7 # +0xE35E 0x7DBD # +0xE35F 0x7DAB # +0xE360 0x7E3D # +0xE361 0x7DA2 # +0xE362 0x7DAF # +0xE363 0x7DDC # +0xE364 0x7DB8 # +0xE365 0x7D9F # +0xE366 0x7DB0 # +0xE367 0x7DD8 # +0xE368 0x7DDD # +0xE369 0x7DE4 # +0xE36A 0x7DDE # +0xE36B 0x7DFB # +0xE36C 0x7DF2 # +0xE36D 0x7DE1 # +0xE36E 0x7E05 # +0xE36F 0x7E0A # +0xE370 0x7E23 # +0xE371 0x7E21 # +0xE372 0x7E12 # +0xE373 0x7E31 # +0xE374 0x7E1F # +0xE375 0x7E09 # +0xE376 0x7E0B # +0xE377 0x7E22 # +0xE378 0x7E46 # +0xE379 0x7E66 # +0xE37A 0x7E3B # +0xE37B 0x7E35 # +0xE37C 0x7E39 # +0xE37D 0x7E43 # +0xE37E 0x7E37 # +0xE380 0x7E32 # +0xE381 0x7E3A # +0xE382 0x7E67 # +0xE383 0x7E5D # +0xE384 0x7E56 # +0xE385 0x7E5E # +0xE386 0x7E59 # +0xE387 0x7E5A # +0xE388 0x7E79 # +0xE389 0x7E6A # +0xE38A 0x7E69 # +0xE38B 0x7E7C # +0xE38C 0x7E7B # +0xE38D 0x7E83 # +0xE38E 0x7DD5 # +0xE38F 0x7E7D # +0xE390 0x8FAE # +0xE391 0x7E7F # +0xE392 0x7E88 # +0xE393 0x7E89 # +0xE394 0x7E8C # +0xE395 0x7E92 # +0xE396 0x7E90 # +0xE397 0x7E93 # +0xE398 0x7E94 # +0xE399 0x7E96 # +0xE39A 0x7E8E # +0xE39B 0x7E9B # +0xE39C 0x7E9C # +0xE39D 0x7F38 # +0xE39E 0x7F3A # +0xE39F 0x7F45 # +0xE3A0 0x7F4C # +0xE3A1 0x7F4D # +0xE3A2 0x7F4E # +0xE3A3 0x7F50 # +0xE3A4 0x7F51 # +0xE3A5 0x7F55 # +0xE3A6 0x7F54 # +0xE3A7 0x7F58 # +0xE3A8 0x7F5F # +0xE3A9 0x7F60 # +0xE3AA 0x7F68 # +0xE3AB 0x7F69 # +0xE3AC 0x7F67 # +0xE3AD 0x7F78 # +0xE3AE 0x7F82 # +0xE3AF 0x7F86 # +0xE3B0 0x7F83 # +0xE3B1 0x7F88 # +0xE3B2 0x7F87 # +0xE3B3 0x7F8C # +0xE3B4 0x7F94 # +0xE3B5 0x7F9E # +0xE3B6 0x7F9D # +0xE3B7 0x7F9A # +0xE3B8 0x7FA3 # +0xE3B9 0x7FAF # +0xE3BA 0x7FB2 # +0xE3BB 0x7FB9 # +0xE3BC 0x7FAE # +0xE3BD 0x7FB6 # +0xE3BE 0x7FB8 # +0xE3BF 0x8B71 # +0xE3C0 0x7FC5 # +0xE3C1 0x7FC6 # +0xE3C2 0x7FCA # +0xE3C3 0x7FD5 # +0xE3C4 0x7FD4 # +0xE3C5 0x7FE1 # +0xE3C6 0x7FE6 # +0xE3C7 0x7FE9 # +0xE3C8 0x7FF3 # +0xE3C9 0x7FF9 # +0xE3CA 0x98DC # +0xE3CB 0x8006 # +0xE3CC 0x8004 # +0xE3CD 0x800B # +0xE3CE 0x8012 # +0xE3CF 0x8018 # +0xE3D0 0x8019 # +0xE3D1 0x801C # +0xE3D2 0x8021 # +0xE3D3 0x8028 # +0xE3D4 0x803F # +0xE3D5 0x803B # +0xE3D6 0x804A # +0xE3D7 0x8046 # +0xE3D8 0x8052 # +0xE3D9 0x8058 # +0xE3DA 0x805A # +0xE3DB 0x805F # +0xE3DC 0x8062 # +0xE3DD 0x8068 # +0xE3DE 0x8073 # +0xE3DF 0x8072 # +0xE3E0 0x8070 # +0xE3E1 0x8076 # +0xE3E2 0x8079 # +0xE3E3 0x807D # +0xE3E4 0x807F # +0xE3E5 0x8084 # +0xE3E6 0x8086 # +0xE3E7 0x8085 # +0xE3E8 0x809B # +0xE3E9 0x8093 # +0xE3EA 0x809A # +0xE3EB 0x80AD # +0xE3EC 0x5190 # +0xE3ED 0x80AC # +0xE3EE 0x80DB # +0xE3EF 0x80E5 # +0xE3F0 0x80D9 # +0xE3F1 0x80DD # +0xE3F2 0x80C4 # +0xE3F3 0x80DA # +0xE3F4 0x80D6 # +0xE3F5 0x8109 # +0xE3F6 0x80EF # +0xE3F7 0x80F1 # +0xE3F8 0x811B # +0xE3F9 0x8129 # +0xE3FA 0x8123 # +0xE3FB 0x812F # +0xE3FC 0x814B # +0xE440 0x968B # +0xE441 0x8146 # +0xE442 0x813E # +0xE443 0x8153 # +0xE444 0x8151 # +0xE445 0x80FC # +0xE446 0x8171 # +0xE447 0x816E # +0xE448 0x8165 # +0xE449 0x8166 # +0xE44A 0x8174 # +0xE44B 0x8183 # +0xE44C 0x8188 # +0xE44D 0x818A # +0xE44E 0x8180 # +0xE44F 0x8182 # +0xE450 0x81A0 # +0xE451 0x8195 # +0xE452 0x81A4 # +0xE453 0x81A3 # +0xE454 0x815F # +0xE455 0x8193 # +0xE456 0x81A9 # +0xE457 0x81B0 # +0xE458 0x81B5 # +0xE459 0x81BE # +0xE45A 0x81B8 # +0xE45B 0x81BD # +0xE45C 0x81C0 # +0xE45D 0x81C2 # +0xE45E 0x81BA # +0xE45F 0x81C9 # +0xE460 0x81CD # +0xE461 0x81D1 # +0xE462 0x81D9 # +0xE463 0x81D8 # +0xE464 0x81C8 # +0xE465 0x81DA # +0xE466 0x81DF # +0xE467 0x81E0 # +0xE468 0x81E7 # +0xE469 0x81FA # +0xE46A 0x81FB # +0xE46B 0x81FE # +0xE46C 0x8201 # +0xE46D 0x8202 # +0xE46E 0x8205 # +0xE46F 0x8207 # +0xE470 0x820A # +0xE471 0x820D # +0xE472 0x8210 # +0xE473 0x8216 # +0xE474 0x8229 # +0xE475 0x822B # +0xE476 0x8238 # +0xE477 0x8233 # +0xE478 0x8240 # +0xE479 0x8259 # +0xE47A 0x8258 # +0xE47B 0x825D # +0xE47C 0x825A # +0xE47D 0x825F # +0xE47E 0x8264 # +0xE480 0x8262 # +0xE481 0x8268 # +0xE482 0x826A # +0xE483 0x826B # +0xE484 0x822E # +0xE485 0x8271 # +0xE486 0x8277 # +0xE487 0x8278 # +0xE488 0x827E # +0xE489 0x828D # +0xE48A 0x8292 # +0xE48B 0x82AB # +0xE48C 0x829F # +0xE48D 0x82BB # +0xE48E 0x82AC # +0xE48F 0x82E1 # +0xE490 0x82E3 # +0xE491 0x82DF # +0xE492 0x82D2 # +0xE493 0x82F4 # +0xE494 0x82F3 # +0xE495 0x82FA # +0xE496 0x8393 # +0xE497 0x8303 # +0xE498 0x82FB # +0xE499 0x82F9 # +0xE49A 0x82DE # +0xE49B 0x8306 # +0xE49C 0x82DC # +0xE49D 0x8309 # +0xE49E 0x82D9 # +0xE49F 0x8335 # +0xE4A0 0x8334 # +0xE4A1 0x8316 # +0xE4A2 0x8332 # +0xE4A3 0x8331 # +0xE4A4 0x8340 # +0xE4A5 0x8339 # +0xE4A6 0x8350 # +0xE4A7 0x8345 # +0xE4A8 0x832F # +0xE4A9 0x832B # +0xE4AA 0x8317 # +0xE4AB 0x8318 # +0xE4AC 0x8385 # +0xE4AD 0x839A # +0xE4AE 0x83AA # +0xE4AF 0x839F # +0xE4B0 0x83A2 # +0xE4B1 0x8396 # +0xE4B2 0x8323 # +0xE4B3 0x838E # +0xE4B4 0x8387 # +0xE4B5 0x838A # +0xE4B6 0x837C # +0xE4B7 0x83B5 # +0xE4B8 0x8373 # +0xE4B9 0x8375 # +0xE4BA 0x83A0 # +0xE4BB 0x8389 # +0xE4BC 0x83A8 # +0xE4BD 0x83F4 # +0xE4BE 0x8413 # +0xE4BF 0x83EB # +0xE4C0 0x83CE # +0xE4C1 0x83FD # +0xE4C2 0x8403 # +0xE4C3 0x83D8 # +0xE4C4 0x840B # +0xE4C5 0x83C1 # +0xE4C6 0x83F7 # +0xE4C7 0x8407 # +0xE4C8 0x83E0 # +0xE4C9 0x83F2 # +0xE4CA 0x840D # +0xE4CB 0x8422 # +0xE4CC 0x8420 # +0xE4CD 0x83BD # +0xE4CE 0x8438 # +0xE4CF 0x8506 # +0xE4D0 0x83FB # +0xE4D1 0x846D # +0xE4D2 0x842A # +0xE4D3 0x843C # +0xE4D4 0x855A # +0xE4D5 0x8484 # +0xE4D6 0x8477 # +0xE4D7 0x846B # +0xE4D8 0x84AD # +0xE4D9 0x846E # +0xE4DA 0x8482 # +0xE4DB 0x8469 # +0xE4DC 0x8446 # +0xE4DD 0x842C # +0xE4DE 0x846F # +0xE4DF 0x8479 # +0xE4E0 0x8435 # +0xE4E1 0x84CA # +0xE4E2 0x8462 # +0xE4E3 0x84B9 # +0xE4E4 0x84BF # +0xE4E5 0x849F # +0xE4E6 0x84D9 # +0xE4E7 0x84CD # +0xE4E8 0x84BB # +0xE4E9 0x84DA # +0xE4EA 0x84D0 # +0xE4EB 0x84C1 # +0xE4EC 0x84C6 # +0xE4ED 0x84D6 # +0xE4EE 0x84A1 # +0xE4EF 0x8521 # +0xE4F0 0x84FF # +0xE4F1 0x84F4 # +0xE4F2 0x8517 # +0xE4F3 0x8518 # +0xE4F4 0x852C # +0xE4F5 0x851F # +0xE4F6 0x8515 # +0xE4F7 0x8514 # +0xE4F8 0x84FC # +0xE4F9 0x8540 # +0xE4FA 0x8563 # +0xE4FB 0x8558 # +0xE4FC 0x8548 # +0xE540 0x8541 # +0xE541 0x8602 # +0xE542 0x854B # +0xE543 0x8555 # +0xE544 0x8580 # +0xE545 0x85A4 # +0xE546 0x8588 # +0xE547 0x8591 # +0xE548 0x858A # +0xE549 0x85A8 # +0xE54A 0x856D # +0xE54B 0x8594 # +0xE54C 0x859B # +0xE54D 0x85EA # +0xE54E 0x8587 # +0xE54F 0x859C # +0xE550 0x8577 # +0xE551 0x857E # +0xE552 0x8590 # +0xE553 0x85C9 # +0xE554 0x85BA # +0xE555 0x85CF # +0xE556 0x85B9 # +0xE557 0x85D0 # +0xE558 0x85D5 # +0xE559 0x85DD # +0xE55A 0x85E5 # +0xE55B 0x85DC # +0xE55C 0x85F9 # +0xE55D 0x860A # +0xE55E 0x8613 # +0xE55F 0x860B # +0xE560 0x85FE # +0xE561 0x85FA # +0xE562 0x8606 # +0xE563 0x8622 # +0xE564 0x861A # +0xE565 0x8630 # +0xE566 0x863F # +0xE567 0x864D # +0xE568 0x4E55 # +0xE569 0x8654 # +0xE56A 0x865F # +0xE56B 0x8667 # +0xE56C 0x8671 # +0xE56D 0x8693 # +0xE56E 0x86A3 # +0xE56F 0x86A9 # +0xE570 0x86AA # +0xE571 0x868B # +0xE572 0x868C # +0xE573 0x86B6 # +0xE574 0x86AF # +0xE575 0x86C4 # +0xE576 0x86C6 # +0xE577 0x86B0 # +0xE578 0x86C9 # +0xE579 0x8823 # +0xE57A 0x86AB # +0xE57B 0x86D4 # +0xE57C 0x86DE # +0xE57D 0x86E9 # +0xE57E 0x86EC # +0xE580 0x86DF # +0xE581 0x86DB # +0xE582 0x86EF # +0xE583 0x8712 # +0xE584 0x8706 # +0xE585 0x8708 # +0xE586 0x8700 # +0xE587 0x8703 # +0xE588 0x86FB # +0xE589 0x8711 # +0xE58A 0x8709 # +0xE58B 0x870D # +0xE58C 0x86F9 # +0xE58D 0x870A # +0xE58E 0x8734 # +0xE58F 0x873F # +0xE590 0x8737 # +0xE591 0x873B # +0xE592 0x8725 # +0xE593 0x8729 # +0xE594 0x871A # +0xE595 0x8760 # +0xE596 0x875F # +0xE597 0x8778 # +0xE598 0x874C # +0xE599 0x874E # +0xE59A 0x8774 # +0xE59B 0x8757 # +0xE59C 0x8768 # +0xE59D 0x876E # +0xE59E 0x8759 # +0xE59F 0x8753 # +0xE5A0 0x8763 # +0xE5A1 0x876A # +0xE5A2 0x8805 # +0xE5A3 0x87A2 # +0xE5A4 0x879F # +0xE5A5 0x8782 # +0xE5A6 0x87AF # +0xE5A7 0x87CB # +0xE5A8 0x87BD # +0xE5A9 0x87C0 # +0xE5AA 0x87D0 # +0xE5AB 0x96D6 # +0xE5AC 0x87AB # +0xE5AD 0x87C4 # +0xE5AE 0x87B3 # +0xE5AF 0x87C7 # +0xE5B0 0x87C6 # +0xE5B1 0x87BB # +0xE5B2 0x87EF # +0xE5B3 0x87F2 # +0xE5B4 0x87E0 # +0xE5B5 0x880F # +0xE5B6 0x880D # +0xE5B7 0x87FE # +0xE5B8 0x87F6 # +0xE5B9 0x87F7 # +0xE5BA 0x880E # +0xE5BB 0x87D2 # +0xE5BC 0x8811 # +0xE5BD 0x8816 # +0xE5BE 0x8815 # +0xE5BF 0x8822 # +0xE5C0 0x8821 # +0xE5C1 0x8831 # +0xE5C2 0x8836 # +0xE5C3 0x8839 # +0xE5C4 0x8827 # +0xE5C5 0x883B # +0xE5C6 0x8844 # +0xE5C7 0x8842 # +0xE5C8 0x8852 # +0xE5C9 0x8859 # +0xE5CA 0x885E # +0xE5CB 0x8862 # +0xE5CC 0x886B # +0xE5CD 0x8881 # +0xE5CE 0x887E # +0xE5CF 0x889E # +0xE5D0 0x8875 # +0xE5D1 0x887D # +0xE5D2 0x88B5 # +0xE5D3 0x8872 # +0xE5D4 0x8882 # +0xE5D5 0x8897 # +0xE5D6 0x8892 # +0xE5D7 0x88AE # +0xE5D8 0x8899 # +0xE5D9 0x88A2 # +0xE5DA 0x888D # +0xE5DB 0x88A4 # +0xE5DC 0x88B0 # +0xE5DD 0x88BF # +0xE5DE 0x88B1 # +0xE5DF 0x88C3 # +0xE5E0 0x88C4 # +0xE5E1 0x88D4 # +0xE5E2 0x88D8 # +0xE5E3 0x88D9 # +0xE5E4 0x88DD # +0xE5E5 0x88F9 # +0xE5E6 0x8902 # +0xE5E7 0x88FC # +0xE5E8 0x88F4 # +0xE5E9 0x88E8 # +0xE5EA 0x88F2 # +0xE5EB 0x8904 # +0xE5EC 0x890C # +0xE5ED 0x890A # +0xE5EE 0x8913 # +0xE5EF 0x8943 # +0xE5F0 0x891E # +0xE5F1 0x8925 # +0xE5F2 0x892A # +0xE5F3 0x892B # +0xE5F4 0x8941 # +0xE5F5 0x8944 # +0xE5F6 0x893B # +0xE5F7 0x8936 # +0xE5F8 0x8938 # +0xE5F9 0x894C # +0xE5FA 0x891D # +0xE5FB 0x8960 # +0xE5FC 0x895E # +0xE640 0x8966 # +0xE641 0x8964 # +0xE642 0x896D # +0xE643 0x896A # +0xE644 0x896F # +0xE645 0x8974 # +0xE646 0x8977 # +0xE647 0x897E # +0xE648 0x8983 # +0xE649 0x8988 # +0xE64A 0x898A # +0xE64B 0x8993 # +0xE64C 0x8998 # +0xE64D 0x89A1 # +0xE64E 0x89A9 # +0xE64F 0x89A6 # +0xE650 0x89AC # +0xE651 0x89AF # +0xE652 0x89B2 # +0xE653 0x89BA # +0xE654 0x89BD # +0xE655 0x89BF # +0xE656 0x89C0 # +0xE657 0x89DA # +0xE658 0x89DC # +0xE659 0x89DD # +0xE65A 0x89E7 # +0xE65B 0x89F4 # +0xE65C 0x89F8 # +0xE65D 0x8A03 # +0xE65E 0x8A16 # +0xE65F 0x8A10 # +0xE660 0x8A0C # +0xE661 0x8A1B # +0xE662 0x8A1D # +0xE663 0x8A25 # +0xE664 0x8A36 # +0xE665 0x8A41 # +0xE666 0x8A5B # +0xE667 0x8A52 # +0xE668 0x8A46 # +0xE669 0x8A48 # +0xE66A 0x8A7C # +0xE66B 0x8A6D # +0xE66C 0x8A6C # +0xE66D 0x8A62 # +0xE66E 0x8A85 # +0xE66F 0x8A82 # +0xE670 0x8A84 # +0xE671 0x8AA8 # +0xE672 0x8AA1 # +0xE673 0x8A91 # +0xE674 0x8AA5 # +0xE675 0x8AA6 # +0xE676 0x8A9A # +0xE677 0x8AA3 # +0xE678 0x8AC4 # +0xE679 0x8ACD # +0xE67A 0x8AC2 # +0xE67B 0x8ADA # +0xE67C 0x8AEB # +0xE67D 0x8AF3 # +0xE67E 0x8AE7 # +0xE680 0x8AE4 # +0xE681 0x8AF1 # +0xE682 0x8B14 # +0xE683 0x8AE0 # +0xE684 0x8AE2 # +0xE685 0x8AF7 # +0xE686 0x8ADE # +0xE687 0x8ADB # +0xE688 0x8B0C # +0xE689 0x8B07 # +0xE68A 0x8B1A # +0xE68B 0x8AE1 # +0xE68C 0x8B16 # +0xE68D 0x8B10 # +0xE68E 0x8B17 # +0xE68F 0x8B20 # +0xE690 0x8B33 # +0xE691 0x97AB # +0xE692 0x8B26 # +0xE693 0x8B2B # +0xE694 0x8B3E # +0xE695 0x8B28 # +0xE696 0x8B41 # +0xE697 0x8B4C # +0xE698 0x8B4F # +0xE699 0x8B4E # +0xE69A 0x8B49 # +0xE69B 0x8B56 # +0xE69C 0x8B5B # +0xE69D 0x8B5A # +0xE69E 0x8B6B # +0xE69F 0x8B5F # +0xE6A0 0x8B6C # +0xE6A1 0x8B6F # +0xE6A2 0x8B74 # +0xE6A3 0x8B7D # +0xE6A4 0x8B80 # +0xE6A5 0x8B8C # +0xE6A6 0x8B8E # +0xE6A7 0x8B92 # +0xE6A8 0x8B93 # +0xE6A9 0x8B96 # +0xE6AA 0x8B99 # +0xE6AB 0x8B9A # +0xE6AC 0x8C3A # +0xE6AD 0x8C41 # +0xE6AE 0x8C3F # +0xE6AF 0x8C48 # +0xE6B0 0x8C4C # +0xE6B1 0x8C4E # +0xE6B2 0x8C50 # +0xE6B3 0x8C55 # +0xE6B4 0x8C62 # +0xE6B5 0x8C6C # +0xE6B6 0x8C78 # +0xE6B7 0x8C7A # +0xE6B8 0x8C82 # +0xE6B9 0x8C89 # +0xE6BA 0x8C85 # +0xE6BB 0x8C8A # +0xE6BC 0x8C8D # +0xE6BD 0x8C8E # +0xE6BE 0x8C94 # +0xE6BF 0x8C7C # +0xE6C0 0x8C98 # +0xE6C1 0x621D # +0xE6C2 0x8CAD # +0xE6C3 0x8CAA # +0xE6C4 0x8CBD # +0xE6C5 0x8CB2 # +0xE6C6 0x8CB3 # +0xE6C7 0x8CAE # +0xE6C8 0x8CB6 # +0xE6C9 0x8CC8 # +0xE6CA 0x8CC1 # +0xE6CB 0x8CE4 # +0xE6CC 0x8CE3 # +0xE6CD 0x8CDA # +0xE6CE 0x8CFD # +0xE6CF 0x8CFA # +0xE6D0 0x8CFB # +0xE6D1 0x8D04 # +0xE6D2 0x8D05 # +0xE6D3 0x8D0A # +0xE6D4 0x8D07 # +0xE6D5 0x8D0F # +0xE6D6 0x8D0D # +0xE6D7 0x8D10 # +0xE6D8 0x9F4E # +0xE6D9 0x8D13 # +0xE6DA 0x8CCD # +0xE6DB 0x8D14 # +0xE6DC 0x8D16 # +0xE6DD 0x8D67 # +0xE6DE 0x8D6D # +0xE6DF 0x8D71 # +0xE6E0 0x8D73 # +0xE6E1 0x8D81 # +0xE6E2 0x8D99 # +0xE6E3 0x8DC2 # +0xE6E4 0x8DBE # +0xE6E5 0x8DBA # +0xE6E6 0x8DCF # +0xE6E7 0x8DDA # +0xE6E8 0x8DD6 # +0xE6E9 0x8DCC # +0xE6EA 0x8DDB # +0xE6EB 0x8DCB # +0xE6EC 0x8DEA # +0xE6ED 0x8DEB # +0xE6EE 0x8DDF # +0xE6EF 0x8DE3 # +0xE6F0 0x8DFC # +0xE6F1 0x8E08 # +0xE6F2 0x8E09 # +0xE6F3 0x8DFF # +0xE6F4 0x8E1D # +0xE6F5 0x8E1E # +0xE6F6 0x8E10 # +0xE6F7 0x8E1F # +0xE6F8 0x8E42 # +0xE6F9 0x8E35 # +0xE6FA 0x8E30 # +0xE6FB 0x8E34 # +0xE6FC 0x8E4A # +0xE740 0x8E47 # +0xE741 0x8E49 # +0xE742 0x8E4C # +0xE743 0x8E50 # +0xE744 0x8E48 # +0xE745 0x8E59 # +0xE746 0x8E64 # +0xE747 0x8E60 # +0xE748 0x8E2A # +0xE749 0x8E63 # +0xE74A 0x8E55 # +0xE74B 0x8E76 # +0xE74C 0x8E72 # +0xE74D 0x8E7C # +0xE74E 0x8E81 # +0xE74F 0x8E87 # +0xE750 0x8E85 # +0xE751 0x8E84 # +0xE752 0x8E8B # +0xE753 0x8E8A # +0xE754 0x8E93 # +0xE755 0x8E91 # +0xE756 0x8E94 # +0xE757 0x8E99 # +0xE758 0x8EAA # +0xE759 0x8EA1 # +0xE75A 0x8EAC # +0xE75B 0x8EB0 # +0xE75C 0x8EC6 # +0xE75D 0x8EB1 # +0xE75E 0x8EBE # +0xE75F 0x8EC5 # +0xE760 0x8EC8 # +0xE761 0x8ECB # +0xE762 0x8EDB # +0xE763 0x8EE3 # +0xE764 0x8EFC # +0xE765 0x8EFB # +0xE766 0x8EEB # +0xE767 0x8EFE # +0xE768 0x8F0A # +0xE769 0x8F05 # +0xE76A 0x8F15 # +0xE76B 0x8F12 # +0xE76C 0x8F19 # +0xE76D 0x8F13 # +0xE76E 0x8F1C # +0xE76F 0x8F1F # +0xE770 0x8F1B # +0xE771 0x8F0C # +0xE772 0x8F26 # +0xE773 0x8F33 # +0xE774 0x8F3B # +0xE775 0x8F39 # +0xE776 0x8F45 # +0xE777 0x8F42 # +0xE778 0x8F3E # +0xE779 0x8F4C # +0xE77A 0x8F49 # +0xE77B 0x8F46 # +0xE77C 0x8F4E # +0xE77D 0x8F57 # +0xE77E 0x8F5C # +0xE780 0x8F62 # +0xE781 0x8F63 # +0xE782 0x8F64 # +0xE783 0x8F9C # +0xE784 0x8F9F # +0xE785 0x8FA3 # +0xE786 0x8FAD # +0xE787 0x8FAF # +0xE788 0x8FB7 # +0xE789 0x8FDA # +0xE78A 0x8FE5 # +0xE78B 0x8FE2 # +0xE78C 0x8FEA # +0xE78D 0x8FEF # +0xE78E 0x9087 # +0xE78F 0x8FF4 # +0xE790 0x9005 # +0xE791 0x8FF9 # +0xE792 0x8FFA # +0xE793 0x9011 # +0xE794 0x9015 # +0xE795 0x9021 # +0xE796 0x900D # +0xE797 0x901E # +0xE798 0x9016 # +0xE799 0x900B # +0xE79A 0x9027 # +0xE79B 0x9036 # +0xE79C 0x9035 # +0xE79D 0x9039 # +0xE79E 0x8FF8 # +0xE79F 0x904F # +0xE7A0 0x9050 # +0xE7A1 0x9051 # +0xE7A2 0x9052 # +0xE7A3 0x900E # +0xE7A4 0x9049 # +0xE7A5 0x903E # +0xE7A6 0x9056 # +0xE7A7 0x9058 # +0xE7A8 0x905E # +0xE7A9 0x9068 # +0xE7AA 0x906F # +0xE7AB 0x9076 # +0xE7AC 0x96A8 # +0xE7AD 0x9072 # +0xE7AE 0x9082 # +0xE7AF 0x907D # +0xE7B0 0x9081 # +0xE7B1 0x9080 # +0xE7B2 0x908A # +0xE7B3 0x9089 # +0xE7B4 0x908F # +0xE7B5 0x90A8 # +0xE7B6 0x90AF # +0xE7B7 0x90B1 # +0xE7B8 0x90B5 # +0xE7B9 0x90E2 # +0xE7BA 0x90E4 # +0xE7BB 0x6248 # +0xE7BC 0x90DB # +0xE7BD 0x9102 # +0xE7BE 0x9112 # +0xE7BF 0x9119 # +0xE7C0 0x9132 # +0xE7C1 0x9130 # +0xE7C2 0x914A # +0xE7C3 0x9156 # +0xE7C4 0x9158 # +0xE7C5 0x9163 # +0xE7C6 0x9165 # +0xE7C7 0x9169 # +0xE7C8 0x9173 # +0xE7C9 0x9172 # +0xE7CA 0x918B # +0xE7CB 0x9189 # +0xE7CC 0x9182 # +0xE7CD 0x91A2 # +0xE7CE 0x91AB # +0xE7CF 0x91AF # +0xE7D0 0x91AA # +0xE7D1 0x91B5 # +0xE7D2 0x91B4 # +0xE7D3 0x91BA # +0xE7D4 0x91C0 # +0xE7D5 0x91C1 # +0xE7D6 0x91C9 # +0xE7D7 0x91CB # +0xE7D8 0x91D0 # +0xE7D9 0x91D6 # +0xE7DA 0x91DF # +0xE7DB 0x91E1 # +0xE7DC 0x91DB # +0xE7DD 0x91FC # +0xE7DE 0x91F5 # +0xE7DF 0x91F6 # +0xE7E0 0x921E # +0xE7E1 0x91FF # +0xE7E2 0x9214 # +0xE7E3 0x922C # +0xE7E4 0x9215 # +0xE7E5 0x9211 # +0xE7E6 0x925E # +0xE7E7 0x9257 # +0xE7E8 0x9245 # +0xE7E9 0x9249 # +0xE7EA 0x9264 # +0xE7EB 0x9248 # +0xE7EC 0x9295 # +0xE7ED 0x923F # +0xE7EE 0x924B # +0xE7EF 0x9250 # +0xE7F0 0x929C # +0xE7F1 0x9296 # +0xE7F2 0x9293 # +0xE7F3 0x929B # +0xE7F4 0x925A # +0xE7F5 0x92CF # +0xE7F6 0x92B9 # +0xE7F7 0x92B7 # +0xE7F8 0x92E9 # +0xE7F9 0x930F # +0xE7FA 0x92FA # +0xE7FB 0x9344 # +0xE7FC 0x932E # +0xE840 0x9319 # +0xE841 0x9322 # +0xE842 0x931A # +0xE843 0x9323 # +0xE844 0x933A # +0xE845 0x9335 # +0xE846 0x933B # +0xE847 0x935C # +0xE848 0x9360 # +0xE849 0x937C # +0xE84A 0x936E # +0xE84B 0x9356 # +0xE84C 0x93B0 # +0xE84D 0x93AC # +0xE84E 0x93AD # +0xE84F 0x9394 # +0xE850 0x93B9 # +0xE851 0x93D6 # +0xE852 0x93D7 # +0xE853 0x93E8 # +0xE854 0x93E5 # +0xE855 0x93D8 # +0xE856 0x93C3 # +0xE857 0x93DD # +0xE858 0x93D0 # +0xE859 0x93C8 # +0xE85A 0x93E4 # +0xE85B 0x941A # +0xE85C 0x9414 # +0xE85D 0x9413 # +0xE85E 0x9403 # +0xE85F 0x9407 # +0xE860 0x9410 # +0xE861 0x9436 # +0xE862 0x942B # +0xE863 0x9435 # +0xE864 0x9421 # +0xE865 0x943A # +0xE866 0x9441 # +0xE867 0x9452 # +0xE868 0x9444 # +0xE869 0x945B # +0xE86A 0x9460 # +0xE86B 0x9462 # +0xE86C 0x945E # +0xE86D 0x946A # +0xE86E 0x9229 # +0xE86F 0x9470 # +0xE870 0x9475 # +0xE871 0x9477 # +0xE872 0x947D # +0xE873 0x945A # +0xE874 0x947C # +0xE875 0x947E # +0xE876 0x9481 # +0xE877 0x947F # +0xE878 0x9582 # +0xE879 0x9587 # +0xE87A 0x958A # +0xE87B 0x9594 # +0xE87C 0x9596 # +0xE87D 0x9598 # +0xE87E 0x9599 # +0xE880 0x95A0 # +0xE881 0x95A8 # +0xE882 0x95A7 # +0xE883 0x95AD # +0xE884 0x95BC # +0xE885 0x95BB # +0xE886 0x95B9 # +0xE887 0x95BE # +0xE888 0x95CA # +0xE889 0x6FF6 # +0xE88A 0x95C3 # +0xE88B 0x95CD # +0xE88C 0x95CC # +0xE88D 0x95D5 # +0xE88E 0x95D4 # +0xE88F 0x95D6 # +0xE890 0x95DC # +0xE891 0x95E1 # +0xE892 0x95E5 # +0xE893 0x95E2 # +0xE894 0x9621 # +0xE895 0x9628 # +0xE896 0x962E # +0xE897 0x962F # +0xE898 0x9642 # +0xE899 0x964C # +0xE89A 0x964F # +0xE89B 0x964B # +0xE89C 0x9677 # +0xE89D 0x965C # +0xE89E 0x965E # +0xE89F 0x965D # +0xE8A0 0x965F # +0xE8A1 0x9666 # +0xE8A2 0x9672 # +0xE8A3 0x966C # +0xE8A4 0x968D # +0xE8A5 0x9698 # +0xE8A6 0x9695 # +0xE8A7 0x9697 # +0xE8A8 0x96AA # +0xE8A9 0x96A7 # +0xE8AA 0x96B1 # +0xE8AB 0x96B2 # +0xE8AC 0x96B0 # +0xE8AD 0x96B4 # +0xE8AE 0x96B6 # +0xE8AF 0x96B8 # +0xE8B0 0x96B9 # +0xE8B1 0x96CE # +0xE8B2 0x96CB # +0xE8B3 0x96C9 # +0xE8B4 0x96CD # +0xE8B5 0x894D # +0xE8B6 0x96DC # +0xE8B7 0x970D # +0xE8B8 0x96D5 # +0xE8B9 0x96F9 # +0xE8BA 0x9704 # +0xE8BB 0x9706 # +0xE8BC 0x9708 # +0xE8BD 0x9713 # +0xE8BE 0x970E # +0xE8BF 0x9711 # +0xE8C0 0x970F # +0xE8C1 0x9716 # +0xE8C2 0x9719 # +0xE8C3 0x9724 # +0xE8C4 0x972A # +0xE8C5 0x9730 # +0xE8C6 0x9739 # +0xE8C7 0x973D # +0xE8C8 0x973E # +0xE8C9 0x9744 # +0xE8CA 0x9746 # +0xE8CB 0x9748 # +0xE8CC 0x9742 # +0xE8CD 0x9749 # +0xE8CE 0x975C # +0xE8CF 0x9760 # +0xE8D0 0x9764 # +0xE8D1 0x9766 # +0xE8D2 0x9768 # +0xE8D3 0x52D2 # +0xE8D4 0x976B # +0xE8D5 0x9771 # +0xE8D6 0x9779 # +0xE8D7 0x9785 # +0xE8D8 0x977C # +0xE8D9 0x9781 # +0xE8DA 0x977A # +0xE8DB 0x9786 # +0xE8DC 0x978B # +0xE8DD 0x978F # +0xE8DE 0x9790 # +0xE8DF 0x979C # +0xE8E0 0x97A8 # +0xE8E1 0x97A6 # +0xE8E2 0x97A3 # +0xE8E3 0x97B3 # +0xE8E4 0x97B4 # +0xE8E5 0x97C3 # +0xE8E6 0x97C6 # +0xE8E7 0x97C8 # +0xE8E8 0x97CB # +0xE8E9 0x97DC # +0xE8EA 0x97ED # +0xE8EB 0x9F4F # +0xE8EC 0x97F2 # +0xE8ED 0x7ADF # +0xE8EE 0x97F6 # +0xE8EF 0x97F5 # +0xE8F0 0x980F # +0xE8F1 0x980C # +0xE8F2 0x9838 # +0xE8F3 0x9824 # +0xE8F4 0x9821 # +0xE8F5 0x9837 # +0xE8F6 0x983D # +0xE8F7 0x9846 # +0xE8F8 0x984F # +0xE8F9 0x984B # +0xE8FA 0x986B # +0xE8FB 0x986F # +0xE8FC 0x9870 # +0xE940 0x9871 # +0xE941 0x9874 # +0xE942 0x9873 # +0xE943 0x98AA # +0xE944 0x98AF # +0xE945 0x98B1 # +0xE946 0x98B6 # +0xE947 0x98C4 # +0xE948 0x98C3 # +0xE949 0x98C6 # +0xE94A 0x98E9 # +0xE94B 0x98EB # +0xE94C 0x9903 # +0xE94D 0x9909 # +0xE94E 0x9912 # +0xE94F 0x9914 # +0xE950 0x9918 # +0xE951 0x9921 # +0xE952 0x991D # +0xE953 0x991E # +0xE954 0x9924 # +0xE955 0x9920 # +0xE956 0x992C # +0xE957 0x992E # +0xE958 0x993D # +0xE959 0x993E # +0xE95A 0x9942 # +0xE95B 0x9949 # +0xE95C 0x9945 # +0xE95D 0x9950 # +0xE95E 0x994B # +0xE95F 0x9951 # +0xE960 0x9952 # +0xE961 0x994C # +0xE962 0x9955 # +0xE963 0x9997 # +0xE964 0x9998 # +0xE965 0x99A5 # +0xE966 0x99AD # +0xE967 0x99AE # +0xE968 0x99BC # +0xE969 0x99DF # +0xE96A 0x99DB # +0xE96B 0x99DD # +0xE96C 0x99D8 # +0xE96D 0x99D1 # +0xE96E 0x99ED # +0xE96F 0x99EE # +0xE970 0x99F1 # +0xE971 0x99F2 # +0xE972 0x99FB # +0xE973 0x99F8 # +0xE974 0x9A01 # +0xE975 0x9A0F # +0xE976 0x9A05 # +0xE977 0x99E2 # +0xE978 0x9A19 # +0xE979 0x9A2B # +0xE97A 0x9A37 # +0xE97B 0x9A45 # +0xE97C 0x9A42 # +0xE97D 0x9A40 # +0xE97E 0x9A43 # +0xE980 0x9A3E # +0xE981 0x9A55 # +0xE982 0x9A4D # +0xE983 0x9A5B # +0xE984 0x9A57 # +0xE985 0x9A5F # +0xE986 0x9A62 # +0xE987 0x9A65 # +0xE988 0x9A64 # +0xE989 0x9A69 # +0xE98A 0x9A6B # +0xE98B 0x9A6A # +0xE98C 0x9AAD # +0xE98D 0x9AB0 # +0xE98E 0x9ABC # +0xE98F 0x9AC0 # +0xE990 0x9ACF # +0xE991 0x9AD1 # +0xE992 0x9AD3 # +0xE993 0x9AD4 # +0xE994 0x9ADE # +0xE995 0x9ADF # +0xE996 0x9AE2 # +0xE997 0x9AE3 # +0xE998 0x9AE6 # +0xE999 0x9AEF # +0xE99A 0x9AEB # +0xE99B 0x9AEE # +0xE99C 0x9AF4 # +0xE99D 0x9AF1 # +0xE99E 0x9AF7 # +0xE99F 0x9AFB # +0xE9A0 0x9B06 # +0xE9A1 0x9B18 # +0xE9A2 0x9B1A # +0xE9A3 0x9B1F # +0xE9A4 0x9B22 # +0xE9A5 0x9B23 # +0xE9A6 0x9B25 # +0xE9A7 0x9B27 # +0xE9A8 0x9B28 # +0xE9A9 0x9B29 # +0xE9AA 0x9B2A # +0xE9AB 0x9B2E # +0xE9AC 0x9B2F # +0xE9AD 0x9B32 # +0xE9AE 0x9B44 # +0xE9AF 0x9B43 # +0xE9B0 0x9B4F # +0xE9B1 0x9B4D # +0xE9B2 0x9B4E # +0xE9B3 0x9B51 # +0xE9B4 0x9B58 # +0xE9B5 0x9B74 # +0xE9B6 0x9B93 # +0xE9B7 0x9B83 # +0xE9B8 0x9B91 # +0xE9B9 0x9B96 # +0xE9BA 0x9B97 # +0xE9BB 0x9B9F # +0xE9BC 0x9BA0 # +0xE9BD 0x9BA8 # +0xE9BE 0x9BB4 # +0xE9BF 0x9BC0 # +0xE9C0 0x9BCA # +0xE9C1 0x9BB9 # +0xE9C2 0x9BC6 # +0xE9C3 0x9BCF # +0xE9C4 0x9BD1 # +0xE9C5 0x9BD2 # +0xE9C6 0x9BE3 # +0xE9C7 0x9BE2 # +0xE9C8 0x9BE4 # +0xE9C9 0x9BD4 # +0xE9CA 0x9BE1 # +0xE9CB 0x9C3A # +0xE9CC 0x9BF2 # +0xE9CD 0x9BF1 # +0xE9CE 0x9BF0 # +0xE9CF 0x9C15 # +0xE9D0 0x9C14 # +0xE9D1 0x9C09 # +0xE9D2 0x9C13 # +0xE9D3 0x9C0C # +0xE9D4 0x9C06 # +0xE9D5 0x9C08 # +0xE9D6 0x9C12 # +0xE9D7 0x9C0A # +0xE9D8 0x9C04 # +0xE9D9 0x9C2E # +0xE9DA 0x9C1B # +0xE9DB 0x9C25 # +0xE9DC 0x9C24 # +0xE9DD 0x9C21 # +0xE9DE 0x9C30 # +0xE9DF 0x9C47 # +0xE9E0 0x9C32 # +0xE9E1 0x9C46 # +0xE9E2 0x9C3E # +0xE9E3 0x9C5A # +0xE9E4 0x9C60 # +0xE9E5 0x9C67 # +0xE9E6 0x9C76 # +0xE9E7 0x9C78 # +0xE9E8 0x9CE7 # +0xE9E9 0x9CEC # +0xE9EA 0x9CF0 # +0xE9EB 0x9D09 # +0xE9EC 0x9D08 # +0xE9ED 0x9CEB # +0xE9EE 0x9D03 # +0xE9EF 0x9D06 # +0xE9F0 0x9D2A # +0xE9F1 0x9D26 # +0xE9F2 0x9DAF # +0xE9F3 0x9D23 # +0xE9F4 0x9D1F # +0xE9F5 0x9D44 # +0xE9F6 0x9D15 # +0xE9F7 0x9D12 # +0xE9F8 0x9D41 # +0xE9F9 0x9D3F # +0xE9FA 0x9D3E # +0xE9FB 0x9D46 # +0xE9FC 0x9D48 # +0xEA40 0x9D5D # +0xEA41 0x9D5E # +0xEA42 0x9D64 # +0xEA43 0x9D51 # +0xEA44 0x9D50 # +0xEA45 0x9D59 # +0xEA46 0x9D72 # +0xEA47 0x9D89 # +0xEA48 0x9D87 # +0xEA49 0x9DAB # +0xEA4A 0x9D6F # +0xEA4B 0x9D7A # +0xEA4C 0x9D9A # +0xEA4D 0x9DA4 # +0xEA4E 0x9DA9 # +0xEA4F 0x9DB2 # +0xEA50 0x9DC4 # +0xEA51 0x9DC1 # +0xEA52 0x9DBB # +0xEA53 0x9DB8 # +0xEA54 0x9DBA # +0xEA55 0x9DC6 # +0xEA56 0x9DCF # +0xEA57 0x9DC2 # +0xEA58 0x9DD9 # +0xEA59 0x9DD3 # +0xEA5A 0x9DF8 # +0xEA5B 0x9DE6 # +0xEA5C 0x9DED # +0xEA5D 0x9DEF # +0xEA5E 0x9DFD # +0xEA5F 0x9E1A # +0xEA60 0x9E1B # +0xEA61 0x9E1E # +0xEA62 0x9E75 # +0xEA63 0x9E79 # +0xEA64 0x9E7D # +0xEA65 0x9E81 # +0xEA66 0x9E88 # +0xEA67 0x9E8B # +0xEA68 0x9E8C # +0xEA69 0x9E92 # +0xEA6A 0x9E95 # +0xEA6B 0x9E91 # +0xEA6C 0x9E9D # +0xEA6D 0x9EA5 # +0xEA6E 0x9EA9 # +0xEA6F 0x9EB8 # +0xEA70 0x9EAA # +0xEA71 0x9EAD # +0xEA72 0x9761 # +0xEA73 0x9ECC # +0xEA74 0x9ECE # +0xEA75 0x9ECF # +0xEA76 0x9ED0 # +0xEA77 0x9ED4 # +0xEA78 0x9EDC # +0xEA79 0x9EDE # +0xEA7A 0x9EDD # +0xEA7B 0x9EE0 # +0xEA7C 0x9EE5 # +0xEA7D 0x9EE8 # +0xEA7E 0x9EEF # +0xEA80 0x9EF4 # +0xEA81 0x9EF6 # +0xEA82 0x9EF7 # +0xEA83 0x9EF9 # +0xEA84 0x9EFB # +0xEA85 0x9EFC # +0xEA86 0x9EFD # +0xEA87 0x9F07 # +0xEA88 0x9F08 # +0xEA89 0x76B7 # +0xEA8A 0x9F15 # +0xEA8B 0x9F21 # +0xEA8C 0x9F2C # +0xEA8D 0x9F3E # +0xEA8E 0x9F4A # +0xEA8F 0x9F52 # +0xEA90 0x9F54 # +0xEA91 0x9F63 # +0xEA92 0x9F5F # +0xEA93 0x9F60 # +0xEA94 0x9F61 # +0xEA95 0x9F66 # +0xEA96 0x9F67 # +0xEA97 0x9F6C # +0xEA98 0x9F6A # +0xEA99 0x9F77 # +0xEA9A 0x9F72 # +0xEA9B 0x9F76 # +0xEA9C 0x9F95 # +0xEA9D 0x9F9C # +0xEA9E 0x9FA0 # +0xEA9F 0x582F # +0xEAA0 0x69C7 # +0xEAA1 0x9059 # +0xEAA2 0x7464 # +0xEAA3 0x51DC # +0xEAA4 0x7199 # + +# Apple additions - vertical forms +0xEB41 0x3001+0xF87E # vertical form for IDEOGRAPHIC COMMA +0xEB42 0x3002+0xF87E # vertical form for IDEOGRAPHIC FULL STOP +0xEB50 0xFFE3+0xF87E # vertical form for FULLWIDTH MACRON +0xEB51 0xFE33 # PRESENTATION FORM FOR VERTICAL LOW LINE, U+FF3F +0xEB5B 0x30FC+0xF87E # vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xEB5C 0xFE31 # PRESENTATION FORM FOR VERTICAL EM DASH, U+2014 +0xEB5D 0x2010+0xF87E # vertical form for HYPHEN +0xEB60 0x301C+0xF87E # vertical form for WAVE DASH +0xEB61 0x2016+0xF87E # vertical form for DOUBLE VERTICAL LINE +0xEB62 0xFF5C+0xF87E # vertical form for FULLWIDTH VERTICAL LINE +0xEB63 0x2026+0xF87E # vertical form for HORIZONTAL ELLIPSIS +0xEB64 0xFE30 # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER, U+2025 +0xEB69 0xFE35 # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS, U+FF08 +0xEB6A 0xFE36 # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS, U+FF09 +0xEB6B 0xFE39 # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET, U+3014 +0xEB6C 0xFE3A # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET, U+3015 +0xEB6D 0xFF3B+0xF87E # vertical form for FULLWIDTH LEFT SQUARE BRACKET # or for Unicode 4.0, 0xFE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +0xEB6E 0xFF3D+0xF87E # vertical form for FULLWIDTH RIGHT SQUARE BRACKET # or for Unicode 4.0, 0xFE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +0xEB6F 0xFE37 # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET, U+FF5B +0xEB70 0xFE38 # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET, U+FF5D +0xEB71 0xFE3F # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET, U+3008 +0xEB72 0xFE40 # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET, U+3009 +0xEB73 0xFE3D # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET, U+300A +0xEB74 0xFE3E # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET, U+300B +0xEB75 0xFE41 # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET, U+300C +0xEB76 0xFE42 # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET, U+300D +0xEB77 0xFE43 # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET, U+300E +0xEB78 0xFE44 # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET, U+300F +0xEB79 0xFE3B # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET, U+3010 +0xEB7A 0xFE3C # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET, U+3011 +0xEB81 0xFF1D+0xF87E # vertical form for FULLWIDTH EQUALS SIGN +0xEC9F 0x3041+0xF87E # vertical form for HIRAGANA LETTER SMALL A +0xECA1 0x3043+0xF87E # vertical form for HIRAGANA LETTER SMALL I +0xECA3 0x3045+0xF87E # vertical form for HIRAGANA LETTER SMALL U +0xECA5 0x3047+0xF87E # vertical form for HIRAGANA LETTER SMALL E +0xECA7 0x3049+0xF87E # vertical form for HIRAGANA LETTER SMALL O +0xECC1 0x3063+0xF87E # vertical form for HIRAGANA LETTER SMALL TU +0xECE1 0x3083+0xF87E # vertical form for HIRAGANA LETTER SMALL YA +0xECE3 0x3085+0xF87E # vertical form for HIRAGANA LETTER SMALL YU +0xECE5 0x3087+0xF87E # vertical form for HIRAGANA LETTER SMALL YO +0xECEC 0x308E+0xF87E # vertical form for HIRAGANA LETTER SMALL WA +0xED40 0x30A1+0xF87E # vertical form for KATAKANA LETTER SMALL A +0xED42 0x30A3+0xF87E # vertical form for KATAKANA LETTER SMALL I +0xED44 0x30A5+0xF87E # vertical form for KATAKANA LETTER SMALL U +0xED46 0x30A7+0xF87E # vertical form for KATAKANA LETTER SMALL E +0xED48 0x30A9+0xF87E # vertical form for KATAKANA LETTER SMALL O +0xED62 0x30C3+0xF87E # vertical form for KATAKANA LETTER SMALL TU +0xED83 0x30E3+0xF87E # vertical form for KATAKANA LETTER SMALL YA +0xED85 0x30E5+0xF87E # vertical form for KATAKANA LETTER SMALL YU +0xED87 0x30E7+0xF87E # vertical form for KATAKANA LETTER SMALL YO +0xED8E 0x30EE+0xF87E # vertical form for KATAKANA LETTER SMALL WA +0xED95 0x30F5+0xF87E # vertical form for KATAKANA LETTER SMALL KA +0xED96 0x30F6+0xF87E # vertical form for KATAKANA LETTER SMALL KE diff --git a/ext/mbstring/tests/data/SHIFTJIS.txt b/ext/mbstring/tests/data/SHIFTJIS.txt new file mode 100644 index 0000000000000..757d5a10995d1 --- /dev/null +++ b/ext/mbstring/tests/data/SHIFTJIS.txt @@ -0,0 +1,7097 @@ +# SHIFTJIS.TXT +# Date: 2015-12-02 23:52:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: Shift-JIS to Unicode +# Unicode version: 1.1 +# Table version: 2.0 +# Table format: Format A +# Date: 2011 October 14 (header updated: 2015 December 02) +# +# General notes: +# +# +# This table contains one set of mappings from Shift-JIS into Unicode. +# Note that these data are *possible* mappings only and may not be the +# same as those used by actual products, nor may they be the best suited +# for all uses. For more information on the mappings between various code +# pages incorporating the repertoire of Shift-JIS and Unicode, consult the +# VENDORS mapping data. +# +# +# Format: Three tab-separated columns +# Column #1 is the shift-JIS code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# The official names for Unicode characters U+4E00 +# to U+9FA5, inclusive, is "CJK UNIFIED IDEOGRAPH-XXXX", +# where XXXX is the code point. Including all these +# names in this file increases its size substantially +# and needlessly. The token "" is used for the +# name of these characters. If necessary, it can be +# expanded algorithmically by a parser or editor. +# +# The entries are ordered by their Shift-JIS codes as follows: +# Single-byte characters precede double-byte characters +# The single-byte and double-byte blocks are in ascending +# hexadecimal order +# There is an alternative order some people might be preferred, +# where all the entries are in order of the top (or only) byte. +# This alternate order can be generated from the one given here +# by a simple sort. +# +# Revision History: +# +# [v2.0, 2015 December 02] +# updates to copyright notice and terms of use +# no changes to character mappings +# +# [v1.0, 2011 October 14] +# Updated terms of use to current wording. +# Updated contact information. +# No changes to the mapping data. +# +# [v0.9, 8 March 1994] +# First release. +# +# Use the Unicode reporting form +# for any questions or comments or to report errors in the data. +# +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x00A5 # YEN SIGN +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x203E # OVERLINE +0x8140 0x3000 # IDEOGRAPHIC SPACE +0x8141 0x3001 # IDEOGRAPHIC COMMA +0x8142 0x3002 # IDEOGRAPHIC FULL STOP +0x8143 0xFF0C # FULLWIDTH COMMA +0x8144 0xFF0E # FULLWIDTH FULL STOP +0x8145 0x30FB # KATAKANA MIDDLE DOT +0x8146 0xFF1A # FULLWIDTH COLON +0x8147 0xFF1B # FULLWIDTH SEMICOLON +0x8148 0xFF1F # FULLWIDTH QUESTION MARK +0x8149 0xFF01 # FULLWIDTH EXCLAMATION MARK +0x814A 0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B 0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C 0x00B4 # ACUTE ACCENT +0x814D 0xFF40 # FULLWIDTH GRAVE ACCENT +0x814E 0x00A8 # DIAERESIS +0x814F 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 0xFFE3 # FULLWIDTH MACRON +0x8151 0xFF3F # FULLWIDTH LOW LINE +0x8152 0x30FD # KATAKANA ITERATION MARK +0x8153 0x30FE # KATAKANA VOICED ITERATION MARK +0x8154 0x309D # HIRAGANA ITERATION MARK +0x8155 0x309E # HIRAGANA VOICED ITERATION MARK +0x8156 0x3003 # DITTO MARK +0x8157 0x4EDD # +0x8158 0x3005 # IDEOGRAPHIC ITERATION MARK +0x8159 0x3006 # IDEOGRAPHIC CLOSING MARK +0x815A 0x3007 # IDEOGRAPHIC NUMBER ZERO +0x815B 0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C 0x2015 # HORIZONTAL BAR +0x815D 0x2010 # HYPHEN +0x815E 0xFF0F # FULLWIDTH SOLIDUS +0x815F 0x005C # REVERSE SOLIDUS +0x8160 0x301C # WAVE DASH +0x8161 0x2016 # DOUBLE VERTICAL LINE +0x8162 0xFF5C # FULLWIDTH VERTICAL LINE +0x8163 0x2026 # HORIZONTAL ELLIPSIS +0x8164 0x2025 # TWO DOT LEADER +0x8165 0x2018 # LEFT SINGLE QUOTATION MARK +0x8166 0x2019 # RIGHT SINGLE QUOTATION MARK +0x8167 0x201C # LEFT DOUBLE QUOTATION MARK +0x8168 0x201D # RIGHT DOUBLE QUOTATION MARK +0x8169 0xFF08 # FULLWIDTH LEFT PARENTHESIS +0x816A 0xFF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B 0x3014 # LEFT TORTOISE SHELL BRACKET +0x816C 0x3015 # RIGHT TORTOISE SHELL BRACKET +0x816D 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F 0xFF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 0x3008 # LEFT ANGLE BRACKET +0x8172 0x3009 # RIGHT ANGLE BRACKET +0x8173 0x300A # LEFT DOUBLE ANGLE BRACKET +0x8174 0x300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 0x300C # LEFT CORNER BRACKET +0x8176 0x300D # RIGHT CORNER BRACKET +0x8177 0x300E # LEFT WHITE CORNER BRACKET +0x8178 0x300F # RIGHT WHITE CORNER BRACKET +0x8179 0x3010 # LEFT BLACK LENTICULAR BRACKET +0x817A 0x3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B 0xFF0B # FULLWIDTH PLUS SIGN +0x817C 0x2212 # MINUS SIGN +0x817D 0x00B1 # PLUS-MINUS SIGN +0x817E 0x00D7 # MULTIPLICATION SIGN +0x8180 0x00F7 # DIVISION SIGN +0x8181 0xFF1D # FULLWIDTH EQUALS SIGN +0x8182 0x2260 # NOT EQUAL TO +0x8183 0xFF1C # FULLWIDTH LESS-THAN SIGN +0x8184 0xFF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 0x2266 # LESS-THAN OVER EQUAL TO +0x8186 0x2267 # GREATER-THAN OVER EQUAL TO +0x8187 0x221E # INFINITY +0x8188 0x2234 # THEREFORE +0x8189 0x2642 # MALE SIGN +0x818A 0x2640 # FEMALE SIGN +0x818B 0x00B0 # DEGREE SIGN +0x818C 0x2032 # PRIME +0x818D 0x2033 # DOUBLE PRIME +0x818E 0x2103 # DEGREE CELSIUS +0x818F 0xFFE5 # FULLWIDTH YEN SIGN +0x8190 0xFF04 # FULLWIDTH DOLLAR SIGN +0x8191 0x00A2 # CENT SIGN +0x8192 0x00A3 # POUND SIGN +0x8193 0xFF05 # FULLWIDTH PERCENT SIGN +0x8194 0xFF03 # FULLWIDTH NUMBER SIGN +0x8195 0xFF06 # FULLWIDTH AMPERSAND +0x8196 0xFF0A # FULLWIDTH ASTERISK +0x8197 0xFF20 # FULLWIDTH COMMERCIAL AT +0x8198 0x00A7 # SECTION SIGN +0x8199 0x2606 # WHITE STAR +0x819A 0x2605 # BLACK STAR +0x819B 0x25CB # WHITE CIRCLE +0x819C 0x25CF # BLACK CIRCLE +0x819D 0x25CE # BULLSEYE +0x819E 0x25C7 # WHITE DIAMOND +0x819F 0x25C6 # BLACK DIAMOND +0x81A0 0x25A1 # WHITE SQUARE +0x81A1 0x25A0 # BLACK SQUARE +0x81A2 0x25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 0x25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 0x25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 0x25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 0x203B # REFERENCE MARK +0x81A7 0x3012 # POSTAL MARK +0x81A8 0x2192 # RIGHTWARDS ARROW +0x81A9 0x2190 # LEFTWARDS ARROW +0x81AA 0x2191 # UPWARDS ARROW +0x81AB 0x2193 # DOWNWARDS ARROW +0x81AC 0x3013 # GETA MARK +0x81B8 0x2208 # ELEMENT OF +0x81B9 0x220B # CONTAINS AS MEMBER +0x81BA 0x2286 # SUBSET OF OR EQUAL TO +0x81BB 0x2287 # SUPERSET OF OR EQUAL TO +0x81BC 0x2282 # SUBSET OF +0x81BD 0x2283 # SUPERSET OF +0x81BE 0x222A # UNION +0x81BF 0x2229 # INTERSECTION +0x81C8 0x2227 # LOGICAL AND +0x81C9 0x2228 # LOGICAL OR +0x81CA 0x00AC # NOT SIGN +0x81CB 0x21D2 # RIGHTWARDS DOUBLE ARROW +0x81CC 0x21D4 # LEFT RIGHT DOUBLE ARROW +0x81CD 0x2200 # FOR ALL +0x81CE 0x2203 # THERE EXISTS +0x81DA 0x2220 # ANGLE +0x81DB 0x22A5 # UP TACK +0x81DC 0x2312 # ARC +0x81DD 0x2202 # PARTIAL DIFFERENTIAL +0x81DE 0x2207 # NABLA +0x81DF 0x2261 # IDENTICAL TO +0x81E0 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +0x81E1 0x226A # MUCH LESS-THAN +0x81E2 0x226B # MUCH GREATER-THAN +0x81E3 0x221A # SQUARE ROOT +0x81E4 0x223D # REVERSED TILDE +0x81E5 0x221D # PROPORTIONAL TO +0x81E6 0x2235 # BECAUSE +0x81E7 0x222B # INTEGRAL +0x81E8 0x222C # DOUBLE INTEGRAL +0x81F0 0x212B # ANGSTROM SIGN +0x81F1 0x2030 # PER MILLE SIGN +0x81F2 0x266F # MUSIC SHARP SIGN +0x81F3 0x266D # MUSIC FLAT SIGN +0x81F4 0x266A # EIGHTH NOTE +0x81F5 0x2020 # DAGGER +0x81F6 0x2021 # DOUBLE DAGGER +0x81F7 0x00B6 # PILCROW SIGN +0x81FC 0x25EF # LARGE CIRCLE +0x824F 0xFF10 # FULLWIDTH DIGIT ZERO +0x8250 0xFF11 # FULLWIDTH DIGIT ONE +0x8251 0xFF12 # FULLWIDTH DIGIT TWO +0x8252 0xFF13 # FULLWIDTH DIGIT THREE +0x8253 0xFF14 # FULLWIDTH DIGIT FOUR +0x8254 0xFF15 # FULLWIDTH DIGIT FIVE +0x8255 0xFF16 # FULLWIDTH DIGIT SIX +0x8256 0xFF17 # FULLWIDTH DIGIT SEVEN +0x8257 0xFF18 # FULLWIDTH DIGIT EIGHT +0x8258 0xFF19 # FULLWIDTH DIGIT NINE +0x8260 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x8281 0xFF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 0xFF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 0xFF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 0xFF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 0xFF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 0xFF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 0xFF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 0xFF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 0xFF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A 0xFF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B 0xFF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C 0xFF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D 0xFF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E 0xFF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F 0xFF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 0xFF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 0xFF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 0xFF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 0xFF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 0xFF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 0xFF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 0xFF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 0xFF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829F 0x3041 # HIRAGANA LETTER SMALL A +0x82A0 0x3042 # HIRAGANA LETTER A +0x82A1 0x3043 # HIRAGANA LETTER SMALL I +0x82A2 0x3044 # HIRAGANA LETTER I +0x82A3 0x3045 # HIRAGANA LETTER SMALL U +0x82A4 0x3046 # HIRAGANA LETTER U +0x82A5 0x3047 # HIRAGANA LETTER SMALL E +0x82A6 0x3048 # HIRAGANA LETTER E +0x82A7 0x3049 # HIRAGANA LETTER SMALL O +0x82A8 0x304A # HIRAGANA LETTER O +0x82A9 0x304B # HIRAGANA LETTER KA +0x82AA 0x304C # HIRAGANA LETTER GA +0x82AB 0x304D # HIRAGANA LETTER KI +0x82AC 0x304E # HIRAGANA LETTER GI +0x82AD 0x304F # HIRAGANA LETTER KU +0x82AE 0x3050 # HIRAGANA LETTER GU +0x82AF 0x3051 # HIRAGANA LETTER KE +0x82B0 0x3052 # HIRAGANA LETTER GE +0x82B1 0x3053 # HIRAGANA LETTER KO +0x82B2 0x3054 # HIRAGANA LETTER GO +0x82B3 0x3055 # HIRAGANA LETTER SA +0x82B4 0x3056 # HIRAGANA LETTER ZA +0x82B5 0x3057 # HIRAGANA LETTER SI +0x82B6 0x3058 # HIRAGANA LETTER ZI +0x82B7 0x3059 # HIRAGANA LETTER SU +0x82B8 0x305A # HIRAGANA LETTER ZU +0x82B9 0x305B # HIRAGANA LETTER SE +0x82BA 0x305C # HIRAGANA LETTER ZE +0x82BB 0x305D # HIRAGANA LETTER SO +0x82BC 0x305E # HIRAGANA LETTER ZO +0x82BD 0x305F # HIRAGANA LETTER TA +0x82BE 0x3060 # HIRAGANA LETTER DA +0x82BF 0x3061 # HIRAGANA LETTER TI +0x82C0 0x3062 # HIRAGANA LETTER DI +0x82C1 0x3063 # HIRAGANA LETTER SMALL TU +0x82C2 0x3064 # HIRAGANA LETTER TU +0x82C3 0x3065 # HIRAGANA LETTER DU +0x82C4 0x3066 # HIRAGANA LETTER TE +0x82C5 0x3067 # HIRAGANA LETTER DE +0x82C6 0x3068 # HIRAGANA LETTER TO +0x82C7 0x3069 # HIRAGANA LETTER DO +0x82C8 0x306A # HIRAGANA LETTER NA +0x82C9 0x306B # HIRAGANA LETTER NI +0x82CA 0x306C # HIRAGANA LETTER NU +0x82CB 0x306D # HIRAGANA LETTER NE +0x82CC 0x306E # HIRAGANA LETTER NO +0x82CD 0x306F # HIRAGANA LETTER HA +0x82CE 0x3070 # HIRAGANA LETTER BA +0x82CF 0x3071 # HIRAGANA LETTER PA +0x82D0 0x3072 # HIRAGANA LETTER HI +0x82D1 0x3073 # HIRAGANA LETTER BI +0x82D2 0x3074 # HIRAGANA LETTER PI +0x82D3 0x3075 # HIRAGANA LETTER HU +0x82D4 0x3076 # HIRAGANA LETTER BU +0x82D5 0x3077 # HIRAGANA LETTER PU +0x82D6 0x3078 # HIRAGANA LETTER HE +0x82D7 0x3079 # HIRAGANA LETTER BE +0x82D8 0x307A # HIRAGANA LETTER PE +0x82D9 0x307B # HIRAGANA LETTER HO +0x82DA 0x307C # HIRAGANA LETTER BO +0x82DB 0x307D # HIRAGANA LETTER PO +0x82DC 0x307E # HIRAGANA LETTER MA +0x82DD 0x307F # HIRAGANA LETTER MI +0x82DE 0x3080 # HIRAGANA LETTER MU +0x82DF 0x3081 # HIRAGANA LETTER ME +0x82E0 0x3082 # HIRAGANA LETTER MO +0x82E1 0x3083 # HIRAGANA LETTER SMALL YA +0x82E2 0x3084 # HIRAGANA LETTER YA +0x82E3 0x3085 # HIRAGANA LETTER SMALL YU +0x82E4 0x3086 # HIRAGANA LETTER YU +0x82E5 0x3087 # HIRAGANA LETTER SMALL YO +0x82E6 0x3088 # HIRAGANA LETTER YO +0x82E7 0x3089 # HIRAGANA LETTER RA +0x82E8 0x308A # HIRAGANA LETTER RI +0x82E9 0x308B # HIRAGANA LETTER RU +0x82EA 0x308C # HIRAGANA LETTER RE +0x82EB 0x308D # HIRAGANA LETTER RO +0x82EC 0x308E # HIRAGANA LETTER SMALL WA +0x82ED 0x308F # HIRAGANA LETTER WA +0x82EE 0x3090 # HIRAGANA LETTER WI +0x82EF 0x3091 # HIRAGANA LETTER WE +0x82F0 0x3092 # HIRAGANA LETTER WO +0x82F1 0x3093 # HIRAGANA LETTER N +0x8340 0x30A1 # KATAKANA LETTER SMALL A +0x8341 0x30A2 # KATAKANA LETTER A +0x8342 0x30A3 # KATAKANA LETTER SMALL I +0x8343 0x30A4 # KATAKANA LETTER I +0x8344 0x30A5 # KATAKANA LETTER SMALL U +0x8345 0x30A6 # KATAKANA LETTER U +0x8346 0x30A7 # KATAKANA LETTER SMALL E +0x8347 0x30A8 # KATAKANA LETTER E +0x8348 0x30A9 # KATAKANA LETTER SMALL O +0x8349 0x30AA # KATAKANA LETTER O +0x834A 0x30AB # KATAKANA LETTER KA +0x834B 0x30AC # KATAKANA LETTER GA +0x834C 0x30AD # KATAKANA LETTER KI +0x834D 0x30AE # KATAKANA LETTER GI +0x834E 0x30AF # KATAKANA LETTER KU +0x834F 0x30B0 # KATAKANA LETTER GU +0x8350 0x30B1 # KATAKANA LETTER KE +0x8351 0x30B2 # KATAKANA LETTER GE +0x8352 0x30B3 # KATAKANA LETTER KO +0x8353 0x30B4 # KATAKANA LETTER GO +0x8354 0x30B5 # KATAKANA LETTER SA +0x8355 0x30B6 # KATAKANA LETTER ZA +0x8356 0x30B7 # KATAKANA LETTER SI +0x8357 0x30B8 # KATAKANA LETTER ZI +0x8358 0x30B9 # KATAKANA LETTER SU +0x8359 0x30BA # KATAKANA LETTER ZU +0x835A 0x30BB # KATAKANA LETTER SE +0x835B 0x30BC # KATAKANA LETTER ZE +0x835C 0x30BD # KATAKANA LETTER SO +0x835D 0x30BE # KATAKANA LETTER ZO +0x835E 0x30BF # KATAKANA LETTER TA +0x835F 0x30C0 # KATAKANA LETTER DA +0x8360 0x30C1 # KATAKANA LETTER TI +0x8361 0x30C2 # KATAKANA LETTER DI +0x8362 0x30C3 # KATAKANA LETTER SMALL TU +0x8363 0x30C4 # KATAKANA LETTER TU +0x8364 0x30C5 # KATAKANA LETTER DU +0x8365 0x30C6 # KATAKANA LETTER TE +0x8366 0x30C7 # KATAKANA LETTER DE +0x8367 0x30C8 # KATAKANA LETTER TO +0x8368 0x30C9 # KATAKANA LETTER DO +0x8369 0x30CA # KATAKANA LETTER NA +0x836A 0x30CB # KATAKANA LETTER NI +0x836B 0x30CC # KATAKANA LETTER NU +0x836C 0x30CD # KATAKANA LETTER NE +0x836D 0x30CE # KATAKANA LETTER NO +0x836E 0x30CF # KATAKANA LETTER HA +0x836F 0x30D0 # KATAKANA LETTER BA +0x8370 0x30D1 # KATAKANA LETTER PA +0x8371 0x30D2 # KATAKANA LETTER HI +0x8372 0x30D3 # KATAKANA LETTER BI +0x8373 0x30D4 # KATAKANA LETTER PI +0x8374 0x30D5 # KATAKANA LETTER HU +0x8375 0x30D6 # KATAKANA LETTER BU +0x8376 0x30D7 # KATAKANA LETTER PU +0x8377 0x30D8 # KATAKANA LETTER HE +0x8378 0x30D9 # KATAKANA LETTER BE +0x8379 0x30DA # KATAKANA LETTER PE +0x837A 0x30DB # KATAKANA LETTER HO +0x837B 0x30DC # KATAKANA LETTER BO +0x837C 0x30DD # KATAKANA LETTER PO +0x837D 0x30DE # KATAKANA LETTER MA +0x837E 0x30DF # KATAKANA LETTER MI +0x8380 0x30E0 # KATAKANA LETTER MU +0x8381 0x30E1 # KATAKANA LETTER ME +0x8382 0x30E2 # KATAKANA LETTER MO +0x8383 0x30E3 # KATAKANA LETTER SMALL YA +0x8384 0x30E4 # KATAKANA LETTER YA +0x8385 0x30E5 # KATAKANA LETTER SMALL YU +0x8386 0x30E6 # KATAKANA LETTER YU +0x8387 0x30E7 # KATAKANA LETTER SMALL YO +0x8388 0x30E8 # KATAKANA LETTER YO +0x8389 0x30E9 # KATAKANA LETTER RA +0x838A 0x30EA # KATAKANA LETTER RI +0x838B 0x30EB # KATAKANA LETTER RU +0x838C 0x30EC # KATAKANA LETTER RE +0x838D 0x30ED # KATAKANA LETTER RO +0x838E 0x30EE # KATAKANA LETTER SMALL WA +0x838F 0x30EF # KATAKANA LETTER WA +0x8390 0x30F0 # KATAKANA LETTER WI +0x8391 0x30F1 # KATAKANA LETTER WE +0x8392 0x30F2 # KATAKANA LETTER WO +0x8393 0x30F3 # KATAKANA LETTER N +0x8394 0x30F4 # KATAKANA LETTER VU +0x8395 0x30F5 # KATAKANA LETTER SMALL KA +0x8396 0x30F6 # KATAKANA LETTER SMALL KE +0x839F 0x0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 0x0392 # GREEK CAPITAL LETTER BETA +0x83A1 0x0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 0x0394 # GREEK CAPITAL LETTER DELTA +0x83A3 0x0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 0x0396 # GREEK CAPITAL LETTER ZETA +0x83A5 0x0397 # GREEK CAPITAL LETTER ETA +0x83A6 0x0398 # GREEK CAPITAL LETTER THETA +0x83A7 0x0399 # GREEK CAPITAL LETTER IOTA +0x83A8 0x039A # GREEK CAPITAL LETTER KAPPA +0x83A9 0x039B # GREEK CAPITAL LETTER LAMDA +0x83AA 0x039C # GREEK CAPITAL LETTER MU +0x83AB 0x039D # GREEK CAPITAL LETTER NU +0x83AC 0x039E # GREEK CAPITAL LETTER XI +0x83AD 0x039F # GREEK CAPITAL LETTER OMICRON +0x83AE 0x03A0 # GREEK CAPITAL LETTER PI +0x83AF 0x03A1 # GREEK CAPITAL LETTER RHO +0x83B0 0x03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 0x03A4 # GREEK CAPITAL LETTER TAU +0x83B2 0x03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 0x03A6 # GREEK CAPITAL LETTER PHI +0x83B4 0x03A7 # GREEK CAPITAL LETTER CHI +0x83B5 0x03A8 # GREEK CAPITAL LETTER PSI +0x83B6 0x03A9 # GREEK CAPITAL LETTER OMEGA +0x83BF 0x03B1 # GREEK SMALL LETTER ALPHA +0x83C0 0x03B2 # GREEK SMALL LETTER BETA +0x83C1 0x03B3 # GREEK SMALL LETTER GAMMA +0x83C2 0x03B4 # GREEK SMALL LETTER DELTA +0x83C3 0x03B5 # GREEK SMALL LETTER EPSILON +0x83C4 0x03B6 # GREEK SMALL LETTER ZETA +0x83C5 0x03B7 # GREEK SMALL LETTER ETA +0x83C6 0x03B8 # GREEK SMALL LETTER THETA +0x83C7 0x03B9 # GREEK SMALL LETTER IOTA +0x83C8 0x03BA # GREEK SMALL LETTER KAPPA +0x83C9 0x03BB # GREEK SMALL LETTER LAMDA +0x83CA 0x03BC # GREEK SMALL LETTER MU +0x83CB 0x03BD # GREEK SMALL LETTER NU +0x83CC 0x03BE # GREEK SMALL LETTER XI +0x83CD 0x03BF # GREEK SMALL LETTER OMICRON +0x83CE 0x03C0 # GREEK SMALL LETTER PI +0x83CF 0x03C1 # GREEK SMALL LETTER RHO +0x83D0 0x03C3 # GREEK SMALL LETTER SIGMA +0x83D1 0x03C4 # GREEK SMALL LETTER TAU +0x83D2 0x03C5 # GREEK SMALL LETTER UPSILON +0x83D3 0x03C6 # GREEK SMALL LETTER PHI +0x83D4 0x03C7 # GREEK SMALL LETTER CHI +0x83D5 0x03C8 # GREEK SMALL LETTER PSI +0x83D6 0x03C9 # GREEK SMALL LETTER OMEGA +0x8440 0x0410 # CYRILLIC CAPITAL LETTER A +0x8441 0x0411 # CYRILLIC CAPITAL LETTER BE +0x8442 0x0412 # CYRILLIC CAPITAL LETTER VE +0x8443 0x0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 0x0414 # CYRILLIC CAPITAL LETTER DE +0x8445 0x0415 # CYRILLIC CAPITAL LETTER IE +0x8446 0x0401 # CYRILLIC CAPITAL LETTER IO +0x8447 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 0x0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 0x0418 # CYRILLIC CAPITAL LETTER I +0x844A 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B 0x041A # CYRILLIC CAPITAL LETTER KA +0x844C 0x041B # CYRILLIC CAPITAL LETTER EL +0x844D 0x041C # CYRILLIC CAPITAL LETTER EM +0x844E 0x041D # CYRILLIC CAPITAL LETTER EN +0x844F 0x041E # CYRILLIC CAPITAL LETTER O +0x8450 0x041F # CYRILLIC CAPITAL LETTER PE +0x8451 0x0420 # CYRILLIC CAPITAL LETTER ER +0x8452 0x0421 # CYRILLIC CAPITAL LETTER ES +0x8453 0x0422 # CYRILLIC CAPITAL LETTER TE +0x8454 0x0423 # CYRILLIC CAPITAL LETTER U +0x8455 0x0424 # CYRILLIC CAPITAL LETTER EF +0x8456 0x0425 # CYRILLIC CAPITAL LETTER HA +0x8457 0x0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 0x0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 0x0428 # CYRILLIC CAPITAL LETTER SHA +0x845A 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C 0x042B # CYRILLIC CAPITAL LETTER YERU +0x845D 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E 0x042D # CYRILLIC CAPITAL LETTER E +0x845F 0x042E # CYRILLIC CAPITAL LETTER YU +0x8460 0x042F # CYRILLIC CAPITAL LETTER YA +0x8470 0x0430 # CYRILLIC SMALL LETTER A +0x8471 0x0431 # CYRILLIC SMALL LETTER BE +0x8472 0x0432 # CYRILLIC SMALL LETTER VE +0x8473 0x0433 # CYRILLIC SMALL LETTER GHE +0x8474 0x0434 # CYRILLIC SMALL LETTER DE +0x8475 0x0435 # CYRILLIC SMALL LETTER IE +0x8476 0x0451 # CYRILLIC SMALL LETTER IO +0x8477 0x0436 # CYRILLIC SMALL LETTER ZHE +0x8478 0x0437 # CYRILLIC SMALL LETTER ZE +0x8479 0x0438 # CYRILLIC SMALL LETTER I +0x847A 0x0439 # CYRILLIC SMALL LETTER SHORT I +0x847B 0x043A # CYRILLIC SMALL LETTER KA +0x847C 0x043B # CYRILLIC SMALL LETTER EL +0x847D 0x043C # CYRILLIC SMALL LETTER EM +0x847E 0x043D # CYRILLIC SMALL LETTER EN +0x8480 0x043E # CYRILLIC SMALL LETTER O +0x8481 0x043F # CYRILLIC SMALL LETTER PE +0x8482 0x0440 # CYRILLIC SMALL LETTER ER +0x8483 0x0441 # CYRILLIC SMALL LETTER ES +0x8484 0x0442 # CYRILLIC SMALL LETTER TE +0x8485 0x0443 # CYRILLIC SMALL LETTER U +0x8486 0x0444 # CYRILLIC SMALL LETTER EF +0x8487 0x0445 # CYRILLIC SMALL LETTER HA +0x8488 0x0446 # CYRILLIC SMALL LETTER TSE +0x8489 0x0447 # CYRILLIC SMALL LETTER CHE +0x848A 0x0448 # CYRILLIC SMALL LETTER SHA +0x848B 0x0449 # CYRILLIC SMALL LETTER SHCHA +0x848C 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D 0x044B # CYRILLIC SMALL LETTER YERU +0x848E 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F 0x044D # CYRILLIC SMALL LETTER E +0x8490 0x044E # CYRILLIC SMALL LETTER YU +0x8491 0x044F # CYRILLIC SMALL LETTER YA +0x849F 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x84A0 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x84A1 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x84A2 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84A3 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x84A4 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x84A5 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x84A6 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x84A7 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x84A8 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x84A9 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x84AA 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL +0x84AB 0x2503 # BOX DRAWINGS HEAVY VERTICAL +0x84AC 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT +0x84AD 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT +0x84AE 0x251B # BOX DRAWINGS HEAVY UP AND LEFT +0x84AF 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT +0x84B0 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT +0x84B1 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +0x84B2 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT +0x84B3 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL +0x84B4 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +0x84B5 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +0x84B6 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +0x84B7 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +0x84B8 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +0x84B9 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +0x84BA 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +0x84BB 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +0x84BC 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +0x84BD 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +0x84BE 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +0x889F 0x4E9C # +0x88A0 0x5516 # +0x88A1 0x5A03 # +0x88A2 0x963F # +0x88A3 0x54C0 # +0x88A4 0x611B # +0x88A5 0x6328 # +0x88A6 0x59F6 # +0x88A7 0x9022 # +0x88A8 0x8475 # +0x88A9 0x831C # +0x88AA 0x7A50 # +0x88AB 0x60AA # +0x88AC 0x63E1 # +0x88AD 0x6E25 # +0x88AE 0x65ED # +0x88AF 0x8466 # +0x88B0 0x82A6 # +0x88B1 0x9BF5 # +0x88B2 0x6893 # +0x88B3 0x5727 # +0x88B4 0x65A1 # +0x88B5 0x6271 # +0x88B6 0x5B9B # +0x88B7 0x59D0 # +0x88B8 0x867B # +0x88B9 0x98F4 # +0x88BA 0x7D62 # +0x88BB 0x7DBE # +0x88BC 0x9B8E # +0x88BD 0x6216 # +0x88BE 0x7C9F # +0x88BF 0x88B7 # +0x88C0 0x5B89 # +0x88C1 0x5EB5 # +0x88C2 0x6309 # +0x88C3 0x6697 # +0x88C4 0x6848 # +0x88C5 0x95C7 # +0x88C6 0x978D # +0x88C7 0x674F # +0x88C8 0x4EE5 # +0x88C9 0x4F0A # +0x88CA 0x4F4D # +0x88CB 0x4F9D # +0x88CC 0x5049 # +0x88CD 0x56F2 # +0x88CE 0x5937 # +0x88CF 0x59D4 # +0x88D0 0x5A01 # +0x88D1 0x5C09 # +0x88D2 0x60DF # +0x88D3 0x610F # +0x88D4 0x6170 # +0x88D5 0x6613 # +0x88D6 0x6905 # +0x88D7 0x70BA # +0x88D8 0x754F # +0x88D9 0x7570 # +0x88DA 0x79FB # +0x88DB 0x7DAD # +0x88DC 0x7DEF # +0x88DD 0x80C3 # +0x88DE 0x840E # +0x88DF 0x8863 # +0x88E0 0x8B02 # +0x88E1 0x9055 # +0x88E2 0x907A # +0x88E3 0x533B # +0x88E4 0x4E95 # +0x88E5 0x4EA5 # +0x88E6 0x57DF # +0x88E7 0x80B2 # +0x88E8 0x90C1 # +0x88E9 0x78EF # +0x88EA 0x4E00 # +0x88EB 0x58F1 # +0x88EC 0x6EA2 # +0x88ED 0x9038 # +0x88EE 0x7A32 # +0x88EF 0x8328 # +0x88F0 0x828B # +0x88F1 0x9C2F # +0x88F2 0x5141 # +0x88F3 0x5370 # +0x88F4 0x54BD # +0x88F5 0x54E1 # +0x88F6 0x56E0 # +0x88F7 0x59FB # +0x88F8 0x5F15 # +0x88F9 0x98F2 # +0x88FA 0x6DEB # +0x88FB 0x80E4 # +0x88FC 0x852D # +0x8940 0x9662 # +0x8941 0x9670 # +0x8942 0x96A0 # +0x8943 0x97FB # +0x8944 0x540B # +0x8945 0x53F3 # +0x8946 0x5B87 # +0x8947 0x70CF # +0x8948 0x7FBD # +0x8949 0x8FC2 # +0x894A 0x96E8 # +0x894B 0x536F # +0x894C 0x9D5C # +0x894D 0x7ABA # +0x894E 0x4E11 # +0x894F 0x7893 # +0x8950 0x81FC # +0x8951 0x6E26 # +0x8952 0x5618 # +0x8953 0x5504 # +0x8954 0x6B1D # +0x8955 0x851A # +0x8956 0x9C3B # +0x8957 0x59E5 # +0x8958 0x53A9 # +0x8959 0x6D66 # +0x895A 0x74DC # +0x895B 0x958F # +0x895C 0x5642 # +0x895D 0x4E91 # +0x895E 0x904B # +0x895F 0x96F2 # +0x8960 0x834F # +0x8961 0x990C # +0x8962 0x53E1 # +0x8963 0x55B6 # +0x8964 0x5B30 # +0x8965 0x5F71 # +0x8966 0x6620 # +0x8967 0x66F3 # +0x8968 0x6804 # +0x8969 0x6C38 # +0x896A 0x6CF3 # +0x896B 0x6D29 # +0x896C 0x745B # +0x896D 0x76C8 # +0x896E 0x7A4E # +0x896F 0x9834 # +0x8970 0x82F1 # +0x8971 0x885B # +0x8972 0x8A60 # +0x8973 0x92ED # +0x8974 0x6DB2 # +0x8975 0x75AB # +0x8976 0x76CA # +0x8977 0x99C5 # +0x8978 0x60A6 # +0x8979 0x8B01 # +0x897A 0x8D8A # +0x897B 0x95B2 # +0x897C 0x698E # +0x897D 0x53AD # +0x897E 0x5186 # +0x8980 0x5712 # +0x8981 0x5830 # +0x8982 0x5944 # +0x8983 0x5BB4 # +0x8984 0x5EF6 # +0x8985 0x6028 # +0x8986 0x63A9 # +0x8987 0x63F4 # +0x8988 0x6CBF # +0x8989 0x6F14 # +0x898A 0x708E # +0x898B 0x7114 # +0x898C 0x7159 # +0x898D 0x71D5 # +0x898E 0x733F # +0x898F 0x7E01 # +0x8990 0x8276 # +0x8991 0x82D1 # +0x8992 0x8597 # +0x8993 0x9060 # +0x8994 0x925B # +0x8995 0x9D1B # +0x8996 0x5869 # +0x8997 0x65BC # +0x8998 0x6C5A # +0x8999 0x7525 # +0x899A 0x51F9 # +0x899B 0x592E # +0x899C 0x5965 # +0x899D 0x5F80 # +0x899E 0x5FDC # +0x899F 0x62BC # +0x89A0 0x65FA # +0x89A1 0x6A2A # +0x89A2 0x6B27 # +0x89A3 0x6BB4 # +0x89A4 0x738B # +0x89A5 0x7FC1 # +0x89A6 0x8956 # +0x89A7 0x9D2C # +0x89A8 0x9D0E # +0x89A9 0x9EC4 # +0x89AA 0x5CA1 # +0x89AB 0x6C96 # +0x89AC 0x837B # +0x89AD 0x5104 # +0x89AE 0x5C4B # +0x89AF 0x61B6 # +0x89B0 0x81C6 # +0x89B1 0x6876 # +0x89B2 0x7261 # +0x89B3 0x4E59 # +0x89B4 0x4FFA # +0x89B5 0x5378 # +0x89B6 0x6069 # +0x89B7 0x6E29 # +0x89B8 0x7A4F # +0x89B9 0x97F3 # +0x89BA 0x4E0B # +0x89BB 0x5316 # +0x89BC 0x4EEE # +0x89BD 0x4F55 # +0x89BE 0x4F3D # +0x89BF 0x4FA1 # +0x89C0 0x4F73 # +0x89C1 0x52A0 # +0x89C2 0x53EF # +0x89C3 0x5609 # +0x89C4 0x590F # +0x89C5 0x5AC1 # +0x89C6 0x5BB6 # +0x89C7 0x5BE1 # +0x89C8 0x79D1 # +0x89C9 0x6687 # +0x89CA 0x679C # +0x89CB 0x67B6 # +0x89CC 0x6B4C # +0x89CD 0x6CB3 # +0x89CE 0x706B # +0x89CF 0x73C2 # +0x89D0 0x798D # +0x89D1 0x79BE # +0x89D2 0x7A3C # +0x89D3 0x7B87 # +0x89D4 0x82B1 # +0x89D5 0x82DB # +0x89D6 0x8304 # +0x89D7 0x8377 # +0x89D8 0x83EF # +0x89D9 0x83D3 # +0x89DA 0x8766 # +0x89DB 0x8AB2 # +0x89DC 0x5629 # +0x89DD 0x8CA8 # +0x89DE 0x8FE6 # +0x89DF 0x904E # +0x89E0 0x971E # +0x89E1 0x868A # +0x89E2 0x4FC4 # +0x89E3 0x5CE8 # +0x89E4 0x6211 # +0x89E5 0x7259 # +0x89E6 0x753B # +0x89E7 0x81E5 # +0x89E8 0x82BD # +0x89E9 0x86FE # +0x89EA 0x8CC0 # +0x89EB 0x96C5 # +0x89EC 0x9913 # +0x89ED 0x99D5 # +0x89EE 0x4ECB # +0x89EF 0x4F1A # +0x89F0 0x89E3 # +0x89F1 0x56DE # +0x89F2 0x584A # +0x89F3 0x58CA # +0x89F4 0x5EFB # +0x89F5 0x5FEB # +0x89F6 0x602A # +0x89F7 0x6094 # +0x89F8 0x6062 # +0x89F9 0x61D0 # +0x89FA 0x6212 # +0x89FB 0x62D0 # +0x89FC 0x6539 # +0x8A40 0x9B41 # +0x8A41 0x6666 # +0x8A42 0x68B0 # +0x8A43 0x6D77 # +0x8A44 0x7070 # +0x8A45 0x754C # +0x8A46 0x7686 # +0x8A47 0x7D75 # +0x8A48 0x82A5 # +0x8A49 0x87F9 # +0x8A4A 0x958B # +0x8A4B 0x968E # +0x8A4C 0x8C9D # +0x8A4D 0x51F1 # +0x8A4E 0x52BE # +0x8A4F 0x5916 # +0x8A50 0x54B3 # +0x8A51 0x5BB3 # +0x8A52 0x5D16 # +0x8A53 0x6168 # +0x8A54 0x6982 # +0x8A55 0x6DAF # +0x8A56 0x788D # +0x8A57 0x84CB # +0x8A58 0x8857 # +0x8A59 0x8A72 # +0x8A5A 0x93A7 # +0x8A5B 0x9AB8 # +0x8A5C 0x6D6C # +0x8A5D 0x99A8 # +0x8A5E 0x86D9 # +0x8A5F 0x57A3 # +0x8A60 0x67FF # +0x8A61 0x86CE # +0x8A62 0x920E # +0x8A63 0x5283 # +0x8A64 0x5687 # +0x8A65 0x5404 # +0x8A66 0x5ED3 # +0x8A67 0x62E1 # +0x8A68 0x64B9 # +0x8A69 0x683C # +0x8A6A 0x6838 # +0x8A6B 0x6BBB # +0x8A6C 0x7372 # +0x8A6D 0x78BA # +0x8A6E 0x7A6B # +0x8A6F 0x899A # +0x8A70 0x89D2 # +0x8A71 0x8D6B # +0x8A72 0x8F03 # +0x8A73 0x90ED # +0x8A74 0x95A3 # +0x8A75 0x9694 # +0x8A76 0x9769 # +0x8A77 0x5B66 # +0x8A78 0x5CB3 # +0x8A79 0x697D # +0x8A7A 0x984D # +0x8A7B 0x984E # +0x8A7C 0x639B # +0x8A7D 0x7B20 # +0x8A7E 0x6A2B # +0x8A80 0x6A7F # +0x8A81 0x68B6 # +0x8A82 0x9C0D # +0x8A83 0x6F5F # +0x8A84 0x5272 # +0x8A85 0x559D # +0x8A86 0x6070 # +0x8A87 0x62EC # +0x8A88 0x6D3B # +0x8A89 0x6E07 # +0x8A8A 0x6ED1 # +0x8A8B 0x845B # +0x8A8C 0x8910 # +0x8A8D 0x8F44 # +0x8A8E 0x4E14 # +0x8A8F 0x9C39 # +0x8A90 0x53F6 # +0x8A91 0x691B # +0x8A92 0x6A3A # +0x8A93 0x9784 # +0x8A94 0x682A # +0x8A95 0x515C # +0x8A96 0x7AC3 # +0x8A97 0x84B2 # +0x8A98 0x91DC # +0x8A99 0x938C # +0x8A9A 0x565B # +0x8A9B 0x9D28 # +0x8A9C 0x6822 # +0x8A9D 0x8305 # +0x8A9E 0x8431 # +0x8A9F 0x7CA5 # +0x8AA0 0x5208 # +0x8AA1 0x82C5 # +0x8AA2 0x74E6 # +0x8AA3 0x4E7E # +0x8AA4 0x4F83 # +0x8AA5 0x51A0 # +0x8AA6 0x5BD2 # +0x8AA7 0x520A # +0x8AA8 0x52D8 # +0x8AA9 0x52E7 # +0x8AAA 0x5DFB # +0x8AAB 0x559A # +0x8AAC 0x582A # +0x8AAD 0x59E6 # +0x8AAE 0x5B8C # +0x8AAF 0x5B98 # +0x8AB0 0x5BDB # +0x8AB1 0x5E72 # +0x8AB2 0x5E79 # +0x8AB3 0x60A3 # +0x8AB4 0x611F # +0x8AB5 0x6163 # +0x8AB6 0x61BE # +0x8AB7 0x63DB # +0x8AB8 0x6562 # +0x8AB9 0x67D1 # +0x8ABA 0x6853 # +0x8ABB 0x68FA # +0x8ABC 0x6B3E # +0x8ABD 0x6B53 # +0x8ABE 0x6C57 # +0x8ABF 0x6F22 # +0x8AC0 0x6F97 # +0x8AC1 0x6F45 # +0x8AC2 0x74B0 # +0x8AC3 0x7518 # +0x8AC4 0x76E3 # +0x8AC5 0x770B # +0x8AC6 0x7AFF # +0x8AC7 0x7BA1 # +0x8AC8 0x7C21 # +0x8AC9 0x7DE9 # +0x8ACA 0x7F36 # +0x8ACB 0x7FF0 # +0x8ACC 0x809D # +0x8ACD 0x8266 # +0x8ACE 0x839E # +0x8ACF 0x89B3 # +0x8AD0 0x8ACC # +0x8AD1 0x8CAB # +0x8AD2 0x9084 # +0x8AD3 0x9451 # +0x8AD4 0x9593 # +0x8AD5 0x9591 # +0x8AD6 0x95A2 # +0x8AD7 0x9665 # +0x8AD8 0x97D3 # +0x8AD9 0x9928 # +0x8ADA 0x8218 # +0x8ADB 0x4E38 # +0x8ADC 0x542B # +0x8ADD 0x5CB8 # +0x8ADE 0x5DCC # +0x8ADF 0x73A9 # +0x8AE0 0x764C # +0x8AE1 0x773C # +0x8AE2 0x5CA9 # +0x8AE3 0x7FEB # +0x8AE4 0x8D0B # +0x8AE5 0x96C1 # +0x8AE6 0x9811 # +0x8AE7 0x9854 # +0x8AE8 0x9858 # +0x8AE9 0x4F01 # +0x8AEA 0x4F0E # +0x8AEB 0x5371 # +0x8AEC 0x559C # +0x8AED 0x5668 # +0x8AEE 0x57FA # +0x8AEF 0x5947 # +0x8AF0 0x5B09 # +0x8AF1 0x5BC4 # +0x8AF2 0x5C90 # +0x8AF3 0x5E0C # +0x8AF4 0x5E7E # +0x8AF5 0x5FCC # +0x8AF6 0x63EE # +0x8AF7 0x673A # +0x8AF8 0x65D7 # +0x8AF9 0x65E2 # +0x8AFA 0x671F # +0x8AFB 0x68CB # +0x8AFC 0x68C4 # +0x8B40 0x6A5F # +0x8B41 0x5E30 # +0x8B42 0x6BC5 # +0x8B43 0x6C17 # +0x8B44 0x6C7D # +0x8B45 0x757F # +0x8B46 0x7948 # +0x8B47 0x5B63 # +0x8B48 0x7A00 # +0x8B49 0x7D00 # +0x8B4A 0x5FBD # +0x8B4B 0x898F # +0x8B4C 0x8A18 # +0x8B4D 0x8CB4 # +0x8B4E 0x8D77 # +0x8B4F 0x8ECC # +0x8B50 0x8F1D # +0x8B51 0x98E2 # +0x8B52 0x9A0E # +0x8B53 0x9B3C # +0x8B54 0x4E80 # +0x8B55 0x507D # +0x8B56 0x5100 # +0x8B57 0x5993 # +0x8B58 0x5B9C # +0x8B59 0x622F # +0x8B5A 0x6280 # +0x8B5B 0x64EC # +0x8B5C 0x6B3A # +0x8B5D 0x72A0 # +0x8B5E 0x7591 # +0x8B5F 0x7947 # +0x8B60 0x7FA9 # +0x8B61 0x87FB # +0x8B62 0x8ABC # +0x8B63 0x8B70 # +0x8B64 0x63AC # +0x8B65 0x83CA # +0x8B66 0x97A0 # +0x8B67 0x5409 # +0x8B68 0x5403 # +0x8B69 0x55AB # +0x8B6A 0x6854 # +0x8B6B 0x6A58 # +0x8B6C 0x8A70 # +0x8B6D 0x7827 # +0x8B6E 0x6775 # +0x8B6F 0x9ECD # +0x8B70 0x5374 # +0x8B71 0x5BA2 # +0x8B72 0x811A # +0x8B73 0x8650 # +0x8B74 0x9006 # +0x8B75 0x4E18 # +0x8B76 0x4E45 # +0x8B77 0x4EC7 # +0x8B78 0x4F11 # +0x8B79 0x53CA # +0x8B7A 0x5438 # +0x8B7B 0x5BAE # +0x8B7C 0x5F13 # +0x8B7D 0x6025 # +0x8B7E 0x6551 # +0x8B80 0x673D # +0x8B81 0x6C42 # +0x8B82 0x6C72 # +0x8B83 0x6CE3 # +0x8B84 0x7078 # +0x8B85 0x7403 # +0x8B86 0x7A76 # +0x8B87 0x7AAE # +0x8B88 0x7B08 # +0x8B89 0x7D1A # +0x8B8A 0x7CFE # +0x8B8B 0x7D66 # +0x8B8C 0x65E7 # +0x8B8D 0x725B # +0x8B8E 0x53BB # +0x8B8F 0x5C45 # +0x8B90 0x5DE8 # +0x8B91 0x62D2 # +0x8B92 0x62E0 # +0x8B93 0x6319 # +0x8B94 0x6E20 # +0x8B95 0x865A # +0x8B96 0x8A31 # +0x8B97 0x8DDD # +0x8B98 0x92F8 # +0x8B99 0x6F01 # +0x8B9A 0x79A6 # +0x8B9B 0x9B5A # +0x8B9C 0x4EA8 # +0x8B9D 0x4EAB # +0x8B9E 0x4EAC # +0x8B9F 0x4F9B # +0x8BA0 0x4FA0 # +0x8BA1 0x50D1 # +0x8BA2 0x5147 # +0x8BA3 0x7AF6 # +0x8BA4 0x5171 # +0x8BA5 0x51F6 # +0x8BA6 0x5354 # +0x8BA7 0x5321 # +0x8BA8 0x537F # +0x8BA9 0x53EB # +0x8BAA 0x55AC # +0x8BAB 0x5883 # +0x8BAC 0x5CE1 # +0x8BAD 0x5F37 # +0x8BAE 0x5F4A # +0x8BAF 0x602F # +0x8BB0 0x6050 # +0x8BB1 0x606D # +0x8BB2 0x631F # +0x8BB3 0x6559 # +0x8BB4 0x6A4B # +0x8BB5 0x6CC1 # +0x8BB6 0x72C2 # +0x8BB7 0x72ED # +0x8BB8 0x77EF # +0x8BB9 0x80F8 # +0x8BBA 0x8105 # +0x8BBB 0x8208 # +0x8BBC 0x854E # +0x8BBD 0x90F7 # +0x8BBE 0x93E1 # +0x8BBF 0x97FF # +0x8BC0 0x9957 # +0x8BC1 0x9A5A # +0x8BC2 0x4EF0 # +0x8BC3 0x51DD # +0x8BC4 0x5C2D # +0x8BC5 0x6681 # +0x8BC6 0x696D # +0x8BC7 0x5C40 # +0x8BC8 0x66F2 # +0x8BC9 0x6975 # +0x8BCA 0x7389 # +0x8BCB 0x6850 # +0x8BCC 0x7C81 # +0x8BCD 0x50C5 # +0x8BCE 0x52E4 # +0x8BCF 0x5747 # +0x8BD0 0x5DFE # +0x8BD1 0x9326 # +0x8BD2 0x65A4 # +0x8BD3 0x6B23 # +0x8BD4 0x6B3D # +0x8BD5 0x7434 # +0x8BD6 0x7981 # +0x8BD7 0x79BD # +0x8BD8 0x7B4B # +0x8BD9 0x7DCA # +0x8BDA 0x82B9 # +0x8BDB 0x83CC # +0x8BDC 0x887F # +0x8BDD 0x895F # +0x8BDE 0x8B39 # +0x8BDF 0x8FD1 # +0x8BE0 0x91D1 # +0x8BE1 0x541F # +0x8BE2 0x9280 # +0x8BE3 0x4E5D # +0x8BE4 0x5036 # +0x8BE5 0x53E5 # +0x8BE6 0x533A # +0x8BE7 0x72D7 # +0x8BE8 0x7396 # +0x8BE9 0x77E9 # +0x8BEA 0x82E6 # +0x8BEB 0x8EAF # +0x8BEC 0x99C6 # +0x8BED 0x99C8 # +0x8BEE 0x99D2 # +0x8BEF 0x5177 # +0x8BF0 0x611A # +0x8BF1 0x865E # +0x8BF2 0x55B0 # +0x8BF3 0x7A7A # +0x8BF4 0x5076 # +0x8BF5 0x5BD3 # +0x8BF6 0x9047 # +0x8BF7 0x9685 # +0x8BF8 0x4E32 # +0x8BF9 0x6ADB # +0x8BFA 0x91E7 # +0x8BFB 0x5C51 # +0x8BFC 0x5C48 # +0x8C40 0x6398 # +0x8C41 0x7A9F # +0x8C42 0x6C93 # +0x8C43 0x9774 # +0x8C44 0x8F61 # +0x8C45 0x7AAA # +0x8C46 0x718A # +0x8C47 0x9688 # +0x8C48 0x7C82 # +0x8C49 0x6817 # +0x8C4A 0x7E70 # +0x8C4B 0x6851 # +0x8C4C 0x936C # +0x8C4D 0x52F2 # +0x8C4E 0x541B # +0x8C4F 0x85AB # +0x8C50 0x8A13 # +0x8C51 0x7FA4 # +0x8C52 0x8ECD # +0x8C53 0x90E1 # +0x8C54 0x5366 # +0x8C55 0x8888 # +0x8C56 0x7941 # +0x8C57 0x4FC2 # +0x8C58 0x50BE # +0x8C59 0x5211 # +0x8C5A 0x5144 # +0x8C5B 0x5553 # +0x8C5C 0x572D # +0x8C5D 0x73EA # +0x8C5E 0x578B # +0x8C5F 0x5951 # +0x8C60 0x5F62 # +0x8C61 0x5F84 # +0x8C62 0x6075 # +0x8C63 0x6176 # +0x8C64 0x6167 # +0x8C65 0x61A9 # +0x8C66 0x63B2 # +0x8C67 0x643A # +0x8C68 0x656C # +0x8C69 0x666F # +0x8C6A 0x6842 # +0x8C6B 0x6E13 # +0x8C6C 0x7566 # +0x8C6D 0x7A3D # +0x8C6E 0x7CFB # +0x8C6F 0x7D4C # +0x8C70 0x7D99 # +0x8C71 0x7E4B # +0x8C72 0x7F6B # +0x8C73 0x830E # +0x8C74 0x834A # +0x8C75 0x86CD # +0x8C76 0x8A08 # +0x8C77 0x8A63 # +0x8C78 0x8B66 # +0x8C79 0x8EFD # +0x8C7A 0x981A # +0x8C7B 0x9D8F # +0x8C7C 0x82B8 # +0x8C7D 0x8FCE # +0x8C7E 0x9BE8 # +0x8C80 0x5287 # +0x8C81 0x621F # +0x8C82 0x6483 # +0x8C83 0x6FC0 # +0x8C84 0x9699 # +0x8C85 0x6841 # +0x8C86 0x5091 # +0x8C87 0x6B20 # +0x8C88 0x6C7A # +0x8C89 0x6F54 # +0x8C8A 0x7A74 # +0x8C8B 0x7D50 # +0x8C8C 0x8840 # +0x8C8D 0x8A23 # +0x8C8E 0x6708 # +0x8C8F 0x4EF6 # +0x8C90 0x5039 # +0x8C91 0x5026 # +0x8C92 0x5065 # +0x8C93 0x517C # +0x8C94 0x5238 # +0x8C95 0x5263 # +0x8C96 0x55A7 # +0x8C97 0x570F # +0x8C98 0x5805 # +0x8C99 0x5ACC # +0x8C9A 0x5EFA # +0x8C9B 0x61B2 # +0x8C9C 0x61F8 # +0x8C9D 0x62F3 # +0x8C9E 0x6372 # +0x8C9F 0x691C # +0x8CA0 0x6A29 # +0x8CA1 0x727D # +0x8CA2 0x72AC # +0x8CA3 0x732E # +0x8CA4 0x7814 # +0x8CA5 0x786F # +0x8CA6 0x7D79 # +0x8CA7 0x770C # +0x8CA8 0x80A9 # +0x8CA9 0x898B # +0x8CAA 0x8B19 # +0x8CAB 0x8CE2 # +0x8CAC 0x8ED2 # +0x8CAD 0x9063 # +0x8CAE 0x9375 # +0x8CAF 0x967A # +0x8CB0 0x9855 # +0x8CB1 0x9A13 # +0x8CB2 0x9E78 # +0x8CB3 0x5143 # +0x8CB4 0x539F # +0x8CB5 0x53B3 # +0x8CB6 0x5E7B # +0x8CB7 0x5F26 # +0x8CB8 0x6E1B # +0x8CB9 0x6E90 # +0x8CBA 0x7384 # +0x8CBB 0x73FE # +0x8CBC 0x7D43 # +0x8CBD 0x8237 # +0x8CBE 0x8A00 # +0x8CBF 0x8AFA # +0x8CC0 0x9650 # +0x8CC1 0x4E4E # +0x8CC2 0x500B # +0x8CC3 0x53E4 # +0x8CC4 0x547C # +0x8CC5 0x56FA # +0x8CC6 0x59D1 # +0x8CC7 0x5B64 # +0x8CC8 0x5DF1 # +0x8CC9 0x5EAB # +0x8CCA 0x5F27 # +0x8CCB 0x6238 # +0x8CCC 0x6545 # +0x8CCD 0x67AF # +0x8CCE 0x6E56 # +0x8CCF 0x72D0 # +0x8CD0 0x7CCA # +0x8CD1 0x88B4 # +0x8CD2 0x80A1 # +0x8CD3 0x80E1 # +0x8CD4 0x83F0 # +0x8CD5 0x864E # +0x8CD6 0x8A87 # +0x8CD7 0x8DE8 # +0x8CD8 0x9237 # +0x8CD9 0x96C7 # +0x8CDA 0x9867 # +0x8CDB 0x9F13 # +0x8CDC 0x4E94 # +0x8CDD 0x4E92 # +0x8CDE 0x4F0D # +0x8CDF 0x5348 # +0x8CE0 0x5449 # +0x8CE1 0x543E # +0x8CE2 0x5A2F # +0x8CE3 0x5F8C # +0x8CE4 0x5FA1 # +0x8CE5 0x609F # +0x8CE6 0x68A7 # +0x8CE7 0x6A8E # +0x8CE8 0x745A # +0x8CE9 0x7881 # +0x8CEA 0x8A9E # +0x8CEB 0x8AA4 # +0x8CEC 0x8B77 # +0x8CED 0x9190 # +0x8CEE 0x4E5E # +0x8CEF 0x9BC9 # +0x8CF0 0x4EA4 # +0x8CF1 0x4F7C # +0x8CF2 0x4FAF # +0x8CF3 0x5019 # +0x8CF4 0x5016 # +0x8CF5 0x5149 # +0x8CF6 0x516C # +0x8CF7 0x529F # +0x8CF8 0x52B9 # +0x8CF9 0x52FE # +0x8CFA 0x539A # +0x8CFB 0x53E3 # +0x8CFC 0x5411 # +0x8D40 0x540E # +0x8D41 0x5589 # +0x8D42 0x5751 # +0x8D43 0x57A2 # +0x8D44 0x597D # +0x8D45 0x5B54 # +0x8D46 0x5B5D # +0x8D47 0x5B8F # +0x8D48 0x5DE5 # +0x8D49 0x5DE7 # +0x8D4A 0x5DF7 # +0x8D4B 0x5E78 # +0x8D4C 0x5E83 # +0x8D4D 0x5E9A # +0x8D4E 0x5EB7 # +0x8D4F 0x5F18 # +0x8D50 0x6052 # +0x8D51 0x614C # +0x8D52 0x6297 # +0x8D53 0x62D8 # +0x8D54 0x63A7 # +0x8D55 0x653B # +0x8D56 0x6602 # +0x8D57 0x6643 # +0x8D58 0x66F4 # +0x8D59 0x676D # +0x8D5A 0x6821 # +0x8D5B 0x6897 # +0x8D5C 0x69CB # +0x8D5D 0x6C5F # +0x8D5E 0x6D2A # +0x8D5F 0x6D69 # +0x8D60 0x6E2F # +0x8D61 0x6E9D # +0x8D62 0x7532 # +0x8D63 0x7687 # +0x8D64 0x786C # +0x8D65 0x7A3F # +0x8D66 0x7CE0 # +0x8D67 0x7D05 # +0x8D68 0x7D18 # +0x8D69 0x7D5E # +0x8D6A 0x7DB1 # +0x8D6B 0x8015 # +0x8D6C 0x8003 # +0x8D6D 0x80AF # +0x8D6E 0x80B1 # +0x8D6F 0x8154 # +0x8D70 0x818F # +0x8D71 0x822A # +0x8D72 0x8352 # +0x8D73 0x884C # +0x8D74 0x8861 # +0x8D75 0x8B1B # +0x8D76 0x8CA2 # +0x8D77 0x8CFC # +0x8D78 0x90CA # +0x8D79 0x9175 # +0x8D7A 0x9271 # +0x8D7B 0x783F # +0x8D7C 0x92FC # +0x8D7D 0x95A4 # +0x8D7E 0x964D # +0x8D80 0x9805 # +0x8D81 0x9999 # +0x8D82 0x9AD8 # +0x8D83 0x9D3B # +0x8D84 0x525B # +0x8D85 0x52AB # +0x8D86 0x53F7 # +0x8D87 0x5408 # +0x8D88 0x58D5 # +0x8D89 0x62F7 # +0x8D8A 0x6FE0 # +0x8D8B 0x8C6A # +0x8D8C 0x8F5F # +0x8D8D 0x9EB9 # +0x8D8E 0x514B # +0x8D8F 0x523B # +0x8D90 0x544A # +0x8D91 0x56FD # +0x8D92 0x7A40 # +0x8D93 0x9177 # +0x8D94 0x9D60 # +0x8D95 0x9ED2 # +0x8D96 0x7344 # +0x8D97 0x6F09 # +0x8D98 0x8170 # +0x8D99 0x7511 # +0x8D9A 0x5FFD # +0x8D9B 0x60DA # +0x8D9C 0x9AA8 # +0x8D9D 0x72DB # +0x8D9E 0x8FBC # +0x8D9F 0x6B64 # +0x8DA0 0x9803 # +0x8DA1 0x4ECA # +0x8DA2 0x56F0 # +0x8DA3 0x5764 # +0x8DA4 0x58BE # +0x8DA5 0x5A5A # +0x8DA6 0x6068 # +0x8DA7 0x61C7 # +0x8DA8 0x660F # +0x8DA9 0x6606 # +0x8DAA 0x6839 # +0x8DAB 0x68B1 # +0x8DAC 0x6DF7 # +0x8DAD 0x75D5 # +0x8DAE 0x7D3A # +0x8DAF 0x826E # +0x8DB0 0x9B42 # +0x8DB1 0x4E9B # +0x8DB2 0x4F50 # +0x8DB3 0x53C9 # +0x8DB4 0x5506 # +0x8DB5 0x5D6F # +0x8DB6 0x5DE6 # +0x8DB7 0x5DEE # +0x8DB8 0x67FB # +0x8DB9 0x6C99 # +0x8DBA 0x7473 # +0x8DBB 0x7802 # +0x8DBC 0x8A50 # +0x8DBD 0x9396 # +0x8DBE 0x88DF # +0x8DBF 0x5750 # +0x8DC0 0x5EA7 # +0x8DC1 0x632B # +0x8DC2 0x50B5 # +0x8DC3 0x50AC # +0x8DC4 0x518D # +0x8DC5 0x6700 # +0x8DC6 0x54C9 # +0x8DC7 0x585E # +0x8DC8 0x59BB # +0x8DC9 0x5BB0 # +0x8DCA 0x5F69 # +0x8DCB 0x624D # +0x8DCC 0x63A1 # +0x8DCD 0x683D # +0x8DCE 0x6B73 # +0x8DCF 0x6E08 # +0x8DD0 0x707D # +0x8DD1 0x91C7 # +0x8DD2 0x7280 # +0x8DD3 0x7815 # +0x8DD4 0x7826 # +0x8DD5 0x796D # +0x8DD6 0x658E # +0x8DD7 0x7D30 # +0x8DD8 0x83DC # +0x8DD9 0x88C1 # +0x8DDA 0x8F09 # +0x8DDB 0x969B # +0x8DDC 0x5264 # +0x8DDD 0x5728 # +0x8DDE 0x6750 # +0x8DDF 0x7F6A # +0x8DE0 0x8CA1 # +0x8DE1 0x51B4 # +0x8DE2 0x5742 # +0x8DE3 0x962A # +0x8DE4 0x583A # +0x8DE5 0x698A # +0x8DE6 0x80B4 # +0x8DE7 0x54B2 # +0x8DE8 0x5D0E # +0x8DE9 0x57FC # +0x8DEA 0x7895 # +0x8DEB 0x9DFA # +0x8DEC 0x4F5C # +0x8DED 0x524A # +0x8DEE 0x548B # +0x8DEF 0x643E # +0x8DF0 0x6628 # +0x8DF1 0x6714 # +0x8DF2 0x67F5 # +0x8DF3 0x7A84 # +0x8DF4 0x7B56 # +0x8DF5 0x7D22 # +0x8DF6 0x932F # +0x8DF7 0x685C # +0x8DF8 0x9BAD # +0x8DF9 0x7B39 # +0x8DFA 0x5319 # +0x8DFB 0x518A # +0x8DFC 0x5237 # +0x8E40 0x5BDF # +0x8E41 0x62F6 # +0x8E42 0x64AE # +0x8E43 0x64E6 # +0x8E44 0x672D # +0x8E45 0x6BBA # +0x8E46 0x85A9 # +0x8E47 0x96D1 # +0x8E48 0x7690 # +0x8E49 0x9BD6 # +0x8E4A 0x634C # +0x8E4B 0x9306 # +0x8E4C 0x9BAB # +0x8E4D 0x76BF # +0x8E4E 0x6652 # +0x8E4F 0x4E09 # +0x8E50 0x5098 # +0x8E51 0x53C2 # +0x8E52 0x5C71 # +0x8E53 0x60E8 # +0x8E54 0x6492 # +0x8E55 0x6563 # +0x8E56 0x685F # +0x8E57 0x71E6 # +0x8E58 0x73CA # +0x8E59 0x7523 # +0x8E5A 0x7B97 # +0x8E5B 0x7E82 # +0x8E5C 0x8695 # +0x8E5D 0x8B83 # +0x8E5E 0x8CDB # +0x8E5F 0x9178 # +0x8E60 0x9910 # +0x8E61 0x65AC # +0x8E62 0x66AB # +0x8E63 0x6B8B # +0x8E64 0x4ED5 # +0x8E65 0x4ED4 # +0x8E66 0x4F3A # +0x8E67 0x4F7F # +0x8E68 0x523A # +0x8E69 0x53F8 # +0x8E6A 0x53F2 # +0x8E6B 0x55E3 # +0x8E6C 0x56DB # +0x8E6D 0x58EB # +0x8E6E 0x59CB # +0x8E6F 0x59C9 # +0x8E70 0x59FF # +0x8E71 0x5B50 # +0x8E72 0x5C4D # +0x8E73 0x5E02 # +0x8E74 0x5E2B # +0x8E75 0x5FD7 # +0x8E76 0x601D # +0x8E77 0x6307 # +0x8E78 0x652F # +0x8E79 0x5B5C # +0x8E7A 0x65AF # +0x8E7B 0x65BD # +0x8E7C 0x65E8 # +0x8E7D 0x679D # +0x8E7E 0x6B62 # +0x8E80 0x6B7B # +0x8E81 0x6C0F # +0x8E82 0x7345 # +0x8E83 0x7949 # +0x8E84 0x79C1 # +0x8E85 0x7CF8 # +0x8E86 0x7D19 # +0x8E87 0x7D2B # +0x8E88 0x80A2 # +0x8E89 0x8102 # +0x8E8A 0x81F3 # +0x8E8B 0x8996 # +0x8E8C 0x8A5E # +0x8E8D 0x8A69 # +0x8E8E 0x8A66 # +0x8E8F 0x8A8C # +0x8E90 0x8AEE # +0x8E91 0x8CC7 # +0x8E92 0x8CDC # +0x8E93 0x96CC # +0x8E94 0x98FC # +0x8E95 0x6B6F # +0x8E96 0x4E8B # +0x8E97 0x4F3C # +0x8E98 0x4F8D # +0x8E99 0x5150 # +0x8E9A 0x5B57 # +0x8E9B 0x5BFA # +0x8E9C 0x6148 # +0x8E9D 0x6301 # +0x8E9E 0x6642 # +0x8E9F 0x6B21 # +0x8EA0 0x6ECB # +0x8EA1 0x6CBB # +0x8EA2 0x723E # +0x8EA3 0x74BD # +0x8EA4 0x75D4 # +0x8EA5 0x78C1 # +0x8EA6 0x793A # +0x8EA7 0x800C # +0x8EA8 0x8033 # +0x8EA9 0x81EA # +0x8EAA 0x8494 # +0x8EAB 0x8F9E # +0x8EAC 0x6C50 # +0x8EAD 0x9E7F # +0x8EAE 0x5F0F # +0x8EAF 0x8B58 # +0x8EB0 0x9D2B # +0x8EB1 0x7AFA # +0x8EB2 0x8EF8 # +0x8EB3 0x5B8D # +0x8EB4 0x96EB # +0x8EB5 0x4E03 # +0x8EB6 0x53F1 # +0x8EB7 0x57F7 # +0x8EB8 0x5931 # +0x8EB9 0x5AC9 # +0x8EBA 0x5BA4 # +0x8EBB 0x6089 # +0x8EBC 0x6E7F # +0x8EBD 0x6F06 # +0x8EBE 0x75BE # +0x8EBF 0x8CEA # +0x8EC0 0x5B9F # +0x8EC1 0x8500 # +0x8EC2 0x7BE0 # +0x8EC3 0x5072 # +0x8EC4 0x67F4 # +0x8EC5 0x829D # +0x8EC6 0x5C61 # +0x8EC7 0x854A # +0x8EC8 0x7E1E # +0x8EC9 0x820E # +0x8ECA 0x5199 # +0x8ECB 0x5C04 # +0x8ECC 0x6368 # +0x8ECD 0x8D66 # +0x8ECE 0x659C # +0x8ECF 0x716E # +0x8ED0 0x793E # +0x8ED1 0x7D17 # +0x8ED2 0x8005 # +0x8ED3 0x8B1D # +0x8ED4 0x8ECA # +0x8ED5 0x906E # +0x8ED6 0x86C7 # +0x8ED7 0x90AA # +0x8ED8 0x501F # +0x8ED9 0x52FA # +0x8EDA 0x5C3A # +0x8EDB 0x6753 # +0x8EDC 0x707C # +0x8EDD 0x7235 # +0x8EDE 0x914C # +0x8EDF 0x91C8 # +0x8EE0 0x932B # +0x8EE1 0x82E5 # +0x8EE2 0x5BC2 # +0x8EE3 0x5F31 # +0x8EE4 0x60F9 # +0x8EE5 0x4E3B # +0x8EE6 0x53D6 # +0x8EE7 0x5B88 # +0x8EE8 0x624B # +0x8EE9 0x6731 # +0x8EEA 0x6B8A # +0x8EEB 0x72E9 # +0x8EEC 0x73E0 # +0x8EED 0x7A2E # +0x8EEE 0x816B # +0x8EEF 0x8DA3 # +0x8EF0 0x9152 # +0x8EF1 0x9996 # +0x8EF2 0x5112 # +0x8EF3 0x53D7 # +0x8EF4 0x546A # +0x8EF5 0x5BFF # +0x8EF6 0x6388 # +0x8EF7 0x6A39 # +0x8EF8 0x7DAC # +0x8EF9 0x9700 # +0x8EFA 0x56DA # +0x8EFB 0x53CE # +0x8EFC 0x5468 # +0x8F40 0x5B97 # +0x8F41 0x5C31 # +0x8F42 0x5DDE # +0x8F43 0x4FEE # +0x8F44 0x6101 # +0x8F45 0x62FE # +0x8F46 0x6D32 # +0x8F47 0x79C0 # +0x8F48 0x79CB # +0x8F49 0x7D42 # +0x8F4A 0x7E4D # +0x8F4B 0x7FD2 # +0x8F4C 0x81ED # +0x8F4D 0x821F # +0x8F4E 0x8490 # +0x8F4F 0x8846 # +0x8F50 0x8972 # +0x8F51 0x8B90 # +0x8F52 0x8E74 # +0x8F53 0x8F2F # +0x8F54 0x9031 # +0x8F55 0x914B # +0x8F56 0x916C # +0x8F57 0x96C6 # +0x8F58 0x919C # +0x8F59 0x4EC0 # +0x8F5A 0x4F4F # +0x8F5B 0x5145 # +0x8F5C 0x5341 # +0x8F5D 0x5F93 # +0x8F5E 0x620E # +0x8F5F 0x67D4 # +0x8F60 0x6C41 # +0x8F61 0x6E0B # +0x8F62 0x7363 # +0x8F63 0x7E26 # +0x8F64 0x91CD # +0x8F65 0x9283 # +0x8F66 0x53D4 # +0x8F67 0x5919 # +0x8F68 0x5BBF # +0x8F69 0x6DD1 # +0x8F6A 0x795D # +0x8F6B 0x7E2E # +0x8F6C 0x7C9B # +0x8F6D 0x587E # +0x8F6E 0x719F # +0x8F6F 0x51FA # +0x8F70 0x8853 # +0x8F71 0x8FF0 # +0x8F72 0x4FCA # +0x8F73 0x5CFB # +0x8F74 0x6625 # +0x8F75 0x77AC # +0x8F76 0x7AE3 # +0x8F77 0x821C # +0x8F78 0x99FF # +0x8F79 0x51C6 # +0x8F7A 0x5FAA # +0x8F7B 0x65EC # +0x8F7C 0x696F # +0x8F7D 0x6B89 # +0x8F7E 0x6DF3 # +0x8F80 0x6E96 # +0x8F81 0x6F64 # +0x8F82 0x76FE # +0x8F83 0x7D14 # +0x8F84 0x5DE1 # +0x8F85 0x9075 # +0x8F86 0x9187 # +0x8F87 0x9806 # +0x8F88 0x51E6 # +0x8F89 0x521D # +0x8F8A 0x6240 # +0x8F8B 0x6691 # +0x8F8C 0x66D9 # +0x8F8D 0x6E1A # +0x8F8E 0x5EB6 # +0x8F8F 0x7DD2 # +0x8F90 0x7F72 # +0x8F91 0x66F8 # +0x8F92 0x85AF # +0x8F93 0x85F7 # +0x8F94 0x8AF8 # +0x8F95 0x52A9 # +0x8F96 0x53D9 # +0x8F97 0x5973 # +0x8F98 0x5E8F # +0x8F99 0x5F90 # +0x8F9A 0x6055 # +0x8F9B 0x92E4 # +0x8F9C 0x9664 # +0x8F9D 0x50B7 # +0x8F9E 0x511F # +0x8F9F 0x52DD # +0x8FA0 0x5320 # +0x8FA1 0x5347 # +0x8FA2 0x53EC # +0x8FA3 0x54E8 # +0x8FA4 0x5546 # +0x8FA5 0x5531 # +0x8FA6 0x5617 # +0x8FA7 0x5968 # +0x8FA8 0x59BE # +0x8FA9 0x5A3C # +0x8FAA 0x5BB5 # +0x8FAB 0x5C06 # +0x8FAC 0x5C0F # +0x8FAD 0x5C11 # +0x8FAE 0x5C1A # +0x8FAF 0x5E84 # +0x8FB0 0x5E8A # +0x8FB1 0x5EE0 # +0x8FB2 0x5F70 # +0x8FB3 0x627F # +0x8FB4 0x6284 # +0x8FB5 0x62DB # +0x8FB6 0x638C # +0x8FB7 0x6377 # +0x8FB8 0x6607 # +0x8FB9 0x660C # +0x8FBA 0x662D # +0x8FBB 0x6676 # +0x8FBC 0x677E # +0x8FBD 0x68A2 # +0x8FBE 0x6A1F # +0x8FBF 0x6A35 # +0x8FC0 0x6CBC # +0x8FC1 0x6D88 # +0x8FC2 0x6E09 # +0x8FC3 0x6E58 # +0x8FC4 0x713C # +0x8FC5 0x7126 # +0x8FC6 0x7167 # +0x8FC7 0x75C7 # +0x8FC8 0x7701 # +0x8FC9 0x785D # +0x8FCA 0x7901 # +0x8FCB 0x7965 # +0x8FCC 0x79F0 # +0x8FCD 0x7AE0 # +0x8FCE 0x7B11 # +0x8FCF 0x7CA7 # +0x8FD0 0x7D39 # +0x8FD1 0x8096 # +0x8FD2 0x83D6 # +0x8FD3 0x848B # +0x8FD4 0x8549 # +0x8FD5 0x885D # +0x8FD6 0x88F3 # +0x8FD7 0x8A1F # +0x8FD8 0x8A3C # +0x8FD9 0x8A54 # +0x8FDA 0x8A73 # +0x8FDB 0x8C61 # +0x8FDC 0x8CDE # +0x8FDD 0x91A4 # +0x8FDE 0x9266 # +0x8FDF 0x937E # +0x8FE0 0x9418 # +0x8FE1 0x969C # +0x8FE2 0x9798 # +0x8FE3 0x4E0A # +0x8FE4 0x4E08 # +0x8FE5 0x4E1E # +0x8FE6 0x4E57 # +0x8FE7 0x5197 # +0x8FE8 0x5270 # +0x8FE9 0x57CE # +0x8FEA 0x5834 # +0x8FEB 0x58CC # +0x8FEC 0x5B22 # +0x8FED 0x5E38 # +0x8FEE 0x60C5 # +0x8FEF 0x64FE # +0x8FF0 0x6761 # +0x8FF1 0x6756 # +0x8FF2 0x6D44 # +0x8FF3 0x72B6 # +0x8FF4 0x7573 # +0x8FF5 0x7A63 # +0x8FF6 0x84B8 # +0x8FF7 0x8B72 # +0x8FF8 0x91B8 # +0x8FF9 0x9320 # +0x8FFA 0x5631 # +0x8FFB 0x57F4 # +0x8FFC 0x98FE # +0x9040 0x62ED # +0x9041 0x690D # +0x9042 0x6B96 # +0x9043 0x71ED # +0x9044 0x7E54 # +0x9045 0x8077 # +0x9046 0x8272 # +0x9047 0x89E6 # +0x9048 0x98DF # +0x9049 0x8755 # +0x904A 0x8FB1 # +0x904B 0x5C3B # +0x904C 0x4F38 # +0x904D 0x4FE1 # +0x904E 0x4FB5 # +0x904F 0x5507 # +0x9050 0x5A20 # +0x9051 0x5BDD # +0x9052 0x5BE9 # +0x9053 0x5FC3 # +0x9054 0x614E # +0x9055 0x632F # +0x9056 0x65B0 # +0x9057 0x664B # +0x9058 0x68EE # +0x9059 0x699B # +0x905A 0x6D78 # +0x905B 0x6DF1 # +0x905C 0x7533 # +0x905D 0x75B9 # +0x905E 0x771F # +0x905F 0x795E # +0x9060 0x79E6 # +0x9061 0x7D33 # +0x9062 0x81E3 # +0x9063 0x82AF # +0x9064 0x85AA # +0x9065 0x89AA # +0x9066 0x8A3A # +0x9067 0x8EAB # +0x9068 0x8F9B # +0x9069 0x9032 # +0x906A 0x91DD # +0x906B 0x9707 # +0x906C 0x4EBA # +0x906D 0x4EC1 # +0x906E 0x5203 # +0x906F 0x5875 # +0x9070 0x58EC # +0x9071 0x5C0B # +0x9072 0x751A # +0x9073 0x5C3D # +0x9074 0x814E # +0x9075 0x8A0A # +0x9076 0x8FC5 # +0x9077 0x9663 # +0x9078 0x976D # +0x9079 0x7B25 # +0x907A 0x8ACF # +0x907B 0x9808 # +0x907C 0x9162 # +0x907D 0x56F3 # +0x907E 0x53A8 # +0x9080 0x9017 # +0x9081 0x5439 # +0x9082 0x5782 # +0x9083 0x5E25 # +0x9084 0x63A8 # +0x9085 0x6C34 # +0x9086 0x708A # +0x9087 0x7761 # +0x9088 0x7C8B # +0x9089 0x7FE0 # +0x908A 0x8870 # +0x908B 0x9042 # +0x908C 0x9154 # +0x908D 0x9310 # +0x908E 0x9318 # +0x908F 0x968F # +0x9090 0x745E # +0x9091 0x9AC4 # +0x9092 0x5D07 # +0x9093 0x5D69 # +0x9094 0x6570 # +0x9095 0x67A2 # +0x9096 0x8DA8 # +0x9097 0x96DB # +0x9098 0x636E # +0x9099 0x6749 # +0x909A 0x6919 # +0x909B 0x83C5 # +0x909C 0x9817 # +0x909D 0x96C0 # +0x909E 0x88FE # +0x909F 0x6F84 # +0x90A0 0x647A # +0x90A1 0x5BF8 # +0x90A2 0x4E16 # +0x90A3 0x702C # +0x90A4 0x755D # +0x90A5 0x662F # +0x90A6 0x51C4 # +0x90A7 0x5236 # +0x90A8 0x52E2 # +0x90A9 0x59D3 # +0x90AA 0x5F81 # +0x90AB 0x6027 # +0x90AC 0x6210 # +0x90AD 0x653F # +0x90AE 0x6574 # +0x90AF 0x661F # +0x90B0 0x6674 # +0x90B1 0x68F2 # +0x90B2 0x6816 # +0x90B3 0x6B63 # +0x90B4 0x6E05 # +0x90B5 0x7272 # +0x90B6 0x751F # +0x90B7 0x76DB # +0x90B8 0x7CBE # +0x90B9 0x8056 # +0x90BA 0x58F0 # +0x90BB 0x88FD # +0x90BC 0x897F # +0x90BD 0x8AA0 # +0x90BE 0x8A93 # +0x90BF 0x8ACB # +0x90C0 0x901D # +0x90C1 0x9192 # +0x90C2 0x9752 # +0x90C3 0x9759 # +0x90C4 0x6589 # +0x90C5 0x7A0E # +0x90C6 0x8106 # +0x90C7 0x96BB # +0x90C8 0x5E2D # +0x90C9 0x60DC # +0x90CA 0x621A # +0x90CB 0x65A5 # +0x90CC 0x6614 # +0x90CD 0x6790 # +0x90CE 0x77F3 # +0x90CF 0x7A4D # +0x90D0 0x7C4D # +0x90D1 0x7E3E # +0x90D2 0x810A # +0x90D3 0x8CAC # +0x90D4 0x8D64 # +0x90D5 0x8DE1 # +0x90D6 0x8E5F # +0x90D7 0x78A9 # +0x90D8 0x5207 # +0x90D9 0x62D9 # +0x90DA 0x63A5 # +0x90DB 0x6442 # +0x90DC 0x6298 # +0x90DD 0x8A2D # +0x90DE 0x7A83 # +0x90DF 0x7BC0 # +0x90E0 0x8AAC # +0x90E1 0x96EA # +0x90E2 0x7D76 # +0x90E3 0x820C # +0x90E4 0x8749 # +0x90E5 0x4ED9 # +0x90E6 0x5148 # +0x90E7 0x5343 # +0x90E8 0x5360 # +0x90E9 0x5BA3 # +0x90EA 0x5C02 # +0x90EB 0x5C16 # +0x90EC 0x5DDD # +0x90ED 0x6226 # +0x90EE 0x6247 # +0x90EF 0x64B0 # +0x90F0 0x6813 # +0x90F1 0x6834 # +0x90F2 0x6CC9 # +0x90F3 0x6D45 # +0x90F4 0x6D17 # +0x90F5 0x67D3 # +0x90F6 0x6F5C # +0x90F7 0x714E # +0x90F8 0x717D # +0x90F9 0x65CB # +0x90FA 0x7A7F # +0x90FB 0x7BAD # +0x90FC 0x7DDA # +0x9140 0x7E4A # +0x9141 0x7FA8 # +0x9142 0x817A # +0x9143 0x821B # +0x9144 0x8239 # +0x9145 0x85A6 # +0x9146 0x8A6E # +0x9147 0x8CCE # +0x9148 0x8DF5 # +0x9149 0x9078 # +0x914A 0x9077 # +0x914B 0x92AD # +0x914C 0x9291 # +0x914D 0x9583 # +0x914E 0x9BAE # +0x914F 0x524D # +0x9150 0x5584 # +0x9151 0x6F38 # +0x9152 0x7136 # +0x9153 0x5168 # +0x9154 0x7985 # +0x9155 0x7E55 # +0x9156 0x81B3 # +0x9157 0x7CCE # +0x9158 0x564C # +0x9159 0x5851 # +0x915A 0x5CA8 # +0x915B 0x63AA # +0x915C 0x66FE # +0x915D 0x66FD # +0x915E 0x695A # +0x915F 0x72D9 # +0x9160 0x758F # +0x9161 0x758E # +0x9162 0x790E # +0x9163 0x7956 # +0x9164 0x79DF # +0x9165 0x7C97 # +0x9166 0x7D20 # +0x9167 0x7D44 # +0x9168 0x8607 # +0x9169 0x8A34 # +0x916A 0x963B # +0x916B 0x9061 # +0x916C 0x9F20 # +0x916D 0x50E7 # +0x916E 0x5275 # +0x916F 0x53CC # +0x9170 0x53E2 # +0x9171 0x5009 # +0x9172 0x55AA # +0x9173 0x58EE # +0x9174 0x594F # +0x9175 0x723D # +0x9176 0x5B8B # +0x9177 0x5C64 # +0x9178 0x531D # +0x9179 0x60E3 # +0x917A 0x60F3 # +0x917B 0x635C # +0x917C 0x6383 # +0x917D 0x633F # +0x917E 0x63BB # +0x9180 0x64CD # +0x9181 0x65E9 # +0x9182 0x66F9 # +0x9183 0x5DE3 # +0x9184 0x69CD # +0x9185 0x69FD # +0x9186 0x6F15 # +0x9187 0x71E5 # +0x9188 0x4E89 # +0x9189 0x75E9 # +0x918A 0x76F8 # +0x918B 0x7A93 # +0x918C 0x7CDF # +0x918D 0x7DCF # +0x918E 0x7D9C # +0x918F 0x8061 # +0x9190 0x8349 # +0x9191 0x8358 # +0x9192 0x846C # +0x9193 0x84BC # +0x9194 0x85FB # +0x9195 0x88C5 # +0x9196 0x8D70 # +0x9197 0x9001 # +0x9198 0x906D # +0x9199 0x9397 # +0x919A 0x971C # +0x919B 0x9A12 # +0x919C 0x50CF # +0x919D 0x5897 # +0x919E 0x618E # +0x919F 0x81D3 # +0x91A0 0x8535 # +0x91A1 0x8D08 # +0x91A2 0x9020 # +0x91A3 0x4FC3 # +0x91A4 0x5074 # +0x91A5 0x5247 # +0x91A6 0x5373 # +0x91A7 0x606F # +0x91A8 0x6349 # +0x91A9 0x675F # +0x91AA 0x6E2C # +0x91AB 0x8DB3 # +0x91AC 0x901F # +0x91AD 0x4FD7 # +0x91AE 0x5C5E # +0x91AF 0x8CCA # +0x91B0 0x65CF # +0x91B1 0x7D9A # +0x91B2 0x5352 # +0x91B3 0x8896 # +0x91B4 0x5176 # +0x91B5 0x63C3 # +0x91B6 0x5B58 # +0x91B7 0x5B6B # +0x91B8 0x5C0A # +0x91B9 0x640D # +0x91BA 0x6751 # +0x91BB 0x905C # +0x91BC 0x4ED6 # +0x91BD 0x591A # +0x91BE 0x592A # +0x91BF 0x6C70 # +0x91C0 0x8A51 # +0x91C1 0x553E # +0x91C2 0x5815 # +0x91C3 0x59A5 # +0x91C4 0x60F0 # +0x91C5 0x6253 # +0x91C6 0x67C1 # +0x91C7 0x8235 # +0x91C8 0x6955 # +0x91C9 0x9640 # +0x91CA 0x99C4 # +0x91CB 0x9A28 # +0x91CC 0x4F53 # +0x91CD 0x5806 # +0x91CE 0x5BFE # +0x91CF 0x8010 # +0x91D0 0x5CB1 # +0x91D1 0x5E2F # +0x91D2 0x5F85 # +0x91D3 0x6020 # +0x91D4 0x614B # +0x91D5 0x6234 # +0x91D6 0x66FF # +0x91D7 0x6CF0 # +0x91D8 0x6EDE # +0x91D9 0x80CE # +0x91DA 0x817F # +0x91DB 0x82D4 # +0x91DC 0x888B # +0x91DD 0x8CB8 # +0x91DE 0x9000 # +0x91DF 0x902E # +0x91E0 0x968A # +0x91E1 0x9EDB # +0x91E2 0x9BDB # +0x91E3 0x4EE3 # +0x91E4 0x53F0 # +0x91E5 0x5927 # +0x91E6 0x7B2C # +0x91E7 0x918D # +0x91E8 0x984C # +0x91E9 0x9DF9 # +0x91EA 0x6EDD # +0x91EB 0x7027 # +0x91EC 0x5353 # +0x91ED 0x5544 # +0x91EE 0x5B85 # +0x91EF 0x6258 # +0x91F0 0x629E # +0x91F1 0x62D3 # +0x91F2 0x6CA2 # +0x91F3 0x6FEF # +0x91F4 0x7422 # +0x91F5 0x8A17 # +0x91F6 0x9438 # +0x91F7 0x6FC1 # +0x91F8 0x8AFE # +0x91F9 0x8338 # +0x91FA 0x51E7 # +0x91FB 0x86F8 # +0x91FC 0x53EA # +0x9240 0x53E9 # +0x9241 0x4F46 # +0x9242 0x9054 # +0x9243 0x8FB0 # +0x9244 0x596A # +0x9245 0x8131 # +0x9246 0x5DFD # +0x9247 0x7AEA # +0x9248 0x8FBF # +0x9249 0x68DA # +0x924A 0x8C37 # +0x924B 0x72F8 # +0x924C 0x9C48 # +0x924D 0x6A3D # +0x924E 0x8AB0 # +0x924F 0x4E39 # +0x9250 0x5358 # +0x9251 0x5606 # +0x9252 0x5766 # +0x9253 0x62C5 # +0x9254 0x63A2 # +0x9255 0x65E6 # +0x9256 0x6B4E # +0x9257 0x6DE1 # +0x9258 0x6E5B # +0x9259 0x70AD # +0x925A 0x77ED # +0x925B 0x7AEF # +0x925C 0x7BAA # +0x925D 0x7DBB # +0x925E 0x803D # +0x925F 0x80C6 # +0x9260 0x86CB # +0x9261 0x8A95 # +0x9262 0x935B # +0x9263 0x56E3 # +0x9264 0x58C7 # +0x9265 0x5F3E # +0x9266 0x65AD # +0x9267 0x6696 # +0x9268 0x6A80 # +0x9269 0x6BB5 # +0x926A 0x7537 # +0x926B 0x8AC7 # +0x926C 0x5024 # +0x926D 0x77E5 # +0x926E 0x5730 # +0x926F 0x5F1B # +0x9270 0x6065 # +0x9271 0x667A # +0x9272 0x6C60 # +0x9273 0x75F4 # +0x9274 0x7A1A # +0x9275 0x7F6E # +0x9276 0x81F4 # +0x9277 0x8718 # +0x9278 0x9045 # +0x9279 0x99B3 # +0x927A 0x7BC9 # +0x927B 0x755C # +0x927C 0x7AF9 # +0x927D 0x7B51 # +0x927E 0x84C4 # +0x9280 0x9010 # +0x9281 0x79E9 # +0x9282 0x7A92 # +0x9283 0x8336 # +0x9284 0x5AE1 # +0x9285 0x7740 # +0x9286 0x4E2D # +0x9287 0x4EF2 # +0x9288 0x5B99 # +0x9289 0x5FE0 # +0x928A 0x62BD # +0x928B 0x663C # +0x928C 0x67F1 # +0x928D 0x6CE8 # +0x928E 0x866B # +0x928F 0x8877 # +0x9290 0x8A3B # +0x9291 0x914E # +0x9292 0x92F3 # +0x9293 0x99D0 # +0x9294 0x6A17 # +0x9295 0x7026 # +0x9296 0x732A # +0x9297 0x82E7 # +0x9298 0x8457 # +0x9299 0x8CAF # +0x929A 0x4E01 # +0x929B 0x5146 # +0x929C 0x51CB # +0x929D 0x558B # +0x929E 0x5BF5 # +0x929F 0x5E16 # +0x92A0 0x5E33 # +0x92A1 0x5E81 # +0x92A2 0x5F14 # +0x92A3 0x5F35 # +0x92A4 0x5F6B # +0x92A5 0x5FB4 # +0x92A6 0x61F2 # +0x92A7 0x6311 # +0x92A8 0x66A2 # +0x92A9 0x671D # +0x92AA 0x6F6E # +0x92AB 0x7252 # +0x92AC 0x753A # +0x92AD 0x773A # +0x92AE 0x8074 # +0x92AF 0x8139 # +0x92B0 0x8178 # +0x92B1 0x8776 # +0x92B2 0x8ABF # +0x92B3 0x8ADC # +0x92B4 0x8D85 # +0x92B5 0x8DF3 # +0x92B6 0x929A # +0x92B7 0x9577 # +0x92B8 0x9802 # +0x92B9 0x9CE5 # +0x92BA 0x52C5 # +0x92BB 0x6357 # +0x92BC 0x76F4 # +0x92BD 0x6715 # +0x92BE 0x6C88 # +0x92BF 0x73CD # +0x92C0 0x8CC3 # +0x92C1 0x93AE # +0x92C2 0x9673 # +0x92C3 0x6D25 # +0x92C4 0x589C # +0x92C5 0x690E # +0x92C6 0x69CC # +0x92C7 0x8FFD # +0x92C8 0x939A # +0x92C9 0x75DB # +0x92CA 0x901A # +0x92CB 0x585A # +0x92CC 0x6802 # +0x92CD 0x63B4 # +0x92CE 0x69FB # +0x92CF 0x4F43 # +0x92D0 0x6F2C # +0x92D1 0x67D8 # +0x92D2 0x8FBB # +0x92D3 0x8526 # +0x92D4 0x7DB4 # +0x92D5 0x9354 # +0x92D6 0x693F # +0x92D7 0x6F70 # +0x92D8 0x576A # +0x92D9 0x58F7 # +0x92DA 0x5B2C # +0x92DB 0x7D2C # +0x92DC 0x722A # +0x92DD 0x540A # +0x92DE 0x91E3 # +0x92DF 0x9DB4 # +0x92E0 0x4EAD # +0x92E1 0x4F4E # +0x92E2 0x505C # +0x92E3 0x5075 # +0x92E4 0x5243 # +0x92E5 0x8C9E # +0x92E6 0x5448 # +0x92E7 0x5824 # +0x92E8 0x5B9A # +0x92E9 0x5E1D # +0x92EA 0x5E95 # +0x92EB 0x5EAD # +0x92EC 0x5EF7 # +0x92ED 0x5F1F # +0x92EE 0x608C # +0x92EF 0x62B5 # +0x92F0 0x633A # +0x92F1 0x63D0 # +0x92F2 0x68AF # +0x92F3 0x6C40 # +0x92F4 0x7887 # +0x92F5 0x798E # +0x92F6 0x7A0B # +0x92F7 0x7DE0 # +0x92F8 0x8247 # +0x92F9 0x8A02 # +0x92FA 0x8AE6 # +0x92FB 0x8E44 # +0x92FC 0x9013 # +0x9340 0x90B8 # +0x9341 0x912D # +0x9342 0x91D8 # +0x9343 0x9F0E # +0x9344 0x6CE5 # +0x9345 0x6458 # +0x9346 0x64E2 # +0x9347 0x6575 # +0x9348 0x6EF4 # +0x9349 0x7684 # +0x934A 0x7B1B # +0x934B 0x9069 # +0x934C 0x93D1 # +0x934D 0x6EBA # +0x934E 0x54F2 # +0x934F 0x5FB9 # +0x9350 0x64A4 # +0x9351 0x8F4D # +0x9352 0x8FED # +0x9353 0x9244 # +0x9354 0x5178 # +0x9355 0x586B # +0x9356 0x5929 # +0x9357 0x5C55 # +0x9358 0x5E97 # +0x9359 0x6DFB # +0x935A 0x7E8F # +0x935B 0x751C # +0x935C 0x8CBC # +0x935D 0x8EE2 # +0x935E 0x985B # +0x935F 0x70B9 # +0x9360 0x4F1D # +0x9361 0x6BBF # +0x9362 0x6FB1 # +0x9363 0x7530 # +0x9364 0x96FB # +0x9365 0x514E # +0x9366 0x5410 # +0x9367 0x5835 # +0x9368 0x5857 # +0x9369 0x59AC # +0x936A 0x5C60 # +0x936B 0x5F92 # +0x936C 0x6597 # +0x936D 0x675C # +0x936E 0x6E21 # +0x936F 0x767B # +0x9370 0x83DF # +0x9371 0x8CED # +0x9372 0x9014 # +0x9373 0x90FD # +0x9374 0x934D # +0x9375 0x7825 # +0x9376 0x783A # +0x9377 0x52AA # +0x9378 0x5EA6 # +0x9379 0x571F # +0x937A 0x5974 # +0x937B 0x6012 # +0x937C 0x5012 # +0x937D 0x515A # +0x937E 0x51AC # +0x9380 0x51CD # +0x9381 0x5200 # +0x9382 0x5510 # +0x9383 0x5854 # +0x9384 0x5858 # +0x9385 0x5957 # +0x9386 0x5B95 # +0x9387 0x5CF6 # +0x9388 0x5D8B # +0x9389 0x60BC # +0x938A 0x6295 # +0x938B 0x642D # +0x938C 0x6771 # +0x938D 0x6843 # +0x938E 0x68BC # +0x938F 0x68DF # +0x9390 0x76D7 # +0x9391 0x6DD8 # +0x9392 0x6E6F # +0x9393 0x6D9B # +0x9394 0x706F # +0x9395 0x71C8 # +0x9396 0x5F53 # +0x9397 0x75D8 # +0x9398 0x7977 # +0x9399 0x7B49 # +0x939A 0x7B54 # +0x939B 0x7B52 # +0x939C 0x7CD6 # +0x939D 0x7D71 # +0x939E 0x5230 # +0x939F 0x8463 # +0x93A0 0x8569 # +0x93A1 0x85E4 # +0x93A2 0x8A0E # +0x93A3 0x8B04 # +0x93A4 0x8C46 # +0x93A5 0x8E0F # +0x93A6 0x9003 # +0x93A7 0x900F # +0x93A8 0x9419 # +0x93A9 0x9676 # +0x93AA 0x982D # +0x93AB 0x9A30 # +0x93AC 0x95D8 # +0x93AD 0x50CD # +0x93AE 0x52D5 # +0x93AF 0x540C # +0x93B0 0x5802 # +0x93B1 0x5C0E # +0x93B2 0x61A7 # +0x93B3 0x649E # +0x93B4 0x6D1E # +0x93B5 0x77B3 # +0x93B6 0x7AE5 # +0x93B7 0x80F4 # +0x93B8 0x8404 # +0x93B9 0x9053 # +0x93BA 0x9285 # +0x93BB 0x5CE0 # +0x93BC 0x9D07 # +0x93BD 0x533F # +0x93BE 0x5F97 # +0x93BF 0x5FB3 # +0x93C0 0x6D9C # +0x93C1 0x7279 # +0x93C2 0x7763 # +0x93C3 0x79BF # +0x93C4 0x7BE4 # +0x93C5 0x6BD2 # +0x93C6 0x72EC # +0x93C7 0x8AAD # +0x93C8 0x6803 # +0x93C9 0x6A61 # +0x93CA 0x51F8 # +0x93CB 0x7A81 # +0x93CC 0x6934 # +0x93CD 0x5C4A # +0x93CE 0x9CF6 # +0x93CF 0x82EB # +0x93D0 0x5BC5 # +0x93D1 0x9149 # +0x93D2 0x701E # +0x93D3 0x5678 # +0x93D4 0x5C6F # +0x93D5 0x60C7 # +0x93D6 0x6566 # +0x93D7 0x6C8C # +0x93D8 0x8C5A # +0x93D9 0x9041 # +0x93DA 0x9813 # +0x93DB 0x5451 # +0x93DC 0x66C7 # +0x93DD 0x920D # +0x93DE 0x5948 # +0x93DF 0x90A3 # +0x93E0 0x5185 # +0x93E1 0x4E4D # +0x93E2 0x51EA # +0x93E3 0x8599 # +0x93E4 0x8B0E # +0x93E5 0x7058 # +0x93E6 0x637A # +0x93E7 0x934B # +0x93E8 0x6962 # +0x93E9 0x99B4 # +0x93EA 0x7E04 # +0x93EB 0x7577 # +0x93EC 0x5357 # +0x93ED 0x6960 # +0x93EE 0x8EDF # +0x93EF 0x96E3 # +0x93F0 0x6C5D # +0x93F1 0x4E8C # +0x93F2 0x5C3C # +0x93F3 0x5F10 # +0x93F4 0x8FE9 # +0x93F5 0x5302 # +0x93F6 0x8CD1 # +0x93F7 0x8089 # +0x93F8 0x8679 # +0x93F9 0x5EFF # +0x93FA 0x65E5 # +0x93FB 0x4E73 # +0x93FC 0x5165 # +0x9440 0x5982 # +0x9441 0x5C3F # +0x9442 0x97EE # +0x9443 0x4EFB # +0x9444 0x598A # +0x9445 0x5FCD # +0x9446 0x8A8D # +0x9447 0x6FE1 # +0x9448 0x79B0 # +0x9449 0x7962 # +0x944A 0x5BE7 # +0x944B 0x8471 # +0x944C 0x732B # +0x944D 0x71B1 # +0x944E 0x5E74 # +0x944F 0x5FF5 # +0x9450 0x637B # +0x9451 0x649A # +0x9452 0x71C3 # +0x9453 0x7C98 # +0x9454 0x4E43 # +0x9455 0x5EFC # +0x9456 0x4E4B # +0x9457 0x57DC # +0x9458 0x56A2 # +0x9459 0x60A9 # +0x945A 0x6FC3 # +0x945B 0x7D0D # +0x945C 0x80FD # +0x945D 0x8133 # +0x945E 0x81BF # +0x945F 0x8FB2 # +0x9460 0x8997 # +0x9461 0x86A4 # +0x9462 0x5DF4 # +0x9463 0x628A # +0x9464 0x64AD # +0x9465 0x8987 # +0x9466 0x6777 # +0x9467 0x6CE2 # +0x9468 0x6D3E # +0x9469 0x7436 # +0x946A 0x7834 # +0x946B 0x5A46 # +0x946C 0x7F75 # +0x946D 0x82AD # +0x946E 0x99AC # +0x946F 0x4FF3 # +0x9470 0x5EC3 # +0x9471 0x62DD # +0x9472 0x6392 # +0x9473 0x6557 # +0x9474 0x676F # +0x9475 0x76C3 # +0x9476 0x724C # +0x9477 0x80CC # +0x9478 0x80BA # +0x9479 0x8F29 # +0x947A 0x914D # +0x947B 0x500D # +0x947C 0x57F9 # +0x947D 0x5A92 # +0x947E 0x6885 # +0x9480 0x6973 # +0x9481 0x7164 # +0x9482 0x72FD # +0x9483 0x8CB7 # +0x9484 0x58F2 # +0x9485 0x8CE0 # +0x9486 0x966A # +0x9487 0x9019 # +0x9488 0x877F # +0x9489 0x79E4 # +0x948A 0x77E7 # +0x948B 0x8429 # +0x948C 0x4F2F # +0x948D 0x5265 # +0x948E 0x535A # +0x948F 0x62CD # +0x9490 0x67CF # +0x9491 0x6CCA # +0x9492 0x767D # +0x9493 0x7B94 # +0x9494 0x7C95 # +0x9495 0x8236 # +0x9496 0x8584 # +0x9497 0x8FEB # +0x9498 0x66DD # +0x9499 0x6F20 # +0x949A 0x7206 # +0x949B 0x7E1B # +0x949C 0x83AB # +0x949D 0x99C1 # +0x949E 0x9EA6 # +0x949F 0x51FD # +0x94A0 0x7BB1 # +0x94A1 0x7872 # +0x94A2 0x7BB8 # +0x94A3 0x8087 # +0x94A4 0x7B48 # +0x94A5 0x6AE8 # +0x94A6 0x5E61 # +0x94A7 0x808C # +0x94A8 0x7551 # +0x94A9 0x7560 # +0x94AA 0x516B # +0x94AB 0x9262 # +0x94AC 0x6E8C # +0x94AD 0x767A # +0x94AE 0x9197 # +0x94AF 0x9AEA # +0x94B0 0x4F10 # +0x94B1 0x7F70 # +0x94B2 0x629C # +0x94B3 0x7B4F # +0x94B4 0x95A5 # +0x94B5 0x9CE9 # +0x94B6 0x567A # +0x94B7 0x5859 # +0x94B8 0x86E4 # +0x94B9 0x96BC # +0x94BA 0x4F34 # +0x94BB 0x5224 # +0x94BC 0x534A # +0x94BD 0x53CD # +0x94BE 0x53DB # +0x94BF 0x5E06 # +0x94C0 0x642C # +0x94C1 0x6591 # +0x94C2 0x677F # +0x94C3 0x6C3E # +0x94C4 0x6C4E # +0x94C5 0x7248 # +0x94C6 0x72AF # +0x94C7 0x73ED # +0x94C8 0x7554 # +0x94C9 0x7E41 # +0x94CA 0x822C # +0x94CB 0x85E9 # +0x94CC 0x8CA9 # +0x94CD 0x7BC4 # +0x94CE 0x91C6 # +0x94CF 0x7169 # +0x94D0 0x9812 # +0x94D1 0x98EF # +0x94D2 0x633D # +0x94D3 0x6669 # +0x94D4 0x756A # +0x94D5 0x76E4 # +0x94D6 0x78D0 # +0x94D7 0x8543 # +0x94D8 0x86EE # +0x94D9 0x532A # +0x94DA 0x5351 # +0x94DB 0x5426 # +0x94DC 0x5983 # +0x94DD 0x5E87 # +0x94DE 0x5F7C # +0x94DF 0x60B2 # +0x94E0 0x6249 # +0x94E1 0x6279 # +0x94E2 0x62AB # +0x94E3 0x6590 # +0x94E4 0x6BD4 # +0x94E5 0x6CCC # +0x94E6 0x75B2 # +0x94E7 0x76AE # +0x94E8 0x7891 # +0x94E9 0x79D8 # +0x94EA 0x7DCB # +0x94EB 0x7F77 # +0x94EC 0x80A5 # +0x94ED 0x88AB # +0x94EE 0x8AB9 # +0x94EF 0x8CBB # +0x94F0 0x907F # +0x94F1 0x975E # +0x94F2 0x98DB # +0x94F3 0x6A0B # +0x94F4 0x7C38 # +0x94F5 0x5099 # +0x94F6 0x5C3E # +0x94F7 0x5FAE # +0x94F8 0x6787 # +0x94F9 0x6BD8 # +0x94FA 0x7435 # +0x94FB 0x7709 # +0x94FC 0x7F8E # +0x9540 0x9F3B # +0x9541 0x67CA # +0x9542 0x7A17 # +0x9543 0x5339 # +0x9544 0x758B # +0x9545 0x9AED # +0x9546 0x5F66 # +0x9547 0x819D # +0x9548 0x83F1 # +0x9549 0x8098 # +0x954A 0x5F3C # +0x954B 0x5FC5 # +0x954C 0x7562 # +0x954D 0x7B46 # +0x954E 0x903C # +0x954F 0x6867 # +0x9550 0x59EB # +0x9551 0x5A9B # +0x9552 0x7D10 # +0x9553 0x767E # +0x9554 0x8B2C # +0x9555 0x4FF5 # +0x9556 0x5F6A # +0x9557 0x6A19 # +0x9558 0x6C37 # +0x9559 0x6F02 # +0x955A 0x74E2 # +0x955B 0x7968 # +0x955C 0x8868 # +0x955D 0x8A55 # +0x955E 0x8C79 # +0x955F 0x5EDF # +0x9560 0x63CF # +0x9561 0x75C5 # +0x9562 0x79D2 # +0x9563 0x82D7 # +0x9564 0x9328 # +0x9565 0x92F2 # +0x9566 0x849C # +0x9567 0x86ED # +0x9568 0x9C2D # +0x9569 0x54C1 # +0x956A 0x5F6C # +0x956B 0x658C # +0x956C 0x6D5C # +0x956D 0x7015 # +0x956E 0x8CA7 # +0x956F 0x8CD3 # +0x9570 0x983B # +0x9571 0x654F # +0x9572 0x74F6 # +0x9573 0x4E0D # +0x9574 0x4ED8 # +0x9575 0x57E0 # +0x9576 0x592B # +0x9577 0x5A66 # +0x9578 0x5BCC # +0x9579 0x51A8 # +0x957A 0x5E03 # +0x957B 0x5E9C # +0x957C 0x6016 # +0x957D 0x6276 # +0x957E 0x6577 # +0x9580 0x65A7 # +0x9581 0x666E # +0x9582 0x6D6E # +0x9583 0x7236 # +0x9584 0x7B26 # +0x9585 0x8150 # +0x9586 0x819A # +0x9587 0x8299 # +0x9588 0x8B5C # +0x9589 0x8CA0 # +0x958A 0x8CE6 # +0x958B 0x8D74 # +0x958C 0x961C # +0x958D 0x9644 # +0x958E 0x4FAE # +0x958F 0x64AB # +0x9590 0x6B66 # +0x9591 0x821E # +0x9592 0x8461 # +0x9593 0x856A # +0x9594 0x90E8 # +0x9595 0x5C01 # +0x9596 0x6953 # +0x9597 0x98A8 # +0x9598 0x847A # +0x9599 0x8557 # +0x959A 0x4F0F # +0x959B 0x526F # +0x959C 0x5FA9 # +0x959D 0x5E45 # +0x959E 0x670D # +0x959F 0x798F # +0x95A0 0x8179 # +0x95A1 0x8907 # +0x95A2 0x8986 # +0x95A3 0x6DF5 # +0x95A4 0x5F17 # +0x95A5 0x6255 # +0x95A6 0x6CB8 # +0x95A7 0x4ECF # +0x95A8 0x7269 # +0x95A9 0x9B92 # +0x95AA 0x5206 # +0x95AB 0x543B # +0x95AC 0x5674 # +0x95AD 0x58B3 # +0x95AE 0x61A4 # +0x95AF 0x626E # +0x95B0 0x711A # +0x95B1 0x596E # +0x95B2 0x7C89 # +0x95B3 0x7CDE # +0x95B4 0x7D1B # +0x95B5 0x96F0 # +0x95B6 0x6587 # +0x95B7 0x805E # +0x95B8 0x4E19 # +0x95B9 0x4F75 # +0x95BA 0x5175 # +0x95BB 0x5840 # +0x95BC 0x5E63 # +0x95BD 0x5E73 # +0x95BE 0x5F0A # +0x95BF 0x67C4 # +0x95C0 0x4E26 # +0x95C1 0x853D # +0x95C2 0x9589 # +0x95C3 0x965B # +0x95C4 0x7C73 # +0x95C5 0x9801 # +0x95C6 0x50FB # +0x95C7 0x58C1 # +0x95C8 0x7656 # +0x95C9 0x78A7 # +0x95CA 0x5225 # +0x95CB 0x77A5 # +0x95CC 0x8511 # +0x95CD 0x7B86 # +0x95CE 0x504F # +0x95CF 0x5909 # +0x95D0 0x7247 # +0x95D1 0x7BC7 # +0x95D2 0x7DE8 # +0x95D3 0x8FBA # +0x95D4 0x8FD4 # +0x95D5 0x904D # +0x95D6 0x4FBF # +0x95D7 0x52C9 # +0x95D8 0x5A29 # +0x95D9 0x5F01 # +0x95DA 0x97AD # +0x95DB 0x4FDD # +0x95DC 0x8217 # +0x95DD 0x92EA # +0x95DE 0x5703 # +0x95DF 0x6355 # +0x95E0 0x6B69 # +0x95E1 0x752B # +0x95E2 0x88DC # +0x95E3 0x8F14 # +0x95E4 0x7A42 # +0x95E5 0x52DF # +0x95E6 0x5893 # +0x95E7 0x6155 # +0x95E8 0x620A # +0x95E9 0x66AE # +0x95EA 0x6BCD # +0x95EB 0x7C3F # +0x95EC 0x83E9 # +0x95ED 0x5023 # +0x95EE 0x4FF8 # +0x95EF 0x5305 # +0x95F0 0x5446 # +0x95F1 0x5831 # +0x95F2 0x5949 # +0x95F3 0x5B9D # +0x95F4 0x5CF0 # +0x95F5 0x5CEF # +0x95F6 0x5D29 # +0x95F7 0x5E96 # +0x95F8 0x62B1 # +0x95F9 0x6367 # +0x95FA 0x653E # +0x95FB 0x65B9 # +0x95FC 0x670B # +0x9640 0x6CD5 # +0x9641 0x6CE1 # +0x9642 0x70F9 # +0x9643 0x7832 # +0x9644 0x7E2B # +0x9645 0x80DE # +0x9646 0x82B3 # +0x9647 0x840C # +0x9648 0x84EC # +0x9649 0x8702 # +0x964A 0x8912 # +0x964B 0x8A2A # +0x964C 0x8C4A # +0x964D 0x90A6 # +0x964E 0x92D2 # +0x964F 0x98FD # +0x9650 0x9CF3 # +0x9651 0x9D6C # +0x9652 0x4E4F # +0x9653 0x4EA1 # +0x9654 0x508D # +0x9655 0x5256 # +0x9656 0x574A # +0x9657 0x59A8 # +0x9658 0x5E3D # +0x9659 0x5FD8 # +0x965A 0x5FD9 # +0x965B 0x623F # +0x965C 0x66B4 # +0x965D 0x671B # +0x965E 0x67D0 # +0x965F 0x68D2 # +0x9660 0x5192 # +0x9661 0x7D21 # +0x9662 0x80AA # +0x9663 0x81A8 # +0x9664 0x8B00 # +0x9665 0x8C8C # +0x9666 0x8CBF # +0x9667 0x927E # +0x9668 0x9632 # +0x9669 0x5420 # +0x966A 0x982C # +0x966B 0x5317 # +0x966C 0x50D5 # +0x966D 0x535C # +0x966E 0x58A8 # +0x966F 0x64B2 # +0x9670 0x6734 # +0x9671 0x7267 # +0x9672 0x7766 # +0x9673 0x7A46 # +0x9674 0x91E6 # +0x9675 0x52C3 # +0x9676 0x6CA1 # +0x9677 0x6B86 # +0x9678 0x5800 # +0x9679 0x5E4C # +0x967A 0x5954 # +0x967B 0x672C # +0x967C 0x7FFB # +0x967D 0x51E1 # +0x967E 0x76C6 # +0x9680 0x6469 # +0x9681 0x78E8 # +0x9682 0x9B54 # +0x9683 0x9EBB # +0x9684 0x57CB # +0x9685 0x59B9 # +0x9686 0x6627 # +0x9687 0x679A # +0x9688 0x6BCE # +0x9689 0x54E9 # +0x968A 0x69D9 # +0x968B 0x5E55 # +0x968C 0x819C # +0x968D 0x6795 # +0x968E 0x9BAA # +0x968F 0x67FE # +0x9690 0x9C52 # +0x9691 0x685D # +0x9692 0x4EA6 # +0x9693 0x4FE3 # +0x9694 0x53C8 # +0x9695 0x62B9 # +0x9696 0x672B # +0x9697 0x6CAB # +0x9698 0x8FC4 # +0x9699 0x4FAD # +0x969A 0x7E6D # +0x969B 0x9EBF # +0x969C 0x4E07 # +0x969D 0x6162 # +0x969E 0x6E80 # +0x969F 0x6F2B # +0x96A0 0x8513 # +0x96A1 0x5473 # +0x96A2 0x672A # +0x96A3 0x9B45 # +0x96A4 0x5DF3 # +0x96A5 0x7B95 # +0x96A6 0x5CAC # +0x96A7 0x5BC6 # +0x96A8 0x871C # +0x96A9 0x6E4A # +0x96AA 0x84D1 # +0x96AB 0x7A14 # +0x96AC 0x8108 # +0x96AD 0x5999 # +0x96AE 0x7C8D # +0x96AF 0x6C11 # +0x96B0 0x7720 # +0x96B1 0x52D9 # +0x96B2 0x5922 # +0x96B3 0x7121 # +0x96B4 0x725F # +0x96B5 0x77DB # +0x96B6 0x9727 # +0x96B7 0x9D61 # +0x96B8 0x690B # +0x96B9 0x5A7F # +0x96BA 0x5A18 # +0x96BB 0x51A5 # +0x96BC 0x540D # +0x96BD 0x547D # +0x96BE 0x660E # +0x96BF 0x76DF # +0x96C0 0x8FF7 # +0x96C1 0x9298 # +0x96C2 0x9CF4 # +0x96C3 0x59EA # +0x96C4 0x725D # +0x96C5 0x6EC5 # +0x96C6 0x514D # +0x96C7 0x68C9 # +0x96C8 0x7DBF # +0x96C9 0x7DEC # +0x96CA 0x9762 # +0x96CB 0x9EBA # +0x96CC 0x6478 # +0x96CD 0x6A21 # +0x96CE 0x8302 # +0x96CF 0x5984 # +0x96D0 0x5B5F # +0x96D1 0x6BDB # +0x96D2 0x731B # +0x96D3 0x76F2 # +0x96D4 0x7DB2 # +0x96D5 0x8017 # +0x96D6 0x8499 # +0x96D7 0x5132 # +0x96D8 0x6728 # +0x96D9 0x9ED9 # +0x96DA 0x76EE # +0x96DB 0x6762 # +0x96DC 0x52FF # +0x96DD 0x9905 # +0x96DE 0x5C24 # +0x96DF 0x623B # +0x96E0 0x7C7E # +0x96E1 0x8CB0 # +0x96E2 0x554F # +0x96E3 0x60B6 # +0x96E4 0x7D0B # +0x96E5 0x9580 # +0x96E6 0x5301 # +0x96E7 0x4E5F # +0x96E8 0x51B6 # +0x96E9 0x591C # +0x96EA 0x723A # +0x96EB 0x8036 # +0x96EC 0x91CE # +0x96ED 0x5F25 # +0x96EE 0x77E2 # +0x96EF 0x5384 # +0x96F0 0x5F79 # +0x96F1 0x7D04 # +0x96F2 0x85AC # +0x96F3 0x8A33 # +0x96F4 0x8E8D # +0x96F5 0x9756 # +0x96F6 0x67F3 # +0x96F7 0x85AE # +0x96F8 0x9453 # +0x96F9 0x6109 # +0x96FA 0x6108 # +0x96FB 0x6CB9 # +0x96FC 0x7652 # +0x9740 0x8AED # +0x9741 0x8F38 # +0x9742 0x552F # +0x9743 0x4F51 # +0x9744 0x512A # +0x9745 0x52C7 # +0x9746 0x53CB # +0x9747 0x5BA5 # +0x9748 0x5E7D # +0x9749 0x60A0 # +0x974A 0x6182 # +0x974B 0x63D6 # +0x974C 0x6709 # +0x974D 0x67DA # +0x974E 0x6E67 # +0x974F 0x6D8C # +0x9750 0x7336 # +0x9751 0x7337 # +0x9752 0x7531 # +0x9753 0x7950 # +0x9754 0x88D5 # +0x9755 0x8A98 # +0x9756 0x904A # +0x9757 0x9091 # +0x9758 0x90F5 # +0x9759 0x96C4 # +0x975A 0x878D # +0x975B 0x5915 # +0x975C 0x4E88 # +0x975D 0x4F59 # +0x975E 0x4E0E # +0x975F 0x8A89 # +0x9760 0x8F3F # +0x9761 0x9810 # +0x9762 0x50AD # +0x9763 0x5E7C # +0x9764 0x5996 # +0x9765 0x5BB9 # +0x9766 0x5EB8 # +0x9767 0x63DA # +0x9768 0x63FA # +0x9769 0x64C1 # +0x976A 0x66DC # +0x976B 0x694A # +0x976C 0x69D8 # +0x976D 0x6D0B # +0x976E 0x6EB6 # +0x976F 0x7194 # +0x9770 0x7528 # +0x9771 0x7AAF # +0x9772 0x7F8A # +0x9773 0x8000 # +0x9774 0x8449 # +0x9775 0x84C9 # +0x9776 0x8981 # +0x9777 0x8B21 # +0x9778 0x8E0A # +0x9779 0x9065 # +0x977A 0x967D # +0x977B 0x990A # +0x977C 0x617E # +0x977D 0x6291 # +0x977E 0x6B32 # +0x9780 0x6C83 # +0x9781 0x6D74 # +0x9782 0x7FCC # +0x9783 0x7FFC # +0x9784 0x6DC0 # +0x9785 0x7F85 # +0x9786 0x87BA # +0x9787 0x88F8 # +0x9788 0x6765 # +0x9789 0x83B1 # +0x978A 0x983C # +0x978B 0x96F7 # +0x978C 0x6D1B # +0x978D 0x7D61 # +0x978E 0x843D # +0x978F 0x916A # +0x9790 0x4E71 # +0x9791 0x5375 # +0x9792 0x5D50 # +0x9793 0x6B04 # +0x9794 0x6FEB # +0x9795 0x85CD # +0x9796 0x862D # +0x9797 0x89A7 # +0x9798 0x5229 # +0x9799 0x540F # +0x979A 0x5C65 # +0x979B 0x674E # +0x979C 0x68A8 # +0x979D 0x7406 # +0x979E 0x7483 # +0x979F 0x75E2 # +0x97A0 0x88CF # +0x97A1 0x88E1 # +0x97A2 0x91CC # +0x97A3 0x96E2 # +0x97A4 0x9678 # +0x97A5 0x5F8B # +0x97A6 0x7387 # +0x97A7 0x7ACB # +0x97A8 0x844E # +0x97A9 0x63A0 # +0x97AA 0x7565 # +0x97AB 0x5289 # +0x97AC 0x6D41 # +0x97AD 0x6E9C # +0x97AE 0x7409 # +0x97AF 0x7559 # +0x97B0 0x786B # +0x97B1 0x7C92 # +0x97B2 0x9686 # +0x97B3 0x7ADC # +0x97B4 0x9F8D # +0x97B5 0x4FB6 # +0x97B6 0x616E # +0x97B7 0x65C5 # +0x97B8 0x865C # +0x97B9 0x4E86 # +0x97BA 0x4EAE # +0x97BB 0x50DA # +0x97BC 0x4E21 # +0x97BD 0x51CC # +0x97BE 0x5BEE # +0x97BF 0x6599 # +0x97C0 0x6881 # +0x97C1 0x6DBC # +0x97C2 0x731F # +0x97C3 0x7642 # +0x97C4 0x77AD # +0x97C5 0x7A1C # +0x97C6 0x7CE7 # +0x97C7 0x826F # +0x97C8 0x8AD2 # +0x97C9 0x907C # +0x97CA 0x91CF # +0x97CB 0x9675 # +0x97CC 0x9818 # +0x97CD 0x529B # +0x97CE 0x7DD1 # +0x97CF 0x502B # +0x97D0 0x5398 # +0x97D1 0x6797 # +0x97D2 0x6DCB # +0x97D3 0x71D0 # +0x97D4 0x7433 # +0x97D5 0x81E8 # +0x97D6 0x8F2A # +0x97D7 0x96A3 # +0x97D8 0x9C57 # +0x97D9 0x9E9F # +0x97DA 0x7460 # +0x97DB 0x5841 # +0x97DC 0x6D99 # +0x97DD 0x7D2F # +0x97DE 0x985E # +0x97DF 0x4EE4 # +0x97E0 0x4F36 # +0x97E1 0x4F8B # +0x97E2 0x51B7 # +0x97E3 0x52B1 # +0x97E4 0x5DBA # +0x97E5 0x601C # +0x97E6 0x73B2 # +0x97E7 0x793C # +0x97E8 0x82D3 # +0x97E9 0x9234 # +0x97EA 0x96B7 # +0x97EB 0x96F6 # +0x97EC 0x970A # +0x97ED 0x9E97 # +0x97EE 0x9F62 # +0x97EF 0x66A6 # +0x97F0 0x6B74 # +0x97F1 0x5217 # +0x97F2 0x52A3 # +0x97F3 0x70C8 # +0x97F4 0x88C2 # +0x97F5 0x5EC9 # +0x97F6 0x604B # +0x97F7 0x6190 # +0x97F8 0x6F23 # +0x97F9 0x7149 # +0x97FA 0x7C3E # +0x97FB 0x7DF4 # +0x97FC 0x806F # +0x9840 0x84EE # +0x9841 0x9023 # +0x9842 0x932C # +0x9843 0x5442 # +0x9844 0x9B6F # +0x9845 0x6AD3 # +0x9846 0x7089 # +0x9847 0x8CC2 # +0x9848 0x8DEF # +0x9849 0x9732 # +0x984A 0x52B4 # +0x984B 0x5A41 # +0x984C 0x5ECA # +0x984D 0x5F04 # +0x984E 0x6717 # +0x984F 0x697C # +0x9850 0x6994 # +0x9851 0x6D6A # +0x9852 0x6F0F # +0x9853 0x7262 # +0x9854 0x72FC # +0x9855 0x7BED # +0x9856 0x8001 # +0x9857 0x807E # +0x9858 0x874B # +0x9859 0x90CE # +0x985A 0x516D # +0x985B 0x9E93 # +0x985C 0x7984 # +0x985D 0x808B # +0x985E 0x9332 # +0x985F 0x8AD6 # +0x9860 0x502D # +0x9861 0x548C # +0x9862 0x8A71 # +0x9863 0x6B6A # +0x9864 0x8CC4 # +0x9865 0x8107 # +0x9866 0x60D1 # +0x9867 0x67A0 # +0x9868 0x9DF2 # +0x9869 0x4E99 # +0x986A 0x4E98 # +0x986B 0x9C10 # +0x986C 0x8A6B # +0x986D 0x85C1 # +0x986E 0x8568 # +0x986F 0x6900 # +0x9870 0x6E7E # +0x9871 0x7897 # +0x9872 0x8155 # +0x989F 0x5F0C # +0x98A0 0x4E10 # +0x98A1 0x4E15 # +0x98A2 0x4E2A # +0x98A3 0x4E31 # +0x98A4 0x4E36 # +0x98A5 0x4E3C # +0x98A6 0x4E3F # +0x98A7 0x4E42 # +0x98A8 0x4E56 # +0x98A9 0x4E58 # +0x98AA 0x4E82 # +0x98AB 0x4E85 # +0x98AC 0x8C6B # +0x98AD 0x4E8A # +0x98AE 0x8212 # +0x98AF 0x5F0D # +0x98B0 0x4E8E # +0x98B1 0x4E9E # +0x98B2 0x4E9F # +0x98B3 0x4EA0 # +0x98B4 0x4EA2 # +0x98B5 0x4EB0 # +0x98B6 0x4EB3 # +0x98B7 0x4EB6 # +0x98B8 0x4ECE # +0x98B9 0x4ECD # +0x98BA 0x4EC4 # +0x98BB 0x4EC6 # +0x98BC 0x4EC2 # +0x98BD 0x4ED7 # +0x98BE 0x4EDE # +0x98BF 0x4EED # +0x98C0 0x4EDF # +0x98C1 0x4EF7 # +0x98C2 0x4F09 # +0x98C3 0x4F5A # +0x98C4 0x4F30 # +0x98C5 0x4F5B # +0x98C6 0x4F5D # +0x98C7 0x4F57 # +0x98C8 0x4F47 # +0x98C9 0x4F76 # +0x98CA 0x4F88 # +0x98CB 0x4F8F # +0x98CC 0x4F98 # +0x98CD 0x4F7B # +0x98CE 0x4F69 # +0x98CF 0x4F70 # +0x98D0 0x4F91 # +0x98D1 0x4F6F # +0x98D2 0x4F86 # +0x98D3 0x4F96 # +0x98D4 0x5118 # +0x98D5 0x4FD4 # +0x98D6 0x4FDF # +0x98D7 0x4FCE # +0x98D8 0x4FD8 # +0x98D9 0x4FDB # +0x98DA 0x4FD1 # +0x98DB 0x4FDA # +0x98DC 0x4FD0 # +0x98DD 0x4FE4 # +0x98DE 0x4FE5 # +0x98DF 0x501A # +0x98E0 0x5028 # +0x98E1 0x5014 # +0x98E2 0x502A # +0x98E3 0x5025 # +0x98E4 0x5005 # +0x98E5 0x4F1C # +0x98E6 0x4FF6 # +0x98E7 0x5021 # +0x98E8 0x5029 # +0x98E9 0x502C # +0x98EA 0x4FFE # +0x98EB 0x4FEF # +0x98EC 0x5011 # +0x98ED 0x5006 # +0x98EE 0x5043 # +0x98EF 0x5047 # +0x98F0 0x6703 # +0x98F1 0x5055 # +0x98F2 0x5050 # +0x98F3 0x5048 # +0x98F4 0x505A # +0x98F5 0x5056 # +0x98F6 0x506C # +0x98F7 0x5078 # +0x98F8 0x5080 # +0x98F9 0x509A # +0x98FA 0x5085 # +0x98FB 0x50B4 # +0x98FC 0x50B2 # +0x9940 0x50C9 # +0x9941 0x50CA # +0x9942 0x50B3 # +0x9943 0x50C2 # +0x9944 0x50D6 # +0x9945 0x50DE # +0x9946 0x50E5 # +0x9947 0x50ED # +0x9948 0x50E3 # +0x9949 0x50EE # +0x994A 0x50F9 # +0x994B 0x50F5 # +0x994C 0x5109 # +0x994D 0x5101 # +0x994E 0x5102 # +0x994F 0x5116 # +0x9950 0x5115 # +0x9951 0x5114 # +0x9952 0x511A # +0x9953 0x5121 # +0x9954 0x513A # +0x9955 0x5137 # +0x9956 0x513C # +0x9957 0x513B # +0x9958 0x513F # +0x9959 0x5140 # +0x995A 0x5152 # +0x995B 0x514C # +0x995C 0x5154 # +0x995D 0x5162 # +0x995E 0x7AF8 # +0x995F 0x5169 # +0x9960 0x516A # +0x9961 0x516E # +0x9962 0x5180 # +0x9963 0x5182 # +0x9964 0x56D8 # +0x9965 0x518C # +0x9966 0x5189 # +0x9967 0x518F # +0x9968 0x5191 # +0x9969 0x5193 # +0x996A 0x5195 # +0x996B 0x5196 # +0x996C 0x51A4 # +0x996D 0x51A6 # +0x996E 0x51A2 # +0x996F 0x51A9 # +0x9970 0x51AA # +0x9971 0x51AB # +0x9972 0x51B3 # +0x9973 0x51B1 # +0x9974 0x51B2 # +0x9975 0x51B0 # +0x9976 0x51B5 # +0x9977 0x51BD # +0x9978 0x51C5 # +0x9979 0x51C9 # +0x997A 0x51DB # +0x997B 0x51E0 # +0x997C 0x8655 # +0x997D 0x51E9 # +0x997E 0x51ED # +0x9980 0x51F0 # +0x9981 0x51F5 # +0x9982 0x51FE # +0x9983 0x5204 # +0x9984 0x520B # +0x9985 0x5214 # +0x9986 0x520E # +0x9987 0x5227 # +0x9988 0x522A # +0x9989 0x522E # +0x998A 0x5233 # +0x998B 0x5239 # +0x998C 0x524F # +0x998D 0x5244 # +0x998E 0x524B # +0x998F 0x524C # +0x9990 0x525E # +0x9991 0x5254 # +0x9992 0x526A # +0x9993 0x5274 # +0x9994 0x5269 # +0x9995 0x5273 # +0x9996 0x527F # +0x9997 0x527D # +0x9998 0x528D # +0x9999 0x5294 # +0x999A 0x5292 # +0x999B 0x5271 # +0x999C 0x5288 # +0x999D 0x5291 # +0x999E 0x8FA8 # +0x999F 0x8FA7 # +0x99A0 0x52AC # +0x99A1 0x52AD # +0x99A2 0x52BC # +0x99A3 0x52B5 # +0x99A4 0x52C1 # +0x99A5 0x52CD # +0x99A6 0x52D7 # +0x99A7 0x52DE # +0x99A8 0x52E3 # +0x99A9 0x52E6 # +0x99AA 0x98ED # +0x99AB 0x52E0 # +0x99AC 0x52F3 # +0x99AD 0x52F5 # +0x99AE 0x52F8 # +0x99AF 0x52F9 # +0x99B0 0x5306 # +0x99B1 0x5308 # +0x99B2 0x7538 # +0x99B3 0x530D # +0x99B4 0x5310 # +0x99B5 0x530F # +0x99B6 0x5315 # +0x99B7 0x531A # +0x99B8 0x5323 # +0x99B9 0x532F # +0x99BA 0x5331 # +0x99BB 0x5333 # +0x99BC 0x5338 # +0x99BD 0x5340 # +0x99BE 0x5346 # +0x99BF 0x5345 # +0x99C0 0x4E17 # +0x99C1 0x5349 # +0x99C2 0x534D # +0x99C3 0x51D6 # +0x99C4 0x535E # +0x99C5 0x5369 # +0x99C6 0x536E # +0x99C7 0x5918 # +0x99C8 0x537B # +0x99C9 0x5377 # +0x99CA 0x5382 # +0x99CB 0x5396 # +0x99CC 0x53A0 # +0x99CD 0x53A6 # +0x99CE 0x53A5 # +0x99CF 0x53AE # +0x99D0 0x53B0 # +0x99D1 0x53B6 # +0x99D2 0x53C3 # +0x99D3 0x7C12 # +0x99D4 0x96D9 # +0x99D5 0x53DF # +0x99D6 0x66FC # +0x99D7 0x71EE # +0x99D8 0x53EE # +0x99D9 0x53E8 # +0x99DA 0x53ED # +0x99DB 0x53FA # +0x99DC 0x5401 # +0x99DD 0x543D # +0x99DE 0x5440 # +0x99DF 0x542C # +0x99E0 0x542D # +0x99E1 0x543C # +0x99E2 0x542E # +0x99E3 0x5436 # +0x99E4 0x5429 # +0x99E5 0x541D # +0x99E6 0x544E # +0x99E7 0x548F # +0x99E8 0x5475 # +0x99E9 0x548E # +0x99EA 0x545F # +0x99EB 0x5471 # +0x99EC 0x5477 # +0x99ED 0x5470 # +0x99EE 0x5492 # +0x99EF 0x547B # +0x99F0 0x5480 # +0x99F1 0x5476 # +0x99F2 0x5484 # +0x99F3 0x5490 # +0x99F4 0x5486 # +0x99F5 0x54C7 # +0x99F6 0x54A2 # +0x99F7 0x54B8 # +0x99F8 0x54A5 # +0x99F9 0x54AC # +0x99FA 0x54C4 # +0x99FB 0x54C8 # +0x99FC 0x54A8 # +0x9A40 0x54AB # +0x9A41 0x54C2 # +0x9A42 0x54A4 # +0x9A43 0x54BE # +0x9A44 0x54BC # +0x9A45 0x54D8 # +0x9A46 0x54E5 # +0x9A47 0x54E6 # +0x9A48 0x550F # +0x9A49 0x5514 # +0x9A4A 0x54FD # +0x9A4B 0x54EE # +0x9A4C 0x54ED # +0x9A4D 0x54FA # +0x9A4E 0x54E2 # +0x9A4F 0x5539 # +0x9A50 0x5540 # +0x9A51 0x5563 # +0x9A52 0x554C # +0x9A53 0x552E # +0x9A54 0x555C # +0x9A55 0x5545 # +0x9A56 0x5556 # +0x9A57 0x5557 # +0x9A58 0x5538 # +0x9A59 0x5533 # +0x9A5A 0x555D # +0x9A5B 0x5599 # +0x9A5C 0x5580 # +0x9A5D 0x54AF # +0x9A5E 0x558A # +0x9A5F 0x559F # +0x9A60 0x557B # +0x9A61 0x557E # +0x9A62 0x5598 # +0x9A63 0x559E # +0x9A64 0x55AE # +0x9A65 0x557C # +0x9A66 0x5583 # +0x9A67 0x55A9 # +0x9A68 0x5587 # +0x9A69 0x55A8 # +0x9A6A 0x55DA # +0x9A6B 0x55C5 # +0x9A6C 0x55DF # +0x9A6D 0x55C4 # +0x9A6E 0x55DC # +0x9A6F 0x55E4 # +0x9A70 0x55D4 # +0x9A71 0x5614 # +0x9A72 0x55F7 # +0x9A73 0x5616 # +0x9A74 0x55FE # +0x9A75 0x55FD # +0x9A76 0x561B # +0x9A77 0x55F9 # +0x9A78 0x564E # +0x9A79 0x5650 # +0x9A7A 0x71DF # +0x9A7B 0x5634 # +0x9A7C 0x5636 # +0x9A7D 0x5632 # +0x9A7E 0x5638 # +0x9A80 0x566B # +0x9A81 0x5664 # +0x9A82 0x562F # +0x9A83 0x566C # +0x9A84 0x566A # +0x9A85 0x5686 # +0x9A86 0x5680 # +0x9A87 0x568A # +0x9A88 0x56A0 # +0x9A89 0x5694 # +0x9A8A 0x568F # +0x9A8B 0x56A5 # +0x9A8C 0x56AE # +0x9A8D 0x56B6 # +0x9A8E 0x56B4 # +0x9A8F 0x56C2 # +0x9A90 0x56BC # +0x9A91 0x56C1 # +0x9A92 0x56C3 # +0x9A93 0x56C0 # +0x9A94 0x56C8 # +0x9A95 0x56CE # +0x9A96 0x56D1 # +0x9A97 0x56D3 # +0x9A98 0x56D7 # +0x9A99 0x56EE # +0x9A9A 0x56F9 # +0x9A9B 0x5700 # +0x9A9C 0x56FF # +0x9A9D 0x5704 # +0x9A9E 0x5709 # +0x9A9F 0x5708 # +0x9AA0 0x570B # +0x9AA1 0x570D # +0x9AA2 0x5713 # +0x9AA3 0x5718 # +0x9AA4 0x5716 # +0x9AA5 0x55C7 # +0x9AA6 0x571C # +0x9AA7 0x5726 # +0x9AA8 0x5737 # +0x9AA9 0x5738 # +0x9AAA 0x574E # +0x9AAB 0x573B # +0x9AAC 0x5740 # +0x9AAD 0x574F # +0x9AAE 0x5769 # +0x9AAF 0x57C0 # +0x9AB0 0x5788 # +0x9AB1 0x5761 # +0x9AB2 0x577F # +0x9AB3 0x5789 # +0x9AB4 0x5793 # +0x9AB5 0x57A0 # +0x9AB6 0x57B3 # +0x9AB7 0x57A4 # +0x9AB8 0x57AA # +0x9AB9 0x57B0 # +0x9ABA 0x57C3 # +0x9ABB 0x57C6 # +0x9ABC 0x57D4 # +0x9ABD 0x57D2 # +0x9ABE 0x57D3 # +0x9ABF 0x580A # +0x9AC0 0x57D6 # +0x9AC1 0x57E3 # +0x9AC2 0x580B # +0x9AC3 0x5819 # +0x9AC4 0x581D # +0x9AC5 0x5872 # +0x9AC6 0x5821 # +0x9AC7 0x5862 # +0x9AC8 0x584B # +0x9AC9 0x5870 # +0x9ACA 0x6BC0 # +0x9ACB 0x5852 # +0x9ACC 0x583D # +0x9ACD 0x5879 # +0x9ACE 0x5885 # +0x9ACF 0x58B9 # +0x9AD0 0x589F # +0x9AD1 0x58AB # +0x9AD2 0x58BA # +0x9AD3 0x58DE # +0x9AD4 0x58BB # +0x9AD5 0x58B8 # +0x9AD6 0x58AE # +0x9AD7 0x58C5 # +0x9AD8 0x58D3 # +0x9AD9 0x58D1 # +0x9ADA 0x58D7 # +0x9ADB 0x58D9 # +0x9ADC 0x58D8 # +0x9ADD 0x58E5 # +0x9ADE 0x58DC # +0x9ADF 0x58E4 # +0x9AE0 0x58DF # +0x9AE1 0x58EF # +0x9AE2 0x58FA # +0x9AE3 0x58F9 # +0x9AE4 0x58FB # +0x9AE5 0x58FC # +0x9AE6 0x58FD # +0x9AE7 0x5902 # +0x9AE8 0x590A # +0x9AE9 0x5910 # +0x9AEA 0x591B # +0x9AEB 0x68A6 # +0x9AEC 0x5925 # +0x9AED 0x592C # +0x9AEE 0x592D # +0x9AEF 0x5932 # +0x9AF0 0x5938 # +0x9AF1 0x593E # +0x9AF2 0x7AD2 # +0x9AF3 0x5955 # +0x9AF4 0x5950 # +0x9AF5 0x594E # +0x9AF6 0x595A # +0x9AF7 0x5958 # +0x9AF8 0x5962 # +0x9AF9 0x5960 # +0x9AFA 0x5967 # +0x9AFB 0x596C # +0x9AFC 0x5969 # +0x9B40 0x5978 # +0x9B41 0x5981 # +0x9B42 0x599D # +0x9B43 0x4F5E # +0x9B44 0x4FAB # +0x9B45 0x59A3 # +0x9B46 0x59B2 # +0x9B47 0x59C6 # +0x9B48 0x59E8 # +0x9B49 0x59DC # +0x9B4A 0x598D # +0x9B4B 0x59D9 # +0x9B4C 0x59DA # +0x9B4D 0x5A25 # +0x9B4E 0x5A1F # +0x9B4F 0x5A11 # +0x9B50 0x5A1C # +0x9B51 0x5A09 # +0x9B52 0x5A1A # +0x9B53 0x5A40 # +0x9B54 0x5A6C # +0x9B55 0x5A49 # +0x9B56 0x5A35 # +0x9B57 0x5A36 # +0x9B58 0x5A62 # +0x9B59 0x5A6A # +0x9B5A 0x5A9A # +0x9B5B 0x5ABC # +0x9B5C 0x5ABE # +0x9B5D 0x5ACB # +0x9B5E 0x5AC2 # +0x9B5F 0x5ABD # +0x9B60 0x5AE3 # +0x9B61 0x5AD7 # +0x9B62 0x5AE6 # +0x9B63 0x5AE9 # +0x9B64 0x5AD6 # +0x9B65 0x5AFA # +0x9B66 0x5AFB # +0x9B67 0x5B0C # +0x9B68 0x5B0B # +0x9B69 0x5B16 # +0x9B6A 0x5B32 # +0x9B6B 0x5AD0 # +0x9B6C 0x5B2A # +0x9B6D 0x5B36 # +0x9B6E 0x5B3E # +0x9B6F 0x5B43 # +0x9B70 0x5B45 # +0x9B71 0x5B40 # +0x9B72 0x5B51 # +0x9B73 0x5B55 # +0x9B74 0x5B5A # +0x9B75 0x5B5B # +0x9B76 0x5B65 # +0x9B77 0x5B69 # +0x9B78 0x5B70 # +0x9B79 0x5B73 # +0x9B7A 0x5B75 # +0x9B7B 0x5B78 # +0x9B7C 0x6588 # +0x9B7D 0x5B7A # +0x9B7E 0x5B80 # +0x9B80 0x5B83 # +0x9B81 0x5BA6 # +0x9B82 0x5BB8 # +0x9B83 0x5BC3 # +0x9B84 0x5BC7 # +0x9B85 0x5BC9 # +0x9B86 0x5BD4 # +0x9B87 0x5BD0 # +0x9B88 0x5BE4 # +0x9B89 0x5BE6 # +0x9B8A 0x5BE2 # +0x9B8B 0x5BDE # +0x9B8C 0x5BE5 # +0x9B8D 0x5BEB # +0x9B8E 0x5BF0 # +0x9B8F 0x5BF6 # +0x9B90 0x5BF3 # +0x9B91 0x5C05 # +0x9B92 0x5C07 # +0x9B93 0x5C08 # +0x9B94 0x5C0D # +0x9B95 0x5C13 # +0x9B96 0x5C20 # +0x9B97 0x5C22 # +0x9B98 0x5C28 # +0x9B99 0x5C38 # +0x9B9A 0x5C39 # +0x9B9B 0x5C41 # +0x9B9C 0x5C46 # +0x9B9D 0x5C4E # +0x9B9E 0x5C53 # +0x9B9F 0x5C50 # +0x9BA0 0x5C4F # +0x9BA1 0x5B71 # +0x9BA2 0x5C6C # +0x9BA3 0x5C6E # +0x9BA4 0x4E62 # +0x9BA5 0x5C76 # +0x9BA6 0x5C79 # +0x9BA7 0x5C8C # +0x9BA8 0x5C91 # +0x9BA9 0x5C94 # +0x9BAA 0x599B # +0x9BAB 0x5CAB # +0x9BAC 0x5CBB # +0x9BAD 0x5CB6 # +0x9BAE 0x5CBC # +0x9BAF 0x5CB7 # +0x9BB0 0x5CC5 # +0x9BB1 0x5CBE # +0x9BB2 0x5CC7 # +0x9BB3 0x5CD9 # +0x9BB4 0x5CE9 # +0x9BB5 0x5CFD # +0x9BB6 0x5CFA # +0x9BB7 0x5CED # +0x9BB8 0x5D8C # +0x9BB9 0x5CEA # +0x9BBA 0x5D0B # +0x9BBB 0x5D15 # +0x9BBC 0x5D17 # +0x9BBD 0x5D5C # +0x9BBE 0x5D1F # +0x9BBF 0x5D1B # +0x9BC0 0x5D11 # +0x9BC1 0x5D14 # +0x9BC2 0x5D22 # +0x9BC3 0x5D1A # +0x9BC4 0x5D19 # +0x9BC5 0x5D18 # +0x9BC6 0x5D4C # +0x9BC7 0x5D52 # +0x9BC8 0x5D4E # +0x9BC9 0x5D4B # +0x9BCA 0x5D6C # +0x9BCB 0x5D73 # +0x9BCC 0x5D76 # +0x9BCD 0x5D87 # +0x9BCE 0x5D84 # +0x9BCF 0x5D82 # +0x9BD0 0x5DA2 # +0x9BD1 0x5D9D # +0x9BD2 0x5DAC # +0x9BD3 0x5DAE # +0x9BD4 0x5DBD # +0x9BD5 0x5D90 # +0x9BD6 0x5DB7 # +0x9BD7 0x5DBC # +0x9BD8 0x5DC9 # +0x9BD9 0x5DCD # +0x9BDA 0x5DD3 # +0x9BDB 0x5DD2 # +0x9BDC 0x5DD6 # +0x9BDD 0x5DDB # +0x9BDE 0x5DEB # +0x9BDF 0x5DF2 # +0x9BE0 0x5DF5 # +0x9BE1 0x5E0B # +0x9BE2 0x5E1A # +0x9BE3 0x5E19 # +0x9BE4 0x5E11 # +0x9BE5 0x5E1B # +0x9BE6 0x5E36 # +0x9BE7 0x5E37 # +0x9BE8 0x5E44 # +0x9BE9 0x5E43 # +0x9BEA 0x5E40 # +0x9BEB 0x5E4E # +0x9BEC 0x5E57 # +0x9BED 0x5E54 # +0x9BEE 0x5E5F # +0x9BEF 0x5E62 # +0x9BF0 0x5E64 # +0x9BF1 0x5E47 # +0x9BF2 0x5E75 # +0x9BF3 0x5E76 # +0x9BF4 0x5E7A # +0x9BF5 0x9EBC # +0x9BF6 0x5E7F # +0x9BF7 0x5EA0 # +0x9BF8 0x5EC1 # +0x9BF9 0x5EC2 # +0x9BFA 0x5EC8 # +0x9BFB 0x5ED0 # +0x9BFC 0x5ECF # +0x9C40 0x5ED6 # +0x9C41 0x5EE3 # +0x9C42 0x5EDD # +0x9C43 0x5EDA # +0x9C44 0x5EDB # +0x9C45 0x5EE2 # +0x9C46 0x5EE1 # +0x9C47 0x5EE8 # +0x9C48 0x5EE9 # +0x9C49 0x5EEC # +0x9C4A 0x5EF1 # +0x9C4B 0x5EF3 # +0x9C4C 0x5EF0 # +0x9C4D 0x5EF4 # +0x9C4E 0x5EF8 # +0x9C4F 0x5EFE # +0x9C50 0x5F03 # +0x9C51 0x5F09 # +0x9C52 0x5F5D # +0x9C53 0x5F5C # +0x9C54 0x5F0B # +0x9C55 0x5F11 # +0x9C56 0x5F16 # +0x9C57 0x5F29 # +0x9C58 0x5F2D # +0x9C59 0x5F38 # +0x9C5A 0x5F41 # +0x9C5B 0x5F48 # +0x9C5C 0x5F4C # +0x9C5D 0x5F4E # +0x9C5E 0x5F2F # +0x9C5F 0x5F51 # +0x9C60 0x5F56 # +0x9C61 0x5F57 # +0x9C62 0x5F59 # +0x9C63 0x5F61 # +0x9C64 0x5F6D # +0x9C65 0x5F73 # +0x9C66 0x5F77 # +0x9C67 0x5F83 # +0x9C68 0x5F82 # +0x9C69 0x5F7F # +0x9C6A 0x5F8A # +0x9C6B 0x5F88 # +0x9C6C 0x5F91 # +0x9C6D 0x5F87 # +0x9C6E 0x5F9E # +0x9C6F 0x5F99 # +0x9C70 0x5F98 # +0x9C71 0x5FA0 # +0x9C72 0x5FA8 # +0x9C73 0x5FAD # +0x9C74 0x5FBC # +0x9C75 0x5FD6 # +0x9C76 0x5FFB # +0x9C77 0x5FE4 # +0x9C78 0x5FF8 # +0x9C79 0x5FF1 # +0x9C7A 0x5FDD # +0x9C7B 0x60B3 # +0x9C7C 0x5FFF # +0x9C7D 0x6021 # +0x9C7E 0x6060 # +0x9C80 0x6019 # +0x9C81 0x6010 # +0x9C82 0x6029 # +0x9C83 0x600E # +0x9C84 0x6031 # +0x9C85 0x601B # +0x9C86 0x6015 # +0x9C87 0x602B # +0x9C88 0x6026 # +0x9C89 0x600F # +0x9C8A 0x603A # +0x9C8B 0x605A # +0x9C8C 0x6041 # +0x9C8D 0x606A # +0x9C8E 0x6077 # +0x9C8F 0x605F # +0x9C90 0x604A # +0x9C91 0x6046 # +0x9C92 0x604D # +0x9C93 0x6063 # +0x9C94 0x6043 # +0x9C95 0x6064 # +0x9C96 0x6042 # +0x9C97 0x606C # +0x9C98 0x606B # +0x9C99 0x6059 # +0x9C9A 0x6081 # +0x9C9B 0x608D # +0x9C9C 0x60E7 # +0x9C9D 0x6083 # +0x9C9E 0x609A # +0x9C9F 0x6084 # +0x9CA0 0x609B # +0x9CA1 0x6096 # +0x9CA2 0x6097 # +0x9CA3 0x6092 # +0x9CA4 0x60A7 # +0x9CA5 0x608B # +0x9CA6 0x60E1 # +0x9CA7 0x60B8 # +0x9CA8 0x60E0 # +0x9CA9 0x60D3 # +0x9CAA 0x60B4 # +0x9CAB 0x5FF0 # +0x9CAC 0x60BD # +0x9CAD 0x60C6 # +0x9CAE 0x60B5 # +0x9CAF 0x60D8 # +0x9CB0 0x614D # +0x9CB1 0x6115 # +0x9CB2 0x6106 # +0x9CB3 0x60F6 # +0x9CB4 0x60F7 # +0x9CB5 0x6100 # +0x9CB6 0x60F4 # +0x9CB7 0x60FA # +0x9CB8 0x6103 # +0x9CB9 0x6121 # +0x9CBA 0x60FB # +0x9CBB 0x60F1 # +0x9CBC 0x610D # +0x9CBD 0x610E # +0x9CBE 0x6147 # +0x9CBF 0x613E # +0x9CC0 0x6128 # +0x9CC1 0x6127 # +0x9CC2 0x614A # +0x9CC3 0x613F # +0x9CC4 0x613C # +0x9CC5 0x612C # +0x9CC6 0x6134 # +0x9CC7 0x613D # +0x9CC8 0x6142 # +0x9CC9 0x6144 # +0x9CCA 0x6173 # +0x9CCB 0x6177 # +0x9CCC 0x6158 # +0x9CCD 0x6159 # +0x9CCE 0x615A # +0x9CCF 0x616B # +0x9CD0 0x6174 # +0x9CD1 0x616F # +0x9CD2 0x6165 # +0x9CD3 0x6171 # +0x9CD4 0x615F # +0x9CD5 0x615D # +0x9CD6 0x6153 # +0x9CD7 0x6175 # +0x9CD8 0x6199 # +0x9CD9 0x6196 # +0x9CDA 0x6187 # +0x9CDB 0x61AC # +0x9CDC 0x6194 # +0x9CDD 0x619A # +0x9CDE 0x618A # +0x9CDF 0x6191 # +0x9CE0 0x61AB # +0x9CE1 0x61AE # +0x9CE2 0x61CC # +0x9CE3 0x61CA # +0x9CE4 0x61C9 # +0x9CE5 0x61F7 # +0x9CE6 0x61C8 # +0x9CE7 0x61C3 # +0x9CE8 0x61C6 # +0x9CE9 0x61BA # +0x9CEA 0x61CB # +0x9CEB 0x7F79 # +0x9CEC 0x61CD # +0x9CED 0x61E6 # +0x9CEE 0x61E3 # +0x9CEF 0x61F6 # +0x9CF0 0x61FA # +0x9CF1 0x61F4 # +0x9CF2 0x61FF # +0x9CF3 0x61FD # +0x9CF4 0x61FC # +0x9CF5 0x61FE # +0x9CF6 0x6200 # +0x9CF7 0x6208 # +0x9CF8 0x6209 # +0x9CF9 0x620D # +0x9CFA 0x620C # +0x9CFB 0x6214 # +0x9CFC 0x621B # +0x9D40 0x621E # +0x9D41 0x6221 # +0x9D42 0x622A # +0x9D43 0x622E # +0x9D44 0x6230 # +0x9D45 0x6232 # +0x9D46 0x6233 # +0x9D47 0x6241 # +0x9D48 0x624E # +0x9D49 0x625E # +0x9D4A 0x6263 # +0x9D4B 0x625B # +0x9D4C 0x6260 # +0x9D4D 0x6268 # +0x9D4E 0x627C # +0x9D4F 0x6282 # +0x9D50 0x6289 # +0x9D51 0x627E # +0x9D52 0x6292 # +0x9D53 0x6293 # +0x9D54 0x6296 # +0x9D55 0x62D4 # +0x9D56 0x6283 # +0x9D57 0x6294 # +0x9D58 0x62D7 # +0x9D59 0x62D1 # +0x9D5A 0x62BB # +0x9D5B 0x62CF # +0x9D5C 0x62FF # +0x9D5D 0x62C6 # +0x9D5E 0x64D4 # +0x9D5F 0x62C8 # +0x9D60 0x62DC # +0x9D61 0x62CC # +0x9D62 0x62CA # +0x9D63 0x62C2 # +0x9D64 0x62C7 # +0x9D65 0x629B # +0x9D66 0x62C9 # +0x9D67 0x630C # +0x9D68 0x62EE # +0x9D69 0x62F1 # +0x9D6A 0x6327 # +0x9D6B 0x6302 # +0x9D6C 0x6308 # +0x9D6D 0x62EF # +0x9D6E 0x62F5 # +0x9D6F 0x6350 # +0x9D70 0x633E # +0x9D71 0x634D # +0x9D72 0x641C # +0x9D73 0x634F # +0x9D74 0x6396 # +0x9D75 0x638E # +0x9D76 0x6380 # +0x9D77 0x63AB # +0x9D78 0x6376 # +0x9D79 0x63A3 # +0x9D7A 0x638F # +0x9D7B 0x6389 # +0x9D7C 0x639F # +0x9D7D 0x63B5 # +0x9D7E 0x636B # +0x9D80 0x6369 # +0x9D81 0x63BE # +0x9D82 0x63E9 # +0x9D83 0x63C0 # +0x9D84 0x63C6 # +0x9D85 0x63E3 # +0x9D86 0x63C9 # +0x9D87 0x63D2 # +0x9D88 0x63F6 # +0x9D89 0x63C4 # +0x9D8A 0x6416 # +0x9D8B 0x6434 # +0x9D8C 0x6406 # +0x9D8D 0x6413 # +0x9D8E 0x6426 # +0x9D8F 0x6436 # +0x9D90 0x651D # +0x9D91 0x6417 # +0x9D92 0x6428 # +0x9D93 0x640F # +0x9D94 0x6467 # +0x9D95 0x646F # +0x9D96 0x6476 # +0x9D97 0x644E # +0x9D98 0x652A # +0x9D99 0x6495 # +0x9D9A 0x6493 # +0x9D9B 0x64A5 # +0x9D9C 0x64A9 # +0x9D9D 0x6488 # +0x9D9E 0x64BC # +0x9D9F 0x64DA # +0x9DA0 0x64D2 # +0x9DA1 0x64C5 # +0x9DA2 0x64C7 # +0x9DA3 0x64BB # +0x9DA4 0x64D8 # +0x9DA5 0x64C2 # +0x9DA6 0x64F1 # +0x9DA7 0x64E7 # +0x9DA8 0x8209 # +0x9DA9 0x64E0 # +0x9DAA 0x64E1 # +0x9DAB 0x62AC # +0x9DAC 0x64E3 # +0x9DAD 0x64EF # +0x9DAE 0x652C # +0x9DAF 0x64F6 # +0x9DB0 0x64F4 # +0x9DB1 0x64F2 # +0x9DB2 0x64FA # +0x9DB3 0x6500 # +0x9DB4 0x64FD # +0x9DB5 0x6518 # +0x9DB6 0x651C # +0x9DB7 0x6505 # +0x9DB8 0x6524 # +0x9DB9 0x6523 # +0x9DBA 0x652B # +0x9DBB 0x6534 # +0x9DBC 0x6535 # +0x9DBD 0x6537 # +0x9DBE 0x6536 # +0x9DBF 0x6538 # +0x9DC0 0x754B # +0x9DC1 0x6548 # +0x9DC2 0x6556 # +0x9DC3 0x6555 # +0x9DC4 0x654D # +0x9DC5 0x6558 # +0x9DC6 0x655E # +0x9DC7 0x655D # +0x9DC8 0x6572 # +0x9DC9 0x6578 # +0x9DCA 0x6582 # +0x9DCB 0x6583 # +0x9DCC 0x8B8A # +0x9DCD 0x659B # +0x9DCE 0x659F # +0x9DCF 0x65AB # +0x9DD0 0x65B7 # +0x9DD1 0x65C3 # +0x9DD2 0x65C6 # +0x9DD3 0x65C1 # +0x9DD4 0x65C4 # +0x9DD5 0x65CC # +0x9DD6 0x65D2 # +0x9DD7 0x65DB # +0x9DD8 0x65D9 # +0x9DD9 0x65E0 # +0x9DDA 0x65E1 # +0x9DDB 0x65F1 # +0x9DDC 0x6772 # +0x9DDD 0x660A # +0x9DDE 0x6603 # +0x9DDF 0x65FB # +0x9DE0 0x6773 # +0x9DE1 0x6635 # +0x9DE2 0x6636 # +0x9DE3 0x6634 # +0x9DE4 0x661C # +0x9DE5 0x664F # +0x9DE6 0x6644 # +0x9DE7 0x6649 # +0x9DE8 0x6641 # +0x9DE9 0x665E # +0x9DEA 0x665D # +0x9DEB 0x6664 # +0x9DEC 0x6667 # +0x9DED 0x6668 # +0x9DEE 0x665F # +0x9DEF 0x6662 # +0x9DF0 0x6670 # +0x9DF1 0x6683 # +0x9DF2 0x6688 # +0x9DF3 0x668E # +0x9DF4 0x6689 # +0x9DF5 0x6684 # +0x9DF6 0x6698 # +0x9DF7 0x669D # +0x9DF8 0x66C1 # +0x9DF9 0x66B9 # +0x9DFA 0x66C9 # +0x9DFB 0x66BE # +0x9DFC 0x66BC # +0x9E40 0x66C4 # +0x9E41 0x66B8 # +0x9E42 0x66D6 # +0x9E43 0x66DA # +0x9E44 0x66E0 # +0x9E45 0x663F # +0x9E46 0x66E6 # +0x9E47 0x66E9 # +0x9E48 0x66F0 # +0x9E49 0x66F5 # +0x9E4A 0x66F7 # +0x9E4B 0x670F # +0x9E4C 0x6716 # +0x9E4D 0x671E # +0x9E4E 0x6726 # +0x9E4F 0x6727 # +0x9E50 0x9738 # +0x9E51 0x672E # +0x9E52 0x673F # +0x9E53 0x6736 # +0x9E54 0x6741 # +0x9E55 0x6738 # +0x9E56 0x6737 # +0x9E57 0x6746 # +0x9E58 0x675E # +0x9E59 0x6760 # +0x9E5A 0x6759 # +0x9E5B 0x6763 # +0x9E5C 0x6764 # +0x9E5D 0x6789 # +0x9E5E 0x6770 # +0x9E5F 0x67A9 # +0x9E60 0x677C # +0x9E61 0x676A # +0x9E62 0x678C # +0x9E63 0x678B # +0x9E64 0x67A6 # +0x9E65 0x67A1 # +0x9E66 0x6785 # +0x9E67 0x67B7 # +0x9E68 0x67EF # +0x9E69 0x67B4 # +0x9E6A 0x67EC # +0x9E6B 0x67B3 # +0x9E6C 0x67E9 # +0x9E6D 0x67B8 # +0x9E6E 0x67E4 # +0x9E6F 0x67DE # +0x9E70 0x67DD # +0x9E71 0x67E2 # +0x9E72 0x67EE # +0x9E73 0x67B9 # +0x9E74 0x67CE # +0x9E75 0x67C6 # +0x9E76 0x67E7 # +0x9E77 0x6A9C # +0x9E78 0x681E # +0x9E79 0x6846 # +0x9E7A 0x6829 # +0x9E7B 0x6840 # +0x9E7C 0x684D # +0x9E7D 0x6832 # +0x9E7E 0x684E # +0x9E80 0x68B3 # +0x9E81 0x682B # +0x9E82 0x6859 # +0x9E83 0x6863 # +0x9E84 0x6877 # +0x9E85 0x687F # +0x9E86 0x689F # +0x9E87 0x688F # +0x9E88 0x68AD # +0x9E89 0x6894 # +0x9E8A 0x689D # +0x9E8B 0x689B # +0x9E8C 0x6883 # +0x9E8D 0x6AAE # +0x9E8E 0x68B9 # +0x9E8F 0x6874 # +0x9E90 0x68B5 # +0x9E91 0x68A0 # +0x9E92 0x68BA # +0x9E93 0x690F # +0x9E94 0x688D # +0x9E95 0x687E # +0x9E96 0x6901 # +0x9E97 0x68CA # +0x9E98 0x6908 # +0x9E99 0x68D8 # +0x9E9A 0x6922 # +0x9E9B 0x6926 # +0x9E9C 0x68E1 # +0x9E9D 0x690C # +0x9E9E 0x68CD # +0x9E9F 0x68D4 # +0x9EA0 0x68E7 # +0x9EA1 0x68D5 # +0x9EA2 0x6936 # +0x9EA3 0x6912 # +0x9EA4 0x6904 # +0x9EA5 0x68D7 # +0x9EA6 0x68E3 # +0x9EA7 0x6925 # +0x9EA8 0x68F9 # +0x9EA9 0x68E0 # +0x9EAA 0x68EF # +0x9EAB 0x6928 # +0x9EAC 0x692A # +0x9EAD 0x691A # +0x9EAE 0x6923 # +0x9EAF 0x6921 # +0x9EB0 0x68C6 # +0x9EB1 0x6979 # +0x9EB2 0x6977 # +0x9EB3 0x695C # +0x9EB4 0x6978 # +0x9EB5 0x696B # +0x9EB6 0x6954 # +0x9EB7 0x697E # +0x9EB8 0x696E # +0x9EB9 0x6939 # +0x9EBA 0x6974 # +0x9EBB 0x693D # +0x9EBC 0x6959 # +0x9EBD 0x6930 # +0x9EBE 0x6961 # +0x9EBF 0x695E # +0x9EC0 0x695D # +0x9EC1 0x6981 # +0x9EC2 0x696A # +0x9EC3 0x69B2 # +0x9EC4 0x69AE # +0x9EC5 0x69D0 # +0x9EC6 0x69BF # +0x9EC7 0x69C1 # +0x9EC8 0x69D3 # +0x9EC9 0x69BE # +0x9ECA 0x69CE # +0x9ECB 0x5BE8 # +0x9ECC 0x69CA # +0x9ECD 0x69DD # +0x9ECE 0x69BB # +0x9ECF 0x69C3 # +0x9ED0 0x69A7 # +0x9ED1 0x6A2E # +0x9ED2 0x6991 # +0x9ED3 0x69A0 # +0x9ED4 0x699C # +0x9ED5 0x6995 # +0x9ED6 0x69B4 # +0x9ED7 0x69DE # +0x9ED8 0x69E8 # +0x9ED9 0x6A02 # +0x9EDA 0x6A1B # +0x9EDB 0x69FF # +0x9EDC 0x6B0A # +0x9EDD 0x69F9 # +0x9EDE 0x69F2 # +0x9EDF 0x69E7 # +0x9EE0 0x6A05 # +0x9EE1 0x69B1 # +0x9EE2 0x6A1E # +0x9EE3 0x69ED # +0x9EE4 0x6A14 # +0x9EE5 0x69EB # +0x9EE6 0x6A0A # +0x9EE7 0x6A12 # +0x9EE8 0x6AC1 # +0x9EE9 0x6A23 # +0x9EEA 0x6A13 # +0x9EEB 0x6A44 # +0x9EEC 0x6A0C # +0x9EED 0x6A72 # +0x9EEE 0x6A36 # +0x9EEF 0x6A78 # +0x9EF0 0x6A47 # +0x9EF1 0x6A62 # +0x9EF2 0x6A59 # +0x9EF3 0x6A66 # +0x9EF4 0x6A48 # +0x9EF5 0x6A38 # +0x9EF6 0x6A22 # +0x9EF7 0x6A90 # +0x9EF8 0x6A8D # +0x9EF9 0x6AA0 # +0x9EFA 0x6A84 # +0x9EFB 0x6AA2 # +0x9EFC 0x6AA3 # +0x9F40 0x6A97 # +0x9F41 0x8617 # +0x9F42 0x6ABB # +0x9F43 0x6AC3 # +0x9F44 0x6AC2 # +0x9F45 0x6AB8 # +0x9F46 0x6AB3 # +0x9F47 0x6AAC # +0x9F48 0x6ADE # +0x9F49 0x6AD1 # +0x9F4A 0x6ADF # +0x9F4B 0x6AAA # +0x9F4C 0x6ADA # +0x9F4D 0x6AEA # +0x9F4E 0x6AFB # +0x9F4F 0x6B05 # +0x9F50 0x8616 # +0x9F51 0x6AFA # +0x9F52 0x6B12 # +0x9F53 0x6B16 # +0x9F54 0x9B31 # +0x9F55 0x6B1F # +0x9F56 0x6B38 # +0x9F57 0x6B37 # +0x9F58 0x76DC # +0x9F59 0x6B39 # +0x9F5A 0x98EE # +0x9F5B 0x6B47 # +0x9F5C 0x6B43 # +0x9F5D 0x6B49 # +0x9F5E 0x6B50 # +0x9F5F 0x6B59 # +0x9F60 0x6B54 # +0x9F61 0x6B5B # +0x9F62 0x6B5F # +0x9F63 0x6B61 # +0x9F64 0x6B78 # +0x9F65 0x6B79 # +0x9F66 0x6B7F # +0x9F67 0x6B80 # +0x9F68 0x6B84 # +0x9F69 0x6B83 # +0x9F6A 0x6B8D # +0x9F6B 0x6B98 # +0x9F6C 0x6B95 # +0x9F6D 0x6B9E # +0x9F6E 0x6BA4 # +0x9F6F 0x6BAA # +0x9F70 0x6BAB # +0x9F71 0x6BAF # +0x9F72 0x6BB2 # +0x9F73 0x6BB1 # +0x9F74 0x6BB3 # +0x9F75 0x6BB7 # +0x9F76 0x6BBC # +0x9F77 0x6BC6 # +0x9F78 0x6BCB # +0x9F79 0x6BD3 # +0x9F7A 0x6BDF # +0x9F7B 0x6BEC # +0x9F7C 0x6BEB # +0x9F7D 0x6BF3 # +0x9F7E 0x6BEF # +0x9F80 0x9EBE # +0x9F81 0x6C08 # +0x9F82 0x6C13 # +0x9F83 0x6C14 # +0x9F84 0x6C1B # +0x9F85 0x6C24 # +0x9F86 0x6C23 # +0x9F87 0x6C5E # +0x9F88 0x6C55 # +0x9F89 0x6C62 # +0x9F8A 0x6C6A # +0x9F8B 0x6C82 # +0x9F8C 0x6C8D # +0x9F8D 0x6C9A # +0x9F8E 0x6C81 # +0x9F8F 0x6C9B # +0x9F90 0x6C7E # +0x9F91 0x6C68 # +0x9F92 0x6C73 # +0x9F93 0x6C92 # +0x9F94 0x6C90 # +0x9F95 0x6CC4 # +0x9F96 0x6CF1 # +0x9F97 0x6CD3 # +0x9F98 0x6CBD # +0x9F99 0x6CD7 # +0x9F9A 0x6CC5 # +0x9F9B 0x6CDD # +0x9F9C 0x6CAE # +0x9F9D 0x6CB1 # +0x9F9E 0x6CBE # +0x9F9F 0x6CBA # +0x9FA0 0x6CDB # +0x9FA1 0x6CEF # +0x9FA2 0x6CD9 # +0x9FA3 0x6CEA # +0x9FA4 0x6D1F # +0x9FA5 0x884D # +0x9FA6 0x6D36 # +0x9FA7 0x6D2B # +0x9FA8 0x6D3D # +0x9FA9 0x6D38 # +0x9FAA 0x6D19 # +0x9FAB 0x6D35 # +0x9FAC 0x6D33 # +0x9FAD 0x6D12 # +0x9FAE 0x6D0C # +0x9FAF 0x6D63 # +0x9FB0 0x6D93 # +0x9FB1 0x6D64 # +0x9FB2 0x6D5A # +0x9FB3 0x6D79 # +0x9FB4 0x6D59 # +0x9FB5 0x6D8E # +0x9FB6 0x6D95 # +0x9FB7 0x6FE4 # +0x9FB8 0x6D85 # +0x9FB9 0x6DF9 # +0x9FBA 0x6E15 # +0x9FBB 0x6E0A # +0x9FBC 0x6DB5 # +0x9FBD 0x6DC7 # +0x9FBE 0x6DE6 # +0x9FBF 0x6DB8 # +0x9FC0 0x6DC6 # +0x9FC1 0x6DEC # +0x9FC2 0x6DDE # +0x9FC3 0x6DCC # +0x9FC4 0x6DE8 # +0x9FC5 0x6DD2 # +0x9FC6 0x6DC5 # +0x9FC7 0x6DFA # +0x9FC8 0x6DD9 # +0x9FC9 0x6DE4 # +0x9FCA 0x6DD5 # +0x9FCB 0x6DEA # +0x9FCC 0x6DEE # +0x9FCD 0x6E2D # +0x9FCE 0x6E6E # +0x9FCF 0x6E2E # +0x9FD0 0x6E19 # +0x9FD1 0x6E72 # +0x9FD2 0x6E5F # +0x9FD3 0x6E3E # +0x9FD4 0x6E23 # +0x9FD5 0x6E6B # +0x9FD6 0x6E2B # +0x9FD7 0x6E76 # +0x9FD8 0x6E4D # +0x9FD9 0x6E1F # +0x9FDA 0x6E43 # +0x9FDB 0x6E3A # +0x9FDC 0x6E4E # +0x9FDD 0x6E24 # +0x9FDE 0x6EFF # +0x9FDF 0x6E1D # +0x9FE0 0x6E38 # +0x9FE1 0x6E82 # +0x9FE2 0x6EAA # +0x9FE3 0x6E98 # +0x9FE4 0x6EC9 # +0x9FE5 0x6EB7 # +0x9FE6 0x6ED3 # +0x9FE7 0x6EBD # +0x9FE8 0x6EAF # +0x9FE9 0x6EC4 # +0x9FEA 0x6EB2 # +0x9FEB 0x6ED4 # +0x9FEC 0x6ED5 # +0x9FED 0x6E8F # +0x9FEE 0x6EA5 # +0x9FEF 0x6EC2 # +0x9FF0 0x6E9F # +0x9FF1 0x6F41 # +0x9FF2 0x6F11 # +0x9FF3 0x704C # +0x9FF4 0x6EEC # +0x9FF5 0x6EF8 # +0x9FF6 0x6EFE # +0x9FF7 0x6F3F # +0x9FF8 0x6EF2 # +0x9FF9 0x6F31 # +0x9FFA 0x6EEF # +0x9FFB 0x6F32 # +0x9FFC 0x6ECC # +0xA1 0xFF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 0xFF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 0xFF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 0xFF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 0xFF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 0xFF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 0xFF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 0xFF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA 0xFF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB 0xFF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC 0xFF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD 0xFF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE 0xFF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF 0xFF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 0xFF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 0xFF71 # HALFWIDTH KATAKANA LETTER A +0xB2 0xFF72 # HALFWIDTH KATAKANA LETTER I +0xB3 0xFF73 # HALFWIDTH KATAKANA LETTER U +0xB4 0xFF74 # HALFWIDTH KATAKANA LETTER E +0xB5 0xFF75 # HALFWIDTH KATAKANA LETTER O +0xB6 0xFF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 0xFF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 0xFF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 0xFF79 # HALFWIDTH KATAKANA LETTER KE +0xBA 0xFF7A # HALFWIDTH KATAKANA LETTER KO +0xBB 0xFF7B # HALFWIDTH KATAKANA LETTER SA +0xBC 0xFF7C # HALFWIDTH KATAKANA LETTER SI +0xBD 0xFF7D # HALFWIDTH KATAKANA LETTER SU +0xBE 0xFF7E # HALFWIDTH KATAKANA LETTER SE +0xBF 0xFF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 0xFF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 0xFF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 0xFF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 0xFF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 0xFF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 0xFF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 0xFF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 0xFF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 0xFF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 0xFF89 # HALFWIDTH KATAKANA LETTER NO +0xCA 0xFF8A # HALFWIDTH KATAKANA LETTER HA +0xCB 0xFF8B # HALFWIDTH KATAKANA LETTER HI +0xCC 0xFF8C # HALFWIDTH KATAKANA LETTER HU +0xCD 0xFF8D # HALFWIDTH KATAKANA LETTER HE +0xCE 0xFF8E # HALFWIDTH KATAKANA LETTER HO +0xCF 0xFF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 0xFF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 0xFF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 0xFF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 0xFF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 0xFF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 0xFF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 0xFF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 0xFF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 0xFF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 0xFF99 # HALFWIDTH KATAKANA LETTER RU +0xDA 0xFF9A # HALFWIDTH KATAKANA LETTER RE +0xDB 0xFF9B # HALFWIDTH KATAKANA LETTER RO +0xDC 0xFF9C # HALFWIDTH KATAKANA LETTER WA +0xDD 0xFF9D # HALFWIDTH KATAKANA LETTER N +0xDE 0xFF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF 0xFF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +0xE040 0x6F3E # +0xE041 0x6F13 # +0xE042 0x6EF7 # +0xE043 0x6F86 # +0xE044 0x6F7A # +0xE045 0x6F78 # +0xE046 0x6F81 # +0xE047 0x6F80 # +0xE048 0x6F6F # +0xE049 0x6F5B # +0xE04A 0x6FF3 # +0xE04B 0x6F6D # +0xE04C 0x6F82 # +0xE04D 0x6F7C # +0xE04E 0x6F58 # +0xE04F 0x6F8E # +0xE050 0x6F91 # +0xE051 0x6FC2 # +0xE052 0x6F66 # +0xE053 0x6FB3 # +0xE054 0x6FA3 # +0xE055 0x6FA1 # +0xE056 0x6FA4 # +0xE057 0x6FB9 # +0xE058 0x6FC6 # +0xE059 0x6FAA # +0xE05A 0x6FDF # +0xE05B 0x6FD5 # +0xE05C 0x6FEC # +0xE05D 0x6FD4 # +0xE05E 0x6FD8 # +0xE05F 0x6FF1 # +0xE060 0x6FEE # +0xE061 0x6FDB # +0xE062 0x7009 # +0xE063 0x700B # +0xE064 0x6FFA # +0xE065 0x7011 # +0xE066 0x7001 # +0xE067 0x700F # +0xE068 0x6FFE # +0xE069 0x701B # +0xE06A 0x701A # +0xE06B 0x6F74 # +0xE06C 0x701D # +0xE06D 0x7018 # +0xE06E 0x701F # +0xE06F 0x7030 # +0xE070 0x703E # +0xE071 0x7032 # +0xE072 0x7051 # +0xE073 0x7063 # +0xE074 0x7099 # +0xE075 0x7092 # +0xE076 0x70AF # +0xE077 0x70F1 # +0xE078 0x70AC # +0xE079 0x70B8 # +0xE07A 0x70B3 # +0xE07B 0x70AE # +0xE07C 0x70DF # +0xE07D 0x70CB # +0xE07E 0x70DD # +0xE080 0x70D9 # +0xE081 0x7109 # +0xE082 0x70FD # +0xE083 0x711C # +0xE084 0x7119 # +0xE085 0x7165 # +0xE086 0x7155 # +0xE087 0x7188 # +0xE088 0x7166 # +0xE089 0x7162 # +0xE08A 0x714C # +0xE08B 0x7156 # +0xE08C 0x716C # +0xE08D 0x718F # +0xE08E 0x71FB # +0xE08F 0x7184 # +0xE090 0x7195 # +0xE091 0x71A8 # +0xE092 0x71AC # +0xE093 0x71D7 # +0xE094 0x71B9 # +0xE095 0x71BE # +0xE096 0x71D2 # +0xE097 0x71C9 # +0xE098 0x71D4 # +0xE099 0x71CE # +0xE09A 0x71E0 # +0xE09B 0x71EC # +0xE09C 0x71E7 # +0xE09D 0x71F5 # +0xE09E 0x71FC # +0xE09F 0x71F9 # +0xE0A0 0x71FF # +0xE0A1 0x720D # +0xE0A2 0x7210 # +0xE0A3 0x721B # +0xE0A4 0x7228 # +0xE0A5 0x722D # +0xE0A6 0x722C # +0xE0A7 0x7230 # +0xE0A8 0x7232 # +0xE0A9 0x723B # +0xE0AA 0x723C # +0xE0AB 0x723F # +0xE0AC 0x7240 # +0xE0AD 0x7246 # +0xE0AE 0x724B # +0xE0AF 0x7258 # +0xE0B0 0x7274 # +0xE0B1 0x727E # +0xE0B2 0x7282 # +0xE0B3 0x7281 # +0xE0B4 0x7287 # +0xE0B5 0x7292 # +0xE0B6 0x7296 # +0xE0B7 0x72A2 # +0xE0B8 0x72A7 # +0xE0B9 0x72B9 # +0xE0BA 0x72B2 # +0xE0BB 0x72C3 # +0xE0BC 0x72C6 # +0xE0BD 0x72C4 # +0xE0BE 0x72CE # +0xE0BF 0x72D2 # +0xE0C0 0x72E2 # +0xE0C1 0x72E0 # +0xE0C2 0x72E1 # +0xE0C3 0x72F9 # +0xE0C4 0x72F7 # +0xE0C5 0x500F # +0xE0C6 0x7317 # +0xE0C7 0x730A # +0xE0C8 0x731C # +0xE0C9 0x7316 # +0xE0CA 0x731D # +0xE0CB 0x7334 # +0xE0CC 0x732F # +0xE0CD 0x7329 # +0xE0CE 0x7325 # +0xE0CF 0x733E # +0xE0D0 0x734E # +0xE0D1 0x734F # +0xE0D2 0x9ED8 # +0xE0D3 0x7357 # +0xE0D4 0x736A # +0xE0D5 0x7368 # +0xE0D6 0x7370 # +0xE0D7 0x7378 # +0xE0D8 0x7375 # +0xE0D9 0x737B # +0xE0DA 0x737A # +0xE0DB 0x73C8 # +0xE0DC 0x73B3 # +0xE0DD 0x73CE # +0xE0DE 0x73BB # +0xE0DF 0x73C0 # +0xE0E0 0x73E5 # +0xE0E1 0x73EE # +0xE0E2 0x73DE # +0xE0E3 0x74A2 # +0xE0E4 0x7405 # +0xE0E5 0x746F # +0xE0E6 0x7425 # +0xE0E7 0x73F8 # +0xE0E8 0x7432 # +0xE0E9 0x743A # +0xE0EA 0x7455 # +0xE0EB 0x743F # +0xE0EC 0x745F # +0xE0ED 0x7459 # +0xE0EE 0x7441 # +0xE0EF 0x745C # +0xE0F0 0x7469 # +0xE0F1 0x7470 # +0xE0F2 0x7463 # +0xE0F3 0x746A # +0xE0F4 0x7476 # +0xE0F5 0x747E # +0xE0F6 0x748B # +0xE0F7 0x749E # +0xE0F8 0x74A7 # +0xE0F9 0x74CA # +0xE0FA 0x74CF # +0xE0FB 0x74D4 # +0xE0FC 0x73F1 # +0xE140 0x74E0 # +0xE141 0x74E3 # +0xE142 0x74E7 # +0xE143 0x74E9 # +0xE144 0x74EE # +0xE145 0x74F2 # +0xE146 0x74F0 # +0xE147 0x74F1 # +0xE148 0x74F8 # +0xE149 0x74F7 # +0xE14A 0x7504 # +0xE14B 0x7503 # +0xE14C 0x7505 # +0xE14D 0x750C # +0xE14E 0x750E # +0xE14F 0x750D # +0xE150 0x7515 # +0xE151 0x7513 # +0xE152 0x751E # +0xE153 0x7526 # +0xE154 0x752C # +0xE155 0x753C # +0xE156 0x7544 # +0xE157 0x754D # +0xE158 0x754A # +0xE159 0x7549 # +0xE15A 0x755B # +0xE15B 0x7546 # +0xE15C 0x755A # +0xE15D 0x7569 # +0xE15E 0x7564 # +0xE15F 0x7567 # +0xE160 0x756B # +0xE161 0x756D # +0xE162 0x7578 # +0xE163 0x7576 # +0xE164 0x7586 # +0xE165 0x7587 # +0xE166 0x7574 # +0xE167 0x758A # +0xE168 0x7589 # +0xE169 0x7582 # +0xE16A 0x7594 # +0xE16B 0x759A # +0xE16C 0x759D # +0xE16D 0x75A5 # +0xE16E 0x75A3 # +0xE16F 0x75C2 # +0xE170 0x75B3 # +0xE171 0x75C3 # +0xE172 0x75B5 # +0xE173 0x75BD # +0xE174 0x75B8 # +0xE175 0x75BC # +0xE176 0x75B1 # +0xE177 0x75CD # +0xE178 0x75CA # +0xE179 0x75D2 # +0xE17A 0x75D9 # +0xE17B 0x75E3 # +0xE17C 0x75DE # +0xE17D 0x75FE # +0xE17E 0x75FF # +0xE180 0x75FC # +0xE181 0x7601 # +0xE182 0x75F0 # +0xE183 0x75FA # +0xE184 0x75F2 # +0xE185 0x75F3 # +0xE186 0x760B # +0xE187 0x760D # +0xE188 0x7609 # +0xE189 0x761F # +0xE18A 0x7627 # +0xE18B 0x7620 # +0xE18C 0x7621 # +0xE18D 0x7622 # +0xE18E 0x7624 # +0xE18F 0x7634 # +0xE190 0x7630 # +0xE191 0x763B # +0xE192 0x7647 # +0xE193 0x7648 # +0xE194 0x7646 # +0xE195 0x765C # +0xE196 0x7658 # +0xE197 0x7661 # +0xE198 0x7662 # +0xE199 0x7668 # +0xE19A 0x7669 # +0xE19B 0x766A # +0xE19C 0x7667 # +0xE19D 0x766C # +0xE19E 0x7670 # +0xE19F 0x7672 # +0xE1A0 0x7676 # +0xE1A1 0x7678 # +0xE1A2 0x767C # +0xE1A3 0x7680 # +0xE1A4 0x7683 # +0xE1A5 0x7688 # +0xE1A6 0x768B # +0xE1A7 0x768E # +0xE1A8 0x7696 # +0xE1A9 0x7693 # +0xE1AA 0x7699 # +0xE1AB 0x769A # +0xE1AC 0x76B0 # +0xE1AD 0x76B4 # +0xE1AE 0x76B8 # +0xE1AF 0x76B9 # +0xE1B0 0x76BA # +0xE1B1 0x76C2 # +0xE1B2 0x76CD # +0xE1B3 0x76D6 # +0xE1B4 0x76D2 # +0xE1B5 0x76DE # +0xE1B6 0x76E1 # +0xE1B7 0x76E5 # +0xE1B8 0x76E7 # +0xE1B9 0x76EA # +0xE1BA 0x862F # +0xE1BB 0x76FB # +0xE1BC 0x7708 # +0xE1BD 0x7707 # +0xE1BE 0x7704 # +0xE1BF 0x7729 # +0xE1C0 0x7724 # +0xE1C1 0x771E # +0xE1C2 0x7725 # +0xE1C3 0x7726 # +0xE1C4 0x771B # +0xE1C5 0x7737 # +0xE1C6 0x7738 # +0xE1C7 0x7747 # +0xE1C8 0x775A # +0xE1C9 0x7768 # +0xE1CA 0x776B # +0xE1CB 0x775B # +0xE1CC 0x7765 # +0xE1CD 0x777F # +0xE1CE 0x777E # +0xE1CF 0x7779 # +0xE1D0 0x778E # +0xE1D1 0x778B # +0xE1D2 0x7791 # +0xE1D3 0x77A0 # +0xE1D4 0x779E # +0xE1D5 0x77B0 # +0xE1D6 0x77B6 # +0xE1D7 0x77B9 # +0xE1D8 0x77BF # +0xE1D9 0x77BC # +0xE1DA 0x77BD # +0xE1DB 0x77BB # +0xE1DC 0x77C7 # +0xE1DD 0x77CD # +0xE1DE 0x77D7 # +0xE1DF 0x77DA # +0xE1E0 0x77DC # +0xE1E1 0x77E3 # +0xE1E2 0x77EE # +0xE1E3 0x77FC # +0xE1E4 0x780C # +0xE1E5 0x7812 # +0xE1E6 0x7926 # +0xE1E7 0x7820 # +0xE1E8 0x792A # +0xE1E9 0x7845 # +0xE1EA 0x788E # +0xE1EB 0x7874 # +0xE1EC 0x7886 # +0xE1ED 0x787C # +0xE1EE 0x789A # +0xE1EF 0x788C # +0xE1F0 0x78A3 # +0xE1F1 0x78B5 # +0xE1F2 0x78AA # +0xE1F3 0x78AF # +0xE1F4 0x78D1 # +0xE1F5 0x78C6 # +0xE1F6 0x78CB # +0xE1F7 0x78D4 # +0xE1F8 0x78BE # +0xE1F9 0x78BC # +0xE1FA 0x78C5 # +0xE1FB 0x78CA # +0xE1FC 0x78EC # +0xE240 0x78E7 # +0xE241 0x78DA # +0xE242 0x78FD # +0xE243 0x78F4 # +0xE244 0x7907 # +0xE245 0x7912 # +0xE246 0x7911 # +0xE247 0x7919 # +0xE248 0x792C # +0xE249 0x792B # +0xE24A 0x7940 # +0xE24B 0x7960 # +0xE24C 0x7957 # +0xE24D 0x795F # +0xE24E 0x795A # +0xE24F 0x7955 # +0xE250 0x7953 # +0xE251 0x797A # +0xE252 0x797F # +0xE253 0x798A # +0xE254 0x799D # +0xE255 0x79A7 # +0xE256 0x9F4B # +0xE257 0x79AA # +0xE258 0x79AE # +0xE259 0x79B3 # +0xE25A 0x79B9 # +0xE25B 0x79BA # +0xE25C 0x79C9 # +0xE25D 0x79D5 # +0xE25E 0x79E7 # +0xE25F 0x79EC # +0xE260 0x79E1 # +0xE261 0x79E3 # +0xE262 0x7A08 # +0xE263 0x7A0D # +0xE264 0x7A18 # +0xE265 0x7A19 # +0xE266 0x7A20 # +0xE267 0x7A1F # +0xE268 0x7980 # +0xE269 0x7A31 # +0xE26A 0x7A3B # +0xE26B 0x7A3E # +0xE26C 0x7A37 # +0xE26D 0x7A43 # +0xE26E 0x7A57 # +0xE26F 0x7A49 # +0xE270 0x7A61 # +0xE271 0x7A62 # +0xE272 0x7A69 # +0xE273 0x9F9D # +0xE274 0x7A70 # +0xE275 0x7A79 # +0xE276 0x7A7D # +0xE277 0x7A88 # +0xE278 0x7A97 # +0xE279 0x7A95 # +0xE27A 0x7A98 # +0xE27B 0x7A96 # +0xE27C 0x7AA9 # +0xE27D 0x7AC8 # +0xE27E 0x7AB0 # +0xE280 0x7AB6 # +0xE281 0x7AC5 # +0xE282 0x7AC4 # +0xE283 0x7ABF # +0xE284 0x9083 # +0xE285 0x7AC7 # +0xE286 0x7ACA # +0xE287 0x7ACD # +0xE288 0x7ACF # +0xE289 0x7AD5 # +0xE28A 0x7AD3 # +0xE28B 0x7AD9 # +0xE28C 0x7ADA # +0xE28D 0x7ADD # +0xE28E 0x7AE1 # +0xE28F 0x7AE2 # +0xE290 0x7AE6 # +0xE291 0x7AED # +0xE292 0x7AF0 # +0xE293 0x7B02 # +0xE294 0x7B0F # +0xE295 0x7B0A # +0xE296 0x7B06 # +0xE297 0x7B33 # +0xE298 0x7B18 # +0xE299 0x7B19 # +0xE29A 0x7B1E # +0xE29B 0x7B35 # +0xE29C 0x7B28 # +0xE29D 0x7B36 # +0xE29E 0x7B50 # +0xE29F 0x7B7A # +0xE2A0 0x7B04 # +0xE2A1 0x7B4D # +0xE2A2 0x7B0B # +0xE2A3 0x7B4C # +0xE2A4 0x7B45 # +0xE2A5 0x7B75 # +0xE2A6 0x7B65 # +0xE2A7 0x7B74 # +0xE2A8 0x7B67 # +0xE2A9 0x7B70 # +0xE2AA 0x7B71 # +0xE2AB 0x7B6C # +0xE2AC 0x7B6E # +0xE2AD 0x7B9D # +0xE2AE 0x7B98 # +0xE2AF 0x7B9F # +0xE2B0 0x7B8D # +0xE2B1 0x7B9C # +0xE2B2 0x7B9A # +0xE2B3 0x7B8B # +0xE2B4 0x7B92 # +0xE2B5 0x7B8F # +0xE2B6 0x7B5D # +0xE2B7 0x7B99 # +0xE2B8 0x7BCB # +0xE2B9 0x7BC1 # +0xE2BA 0x7BCC # +0xE2BB 0x7BCF # +0xE2BC 0x7BB4 # +0xE2BD 0x7BC6 # +0xE2BE 0x7BDD # +0xE2BF 0x7BE9 # +0xE2C0 0x7C11 # +0xE2C1 0x7C14 # +0xE2C2 0x7BE6 # +0xE2C3 0x7BE5 # +0xE2C4 0x7C60 # +0xE2C5 0x7C00 # +0xE2C6 0x7C07 # +0xE2C7 0x7C13 # +0xE2C8 0x7BF3 # +0xE2C9 0x7BF7 # +0xE2CA 0x7C17 # +0xE2CB 0x7C0D # +0xE2CC 0x7BF6 # +0xE2CD 0x7C23 # +0xE2CE 0x7C27 # +0xE2CF 0x7C2A # +0xE2D0 0x7C1F # +0xE2D1 0x7C37 # +0xE2D2 0x7C2B # +0xE2D3 0x7C3D # +0xE2D4 0x7C4C # +0xE2D5 0x7C43 # +0xE2D6 0x7C54 # +0xE2D7 0x7C4F # +0xE2D8 0x7C40 # +0xE2D9 0x7C50 # +0xE2DA 0x7C58 # +0xE2DB 0x7C5F # +0xE2DC 0x7C64 # +0xE2DD 0x7C56 # +0xE2DE 0x7C65 # +0xE2DF 0x7C6C # +0xE2E0 0x7C75 # +0xE2E1 0x7C83 # +0xE2E2 0x7C90 # +0xE2E3 0x7CA4 # +0xE2E4 0x7CAD # +0xE2E5 0x7CA2 # +0xE2E6 0x7CAB # +0xE2E7 0x7CA1 # +0xE2E8 0x7CA8 # +0xE2E9 0x7CB3 # +0xE2EA 0x7CB2 # +0xE2EB 0x7CB1 # +0xE2EC 0x7CAE # +0xE2ED 0x7CB9 # +0xE2EE 0x7CBD # +0xE2EF 0x7CC0 # +0xE2F0 0x7CC5 # +0xE2F1 0x7CC2 # +0xE2F2 0x7CD8 # +0xE2F3 0x7CD2 # +0xE2F4 0x7CDC # +0xE2F5 0x7CE2 # +0xE2F6 0x9B3B # +0xE2F7 0x7CEF # +0xE2F8 0x7CF2 # +0xE2F9 0x7CF4 # +0xE2FA 0x7CF6 # +0xE2FB 0x7CFA # +0xE2FC 0x7D06 # +0xE340 0x7D02 # +0xE341 0x7D1C # +0xE342 0x7D15 # +0xE343 0x7D0A # +0xE344 0x7D45 # +0xE345 0x7D4B # +0xE346 0x7D2E # +0xE347 0x7D32 # +0xE348 0x7D3F # +0xE349 0x7D35 # +0xE34A 0x7D46 # +0xE34B 0x7D73 # +0xE34C 0x7D56 # +0xE34D 0x7D4E # +0xE34E 0x7D72 # +0xE34F 0x7D68 # +0xE350 0x7D6E # +0xE351 0x7D4F # +0xE352 0x7D63 # +0xE353 0x7D93 # +0xE354 0x7D89 # +0xE355 0x7D5B # +0xE356 0x7D8F # +0xE357 0x7D7D # +0xE358 0x7D9B # +0xE359 0x7DBA # +0xE35A 0x7DAE # +0xE35B 0x7DA3 # +0xE35C 0x7DB5 # +0xE35D 0x7DC7 # +0xE35E 0x7DBD # +0xE35F 0x7DAB # +0xE360 0x7E3D # +0xE361 0x7DA2 # +0xE362 0x7DAF # +0xE363 0x7DDC # +0xE364 0x7DB8 # +0xE365 0x7D9F # +0xE366 0x7DB0 # +0xE367 0x7DD8 # +0xE368 0x7DDD # +0xE369 0x7DE4 # +0xE36A 0x7DDE # +0xE36B 0x7DFB # +0xE36C 0x7DF2 # +0xE36D 0x7DE1 # +0xE36E 0x7E05 # +0xE36F 0x7E0A # +0xE370 0x7E23 # +0xE371 0x7E21 # +0xE372 0x7E12 # +0xE373 0x7E31 # +0xE374 0x7E1F # +0xE375 0x7E09 # +0xE376 0x7E0B # +0xE377 0x7E22 # +0xE378 0x7E46 # +0xE379 0x7E66 # +0xE37A 0x7E3B # +0xE37B 0x7E35 # +0xE37C 0x7E39 # +0xE37D 0x7E43 # +0xE37E 0x7E37 # +0xE380 0x7E32 # +0xE381 0x7E3A # +0xE382 0x7E67 # +0xE383 0x7E5D # +0xE384 0x7E56 # +0xE385 0x7E5E # +0xE386 0x7E59 # +0xE387 0x7E5A # +0xE388 0x7E79 # +0xE389 0x7E6A # +0xE38A 0x7E69 # +0xE38B 0x7E7C # +0xE38C 0x7E7B # +0xE38D 0x7E83 # +0xE38E 0x7DD5 # +0xE38F 0x7E7D # +0xE390 0x8FAE # +0xE391 0x7E7F # +0xE392 0x7E88 # +0xE393 0x7E89 # +0xE394 0x7E8C # +0xE395 0x7E92 # +0xE396 0x7E90 # +0xE397 0x7E93 # +0xE398 0x7E94 # +0xE399 0x7E96 # +0xE39A 0x7E8E # +0xE39B 0x7E9B # +0xE39C 0x7E9C # +0xE39D 0x7F38 # +0xE39E 0x7F3A # +0xE39F 0x7F45 # +0xE3A0 0x7F4C # +0xE3A1 0x7F4D # +0xE3A2 0x7F4E # +0xE3A3 0x7F50 # +0xE3A4 0x7F51 # +0xE3A5 0x7F55 # +0xE3A6 0x7F54 # +0xE3A7 0x7F58 # +0xE3A8 0x7F5F # +0xE3A9 0x7F60 # +0xE3AA 0x7F68 # +0xE3AB 0x7F69 # +0xE3AC 0x7F67 # +0xE3AD 0x7F78 # +0xE3AE 0x7F82 # +0xE3AF 0x7F86 # +0xE3B0 0x7F83 # +0xE3B1 0x7F88 # +0xE3B2 0x7F87 # +0xE3B3 0x7F8C # +0xE3B4 0x7F94 # +0xE3B5 0x7F9E # +0xE3B6 0x7F9D # +0xE3B7 0x7F9A # +0xE3B8 0x7FA3 # +0xE3B9 0x7FAF # +0xE3BA 0x7FB2 # +0xE3BB 0x7FB9 # +0xE3BC 0x7FAE # +0xE3BD 0x7FB6 # +0xE3BE 0x7FB8 # +0xE3BF 0x8B71 # +0xE3C0 0x7FC5 # +0xE3C1 0x7FC6 # +0xE3C2 0x7FCA # +0xE3C3 0x7FD5 # +0xE3C4 0x7FD4 # +0xE3C5 0x7FE1 # +0xE3C6 0x7FE6 # +0xE3C7 0x7FE9 # +0xE3C8 0x7FF3 # +0xE3C9 0x7FF9 # +0xE3CA 0x98DC # +0xE3CB 0x8006 # +0xE3CC 0x8004 # +0xE3CD 0x800B # +0xE3CE 0x8012 # +0xE3CF 0x8018 # +0xE3D0 0x8019 # +0xE3D1 0x801C # +0xE3D2 0x8021 # +0xE3D3 0x8028 # +0xE3D4 0x803F # +0xE3D5 0x803B # +0xE3D6 0x804A # +0xE3D7 0x8046 # +0xE3D8 0x8052 # +0xE3D9 0x8058 # +0xE3DA 0x805A # +0xE3DB 0x805F # +0xE3DC 0x8062 # +0xE3DD 0x8068 # +0xE3DE 0x8073 # +0xE3DF 0x8072 # +0xE3E0 0x8070 # +0xE3E1 0x8076 # +0xE3E2 0x8079 # +0xE3E3 0x807D # +0xE3E4 0x807F # +0xE3E5 0x8084 # +0xE3E6 0x8086 # +0xE3E7 0x8085 # +0xE3E8 0x809B # +0xE3E9 0x8093 # +0xE3EA 0x809A # +0xE3EB 0x80AD # +0xE3EC 0x5190 # +0xE3ED 0x80AC # +0xE3EE 0x80DB # +0xE3EF 0x80E5 # +0xE3F0 0x80D9 # +0xE3F1 0x80DD # +0xE3F2 0x80C4 # +0xE3F3 0x80DA # +0xE3F4 0x80D6 # +0xE3F5 0x8109 # +0xE3F6 0x80EF # +0xE3F7 0x80F1 # +0xE3F8 0x811B # +0xE3F9 0x8129 # +0xE3FA 0x8123 # +0xE3FB 0x812F # +0xE3FC 0x814B # +0xE440 0x968B # +0xE441 0x8146 # +0xE442 0x813E # +0xE443 0x8153 # +0xE444 0x8151 # +0xE445 0x80FC # +0xE446 0x8171 # +0xE447 0x816E # +0xE448 0x8165 # +0xE449 0x8166 # +0xE44A 0x8174 # +0xE44B 0x8183 # +0xE44C 0x8188 # +0xE44D 0x818A # +0xE44E 0x8180 # +0xE44F 0x8182 # +0xE450 0x81A0 # +0xE451 0x8195 # +0xE452 0x81A4 # +0xE453 0x81A3 # +0xE454 0x815F # +0xE455 0x8193 # +0xE456 0x81A9 # +0xE457 0x81B0 # +0xE458 0x81B5 # +0xE459 0x81BE # +0xE45A 0x81B8 # +0xE45B 0x81BD # +0xE45C 0x81C0 # +0xE45D 0x81C2 # +0xE45E 0x81BA # +0xE45F 0x81C9 # +0xE460 0x81CD # +0xE461 0x81D1 # +0xE462 0x81D9 # +0xE463 0x81D8 # +0xE464 0x81C8 # +0xE465 0x81DA # +0xE466 0x81DF # +0xE467 0x81E0 # +0xE468 0x81E7 # +0xE469 0x81FA # +0xE46A 0x81FB # +0xE46B 0x81FE # +0xE46C 0x8201 # +0xE46D 0x8202 # +0xE46E 0x8205 # +0xE46F 0x8207 # +0xE470 0x820A # +0xE471 0x820D # +0xE472 0x8210 # +0xE473 0x8216 # +0xE474 0x8229 # +0xE475 0x822B # +0xE476 0x8238 # +0xE477 0x8233 # +0xE478 0x8240 # +0xE479 0x8259 # +0xE47A 0x8258 # +0xE47B 0x825D # +0xE47C 0x825A # +0xE47D 0x825F # +0xE47E 0x8264 # +0xE480 0x8262 # +0xE481 0x8268 # +0xE482 0x826A # +0xE483 0x826B # +0xE484 0x822E # +0xE485 0x8271 # +0xE486 0x8277 # +0xE487 0x8278 # +0xE488 0x827E # +0xE489 0x828D # +0xE48A 0x8292 # +0xE48B 0x82AB # +0xE48C 0x829F # +0xE48D 0x82BB # +0xE48E 0x82AC # +0xE48F 0x82E1 # +0xE490 0x82E3 # +0xE491 0x82DF # +0xE492 0x82D2 # +0xE493 0x82F4 # +0xE494 0x82F3 # +0xE495 0x82FA # +0xE496 0x8393 # +0xE497 0x8303 # +0xE498 0x82FB # +0xE499 0x82F9 # +0xE49A 0x82DE # +0xE49B 0x8306 # +0xE49C 0x82DC # +0xE49D 0x8309 # +0xE49E 0x82D9 # +0xE49F 0x8335 # +0xE4A0 0x8334 # +0xE4A1 0x8316 # +0xE4A2 0x8332 # +0xE4A3 0x8331 # +0xE4A4 0x8340 # +0xE4A5 0x8339 # +0xE4A6 0x8350 # +0xE4A7 0x8345 # +0xE4A8 0x832F # +0xE4A9 0x832B # +0xE4AA 0x8317 # +0xE4AB 0x8318 # +0xE4AC 0x8385 # +0xE4AD 0x839A # +0xE4AE 0x83AA # +0xE4AF 0x839F # +0xE4B0 0x83A2 # +0xE4B1 0x8396 # +0xE4B2 0x8323 # +0xE4B3 0x838E # +0xE4B4 0x8387 # +0xE4B5 0x838A # +0xE4B6 0x837C # +0xE4B7 0x83B5 # +0xE4B8 0x8373 # +0xE4B9 0x8375 # +0xE4BA 0x83A0 # +0xE4BB 0x8389 # +0xE4BC 0x83A8 # +0xE4BD 0x83F4 # +0xE4BE 0x8413 # +0xE4BF 0x83EB # +0xE4C0 0x83CE # +0xE4C1 0x83FD # +0xE4C2 0x8403 # +0xE4C3 0x83D8 # +0xE4C4 0x840B # +0xE4C5 0x83C1 # +0xE4C6 0x83F7 # +0xE4C7 0x8407 # +0xE4C8 0x83E0 # +0xE4C9 0x83F2 # +0xE4CA 0x840D # +0xE4CB 0x8422 # +0xE4CC 0x8420 # +0xE4CD 0x83BD # +0xE4CE 0x8438 # +0xE4CF 0x8506 # +0xE4D0 0x83FB # +0xE4D1 0x846D # +0xE4D2 0x842A # +0xE4D3 0x843C # +0xE4D4 0x855A # +0xE4D5 0x8484 # +0xE4D6 0x8477 # +0xE4D7 0x846B # +0xE4D8 0x84AD # +0xE4D9 0x846E # +0xE4DA 0x8482 # +0xE4DB 0x8469 # +0xE4DC 0x8446 # +0xE4DD 0x842C # +0xE4DE 0x846F # +0xE4DF 0x8479 # +0xE4E0 0x8435 # +0xE4E1 0x84CA # +0xE4E2 0x8462 # +0xE4E3 0x84B9 # +0xE4E4 0x84BF # +0xE4E5 0x849F # +0xE4E6 0x84D9 # +0xE4E7 0x84CD # +0xE4E8 0x84BB # +0xE4E9 0x84DA # +0xE4EA 0x84D0 # +0xE4EB 0x84C1 # +0xE4EC 0x84C6 # +0xE4ED 0x84D6 # +0xE4EE 0x84A1 # +0xE4EF 0x8521 # +0xE4F0 0x84FF # +0xE4F1 0x84F4 # +0xE4F2 0x8517 # +0xE4F3 0x8518 # +0xE4F4 0x852C # +0xE4F5 0x851F # +0xE4F6 0x8515 # +0xE4F7 0x8514 # +0xE4F8 0x84FC # +0xE4F9 0x8540 # +0xE4FA 0x8563 # +0xE4FB 0x8558 # +0xE4FC 0x8548 # +0xE540 0x8541 # +0xE541 0x8602 # +0xE542 0x854B # +0xE543 0x8555 # +0xE544 0x8580 # +0xE545 0x85A4 # +0xE546 0x8588 # +0xE547 0x8591 # +0xE548 0x858A # +0xE549 0x85A8 # +0xE54A 0x856D # +0xE54B 0x8594 # +0xE54C 0x859B # +0xE54D 0x85EA # +0xE54E 0x8587 # +0xE54F 0x859C # +0xE550 0x8577 # +0xE551 0x857E # +0xE552 0x8590 # +0xE553 0x85C9 # +0xE554 0x85BA # +0xE555 0x85CF # +0xE556 0x85B9 # +0xE557 0x85D0 # +0xE558 0x85D5 # +0xE559 0x85DD # +0xE55A 0x85E5 # +0xE55B 0x85DC # +0xE55C 0x85F9 # +0xE55D 0x860A # +0xE55E 0x8613 # +0xE55F 0x860B # +0xE560 0x85FE # +0xE561 0x85FA # +0xE562 0x8606 # +0xE563 0x8622 # +0xE564 0x861A # +0xE565 0x8630 # +0xE566 0x863F # +0xE567 0x864D # +0xE568 0x4E55 # +0xE569 0x8654 # +0xE56A 0x865F # +0xE56B 0x8667 # +0xE56C 0x8671 # +0xE56D 0x8693 # +0xE56E 0x86A3 # +0xE56F 0x86A9 # +0xE570 0x86AA # +0xE571 0x868B # +0xE572 0x868C # +0xE573 0x86B6 # +0xE574 0x86AF # +0xE575 0x86C4 # +0xE576 0x86C6 # +0xE577 0x86B0 # +0xE578 0x86C9 # +0xE579 0x8823 # +0xE57A 0x86AB # +0xE57B 0x86D4 # +0xE57C 0x86DE # +0xE57D 0x86E9 # +0xE57E 0x86EC # +0xE580 0x86DF # +0xE581 0x86DB # +0xE582 0x86EF # +0xE583 0x8712 # +0xE584 0x8706 # +0xE585 0x8708 # +0xE586 0x8700 # +0xE587 0x8703 # +0xE588 0x86FB # +0xE589 0x8711 # +0xE58A 0x8709 # +0xE58B 0x870D # +0xE58C 0x86F9 # +0xE58D 0x870A # +0xE58E 0x8734 # +0xE58F 0x873F # +0xE590 0x8737 # +0xE591 0x873B # +0xE592 0x8725 # +0xE593 0x8729 # +0xE594 0x871A # +0xE595 0x8760 # +0xE596 0x875F # +0xE597 0x8778 # +0xE598 0x874C # +0xE599 0x874E # +0xE59A 0x8774 # +0xE59B 0x8757 # +0xE59C 0x8768 # +0xE59D 0x876E # +0xE59E 0x8759 # +0xE59F 0x8753 # +0xE5A0 0x8763 # +0xE5A1 0x876A # +0xE5A2 0x8805 # +0xE5A3 0x87A2 # +0xE5A4 0x879F # +0xE5A5 0x8782 # +0xE5A6 0x87AF # +0xE5A7 0x87CB # +0xE5A8 0x87BD # +0xE5A9 0x87C0 # +0xE5AA 0x87D0 # +0xE5AB 0x96D6 # +0xE5AC 0x87AB # +0xE5AD 0x87C4 # +0xE5AE 0x87B3 # +0xE5AF 0x87C7 # +0xE5B0 0x87C6 # +0xE5B1 0x87BB # +0xE5B2 0x87EF # +0xE5B3 0x87F2 # +0xE5B4 0x87E0 # +0xE5B5 0x880F # +0xE5B6 0x880D # +0xE5B7 0x87FE # +0xE5B8 0x87F6 # +0xE5B9 0x87F7 # +0xE5BA 0x880E # +0xE5BB 0x87D2 # +0xE5BC 0x8811 # +0xE5BD 0x8816 # +0xE5BE 0x8815 # +0xE5BF 0x8822 # +0xE5C0 0x8821 # +0xE5C1 0x8831 # +0xE5C2 0x8836 # +0xE5C3 0x8839 # +0xE5C4 0x8827 # +0xE5C5 0x883B # +0xE5C6 0x8844 # +0xE5C7 0x8842 # +0xE5C8 0x8852 # +0xE5C9 0x8859 # +0xE5CA 0x885E # +0xE5CB 0x8862 # +0xE5CC 0x886B # +0xE5CD 0x8881 # +0xE5CE 0x887E # +0xE5CF 0x889E # +0xE5D0 0x8875 # +0xE5D1 0x887D # +0xE5D2 0x88B5 # +0xE5D3 0x8872 # +0xE5D4 0x8882 # +0xE5D5 0x8897 # +0xE5D6 0x8892 # +0xE5D7 0x88AE # +0xE5D8 0x8899 # +0xE5D9 0x88A2 # +0xE5DA 0x888D # +0xE5DB 0x88A4 # +0xE5DC 0x88B0 # +0xE5DD 0x88BF # +0xE5DE 0x88B1 # +0xE5DF 0x88C3 # +0xE5E0 0x88C4 # +0xE5E1 0x88D4 # +0xE5E2 0x88D8 # +0xE5E3 0x88D9 # +0xE5E4 0x88DD # +0xE5E5 0x88F9 # +0xE5E6 0x8902 # +0xE5E7 0x88FC # +0xE5E8 0x88F4 # +0xE5E9 0x88E8 # +0xE5EA 0x88F2 # +0xE5EB 0x8904 # +0xE5EC 0x890C # +0xE5ED 0x890A # +0xE5EE 0x8913 # +0xE5EF 0x8943 # +0xE5F0 0x891E # +0xE5F1 0x8925 # +0xE5F2 0x892A # +0xE5F3 0x892B # +0xE5F4 0x8941 # +0xE5F5 0x8944 # +0xE5F6 0x893B # +0xE5F7 0x8936 # +0xE5F8 0x8938 # +0xE5F9 0x894C # +0xE5FA 0x891D # +0xE5FB 0x8960 # +0xE5FC 0x895E # +0xE640 0x8966 # +0xE641 0x8964 # +0xE642 0x896D # +0xE643 0x896A # +0xE644 0x896F # +0xE645 0x8974 # +0xE646 0x8977 # +0xE647 0x897E # +0xE648 0x8983 # +0xE649 0x8988 # +0xE64A 0x898A # +0xE64B 0x8993 # +0xE64C 0x8998 # +0xE64D 0x89A1 # +0xE64E 0x89A9 # +0xE64F 0x89A6 # +0xE650 0x89AC # +0xE651 0x89AF # +0xE652 0x89B2 # +0xE653 0x89BA # +0xE654 0x89BD # +0xE655 0x89BF # +0xE656 0x89C0 # +0xE657 0x89DA # +0xE658 0x89DC # +0xE659 0x89DD # +0xE65A 0x89E7 # +0xE65B 0x89F4 # +0xE65C 0x89F8 # +0xE65D 0x8A03 # +0xE65E 0x8A16 # +0xE65F 0x8A10 # +0xE660 0x8A0C # +0xE661 0x8A1B # +0xE662 0x8A1D # +0xE663 0x8A25 # +0xE664 0x8A36 # +0xE665 0x8A41 # +0xE666 0x8A5B # +0xE667 0x8A52 # +0xE668 0x8A46 # +0xE669 0x8A48 # +0xE66A 0x8A7C # +0xE66B 0x8A6D # +0xE66C 0x8A6C # +0xE66D 0x8A62 # +0xE66E 0x8A85 # +0xE66F 0x8A82 # +0xE670 0x8A84 # +0xE671 0x8AA8 # +0xE672 0x8AA1 # +0xE673 0x8A91 # +0xE674 0x8AA5 # +0xE675 0x8AA6 # +0xE676 0x8A9A # +0xE677 0x8AA3 # +0xE678 0x8AC4 # +0xE679 0x8ACD # +0xE67A 0x8AC2 # +0xE67B 0x8ADA # +0xE67C 0x8AEB # +0xE67D 0x8AF3 # +0xE67E 0x8AE7 # +0xE680 0x8AE4 # +0xE681 0x8AF1 # +0xE682 0x8B14 # +0xE683 0x8AE0 # +0xE684 0x8AE2 # +0xE685 0x8AF7 # +0xE686 0x8ADE # +0xE687 0x8ADB # +0xE688 0x8B0C # +0xE689 0x8B07 # +0xE68A 0x8B1A # +0xE68B 0x8AE1 # +0xE68C 0x8B16 # +0xE68D 0x8B10 # +0xE68E 0x8B17 # +0xE68F 0x8B20 # +0xE690 0x8B33 # +0xE691 0x97AB # +0xE692 0x8B26 # +0xE693 0x8B2B # +0xE694 0x8B3E # +0xE695 0x8B28 # +0xE696 0x8B41 # +0xE697 0x8B4C # +0xE698 0x8B4F # +0xE699 0x8B4E # +0xE69A 0x8B49 # +0xE69B 0x8B56 # +0xE69C 0x8B5B # +0xE69D 0x8B5A # +0xE69E 0x8B6B # +0xE69F 0x8B5F # +0xE6A0 0x8B6C # +0xE6A1 0x8B6F # +0xE6A2 0x8B74 # +0xE6A3 0x8B7D # +0xE6A4 0x8B80 # +0xE6A5 0x8B8C # +0xE6A6 0x8B8E # +0xE6A7 0x8B92 # +0xE6A8 0x8B93 # +0xE6A9 0x8B96 # +0xE6AA 0x8B99 # +0xE6AB 0x8B9A # +0xE6AC 0x8C3A # +0xE6AD 0x8C41 # +0xE6AE 0x8C3F # +0xE6AF 0x8C48 # +0xE6B0 0x8C4C # +0xE6B1 0x8C4E # +0xE6B2 0x8C50 # +0xE6B3 0x8C55 # +0xE6B4 0x8C62 # +0xE6B5 0x8C6C # +0xE6B6 0x8C78 # +0xE6B7 0x8C7A # +0xE6B8 0x8C82 # +0xE6B9 0x8C89 # +0xE6BA 0x8C85 # +0xE6BB 0x8C8A # +0xE6BC 0x8C8D # +0xE6BD 0x8C8E # +0xE6BE 0x8C94 # +0xE6BF 0x8C7C # +0xE6C0 0x8C98 # +0xE6C1 0x621D # +0xE6C2 0x8CAD # +0xE6C3 0x8CAA # +0xE6C4 0x8CBD # +0xE6C5 0x8CB2 # +0xE6C6 0x8CB3 # +0xE6C7 0x8CAE # +0xE6C8 0x8CB6 # +0xE6C9 0x8CC8 # +0xE6CA 0x8CC1 # +0xE6CB 0x8CE4 # +0xE6CC 0x8CE3 # +0xE6CD 0x8CDA # +0xE6CE 0x8CFD # +0xE6CF 0x8CFA # +0xE6D0 0x8CFB # +0xE6D1 0x8D04 # +0xE6D2 0x8D05 # +0xE6D3 0x8D0A # +0xE6D4 0x8D07 # +0xE6D5 0x8D0F # +0xE6D6 0x8D0D # +0xE6D7 0x8D10 # +0xE6D8 0x9F4E # +0xE6D9 0x8D13 # +0xE6DA 0x8CCD # +0xE6DB 0x8D14 # +0xE6DC 0x8D16 # +0xE6DD 0x8D67 # +0xE6DE 0x8D6D # +0xE6DF 0x8D71 # +0xE6E0 0x8D73 # +0xE6E1 0x8D81 # +0xE6E2 0x8D99 # +0xE6E3 0x8DC2 # +0xE6E4 0x8DBE # +0xE6E5 0x8DBA # +0xE6E6 0x8DCF # +0xE6E7 0x8DDA # +0xE6E8 0x8DD6 # +0xE6E9 0x8DCC # +0xE6EA 0x8DDB # +0xE6EB 0x8DCB # +0xE6EC 0x8DEA # +0xE6ED 0x8DEB # +0xE6EE 0x8DDF # +0xE6EF 0x8DE3 # +0xE6F0 0x8DFC # +0xE6F1 0x8E08 # +0xE6F2 0x8E09 # +0xE6F3 0x8DFF # +0xE6F4 0x8E1D # +0xE6F5 0x8E1E # +0xE6F6 0x8E10 # +0xE6F7 0x8E1F # +0xE6F8 0x8E42 # +0xE6F9 0x8E35 # +0xE6FA 0x8E30 # +0xE6FB 0x8E34 # +0xE6FC 0x8E4A # +0xE740 0x8E47 # +0xE741 0x8E49 # +0xE742 0x8E4C # +0xE743 0x8E50 # +0xE744 0x8E48 # +0xE745 0x8E59 # +0xE746 0x8E64 # +0xE747 0x8E60 # +0xE748 0x8E2A # +0xE749 0x8E63 # +0xE74A 0x8E55 # +0xE74B 0x8E76 # +0xE74C 0x8E72 # +0xE74D 0x8E7C # +0xE74E 0x8E81 # +0xE74F 0x8E87 # +0xE750 0x8E85 # +0xE751 0x8E84 # +0xE752 0x8E8B # +0xE753 0x8E8A # +0xE754 0x8E93 # +0xE755 0x8E91 # +0xE756 0x8E94 # +0xE757 0x8E99 # +0xE758 0x8EAA # +0xE759 0x8EA1 # +0xE75A 0x8EAC # +0xE75B 0x8EB0 # +0xE75C 0x8EC6 # +0xE75D 0x8EB1 # +0xE75E 0x8EBE # +0xE75F 0x8EC5 # +0xE760 0x8EC8 # +0xE761 0x8ECB # +0xE762 0x8EDB # +0xE763 0x8EE3 # +0xE764 0x8EFC # +0xE765 0x8EFB # +0xE766 0x8EEB # +0xE767 0x8EFE # +0xE768 0x8F0A # +0xE769 0x8F05 # +0xE76A 0x8F15 # +0xE76B 0x8F12 # +0xE76C 0x8F19 # +0xE76D 0x8F13 # +0xE76E 0x8F1C # +0xE76F 0x8F1F # +0xE770 0x8F1B # +0xE771 0x8F0C # +0xE772 0x8F26 # +0xE773 0x8F33 # +0xE774 0x8F3B # +0xE775 0x8F39 # +0xE776 0x8F45 # +0xE777 0x8F42 # +0xE778 0x8F3E # +0xE779 0x8F4C # +0xE77A 0x8F49 # +0xE77B 0x8F46 # +0xE77C 0x8F4E # +0xE77D 0x8F57 # +0xE77E 0x8F5C # +0xE780 0x8F62 # +0xE781 0x8F63 # +0xE782 0x8F64 # +0xE783 0x8F9C # +0xE784 0x8F9F # +0xE785 0x8FA3 # +0xE786 0x8FAD # +0xE787 0x8FAF # +0xE788 0x8FB7 # +0xE789 0x8FDA # +0xE78A 0x8FE5 # +0xE78B 0x8FE2 # +0xE78C 0x8FEA # +0xE78D 0x8FEF # +0xE78E 0x9087 # +0xE78F 0x8FF4 # +0xE790 0x9005 # +0xE791 0x8FF9 # +0xE792 0x8FFA # +0xE793 0x9011 # +0xE794 0x9015 # +0xE795 0x9021 # +0xE796 0x900D # +0xE797 0x901E # +0xE798 0x9016 # +0xE799 0x900B # +0xE79A 0x9027 # +0xE79B 0x9036 # +0xE79C 0x9035 # +0xE79D 0x9039 # +0xE79E 0x8FF8 # +0xE79F 0x904F # +0xE7A0 0x9050 # +0xE7A1 0x9051 # +0xE7A2 0x9052 # +0xE7A3 0x900E # +0xE7A4 0x9049 # +0xE7A5 0x903E # +0xE7A6 0x9056 # +0xE7A7 0x9058 # +0xE7A8 0x905E # +0xE7A9 0x9068 # +0xE7AA 0x906F # +0xE7AB 0x9076 # +0xE7AC 0x96A8 # +0xE7AD 0x9072 # +0xE7AE 0x9082 # +0xE7AF 0x907D # +0xE7B0 0x9081 # +0xE7B1 0x9080 # +0xE7B2 0x908A # +0xE7B3 0x9089 # +0xE7B4 0x908F # +0xE7B5 0x90A8 # +0xE7B6 0x90AF # +0xE7B7 0x90B1 # +0xE7B8 0x90B5 # +0xE7B9 0x90E2 # +0xE7BA 0x90E4 # +0xE7BB 0x6248 # +0xE7BC 0x90DB # +0xE7BD 0x9102 # +0xE7BE 0x9112 # +0xE7BF 0x9119 # +0xE7C0 0x9132 # +0xE7C1 0x9130 # +0xE7C2 0x914A # +0xE7C3 0x9156 # +0xE7C4 0x9158 # +0xE7C5 0x9163 # +0xE7C6 0x9165 # +0xE7C7 0x9169 # +0xE7C8 0x9173 # +0xE7C9 0x9172 # +0xE7CA 0x918B # +0xE7CB 0x9189 # +0xE7CC 0x9182 # +0xE7CD 0x91A2 # +0xE7CE 0x91AB # +0xE7CF 0x91AF # +0xE7D0 0x91AA # +0xE7D1 0x91B5 # +0xE7D2 0x91B4 # +0xE7D3 0x91BA # +0xE7D4 0x91C0 # +0xE7D5 0x91C1 # +0xE7D6 0x91C9 # +0xE7D7 0x91CB # +0xE7D8 0x91D0 # +0xE7D9 0x91D6 # +0xE7DA 0x91DF # +0xE7DB 0x91E1 # +0xE7DC 0x91DB # +0xE7DD 0x91FC # +0xE7DE 0x91F5 # +0xE7DF 0x91F6 # +0xE7E0 0x921E # +0xE7E1 0x91FF # +0xE7E2 0x9214 # +0xE7E3 0x922C # +0xE7E4 0x9215 # +0xE7E5 0x9211 # +0xE7E6 0x925E # +0xE7E7 0x9257 # +0xE7E8 0x9245 # +0xE7E9 0x9249 # +0xE7EA 0x9264 # +0xE7EB 0x9248 # +0xE7EC 0x9295 # +0xE7ED 0x923F # +0xE7EE 0x924B # +0xE7EF 0x9250 # +0xE7F0 0x929C # +0xE7F1 0x9296 # +0xE7F2 0x9293 # +0xE7F3 0x929B # +0xE7F4 0x925A # +0xE7F5 0x92CF # +0xE7F6 0x92B9 # +0xE7F7 0x92B7 # +0xE7F8 0x92E9 # +0xE7F9 0x930F # +0xE7FA 0x92FA # +0xE7FB 0x9344 # +0xE7FC 0x932E # +0xE840 0x9319 # +0xE841 0x9322 # +0xE842 0x931A # +0xE843 0x9323 # +0xE844 0x933A # +0xE845 0x9335 # +0xE846 0x933B # +0xE847 0x935C # +0xE848 0x9360 # +0xE849 0x937C # +0xE84A 0x936E # +0xE84B 0x9356 # +0xE84C 0x93B0 # +0xE84D 0x93AC # +0xE84E 0x93AD # +0xE84F 0x9394 # +0xE850 0x93B9 # +0xE851 0x93D6 # +0xE852 0x93D7 # +0xE853 0x93E8 # +0xE854 0x93E5 # +0xE855 0x93D8 # +0xE856 0x93C3 # +0xE857 0x93DD # +0xE858 0x93D0 # +0xE859 0x93C8 # +0xE85A 0x93E4 # +0xE85B 0x941A # +0xE85C 0x9414 # +0xE85D 0x9413 # +0xE85E 0x9403 # +0xE85F 0x9407 # +0xE860 0x9410 # +0xE861 0x9436 # +0xE862 0x942B # +0xE863 0x9435 # +0xE864 0x9421 # +0xE865 0x943A # +0xE866 0x9441 # +0xE867 0x9452 # +0xE868 0x9444 # +0xE869 0x945B # +0xE86A 0x9460 # +0xE86B 0x9462 # +0xE86C 0x945E # +0xE86D 0x946A # +0xE86E 0x9229 # +0xE86F 0x9470 # +0xE870 0x9475 # +0xE871 0x9477 # +0xE872 0x947D # +0xE873 0x945A # +0xE874 0x947C # +0xE875 0x947E # +0xE876 0x9481 # +0xE877 0x947F # +0xE878 0x9582 # +0xE879 0x9587 # +0xE87A 0x958A # +0xE87B 0x9594 # +0xE87C 0x9596 # +0xE87D 0x9598 # +0xE87E 0x9599 # +0xE880 0x95A0 # +0xE881 0x95A8 # +0xE882 0x95A7 # +0xE883 0x95AD # +0xE884 0x95BC # +0xE885 0x95BB # +0xE886 0x95B9 # +0xE887 0x95BE # +0xE888 0x95CA # +0xE889 0x6FF6 # +0xE88A 0x95C3 # +0xE88B 0x95CD # +0xE88C 0x95CC # +0xE88D 0x95D5 # +0xE88E 0x95D4 # +0xE88F 0x95D6 # +0xE890 0x95DC # +0xE891 0x95E1 # +0xE892 0x95E5 # +0xE893 0x95E2 # +0xE894 0x9621 # +0xE895 0x9628 # +0xE896 0x962E # +0xE897 0x962F # +0xE898 0x9642 # +0xE899 0x964C # +0xE89A 0x964F # +0xE89B 0x964B # +0xE89C 0x9677 # +0xE89D 0x965C # +0xE89E 0x965E # +0xE89F 0x965D # +0xE8A0 0x965F # +0xE8A1 0x9666 # +0xE8A2 0x9672 # +0xE8A3 0x966C # +0xE8A4 0x968D # +0xE8A5 0x9698 # +0xE8A6 0x9695 # +0xE8A7 0x9697 # +0xE8A8 0x96AA # +0xE8A9 0x96A7 # +0xE8AA 0x96B1 # +0xE8AB 0x96B2 # +0xE8AC 0x96B0 # +0xE8AD 0x96B4 # +0xE8AE 0x96B6 # +0xE8AF 0x96B8 # +0xE8B0 0x96B9 # +0xE8B1 0x96CE # +0xE8B2 0x96CB # +0xE8B3 0x96C9 # +0xE8B4 0x96CD # +0xE8B5 0x894D # +0xE8B6 0x96DC # +0xE8B7 0x970D # +0xE8B8 0x96D5 # +0xE8B9 0x96F9 # +0xE8BA 0x9704 # +0xE8BB 0x9706 # +0xE8BC 0x9708 # +0xE8BD 0x9713 # +0xE8BE 0x970E # +0xE8BF 0x9711 # +0xE8C0 0x970F # +0xE8C1 0x9716 # +0xE8C2 0x9719 # +0xE8C3 0x9724 # +0xE8C4 0x972A # +0xE8C5 0x9730 # +0xE8C6 0x9739 # +0xE8C7 0x973D # +0xE8C8 0x973E # +0xE8C9 0x9744 # +0xE8CA 0x9746 # +0xE8CB 0x9748 # +0xE8CC 0x9742 # +0xE8CD 0x9749 # +0xE8CE 0x975C # +0xE8CF 0x9760 # +0xE8D0 0x9764 # +0xE8D1 0x9766 # +0xE8D2 0x9768 # +0xE8D3 0x52D2 # +0xE8D4 0x976B # +0xE8D5 0x9771 # +0xE8D6 0x9779 # +0xE8D7 0x9785 # +0xE8D8 0x977C # +0xE8D9 0x9781 # +0xE8DA 0x977A # +0xE8DB 0x9786 # +0xE8DC 0x978B # +0xE8DD 0x978F # +0xE8DE 0x9790 # +0xE8DF 0x979C # +0xE8E0 0x97A8 # +0xE8E1 0x97A6 # +0xE8E2 0x97A3 # +0xE8E3 0x97B3 # +0xE8E4 0x97B4 # +0xE8E5 0x97C3 # +0xE8E6 0x97C6 # +0xE8E7 0x97C8 # +0xE8E8 0x97CB # +0xE8E9 0x97DC # +0xE8EA 0x97ED # +0xE8EB 0x9F4F # +0xE8EC 0x97F2 # +0xE8ED 0x7ADF # +0xE8EE 0x97F6 # +0xE8EF 0x97F5 # +0xE8F0 0x980F # +0xE8F1 0x980C # +0xE8F2 0x9838 # +0xE8F3 0x9824 # +0xE8F4 0x9821 # +0xE8F5 0x9837 # +0xE8F6 0x983D # +0xE8F7 0x9846 # +0xE8F8 0x984F # +0xE8F9 0x984B # +0xE8FA 0x986B # +0xE8FB 0x986F # +0xE8FC 0x9870 # +0xE940 0x9871 # +0xE941 0x9874 # +0xE942 0x9873 # +0xE943 0x98AA # +0xE944 0x98AF # +0xE945 0x98B1 # +0xE946 0x98B6 # +0xE947 0x98C4 # +0xE948 0x98C3 # +0xE949 0x98C6 # +0xE94A 0x98E9 # +0xE94B 0x98EB # +0xE94C 0x9903 # +0xE94D 0x9909 # +0xE94E 0x9912 # +0xE94F 0x9914 # +0xE950 0x9918 # +0xE951 0x9921 # +0xE952 0x991D # +0xE953 0x991E # +0xE954 0x9924 # +0xE955 0x9920 # +0xE956 0x992C # +0xE957 0x992E # +0xE958 0x993D # +0xE959 0x993E # +0xE95A 0x9942 # +0xE95B 0x9949 # +0xE95C 0x9945 # +0xE95D 0x9950 # +0xE95E 0x994B # +0xE95F 0x9951 # +0xE960 0x9952 # +0xE961 0x994C # +0xE962 0x9955 # +0xE963 0x9997 # +0xE964 0x9998 # +0xE965 0x99A5 # +0xE966 0x99AD # +0xE967 0x99AE # +0xE968 0x99BC # +0xE969 0x99DF # +0xE96A 0x99DB # +0xE96B 0x99DD # +0xE96C 0x99D8 # +0xE96D 0x99D1 # +0xE96E 0x99ED # +0xE96F 0x99EE # +0xE970 0x99F1 # +0xE971 0x99F2 # +0xE972 0x99FB # +0xE973 0x99F8 # +0xE974 0x9A01 # +0xE975 0x9A0F # +0xE976 0x9A05 # +0xE977 0x99E2 # +0xE978 0x9A19 # +0xE979 0x9A2B # +0xE97A 0x9A37 # +0xE97B 0x9A45 # +0xE97C 0x9A42 # +0xE97D 0x9A40 # +0xE97E 0x9A43 # +0xE980 0x9A3E # +0xE981 0x9A55 # +0xE982 0x9A4D # +0xE983 0x9A5B # +0xE984 0x9A57 # +0xE985 0x9A5F # +0xE986 0x9A62 # +0xE987 0x9A65 # +0xE988 0x9A64 # +0xE989 0x9A69 # +0xE98A 0x9A6B # +0xE98B 0x9A6A # +0xE98C 0x9AAD # +0xE98D 0x9AB0 # +0xE98E 0x9ABC # +0xE98F 0x9AC0 # +0xE990 0x9ACF # +0xE991 0x9AD1 # +0xE992 0x9AD3 # +0xE993 0x9AD4 # +0xE994 0x9ADE # +0xE995 0x9ADF # +0xE996 0x9AE2 # +0xE997 0x9AE3 # +0xE998 0x9AE6 # +0xE999 0x9AEF # +0xE99A 0x9AEB # +0xE99B 0x9AEE # +0xE99C 0x9AF4 # +0xE99D 0x9AF1 # +0xE99E 0x9AF7 # +0xE99F 0x9AFB # +0xE9A0 0x9B06 # +0xE9A1 0x9B18 # +0xE9A2 0x9B1A # +0xE9A3 0x9B1F # +0xE9A4 0x9B22 # +0xE9A5 0x9B23 # +0xE9A6 0x9B25 # +0xE9A7 0x9B27 # +0xE9A8 0x9B28 # +0xE9A9 0x9B29 # +0xE9AA 0x9B2A # +0xE9AB 0x9B2E # +0xE9AC 0x9B2F # +0xE9AD 0x9B32 # +0xE9AE 0x9B44 # +0xE9AF 0x9B43 # +0xE9B0 0x9B4F # +0xE9B1 0x9B4D # +0xE9B2 0x9B4E # +0xE9B3 0x9B51 # +0xE9B4 0x9B58 # +0xE9B5 0x9B74 # +0xE9B6 0x9B93 # +0xE9B7 0x9B83 # +0xE9B8 0x9B91 # +0xE9B9 0x9B96 # +0xE9BA 0x9B97 # +0xE9BB 0x9B9F # +0xE9BC 0x9BA0 # +0xE9BD 0x9BA8 # +0xE9BE 0x9BB4 # +0xE9BF 0x9BC0 # +0xE9C0 0x9BCA # +0xE9C1 0x9BB9 # +0xE9C2 0x9BC6 # +0xE9C3 0x9BCF # +0xE9C4 0x9BD1 # +0xE9C5 0x9BD2 # +0xE9C6 0x9BE3 # +0xE9C7 0x9BE2 # +0xE9C8 0x9BE4 # +0xE9C9 0x9BD4 # +0xE9CA 0x9BE1 # +0xE9CB 0x9C3A # +0xE9CC 0x9BF2 # +0xE9CD 0x9BF1 # +0xE9CE 0x9BF0 # +0xE9CF 0x9C15 # +0xE9D0 0x9C14 # +0xE9D1 0x9C09 # +0xE9D2 0x9C13 # +0xE9D3 0x9C0C # +0xE9D4 0x9C06 # +0xE9D5 0x9C08 # +0xE9D6 0x9C12 # +0xE9D7 0x9C0A # +0xE9D8 0x9C04 # +0xE9D9 0x9C2E # +0xE9DA 0x9C1B # +0xE9DB 0x9C25 # +0xE9DC 0x9C24 # +0xE9DD 0x9C21 # +0xE9DE 0x9C30 # +0xE9DF 0x9C47 # +0xE9E0 0x9C32 # +0xE9E1 0x9C46 # +0xE9E2 0x9C3E # +0xE9E3 0x9C5A # +0xE9E4 0x9C60 # +0xE9E5 0x9C67 # +0xE9E6 0x9C76 # +0xE9E7 0x9C78 # +0xE9E8 0x9CE7 # +0xE9E9 0x9CEC # +0xE9EA 0x9CF0 # +0xE9EB 0x9D09 # +0xE9EC 0x9D08 # +0xE9ED 0x9CEB # +0xE9EE 0x9D03 # +0xE9EF 0x9D06 # +0xE9F0 0x9D2A # +0xE9F1 0x9D26 # +0xE9F2 0x9DAF # +0xE9F3 0x9D23 # +0xE9F4 0x9D1F # +0xE9F5 0x9D44 # +0xE9F6 0x9D15 # +0xE9F7 0x9D12 # +0xE9F8 0x9D41 # +0xE9F9 0x9D3F # +0xE9FA 0x9D3E # +0xE9FB 0x9D46 # +0xE9FC 0x9D48 # +0xEA40 0x9D5D # +0xEA41 0x9D5E # +0xEA42 0x9D64 # +0xEA43 0x9D51 # +0xEA44 0x9D50 # +0xEA45 0x9D59 # +0xEA46 0x9D72 # +0xEA47 0x9D89 # +0xEA48 0x9D87 # +0xEA49 0x9DAB # +0xEA4A 0x9D6F # +0xEA4B 0x9D7A # +0xEA4C 0x9D9A # +0xEA4D 0x9DA4 # +0xEA4E 0x9DA9 # +0xEA4F 0x9DB2 # +0xEA50 0x9DC4 # +0xEA51 0x9DC1 # +0xEA52 0x9DBB # +0xEA53 0x9DB8 # +0xEA54 0x9DBA # +0xEA55 0x9DC6 # +0xEA56 0x9DCF # +0xEA57 0x9DC2 # +0xEA58 0x9DD9 # +0xEA59 0x9DD3 # +0xEA5A 0x9DF8 # +0xEA5B 0x9DE6 # +0xEA5C 0x9DED # +0xEA5D 0x9DEF # +0xEA5E 0x9DFD # +0xEA5F 0x9E1A # +0xEA60 0x9E1B # +0xEA61 0x9E1E # +0xEA62 0x9E75 # +0xEA63 0x9E79 # +0xEA64 0x9E7D # +0xEA65 0x9E81 # +0xEA66 0x9E88 # +0xEA67 0x9E8B # +0xEA68 0x9E8C # +0xEA69 0x9E92 # +0xEA6A 0x9E95 # +0xEA6B 0x9E91 # +0xEA6C 0x9E9D # +0xEA6D 0x9EA5 # +0xEA6E 0x9EA9 # +0xEA6F 0x9EB8 # +0xEA70 0x9EAA # +0xEA71 0x9EAD # +0xEA72 0x9761 # +0xEA73 0x9ECC # +0xEA74 0x9ECE # +0xEA75 0x9ECF # +0xEA76 0x9ED0 # +0xEA77 0x9ED4 # +0xEA78 0x9EDC # +0xEA79 0x9EDE # +0xEA7A 0x9EDD # +0xEA7B 0x9EE0 # +0xEA7C 0x9EE5 # +0xEA7D 0x9EE8 # +0xEA7E 0x9EEF # +0xEA80 0x9EF4 # +0xEA81 0x9EF6 # +0xEA82 0x9EF7 # +0xEA83 0x9EF9 # +0xEA84 0x9EFB # +0xEA85 0x9EFC # +0xEA86 0x9EFD # +0xEA87 0x9F07 # +0xEA88 0x9F08 # +0xEA89 0x76B7 # +0xEA8A 0x9F15 # +0xEA8B 0x9F21 # +0xEA8C 0x9F2C # +0xEA8D 0x9F3E # +0xEA8E 0x9F4A # +0xEA8F 0x9F52 # +0xEA90 0x9F54 # +0xEA91 0x9F63 # +0xEA92 0x9F5F # +0xEA93 0x9F60 # +0xEA94 0x9F61 # +0xEA95 0x9F66 # +0xEA96 0x9F67 # +0xEA97 0x9F6C # +0xEA98 0x9F6A # +0xEA99 0x9F77 # +0xEA9A 0x9F72 # +0xEA9B 0x9F76 # +0xEA9C 0x9F95 # +0xEA9D 0x9F9C # +0xEA9E 0x9FA0 # +0xEA9F 0x582F # +0xEAA0 0x69C7 # +0xEAA1 0x9059 # +0xEAA2 0x7464 # +0xEAA3 0x51DC # +0xEAA4 0x7199 # diff --git a/ext/mbstring/tests/data/SJIS-2004.txt b/ext/mbstring/tests/data/SJIS-2004.txt new file mode 100644 index 0000000000000..2db475d088175 --- /dev/null +++ b/ext/mbstring/tests/data/SJIS-2004.txt @@ -0,0 +1,11549 @@ +## Shift_JIS-2004 (JIS X 0213:2004 Appendix 1) vs Unicode mapping table +## +## Date: 3 May 2009 +## License: +## Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved. +## Copyright (C) 2001 I'O, All Rights Reserved. +## Copyright (C) 2006, 2009 Project X0213, All Rights Reserved. +## You can use, modify, distribute this table freely. +## Note: +## [1983] JIS codepoint defined by JIS X 0208-1983 +## [1990] JIS codepoint defined by JIS X 0208-1990 +## [2000] JIS codepoint defined by JIS X 0213:2000 +## [2004] JIS codepoint defined by JIS X 0213:2004 +## [Unicode3.1] UCS codepoint defined by Unicode 3.1 +## [Unicode3.2] UCS codepoint defined by Unicode 3.2 +## Fullwidth UCS fullwidth form (U+Fxxx) +## Windows Windows (CP932) mapping +## Some 0213 character can't represent by one UCS character. +## In this table, such characters are described as 'U+xxxx+xxxx'. +## +## JIS Unicode Name Note +0x00 U+0000 # +0x01 U+0001 # +0x02 U+0002 # +0x03 U+0003 # +0x04 U+0004 # +0x05 U+0005 # +0x06 U+0006 # +0x07 U+0007 # +0x08 U+0008 # +0x09 U+0009 # +0x0A U+000A # +0x0B U+000B # +0x0C U+000C # +0x0D U+000D # +0x0E U+000E # +0x0F U+000F # +0x10 U+0010 # +0x11 U+0011 # +0x12 U+0012 # +0x13 U+0013 # +0x14 U+0014 # +0x15 U+0015 # +0x16 U+0016 # +0x17 U+0017 # +0x18 U+0018 # +0x19 U+0019 # +0x1A U+001A # +0x1B U+001B # +0x1C U+001C # +0x1D U+001D # +0x1E U+001E # +0x1F U+001F # +0x20 U+0020 # SPACE +0x21 U+0021 # EXCLAMATION MARK +0x22 U+0022 # QUOTATION MARK +0x23 U+0023 # NUMBER SIGN +0x24 U+0024 # DOLLAR SIGN +0x25 U+0025 # PERCENT SIGN +0x26 U+0026 # AMPERSAND +0x27 U+0027 # APOSTROPHE +0x28 U+0028 # LEFT PARENTHESIS +0x29 U+0029 # RIGHT PARENTHESIS +0x2A U+002A # ASTERISK +0x2B U+002B # PLUS SIGN +0x2C U+002C # COMMA +0x2D U+002D # HYPHEN-MINUS +0x2E U+002E # FULL STOP +0x2F U+002F # SOLIDUS +0x30 U+0030 # DIGIT ZERO +0x31 U+0031 # DIGIT ONE +0x32 U+0032 # DIGIT TWO +0x33 U+0033 # DIGIT THREE +0x34 U+0034 # DIGIT FOUR +0x35 U+0035 # DIGIT FIVE +0x36 U+0036 # DIGIT SIX +0x37 U+0037 # DIGIT SEVEN +0x38 U+0038 # DIGIT EIGHT +0x39 U+0039 # DIGIT NINE +0x3A U+003A # COLON +0x3B U+003B # SEMICOLON +0x3C U+003C # LESS-THAN SIGN +0x3D U+003D # EQUALS SIGN +0x3E U+003E # GREATER-THAN SIGN +0x3F U+003F # QUESTION MARK +0x40 U+0040 # COMMERCIAL AT +0x41 U+0041 # LATIN CAPITAL LETTER A +0x42 U+0042 # LATIN CAPITAL LETTER B +0x43 U+0043 # LATIN CAPITAL LETTER C +0x44 U+0044 # LATIN CAPITAL LETTER D +0x45 U+0045 # LATIN CAPITAL LETTER E +0x46 U+0046 # LATIN CAPITAL LETTER F +0x47 U+0047 # LATIN CAPITAL LETTER G +0x48 U+0048 # LATIN CAPITAL LETTER H +0x49 U+0049 # LATIN CAPITAL LETTER I +0x4A U+004A # LATIN CAPITAL LETTER J +0x4B U+004B # LATIN CAPITAL LETTER K +0x4C U+004C # LATIN CAPITAL LETTER L +0x4D U+004D # LATIN CAPITAL LETTER M +0x4E U+004E # LATIN CAPITAL LETTER N +0x4F U+004F # LATIN CAPITAL LETTER O +0x50 U+0050 # LATIN CAPITAL LETTER P +0x51 U+0051 # LATIN CAPITAL LETTER Q +0x52 U+0052 # LATIN CAPITAL LETTER R +0x53 U+0053 # LATIN CAPITAL LETTER S +0x54 U+0054 # LATIN CAPITAL LETTER T +0x55 U+0055 # LATIN CAPITAL LETTER U +0x56 U+0056 # LATIN CAPITAL LETTER V +0x57 U+0057 # LATIN CAPITAL LETTER W +0x58 U+0058 # LATIN CAPITAL LETTER X +0x59 U+0059 # LATIN CAPITAL LETTER Y +0x5A U+005A # LATIN CAPITAL LETTER Z +0x5B U+005B # LEFT SQUARE BRACKET +0x5C U+00A5 # YEN SIGN +0x5D U+005D # RIGHT SQUARE BRACKET +0x5E U+005E # CIRCUMFLEX ACCENT +0x5F U+005F # LOW LINE +0x60 U+0060 # GRAVE ACCENT +0x61 U+0061 # LATIN SMALL LETTER A +0x62 U+0062 # LATIN SMALL LETTER B +0x63 U+0063 # LATIN SMALL LETTER C +0x64 U+0064 # LATIN SMALL LETTER D +0x65 U+0065 # LATIN SMALL LETTER E +0x66 U+0066 # LATIN SMALL LETTER F +0x67 U+0067 # LATIN SMALL LETTER G +0x68 U+0068 # LATIN SMALL LETTER H +0x69 U+0069 # LATIN SMALL LETTER I +0x6A U+006A # LATIN SMALL LETTER J +0x6B U+006B # LATIN SMALL LETTER K +0x6C U+006C # LATIN SMALL LETTER L +0x6D U+006D # LATIN SMALL LETTER M +0x6E U+006E # LATIN SMALL LETTER N +0x6F U+006F # LATIN SMALL LETTER O +0x70 U+0070 # LATIN SMALL LETTER P +0x71 U+0071 # LATIN SMALL LETTER Q +0x72 U+0072 # LATIN SMALL LETTER R +0x73 U+0073 # LATIN SMALL LETTER S +0x74 U+0074 # LATIN SMALL LETTER T +0x75 U+0075 # LATIN SMALL LETTER U +0x76 U+0076 # LATIN SMALL LETTER V +0x77 U+0077 # LATIN SMALL LETTER W +0x78 U+0078 # LATIN SMALL LETTER X +0x79 U+0079 # LATIN SMALL LETTER Y +0x7A U+007A # LATIN SMALL LETTER Z +0x7B U+007B # LEFT CURLY BRACKET +0x7C U+007C # VERTICAL LINE +0x7D U+007D # RIGHT CURLY BRACKET +0x7E U+203E # OVERLINE +0x7F U+007F # +0x80 # +0x81 # +0x82 # +0x83 # +0x84 # +0x85 # +0x86 # +0x87 # +0x88 # +0x89 # +0x8A # +0x8B # +0x8C # +0x8D # +0x8E # +0x8F # +0x90 # +0x91 # +0x92 # +0x93 # +0x94 # +0x95 # +0x96 # +0x97 # +0x98 # +0x99 # +0x9A # +0x9B # +0x9C # +0x9D # +0x9E # +0x9F # +0xA0 # +0xA1 U+FF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 U+FF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 U+FF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 U+FF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 U+FF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 U+FF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 U+FF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 U+FF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 U+FF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA U+FF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB U+FF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC U+FF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD U+FF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE U+FF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF U+FF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 U+FF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 U+FF71 # HALFWIDTH KATAKANA LETTER A +0xB2 U+FF72 # HALFWIDTH KATAKANA LETTER I +0xB3 U+FF73 # HALFWIDTH KATAKANA LETTER U +0xB4 U+FF74 # HALFWIDTH KATAKANA LETTER E +0xB5 U+FF75 # HALFWIDTH KATAKANA LETTER O +0xB6 U+FF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 U+FF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 U+FF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 U+FF79 # HALFWIDTH KATAKANA LETTER KE +0xBA U+FF7A # HALFWIDTH KATAKANA LETTER KO +0xBB U+FF7B # HALFWIDTH KATAKANA LETTER SA +0xBC U+FF7C # HALFWIDTH KATAKANA LETTER SI +0xBD U+FF7D # HALFWIDTH KATAKANA LETTER SU +0xBE U+FF7E # HALFWIDTH KATAKANA LETTER SE +0xBF U+FF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 U+FF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 U+FF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 U+FF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 U+FF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 U+FF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 U+FF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 U+FF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 U+FF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 U+FF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 U+FF89 # HALFWIDTH KATAKANA LETTER NO +0xCA U+FF8A # HALFWIDTH KATAKANA LETTER HA +0xCB U+FF8B # HALFWIDTH KATAKANA LETTER HI +0xCC U+FF8C # HALFWIDTH KATAKANA LETTER HU +0xCD U+FF8D # HALFWIDTH KATAKANA LETTER HE +0xCE U+FF8E # HALFWIDTH KATAKANA LETTER HO +0xCF U+FF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 U+FF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 U+FF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 U+FF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 U+FF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 U+FF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 U+FF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 U+FF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 U+FF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 U+FF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 U+FF99 # HALFWIDTH KATAKANA LETTER RU +0xDA U+FF9A # HALFWIDTH KATAKANA LETTER RE +0xDB U+FF9B # HALFWIDTH KATAKANA LETTER RO +0xDC U+FF9C # HALFWIDTH KATAKANA LETTER WA +0xDD U+FF9D # HALFWIDTH KATAKANA LETTER N +0xDE U+FF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF U+FF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +0xE0 # +0xE1 # +0xE2 # +0xE3 # +0xE4 # +0xE5 # +0xE6 # +0xE7 # +0xE8 # +0xE9 # +0xEA # +0xEB # +0xEC # +0xED # +0xEE # +0xEF # +0xF0 # +0xF1 # +0xF2 # +0xF3 # +0xF4 # +0xF5 # +0xF6 # +0xF7 # +0xF8 # +0xF9 # +0xFA # +0xFB # +0xFC # +0xFD # +0xFE # +0xFF # +0x8140 U+3000 # IDEOGRAPHIC SPACE +0x8141 U+3001 # IDEOGRAPHIC COMMA +0x8142 U+3002 # IDEOGRAPHIC FULL STOP +0x8143 U+FF0C # FULLWIDTH COMMA +0x8144 U+FF0E # FULLWIDTH FULL STOP +0x8145 U+30FB # KATAKANA MIDDLE DOT +0x8146 U+FF1A # FULLWIDTH COLON +0x8147 U+FF1B # FULLWIDTH SEMICOLON +0x8148 U+FF1F # FULLWIDTH QUESTION MARK +0x8149 U+FF01 # FULLWIDTH EXCLAMATION MARK +0x814A U+309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B U+309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C U+00B4 # ACUTE ACCENT +0x814D U+FF40 # FULLWIDTH GRAVE ACCENT +0x814E U+00A8 # DIAERESIS +0x814F U+FF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 U+FFE3 # FULLWIDTH MACRON +0x8151 U+FF3F # FULLWIDTH LOW LINE +0x8152 U+30FD # KATAKANA ITERATION MARK +0x8153 U+30FE # KATAKANA VOICED ITERATION MARK +0x8154 U+309D # HIRAGANA ITERATION MARK +0x8155 U+309E # HIRAGANA VOICED ITERATION MARK +0x8156 U+3003 # DITTO MARK +0x8157 U+4EDD # +0x8158 U+3005 # IDEOGRAPHIC ITERATION MARK +0x8159 U+3006 # IDEOGRAPHIC CLOSING MARK +0x815A U+3007 # IDEOGRAPHIC NUMBER ZERO +0x815B U+30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C U+2014 # EM DASH Windows: U+2015 +0x815D U+2010 # HYPHEN +0x815E U+FF0F # FULLWIDTH SOLIDUS +0x815F U+005C # REVERSE SOLIDUS Fullwidth: U+FF3C +0x8160 U+301C # WAVE DASH Windows: U+FF5E +0x8161 U+2016 # DOUBLE VERTICAL LINE Windows: U+2225 +0x8162 U+FF5C # FULLWIDTH VERTICAL LINE +0x8163 U+2026 # HORIZONTAL ELLIPSIS +0x8164 U+2025 # TWO DOT LEADER +0x8165 U+2018 # LEFT SINGLE QUOTATION MARK +0x8166 U+2019 # RIGHT SINGLE QUOTATION MARK +0x8167 U+201C # LEFT DOUBLE QUOTATION MARK +0x8168 U+201D # RIGHT DOUBLE QUOTATION MARK +0x8169 U+FF08 # FULLWIDTH LEFT PARENTHESIS +0x816A U+FF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B U+3014 # LEFT TORTOISE SHELL BRACKET +0x816C U+3015 # RIGHT TORTOISE SHELL BRACKET +0x816D U+FF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E U+FF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F U+FF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 U+FF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 U+3008 # LEFT ANGLE BRACKET +0x8172 U+3009 # RIGHT ANGLE BRACKET +0x8173 U+300A # LEFT DOUBLE ANGLE BRACKET +0x8174 U+300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 U+300C # LEFT CORNER BRACKET +0x8176 U+300D # RIGHT CORNER BRACKET +0x8177 U+300E # LEFT WHITE CORNER BRACKET +0x8178 U+300F # RIGHT WHITE CORNER BRACKET +0x8179 U+3010 # LEFT BLACK LENTICULAR BRACKET +0x817A U+3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B U+FF0B # FULLWIDTH PLUS SIGN +0x817C U+2212 # MINUS SIGN Windows: U+FF0D +0x817D U+00B1 # PLUS-MINUS SIGN +0x817E U+00D7 # MULTIPLICATION SIGN +0x8180 U+00F7 # DIVISION SIGN +0x8181 U+FF1D # FULLWIDTH EQUALS SIGN +0x8182 U+2260 # NOT EQUAL TO +0x8183 U+FF1C # FULLWIDTH LESS-THAN SIGN +0x8184 U+FF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 U+2266 # LESS-THAN OVER EQUAL TO +0x8186 U+2267 # GREATER-THAN OVER EQUAL TO +0x8187 U+221E # INFINITY +0x8188 U+2234 # THEREFORE +0x8189 U+2642 # MALE SIGN +0x818A U+2640 # FEMALE SIGN +0x818B U+00B0 # DEGREE SIGN +0x818C U+2032 # PRIME +0x818D U+2033 # DOUBLE PRIME +0x818E U+2103 # DEGREE CELSIUS +0x818F U+FFE5 # FULLWIDTH YEN SIGN +0x8190 U+FF04 # FULLWIDTH DOLLAR SIGN +0x8191 U+00A2 # CENT SIGN Windows: U+FFE0 +0x8192 U+00A3 # POUND SIGN Windows: U+FFE1 +0x8193 U+FF05 # FULLWIDTH PERCENT SIGN +0x8194 U+FF03 # FULLWIDTH NUMBER SIGN +0x8195 U+FF06 # FULLWIDTH AMPERSAND +0x8196 U+FF0A # FULLWIDTH ASTERISK +0x8197 U+FF20 # FULLWIDTH COMMERCIAL AT +0x8198 U+00A7 # SECTION SIGN +0x8199 U+2606 # WHITE STAR +0x819A U+2605 # BLACK STAR +0x819B U+25CB # WHITE CIRCLE +0x819C U+25CF # BLACK CIRCLE +0x819D U+25CE # BULLSEYE +0x819E U+25C7 # WHITE DIAMOND +0x819F U+25C6 # BLACK DIAMOND +0x81A0 U+25A1 # WHITE SQUARE +0x81A1 U+25A0 # BLACK SQUARE +0x81A2 U+25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 U+25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 U+25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 U+25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 U+203B # REFERENCE MARK +0x81A7 U+3012 # POSTAL MARK +0x81A8 U+2192 # RIGHTWARDS ARROW +0x81A9 U+2190 # LEFTWARDS ARROW +0x81AA U+2191 # UPWARDS ARROW +0x81AB U+2193 # DOWNWARDS ARROW +0x81AC U+3013 # GETA MARK +0x81AD U+FF07 # FULLWIDTH APOSTROPHE [2000] +0x81AE U+FF02 # FULLWIDTH QUOTATION MARK [2000] +0x81AF U+FF0D # FULLWIDTH HYPHEN-MINUS [2000] +0x81B0 U+007E # TILDE [2000] Fullwidth: U+FF5E +0x81B1 U+3033 # VERTICAL KANA REPEAT MARK UPPER HALF [2000] +0x81B2 U+3034 # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF [2000] +0x81B3 U+3035 # VERTICAL KANA REPEAT MARK LOWER HALF [2000] +0x81B4 U+303B # VERTICAL IDEOGRAPHIC ITERATION MARK [2000] [Unicode3.2] +0x81B5 U+303C # MASU MARK [2000] [Unicode3.2] +0x81B6 U+30FF # KATAKANA DIGRAPH KOTO [2000] [Unicode3.2] +0x81B7 U+309F # HIRAGANA DIGRAPH YORI [2000] [Unicode3.2] +0x81B8 U+2208 # ELEMENT OF [1983] +0x81B9 U+220B # CONTAINS AS MEMBER [1983] +0x81BA U+2286 # SUBSET OF OR EQUAL TO [1983] +0x81BB U+2287 # SUPERSET OF OR EQUAL TO [1983] +0x81BC U+2282 # SUBSET OF [1983] +0x81BD U+2283 # SUPERSET OF [1983] +0x81BE U+222A # UNION [1983] +0x81BF U+2229 # INTERSECTION [1983] +0x81C0 U+2284 # NOT A SUBSET OF [2000] +0x81C1 U+2285 # NOT A SUPERSET OF [2000] +0x81C2 U+228A # SUBSET OF WITH NOT EQUAL TO [2000] +0x81C3 U+228B # SUPERSET OF WITH NOT EQUAL TO [2000] +0x81C4 U+2209 # NOT AN ELEMENT OF [2000] +0x81C5 U+2205 # EMPTY SET [2000] +0x81C6 U+2305 # PROJECTIVE [2000] +0x81C7 U+2306 # PERSPECTIVE [2000] +0x81C8 U+2227 # LOGICAL AND [1983] +0x81C9 U+2228 # LOGICAL OR [1983] +0x81CA U+00AC # NOT SIGN [1983] Windows: U+FFE2 +0x81CB U+21D2 # RIGHTWARDS DOUBLE ARROW [1983] +0x81CC U+21D4 # LEFT RIGHT DOUBLE ARROW [1983] +0x81CD U+2200 # FOR ALL [1983] +0x81CE U+2203 # THERE EXISTS [1983] +0x81CF U+2295 # CIRCLED PLUS [2000] +0x81D0 U+2296 # CIRCLED MINUS [2000] +0x81D1 U+2297 # CIRCLED TIMES [2000] +0x81D2 U+2225 # PARALLEL TO [2000] +0x81D3 U+2226 # NOT PARALLEL TO [2000] +0x81D4 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2] +0x81D5 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2] +0x81D6 U+3018 # LEFT WHITE TORTOISE SHELL BRACKET [2000] +0x81D7 U+3019 # RIGHT WHITE TORTOISE SHELL BRACKET [2000] +0x81D8 U+3016 # LEFT WHITE LENTICULAR BRACKET [2000] +0x81D9 U+3017 # RIGHT WHITE LENTICULAR BRACKET [2000] +0x81DA U+2220 # ANGLE [1983] +0x81DB U+22A5 # UP TACK [1983] +0x81DC U+2312 # ARC [1983] +0x81DD U+2202 # PARTIAL DIFFERENTIAL [1983] +0x81DE U+2207 # NABLA [1983] +0x81DF U+2261 # IDENTICAL TO [1983] +0x81E0 U+2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF [1983] +0x81E1 U+226A # MUCH LESS-THAN [1983] +0x81E2 U+226B # MUCH GREATER-THAN [1983] +0x81E3 U+221A # SQUARE ROOT [1983] +0x81E4 U+223D # REVERSED TILDE [1983] +0x81E5 U+221D # PROPORTIONAL TO [1983] +0x81E6 U+2235 # BECAUSE [1983] +0x81E7 U+222B # INTEGRAL [1983] +0x81E8 U+222C # DOUBLE INTEGRAL [1983] +0x81E9 U+2262 # NOT IDENTICAL TO [2000] +0x81EA U+2243 # ASYMPTOTICALLY EQUAL TO [2000] +0x81EB U+2245 # APPROXIMATELY EQUAL TO [2000] +0x81EC U+2248 # ALMOST EQUAL TO [2000] +0x81ED U+2276 # LESS-THAN OR GREATER-THAN [2000] +0x81EE U+2277 # GREATER-THAN OR LESS-THAN [2000] +0x81EF U+2194 # LEFT RIGHT ARROW [2000] +0x81F0 U+212B # ANGSTROM SIGN [1983] +0x81F1 U+2030 # PER MILLE SIGN [1983] +0x81F2 U+266F # MUSIC SHARP SIGN [1983] +0x81F3 U+266D # MUSIC FLAT SIGN [1983] +0x81F4 U+266A # EIGHTH NOTE [1983] +0x81F5 U+2020 # DAGGER [1983] +0x81F6 U+2021 # DOUBLE DAGGER [1983] +0x81F7 U+00B6 # PILCROW SIGN [1983] +0x81F8 U+266E # MUSIC NATURAL SIGN [2000] +0x81F9 U+266B # BEAMED EIGHTH NOTES [2000] +0x81FA U+266C # BEAMED SIXTEENTH NOTES [2000] +0x81FB U+2669 # QUARTER NOTE [2000] +0x81FC U+25EF # LARGE CIRCLE [1983] +0x8240 U+25B7 # WHITE RIGHT-POINTING TRIANGLE [2000] +0x8241 U+25B6 # BLACK RIGHT-POINTING TRIANGLE [2000] +0x8242 U+25C1 # WHITE LEFT-POINTING TRIANGLE [2000] +0x8243 U+25C0 # BLACK LEFT-POINTING TRIANGLE [2000] +0x8244 U+2197 # NORTH EAST ARROW [2000] +0x8245 U+2198 # SOUTH EAST ARROW [2000] +0x8246 U+2196 # NORTH WEST ARROW [2000] +0x8247 U+2199 # SOUTH WEST ARROW [2000] +0x8248 U+21C4 # RIGHTWARDS ARROW OVER LEFTWARDS ARROW [2000] +0x8249 U+21E8 # RIGHTWARDS WHITE ARROW [2000] +0x824A U+21E6 # LEFTWARDS WHITE ARROW [2000] +0x824B U+21E7 # UPWARDS WHITE ARROW [2000] +0x824C U+21E9 # DOWNWARDS WHITE ARROW [2000] +0x824D U+2934 # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS [2000] [Unicode3.2] +0x824E U+2935 # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS [2000] [Unicode3.2] +0x824F U+FF10 # FULLWIDTH DIGIT ZERO +0x8250 U+FF11 # FULLWIDTH DIGIT ONE +0x8251 U+FF12 # FULLWIDTH DIGIT TWO +0x8252 U+FF13 # FULLWIDTH DIGIT THREE +0x8253 U+FF14 # FULLWIDTH DIGIT FOUR +0x8254 U+FF15 # FULLWIDTH DIGIT FIVE +0x8255 U+FF16 # FULLWIDTH DIGIT SIX +0x8256 U+FF17 # FULLWIDTH DIGIT SEVEN +0x8257 U+FF18 # FULLWIDTH DIGIT EIGHT +0x8258 U+FF19 # FULLWIDTH DIGIT NINE +0x8259 U+29BF # CIRCLED BULLET [2000] [Unicode3.2] +0x825A U+25C9 # FISHEYE [2000] +0x825B U+303D # PART ALTERNATION MARK [2000] [Unicode3.2] +0x825C U+FE46 # WHITE SESAME DOT [2000] [Unicode3.2] +0x825D U+FE45 # SESAME DOT [2000] [Unicode3.2] +0x825E U+25E6 # WHITE BULLET [2000] +0x825F U+2022 # BULLET [2000] +0x8260 U+FF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 U+FF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 U+FF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 U+FF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 U+FF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 U+FF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 U+FF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 U+FF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 U+FF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 U+FF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A U+FF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B U+FF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C U+FF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D U+FF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E U+FF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F U+FF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 U+FF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 U+FF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 U+FF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 U+FF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 U+FF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 U+FF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 U+FF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 U+FF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 U+FF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 U+FF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x827A U+2213 # MINUS-OR-PLUS SIGN [2000] +0x827B U+2135 # ALEF SYMBOL [2000] +0x827C U+210F # PLANCK CONSTANT OVER TWO PI [2000] +0x827D U+33CB # SQUARE HP [2000] +0x827E U+2113 # SCRIPT SMALL L [2000] +0x8280 U+2127 # INVERTED OHM SIGN [2000] +0x8281 U+FF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 U+FF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 U+FF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 U+FF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 U+FF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 U+FF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 U+FF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 U+FF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 U+FF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A U+FF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B U+FF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C U+FF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D U+FF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E U+FF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F U+FF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 U+FF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 U+FF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 U+FF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 U+FF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 U+FF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 U+FF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 U+FF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 U+FF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 U+FF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 U+FF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A U+FF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829B U+30A0 # KATAKANA-HIRAGANA DOUBLE HYPHEN [2000] [Unicode3.2] +0x829C U+2013 # EN DASH [2000] +0x829D U+29FA # DOUBLE PLUS [2000] [Unicode3.2] +0x829E U+29FB # TRIPLE PLUS [2000] [Unicode3.2] +0x829F U+3041 # HIRAGANA LETTER SMALL A +0x82A0 U+3042 # HIRAGANA LETTER A +0x82A1 U+3043 # HIRAGANA LETTER SMALL I +0x82A2 U+3044 # HIRAGANA LETTER I +0x82A3 U+3045 # HIRAGANA LETTER SMALL U +0x82A4 U+3046 # HIRAGANA LETTER U +0x82A5 U+3047 # HIRAGANA LETTER SMALL E +0x82A6 U+3048 # HIRAGANA LETTER E +0x82A7 U+3049 # HIRAGANA LETTER SMALL O +0x82A8 U+304A # HIRAGANA LETTER O +0x82A9 U+304B # HIRAGANA LETTER KA +0x82AA U+304C # HIRAGANA LETTER GA +0x82AB U+304D # HIRAGANA LETTER KI +0x82AC U+304E # HIRAGANA LETTER GI +0x82AD U+304F # HIRAGANA LETTER KU +0x82AE U+3050 # HIRAGANA LETTER GU +0x82AF U+3051 # HIRAGANA LETTER KE +0x82B0 U+3052 # HIRAGANA LETTER GE +0x82B1 U+3053 # HIRAGANA LETTER KO +0x82B2 U+3054 # HIRAGANA LETTER GO +0x82B3 U+3055 # HIRAGANA LETTER SA +0x82B4 U+3056 # HIRAGANA LETTER ZA +0x82B5 U+3057 # HIRAGANA LETTER SI +0x82B6 U+3058 # HIRAGANA LETTER ZI +0x82B7 U+3059 # HIRAGANA LETTER SU +0x82B8 U+305A # HIRAGANA LETTER ZU +0x82B9 U+305B # HIRAGANA LETTER SE +0x82BA U+305C # HIRAGANA LETTER ZE +0x82BB U+305D # HIRAGANA LETTER SO +0x82BC U+305E # HIRAGANA LETTER ZO +0x82BD U+305F # HIRAGANA LETTER TA +0x82BE U+3060 # HIRAGANA LETTER DA +0x82BF U+3061 # HIRAGANA LETTER TI +0x82C0 U+3062 # HIRAGANA LETTER DI +0x82C1 U+3063 # HIRAGANA LETTER SMALL TU +0x82C2 U+3064 # HIRAGANA LETTER TU +0x82C3 U+3065 # HIRAGANA LETTER DU +0x82C4 U+3066 # HIRAGANA LETTER TE +0x82C5 U+3067 # HIRAGANA LETTER DE +0x82C6 U+3068 # HIRAGANA LETTER TO +0x82C7 U+3069 # HIRAGANA LETTER DO +0x82C8 U+306A # HIRAGANA LETTER NA +0x82C9 U+306B # HIRAGANA LETTER NI +0x82CA U+306C # HIRAGANA LETTER NU +0x82CB U+306D # HIRAGANA LETTER NE +0x82CC U+306E # HIRAGANA LETTER NO +0x82CD U+306F # HIRAGANA LETTER HA +0x82CE U+3070 # HIRAGANA LETTER BA +0x82CF U+3071 # HIRAGANA LETTER PA +0x82D0 U+3072 # HIRAGANA LETTER HI +0x82D1 U+3073 # HIRAGANA LETTER BI +0x82D2 U+3074 # HIRAGANA LETTER PI +0x82D3 U+3075 # HIRAGANA LETTER HU +0x82D4 U+3076 # HIRAGANA LETTER BU +0x82D5 U+3077 # HIRAGANA LETTER PU +0x82D6 U+3078 # HIRAGANA LETTER HE +0x82D7 U+3079 # HIRAGANA LETTER BE +0x82D8 U+307A # HIRAGANA LETTER PE +0x82D9 U+307B # HIRAGANA LETTER HO +0x82DA U+307C # HIRAGANA LETTER BO +0x82DB U+307D # HIRAGANA LETTER PO +0x82DC U+307E # HIRAGANA LETTER MA +0x82DD U+307F # HIRAGANA LETTER MI +0x82DE U+3080 # HIRAGANA LETTER MU +0x82DF U+3081 # HIRAGANA LETTER ME +0x82E0 U+3082 # HIRAGANA LETTER MO +0x82E1 U+3083 # HIRAGANA LETTER SMALL YA +0x82E2 U+3084 # HIRAGANA LETTER YA +0x82E3 U+3085 # HIRAGANA LETTER SMALL YU +0x82E4 U+3086 # HIRAGANA LETTER YU +0x82E5 U+3087 # HIRAGANA LETTER SMALL YO +0x82E6 U+3088 # HIRAGANA LETTER YO +0x82E7 U+3089 # HIRAGANA LETTER RA +0x82E8 U+308A # HIRAGANA LETTER RI +0x82E9 U+308B # HIRAGANA LETTER RU +0x82EA U+308C # HIRAGANA LETTER RE +0x82EB U+308D # HIRAGANA LETTER RO +0x82EC U+308E # HIRAGANA LETTER SMALL WA +0x82ED U+308F # HIRAGANA LETTER WA +0x82EE U+3090 # HIRAGANA LETTER WI +0x82EF U+3091 # HIRAGANA LETTER WE +0x82F0 U+3092 # HIRAGANA LETTER WO +0x82F1 U+3093 # HIRAGANA LETTER N +0x82F2 U+3094 # HIRAGANA LETTER VU [2000] +0x82F3 U+3095 # HIRAGANA LETTER SMALL KA [2000] [Unicode3.2] +0x82F4 U+3096 # HIRAGANA LETTER SMALL KE [2000] [Unicode3.2] +0x82F5 U+304B+309A # [2000] +0x82F6 U+304D+309A # [2000] +0x82F7 U+304F+309A # [2000] +0x82F8 U+3051+309A # [2000] +0x82F9 U+3053+309A # [2000] +0x82FA # +0x82FB # +0x82FC # +0x8340 U+30A1 # KATAKANA LETTER SMALL A +0x8341 U+30A2 # KATAKANA LETTER A +0x8342 U+30A3 # KATAKANA LETTER SMALL I +0x8343 U+30A4 # KATAKANA LETTER I +0x8344 U+30A5 # KATAKANA LETTER SMALL U +0x8345 U+30A6 # KATAKANA LETTER U +0x8346 U+30A7 # KATAKANA LETTER SMALL E +0x8347 U+30A8 # KATAKANA LETTER E +0x8348 U+30A9 # KATAKANA LETTER SMALL O +0x8349 U+30AA # KATAKANA LETTER O +0x834A U+30AB # KATAKANA LETTER KA +0x834B U+30AC # KATAKANA LETTER GA +0x834C U+30AD # KATAKANA LETTER KI +0x834D U+30AE # KATAKANA LETTER GI +0x834E U+30AF # KATAKANA LETTER KU +0x834F U+30B0 # KATAKANA LETTER GU +0x8350 U+30B1 # KATAKANA LETTER KE +0x8351 U+30B2 # KATAKANA LETTER GE +0x8352 U+30B3 # KATAKANA LETTER KO +0x8353 U+30B4 # KATAKANA LETTER GO +0x8354 U+30B5 # KATAKANA LETTER SA +0x8355 U+30B6 # KATAKANA LETTER ZA +0x8356 U+30B7 # KATAKANA LETTER SI +0x8357 U+30B8 # KATAKANA LETTER ZI +0x8358 U+30B9 # KATAKANA LETTER SU +0x8359 U+30BA # KATAKANA LETTER ZU +0x835A U+30BB # KATAKANA LETTER SE +0x835B U+30BC # KATAKANA LETTER ZE +0x835C U+30BD # KATAKANA LETTER SO +0x835D U+30BE # KATAKANA LETTER ZO +0x835E U+30BF # KATAKANA LETTER TA +0x835F U+30C0 # KATAKANA LETTER DA +0x8360 U+30C1 # KATAKANA LETTER TI +0x8361 U+30C2 # KATAKANA LETTER DI +0x8362 U+30C3 # KATAKANA LETTER SMALL TU +0x8363 U+30C4 # KATAKANA LETTER TU +0x8364 U+30C5 # KATAKANA LETTER DU +0x8365 U+30C6 # KATAKANA LETTER TE +0x8366 U+30C7 # KATAKANA LETTER DE +0x8367 U+30C8 # KATAKANA LETTER TO +0x8368 U+30C9 # KATAKANA LETTER DO +0x8369 U+30CA # KATAKANA LETTER NA +0x836A U+30CB # KATAKANA LETTER NI +0x836B U+30CC # KATAKANA LETTER NU +0x836C U+30CD # KATAKANA LETTER NE +0x836D U+30CE # KATAKANA LETTER NO +0x836E U+30CF # KATAKANA LETTER HA +0x836F U+30D0 # KATAKANA LETTER BA +0x8370 U+30D1 # KATAKANA LETTER PA +0x8371 U+30D2 # KATAKANA LETTER HI +0x8372 U+30D3 # KATAKANA LETTER BI +0x8373 U+30D4 # KATAKANA LETTER PI +0x8374 U+30D5 # KATAKANA LETTER HU +0x8375 U+30D6 # KATAKANA LETTER BU +0x8376 U+30D7 # KATAKANA LETTER PU +0x8377 U+30D8 # KATAKANA LETTER HE +0x8378 U+30D9 # KATAKANA LETTER BE +0x8379 U+30DA # KATAKANA LETTER PE +0x837A U+30DB # KATAKANA LETTER HO +0x837B U+30DC # KATAKANA LETTER BO +0x837C U+30DD # KATAKANA LETTER PO +0x837D U+30DE # KATAKANA LETTER MA +0x837E U+30DF # KATAKANA LETTER MI +0x8380 U+30E0 # KATAKANA LETTER MU +0x8381 U+30E1 # KATAKANA LETTER ME +0x8382 U+30E2 # KATAKANA LETTER MO +0x8383 U+30E3 # KATAKANA LETTER SMALL YA +0x8384 U+30E4 # KATAKANA LETTER YA +0x8385 U+30E5 # KATAKANA LETTER SMALL YU +0x8386 U+30E6 # KATAKANA LETTER YU +0x8387 U+30E7 # KATAKANA LETTER SMALL YO +0x8388 U+30E8 # KATAKANA LETTER YO +0x8389 U+30E9 # KATAKANA LETTER RA +0x838A U+30EA # KATAKANA LETTER RI +0x838B U+30EB # KATAKANA LETTER RU +0x838C U+30EC # KATAKANA LETTER RE +0x838D U+30ED # KATAKANA LETTER RO +0x838E U+30EE # KATAKANA LETTER SMALL WA +0x838F U+30EF # KATAKANA LETTER WA +0x8390 U+30F0 # KATAKANA LETTER WI +0x8391 U+30F1 # KATAKANA LETTER WE +0x8392 U+30F2 # KATAKANA LETTER WO +0x8393 U+30F3 # KATAKANA LETTER N +0x8394 U+30F4 # KATAKANA LETTER VU +0x8395 U+30F5 # KATAKANA LETTER SMALL KA +0x8396 U+30F6 # KATAKANA LETTER SMALL KE +0x8397 U+30AB+309A # [2000] +0x8398 U+30AD+309A # [2000] +0x8399 U+30AF+309A # [2000] +0x839A U+30B1+309A # [2000] +0x839B U+30B3+309A # [2000] +0x839C U+30BB+309A # [2000] +0x839D U+30C4+309A # [2000] +0x839E U+30C8+309A # [2000] +0x839F U+0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 U+0392 # GREEK CAPITAL LETTER BETA +0x83A1 U+0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 U+0394 # GREEK CAPITAL LETTER DELTA +0x83A3 U+0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 U+0396 # GREEK CAPITAL LETTER ZETA +0x83A5 U+0397 # GREEK CAPITAL LETTER ETA +0x83A6 U+0398 # GREEK CAPITAL LETTER THETA +0x83A7 U+0399 # GREEK CAPITAL LETTER IOTA +0x83A8 U+039A # GREEK CAPITAL LETTER KAPPA +0x83A9 U+039B # GREEK CAPITAL LETTER LAMDA +0x83AA U+039C # GREEK CAPITAL LETTER MU +0x83AB U+039D # GREEK CAPITAL LETTER NU +0x83AC U+039E # GREEK CAPITAL LETTER XI +0x83AD U+039F # GREEK CAPITAL LETTER OMICRON +0x83AE U+03A0 # GREEK CAPITAL LETTER PI +0x83AF U+03A1 # GREEK CAPITAL LETTER RHO +0x83B0 U+03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 U+03A4 # GREEK CAPITAL LETTER TAU +0x83B2 U+03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 U+03A6 # GREEK CAPITAL LETTER PHI +0x83B4 U+03A7 # GREEK CAPITAL LETTER CHI +0x83B5 U+03A8 # GREEK CAPITAL LETTER PSI +0x83B6 U+03A9 # GREEK CAPITAL LETTER OMEGA +0x83B7 U+2664 # WHITE SPADE SUIT [2000] +0x83B8 U+2660 # BLACK SPADE SUIT [2000] +0x83B9 U+2662 # WHITE DIAMOND SUIT [2000] +0x83BA U+2666 # BLACK DIAMOND SUIT [2000] +0x83BB U+2661 # WHITE HEART SUIT [2000] +0x83BC U+2665 # BLACK HEART SUIT [2000] +0x83BD U+2667 # WHITE CLUB SUIT [2000] +0x83BE U+2663 # BLACK CLUB SUIT [2000] +0x83BF U+03B1 # GREEK SMALL LETTER ALPHA +0x83C0 U+03B2 # GREEK SMALL LETTER BETA +0x83C1 U+03B3 # GREEK SMALL LETTER GAMMA +0x83C2 U+03B4 # GREEK SMALL LETTER DELTA +0x83C3 U+03B5 # GREEK SMALL LETTER EPSILON +0x83C4 U+03B6 # GREEK SMALL LETTER ZETA +0x83C5 U+03B7 # GREEK SMALL LETTER ETA +0x83C6 U+03B8 # GREEK SMALL LETTER THETA +0x83C7 U+03B9 # GREEK SMALL LETTER IOTA +0x83C8 U+03BA # GREEK SMALL LETTER KAPPA +0x83C9 U+03BB # GREEK SMALL LETTER LAMDA +0x83CA U+03BC # GREEK SMALL LETTER MU +0x83CB U+03BD # GREEK SMALL LETTER NU +0x83CC U+03BE # GREEK SMALL LETTER XI +0x83CD U+03BF # GREEK SMALL LETTER OMICRON +0x83CE U+03C0 # GREEK SMALL LETTER PI +0x83CF U+03C1 # GREEK SMALL LETTER RHO +0x83D0 U+03C3 # GREEK SMALL LETTER SIGMA +0x83D1 U+03C4 # GREEK SMALL LETTER TAU +0x83D2 U+03C5 # GREEK SMALL LETTER UPSILON +0x83D3 U+03C6 # GREEK SMALL LETTER PHI +0x83D4 U+03C7 # GREEK SMALL LETTER CHI +0x83D5 U+03C8 # GREEK SMALL LETTER PSI +0x83D6 U+03C9 # GREEK SMALL LETTER OMEGA +0x83D7 U+03C2 # GREEK SMALL LETTER FINAL SIGMA [2000] +0x83D8 U+24F5 # DOUBLE CIRCLED DIGIT ONE [2000] [Unicode3.2] +0x83D9 U+24F6 # DOUBLE CIRCLED DIGIT TWO [2000] [Unicode3.2] +0x83DA U+24F7 # DOUBLE CIRCLED DIGIT THREE [2000] [Unicode3.2] +0x83DB U+24F8 # DOUBLE CIRCLED DIGIT FOUR [2000] [Unicode3.2] +0x83DC U+24F9 # DOUBLE CIRCLED DIGIT FIVE [2000] [Unicode3.2] +0x83DD U+24FA # DOUBLE CIRCLED DIGIT SIX [2000] [Unicode3.2] +0x83DE U+24FB # DOUBLE CIRCLED DIGIT SEVEN [2000] [Unicode3.2] +0x83DF U+24FC # DOUBLE CIRCLED DIGIT EIGHT [2000] [Unicode3.2] +0x83E0 U+24FD # DOUBLE CIRCLED DIGIT NINE [2000] [Unicode3.2] +0x83E1 U+24FE # DOUBLE CIRCLED NUMBER TEN [2000] [Unicode3.2] +0x83E2 U+2616 # WHITE SHOGI PIECE [2000] [Unicode3.2] +0x83E3 U+2617 # BLACK SHOGI PIECE [2000] [Unicode3.2] +0x83E4 U+3020 # POSTAL MARK FACE [2000] +0x83E5 U+260E # BLACK TELEPHONE [2000] +0x83E6 U+2600 # BLACK SUN WITH RAYS [2000] +0x83E7 U+2601 # CLOUD [2000] +0x83E8 U+2602 # UMBRELLA [2000] +0x83E9 U+2603 # SNOWMAN [2000] +0x83EA U+2668 # HOT SPRINGS [2000] +0x83EB U+25B1 # WHITE PARALLELOGRAM [2000] +0x83EC U+31F0 # KATAKANA LETTER SMALL KU [2000] [Unicode3.2] +0x83ED U+31F1 # KATAKANA LETTER SMALL SI [2000] [Unicode3.2] +0x83EE U+31F2 # KATAKANA LETTER SMALL SU [2000] [Unicode3.2] +0x83EF U+31F3 # KATAKANA LETTER SMALL TO [2000] [Unicode3.2] +0x83F0 U+31F4 # KATAKANA LETTER SMALL NU [2000] [Unicode3.2] +0x83F1 U+31F5 # KATAKANA LETTER SMALL HA [2000] [Unicode3.2] +0x83F2 U+31F6 # KATAKANA LETTER SMALL HI [2000] [Unicode3.2] +0x83F3 U+31F7 # KATAKANA LETTER SMALL HU [2000] [Unicode3.2] +0x83F4 U+31F8 # KATAKANA LETTER SMALL HE [2000] [Unicode3.2] +0x83F5 U+31F9 # KATAKANA LETTER SMALL HO [2000] [Unicode3.2] +0x83F6 U+31F7+309A # [2000] +0x83F7 U+31FA # KATAKANA LETTER SMALL MU [2000] [Unicode3.2] +0x83F8 U+31FB # KATAKANA LETTER SMALL RA [2000] [Unicode3.2] +0x83F9 U+31FC # KATAKANA LETTER SMALL RI [2000] [Unicode3.2] +0x83FA U+31FD # KATAKANA LETTER SMALL RU [2000] [Unicode3.2] +0x83FB U+31FE # KATAKANA LETTER SMALL RE [2000] [Unicode3.2] +0x83FC U+31FF # KATAKANA LETTER SMALL RO [2000] [Unicode3.2] +0x8440 U+0410 # CYRILLIC CAPITAL LETTER A +0x8441 U+0411 # CYRILLIC CAPITAL LETTER BE +0x8442 U+0412 # CYRILLIC CAPITAL LETTER VE +0x8443 U+0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 U+0414 # CYRILLIC CAPITAL LETTER DE +0x8445 U+0415 # CYRILLIC CAPITAL LETTER IE +0x8446 U+0401 # CYRILLIC CAPITAL LETTER IO +0x8447 U+0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 U+0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 U+0418 # CYRILLIC CAPITAL LETTER I +0x844A U+0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B U+041A # CYRILLIC CAPITAL LETTER KA +0x844C U+041B # CYRILLIC CAPITAL LETTER EL +0x844D U+041C # CYRILLIC CAPITAL LETTER EM +0x844E U+041D # CYRILLIC CAPITAL LETTER EN +0x844F U+041E # CYRILLIC CAPITAL LETTER O +0x8450 U+041F # CYRILLIC CAPITAL LETTER PE +0x8451 U+0420 # CYRILLIC CAPITAL LETTER ER +0x8452 U+0421 # CYRILLIC CAPITAL LETTER ES +0x8453 U+0422 # CYRILLIC CAPITAL LETTER TE +0x8454 U+0423 # CYRILLIC CAPITAL LETTER U +0x8455 U+0424 # CYRILLIC CAPITAL LETTER EF +0x8456 U+0425 # CYRILLIC CAPITAL LETTER HA +0x8457 U+0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 U+0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 U+0428 # CYRILLIC CAPITAL LETTER SHA +0x845A U+0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B U+042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C U+042B # CYRILLIC CAPITAL LETTER YERU +0x845D U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E U+042D # CYRILLIC CAPITAL LETTER E +0x845F U+042E # CYRILLIC CAPITAL LETTER YU +0x8460 U+042F # CYRILLIC CAPITAL LETTER YA +0x8461 U+23BE # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT [2000] [Unicode3.2] +0x8462 U+23BF # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT [2000] [Unicode3.2] +0x8463 U+23C0 # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE [2000] [Unicode3.2] +0x8464 U+23C1 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE [2000] [Unicode3.2] +0x8465 U+23C2 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE [2000] [Unicode3.2] +0x8466 U+23C3 # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE [2000] [Unicode3.2] +0x8467 U+23C4 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE [2000] [Unicode3.2] +0x8468 U+23C5 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE [2000] [Unicode3.2] +0x8469 U+23C6 # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE [2000] [Unicode3.2] +0x846A U+23C7 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE [2000] [Unicode3.2] +0x846B U+23C8 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE [2000] [Unicode3.2] +0x846C U+23C9 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL [2000] [Unicode3.2] +0x846D U+23CA # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL [2000] [Unicode3.2] +0x846E U+23CB # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT [2000] [Unicode3.2] +0x846F U+23CC # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT [2000] [Unicode3.2] +0x8470 U+0430 # CYRILLIC SMALL LETTER A +0x8471 U+0431 # CYRILLIC SMALL LETTER BE +0x8472 U+0432 # CYRILLIC SMALL LETTER VE +0x8473 U+0433 # CYRILLIC SMALL LETTER GHE +0x8474 U+0434 # CYRILLIC SMALL LETTER DE +0x8475 U+0435 # CYRILLIC SMALL LETTER IE +0x8476 U+0451 # CYRILLIC SMALL LETTER IO +0x8477 U+0436 # CYRILLIC SMALL LETTER ZHE +0x8478 U+0437 # CYRILLIC SMALL LETTER ZE +0x8479 U+0438 # CYRILLIC SMALL LETTER I +0x847A U+0439 # CYRILLIC SMALL LETTER SHORT I +0x847B U+043A # CYRILLIC SMALL LETTER KA +0x847C U+043B # CYRILLIC SMALL LETTER EL +0x847D U+043C # CYRILLIC SMALL LETTER EM +0x847E U+043D # CYRILLIC SMALL LETTER EN +0x8480 U+043E # CYRILLIC SMALL LETTER O +0x8481 U+043F # CYRILLIC SMALL LETTER PE +0x8482 U+0440 # CYRILLIC SMALL LETTER ER +0x8483 U+0441 # CYRILLIC SMALL LETTER ES +0x8484 U+0442 # CYRILLIC SMALL LETTER TE +0x8485 U+0443 # CYRILLIC SMALL LETTER U +0x8486 U+0444 # CYRILLIC SMALL LETTER EF +0x8487 U+0445 # CYRILLIC SMALL LETTER HA +0x8488 U+0446 # CYRILLIC SMALL LETTER TSE +0x8489 U+0447 # CYRILLIC SMALL LETTER CHE +0x848A U+0448 # CYRILLIC SMALL LETTER SHA +0x848B U+0449 # CYRILLIC SMALL LETTER SHCHA +0x848C U+044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D U+044B # CYRILLIC SMALL LETTER YERU +0x848E U+044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F U+044D # CYRILLIC SMALL LETTER E +0x8490 U+044E # CYRILLIC SMALL LETTER YU +0x8491 U+044F # CYRILLIC SMALL LETTER YA +0x8492 U+30F7 # KATAKANA LETTER VA [2000] +0x8493 U+30F8 # KATAKANA LETTER VI [2000] +0x8494 U+30F9 # KATAKANA LETTER VE [2000] +0x8495 U+30FA # KATAKANA LETTER VO [2000] +0x8496 U+22DA # LESS-THAN EQUAL TO OR GREATER-THAN [2000] +0x8497 U+22DB # GREATER-THAN EQUAL TO OR LESS-THAN [2000] +0x8498 U+2153 # VULGAR FRACTION ONE THIRD [2000] +0x8499 U+2154 # VULGAR FRACTION TWO THIRDS [2000] +0x849A U+2155 # VULGAR FRACTION ONE FIFTH [2000] +0x849B U+2713 # CHECK MARK [2000] +0x849C U+2318 # PLACE OF INTEREST SIGN [2000] +0x849D U+2423 # OPEN BOX [2000] +0x849E U+23CE # RETURN SYMBOL [2000] [Unicode3.2] +0x849F U+2500 # BOX DRAWINGS LIGHT HORIZONTAL [1983] +0x84A0 U+2502 # BOX DRAWINGS LIGHT VERTICAL [1983] +0x84A1 U+250C # BOX DRAWINGS LIGHT DOWN AND RIGHT [1983] +0x84A2 U+2510 # BOX DRAWINGS LIGHT DOWN AND LEFT [1983] +0x84A3 U+2518 # BOX DRAWINGS LIGHT UP AND LEFT [1983] +0x84A4 U+2514 # BOX DRAWINGS LIGHT UP AND RIGHT [1983] +0x84A5 U+251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT [1983] +0x84A6 U+252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL [1983] +0x84A7 U+2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT [1983] +0x84A8 U+2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL [1983] +0x84A9 U+253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL [1983] +0x84AA U+2501 # BOX DRAWINGS HEAVY HORIZONTAL [1983] +0x84AB U+2503 # BOX DRAWINGS HEAVY VERTICAL [1983] +0x84AC U+250F # BOX DRAWINGS HEAVY DOWN AND RIGHT [1983] +0x84AD U+2513 # BOX DRAWINGS HEAVY DOWN AND LEFT [1983] +0x84AE U+251B # BOX DRAWINGS HEAVY UP AND LEFT [1983] +0x84AF U+2517 # BOX DRAWINGS HEAVY UP AND RIGHT [1983] +0x84B0 U+2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT [1983] +0x84B1 U+2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL [1983] +0x84B2 U+252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT [1983] +0x84B3 U+253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL [1983] +0x84B4 U+254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL [1983] +0x84B5 U+2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT [1983] +0x84B6 U+252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY [1983] +0x84B7 U+2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT [1983] +0x84B8 U+2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY [1983] +0x84B9 U+253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY [1983] +0x84BA U+251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY [1983] +0x84BB U+2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT [1983] +0x84BC U+2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY [1983] +0x84BD U+2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT [1983] +0x84BE U+2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT [1983] +0x84BF U+3251 # CIRCLED NUMBER TWENTY ONE [2000] [Unicode3.2] +0x84C0 U+3252 # CIRCLED NUMBER TWENTY TWO [2000] [Unicode3.2] +0x84C1 U+3253 # CIRCLED NUMBER TWENTY THREE [2000] [Unicode3.2] +0x84C2 U+3254 # CIRCLED NUMBER TWENTY FOUR [2000] [Unicode3.2] +0x84C3 U+3255 # CIRCLED NUMBER TWENTY FIVE [2000] [Unicode3.2] +0x84C4 U+3256 # CIRCLED NUMBER TWENTY SIX [2000] [Unicode3.2] +0x84C5 U+3257 # CIRCLED NUMBER TWENTY SEVEN [2000] [Unicode3.2] +0x84C6 U+3258 # CIRCLED NUMBER TWENTY EIGHT [2000] [Unicode3.2] +0x84C7 U+3259 # CIRCLED NUMBER TWENTY NINE [2000] [Unicode3.2] +0x84C8 U+325A # CIRCLED NUMBER THIRTY [2000] [Unicode3.2] +0x84C9 U+325B # CIRCLED NUMBER THIRTY ONE [2000] [Unicode3.2] +0x84CA U+325C # CIRCLED NUMBER THIRTY TWO [2000] [Unicode3.2] +0x84CB U+325D # CIRCLED NUMBER THIRTY THREE [2000] [Unicode3.2] +0x84CC U+325E # CIRCLED NUMBER THIRTY FOUR [2000] [Unicode3.2] +0x84CD U+325F # CIRCLED NUMBER THIRTY FIVE [2000] [Unicode3.2] +0x84CE U+32B1 # CIRCLED NUMBER THIRTY SIX [2000] [Unicode3.2] +0x84CF U+32B2 # CIRCLED NUMBER THIRTY SEVEN [2000] [Unicode3.2] +0x84D0 U+32B3 # CIRCLED NUMBER THIRTY EIGHT [2000] [Unicode3.2] +0x84D1 U+32B4 # CIRCLED NUMBER THIRTY NINE [2000] [Unicode3.2] +0x84D2 U+32B5 # CIRCLED NUMBER FORTY [2000] [Unicode3.2] +0x84D3 U+32B6 # CIRCLED NUMBER FORTY ONE [2000] [Unicode3.2] +0x84D4 U+32B7 # CIRCLED NUMBER FORTY TWO [2000] [Unicode3.2] +0x84D5 U+32B8 # CIRCLED NUMBER FORTY THREE [2000] [Unicode3.2] +0x84D6 U+32B9 # CIRCLED NUMBER FORTY FOUR [2000] [Unicode3.2] +0x84D7 U+32BA # CIRCLED NUMBER FORTY FIVE [2000] [Unicode3.2] +0x84D8 U+32BB # CIRCLED NUMBER FORTY SIX [2000] [Unicode3.2] +0x84D9 U+32BC # CIRCLED NUMBER FORTY SEVEN [2000] [Unicode3.2] +0x84DA U+32BD # CIRCLED NUMBER FORTY EIGHT [2000] [Unicode3.2] +0x84DB U+32BE # CIRCLED NUMBER FORTY NINE [2000] [Unicode3.2] +0x84DC U+32BF # CIRCLED NUMBER FIFTY [2000] [Unicode3.2] +0x84DD # +0x84DE # +0x84DF # +0x84E0 # +0x84E1 # +0x84E2 # +0x84E3 # +0x84E4 # +0x84E5 U+25D0 # CIRCLE WITH LEFT HALF BLACK [2000] +0x84E6 U+25D1 # CIRCLE WITH RIGHT HALF BLACK [2000] +0x84E7 U+25D2 # CIRCLE WITH LOWER HALF BLACK [2000] +0x84E8 U+25D3 # CIRCLE WITH UPPER HALF BLACK [2000] +0x84E9 U+203C # DOUBLE EXCLAMATION MARK [2000] +0x84EA U+2047 # DOUBLE QUESTION MARK [2000] [Unicode3.2] +0x84EB U+2048 # QUESTION EXCLAMATION MARK [2000] +0x84EC U+2049 # EXCLAMATION QUESTION MARK [2000] +0x84ED U+01CD # LATIN CAPITAL LETTER A WITH CARON [2000] +0x84EE U+01CE # LATIN SMALL LETTER A WITH CARON [2000] +0x84EF U+01D0 # LATIN SMALL LETTER I WITH CARON [2000] +0x84F0 U+1E3E # LATIN CAPITAL LETTER M WITH ACUTE [2000] +0x84F1 U+1E3F # LATIN SMALL LETTER M WITH ACUTE [2000] +0x84F2 U+01F8 # LATIN CAPITAL LETTER N WITH GRAVE [2000] +0x84F3 U+01F9 # LATIN SMALL LETTER N WITH GRAVE [2000] +0x84F4 U+01D1 # LATIN CAPITAL LETTER O WITH CARON [2000] +0x84F5 U+01D2 # LATIN SMALL LETTER O WITH CARON [2000] +0x84F6 U+01D4 # LATIN SMALL LETTER U WITH CARON [2000] +0x84F7 U+01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON [2000] +0x84F8 U+01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE [2000] +0x84F9 U+01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON [2000] +0x84FA U+01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE [2000] +0x84FB # +0x84FC # +0x8540 U+20AC # EURO SIGN [2000] +0x8541 U+00A0 # NO-BREAK SPACE [2000] +0x8542 U+00A1 # INVERTED EXCLAMATION MARK [2000] +0x8543 U+00A4 # CURRENCY SIGN [2000] +0x8544 U+00A6 # BROKEN BAR [2000] +0x8545 U+00A9 # COPYRIGHT SIGN [2000] +0x8546 U+00AA # FEMININE ORDINAL INDICATOR [2000] +0x8547 U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK [2000] +0x8548 U+00AD # SOFT HYPHEN [2000] +0x8549 U+00AE # REGISTERED SIGN [2000] +0x854A U+00AF # MACRON [2000] +0x854B U+00B2 # SUPERSCRIPT TWO [2000] +0x854C U+00B3 # SUPERSCRIPT THREE [2000] +0x854D U+00B7 # MIDDLE DOT [2000] +0x854E U+00B8 # CEDILLA [2000] +0x854F U+00B9 # SUPERSCRIPT ONE [2000] +0x8550 U+00BA # MASCULINE ORDINAL INDICATOR [2000] +0x8551 U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK [2000] +0x8552 U+00BC # VULGAR FRACTION ONE QUARTER [2000] +0x8553 U+00BD # VULGAR FRACTION ONE HALF [2000] +0x8554 U+00BE # VULGAR FRACTION THREE QUARTERS [2000] +0x8555 U+00BF # INVERTED QUESTION MARK [2000] +0x8556 U+00C0 # LATIN CAPITAL LETTER A WITH GRAVE [2000] +0x8557 U+00C1 # LATIN CAPITAL LETTER A WITH ACUTE [2000] +0x8558 U+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX [2000] +0x8559 U+00C3 # LATIN CAPITAL LETTER A WITH TILDE [2000] +0x855A U+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS [2000] +0x855B U+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE [2000] +0x855C U+00C6 # LATIN CAPITAL LETTER AE [2000] +0x855D U+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA [2000] +0x855E U+00C8 # LATIN CAPITAL LETTER E WITH GRAVE [2000] +0x855F U+00C9 # LATIN CAPITAL LETTER E WITH ACUTE [2000] +0x8560 U+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX [2000] +0x8561 U+00CB # LATIN CAPITAL LETTER E WITH DIAERESIS [2000] +0x8562 U+00CC # LATIN CAPITAL LETTER I WITH GRAVE [2000] +0x8563 U+00CD # LATIN CAPITAL LETTER I WITH ACUTE [2000] +0x8564 U+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX [2000] +0x8565 U+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS [2000] +0x8566 U+00D0 # LATIN CAPITAL LETTER ETH [2000] +0x8567 U+00D1 # LATIN CAPITAL LETTER N WITH TILDE [2000] +0x8568 U+00D2 # LATIN CAPITAL LETTER O WITH GRAVE [2000] +0x8569 U+00D3 # LATIN CAPITAL LETTER O WITH ACUTE [2000] +0x856A U+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX [2000] +0x856B U+00D5 # LATIN CAPITAL LETTER O WITH TILDE [2000] +0x856C U+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS [2000] +0x856D U+00D8 # LATIN CAPITAL LETTER O WITH STROKE [2000] +0x856E U+00D9 # LATIN CAPITAL LETTER U WITH GRAVE [2000] +0x856F U+00DA # LATIN CAPITAL LETTER U WITH ACUTE [2000] +0x8570 U+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX [2000] +0x8571 U+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS [2000] +0x8572 U+00DD # LATIN CAPITAL LETTER Y WITH ACUTE [2000] +0x8573 U+00DE # LATIN CAPITAL LETTER THORN [2000] +0x8574 U+00DF # LATIN SMALL LETTER SHARP S [2000] +0x8575 U+00E0 # LATIN SMALL LETTER A WITH GRAVE [2000] +0x8576 U+00E1 # LATIN SMALL LETTER A WITH ACUTE [2000] +0x8577 U+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX [2000] +0x8578 U+00E3 # LATIN SMALL LETTER A WITH TILDE [2000] +0x8579 U+00E4 # LATIN SMALL LETTER A WITH DIAERESIS [2000] +0x857A U+00E5 # LATIN SMALL LETTER A WITH RING ABOVE [2000] +0x857B U+00E6 # LATIN SMALL LETTER AE [2000] +0x857C U+00E7 # LATIN SMALL LETTER C WITH CEDILLA [2000] +0x857D U+00E8 # LATIN SMALL LETTER E WITH GRAVE [2000] +0x857E U+00E9 # LATIN SMALL LETTER E WITH ACUTE [2000] +0x8580 U+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX [2000] +0x8581 U+00EB # LATIN SMALL LETTER E WITH DIAERESIS [2000] +0x8582 U+00EC # LATIN SMALL LETTER I WITH GRAVE [2000] +0x8583 U+00ED # LATIN SMALL LETTER I WITH ACUTE [2000] +0x8584 U+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX [2000] +0x8585 U+00EF # LATIN SMALL LETTER I WITH DIAERESIS [2000] +0x8586 U+00F0 # LATIN SMALL LETTER ETH [2000] +0x8587 U+00F1 # LATIN SMALL LETTER N WITH TILDE [2000] +0x8588 U+00F2 # LATIN SMALL LETTER O WITH GRAVE [2000] +0x8589 U+00F3 # LATIN SMALL LETTER O WITH ACUTE [2000] +0x858A U+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX [2000] +0x858B U+00F5 # LATIN SMALL LETTER O WITH TILDE [2000] +0x858C U+00F6 # LATIN SMALL LETTER O WITH DIAERESIS [2000] +0x858D U+00F8 # LATIN SMALL LETTER O WITH STROKE [2000] +0x858E U+00F9 # LATIN SMALL LETTER U WITH GRAVE [2000] +0x858F U+00FA # LATIN SMALL LETTER U WITH ACUTE [2000] +0x8590 U+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX [2000] +0x8591 U+00FC # LATIN SMALL LETTER U WITH DIAERESIS [2000] +0x8592 U+00FD # LATIN SMALL LETTER Y WITH ACUTE [2000] +0x8593 U+00FE # LATIN SMALL LETTER THORN [2000] +0x8594 U+00FF # LATIN SMALL LETTER Y WITH DIAERESIS [2000] +0x8595 U+0100 # LATIN CAPITAL LETTER A WITH MACRON [2000] +0x8596 U+012A # LATIN CAPITAL LETTER I WITH MACRON [2000] +0x8597 U+016A # LATIN CAPITAL LETTER U WITH MACRON [2000] +0x8598 U+0112 # LATIN CAPITAL LETTER E WITH MACRON [2000] +0x8599 U+014C # LATIN CAPITAL LETTER O WITH MACRON [2000] +0x859A U+0101 # LATIN SMALL LETTER A WITH MACRON [2000] +0x859B U+012B # LATIN SMALL LETTER I WITH MACRON [2000] +0x859C U+016B # LATIN SMALL LETTER U WITH MACRON [2000] +0x859D U+0113 # LATIN SMALL LETTER E WITH MACRON [2000] +0x859E U+014D # LATIN SMALL LETTER O WITH MACRON [2000] +0x859F U+0104 # LATIN CAPITAL LETTER A WITH OGONEK [2000] +0x85A0 U+02D8 # BREVE [2000] +0x85A1 U+0141 # LATIN CAPITAL LETTER L WITH STROKE [2000] +0x85A2 U+013D # LATIN CAPITAL LETTER L WITH CARON [2000] +0x85A3 U+015A # LATIN CAPITAL LETTER S WITH ACUTE [2000] +0x85A4 U+0160 # LATIN CAPITAL LETTER S WITH CARON [2000] +0x85A5 U+015E # LATIN CAPITAL LETTER S WITH CEDILLA [2000] +0x85A6 U+0164 # LATIN CAPITAL LETTER T WITH CARON [2000] +0x85A7 U+0179 # LATIN CAPITAL LETTER Z WITH ACUTE [2000] +0x85A8 U+017D # LATIN CAPITAL LETTER Z WITH CARON [2000] +0x85A9 U+017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE [2000] +0x85AA U+0105 # LATIN SMALL LETTER A WITH OGONEK [2000] +0x85AB U+02DB # OGONEK [2000] +0x85AC U+0142 # LATIN SMALL LETTER L WITH STROKE [2000] +0x85AD U+013E # LATIN SMALL LETTER L WITH CARON [2000] +0x85AE U+015B # LATIN SMALL LETTER S WITH ACUTE [2000] +0x85AF U+02C7 # CARON [2000] +0x85B0 U+0161 # LATIN SMALL LETTER S WITH CARON [2000] +0x85B1 U+015F # LATIN SMALL LETTER S WITH CEDILLA [2000] +0x85B2 U+0165 # LATIN SMALL LETTER T WITH CARON [2000] +0x85B3 U+017A # LATIN SMALL LETTER Z WITH ACUTE [2000] +0x85B4 U+02DD # DOUBLE ACUTE ACCENT [2000] +0x85B5 U+017E # LATIN SMALL LETTER Z WITH CARON [2000] +0x85B6 U+017C # LATIN SMALL LETTER Z WITH DOT ABOVE [2000] +0x85B7 U+0154 # LATIN CAPITAL LETTER R WITH ACUTE [2000] +0x85B8 U+0102 # LATIN CAPITAL LETTER A WITH BREVE [2000] +0x85B9 U+0139 # LATIN CAPITAL LETTER L WITH ACUTE [2000] +0x85BA U+0106 # LATIN CAPITAL LETTER C WITH ACUTE [2000] +0x85BB U+010C # LATIN CAPITAL LETTER C WITH CARON [2000] +0x85BC U+0118 # LATIN CAPITAL LETTER E WITH OGONEK [2000] +0x85BD U+011A # LATIN CAPITAL LETTER E WITH CARON [2000] +0x85BE U+010E # LATIN CAPITAL LETTER D WITH CARON [2000] +0x85BF U+0143 # LATIN CAPITAL LETTER N WITH ACUTE [2000] +0x85C0 U+0147 # LATIN CAPITAL LETTER N WITH CARON [2000] +0x85C1 U+0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE [2000] +0x85C2 U+0158 # LATIN CAPITAL LETTER R WITH CARON [2000] +0x85C3 U+016E # LATIN CAPITAL LETTER U WITH RING ABOVE [2000] +0x85C4 U+0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE [2000] +0x85C5 U+0162 # LATIN CAPITAL LETTER T WITH CEDILLA [2000] +0x85C6 U+0155 # LATIN SMALL LETTER R WITH ACUTE [2000] +0x85C7 U+0103 # LATIN SMALL LETTER A WITH BREVE [2000] +0x85C8 U+013A # LATIN SMALL LETTER L WITH ACUTE [2000] +0x85C9 U+0107 # LATIN SMALL LETTER C WITH ACUTE [2000] +0x85CA U+010D # LATIN SMALL LETTER C WITH CARON [2000] +0x85CB U+0119 # LATIN SMALL LETTER E WITH OGONEK [2000] +0x85CC U+011B # LATIN SMALL LETTER E WITH CARON [2000] +0x85CD U+010F # LATIN SMALL LETTER D WITH CARON [2000] +0x85CE U+0111 # LATIN SMALL LETTER D WITH STROKE [2000] +0x85CF U+0144 # LATIN SMALL LETTER N WITH ACUTE [2000] +0x85D0 U+0148 # LATIN SMALL LETTER N WITH CARON [2000] +0x85D1 U+0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE [2000] +0x85D2 U+0159 # LATIN SMALL LETTER R WITH CARON [2000] +0x85D3 U+016F # LATIN SMALL LETTER U WITH RING ABOVE [2000] +0x85D4 U+0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE [2000] +0x85D5 U+0163 # LATIN SMALL LETTER T WITH CEDILLA [2000] +0x85D6 U+02D9 # DOT ABOVE [2000] +0x85D7 U+0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX [2000] +0x85D8 U+011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX [2000] +0x85D9 U+0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX [2000] +0x85DA U+0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX [2000] +0x85DB U+015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX [2000] +0x85DC U+016C # LATIN CAPITAL LETTER U WITH BREVE [2000] +0x85DD U+0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX [2000] +0x85DE U+011D # LATIN SMALL LETTER G WITH CIRCUMFLEX [2000] +0x85DF U+0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX [2000] +0x85E0 U+0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX [2000] +0x85E1 U+015D # LATIN SMALL LETTER S WITH CIRCUMFLEX [2000] +0x85E2 U+016D # LATIN SMALL LETTER U WITH BREVE [2000] +0x85E3 U+0271 # LATIN SMALL LETTER M WITH HOOK [2000] +0x85E4 U+028B # LATIN SMALL LETTER V WITH HOOK [2000] +0x85E5 U+027E # LATIN SMALL LETTER R WITH FISHHOOK [2000] +0x85E6 U+0283 # LATIN SMALL LETTER ESH [2000] +0x85E7 U+0292 # LATIN SMALL LETTER EZH [2000] +0x85E8 U+026C # LATIN SMALL LETTER L WITH BELT [2000] +0x85E9 U+026E # LATIN SMALL LETTER LEZH [2000] +0x85EA U+0279 # LATIN SMALL LETTER TURNED R [2000] +0x85EB U+0288 # LATIN SMALL LETTER T WITH RETROFLEX HOOK [2000] +0x85EC U+0256 # LATIN SMALL LETTER D WITH TAIL [2000] +0x85ED U+0273 # LATIN SMALL LETTER N WITH RETROFLEX HOOK [2000] +0x85EE U+027D # LATIN SMALL LETTER R WITH TAIL [2000] +0x85EF U+0282 # LATIN SMALL LETTER S WITH HOOK [2000] +0x85F0 U+0290 # LATIN SMALL LETTER Z WITH RETROFLEX HOOK [2000] +0x85F1 U+027B # LATIN SMALL LETTER TURNED R WITH HOOK [2000] +0x85F2 U+026D # LATIN SMALL LETTER L WITH RETROFLEX HOOK [2000] +0x85F3 U+025F # LATIN SMALL LETTER DOTLESS J WITH STROKE [2000] +0x85F4 U+0272 # LATIN SMALL LETTER N WITH LEFT HOOK [2000] +0x85F5 U+029D # LATIN SMALL LETTER J WITH CROSSED-TAIL [2000] +0x85F6 U+028E # LATIN SMALL LETTER TURNED Y [2000] +0x85F7 U+0261 # LATIN SMALL LETTER SCRIPT G [2000] +0x85F8 U+014B # LATIN SMALL LETTER ENG [2000] +0x85F9 U+0270 # LATIN SMALL LETTER TURNED M WITH LONG LEG [2000] +0x85FA U+0281 # LATIN LETTER SMALL CAPITAL INVERTED R [2000] +0x85FB U+0127 # LATIN SMALL LETTER H WITH STROKE [2000] +0x85FC U+0295 # LATIN LETTER PHARYNGEAL VOICED FRICATIVE [2000] +0x8640 U+0294 # LATIN LETTER GLOTTAL STOP [2000] +0x8641 U+0266 # LATIN SMALL LETTER H WITH HOOK [2000] +0x8642 U+0298 # LATIN LETTER BILABIAL CLICK [2000] +0x8643 U+01C2 # LATIN LETTER ALVEOLAR CLICK [2000] +0x8644 U+0253 # LATIN SMALL LETTER B WITH HOOK [2000] +0x8645 U+0257 # LATIN SMALL LETTER D WITH HOOK [2000] +0x8646 U+0284 # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK [2000] +0x8647 U+0260 # LATIN SMALL LETTER G WITH HOOK [2000] +0x8648 U+0193 # LATIN CAPITAL LETTER G WITH HOOK [2000] +0x8649 U+0153 # LATIN SMALL LIGATURE OE [2000] +0x864A U+0152 # LATIN CAPITAL LIGATURE OE [2000] +0x864B U+0268 # LATIN SMALL LETTER I WITH STROKE [2000] +0x864C U+0289 # LATIN SMALL LETTER U BAR [2000] +0x864D U+0258 # LATIN SMALL LETTER REVERSED E [2000] +0x864E U+0275 # LATIN SMALL LETTER BARRED O [2000] +0x864F U+0259 # LATIN SMALL LETTER SCHWA [2000] +0x8650 U+025C # LATIN SMALL LETTER REVERSED OPEN E [2000] +0x8651 U+025E # LATIN SMALL LETTER CLOSED REVERSED OPEN E [2000] +0x8652 U+0250 # LATIN SMALL LETTER TURNED A [2000] +0x8653 U+026F # LATIN SMALL LETTER TURNED M [2000] +0x8654 U+028A # LATIN SMALL LETTER UPSILON [2000] +0x8655 U+0264 # LATIN SMALL LETTER RAMS HORN [2000] +0x8656 U+028C # LATIN SMALL LETTER TURNED V [2000] +0x8657 U+0254 # LATIN SMALL LETTER OPEN O [2000] +0x8658 U+0251 # LATIN SMALL LETTER ALPHA [2000] +0x8659 U+0252 # LATIN SMALL LETTER TURNED ALPHA [2000] +0x865A U+028D # LATIN SMALL LETTER TURNED W [2000] +0x865B U+0265 # LATIN SMALL LETTER TURNED H [2000] +0x865C U+02A2 # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE [2000] +0x865D U+02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE [2000] +0x865E U+0255 # LATIN SMALL LETTER C WITH CURL [2000] +0x865F U+0291 # LATIN SMALL LETTER Z WITH CURL [2000] +0x8660 U+027A # LATIN SMALL LETTER TURNED R WITH LONG LEG [2000] +0x8661 U+0267 # LATIN SMALL LETTER HENG WITH HOOK [2000] +0x8662 U+025A # LATIN SMALL LETTER SCHWA WITH HOOK [2000] +0x8663 U+00E6+0300 # [2000] +0x8664 U+01FD # LATIN SMALL LETTER AE WITH ACUTE [2000] +0x8665 U+1F70 # GREEK SMALL LETTER ALPHA WITH VARIA [2000] +0x8666 U+1F71 # GREEK SMALL LETTER ALPHA WITH OXIA [2000] +0x8667 U+0254+0300 # [2000] +0x8668 U+0254+0301 # [2000] +0x8669 U+028C+0300 # [2000] +0x866A U+028C+0301 # [2000] +0x866B U+0259+0300 # [2000] +0x866C U+0259+0301 # [2000] +0x866D U+025A+0300 # [2000] +0x866E U+025A+0301 # [2000] +0x866F U+1F72 # GREEK SMALL LETTER EPSILON WITH VARIA [2000] +0x8670 U+1F73 # GREEK SMALL LETTER EPSILON WITH OXIA [2000] +0x8671 U+0361 # COMBINING DOUBLE INVERTED BREVE [2000] +0x8672 U+02C8 # MODIFIER LETTER VERTICAL LINE [2000] +0x8673 U+02CC # MODIFIER LETTER LOW VERTICAL LINE [2000] +0x8674 U+02D0 # MODIFIER LETTER TRIANGULAR COLON [2000] +0x8675 U+02D1 # MODIFIER LETTER HALF TRIANGULAR COLON [2000] +0x8676 U+0306 # COMBINING BREVE [2000] +0x8677 U+203F # UNDERTIE [2000] +0x8678 U+030B # COMBINING DOUBLE ACUTE ACCENT [2000] +0x8679 U+0301 # COMBINING ACUTE ACCENT [2000] +0x867A U+0304 # COMBINING MACRON [2000] +0x867B U+0300 # COMBINING GRAVE ACCENT [2000] +0x867C U+030F # COMBINING DOUBLE GRAVE ACCENT [2000] +0x867D U+030C # COMBINING CARON [2000] +0x867E U+0302 # COMBINING CIRCUMFLEX ACCENT [2000] +0x8680 U+02E5 # MODIFIER LETTER EXTRA-HIGH TONE BAR [2000] +0x8681 U+02E6 # MODIFIER LETTER HIGH TONE BAR [2000] +0x8682 U+02E7 # MODIFIER LETTER MID TONE BAR [2000] +0x8683 U+02E8 # MODIFIER LETTER LOW TONE BAR [2000] +0x8684 U+02E9 # MODIFIER LETTER EXTRA-LOW TONE BAR [2000] +0x8685 U+02E9+02E5 # [2000] +0x8686 U+02E5+02E9 # [2000] +0x8687 U+0325 # COMBINING RING BELOW [2000] +0x8688 U+032C # COMBINING CARON BELOW [2000] +0x8689 U+0339 # COMBINING RIGHT HALF RING BELOW [2000] +0x868A U+031C # COMBINING LEFT HALF RING BELOW [2000] +0x868B U+031F # COMBINING PLUS SIGN BELOW [2000] +0x868C U+0320 # COMBINING MINUS SIGN BELOW [2000] +0x868D U+0308 # COMBINING DIAERESIS [2000] +0x868E U+033D # COMBINING X ABOVE [2000] +0x868F U+0329 # COMBINING VERTICAL LINE BELOW [2000] +0x8690 U+032F # COMBINING INVERTED BREVE BELOW [2000] +0x8691 U+02DE # MODIFIER LETTER RHOTIC HOOK [2000] +0x8692 U+0324 # COMBINING DIAERESIS BELOW [2000] +0x8693 U+0330 # COMBINING TILDE BELOW [2000] +0x8694 U+033C # COMBINING SEAGULL BELOW [2000] +0x8695 U+0334 # COMBINING TILDE OVERLAY [2000] +0x8696 U+031D # COMBINING UP TACK BELOW [2000] +0x8697 U+031E # COMBINING DOWN TACK BELOW [2000] +0x8698 U+0318 # COMBINING LEFT TACK BELOW [2000] +0x8699 U+0319 # COMBINING RIGHT TACK BELOW [2000] +0x869A U+032A # COMBINING BRIDGE BELOW [2000] +0x869B U+033A # COMBINING INVERTED BRIDGE BELOW [2000] +0x869C U+033B # COMBINING SQUARE BELOW [2000] +0x869D U+0303 # COMBINING TILDE [2000] +0x869E U+031A # COMBINING LEFT ANGLE ABOVE [2000] +0x869F U+2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE [2000] +0x86A0 U+2777 # DINGBAT NEGATIVE CIRCLED DIGIT TWO [2000] +0x86A1 U+2778 # DINGBAT NEGATIVE CIRCLED DIGIT THREE [2000] +0x86A2 U+2779 # DINGBAT NEGATIVE CIRCLED DIGIT FOUR [2000] +0x86A3 U+277A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE [2000] +0x86A4 U+277B # DINGBAT NEGATIVE CIRCLED DIGIT SIX [2000] +0x86A5 U+277C # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN [2000] +0x86A6 U+277D # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT [2000] +0x86A7 U+277E # DINGBAT NEGATIVE CIRCLED DIGIT NINE [2000] +0x86A8 U+277F # DINGBAT NEGATIVE CIRCLED NUMBER TEN [2000] +0x86A9 U+24EB # NEGATIVE CIRCLED NUMBER ELEVEN [2000] [Unicode3.2] +0x86AA U+24EC # NEGATIVE CIRCLED NUMBER TWELVE [2000] [Unicode3.2] +0x86AB U+24ED # NEGATIVE CIRCLED NUMBER THIRTEEN [2000] [Unicode3.2] +0x86AC U+24EE # NEGATIVE CIRCLED NUMBER FOURTEEN [2000] [Unicode3.2] +0x86AD U+24EF # NEGATIVE CIRCLED NUMBER FIFTEEN [2000] [Unicode3.2] +0x86AE U+24F0 # NEGATIVE CIRCLED NUMBER SIXTEEN [2000] [Unicode3.2] +0x86AF U+24F1 # NEGATIVE CIRCLED NUMBER SEVENTEEN [2000] [Unicode3.2] +0x86B0 U+24F2 # NEGATIVE CIRCLED NUMBER EIGHTEEN [2000] [Unicode3.2] +0x86B1 U+24F3 # NEGATIVE CIRCLED NUMBER NINETEEN [2000] [Unicode3.2] +0x86B2 U+24F4 # NEGATIVE CIRCLED NUMBER TWENTY [2000] [Unicode3.2] +0x86B3 U+2170 # SMALL ROMAN NUMERAL ONE [2000] +0x86B4 U+2171 # SMALL ROMAN NUMERAL TWO [2000] +0x86B5 U+2172 # SMALL ROMAN NUMERAL THREE [2000] +0x86B6 U+2173 # SMALL ROMAN NUMERAL FOUR [2000] +0x86B7 U+2174 # SMALL ROMAN NUMERAL FIVE [2000] +0x86B8 U+2175 # SMALL ROMAN NUMERAL SIX [2000] +0x86B9 U+2176 # SMALL ROMAN NUMERAL SEVEN [2000] +0x86BA U+2177 # SMALL ROMAN NUMERAL EIGHT [2000] +0x86BB U+2178 # SMALL ROMAN NUMERAL NINE [2000] +0x86BC U+2179 # SMALL ROMAN NUMERAL TEN [2000] +0x86BD U+217A # SMALL ROMAN NUMERAL ELEVEN [2000] +0x86BE U+217B # SMALL ROMAN NUMERAL TWELVE [2000] +0x86BF U+24D0 # CIRCLED LATIN SMALL LETTER A [2000] +0x86C0 U+24D1 # CIRCLED LATIN SMALL LETTER B [2000] +0x86C1 U+24D2 # CIRCLED LATIN SMALL LETTER C [2000] +0x86C2 U+24D3 # CIRCLED LATIN SMALL LETTER D [2000] +0x86C3 U+24D4 # CIRCLED LATIN SMALL LETTER E [2000] +0x86C4 U+24D5 # CIRCLED LATIN SMALL LETTER F [2000] +0x86C5 U+24D6 # CIRCLED LATIN SMALL LETTER G [2000] +0x86C6 U+24D7 # CIRCLED LATIN SMALL LETTER H [2000] +0x86C7 U+24D8 # CIRCLED LATIN SMALL LETTER I [2000] +0x86C8 U+24D9 # CIRCLED LATIN SMALL LETTER J [2000] +0x86C9 U+24DA # CIRCLED LATIN SMALL LETTER K [2000] +0x86CA U+24DB # CIRCLED LATIN SMALL LETTER L [2000] +0x86CB U+24DC # CIRCLED LATIN SMALL LETTER M [2000] +0x86CC U+24DD # CIRCLED LATIN SMALL LETTER N [2000] +0x86CD U+24DE # CIRCLED LATIN SMALL LETTER O [2000] +0x86CE U+24DF # CIRCLED LATIN SMALL LETTER P [2000] +0x86CF U+24E0 # CIRCLED LATIN SMALL LETTER Q [2000] +0x86D0 U+24E1 # CIRCLED LATIN SMALL LETTER R [2000] +0x86D1 U+24E2 # CIRCLED LATIN SMALL LETTER S [2000] +0x86D2 U+24E3 # CIRCLED LATIN SMALL LETTER T [2000] +0x86D3 U+24E4 # CIRCLED LATIN SMALL LETTER U [2000] +0x86D4 U+24E5 # CIRCLED LATIN SMALL LETTER V [2000] +0x86D5 U+24E6 # CIRCLED LATIN SMALL LETTER W [2000] +0x86D6 U+24E7 # CIRCLED LATIN SMALL LETTER X [2000] +0x86D7 U+24E8 # CIRCLED LATIN SMALL LETTER Y [2000] +0x86D8 U+24E9 # CIRCLED LATIN SMALL LETTER Z [2000] +0x86D9 U+32D0 # CIRCLED KATAKANA A [2000] +0x86DA U+32D1 # CIRCLED KATAKANA I [2000] +0x86DB U+32D2 # CIRCLED KATAKANA U [2000] +0x86DC U+32D3 # CIRCLED KATAKANA E [2000] +0x86DD U+32D4 # CIRCLED KATAKANA O [2000] +0x86DE U+32D5 # CIRCLED KATAKANA KA [2000] +0x86DF U+32D6 # CIRCLED KATAKANA KI [2000] +0x86E0 U+32D7 # CIRCLED KATAKANA KU [2000] +0x86E1 U+32D8 # CIRCLED KATAKANA KE [2000] +0x86E2 U+32D9 # CIRCLED KATAKANA KO [2000] +0x86E3 U+32DA # CIRCLED KATAKANA SA [2000] +0x86E4 U+32DB # CIRCLED KATAKANA SI [2000] +0x86E5 U+32DC # CIRCLED KATAKANA SU [2000] +0x86E6 U+32DD # CIRCLED KATAKANA SE [2000] +0x86E7 U+32DE # CIRCLED KATAKANA SO [2000] +0x86E8 U+32DF # CIRCLED KATAKANA TA [2000] +0x86E9 U+32E0 # CIRCLED KATAKANA TI [2000] +0x86EA U+32E1 # CIRCLED KATAKANA TU [2000] +0x86EB U+32E2 # CIRCLED KATAKANA TE [2000] +0x86EC U+32E3 # CIRCLED KATAKANA TO [2000] +0x86ED U+32FA # CIRCLED KATAKANA RO [2000] +0x86EE U+32E9 # CIRCLED KATAKANA HA [2000] +0x86EF U+32E5 # CIRCLED KATAKANA NI [2000] +0x86F0 U+32ED # CIRCLED KATAKANA HO [2000] +0x86F1 U+32EC # CIRCLED KATAKANA HE [2000] +0x86F2 # +0x86F3 # +0x86F4 # +0x86F5 # +0x86F6 # +0x86F7 # +0x86F8 # +0x86F9 # +0x86FA # +0x86FB U+2051 # TWO ASTERISKS ALIGNED VERTICALLY [2000] [Unicode3.2] +0x86FC U+2042 # ASTERISM [2000] +0x8740 U+2460 # CIRCLED DIGIT ONE [2000] +0x8741 U+2461 # CIRCLED DIGIT TWO [2000] +0x8742 U+2462 # CIRCLED DIGIT THREE [2000] +0x8743 U+2463 # CIRCLED DIGIT FOUR [2000] +0x8744 U+2464 # CIRCLED DIGIT FIVE [2000] +0x8745 U+2465 # CIRCLED DIGIT SIX [2000] +0x8746 U+2466 # CIRCLED DIGIT SEVEN [2000] +0x8747 U+2467 # CIRCLED DIGIT EIGHT [2000] +0x8748 U+2468 # CIRCLED DIGIT NINE [2000] +0x8749 U+2469 # CIRCLED NUMBER TEN [2000] +0x874A U+246A # CIRCLED NUMBER ELEVEN [2000] +0x874B U+246B # CIRCLED NUMBER TWELVE [2000] +0x874C U+246C # CIRCLED NUMBER THIRTEEN [2000] +0x874D U+246D # CIRCLED NUMBER FOURTEEN [2000] +0x874E U+246E # CIRCLED NUMBER FIFTEEN [2000] +0x874F U+246F # CIRCLED NUMBER SIXTEEN [2000] +0x8750 U+2470 # CIRCLED NUMBER SEVENTEEN [2000] +0x8751 U+2471 # CIRCLED NUMBER EIGHTEEN [2000] +0x8752 U+2472 # CIRCLED NUMBER NINETEEN [2000] +0x8753 U+2473 # CIRCLED NUMBER TWENTY [2000] +0x8754 U+2160 # ROMAN NUMERAL ONE [2000] +0x8755 U+2161 # ROMAN NUMERAL TWO [2000] +0x8756 U+2162 # ROMAN NUMERAL THREE [2000] +0x8757 U+2163 # ROMAN NUMERAL FOUR [2000] +0x8758 U+2164 # ROMAN NUMERAL FIVE [2000] +0x8759 U+2165 # ROMAN NUMERAL SIX [2000] +0x875A U+2166 # ROMAN NUMERAL SEVEN [2000] +0x875B U+2167 # ROMAN NUMERAL EIGHT [2000] +0x875C U+2168 # ROMAN NUMERAL NINE [2000] +0x875D U+2169 # ROMAN NUMERAL TEN [2000] +0x875E U+216A # ROMAN NUMERAL ELEVEN [2000] +0x875F U+3349 # SQUARE MIRI [2000] +0x8760 U+3314 # SQUARE KIRO [2000] +0x8761 U+3322 # SQUARE SENTI [2000] +0x8762 U+334D # SQUARE MEETORU [2000] +0x8763 U+3318 # SQUARE GURAMU [2000] +0x8764 U+3327 # SQUARE TON [2000] +0x8765 U+3303 # SQUARE AARU [2000] +0x8766 U+3336 # SQUARE HEKUTAARU [2000] +0x8767 U+3351 # SQUARE RITTORU [2000] +0x8768 U+3357 # SQUARE WATTO [2000] +0x8769 U+330D # SQUARE KARORII [2000] +0x876A U+3326 # SQUARE DORU [2000] +0x876B U+3323 # SQUARE SENTO [2000] +0x876C U+332B # SQUARE PAASENTO [2000] +0x876D U+334A # SQUARE MIRIBAARU [2000] +0x876E U+333B # SQUARE PEEZI [2000] +0x876F U+339C # SQUARE MM [2000] +0x8770 U+339D # SQUARE CM [2000] +0x8771 U+339E # SQUARE KM [2000] +0x8772 U+338E # SQUARE MG [2000] +0x8773 U+338F # SQUARE KG [2000] +0x8774 U+33C4 # SQUARE CC [2000] +0x8775 U+33A1 # SQUARE M SQUARED [2000] +0x8776 U+216B # ROMAN NUMERAL TWELVE [2000] +0x8777 # +0x8778 # +0x8779 # +0x877A # +0x877B # +0x877C # +0x877D # +0x877E U+337B # SQUARE ERA NAME HEISEI [2000] +0x8780 U+301D # REVERSED DOUBLE PRIME QUOTATION MARK [2000] +0x8781 U+301F # LOW DOUBLE PRIME QUOTATION MARK [2000] +0x8782 U+2116 # NUMERO SIGN [2000] +0x8783 U+33CD # SQUARE KK [2000] +0x8784 U+2121 # TELEPHONE SIGN [2000] +0x8785 U+32A4 # CIRCLED IDEOGRAPH HIGH [2000] +0x8786 U+32A5 # CIRCLED IDEOGRAPH CENTRE [2000] +0x8787 U+32A6 # CIRCLED IDEOGRAPH LOW [2000] +0x8788 U+32A7 # CIRCLED IDEOGRAPH LEFT [2000] +0x8789 U+32A8 # CIRCLED IDEOGRAPH RIGHT [2000] +0x878A U+3231 # PARENTHESIZED IDEOGRAPH STOCK [2000] +0x878B U+3232 # PARENTHESIZED IDEOGRAPH HAVE [2000] +0x878C U+3239 # PARENTHESIZED IDEOGRAPH REPRESENT [2000] +0x878D U+337E # SQUARE ERA NAME MEIZI [2000] +0x878E U+337D # SQUARE ERA NAME TAISYOU [2000] +0x878F U+337C # SQUARE ERA NAME SYOUWA [2000] +0x8790 # Windows: U+2252 +0x8791 # Windows: U+2261 +0x8792 # Windows: U+222B +0x8793 U+222E # CONTOUR INTEGRAL [2000] +0x8794 # Windows: U+2211 +0x8795 # Windows: U+221A +0x8796 # Windows: U+22A5 +0x8797 # Windows: U+2220 +0x8798 U+221F # RIGHT ANGLE [2000] +0x8799 U+22BF # RIGHT TRIANGLE [2000] +0x879A # Windows: U+2235 +0x879B # Windows: U+2229 +0x879C # Windows: U+222A +0x879D U+2756 # BLACK DIAMOND MINUS WHITE X [2000] +0x879E U+261E # WHITE RIGHT POINTING INDEX [2000] +0x879F U+4FF1 # [2004] +0x87A0 U+2000B # [2000] [Unicode3.1] +0x87A1 U+3402 # [2000] +0x87A2 U+4E28 # [2000] +0x87A3 U+4E2F # [2000] +0x87A4 U+4E30 # [2000] +0x87A5 U+4E8D # [2000] +0x87A6 U+4EE1 # [2000] +0x87A7 U+4EFD # [2000] +0x87A8 U+4EFF # [2000] +0x87A9 U+4F03 # [2000] +0x87AA U+4F0B # [2000] +0x87AB U+4F60 # [2000] +0x87AC U+4F48 # [2000] +0x87AD U+4F49 # [2000] +0x87AE U+4F56 # [2000] +0x87AF U+4F5F # [2000] +0x87B0 U+4F6A # [2000] +0x87B1 U+4F6C # [2000] +0x87B2 U+4F7E # [2000] +0x87B3 U+4F8A # [2000] +0x87B4 U+4F94 # [2000] +0x87B5 U+4F97 # [2000] +0x87B6 U+FA30 # CJK COMPATIBILITY IDEOGRAPH-FA30 [2000] [Unicode3.2] +0x87B7 U+4FC9 # [2000] +0x87B8 U+4FE0 # [2000] +0x87B9 U+5001 # [2000] +0x87BA U+5002 # [2000] +0x87BB U+500E # [2000] +0x87BC U+5018 # [2000] +0x87BD U+5027 # [2000] +0x87BE U+502E # [2000] +0x87BF U+5040 # [2000] +0x87C0 U+503B # [2000] +0x87C1 U+5041 # [2000] +0x87C2 U+5094 # [2000] +0x87C3 U+50CC # [2000] +0x87C4 U+50F2 # [2000] +0x87C5 U+50D0 # [2000] +0x87C6 U+50E6 # [2000] +0x87C7 U+FA31 # CJK COMPATIBILITY IDEOGRAPH-FA31 [2000] [Unicode3.2] +0x87C8 U+5106 # [2000] +0x87C9 U+5103 # [2000] +0x87CA U+510B # [2000] +0x87CB U+511E # [2000] +0x87CC U+5135 # [2000] +0x87CD U+514A # [2000] +0x87CE U+FA32 # CJK COMPATIBILITY IDEOGRAPH-FA32 [2000] [Unicode3.2] +0x87CF U+5155 # [2000] +0x87D0 U+5157 # [2000] +0x87D1 U+34B5 # [2000] +0x87D2 U+519D # [2000] +0x87D3 U+51C3 # [2000] +0x87D4 U+51CA # [2000] +0x87D5 U+51DE # [2000] +0x87D6 U+51E2 # [2000] +0x87D7 U+51EE # [2000] +0x87D8 U+5201 # [2000] +0x87D9 U+34DB # [2000] +0x87DA U+5213 # [2000] +0x87DB U+5215 # [2000] +0x87DC U+5249 # [2000] +0x87DD U+5257 # [2000] +0x87DE U+5261 # [2000] +0x87DF U+5293 # [2000] +0x87E0 U+52C8 # [2000] +0x87E1 U+FA33 # CJK COMPATIBILITY IDEOGRAPH-FA33 [2000] [Unicode3.2] +0x87E2 U+52CC # [2000] +0x87E3 U+52D0 # [2000] +0x87E4 U+52D6 # [2000] +0x87E5 U+52DB # [2000] +0x87E6 U+FA34 # CJK COMPATIBILITY IDEOGRAPH-FA34 [2000] [Unicode3.2] +0x87E7 U+52F0 # [2000] +0x87E8 U+52FB # [2000] +0x87E9 U+5300 # [2000] +0x87EA U+5307 # [2000] +0x87EB U+531C # [2000] +0x87EC U+FA35 # CJK COMPATIBILITY IDEOGRAPH-FA35 [2000] [Unicode3.2] +0x87ED U+5361 # [2000] +0x87EE U+5363 # [2000] +0x87EF U+537D # [2000] +0x87F0 U+5393 # [2000] +0x87F1 U+539D # [2000] +0x87F2 U+53B2 # [2000] +0x87F3 U+5412 # [2000] +0x87F4 U+5427 # [2000] +0x87F5 U+544D # [2000] +0x87F6 U+549C # [2000] +0x87F7 U+546B # [2000] +0x87F8 U+5474 # [2000] +0x87F9 U+547F # [2000] +0x87FA U+5488 # [2000] +0x87FB U+5496 # [2000] +0x87FC U+54A1 # [2000] +0x8840 U+54A9 # [2000] +0x8841 U+54C6 # [2000] +0x8842 U+54FF # [2000] +0x8843 U+550E # [2000] +0x8844 U+552B # [2000] +0x8845 U+5535 # [2000] +0x8846 U+5550 # [2000] +0x8847 U+555E # [2000] +0x8848 U+5581 # [2000] +0x8849 U+5586 # [2000] +0x884A U+558E # [2000] +0x884B U+FA36 # CJK COMPATIBILITY IDEOGRAPH-FA36 [2000] [Unicode3.2] +0x884C U+55AD # [2000] +0x884D U+55CE # [2000] +0x884E U+FA37 # CJK COMPATIBILITY IDEOGRAPH-FA37 [2000] [Unicode3.2] +0x884F U+5608 # [2000] +0x8850 U+560E # [2000] +0x8851 U+563B # [2000] +0x8852 U+5649 # [2000] +0x8853 U+5676 # [2000] +0x8854 U+5666 # [2000] +0x8855 U+FA38 # CJK COMPATIBILITY IDEOGRAPH-FA38 [2000] [Unicode3.2] +0x8856 U+566F # [2000] +0x8857 U+5671 # [2000] +0x8858 U+5672 # [2000] +0x8859 U+5699 # [2000] +0x885A U+569E # [2000] +0x885B U+56A9 # [2000] +0x885C U+56AC # [2000] +0x885D U+56B3 # [2000] +0x885E U+56C9 # [2000] +0x885F U+56CA # [2000] +0x8860 U+570A # [2000] +0x8861 U+2123D # [2000] [Unicode3.1] +0x8862 U+5721 # [2000] +0x8863 U+572F # [2000] +0x8864 U+5733 # [2000] +0x8865 U+5734 # [2000] +0x8866 U+5770 # [2000] +0x8867 U+5777 # [2000] +0x8868 U+577C # [2000] +0x8869 U+579C # [2000] +0x886A U+FA0F # CJK COMPATIBILITY IDEOGRAPH-FA0F [2000] +0x886B U+2131B # [2000] [Unicode3.1] +0x886C U+57B8 # [2000] +0x886D U+57C7 # [2000] +0x886E U+57C8 # [2000] +0x886F U+57CF # [2000] +0x8870 U+57E4 # [2000] +0x8871 U+57ED # [2000] +0x8872 U+57F5 # [2000] +0x8873 U+57F6 # [2000] +0x8874 U+57FF # [2000] +0x8875 U+5809 # [2000] +0x8876 U+FA10 # CJK COMPATIBILITY IDEOGRAPH-FA10 [2000] +0x8877 U+5861 # [2000] +0x8878 U+5864 # [2000] +0x8879 U+FA39 # CJK COMPATIBILITY IDEOGRAPH-FA39 [2000] [Unicode3.2] +0x887A U+587C # [2000] +0x887B U+5889 # [2000] +0x887C U+589E # [2000] +0x887D U+FA3A # CJK COMPATIBILITY IDEOGRAPH-FA3A [2000] [Unicode3.2] +0x887E U+58A9 # [2000] +0x8880 U+2146E # [2000] [Unicode3.1] +0x8881 U+58D2 # [2000] +0x8882 U+58CE # [2000] +0x8883 U+58D4 # [2000] +0x8884 U+58DA # [2000] +0x8885 U+58E0 # [2000] +0x8886 U+58E9 # [2000] +0x8887 U+590C # [2000] +0x8888 U+8641 # [2000] +0x8889 U+595D # [2000] +0x888A U+596D # [2000] +0x888B U+598B # [2000] +0x888C U+5992 # [2000] +0x888D U+59A4 # [2000] +0x888E U+59C3 # [2000] +0x888F U+59D2 # [2000] +0x8890 U+59DD # [2000] +0x8891 U+5A13 # [2000] +0x8892 U+5A23 # [2000] +0x8893 U+5A67 # [2000] +0x8894 U+5A6D # [2000] +0x8895 U+5A77 # [2000] +0x8896 U+5A7E # [2000] +0x8897 U+5A84 # [2000] +0x8898 U+5A9E # [2000] +0x8899 U+5AA7 # [2000] +0x889A U+5AC4 # [2000] +0x889B U+218BD # [2000] [Unicode3.1] +0x889C U+5B19 # [2000] +0x889D U+5B25 # [2000] +0x889E U+525D # [2004] +0x889F U+4E9C # +0x88A0 U+5516 # +0x88A1 U+5A03 # +0x88A2 U+963F # +0x88A3 U+54C0 # +0x88A4 U+611B # +0x88A5 U+6328 # +0x88A6 U+59F6 # +0x88A7 U+9022 # +0x88A8 U+8475 # +0x88A9 U+831C # +0x88AA U+7A50 # +0x88AB U+60AA # +0x88AC U+63E1 # +0x88AD U+6E25 # +0x88AE U+65ED # +0x88AF U+8466 # +0x88B0 U+82A6 # +0x88B1 U+9BF5 # +0x88B2 U+6893 # +0x88B3 U+5727 # +0x88B4 U+65A1 # +0x88B5 U+6271 # +0x88B6 U+5B9B # +0x88B7 U+59D0 # +0x88B8 U+867B # +0x88B9 U+98F4 # +0x88BA U+7D62 # +0x88BB U+7DBE # +0x88BC U+9B8E # +0x88BD U+6216 # +0x88BE U+7C9F # +0x88BF U+88B7 # +0x88C0 U+5B89 # +0x88C1 U+5EB5 # +0x88C2 U+6309 # +0x88C3 U+6697 # +0x88C4 U+6848 # +0x88C5 U+95C7 # +0x88C6 U+978D # +0x88C7 U+674F # +0x88C8 U+4EE5 # +0x88C9 U+4F0A # +0x88CA U+4F4D # +0x88CB U+4F9D # +0x88CC U+5049 # +0x88CD U+56F2 # +0x88CE U+5937 # +0x88CF U+59D4 # +0x88D0 U+5A01 # +0x88D1 U+5C09 # +0x88D2 U+60DF # +0x88D3 U+610F # +0x88D4 U+6170 # +0x88D5 U+6613 # +0x88D6 U+6905 # +0x88D7 U+70BA # +0x88D8 U+754F # +0x88D9 U+7570 # +0x88DA U+79FB # +0x88DB U+7DAD # +0x88DC U+7DEF # +0x88DD U+80C3 # +0x88DE U+840E # +0x88DF U+8863 # +0x88E0 U+8B02 # +0x88E1 U+9055 # +0x88E2 U+907A # +0x88E3 U+533B # +0x88E4 U+4E95 # +0x88E5 U+4EA5 # +0x88E6 U+57DF # +0x88E7 U+80B2 # +0x88E8 U+90C1 # +0x88E9 U+78EF # +0x88EA U+4E00 # +0x88EB U+58F1 # +0x88EC U+6EA2 # +0x88ED U+9038 # +0x88EE U+7A32 # +0x88EF U+8328 # +0x88F0 U+828B # +0x88F1 U+9C2F # +0x88F2 U+5141 # +0x88F3 U+5370 # +0x88F4 U+54BD # +0x88F5 U+54E1 # +0x88F6 U+56E0 # +0x88F7 U+59FB # +0x88F8 U+5F15 # +0x88F9 U+98F2 # +0x88FA U+6DEB # +0x88FB U+80E4 # +0x88FC U+852D # +0x8940 U+9662 # +0x8941 U+9670 # +0x8942 U+96A0 # +0x8943 U+97FB # +0x8944 U+540B # +0x8945 U+53F3 # +0x8946 U+5B87 # +0x8947 U+70CF # +0x8948 U+7FBD # +0x8949 U+8FC2 # +0x894A U+96E8 # +0x894B U+536F # +0x894C U+9D5C # +0x894D U+7ABA # +0x894E U+4E11 # +0x894F U+7893 # +0x8950 U+81FC # +0x8951 U+6E26 # +0x8952 U+5618 # +0x8953 U+5504 # +0x8954 U+6B1D # +0x8955 U+851A # +0x8956 U+9C3B # +0x8957 U+59E5 # +0x8958 U+53A9 # +0x8959 U+6D66 # +0x895A U+74DC # +0x895B U+958F # +0x895C U+5642 # +0x895D U+4E91 # +0x895E U+904B # +0x895F U+96F2 # +0x8960 U+834F # +0x8961 U+990C # +0x8962 U+53E1 # +0x8963 U+55B6 # +0x8964 U+5B30 # +0x8965 U+5F71 # +0x8966 U+6620 # +0x8967 U+66F3 # +0x8968 U+6804 # +0x8969 U+6C38 # +0x896A U+6CF3 # +0x896B U+6D29 # +0x896C U+745B # +0x896D U+76C8 # +0x896E U+7A4E # +0x896F U+9834 # +0x8970 U+82F1 # +0x8971 U+885B # +0x8972 U+8A60 # +0x8973 U+92ED # +0x8974 U+6DB2 # +0x8975 U+75AB # +0x8976 U+76CA # +0x8977 U+99C5 # +0x8978 U+60A6 # +0x8979 U+8B01 # +0x897A U+8D8A # +0x897B U+95B2 # +0x897C U+698E # +0x897D U+53AD # +0x897E U+5186 # +0x8980 U+5712 # +0x8981 U+5830 # +0x8982 U+5944 # +0x8983 U+5BB4 # +0x8984 U+5EF6 # +0x8985 U+6028 # +0x8986 U+63A9 # +0x8987 U+63F4 # +0x8988 U+6CBF # +0x8989 U+6F14 # +0x898A U+708E # +0x898B U+7114 # +0x898C U+7159 # +0x898D U+71D5 # +0x898E U+733F # +0x898F U+7E01 # +0x8990 U+8276 # +0x8991 U+82D1 # +0x8992 U+8597 # +0x8993 U+9060 # +0x8994 U+925B # +0x8995 U+9D1B # +0x8996 U+5869 # +0x8997 U+65BC # +0x8998 U+6C5A # +0x8999 U+7525 # +0x899A U+51F9 # +0x899B U+592E # +0x899C U+5965 # +0x899D U+5F80 # +0x899E U+5FDC # +0x899F U+62BC # +0x89A0 U+65FA # +0x89A1 U+6A2A # +0x89A2 U+6B27 # +0x89A3 U+6BB4 # +0x89A4 U+738B # +0x89A5 U+7FC1 # +0x89A6 U+8956 # +0x89A7 U+9D2C # +0x89A8 U+9D0E # +0x89A9 U+9EC4 # +0x89AA U+5CA1 # +0x89AB U+6C96 # +0x89AC U+837B # +0x89AD U+5104 # +0x89AE U+5C4B # +0x89AF U+61B6 # +0x89B0 U+81C6 # +0x89B1 U+6876 # +0x89B2 U+7261 # +0x89B3 U+4E59 # +0x89B4 U+4FFA # +0x89B5 U+5378 # +0x89B6 U+6069 # +0x89B7 U+6E29 # +0x89B8 U+7A4F # +0x89B9 U+97F3 # +0x89BA U+4E0B # +0x89BB U+5316 # +0x89BC U+4EEE # +0x89BD U+4F55 # +0x89BE U+4F3D # +0x89BF U+4FA1 # +0x89C0 U+4F73 # +0x89C1 U+52A0 # +0x89C2 U+53EF # +0x89C3 U+5609 # +0x89C4 U+590F # +0x89C5 U+5AC1 # +0x89C6 U+5BB6 # +0x89C7 U+5BE1 # +0x89C8 U+79D1 # +0x89C9 U+6687 # +0x89CA U+679C # +0x89CB U+67B6 # +0x89CC U+6B4C # +0x89CD U+6CB3 # +0x89CE U+706B # +0x89CF U+73C2 # +0x89D0 U+798D # +0x89D1 U+79BE # +0x89D2 U+7A3C # +0x89D3 U+7B87 # +0x89D4 U+82B1 # +0x89D5 U+82DB # +0x89D6 U+8304 # +0x89D7 U+8377 # +0x89D8 U+83EF # +0x89D9 U+83D3 # +0x89DA U+8766 # +0x89DB U+8AB2 # +0x89DC U+5629 # +0x89DD U+8CA8 # +0x89DE U+8FE6 # +0x89DF U+904E # +0x89E0 U+971E # +0x89E1 U+868A # +0x89E2 U+4FC4 # +0x89E3 U+5CE8 # +0x89E4 U+6211 # +0x89E5 U+7259 # +0x89E6 U+753B # +0x89E7 U+81E5 # +0x89E8 U+82BD # +0x89E9 U+86FE # +0x89EA U+8CC0 # +0x89EB U+96C5 # +0x89EC U+9913 # +0x89ED U+99D5 # +0x89EE U+4ECB # +0x89EF U+4F1A # +0x89F0 U+89E3 # +0x89F1 U+56DE # +0x89F2 U+584A # +0x89F3 U+58CA # +0x89F4 U+5EFB # +0x89F5 U+5FEB # +0x89F6 U+602A # +0x89F7 U+6094 # +0x89F8 U+6062 # +0x89F9 U+61D0 # +0x89FA U+6212 # +0x89FB U+62D0 # +0x89FC U+6539 # +0x8A40 U+9B41 # +0x8A41 U+6666 # +0x8A42 U+68B0 # +0x8A43 U+6D77 # +0x8A44 U+7070 # +0x8A45 U+754C # +0x8A46 U+7686 # +0x8A47 U+7D75 # +0x8A48 U+82A5 # +0x8A49 U+87F9 # +0x8A4A U+958B # +0x8A4B U+968E # +0x8A4C U+8C9D # +0x8A4D U+51F1 # +0x8A4E U+52BE # +0x8A4F U+5916 # +0x8A50 U+54B3 # +0x8A51 U+5BB3 # +0x8A52 U+5D16 # +0x8A53 U+6168 # +0x8A54 U+6982 # +0x8A55 U+6DAF # +0x8A56 U+788D # +0x8A57 U+84CB # +0x8A58 U+8857 # +0x8A59 U+8A72 # +0x8A5A U+93A7 # +0x8A5B U+9AB8 # +0x8A5C U+6D6C # +0x8A5D U+99A8 # +0x8A5E U+86D9 # +0x8A5F U+57A3 # +0x8A60 U+67FF # +0x8A61 U+86CE # +0x8A62 U+920E # +0x8A63 U+5283 # +0x8A64 U+5687 # +0x8A65 U+5404 # +0x8A66 U+5ED3 # +0x8A67 U+62E1 # +0x8A68 U+64B9 # +0x8A69 U+683C # +0x8A6A U+6838 # +0x8A6B U+6BBB # +0x8A6C U+7372 # +0x8A6D U+78BA # +0x8A6E U+7A6B # +0x8A6F U+899A # +0x8A70 U+89D2 # +0x8A71 U+8D6B # +0x8A72 U+8F03 # +0x8A73 U+90ED # +0x8A74 U+95A3 # +0x8A75 U+9694 # +0x8A76 U+9769 # +0x8A77 U+5B66 # +0x8A78 U+5CB3 # +0x8A79 U+697D # +0x8A7A U+984D # +0x8A7B U+984E # +0x8A7C U+639B # +0x8A7D U+7B20 # +0x8A7E U+6A2B # +0x8A80 U+6A7F # +0x8A81 U+68B6 # +0x8A82 U+9C0D # +0x8A83 U+6F5F # +0x8A84 U+5272 # +0x8A85 U+559D # +0x8A86 U+6070 # +0x8A87 U+62EC # +0x8A88 U+6D3B # +0x8A89 U+6E07 # +0x8A8A U+6ED1 # +0x8A8B U+845B # +0x8A8C U+8910 # +0x8A8D U+8F44 # +0x8A8E U+4E14 # +0x8A8F U+9C39 # +0x8A90 U+53F6 # +0x8A91 U+691B # +0x8A92 U+6A3A # +0x8A93 U+9784 # +0x8A94 U+682A # +0x8A95 U+515C # +0x8A96 U+7AC3 # +0x8A97 U+84B2 # +0x8A98 U+91DC # +0x8A99 U+938C # +0x8A9A U+565B # +0x8A9B U+9D28 # +0x8A9C U+6822 # +0x8A9D U+8305 # +0x8A9E U+8431 # +0x8A9F U+7CA5 # +0x8AA0 U+5208 # +0x8AA1 U+82C5 # +0x8AA2 U+74E6 # +0x8AA3 U+4E7E # +0x8AA4 U+4F83 # +0x8AA5 U+51A0 # +0x8AA6 U+5BD2 # +0x8AA7 U+520A # +0x8AA8 U+52D8 # +0x8AA9 U+52E7 # +0x8AAA U+5DFB # +0x8AAB U+559A # +0x8AAC U+582A # +0x8AAD U+59E6 # +0x8AAE U+5B8C # +0x8AAF U+5B98 # +0x8AB0 U+5BDB # +0x8AB1 U+5E72 # +0x8AB2 U+5E79 # +0x8AB3 U+60A3 # +0x8AB4 U+611F # +0x8AB5 U+6163 # +0x8AB6 U+61BE # +0x8AB7 U+63DB # +0x8AB8 U+6562 # +0x8AB9 U+67D1 # +0x8ABA U+6853 # +0x8ABB U+68FA # +0x8ABC U+6B3E # +0x8ABD U+6B53 # +0x8ABE U+6C57 # +0x8ABF U+6F22 # +0x8AC0 U+6F97 # +0x8AC1 U+6F45 # +0x8AC2 U+74B0 # +0x8AC3 U+7518 # +0x8AC4 U+76E3 # +0x8AC5 U+770B # +0x8AC6 U+7AFF # +0x8AC7 U+7BA1 # +0x8AC8 U+7C21 # +0x8AC9 U+7DE9 # +0x8ACA U+7F36 # +0x8ACB U+7FF0 # +0x8ACC U+809D # +0x8ACD U+8266 # +0x8ACE U+839E # +0x8ACF U+89B3 # +0x8AD0 U+8ACC # +0x8AD1 U+8CAB # +0x8AD2 U+9084 # +0x8AD3 U+9451 # +0x8AD4 U+9593 # +0x8AD5 U+9591 # +0x8AD6 U+95A2 # +0x8AD7 U+9665 # +0x8AD8 U+97D3 # +0x8AD9 U+9928 # +0x8ADA U+8218 # +0x8ADB U+4E38 # +0x8ADC U+542B # +0x8ADD U+5CB8 # +0x8ADE U+5DCC # +0x8ADF U+73A9 # +0x8AE0 U+764C # +0x8AE1 U+773C # +0x8AE2 U+5CA9 # +0x8AE3 U+7FEB # +0x8AE4 U+8D0B # +0x8AE5 U+96C1 # +0x8AE6 U+9811 # +0x8AE7 U+9854 # +0x8AE8 U+9858 # +0x8AE9 U+4F01 # +0x8AEA U+4F0E # +0x8AEB U+5371 # +0x8AEC U+559C # +0x8AED U+5668 # +0x8AEE U+57FA # +0x8AEF U+5947 # +0x8AF0 U+5B09 # +0x8AF1 U+5BC4 # +0x8AF2 U+5C90 # +0x8AF3 U+5E0C # +0x8AF4 U+5E7E # +0x8AF5 U+5FCC # +0x8AF6 U+63EE # +0x8AF7 U+673A # +0x8AF8 U+65D7 # +0x8AF9 U+65E2 # +0x8AFA U+671F # +0x8AFB U+68CB # +0x8AFC U+68C4 # +0x8B40 U+6A5F # +0x8B41 U+5E30 # +0x8B42 U+6BC5 # +0x8B43 U+6C17 # +0x8B44 U+6C7D # +0x8B45 U+757F # +0x8B46 U+7948 # +0x8B47 U+5B63 # +0x8B48 U+7A00 # +0x8B49 U+7D00 # +0x8B4A U+5FBD # +0x8B4B U+898F # +0x8B4C U+8A18 # +0x8B4D U+8CB4 # +0x8B4E U+8D77 # +0x8B4F U+8ECC # +0x8B50 U+8F1D # +0x8B51 U+98E2 # +0x8B52 U+9A0E # +0x8B53 U+9B3C # +0x8B54 U+4E80 # +0x8B55 U+507D # +0x8B56 U+5100 # +0x8B57 U+5993 # +0x8B58 U+5B9C # +0x8B59 U+622F # +0x8B5A U+6280 # +0x8B5B U+64EC # +0x8B5C U+6B3A # +0x8B5D U+72A0 # +0x8B5E U+7591 # +0x8B5F U+7947 # +0x8B60 U+7FA9 # +0x8B61 U+87FB # +0x8B62 U+8ABC # +0x8B63 U+8B70 # +0x8B64 U+63AC # +0x8B65 U+83CA # +0x8B66 U+97A0 # +0x8B67 U+5409 # +0x8B68 U+5403 # +0x8B69 U+55AB # +0x8B6A U+6854 # +0x8B6B U+6A58 # +0x8B6C U+8A70 # +0x8B6D U+7827 # +0x8B6E U+6775 # +0x8B6F U+9ECD # +0x8B70 U+5374 # +0x8B71 U+5BA2 # +0x8B72 U+811A # +0x8B73 U+8650 # +0x8B74 U+9006 # +0x8B75 U+4E18 # +0x8B76 U+4E45 # +0x8B77 U+4EC7 # +0x8B78 U+4F11 # +0x8B79 U+53CA # +0x8B7A U+5438 # +0x8B7B U+5BAE # +0x8B7C U+5F13 # +0x8B7D U+6025 # +0x8B7E U+6551 # +0x8B80 U+673D # +0x8B81 U+6C42 # +0x8B82 U+6C72 # +0x8B83 U+6CE3 # +0x8B84 U+7078 # +0x8B85 U+7403 # +0x8B86 U+7A76 # +0x8B87 U+7AAE # +0x8B88 U+7B08 # +0x8B89 U+7D1A # +0x8B8A U+7CFE # +0x8B8B U+7D66 # +0x8B8C U+65E7 # +0x8B8D U+725B # +0x8B8E U+53BB # +0x8B8F U+5C45 # +0x8B90 U+5DE8 # +0x8B91 U+62D2 # +0x8B92 U+62E0 # +0x8B93 U+6319 # +0x8B94 U+6E20 # +0x8B95 U+865A # +0x8B96 U+8A31 # +0x8B97 U+8DDD # +0x8B98 U+92F8 # +0x8B99 U+6F01 # +0x8B9A U+79A6 # +0x8B9B U+9B5A # +0x8B9C U+4EA8 # +0x8B9D U+4EAB # +0x8B9E U+4EAC # +0x8B9F U+4F9B # +0x8BA0 U+4FA0 # +0x8BA1 U+50D1 # +0x8BA2 U+5147 # +0x8BA3 U+7AF6 # +0x8BA4 U+5171 # +0x8BA5 U+51F6 # +0x8BA6 U+5354 # +0x8BA7 U+5321 # +0x8BA8 U+537F # +0x8BA9 U+53EB # +0x8BAA U+55AC # +0x8BAB U+5883 # +0x8BAC U+5CE1 # +0x8BAD U+5F37 # +0x8BAE U+5F4A # +0x8BAF U+602F # +0x8BB0 U+6050 # +0x8BB1 U+606D # +0x8BB2 U+631F # +0x8BB3 U+6559 # +0x8BB4 U+6A4B # +0x8BB5 U+6CC1 # +0x8BB6 U+72C2 # +0x8BB7 U+72ED # +0x8BB8 U+77EF # +0x8BB9 U+80F8 # +0x8BBA U+8105 # +0x8BBB U+8208 # +0x8BBC U+854E # +0x8BBD U+90F7 # +0x8BBE U+93E1 # +0x8BBF U+97FF # +0x8BC0 U+9957 # +0x8BC1 U+9A5A # +0x8BC2 U+4EF0 # +0x8BC3 U+51DD # +0x8BC4 U+5C2D # +0x8BC5 U+6681 # +0x8BC6 U+696D # +0x8BC7 U+5C40 # +0x8BC8 U+66F2 # +0x8BC9 U+6975 # +0x8BCA U+7389 # +0x8BCB U+6850 # +0x8BCC U+7C81 # +0x8BCD U+50C5 # +0x8BCE U+52E4 # +0x8BCF U+5747 # +0x8BD0 U+5DFE # +0x8BD1 U+9326 # +0x8BD2 U+65A4 # +0x8BD3 U+6B23 # +0x8BD4 U+6B3D # +0x8BD5 U+7434 # +0x8BD6 U+7981 # +0x8BD7 U+79BD # +0x8BD8 U+7B4B # +0x8BD9 U+7DCA # +0x8BDA U+82B9 # +0x8BDB U+83CC # +0x8BDC U+887F # +0x8BDD U+895F # +0x8BDE U+8B39 # +0x8BDF U+8FD1 # +0x8BE0 U+91D1 # +0x8BE1 U+541F # +0x8BE2 U+9280 # +0x8BE3 U+4E5D # +0x8BE4 U+5036 # +0x8BE5 U+53E5 # +0x8BE6 U+533A # +0x8BE7 U+72D7 # +0x8BE8 U+7396 # +0x8BE9 U+77E9 # +0x8BEA U+82E6 # +0x8BEB U+8EAF # +0x8BEC U+99C6 # +0x8BED U+99C8 # +0x8BEE U+99D2 # +0x8BEF U+5177 # +0x8BF0 U+611A # +0x8BF1 U+865E # +0x8BF2 U+55B0 # +0x8BF3 U+7A7A # +0x8BF4 U+5076 # +0x8BF5 U+5BD3 # +0x8BF6 U+9047 # +0x8BF7 U+9685 # +0x8BF8 U+4E32 # +0x8BF9 U+6ADB # +0x8BFA U+91E7 # +0x8BFB U+5C51 # +0x8BFC U+5C48 # +0x8C40 U+6398 # +0x8C41 U+7A9F # +0x8C42 U+6C93 # +0x8C43 U+9774 # +0x8C44 U+8F61 # +0x8C45 U+7AAA # +0x8C46 U+718A # +0x8C47 U+9688 # +0x8C48 U+7C82 # +0x8C49 U+6817 # +0x8C4A U+7E70 # +0x8C4B U+6851 # +0x8C4C U+936C # +0x8C4D U+52F2 # +0x8C4E U+541B # +0x8C4F U+85AB # +0x8C50 U+8A13 # +0x8C51 U+7FA4 # +0x8C52 U+8ECD # +0x8C53 U+90E1 # +0x8C54 U+5366 # +0x8C55 U+8888 # +0x8C56 U+7941 # +0x8C57 U+4FC2 # +0x8C58 U+50BE # +0x8C59 U+5211 # +0x8C5A U+5144 # +0x8C5B U+5553 # +0x8C5C U+572D # +0x8C5D U+73EA # +0x8C5E U+578B # +0x8C5F U+5951 # +0x8C60 U+5F62 # +0x8C61 U+5F84 # +0x8C62 U+6075 # +0x8C63 U+6176 # +0x8C64 U+6167 # +0x8C65 U+61A9 # +0x8C66 U+63B2 # +0x8C67 U+643A # +0x8C68 U+656C # +0x8C69 U+666F # +0x8C6A U+6842 # +0x8C6B U+6E13 # +0x8C6C U+7566 # +0x8C6D U+7A3D # +0x8C6E U+7CFB # +0x8C6F U+7D4C # +0x8C70 U+7D99 # +0x8C71 U+7E4B # +0x8C72 U+7F6B # +0x8C73 U+830E # +0x8C74 U+834A # +0x8C75 U+86CD # +0x8C76 U+8A08 # +0x8C77 U+8A63 # +0x8C78 U+8B66 # +0x8C79 U+8EFD # +0x8C7A U+981A # +0x8C7B U+9D8F # +0x8C7C U+82B8 # +0x8C7D U+8FCE # +0x8C7E U+9BE8 # +0x8C80 U+5287 # +0x8C81 U+621F # +0x8C82 U+6483 # +0x8C83 U+6FC0 # +0x8C84 U+9699 # +0x8C85 U+6841 # +0x8C86 U+5091 # +0x8C87 U+6B20 # +0x8C88 U+6C7A # +0x8C89 U+6F54 # +0x8C8A U+7A74 # +0x8C8B U+7D50 # +0x8C8C U+8840 # +0x8C8D U+8A23 # +0x8C8E U+6708 # +0x8C8F U+4EF6 # +0x8C90 U+5039 # +0x8C91 U+5026 # +0x8C92 U+5065 # +0x8C93 U+517C # +0x8C94 U+5238 # +0x8C95 U+5263 # +0x8C96 U+55A7 # +0x8C97 U+570F # +0x8C98 U+5805 # +0x8C99 U+5ACC # +0x8C9A U+5EFA # +0x8C9B U+61B2 # +0x8C9C U+61F8 # +0x8C9D U+62F3 # +0x8C9E U+6372 # +0x8C9F U+691C # +0x8CA0 U+6A29 # +0x8CA1 U+727D # +0x8CA2 U+72AC # +0x8CA3 U+732E # +0x8CA4 U+7814 # +0x8CA5 U+786F # +0x8CA6 U+7D79 # +0x8CA7 U+770C # +0x8CA8 U+80A9 # +0x8CA9 U+898B # +0x8CAA U+8B19 # +0x8CAB U+8CE2 # +0x8CAC U+8ED2 # +0x8CAD U+9063 # +0x8CAE U+9375 # +0x8CAF U+967A # +0x8CB0 U+9855 # +0x8CB1 U+9A13 # +0x8CB2 U+9E78 # +0x8CB3 U+5143 # +0x8CB4 U+539F # +0x8CB5 U+53B3 # +0x8CB6 U+5E7B # +0x8CB7 U+5F26 # +0x8CB8 U+6E1B # +0x8CB9 U+6E90 # +0x8CBA U+7384 # +0x8CBB U+73FE # +0x8CBC U+7D43 # +0x8CBD U+8237 # +0x8CBE U+8A00 # +0x8CBF U+8AFA # +0x8CC0 U+9650 # +0x8CC1 U+4E4E # +0x8CC2 U+500B # +0x8CC3 U+53E4 # +0x8CC4 U+547C # +0x8CC5 U+56FA # +0x8CC6 U+59D1 # +0x8CC7 U+5B64 # +0x8CC8 U+5DF1 # +0x8CC9 U+5EAB # +0x8CCA U+5F27 # +0x8CCB U+6238 # +0x8CCC U+6545 # +0x8CCD U+67AF # +0x8CCE U+6E56 # +0x8CCF U+72D0 # +0x8CD0 U+7CCA # +0x8CD1 U+88B4 # +0x8CD2 U+80A1 # +0x8CD3 U+80E1 # +0x8CD4 U+83F0 # +0x8CD5 U+864E # +0x8CD6 U+8A87 # +0x8CD7 U+8DE8 # +0x8CD8 U+9237 # +0x8CD9 U+96C7 # +0x8CDA U+9867 # +0x8CDB U+9F13 # +0x8CDC U+4E94 # +0x8CDD U+4E92 # +0x8CDE U+4F0D # +0x8CDF U+5348 # +0x8CE0 U+5449 # +0x8CE1 U+543E # +0x8CE2 U+5A2F # +0x8CE3 U+5F8C # +0x8CE4 U+5FA1 # +0x8CE5 U+609F # +0x8CE6 U+68A7 # +0x8CE7 U+6A8E # +0x8CE8 U+745A # +0x8CE9 U+7881 # +0x8CEA U+8A9E # +0x8CEB U+8AA4 # +0x8CEC U+8B77 # +0x8CED U+9190 # +0x8CEE U+4E5E # +0x8CEF U+9BC9 # +0x8CF0 U+4EA4 # +0x8CF1 U+4F7C # +0x8CF2 U+4FAF # +0x8CF3 U+5019 # +0x8CF4 U+5016 # +0x8CF5 U+5149 # +0x8CF6 U+516C # +0x8CF7 U+529F # +0x8CF8 U+52B9 # +0x8CF9 U+52FE # +0x8CFA U+539A # +0x8CFB U+53E3 # +0x8CFC U+5411 # +0x8D40 U+540E # +0x8D41 U+5589 # +0x8D42 U+5751 # +0x8D43 U+57A2 # +0x8D44 U+597D # +0x8D45 U+5B54 # +0x8D46 U+5B5D # +0x8D47 U+5B8F # +0x8D48 U+5DE5 # +0x8D49 U+5DE7 # +0x8D4A U+5DF7 # +0x8D4B U+5E78 # +0x8D4C U+5E83 # +0x8D4D U+5E9A # +0x8D4E U+5EB7 # +0x8D4F U+5F18 # +0x8D50 U+6052 # +0x8D51 U+614C # +0x8D52 U+6297 # +0x8D53 U+62D8 # +0x8D54 U+63A7 # +0x8D55 U+653B # +0x8D56 U+6602 # +0x8D57 U+6643 # +0x8D58 U+66F4 # +0x8D59 U+676D # +0x8D5A U+6821 # +0x8D5B U+6897 # +0x8D5C U+69CB # +0x8D5D U+6C5F # +0x8D5E U+6D2A # +0x8D5F U+6D69 # +0x8D60 U+6E2F # +0x8D61 U+6E9D # +0x8D62 U+7532 # +0x8D63 U+7687 # +0x8D64 U+786C # +0x8D65 U+7A3F # +0x8D66 U+7CE0 # +0x8D67 U+7D05 # +0x8D68 U+7D18 # +0x8D69 U+7D5E # +0x8D6A U+7DB1 # +0x8D6B U+8015 # +0x8D6C U+8003 # +0x8D6D U+80AF # +0x8D6E U+80B1 # +0x8D6F U+8154 # +0x8D70 U+818F # +0x8D71 U+822A # +0x8D72 U+8352 # +0x8D73 U+884C # +0x8D74 U+8861 # +0x8D75 U+8B1B # +0x8D76 U+8CA2 # +0x8D77 U+8CFC # +0x8D78 U+90CA # +0x8D79 U+9175 # +0x8D7A U+9271 # +0x8D7B U+783F # +0x8D7C U+92FC # +0x8D7D U+95A4 # +0x8D7E U+964D # +0x8D80 U+9805 # +0x8D81 U+9999 # +0x8D82 U+9AD8 # +0x8D83 U+9D3B # +0x8D84 U+525B # +0x8D85 U+52AB # +0x8D86 U+53F7 # +0x8D87 U+5408 # +0x8D88 U+58D5 # +0x8D89 U+62F7 # +0x8D8A U+6FE0 # +0x8D8B U+8C6A # +0x8D8C U+8F5F # +0x8D8D U+9EB9 # +0x8D8E U+514B # +0x8D8F U+523B # +0x8D90 U+544A # +0x8D91 U+56FD # +0x8D92 U+7A40 # +0x8D93 U+9177 # +0x8D94 U+9D60 # +0x8D95 U+9ED2 # +0x8D96 U+7344 # +0x8D97 U+6F09 # +0x8D98 U+8170 # +0x8D99 U+7511 # +0x8D9A U+5FFD # +0x8D9B U+60DA # +0x8D9C U+9AA8 # +0x8D9D U+72DB # +0x8D9E U+8FBC # +0x8D9F U+6B64 # +0x8DA0 U+9803 # +0x8DA1 U+4ECA # +0x8DA2 U+56F0 # +0x8DA3 U+5764 # +0x8DA4 U+58BE # +0x8DA5 U+5A5A # +0x8DA6 U+6068 # +0x8DA7 U+61C7 # +0x8DA8 U+660F # +0x8DA9 U+6606 # +0x8DAA U+6839 # +0x8DAB U+68B1 # +0x8DAC U+6DF7 # +0x8DAD U+75D5 # +0x8DAE U+7D3A # +0x8DAF U+826E # +0x8DB0 U+9B42 # +0x8DB1 U+4E9B # +0x8DB2 U+4F50 # +0x8DB3 U+53C9 # +0x8DB4 U+5506 # +0x8DB5 U+5D6F # +0x8DB6 U+5DE6 # +0x8DB7 U+5DEE # +0x8DB8 U+67FB # +0x8DB9 U+6C99 # +0x8DBA U+7473 # +0x8DBB U+7802 # +0x8DBC U+8A50 # +0x8DBD U+9396 # +0x8DBE U+88DF # +0x8DBF U+5750 # +0x8DC0 U+5EA7 # +0x8DC1 U+632B # +0x8DC2 U+50B5 # +0x8DC3 U+50AC # +0x8DC4 U+518D # +0x8DC5 U+6700 # +0x8DC6 U+54C9 # +0x8DC7 U+585E # +0x8DC8 U+59BB # +0x8DC9 U+5BB0 # +0x8DCA U+5F69 # +0x8DCB U+624D # +0x8DCC U+63A1 # +0x8DCD U+683D # +0x8DCE U+6B73 # +0x8DCF U+6E08 # +0x8DD0 U+707D # +0x8DD1 U+91C7 # +0x8DD2 U+7280 # +0x8DD3 U+7815 # +0x8DD4 U+7826 # +0x8DD5 U+796D # +0x8DD6 U+658E # +0x8DD7 U+7D30 # +0x8DD8 U+83DC # +0x8DD9 U+88C1 # +0x8DDA U+8F09 # +0x8DDB U+969B # +0x8DDC U+5264 # +0x8DDD U+5728 # +0x8DDE U+6750 # +0x8DDF U+7F6A # +0x8DE0 U+8CA1 # +0x8DE1 U+51B4 # +0x8DE2 U+5742 # +0x8DE3 U+962A # +0x8DE4 U+583A # +0x8DE5 U+698A # +0x8DE6 U+80B4 # +0x8DE7 U+54B2 # +0x8DE8 U+5D0E # +0x8DE9 U+57FC # +0x8DEA U+7895 # +0x8DEB U+9DFA # +0x8DEC U+4F5C # +0x8DED U+524A # +0x8DEE U+548B # +0x8DEF U+643E # +0x8DF0 U+6628 # +0x8DF1 U+6714 # +0x8DF2 U+67F5 # +0x8DF3 U+7A84 # +0x8DF4 U+7B56 # +0x8DF5 U+7D22 # +0x8DF6 U+932F # +0x8DF7 U+685C # +0x8DF8 U+9BAD # +0x8DF9 U+7B39 # +0x8DFA U+5319 # +0x8DFB U+518A # +0x8DFC U+5237 # +0x8E40 U+5BDF # +0x8E41 U+62F6 # +0x8E42 U+64AE # +0x8E43 U+64E6 # +0x8E44 U+672D # +0x8E45 U+6BBA # +0x8E46 U+85A9 # +0x8E47 U+96D1 # +0x8E48 U+7690 # +0x8E49 U+9BD6 # +0x8E4A U+634C # +0x8E4B U+9306 # +0x8E4C U+9BAB # +0x8E4D U+76BF # +0x8E4E U+6652 # +0x8E4F U+4E09 # +0x8E50 U+5098 # +0x8E51 U+53C2 # +0x8E52 U+5C71 # +0x8E53 U+60E8 # +0x8E54 U+6492 # +0x8E55 U+6563 # +0x8E56 U+685F # +0x8E57 U+71E6 # +0x8E58 U+73CA # +0x8E59 U+7523 # +0x8E5A U+7B97 # +0x8E5B U+7E82 # +0x8E5C U+8695 # +0x8E5D U+8B83 # +0x8E5E U+8CDB # +0x8E5F U+9178 # +0x8E60 U+9910 # +0x8E61 U+65AC # +0x8E62 U+66AB # +0x8E63 U+6B8B # +0x8E64 U+4ED5 # +0x8E65 U+4ED4 # +0x8E66 U+4F3A # +0x8E67 U+4F7F # +0x8E68 U+523A # +0x8E69 U+53F8 # +0x8E6A U+53F2 # +0x8E6B U+55E3 # +0x8E6C U+56DB # +0x8E6D U+58EB # +0x8E6E U+59CB # +0x8E6F U+59C9 # +0x8E70 U+59FF # +0x8E71 U+5B50 # +0x8E72 U+5C4D # +0x8E73 U+5E02 # +0x8E74 U+5E2B # +0x8E75 U+5FD7 # +0x8E76 U+601D # +0x8E77 U+6307 # +0x8E78 U+652F # +0x8E79 U+5B5C # +0x8E7A U+65AF # +0x8E7B U+65BD # +0x8E7C U+65E8 # +0x8E7D U+679D # +0x8E7E U+6B62 # +0x8E80 U+6B7B # +0x8E81 U+6C0F # +0x8E82 U+7345 # +0x8E83 U+7949 # +0x8E84 U+79C1 # +0x8E85 U+7CF8 # +0x8E86 U+7D19 # +0x8E87 U+7D2B # +0x8E88 U+80A2 # +0x8E89 U+8102 # +0x8E8A U+81F3 # +0x8E8B U+8996 # +0x8E8C U+8A5E # +0x8E8D U+8A69 # +0x8E8E U+8A66 # +0x8E8F U+8A8C # +0x8E90 U+8AEE # +0x8E91 U+8CC7 # +0x8E92 U+8CDC # +0x8E93 U+96CC # +0x8E94 U+98FC # +0x8E95 U+6B6F # +0x8E96 U+4E8B # +0x8E97 U+4F3C # +0x8E98 U+4F8D # +0x8E99 U+5150 # +0x8E9A U+5B57 # +0x8E9B U+5BFA # +0x8E9C U+6148 # +0x8E9D U+6301 # +0x8E9E U+6642 # +0x8E9F U+6B21 # +0x8EA0 U+6ECB # +0x8EA1 U+6CBB # +0x8EA2 U+723E # +0x8EA3 U+74BD # +0x8EA4 U+75D4 # +0x8EA5 U+78C1 # +0x8EA6 U+793A # +0x8EA7 U+800C # +0x8EA8 U+8033 # +0x8EA9 U+81EA # +0x8EAA U+8494 # +0x8EAB U+8F9E # +0x8EAC U+6C50 # +0x8EAD U+9E7F # +0x8EAE U+5F0F # +0x8EAF U+8B58 # +0x8EB0 U+9D2B # +0x8EB1 U+7AFA # +0x8EB2 U+8EF8 # +0x8EB3 U+5B8D # +0x8EB4 U+96EB # +0x8EB5 U+4E03 # +0x8EB6 U+53F1 # +0x8EB7 U+57F7 # +0x8EB8 U+5931 # +0x8EB9 U+5AC9 # +0x8EBA U+5BA4 # +0x8EBB U+6089 # +0x8EBC U+6E7F # +0x8EBD U+6F06 # +0x8EBE U+75BE # +0x8EBF U+8CEA # +0x8EC0 U+5B9F # +0x8EC1 U+8500 # +0x8EC2 U+7BE0 # +0x8EC3 U+5072 # +0x8EC4 U+67F4 # +0x8EC5 U+829D # +0x8EC6 U+5C61 # +0x8EC7 U+854A # +0x8EC8 U+7E1E # +0x8EC9 U+820E # +0x8ECA U+5199 # +0x8ECB U+5C04 # +0x8ECC U+6368 # +0x8ECD U+8D66 # +0x8ECE U+659C # +0x8ECF U+716E # +0x8ED0 U+793E # +0x8ED1 U+7D17 # +0x8ED2 U+8005 # +0x8ED3 U+8B1D # +0x8ED4 U+8ECA # +0x8ED5 U+906E # +0x8ED6 U+86C7 # +0x8ED7 U+90AA # +0x8ED8 U+501F # +0x8ED9 U+52FA # +0x8EDA U+5C3A # +0x8EDB U+6753 # +0x8EDC U+707C # +0x8EDD U+7235 # +0x8EDE U+914C # +0x8EDF U+91C8 # +0x8EE0 U+932B # +0x8EE1 U+82E5 # +0x8EE2 U+5BC2 # +0x8EE3 U+5F31 # +0x8EE4 U+60F9 # +0x8EE5 U+4E3B # +0x8EE6 U+53D6 # +0x8EE7 U+5B88 # +0x8EE8 U+624B # +0x8EE9 U+6731 # +0x8EEA U+6B8A # +0x8EEB U+72E9 # +0x8EEC U+73E0 # +0x8EED U+7A2E # +0x8EEE U+816B # +0x8EEF U+8DA3 # +0x8EF0 U+9152 # +0x8EF1 U+9996 # +0x8EF2 U+5112 # +0x8EF3 U+53D7 # +0x8EF4 U+546A # +0x8EF5 U+5BFF # +0x8EF6 U+6388 # +0x8EF7 U+6A39 # +0x8EF8 U+7DAC # +0x8EF9 U+9700 # +0x8EFA U+56DA # +0x8EFB U+53CE # +0x8EFC U+5468 # +0x8F40 U+5B97 # +0x8F41 U+5C31 # +0x8F42 U+5DDE # +0x8F43 U+4FEE # +0x8F44 U+6101 # +0x8F45 U+62FE # +0x8F46 U+6D32 # +0x8F47 U+79C0 # +0x8F48 U+79CB # +0x8F49 U+7D42 # +0x8F4A U+7E4D # +0x8F4B U+7FD2 # +0x8F4C U+81ED # +0x8F4D U+821F # +0x8F4E U+8490 # +0x8F4F U+8846 # +0x8F50 U+8972 # +0x8F51 U+8B90 # +0x8F52 U+8E74 # +0x8F53 U+8F2F # +0x8F54 U+9031 # +0x8F55 U+914B # +0x8F56 U+916C # +0x8F57 U+96C6 # +0x8F58 U+919C # +0x8F59 U+4EC0 # +0x8F5A U+4F4F # +0x8F5B U+5145 # +0x8F5C U+5341 # +0x8F5D U+5F93 # +0x8F5E U+620E # +0x8F5F U+67D4 # +0x8F60 U+6C41 # +0x8F61 U+6E0B # +0x8F62 U+7363 # +0x8F63 U+7E26 # +0x8F64 U+91CD # +0x8F65 U+9283 # +0x8F66 U+53D4 # +0x8F67 U+5919 # +0x8F68 U+5BBF # +0x8F69 U+6DD1 # +0x8F6A U+795D # +0x8F6B U+7E2E # +0x8F6C U+7C9B # +0x8F6D U+587E # +0x8F6E U+719F # +0x8F6F U+51FA # +0x8F70 U+8853 # +0x8F71 U+8FF0 # +0x8F72 U+4FCA # +0x8F73 U+5CFB # +0x8F74 U+6625 # +0x8F75 U+77AC # +0x8F76 U+7AE3 # +0x8F77 U+821C # +0x8F78 U+99FF # +0x8F79 U+51C6 # +0x8F7A U+5FAA # +0x8F7B U+65EC # +0x8F7C U+696F # +0x8F7D U+6B89 # +0x8F7E U+6DF3 # +0x8F80 U+6E96 # +0x8F81 U+6F64 # +0x8F82 U+76FE # +0x8F83 U+7D14 # +0x8F84 U+5DE1 # +0x8F85 U+9075 # +0x8F86 U+9187 # +0x8F87 U+9806 # +0x8F88 U+51E6 # +0x8F89 U+521D # +0x8F8A U+6240 # +0x8F8B U+6691 # +0x8F8C U+66D9 # +0x8F8D U+6E1A # +0x8F8E U+5EB6 # +0x8F8F U+7DD2 # +0x8F90 U+7F72 # +0x8F91 U+66F8 # +0x8F92 U+85AF # +0x8F93 U+85F7 # +0x8F94 U+8AF8 # +0x8F95 U+52A9 # +0x8F96 U+53D9 # +0x8F97 U+5973 # +0x8F98 U+5E8F # +0x8F99 U+5F90 # +0x8F9A U+6055 # +0x8F9B U+92E4 # +0x8F9C U+9664 # +0x8F9D U+50B7 # +0x8F9E U+511F # +0x8F9F U+52DD # +0x8FA0 U+5320 # +0x8FA1 U+5347 # +0x8FA2 U+53EC # +0x8FA3 U+54E8 # +0x8FA4 U+5546 # +0x8FA5 U+5531 # +0x8FA6 U+5617 # +0x8FA7 U+5968 # +0x8FA8 U+59BE # +0x8FA9 U+5A3C # +0x8FAA U+5BB5 # +0x8FAB U+5C06 # +0x8FAC U+5C0F # +0x8FAD U+5C11 # +0x8FAE U+5C1A # +0x8FAF U+5E84 # +0x8FB0 U+5E8A # +0x8FB1 U+5EE0 # +0x8FB2 U+5F70 # +0x8FB3 U+627F # +0x8FB4 U+6284 # +0x8FB5 U+62DB # +0x8FB6 U+638C # +0x8FB7 U+6377 # +0x8FB8 U+6607 # +0x8FB9 U+660C # +0x8FBA U+662D # +0x8FBB U+6676 # +0x8FBC U+677E # +0x8FBD U+68A2 # +0x8FBE U+6A1F # +0x8FBF U+6A35 # +0x8FC0 U+6CBC # +0x8FC1 U+6D88 # +0x8FC2 U+6E09 # +0x8FC3 U+6E58 # +0x8FC4 U+713C # +0x8FC5 U+7126 # +0x8FC6 U+7167 # +0x8FC7 U+75C7 # +0x8FC8 U+7701 # +0x8FC9 U+785D # +0x8FCA U+7901 # +0x8FCB U+7965 # +0x8FCC U+79F0 # +0x8FCD U+7AE0 # +0x8FCE U+7B11 # +0x8FCF U+7CA7 # +0x8FD0 U+7D39 # +0x8FD1 U+8096 # +0x8FD2 U+83D6 # +0x8FD3 U+848B # +0x8FD4 U+8549 # +0x8FD5 U+885D # +0x8FD6 U+88F3 # +0x8FD7 U+8A1F # +0x8FD8 U+8A3C # +0x8FD9 U+8A54 # +0x8FDA U+8A73 # +0x8FDB U+8C61 # +0x8FDC U+8CDE # +0x8FDD U+91A4 # +0x8FDE U+9266 # +0x8FDF U+937E # +0x8FE0 U+9418 # +0x8FE1 U+969C # +0x8FE2 U+9798 # +0x8FE3 U+4E0A # +0x8FE4 U+4E08 # +0x8FE5 U+4E1E # +0x8FE6 U+4E57 # +0x8FE7 U+5197 # +0x8FE8 U+5270 # +0x8FE9 U+57CE # +0x8FEA U+5834 # +0x8FEB U+58CC # +0x8FEC U+5B22 # +0x8FED U+5E38 # +0x8FEE U+60C5 # +0x8FEF U+64FE # +0x8FF0 U+6761 # +0x8FF1 U+6756 # +0x8FF2 U+6D44 # +0x8FF3 U+72B6 # +0x8FF4 U+7573 # +0x8FF5 U+7A63 # +0x8FF6 U+84B8 # +0x8FF7 U+8B72 # +0x8FF8 U+91B8 # +0x8FF9 U+9320 # +0x8FFA U+5631 # +0x8FFB U+57F4 # +0x8FFC U+98FE # +0x9040 U+62ED # +0x9041 U+690D # +0x9042 U+6B96 # +0x9043 U+71ED # +0x9044 U+7E54 # +0x9045 U+8077 # +0x9046 U+8272 # +0x9047 U+89E6 # +0x9048 U+98DF # +0x9049 U+8755 # +0x904A U+8FB1 # +0x904B U+5C3B # +0x904C U+4F38 # +0x904D U+4FE1 # +0x904E U+4FB5 # +0x904F U+5507 # +0x9050 U+5A20 # +0x9051 U+5BDD # +0x9052 U+5BE9 # +0x9053 U+5FC3 # +0x9054 U+614E # +0x9055 U+632F # +0x9056 U+65B0 # +0x9057 U+664B # +0x9058 U+68EE # +0x9059 U+699B # +0x905A U+6D78 # +0x905B U+6DF1 # +0x905C U+7533 # +0x905D U+75B9 # +0x905E U+771F # +0x905F U+795E # +0x9060 U+79E6 # +0x9061 U+7D33 # +0x9062 U+81E3 # +0x9063 U+82AF # +0x9064 U+85AA # +0x9065 U+89AA # +0x9066 U+8A3A # +0x9067 U+8EAB # +0x9068 U+8F9B # +0x9069 U+9032 # +0x906A U+91DD # +0x906B U+9707 # +0x906C U+4EBA # +0x906D U+4EC1 # +0x906E U+5203 # +0x906F U+5875 # +0x9070 U+58EC # +0x9071 U+5C0B # +0x9072 U+751A # +0x9073 U+5C3D # +0x9074 U+814E # +0x9075 U+8A0A # +0x9076 U+8FC5 # +0x9077 U+9663 # +0x9078 U+976D # +0x9079 U+7B25 # +0x907A U+8ACF # +0x907B U+9808 # +0x907C U+9162 # +0x907D U+56F3 # +0x907E U+53A8 # +0x9080 U+9017 # +0x9081 U+5439 # +0x9082 U+5782 # +0x9083 U+5E25 # +0x9084 U+63A8 # +0x9085 U+6C34 # +0x9086 U+708A # +0x9087 U+7761 # +0x9088 U+7C8B # +0x9089 U+7FE0 # +0x908A U+8870 # +0x908B U+9042 # +0x908C U+9154 # +0x908D U+9310 # +0x908E U+9318 # +0x908F U+968F # +0x9090 U+745E # +0x9091 U+9AC4 # +0x9092 U+5D07 # +0x9093 U+5D69 # +0x9094 U+6570 # +0x9095 U+67A2 # +0x9096 U+8DA8 # +0x9097 U+96DB # +0x9098 U+636E # +0x9099 U+6749 # +0x909A U+6919 # +0x909B U+83C5 # +0x909C U+9817 # +0x909D U+96C0 # +0x909E U+88FE # +0x909F U+6F84 # +0x90A0 U+647A # +0x90A1 U+5BF8 # +0x90A2 U+4E16 # +0x90A3 U+702C # +0x90A4 U+755D # +0x90A5 U+662F # +0x90A6 U+51C4 # +0x90A7 U+5236 # +0x90A8 U+52E2 # +0x90A9 U+59D3 # +0x90AA U+5F81 # +0x90AB U+6027 # +0x90AC U+6210 # +0x90AD U+653F # +0x90AE U+6574 # +0x90AF U+661F # +0x90B0 U+6674 # +0x90B1 U+68F2 # +0x90B2 U+6816 # +0x90B3 U+6B63 # +0x90B4 U+6E05 # +0x90B5 U+7272 # +0x90B6 U+751F # +0x90B7 U+76DB # +0x90B8 U+7CBE # +0x90B9 U+8056 # +0x90BA U+58F0 # +0x90BB U+88FD # +0x90BC U+897F # +0x90BD U+8AA0 # +0x90BE U+8A93 # +0x90BF U+8ACB # +0x90C0 U+901D # +0x90C1 U+9192 # +0x90C2 U+9752 # +0x90C3 U+9759 # +0x90C4 U+6589 # +0x90C5 U+7A0E # +0x90C6 U+8106 # +0x90C7 U+96BB # +0x90C8 U+5E2D # +0x90C9 U+60DC # +0x90CA U+621A # +0x90CB U+65A5 # +0x90CC U+6614 # +0x90CD U+6790 # +0x90CE U+77F3 # +0x90CF U+7A4D # +0x90D0 U+7C4D # +0x90D1 U+7E3E # +0x90D2 U+810A # +0x90D3 U+8CAC # +0x90D4 U+8D64 # +0x90D5 U+8DE1 # +0x90D6 U+8E5F # +0x90D7 U+78A9 # +0x90D8 U+5207 # +0x90D9 U+62D9 # +0x90DA U+63A5 # +0x90DB U+6442 # +0x90DC U+6298 # +0x90DD U+8A2D # +0x90DE U+7A83 # +0x90DF U+7BC0 # +0x90E0 U+8AAC # +0x90E1 U+96EA # +0x90E2 U+7D76 # +0x90E3 U+820C # +0x90E4 U+8749 # +0x90E5 U+4ED9 # +0x90E6 U+5148 # +0x90E7 U+5343 # +0x90E8 U+5360 # +0x90E9 U+5BA3 # +0x90EA U+5C02 # +0x90EB U+5C16 # +0x90EC U+5DDD # +0x90ED U+6226 # +0x90EE U+6247 # +0x90EF U+64B0 # +0x90F0 U+6813 # +0x90F1 U+6834 # +0x90F2 U+6CC9 # +0x90F3 U+6D45 # +0x90F4 U+6D17 # +0x90F5 U+67D3 # +0x90F6 U+6F5C # +0x90F7 U+714E # +0x90F8 U+717D # +0x90F9 U+65CB # +0x90FA U+7A7F # +0x90FB U+7BAD # +0x90FC U+7DDA # +0x9140 U+7E4A # +0x9141 U+7FA8 # +0x9142 U+817A # +0x9143 U+821B # +0x9144 U+8239 # +0x9145 U+85A6 # +0x9146 U+8A6E # +0x9147 U+8CCE # +0x9148 U+8DF5 # +0x9149 U+9078 # +0x914A U+9077 # +0x914B U+92AD # +0x914C U+9291 # +0x914D U+9583 # +0x914E U+9BAE # +0x914F U+524D # +0x9150 U+5584 # +0x9151 U+6F38 # +0x9152 U+7136 # +0x9153 U+5168 # +0x9154 U+7985 # +0x9155 U+7E55 # +0x9156 U+81B3 # +0x9157 U+7CCE # +0x9158 U+564C # +0x9159 U+5851 # +0x915A U+5CA8 # +0x915B U+63AA # +0x915C U+66FE # +0x915D U+66FD # +0x915E U+695A # +0x915F U+72D9 # +0x9160 U+758F # +0x9161 U+758E # +0x9162 U+790E # +0x9163 U+7956 # +0x9164 U+79DF # +0x9165 U+7C97 # +0x9166 U+7D20 # +0x9167 U+7D44 # +0x9168 U+8607 # +0x9169 U+8A34 # +0x916A U+963B # +0x916B U+9061 # +0x916C U+9F20 # +0x916D U+50E7 # +0x916E U+5275 # +0x916F U+53CC # +0x9170 U+53E2 # +0x9171 U+5009 # +0x9172 U+55AA # +0x9173 U+58EE # +0x9174 U+594F # +0x9175 U+723D # +0x9176 U+5B8B # +0x9177 U+5C64 # +0x9178 U+531D # +0x9179 U+60E3 # +0x917A U+60F3 # +0x917B U+635C # +0x917C U+6383 # +0x917D U+633F # +0x917E U+63BB # +0x9180 U+64CD # +0x9181 U+65E9 # +0x9182 U+66F9 # +0x9183 U+5DE3 # +0x9184 U+69CD # +0x9185 U+69FD # +0x9186 U+6F15 # +0x9187 U+71E5 # +0x9188 U+4E89 # +0x9189 U+75E9 # +0x918A U+76F8 # +0x918B U+7A93 # +0x918C U+7CDF # +0x918D U+7DCF # +0x918E U+7D9C # +0x918F U+8061 # +0x9190 U+8349 # +0x9191 U+8358 # +0x9192 U+846C # +0x9193 U+84BC # +0x9194 U+85FB # +0x9195 U+88C5 # +0x9196 U+8D70 # +0x9197 U+9001 # +0x9198 U+906D # +0x9199 U+9397 # +0x919A U+971C # +0x919B U+9A12 # +0x919C U+50CF # +0x919D U+5897 # +0x919E U+618E # +0x919F U+81D3 # +0x91A0 U+8535 # +0x91A1 U+8D08 # +0x91A2 U+9020 # +0x91A3 U+4FC3 # +0x91A4 U+5074 # +0x91A5 U+5247 # +0x91A6 U+5373 # +0x91A7 U+606F # +0x91A8 U+6349 # +0x91A9 U+675F # +0x91AA U+6E2C # +0x91AB U+8DB3 # +0x91AC U+901F # +0x91AD U+4FD7 # +0x91AE U+5C5E # +0x91AF U+8CCA # +0x91B0 U+65CF # +0x91B1 U+7D9A # +0x91B2 U+5352 # +0x91B3 U+8896 # +0x91B4 U+5176 # +0x91B5 U+63C3 # +0x91B6 U+5B58 # +0x91B7 U+5B6B # +0x91B8 U+5C0A # +0x91B9 U+640D # +0x91BA U+6751 # +0x91BB U+905C # +0x91BC U+4ED6 # +0x91BD U+591A # +0x91BE U+592A # +0x91BF U+6C70 # +0x91C0 U+8A51 # +0x91C1 U+553E # +0x91C2 U+5815 # +0x91C3 U+59A5 # +0x91C4 U+60F0 # +0x91C5 U+6253 # +0x91C6 U+67C1 # +0x91C7 U+8235 # +0x91C8 U+6955 # +0x91C9 U+9640 # +0x91CA U+99C4 # +0x91CB U+9A28 # +0x91CC U+4F53 # +0x91CD U+5806 # +0x91CE U+5BFE # +0x91CF U+8010 # +0x91D0 U+5CB1 # +0x91D1 U+5E2F # +0x91D2 U+5F85 # +0x91D3 U+6020 # +0x91D4 U+614B # +0x91D5 U+6234 # +0x91D6 U+66FF # +0x91D7 U+6CF0 # +0x91D8 U+6EDE # +0x91D9 U+80CE # +0x91DA U+817F # +0x91DB U+82D4 # +0x91DC U+888B # +0x91DD U+8CB8 # +0x91DE U+9000 # +0x91DF U+902E # +0x91E0 U+968A # +0x91E1 U+9EDB # +0x91E2 U+9BDB # +0x91E3 U+4EE3 # +0x91E4 U+53F0 # +0x91E5 U+5927 # +0x91E6 U+7B2C # +0x91E7 U+918D # +0x91E8 U+984C # +0x91E9 U+9DF9 # +0x91EA U+6EDD # +0x91EB U+7027 # +0x91EC U+5353 # +0x91ED U+5544 # +0x91EE U+5B85 # +0x91EF U+6258 # +0x91F0 U+629E # +0x91F1 U+62D3 # +0x91F2 U+6CA2 # +0x91F3 U+6FEF # +0x91F4 U+7422 # +0x91F5 U+8A17 # +0x91F6 U+9438 # +0x91F7 U+6FC1 # +0x91F8 U+8AFE # +0x91F9 U+8338 # +0x91FA U+51E7 # +0x91FB U+86F8 # +0x91FC U+53EA # +0x9240 U+53E9 # +0x9241 U+4F46 # +0x9242 U+9054 # +0x9243 U+8FB0 # +0x9244 U+596A # +0x9245 U+8131 # +0x9246 U+5DFD # +0x9247 U+7AEA # +0x9248 U+8FBF # +0x9249 U+68DA # +0x924A U+8C37 # +0x924B U+72F8 # +0x924C U+9C48 # +0x924D U+6A3D # +0x924E U+8AB0 # +0x924F U+4E39 # +0x9250 U+5358 # +0x9251 U+5606 # +0x9252 U+5766 # +0x9253 U+62C5 # +0x9254 U+63A2 # +0x9255 U+65E6 # +0x9256 U+6B4E # +0x9257 U+6DE1 # +0x9258 U+6E5B # +0x9259 U+70AD # +0x925A U+77ED # +0x925B U+7AEF # +0x925C U+7BAA # +0x925D U+7DBB # +0x925E U+803D # +0x925F U+80C6 # +0x9260 U+86CB # +0x9261 U+8A95 # +0x9262 U+935B # +0x9263 U+56E3 # +0x9264 U+58C7 # +0x9265 U+5F3E # +0x9266 U+65AD # +0x9267 U+6696 # +0x9268 U+6A80 # +0x9269 U+6BB5 # +0x926A U+7537 # +0x926B U+8AC7 # +0x926C U+5024 # +0x926D U+77E5 # +0x926E U+5730 # +0x926F U+5F1B # +0x9270 U+6065 # +0x9271 U+667A # +0x9272 U+6C60 # +0x9273 U+75F4 # +0x9274 U+7A1A # +0x9275 U+7F6E # +0x9276 U+81F4 # +0x9277 U+8718 # +0x9278 U+9045 # +0x9279 U+99B3 # +0x927A U+7BC9 # +0x927B U+755C # +0x927C U+7AF9 # +0x927D U+7B51 # +0x927E U+84C4 # +0x9280 U+9010 # +0x9281 U+79E9 # +0x9282 U+7A92 # +0x9283 U+8336 # +0x9284 U+5AE1 # +0x9285 U+7740 # +0x9286 U+4E2D # +0x9287 U+4EF2 # +0x9288 U+5B99 # +0x9289 U+5FE0 # +0x928A U+62BD # +0x928B U+663C # +0x928C U+67F1 # +0x928D U+6CE8 # +0x928E U+866B # +0x928F U+8877 # +0x9290 U+8A3B # +0x9291 U+914E # +0x9292 U+92F3 # +0x9293 U+99D0 # +0x9294 U+6A17 # +0x9295 U+7026 # +0x9296 U+732A # +0x9297 U+82E7 # +0x9298 U+8457 # +0x9299 U+8CAF # +0x929A U+4E01 # +0x929B U+5146 # +0x929C U+51CB # +0x929D U+558B # +0x929E U+5BF5 # +0x929F U+5E16 # +0x92A0 U+5E33 # +0x92A1 U+5E81 # +0x92A2 U+5F14 # +0x92A3 U+5F35 # +0x92A4 U+5F6B # +0x92A5 U+5FB4 # +0x92A6 U+61F2 # +0x92A7 U+6311 # +0x92A8 U+66A2 # +0x92A9 U+671D # +0x92AA U+6F6E # +0x92AB U+7252 # +0x92AC U+753A # +0x92AD U+773A # +0x92AE U+8074 # +0x92AF U+8139 # +0x92B0 U+8178 # +0x92B1 U+8776 # +0x92B2 U+8ABF # +0x92B3 U+8ADC # +0x92B4 U+8D85 # +0x92B5 U+8DF3 # +0x92B6 U+929A # +0x92B7 U+9577 # +0x92B8 U+9802 # +0x92B9 U+9CE5 # +0x92BA U+52C5 # +0x92BB U+6357 # +0x92BC U+76F4 # +0x92BD U+6715 # +0x92BE U+6C88 # +0x92BF U+73CD # +0x92C0 U+8CC3 # +0x92C1 U+93AE # +0x92C2 U+9673 # +0x92C3 U+6D25 # +0x92C4 U+589C # +0x92C5 U+690E # +0x92C6 U+69CC # +0x92C7 U+8FFD # +0x92C8 U+939A # +0x92C9 U+75DB # +0x92CA U+901A # +0x92CB U+585A # +0x92CC U+6802 # +0x92CD U+63B4 # +0x92CE U+69FB # +0x92CF U+4F43 # +0x92D0 U+6F2C # +0x92D1 U+67D8 # +0x92D2 U+8FBB # +0x92D3 U+8526 # +0x92D4 U+7DB4 # +0x92D5 U+9354 # +0x92D6 U+693F # +0x92D7 U+6F70 # +0x92D8 U+576A # +0x92D9 U+58F7 # +0x92DA U+5B2C # +0x92DB U+7D2C # +0x92DC U+722A # +0x92DD U+540A # +0x92DE U+91E3 # +0x92DF U+9DB4 # +0x92E0 U+4EAD # +0x92E1 U+4F4E # +0x92E2 U+505C # +0x92E3 U+5075 # +0x92E4 U+5243 # +0x92E5 U+8C9E # +0x92E6 U+5448 # +0x92E7 U+5824 # +0x92E8 U+5B9A # +0x92E9 U+5E1D # +0x92EA U+5E95 # +0x92EB U+5EAD # +0x92EC U+5EF7 # +0x92ED U+5F1F # +0x92EE U+608C # +0x92EF U+62B5 # +0x92F0 U+633A # +0x92F1 U+63D0 # +0x92F2 U+68AF # +0x92F3 U+6C40 # +0x92F4 U+7887 # +0x92F5 U+798E # +0x92F6 U+7A0B # +0x92F7 U+7DE0 # +0x92F8 U+8247 # +0x92F9 U+8A02 # +0x92FA U+8AE6 # +0x92FB U+8E44 # +0x92FC U+9013 # +0x9340 U+90B8 # +0x9341 U+912D # +0x9342 U+91D8 # +0x9343 U+9F0E # +0x9344 U+6CE5 # +0x9345 U+6458 # +0x9346 U+64E2 # +0x9347 U+6575 # +0x9348 U+6EF4 # +0x9349 U+7684 # +0x934A U+7B1B # +0x934B U+9069 # +0x934C U+93D1 # +0x934D U+6EBA # +0x934E U+54F2 # +0x934F U+5FB9 # +0x9350 U+64A4 # +0x9351 U+8F4D # +0x9352 U+8FED # +0x9353 U+9244 # +0x9354 U+5178 # +0x9355 U+586B # +0x9356 U+5929 # +0x9357 U+5C55 # +0x9358 U+5E97 # +0x9359 U+6DFB # +0x935A U+7E8F # +0x935B U+751C # +0x935C U+8CBC # +0x935D U+8EE2 # +0x935E U+985B # +0x935F U+70B9 # +0x9360 U+4F1D # +0x9361 U+6BBF # +0x9362 U+6FB1 # +0x9363 U+7530 # +0x9364 U+96FB # +0x9365 U+514E # +0x9366 U+5410 # +0x9367 U+5835 # +0x9368 U+5857 # +0x9369 U+59AC # +0x936A U+5C60 # +0x936B U+5F92 # +0x936C U+6597 # +0x936D U+675C # +0x936E U+6E21 # +0x936F U+767B # +0x9370 U+83DF # +0x9371 U+8CED # +0x9372 U+9014 # +0x9373 U+90FD # +0x9374 U+934D # +0x9375 U+7825 # +0x9376 U+783A # +0x9377 U+52AA # +0x9378 U+5EA6 # +0x9379 U+571F # +0x937A U+5974 # +0x937B U+6012 # +0x937C U+5012 # +0x937D U+515A # +0x937E U+51AC # +0x9380 U+51CD # +0x9381 U+5200 # +0x9382 U+5510 # +0x9383 U+5854 # +0x9384 U+5858 # +0x9385 U+5957 # +0x9386 U+5B95 # +0x9387 U+5CF6 # +0x9388 U+5D8B # +0x9389 U+60BC # +0x938A U+6295 # +0x938B U+642D # +0x938C U+6771 # +0x938D U+6843 # +0x938E U+68BC # +0x938F U+68DF # +0x9390 U+76D7 # +0x9391 U+6DD8 # +0x9392 U+6E6F # +0x9393 U+6D9B # +0x9394 U+706F # +0x9395 U+71C8 # +0x9396 U+5F53 # +0x9397 U+75D8 # +0x9398 U+7977 # +0x9399 U+7B49 # +0x939A U+7B54 # +0x939B U+7B52 # +0x939C U+7CD6 # +0x939D U+7D71 # +0x939E U+5230 # +0x939F U+8463 # +0x93A0 U+8569 # +0x93A1 U+85E4 # +0x93A2 U+8A0E # +0x93A3 U+8B04 # +0x93A4 U+8C46 # +0x93A5 U+8E0F # +0x93A6 U+9003 # +0x93A7 U+900F # +0x93A8 U+9419 # +0x93A9 U+9676 # +0x93AA U+982D # +0x93AB U+9A30 # +0x93AC U+95D8 # +0x93AD U+50CD # +0x93AE U+52D5 # +0x93AF U+540C # +0x93B0 U+5802 # +0x93B1 U+5C0E # +0x93B2 U+61A7 # +0x93B3 U+649E # +0x93B4 U+6D1E # +0x93B5 U+77B3 # +0x93B6 U+7AE5 # +0x93B7 U+80F4 # +0x93B8 U+8404 # +0x93B9 U+9053 # +0x93BA U+9285 # +0x93BB U+5CE0 # +0x93BC U+9D07 # +0x93BD U+533F # +0x93BE U+5F97 # +0x93BF U+5FB3 # +0x93C0 U+6D9C # +0x93C1 U+7279 # +0x93C2 U+7763 # +0x93C3 U+79BF # +0x93C4 U+7BE4 # +0x93C5 U+6BD2 # +0x93C6 U+72EC # +0x93C7 U+8AAD # +0x93C8 U+6803 # +0x93C9 U+6A61 # +0x93CA U+51F8 # +0x93CB U+7A81 # +0x93CC U+6934 # +0x93CD U+5C4A # +0x93CE U+9CF6 # +0x93CF U+82EB # +0x93D0 U+5BC5 # +0x93D1 U+9149 # +0x93D2 U+701E # +0x93D3 U+5678 # +0x93D4 U+5C6F # +0x93D5 U+60C7 # +0x93D6 U+6566 # +0x93D7 U+6C8C # +0x93D8 U+8C5A # +0x93D9 U+9041 # +0x93DA U+9813 # +0x93DB U+5451 # +0x93DC U+66C7 # +0x93DD U+920D # +0x93DE U+5948 # +0x93DF U+90A3 # +0x93E0 U+5185 # +0x93E1 U+4E4D # +0x93E2 U+51EA # +0x93E3 U+8599 # +0x93E4 U+8B0E # +0x93E5 U+7058 # +0x93E6 U+637A # +0x93E7 U+934B # +0x93E8 U+6962 # +0x93E9 U+99B4 # +0x93EA U+7E04 # +0x93EB U+7577 # +0x93EC U+5357 # +0x93ED U+6960 # +0x93EE U+8EDF # +0x93EF U+96E3 # +0x93F0 U+6C5D # +0x93F1 U+4E8C # +0x93F2 U+5C3C # +0x93F3 U+5F10 # +0x93F4 U+8FE9 # +0x93F5 U+5302 # +0x93F6 U+8CD1 # +0x93F7 U+8089 # +0x93F8 U+8679 # +0x93F9 U+5EFF # +0x93FA U+65E5 # +0x93FB U+4E73 # +0x93FC U+5165 # +0x9440 U+5982 # +0x9441 U+5C3F # +0x9442 U+97EE # +0x9443 U+4EFB # +0x9444 U+598A # +0x9445 U+5FCD # +0x9446 U+8A8D # +0x9447 U+6FE1 # +0x9448 U+79B0 # +0x9449 U+7962 # +0x944A U+5BE7 # +0x944B U+8471 # +0x944C U+732B # +0x944D U+71B1 # +0x944E U+5E74 # +0x944F U+5FF5 # +0x9450 U+637B # +0x9451 U+649A # +0x9452 U+71C3 # +0x9453 U+7C98 # +0x9454 U+4E43 # +0x9455 U+5EFC # +0x9456 U+4E4B # +0x9457 U+57DC # +0x9458 U+56A2 # +0x9459 U+60A9 # +0x945A U+6FC3 # +0x945B U+7D0D # +0x945C U+80FD # +0x945D U+8133 # +0x945E U+81BF # +0x945F U+8FB2 # +0x9460 U+8997 # +0x9461 U+86A4 # +0x9462 U+5DF4 # +0x9463 U+628A # +0x9464 U+64AD # +0x9465 U+8987 # +0x9466 U+6777 # +0x9467 U+6CE2 # +0x9468 U+6D3E # +0x9469 U+7436 # +0x946A U+7834 # +0x946B U+5A46 # +0x946C U+7F75 # +0x946D U+82AD # +0x946E U+99AC # +0x946F U+4FF3 # +0x9470 U+5EC3 # +0x9471 U+62DD # +0x9472 U+6392 # +0x9473 U+6557 # +0x9474 U+676F # +0x9475 U+76C3 # +0x9476 U+724C # +0x9477 U+80CC # +0x9478 U+80BA # +0x9479 U+8F29 # +0x947A U+914D # +0x947B U+500D # +0x947C U+57F9 # +0x947D U+5A92 # +0x947E U+6885 # +0x9480 U+6973 # +0x9481 U+7164 # +0x9482 U+72FD # +0x9483 U+8CB7 # +0x9484 U+58F2 # +0x9485 U+8CE0 # +0x9486 U+966A # +0x9487 U+9019 # +0x9488 U+877F # +0x9489 U+79E4 # +0x948A U+77E7 # +0x948B U+8429 # +0x948C U+4F2F # +0x948D U+5265 # +0x948E U+535A # +0x948F U+62CD # +0x9490 U+67CF # +0x9491 U+6CCA # +0x9492 U+767D # +0x9493 U+7B94 # +0x9494 U+7C95 # +0x9495 U+8236 # +0x9496 U+8584 # +0x9497 U+8FEB # +0x9498 U+66DD # +0x9499 U+6F20 # +0x949A U+7206 # +0x949B U+7E1B # +0x949C U+83AB # +0x949D U+99C1 # +0x949E U+9EA6 # +0x949F U+51FD # +0x94A0 U+7BB1 # +0x94A1 U+7872 # +0x94A2 U+7BB8 # +0x94A3 U+8087 # +0x94A4 U+7B48 # +0x94A5 U+6AE8 # +0x94A6 U+5E61 # +0x94A7 U+808C # +0x94A8 U+7551 # +0x94A9 U+7560 # +0x94AA U+516B # +0x94AB U+9262 # +0x94AC U+6E8C # +0x94AD U+767A # +0x94AE U+9197 # +0x94AF U+9AEA # +0x94B0 U+4F10 # +0x94B1 U+7F70 # +0x94B2 U+629C # +0x94B3 U+7B4F # +0x94B4 U+95A5 # +0x94B5 U+9CE9 # +0x94B6 U+567A # +0x94B7 U+5859 # +0x94B8 U+86E4 # +0x94B9 U+96BC # +0x94BA U+4F34 # +0x94BB U+5224 # +0x94BC U+534A # +0x94BD U+53CD # +0x94BE U+53DB # +0x94BF U+5E06 # +0x94C0 U+642C # +0x94C1 U+6591 # +0x94C2 U+677F # +0x94C3 U+6C3E # +0x94C4 U+6C4E # +0x94C5 U+7248 # +0x94C6 U+72AF # +0x94C7 U+73ED # +0x94C8 U+7554 # +0x94C9 U+7E41 # +0x94CA U+822C # +0x94CB U+85E9 # +0x94CC U+8CA9 # +0x94CD U+7BC4 # +0x94CE U+91C6 # +0x94CF U+7169 # +0x94D0 U+9812 # +0x94D1 U+98EF # +0x94D2 U+633D # +0x94D3 U+6669 # +0x94D4 U+756A # +0x94D5 U+76E4 # +0x94D6 U+78D0 # +0x94D7 U+8543 # +0x94D8 U+86EE # +0x94D9 U+532A # +0x94DA U+5351 # +0x94DB U+5426 # +0x94DC U+5983 # +0x94DD U+5E87 # +0x94DE U+5F7C # +0x94DF U+60B2 # +0x94E0 U+6249 # +0x94E1 U+6279 # +0x94E2 U+62AB # +0x94E3 U+6590 # +0x94E4 U+6BD4 # +0x94E5 U+6CCC # +0x94E6 U+75B2 # +0x94E7 U+76AE # +0x94E8 U+7891 # +0x94E9 U+79D8 # +0x94EA U+7DCB # +0x94EB U+7F77 # +0x94EC U+80A5 # +0x94ED U+88AB # +0x94EE U+8AB9 # +0x94EF U+8CBB # +0x94F0 U+907F # +0x94F1 U+975E # +0x94F2 U+98DB # +0x94F3 U+6A0B # +0x94F4 U+7C38 # +0x94F5 U+5099 # +0x94F6 U+5C3E # +0x94F7 U+5FAE # +0x94F8 U+6787 # +0x94F9 U+6BD8 # +0x94FA U+7435 # +0x94FB U+7709 # +0x94FC U+7F8E # +0x9540 U+9F3B # +0x9541 U+67CA # +0x9542 U+7A17 # +0x9543 U+5339 # +0x9544 U+758B # +0x9545 U+9AED # +0x9546 U+5F66 # +0x9547 U+819D # +0x9548 U+83F1 # +0x9549 U+8098 # +0x954A U+5F3C # +0x954B U+5FC5 # +0x954C U+7562 # +0x954D U+7B46 # +0x954E U+903C # +0x954F U+6867 # +0x9550 U+59EB # +0x9551 U+5A9B # +0x9552 U+7D10 # +0x9553 U+767E # +0x9554 U+8B2C # +0x9555 U+4FF5 # +0x9556 U+5F6A # +0x9557 U+6A19 # +0x9558 U+6C37 # +0x9559 U+6F02 # +0x955A U+74E2 # +0x955B U+7968 # +0x955C U+8868 # +0x955D U+8A55 # +0x955E U+8C79 # +0x955F U+5EDF # +0x9560 U+63CF # +0x9561 U+75C5 # +0x9562 U+79D2 # +0x9563 U+82D7 # +0x9564 U+9328 # +0x9565 U+92F2 # +0x9566 U+849C # +0x9567 U+86ED # +0x9568 U+9C2D # +0x9569 U+54C1 # +0x956A U+5F6C # +0x956B U+658C # +0x956C U+6D5C # +0x956D U+7015 # +0x956E U+8CA7 # +0x956F U+8CD3 # +0x9570 U+983B # +0x9571 U+654F # +0x9572 U+74F6 # +0x9573 U+4E0D # +0x9574 U+4ED8 # +0x9575 U+57E0 # +0x9576 U+592B # +0x9577 U+5A66 # +0x9578 U+5BCC # +0x9579 U+51A8 # +0x957A U+5E03 # +0x957B U+5E9C # +0x957C U+6016 # +0x957D U+6276 # +0x957E U+6577 # +0x9580 U+65A7 # +0x9581 U+666E # +0x9582 U+6D6E # +0x9583 U+7236 # +0x9584 U+7B26 # +0x9585 U+8150 # +0x9586 U+819A # +0x9587 U+8299 # +0x9588 U+8B5C # +0x9589 U+8CA0 # +0x958A U+8CE6 # +0x958B U+8D74 # +0x958C U+961C # +0x958D U+9644 # +0x958E U+4FAE # +0x958F U+64AB # +0x9590 U+6B66 # +0x9591 U+821E # +0x9592 U+8461 # +0x9593 U+856A # +0x9594 U+90E8 # +0x9595 U+5C01 # +0x9596 U+6953 # +0x9597 U+98A8 # +0x9598 U+847A # +0x9599 U+8557 # +0x959A U+4F0F # +0x959B U+526F # +0x959C U+5FA9 # +0x959D U+5E45 # +0x959E U+670D # +0x959F U+798F # +0x95A0 U+8179 # +0x95A1 U+8907 # +0x95A2 U+8986 # +0x95A3 U+6DF5 # +0x95A4 U+5F17 # +0x95A5 U+6255 # +0x95A6 U+6CB8 # +0x95A7 U+4ECF # +0x95A8 U+7269 # +0x95A9 U+9B92 # +0x95AA U+5206 # +0x95AB U+543B # +0x95AC U+5674 # +0x95AD U+58B3 # +0x95AE U+61A4 # +0x95AF U+626E # +0x95B0 U+711A # +0x95B1 U+596E # +0x95B2 U+7C89 # +0x95B3 U+7CDE # +0x95B4 U+7D1B # +0x95B5 U+96F0 # +0x95B6 U+6587 # +0x95B7 U+805E # +0x95B8 U+4E19 # +0x95B9 U+4F75 # +0x95BA U+5175 # +0x95BB U+5840 # +0x95BC U+5E63 # +0x95BD U+5E73 # +0x95BE U+5F0A # +0x95BF U+67C4 # +0x95C0 U+4E26 # +0x95C1 U+853D # +0x95C2 U+9589 # +0x95C3 U+965B # +0x95C4 U+7C73 # +0x95C5 U+9801 # +0x95C6 U+50FB # +0x95C7 U+58C1 # +0x95C8 U+7656 # +0x95C9 U+78A7 # +0x95CA U+5225 # +0x95CB U+77A5 # +0x95CC U+8511 # +0x95CD U+7B86 # +0x95CE U+504F # +0x95CF U+5909 # +0x95D0 U+7247 # +0x95D1 U+7BC7 # +0x95D2 U+7DE8 # +0x95D3 U+8FBA # +0x95D4 U+8FD4 # +0x95D5 U+904D # +0x95D6 U+4FBF # +0x95D7 U+52C9 # +0x95D8 U+5A29 # +0x95D9 U+5F01 # +0x95DA U+97AD # +0x95DB U+4FDD # +0x95DC U+8217 # +0x95DD U+92EA # +0x95DE U+5703 # +0x95DF U+6355 # +0x95E0 U+6B69 # +0x95E1 U+752B # +0x95E2 U+88DC # +0x95E3 U+8F14 # +0x95E4 U+7A42 # +0x95E5 U+52DF # +0x95E6 U+5893 # +0x95E7 U+6155 # +0x95E8 U+620A # +0x95E9 U+66AE # +0x95EA U+6BCD # +0x95EB U+7C3F # +0x95EC U+83E9 # +0x95ED U+5023 # +0x95EE U+4FF8 # +0x95EF U+5305 # +0x95F0 U+5446 # +0x95F1 U+5831 # +0x95F2 U+5949 # +0x95F3 U+5B9D # +0x95F4 U+5CF0 # +0x95F5 U+5CEF # +0x95F6 U+5D29 # +0x95F7 U+5E96 # +0x95F8 U+62B1 # +0x95F9 U+6367 # +0x95FA U+653E # +0x95FB U+65B9 # +0x95FC U+670B # +0x9640 U+6CD5 # +0x9641 U+6CE1 # +0x9642 U+70F9 # +0x9643 U+7832 # +0x9644 U+7E2B # +0x9645 U+80DE # +0x9646 U+82B3 # +0x9647 U+840C # +0x9648 U+84EC # +0x9649 U+8702 # +0x964A U+8912 # +0x964B U+8A2A # +0x964C U+8C4A # +0x964D U+90A6 # +0x964E U+92D2 # +0x964F U+98FD # +0x9650 U+9CF3 # +0x9651 U+9D6C # +0x9652 U+4E4F # +0x9653 U+4EA1 # +0x9654 U+508D # +0x9655 U+5256 # +0x9656 U+574A # +0x9657 U+59A8 # +0x9658 U+5E3D # +0x9659 U+5FD8 # +0x965A U+5FD9 # +0x965B U+623F # +0x965C U+66B4 # +0x965D U+671B # +0x965E U+67D0 # +0x965F U+68D2 # +0x9660 U+5192 # +0x9661 U+7D21 # +0x9662 U+80AA # +0x9663 U+81A8 # +0x9664 U+8B00 # +0x9665 U+8C8C # +0x9666 U+8CBF # +0x9667 U+927E # +0x9668 U+9632 # +0x9669 U+5420 # +0x966A U+982C # +0x966B U+5317 # +0x966C U+50D5 # +0x966D U+535C # +0x966E U+58A8 # +0x966F U+64B2 # +0x9670 U+6734 # +0x9671 U+7267 # +0x9672 U+7766 # +0x9673 U+7A46 # +0x9674 U+91E6 # +0x9675 U+52C3 # +0x9676 U+6CA1 # +0x9677 U+6B86 # +0x9678 U+5800 # +0x9679 U+5E4C # +0x967A U+5954 # +0x967B U+672C # +0x967C U+7FFB # +0x967D U+51E1 # +0x967E U+76C6 # +0x9680 U+6469 # +0x9681 U+78E8 # +0x9682 U+9B54 # +0x9683 U+9EBB # +0x9684 U+57CB # +0x9685 U+59B9 # +0x9686 U+6627 # +0x9687 U+679A # +0x9688 U+6BCE # +0x9689 U+54E9 # +0x968A U+69D9 # +0x968B U+5E55 # +0x968C U+819C # +0x968D U+6795 # +0x968E U+9BAA # +0x968F U+67FE # +0x9690 U+9C52 # +0x9691 U+685D # +0x9692 U+4EA6 # +0x9693 U+4FE3 # +0x9694 U+53C8 # +0x9695 U+62B9 # +0x9696 U+672B # +0x9697 U+6CAB # +0x9698 U+8FC4 # +0x9699 U+4FAD # +0x969A U+7E6D # +0x969B U+9EBF # +0x969C U+4E07 # +0x969D U+6162 # +0x969E U+6E80 # +0x969F U+6F2B # +0x96A0 U+8513 # +0x96A1 U+5473 # +0x96A2 U+672A # +0x96A3 U+9B45 # +0x96A4 U+5DF3 # +0x96A5 U+7B95 # +0x96A6 U+5CAC # +0x96A7 U+5BC6 # +0x96A8 U+871C # +0x96A9 U+6E4A # +0x96AA U+84D1 # +0x96AB U+7A14 # +0x96AC U+8108 # +0x96AD U+5999 # +0x96AE U+7C8D # +0x96AF U+6C11 # +0x96B0 U+7720 # +0x96B1 U+52D9 # +0x96B2 U+5922 # +0x96B3 U+7121 # +0x96B4 U+725F # +0x96B5 U+77DB # +0x96B6 U+9727 # +0x96B7 U+9D61 # +0x96B8 U+690B # +0x96B9 U+5A7F # +0x96BA U+5A18 # +0x96BB U+51A5 # +0x96BC U+540D # +0x96BD U+547D # +0x96BE U+660E # +0x96BF U+76DF # +0x96C0 U+8FF7 # +0x96C1 U+9298 # +0x96C2 U+9CF4 # +0x96C3 U+59EA # +0x96C4 U+725D # +0x96C5 U+6EC5 # +0x96C6 U+514D # +0x96C7 U+68C9 # +0x96C8 U+7DBF # +0x96C9 U+7DEC # +0x96CA U+9762 # +0x96CB U+9EBA # +0x96CC U+6478 # +0x96CD U+6A21 # +0x96CE U+8302 # +0x96CF U+5984 # +0x96D0 U+5B5F # +0x96D1 U+6BDB # +0x96D2 U+731B # +0x96D3 U+76F2 # +0x96D4 U+7DB2 # +0x96D5 U+8017 # +0x96D6 U+8499 # +0x96D7 U+5132 # +0x96D8 U+6728 # +0x96D9 U+9ED9 # +0x96DA U+76EE # +0x96DB U+6762 # +0x96DC U+52FF # +0x96DD U+9905 # +0x96DE U+5C24 # +0x96DF U+623B # +0x96E0 U+7C7E # +0x96E1 U+8CB0 # +0x96E2 U+554F # +0x96E3 U+60B6 # +0x96E4 U+7D0B # +0x96E5 U+9580 # +0x96E6 U+5301 # +0x96E7 U+4E5F # +0x96E8 U+51B6 # +0x96E9 U+591C # +0x96EA U+723A # +0x96EB U+8036 # +0x96EC U+91CE # +0x96ED U+5F25 # +0x96EE U+77E2 # +0x96EF U+5384 # +0x96F0 U+5F79 # +0x96F1 U+7D04 # +0x96F2 U+85AC # +0x96F3 U+8A33 # +0x96F4 U+8E8D # +0x96F5 U+9756 # +0x96F6 U+67F3 # +0x96F7 U+85AE # +0x96F8 U+9453 # +0x96F9 U+6109 # +0x96FA U+6108 # +0x96FB U+6CB9 # +0x96FC U+7652 # +0x9740 U+8AED # +0x9741 U+8F38 # +0x9742 U+552F # +0x9743 U+4F51 # +0x9744 U+512A # +0x9745 U+52C7 # +0x9746 U+53CB # +0x9747 U+5BA5 # +0x9748 U+5E7D # +0x9749 U+60A0 # +0x974A U+6182 # +0x974B U+63D6 # +0x974C U+6709 # +0x974D U+67DA # +0x974E U+6E67 # +0x974F U+6D8C # +0x9750 U+7336 # +0x9751 U+7337 # +0x9752 U+7531 # +0x9753 U+7950 # +0x9754 U+88D5 # +0x9755 U+8A98 # +0x9756 U+904A # +0x9757 U+9091 # +0x9758 U+90F5 # +0x9759 U+96C4 # +0x975A U+878D # +0x975B U+5915 # +0x975C U+4E88 # +0x975D U+4F59 # +0x975E U+4E0E # +0x975F U+8A89 # +0x9760 U+8F3F # +0x9761 U+9810 # +0x9762 U+50AD # +0x9763 U+5E7C # +0x9764 U+5996 # +0x9765 U+5BB9 # +0x9766 U+5EB8 # +0x9767 U+63DA # +0x9768 U+63FA # +0x9769 U+64C1 # +0x976A U+66DC # +0x976B U+694A # +0x976C U+69D8 # +0x976D U+6D0B # +0x976E U+6EB6 # +0x976F U+7194 # +0x9770 U+7528 # +0x9771 U+7AAF # +0x9772 U+7F8A # +0x9773 U+8000 # +0x9774 U+8449 # +0x9775 U+84C9 # +0x9776 U+8981 # +0x9777 U+8B21 # +0x9778 U+8E0A # +0x9779 U+9065 # +0x977A U+967D # +0x977B U+990A # +0x977C U+617E # +0x977D U+6291 # +0x977E U+6B32 # +0x9780 U+6C83 # +0x9781 U+6D74 # +0x9782 U+7FCC # +0x9783 U+7FFC # +0x9784 U+6DC0 # +0x9785 U+7F85 # +0x9786 U+87BA # +0x9787 U+88F8 # +0x9788 U+6765 # +0x9789 U+83B1 # +0x978A U+983C # +0x978B U+96F7 # +0x978C U+6D1B # +0x978D U+7D61 # +0x978E U+843D # +0x978F U+916A # +0x9790 U+4E71 # +0x9791 U+5375 # +0x9792 U+5D50 # +0x9793 U+6B04 # +0x9794 U+6FEB # +0x9795 U+85CD # +0x9796 U+862D # +0x9797 U+89A7 # +0x9798 U+5229 # +0x9799 U+540F # +0x979A U+5C65 # +0x979B U+674E # +0x979C U+68A8 # +0x979D U+7406 # +0x979E U+7483 # +0x979F U+75E2 # +0x97A0 U+88CF # +0x97A1 U+88E1 # +0x97A2 U+91CC # +0x97A3 U+96E2 # +0x97A4 U+9678 # +0x97A5 U+5F8B # +0x97A6 U+7387 # +0x97A7 U+7ACB # +0x97A8 U+844E # +0x97A9 U+63A0 # +0x97AA U+7565 # +0x97AB U+5289 # +0x97AC U+6D41 # +0x97AD U+6E9C # +0x97AE U+7409 # +0x97AF U+7559 # +0x97B0 U+786B # +0x97B1 U+7C92 # +0x97B2 U+9686 # +0x97B3 U+7ADC # +0x97B4 U+9F8D # +0x97B5 U+4FB6 # +0x97B6 U+616E # +0x97B7 U+65C5 # +0x97B8 U+865C # +0x97B9 U+4E86 # +0x97BA U+4EAE # +0x97BB U+50DA # +0x97BC U+4E21 # +0x97BD U+51CC # +0x97BE U+5BEE # +0x97BF U+6599 # +0x97C0 U+6881 # +0x97C1 U+6DBC # +0x97C2 U+731F # +0x97C3 U+7642 # +0x97C4 U+77AD # +0x97C5 U+7A1C # +0x97C6 U+7CE7 # +0x97C7 U+826F # +0x97C8 U+8AD2 # +0x97C9 U+907C # +0x97CA U+91CF # +0x97CB U+9675 # +0x97CC U+9818 # +0x97CD U+529B # +0x97CE U+7DD1 # +0x97CF U+502B # +0x97D0 U+5398 # +0x97D1 U+6797 # +0x97D2 U+6DCB # +0x97D3 U+71D0 # +0x97D4 U+7433 # +0x97D5 U+81E8 # +0x97D6 U+8F2A # +0x97D7 U+96A3 # +0x97D8 U+9C57 # +0x97D9 U+9E9F # +0x97DA U+7460 # +0x97DB U+5841 # +0x97DC U+6D99 # +0x97DD U+7D2F # +0x97DE U+985E # +0x97DF U+4EE4 # +0x97E0 U+4F36 # +0x97E1 U+4F8B # +0x97E2 U+51B7 # +0x97E3 U+52B1 # +0x97E4 U+5DBA # +0x97E5 U+601C # +0x97E6 U+73B2 # +0x97E7 U+793C # +0x97E8 U+82D3 # +0x97E9 U+9234 # +0x97EA U+96B7 # +0x97EB U+96F6 # +0x97EC U+970A # +0x97ED U+9E97 # +0x97EE U+9F62 # +0x97EF U+66A6 # +0x97F0 U+6B74 # +0x97F1 U+5217 # +0x97F2 U+52A3 # +0x97F3 U+70C8 # +0x97F4 U+88C2 # +0x97F5 U+5EC9 # +0x97F6 U+604B # +0x97F7 U+6190 # +0x97F8 U+6F23 # +0x97F9 U+7149 # +0x97FA U+7C3E # +0x97FB U+7DF4 # +0x97FC U+806F # +0x9840 U+84EE # +0x9841 U+9023 # +0x9842 U+932C # +0x9843 U+5442 # +0x9844 U+9B6F # +0x9845 U+6AD3 # +0x9846 U+7089 # +0x9847 U+8CC2 # +0x9848 U+8DEF # +0x9849 U+9732 # +0x984A U+52B4 # +0x984B U+5A41 # +0x984C U+5ECA # +0x984D U+5F04 # +0x984E U+6717 # +0x984F U+697C # +0x9850 U+6994 # +0x9851 U+6D6A # +0x9852 U+6F0F # +0x9853 U+7262 # +0x9854 U+72FC # +0x9855 U+7BED # +0x9856 U+8001 # +0x9857 U+807E # +0x9858 U+874B # +0x9859 U+90CE # +0x985A U+516D # +0x985B U+9E93 # +0x985C U+7984 # +0x985D U+808B # +0x985E U+9332 # +0x985F U+8AD6 # +0x9860 U+502D # +0x9861 U+548C # +0x9862 U+8A71 # +0x9863 U+6B6A # +0x9864 U+8CC4 # +0x9865 U+8107 # +0x9866 U+60D1 # +0x9867 U+67A0 # +0x9868 U+9DF2 # +0x9869 U+4E99 # +0x986A U+4E98 # +0x986B U+9C10 # +0x986C U+8A6B # +0x986D U+85C1 # +0x986E U+8568 # +0x986F U+6900 # +0x9870 U+6E7E # +0x9871 U+7897 # +0x9872 U+8155 # +0x9873 U+20B9F # [2004] [Unicode3.1] +0x9874 U+5B41 # [2000] +0x9875 U+5B56 # [2000] +0x9876 U+5B7D # [2000] +0x9877 U+5B93 # [2000] +0x9878 U+5BD8 # [2000] +0x9879 U+5BEC # [2000] +0x987A U+5C12 # [2000] +0x987B U+5C1E # [2000] +0x987C U+5C23 # [2000] +0x987D U+5C2B # [2000] +0x987E U+378D # [2000] +0x9880 U+5C62 # [2000] +0x9881 U+FA3B # CJK COMPATIBILITY IDEOGRAPH-FA3B [2000] [Unicode3.2] +0x9882 U+FA3C # CJK COMPATIBILITY IDEOGRAPH-FA3C [2000] [Unicode3.2] +0x9883 U+216B4 # [2000] [Unicode3.1] +0x9884 U+5C7A # [2000] +0x9885 U+5C8F # [2000] +0x9886 U+5C9F # [2000] +0x9887 U+5CA3 # [2000] +0x9888 U+5CAA # [2000] +0x9889 U+5CBA # [2000] +0x988A U+5CCB # [2000] +0x988B U+5CD0 # [2000] +0x988C U+5CD2 # [2000] +0x988D U+5CF4 # [2000] +0x988E U+21E34 # [2000] [Unicode3.1] +0x988F U+37E2 # [2000] +0x9890 U+5D0D # [2000] +0x9891 U+5D27 # [2000] +0x9892 U+FA11 # CJK COMPATIBILITY IDEOGRAPH-FA11 [2000] +0x9893 U+5D46 # [2000] +0x9894 U+5D47 # [2000] +0x9895 U+5D53 # [2000] +0x9896 U+5D4A # [2000] +0x9897 U+5D6D # [2000] +0x9898 U+5D81 # [2000] +0x9899 U+5DA0 # [2000] +0x989A U+5DA4 # [2000] +0x989B U+5DA7 # [2000] +0x989C U+5DB8 # [2000] +0x989D U+5DCB # [2000] +0x989E U+541E # [2004] +0x989F U+5F0C # +0x98A0 U+4E10 # +0x98A1 U+4E15 # +0x98A2 U+4E2A # +0x98A3 U+4E31 # +0x98A4 U+4E36 # +0x98A5 U+4E3C # +0x98A6 U+4E3F # +0x98A7 U+4E42 # +0x98A8 U+4E56 # +0x98A9 U+4E58 # +0x98AA U+4E82 # +0x98AB U+4E85 # +0x98AC U+8C6B # +0x98AD U+4E8A # +0x98AE U+8212 # +0x98AF U+5F0D # +0x98B0 U+4E8E # +0x98B1 U+4E9E # +0x98B2 U+4E9F # +0x98B3 U+4EA0 # +0x98B4 U+4EA2 # +0x98B5 U+4EB0 # +0x98B6 U+4EB3 # +0x98B7 U+4EB6 # +0x98B8 U+4ECE # +0x98B9 U+4ECD # +0x98BA U+4EC4 # +0x98BB U+4EC6 # +0x98BC U+4EC2 # +0x98BD U+4ED7 # +0x98BE U+4EDE # +0x98BF U+4EED # +0x98C0 U+4EDF # +0x98C1 U+4EF7 # +0x98C2 U+4F09 # +0x98C3 U+4F5A # +0x98C4 U+4F30 # +0x98C5 U+4F5B # +0x98C6 U+4F5D # +0x98C7 U+4F57 # +0x98C8 U+4F47 # +0x98C9 U+4F76 # +0x98CA U+4F88 # +0x98CB U+4F8F # +0x98CC U+4F98 # +0x98CD U+4F7B # +0x98CE U+4F69 # +0x98CF U+4F70 # +0x98D0 U+4F91 # +0x98D1 U+4F6F # +0x98D2 U+4F86 # +0x98D3 U+4F96 # +0x98D4 U+5118 # +0x98D5 U+4FD4 # +0x98D6 U+4FDF # +0x98D7 U+4FCE # +0x98D8 U+4FD8 # +0x98D9 U+4FDB # +0x98DA U+4FD1 # +0x98DB U+4FDA # +0x98DC U+4FD0 # +0x98DD U+4FE4 # +0x98DE U+4FE5 # +0x98DF U+501A # +0x98E0 U+5028 # +0x98E1 U+5014 # +0x98E2 U+502A # +0x98E3 U+5025 # +0x98E4 U+5005 # +0x98E5 U+4F1C # +0x98E6 U+4FF6 # +0x98E7 U+5021 # +0x98E8 U+5029 # +0x98E9 U+502C # +0x98EA U+4FFE # +0x98EB U+4FEF # +0x98EC U+5011 # +0x98ED U+5006 # +0x98EE U+5043 # +0x98EF U+5047 # +0x98F0 U+6703 # +0x98F1 U+5055 # +0x98F2 U+5050 # +0x98F3 U+5048 # +0x98F4 U+505A # +0x98F5 U+5056 # +0x98F6 U+506C # +0x98F7 U+5078 # +0x98F8 U+5080 # +0x98F9 U+509A # +0x98FA U+5085 # +0x98FB U+50B4 # +0x98FC U+50B2 # +0x9940 U+50C9 # +0x9941 U+50CA # +0x9942 U+50B3 # +0x9943 U+50C2 # +0x9944 U+50D6 # +0x9945 U+50DE # +0x9946 U+50E5 # +0x9947 U+50ED # +0x9948 U+50E3 # +0x9949 U+50EE # +0x994A U+50F9 # +0x994B U+50F5 # +0x994C U+5109 # +0x994D U+5101 # +0x994E U+5102 # +0x994F U+5116 # +0x9950 U+5115 # +0x9951 U+5114 # +0x9952 U+511A # +0x9953 U+5121 # +0x9954 U+513A # +0x9955 U+5137 # +0x9956 U+513C # +0x9957 U+513B # +0x9958 U+513F # +0x9959 U+5140 # +0x995A U+5152 # +0x995B U+514C # +0x995C U+5154 # +0x995D U+5162 # +0x995E U+7AF8 # +0x995F U+5169 # +0x9960 U+516A # +0x9961 U+516E # +0x9962 U+5180 # +0x9963 U+5182 # +0x9964 U+56D8 # +0x9965 U+518C # +0x9966 U+5189 # +0x9967 U+518F # +0x9968 U+5191 # +0x9969 U+5193 # +0x996A U+5195 # +0x996B U+5196 # +0x996C U+51A4 # +0x996D U+51A6 # +0x996E U+51A2 # +0x996F U+51A9 # +0x9970 U+51AA # +0x9971 U+51AB # +0x9972 U+51B3 # +0x9973 U+51B1 # +0x9974 U+51B2 # +0x9975 U+51B0 # +0x9976 U+51B5 # +0x9977 U+51BD # +0x9978 U+51C5 # +0x9979 U+51C9 # +0x997A U+51DB # +0x997B U+51E0 # +0x997C U+8655 # +0x997D U+51E9 # +0x997E U+51ED # +0x9980 U+51F0 # +0x9981 U+51F5 # +0x9982 U+51FE # +0x9983 U+5204 # +0x9984 U+520B # +0x9985 U+5214 # +0x9986 U+520E # +0x9987 U+5227 # +0x9988 U+522A # +0x9989 U+522E # +0x998A U+5233 # +0x998B U+5239 # +0x998C U+524F # +0x998D U+5244 # +0x998E U+524B # +0x998F U+524C # +0x9990 U+525E # +0x9991 U+5254 # +0x9992 U+526A # +0x9993 U+5274 # +0x9994 U+5269 # +0x9995 U+5273 # +0x9996 U+527F # +0x9997 U+527D # +0x9998 U+528D # +0x9999 U+5294 # +0x999A U+5292 # +0x999B U+5271 # +0x999C U+5288 # +0x999D U+5291 # +0x999E U+8FA8 # +0x999F U+8FA7 # +0x99A0 U+52AC # +0x99A1 U+52AD # +0x99A2 U+52BC # +0x99A3 U+52B5 # +0x99A4 U+52C1 # +0x99A5 U+52CD # +0x99A6 U+52D7 # +0x99A7 U+52DE # +0x99A8 U+52E3 # +0x99A9 U+52E6 # +0x99AA U+98ED # +0x99AB U+52E0 # +0x99AC U+52F3 # +0x99AD U+52F5 # +0x99AE U+52F8 # +0x99AF U+52F9 # +0x99B0 U+5306 # +0x99B1 U+5308 # +0x99B2 U+7538 # +0x99B3 U+530D # +0x99B4 U+5310 # +0x99B5 U+530F # +0x99B6 U+5315 # +0x99B7 U+531A # +0x99B8 U+5323 # +0x99B9 U+532F # +0x99BA U+5331 # +0x99BB U+5333 # +0x99BC U+5338 # +0x99BD U+5340 # +0x99BE U+5346 # +0x99BF U+5345 # +0x99C0 U+4E17 # +0x99C1 U+5349 # +0x99C2 U+534D # +0x99C3 U+51D6 # +0x99C4 U+535E # +0x99C5 U+5369 # +0x99C6 U+536E # +0x99C7 U+5918 # +0x99C8 U+537B # +0x99C9 U+5377 # +0x99CA U+5382 # +0x99CB U+5396 # +0x99CC U+53A0 # +0x99CD U+53A6 # +0x99CE U+53A5 # +0x99CF U+53AE # +0x99D0 U+53B0 # +0x99D1 U+53B6 # +0x99D2 U+53C3 # +0x99D3 U+7C12 # +0x99D4 U+96D9 # +0x99D5 U+53DF # +0x99D6 U+66FC # +0x99D7 U+71EE # +0x99D8 U+53EE # +0x99D9 U+53E8 # +0x99DA U+53ED # +0x99DB U+53FA # +0x99DC U+5401 # +0x99DD U+543D # +0x99DE U+5440 # +0x99DF U+542C # +0x99E0 U+542D # +0x99E1 U+543C # +0x99E2 U+542E # +0x99E3 U+5436 # +0x99E4 U+5429 # +0x99E5 U+541D # +0x99E6 U+544E # +0x99E7 U+548F # +0x99E8 U+5475 # +0x99E9 U+548E # +0x99EA U+545F # +0x99EB U+5471 # +0x99EC U+5477 # +0x99ED U+5470 # +0x99EE U+5492 # +0x99EF U+547B # +0x99F0 U+5480 # +0x99F1 U+5476 # +0x99F2 U+5484 # +0x99F3 U+5490 # +0x99F4 U+5486 # +0x99F5 U+54C7 # +0x99F6 U+54A2 # +0x99F7 U+54B8 # +0x99F8 U+54A5 # +0x99F9 U+54AC # +0x99FA U+54C4 # +0x99FB U+54C8 # +0x99FC U+54A8 # +0x9A40 U+54AB # +0x9A41 U+54C2 # +0x9A42 U+54A4 # +0x9A43 U+54BE # +0x9A44 U+54BC # +0x9A45 U+54D8 # +0x9A46 U+54E5 # +0x9A47 U+54E6 # +0x9A48 U+550F # +0x9A49 U+5514 # +0x9A4A U+54FD # +0x9A4B U+54EE # +0x9A4C U+54ED # +0x9A4D U+54FA # +0x9A4E U+54E2 # +0x9A4F U+5539 # +0x9A50 U+5540 # +0x9A51 U+5563 # +0x9A52 U+554C # +0x9A53 U+552E # +0x9A54 U+555C # +0x9A55 U+5545 # +0x9A56 U+5556 # +0x9A57 U+5557 # +0x9A58 U+5538 # +0x9A59 U+5533 # +0x9A5A U+555D # +0x9A5B U+5599 # +0x9A5C U+5580 # +0x9A5D U+54AF # +0x9A5E U+558A # +0x9A5F U+559F # +0x9A60 U+557B # +0x9A61 U+557E # +0x9A62 U+5598 # +0x9A63 U+559E # +0x9A64 U+55AE # +0x9A65 U+557C # +0x9A66 U+5583 # +0x9A67 U+55A9 # +0x9A68 U+5587 # +0x9A69 U+55A8 # +0x9A6A U+55DA # +0x9A6B U+55C5 # +0x9A6C U+55DF # +0x9A6D U+55C4 # +0x9A6E U+55DC # +0x9A6F U+55E4 # +0x9A70 U+55D4 # +0x9A71 U+5614 # +0x9A72 U+55F7 # +0x9A73 U+5616 # +0x9A74 U+55FE # +0x9A75 U+55FD # +0x9A76 U+561B # +0x9A77 U+55F9 # +0x9A78 U+564E # +0x9A79 U+5650 # +0x9A7A U+71DF # +0x9A7B U+5634 # +0x9A7C U+5636 # +0x9A7D U+5632 # +0x9A7E U+5638 # +0x9A80 U+566B # +0x9A81 U+5664 # +0x9A82 U+562F # +0x9A83 U+566C # +0x9A84 U+566A # +0x9A85 U+5686 # +0x9A86 U+5680 # +0x9A87 U+568A # +0x9A88 U+56A0 # +0x9A89 U+5694 # +0x9A8A U+568F # +0x9A8B U+56A5 # +0x9A8C U+56AE # +0x9A8D U+56B6 # +0x9A8E U+56B4 # +0x9A8F U+56C2 # +0x9A90 U+56BC # +0x9A91 U+56C1 # +0x9A92 U+56C3 # +0x9A93 U+56C0 # +0x9A94 U+56C8 # +0x9A95 U+56CE # +0x9A96 U+56D1 # +0x9A97 U+56D3 # +0x9A98 U+56D7 # +0x9A99 U+56EE # +0x9A9A U+56F9 # +0x9A9B U+5700 # +0x9A9C U+56FF # +0x9A9D U+5704 # +0x9A9E U+5709 # +0x9A9F U+5708 # +0x9AA0 U+570B # +0x9AA1 U+570D # +0x9AA2 U+5713 # +0x9AA3 U+5718 # +0x9AA4 U+5716 # +0x9AA5 U+55C7 # +0x9AA6 U+571C # +0x9AA7 U+5726 # +0x9AA8 U+5737 # +0x9AA9 U+5738 # +0x9AAA U+574E # +0x9AAB U+573B # +0x9AAC U+5740 # +0x9AAD U+574F # +0x9AAE U+5769 # +0x9AAF U+57C0 # +0x9AB0 U+5788 # +0x9AB1 U+5761 # +0x9AB2 U+577F # +0x9AB3 U+5789 # +0x9AB4 U+5793 # +0x9AB5 U+57A0 # +0x9AB6 U+57B3 # +0x9AB7 U+57A4 # +0x9AB8 U+57AA # +0x9AB9 U+57B0 # +0x9ABA U+57C3 # +0x9ABB U+57C6 # +0x9ABC U+57D4 # +0x9ABD U+57D2 # +0x9ABE U+57D3 # +0x9ABF U+580A # +0x9AC0 U+57D6 # +0x9AC1 U+57E3 # +0x9AC2 U+580B # +0x9AC3 U+5819 # +0x9AC4 U+581D # +0x9AC5 U+5872 # +0x9AC6 U+5821 # +0x9AC7 U+5862 # +0x9AC8 U+584B # +0x9AC9 U+5870 # +0x9ACA U+6BC0 # +0x9ACB U+5852 # +0x9ACC U+583D # +0x9ACD U+5879 # +0x9ACE U+5885 # +0x9ACF U+58B9 # +0x9AD0 U+589F # +0x9AD1 U+58AB # +0x9AD2 U+58BA # +0x9AD3 U+58DE # +0x9AD4 U+58BB # +0x9AD5 U+58B8 # +0x9AD6 U+58AE # +0x9AD7 U+58C5 # +0x9AD8 U+58D3 # +0x9AD9 U+58D1 # +0x9ADA U+58D7 # +0x9ADB U+58D9 # +0x9ADC U+58D8 # +0x9ADD U+58E5 # +0x9ADE U+58DC # +0x9ADF U+58E4 # +0x9AE0 U+58DF # +0x9AE1 U+58EF # +0x9AE2 U+58FA # +0x9AE3 U+58F9 # +0x9AE4 U+58FB # +0x9AE5 U+58FC # +0x9AE6 U+58FD # +0x9AE7 U+5902 # +0x9AE8 U+590A # +0x9AE9 U+5910 # +0x9AEA U+591B # +0x9AEB U+68A6 # +0x9AEC U+5925 # +0x9AED U+592C # +0x9AEE U+592D # +0x9AEF U+5932 # +0x9AF0 U+5938 # +0x9AF1 U+593E # +0x9AF2 U+7AD2 # +0x9AF3 U+5955 # +0x9AF4 U+5950 # +0x9AF5 U+594E # +0x9AF6 U+595A # +0x9AF7 U+5958 # +0x9AF8 U+5962 # +0x9AF9 U+5960 # +0x9AFA U+5967 # +0x9AFB U+596C # +0x9AFC U+5969 # +0x9B40 U+5978 # +0x9B41 U+5981 # +0x9B42 U+599D # +0x9B43 U+4F5E # +0x9B44 U+4FAB # +0x9B45 U+59A3 # +0x9B46 U+59B2 # +0x9B47 U+59C6 # +0x9B48 U+59E8 # +0x9B49 U+59DC # +0x9B4A U+598D # +0x9B4B U+59D9 # +0x9B4C U+59DA # +0x9B4D U+5A25 # +0x9B4E U+5A1F # +0x9B4F U+5A11 # +0x9B50 U+5A1C # +0x9B51 U+5A09 # +0x9B52 U+5A1A # +0x9B53 U+5A40 # +0x9B54 U+5A6C # +0x9B55 U+5A49 # +0x9B56 U+5A35 # +0x9B57 U+5A36 # +0x9B58 U+5A62 # +0x9B59 U+5A6A # +0x9B5A U+5A9A # +0x9B5B U+5ABC # +0x9B5C U+5ABE # +0x9B5D U+5ACB # +0x9B5E U+5AC2 # +0x9B5F U+5ABD # +0x9B60 U+5AE3 # +0x9B61 U+5AD7 # +0x9B62 U+5AE6 # +0x9B63 U+5AE9 # +0x9B64 U+5AD6 # +0x9B65 U+5AFA # +0x9B66 U+5AFB # +0x9B67 U+5B0C # +0x9B68 U+5B0B # +0x9B69 U+5B16 # +0x9B6A U+5B32 # +0x9B6B U+5AD0 # +0x9B6C U+5B2A # +0x9B6D U+5B36 # +0x9B6E U+5B3E # +0x9B6F U+5B43 # +0x9B70 U+5B45 # +0x9B71 U+5B40 # +0x9B72 U+5B51 # +0x9B73 U+5B55 # +0x9B74 U+5B5A # +0x9B75 U+5B5B # +0x9B76 U+5B65 # +0x9B77 U+5B69 # +0x9B78 U+5B70 # +0x9B79 U+5B73 # +0x9B7A U+5B75 # +0x9B7B U+5B78 # +0x9B7C U+6588 # +0x9B7D U+5B7A # +0x9B7E U+5B80 # +0x9B80 U+5B83 # +0x9B81 U+5BA6 # +0x9B82 U+5BB8 # +0x9B83 U+5BC3 # +0x9B84 U+5BC7 # +0x9B85 U+5BC9 # +0x9B86 U+5BD4 # +0x9B87 U+5BD0 # +0x9B88 U+5BE4 # +0x9B89 U+5BE6 # +0x9B8A U+5BE2 # +0x9B8B U+5BDE # +0x9B8C U+5BE5 # +0x9B8D U+5BEB # +0x9B8E U+5BF0 # +0x9B8F U+5BF6 # +0x9B90 U+5BF3 # +0x9B91 U+5C05 # +0x9B92 U+5C07 # +0x9B93 U+5C08 # +0x9B94 U+5C0D # +0x9B95 U+5C13 # +0x9B96 U+5C20 # +0x9B97 U+5C22 # +0x9B98 U+5C28 # +0x9B99 U+5C38 # +0x9B9A U+5C39 # +0x9B9B U+5C41 # +0x9B9C U+5C46 # +0x9B9D U+5C4E # +0x9B9E U+5C53 # +0x9B9F U+5C50 # +0x9BA0 U+5C4F # +0x9BA1 U+5B71 # +0x9BA2 U+5C6C # +0x9BA3 U+5C6E # +0x9BA4 U+4E62 # +0x9BA5 U+5C76 # +0x9BA6 U+5C79 # +0x9BA7 U+5C8C # +0x9BA8 U+5C91 # +0x9BA9 U+5C94 # +0x9BAA U+599B # +0x9BAB U+5CAB # +0x9BAC U+5CBB # +0x9BAD U+5CB6 # +0x9BAE U+5CBC # +0x9BAF U+5CB7 # +0x9BB0 U+5CC5 # +0x9BB1 U+5CBE # +0x9BB2 U+5CC7 # +0x9BB3 U+5CD9 # +0x9BB4 U+5CE9 # +0x9BB5 U+5CFD # +0x9BB6 U+5CFA # +0x9BB7 U+5CED # +0x9BB8 U+5D8C # +0x9BB9 U+5CEA # +0x9BBA U+5D0B # +0x9BBB U+5D15 # +0x9BBC U+5D17 # +0x9BBD U+5D5C # +0x9BBE U+5D1F # +0x9BBF U+5D1B # +0x9BC0 U+5D11 # +0x9BC1 U+5D14 # +0x9BC2 U+5D22 # +0x9BC3 U+5D1A # +0x9BC4 U+5D19 # +0x9BC5 U+5D18 # +0x9BC6 U+5D4C # +0x9BC7 U+5D52 # +0x9BC8 U+5D4E # +0x9BC9 U+5D4B # +0x9BCA U+5D6C # +0x9BCB U+5D73 # +0x9BCC U+5D76 # +0x9BCD U+5D87 # +0x9BCE U+5D84 # +0x9BCF U+5D82 # +0x9BD0 U+5DA2 # +0x9BD1 U+5D9D # +0x9BD2 U+5DAC # +0x9BD3 U+5DAE # +0x9BD4 U+5DBD # +0x9BD5 U+5D90 # +0x9BD6 U+5DB7 # +0x9BD7 U+5DBC # +0x9BD8 U+5DC9 # +0x9BD9 U+5DCD # +0x9BDA U+5DD3 # +0x9BDB U+5DD2 # +0x9BDC U+5DD6 # +0x9BDD U+5DDB # +0x9BDE U+5DEB # +0x9BDF U+5DF2 # +0x9BE0 U+5DF5 # +0x9BE1 U+5E0B # +0x9BE2 U+5E1A # +0x9BE3 U+5E19 # +0x9BE4 U+5E11 # +0x9BE5 U+5E1B # +0x9BE6 U+5E36 # +0x9BE7 U+5E37 # +0x9BE8 U+5E44 # +0x9BE9 U+5E43 # +0x9BEA U+5E40 # +0x9BEB U+5E4E # +0x9BEC U+5E57 # +0x9BED U+5E54 # +0x9BEE U+5E5F # +0x9BEF U+5E62 # +0x9BF0 U+5E64 # +0x9BF1 U+5E47 # +0x9BF2 U+5E75 # +0x9BF3 U+5E76 # +0x9BF4 U+5E7A # +0x9BF5 U+9EBC # +0x9BF6 U+5E7F # +0x9BF7 U+5EA0 # +0x9BF8 U+5EC1 # +0x9BF9 U+5EC2 # +0x9BFA U+5EC8 # +0x9BFB U+5ED0 # +0x9BFC U+5ECF # +0x9C40 U+5ED6 # +0x9C41 U+5EE3 # +0x9C42 U+5EDD # +0x9C43 U+5EDA # +0x9C44 U+5EDB # +0x9C45 U+5EE2 # +0x9C46 U+5EE1 # +0x9C47 U+5EE8 # +0x9C48 U+5EE9 # +0x9C49 U+5EEC # +0x9C4A U+5EF1 # +0x9C4B U+5EF3 # +0x9C4C U+5EF0 # +0x9C4D U+5EF4 # +0x9C4E U+5EF8 # +0x9C4F U+5EFE # +0x9C50 U+5F03 # +0x9C51 U+5F09 # +0x9C52 U+5F5D # +0x9C53 U+5F5C # +0x9C54 U+5F0B # +0x9C55 U+5F11 # +0x9C56 U+5F16 # +0x9C57 U+5F29 # +0x9C58 U+5F2D # +0x9C59 U+5F38 # +0x9C5A U+5F41 # +0x9C5B U+5F48 # +0x9C5C U+5F4C # +0x9C5D U+5F4E # +0x9C5E U+5F2F # +0x9C5F U+5F51 # +0x9C60 U+5F56 # +0x9C61 U+5F57 # +0x9C62 U+5F59 # +0x9C63 U+5F61 # +0x9C64 U+5F6D # +0x9C65 U+5F73 # +0x9C66 U+5F77 # +0x9C67 U+5F83 # +0x9C68 U+5F82 # +0x9C69 U+5F7F # +0x9C6A U+5F8A # +0x9C6B U+5F88 # +0x9C6C U+5F91 # +0x9C6D U+5F87 # +0x9C6E U+5F9E # +0x9C6F U+5F99 # +0x9C70 U+5F98 # +0x9C71 U+5FA0 # +0x9C72 U+5FA8 # +0x9C73 U+5FAD # +0x9C74 U+5FBC # +0x9C75 U+5FD6 # +0x9C76 U+5FFB # +0x9C77 U+5FE4 # +0x9C78 U+5FF8 # +0x9C79 U+5FF1 # +0x9C7A U+5FDD # +0x9C7B U+60B3 # +0x9C7C U+5FFF # +0x9C7D U+6021 # +0x9C7E U+6060 # +0x9C80 U+6019 # +0x9C81 U+6010 # +0x9C82 U+6029 # +0x9C83 U+600E # +0x9C84 U+6031 # +0x9C85 U+601B # +0x9C86 U+6015 # +0x9C87 U+602B # +0x9C88 U+6026 # +0x9C89 U+600F # +0x9C8A U+603A # +0x9C8B U+605A # +0x9C8C U+6041 # +0x9C8D U+606A # +0x9C8E U+6077 # +0x9C8F U+605F # +0x9C90 U+604A # +0x9C91 U+6046 # +0x9C92 U+604D # +0x9C93 U+6063 # +0x9C94 U+6043 # +0x9C95 U+6064 # +0x9C96 U+6042 # +0x9C97 U+606C # +0x9C98 U+606B # +0x9C99 U+6059 # +0x9C9A U+6081 # +0x9C9B U+608D # +0x9C9C U+60E7 # +0x9C9D U+6083 # +0x9C9E U+609A # +0x9C9F U+6084 # +0x9CA0 U+609B # +0x9CA1 U+6096 # +0x9CA2 U+6097 # +0x9CA3 U+6092 # +0x9CA4 U+60A7 # +0x9CA5 U+608B # +0x9CA6 U+60E1 # +0x9CA7 U+60B8 # +0x9CA8 U+60E0 # +0x9CA9 U+60D3 # +0x9CAA U+60B4 # +0x9CAB U+5FF0 # +0x9CAC U+60BD # +0x9CAD U+60C6 # +0x9CAE U+60B5 # +0x9CAF U+60D8 # +0x9CB0 U+614D # +0x9CB1 U+6115 # +0x9CB2 U+6106 # +0x9CB3 U+60F6 # +0x9CB4 U+60F7 # +0x9CB5 U+6100 # +0x9CB6 U+60F4 # +0x9CB7 U+60FA # +0x9CB8 U+6103 # +0x9CB9 U+6121 # +0x9CBA U+60FB # +0x9CBB U+60F1 # +0x9CBC U+610D # +0x9CBD U+610E # +0x9CBE U+6147 # +0x9CBF U+613E # +0x9CC0 U+6128 # +0x9CC1 U+6127 # +0x9CC2 U+614A # +0x9CC3 U+613F # +0x9CC4 U+613C # +0x9CC5 U+612C # +0x9CC6 U+6134 # +0x9CC7 U+613D # +0x9CC8 U+6142 # +0x9CC9 U+6144 # +0x9CCA U+6173 # +0x9CCB U+6177 # +0x9CCC U+6158 # +0x9CCD U+6159 # +0x9CCE U+615A # +0x9CCF U+616B # +0x9CD0 U+6174 # +0x9CD1 U+616F # +0x9CD2 U+6165 # +0x9CD3 U+6171 # +0x9CD4 U+615F # +0x9CD5 U+615D # +0x9CD6 U+6153 # +0x9CD7 U+6175 # +0x9CD8 U+6199 # +0x9CD9 U+6196 # +0x9CDA U+6187 # +0x9CDB U+61AC # +0x9CDC U+6194 # +0x9CDD U+619A # +0x9CDE U+618A # +0x9CDF U+6191 # +0x9CE0 U+61AB # +0x9CE1 U+61AE # +0x9CE2 U+61CC # +0x9CE3 U+61CA # +0x9CE4 U+61C9 # +0x9CE5 U+61F7 # +0x9CE6 U+61C8 # +0x9CE7 U+61C3 # +0x9CE8 U+61C6 # +0x9CE9 U+61BA # +0x9CEA U+61CB # +0x9CEB U+7F79 # +0x9CEC U+61CD # +0x9CED U+61E6 # +0x9CEE U+61E3 # +0x9CEF U+61F6 # +0x9CF0 U+61FA # +0x9CF1 U+61F4 # +0x9CF2 U+61FF # +0x9CF3 U+61FD # +0x9CF4 U+61FC # +0x9CF5 U+61FE # +0x9CF6 U+6200 # +0x9CF7 U+6208 # +0x9CF8 U+6209 # +0x9CF9 U+620D # +0x9CFA U+620C # +0x9CFB U+6214 # +0x9CFC U+621B # +0x9D40 U+621E # +0x9D41 U+6221 # +0x9D42 U+622A # +0x9D43 U+622E # +0x9D44 U+6230 # +0x9D45 U+6232 # +0x9D46 U+6233 # +0x9D47 U+6241 # +0x9D48 U+624E # +0x9D49 U+625E # +0x9D4A U+6263 # +0x9D4B U+625B # +0x9D4C U+6260 # +0x9D4D U+6268 # +0x9D4E U+627C # +0x9D4F U+6282 # +0x9D50 U+6289 # +0x9D51 U+627E # +0x9D52 U+6292 # +0x9D53 U+6293 # +0x9D54 U+6296 # +0x9D55 U+62D4 # +0x9D56 U+6283 # +0x9D57 U+6294 # +0x9D58 U+62D7 # +0x9D59 U+62D1 # +0x9D5A U+62BB # +0x9D5B U+62CF # +0x9D5C U+62FF # +0x9D5D U+62C6 # +0x9D5E U+64D4 # +0x9D5F U+62C8 # +0x9D60 U+62DC # +0x9D61 U+62CC # +0x9D62 U+62CA # +0x9D63 U+62C2 # +0x9D64 U+62C7 # +0x9D65 U+629B # +0x9D66 U+62C9 # +0x9D67 U+630C # +0x9D68 U+62EE # +0x9D69 U+62F1 # +0x9D6A U+6327 # +0x9D6B U+6302 # +0x9D6C U+6308 # +0x9D6D U+62EF # +0x9D6E U+62F5 # +0x9D6F U+6350 # +0x9D70 U+633E # +0x9D71 U+634D # +0x9D72 U+641C # +0x9D73 U+634F # +0x9D74 U+6396 # +0x9D75 U+638E # +0x9D76 U+6380 # +0x9D77 U+63AB # +0x9D78 U+6376 # +0x9D79 U+63A3 # +0x9D7A U+638F # +0x9D7B U+6389 # +0x9D7C U+639F # +0x9D7D U+63B5 # +0x9D7E U+636B # +0x9D80 U+6369 # +0x9D81 U+63BE # +0x9D82 U+63E9 # +0x9D83 U+63C0 # +0x9D84 U+63C6 # +0x9D85 U+63E3 # +0x9D86 U+63C9 # +0x9D87 U+63D2 # +0x9D88 U+63F6 # +0x9D89 U+63C4 # +0x9D8A U+6416 # +0x9D8B U+6434 # +0x9D8C U+6406 # +0x9D8D U+6413 # +0x9D8E U+6426 # +0x9D8F U+6436 # +0x9D90 U+651D # +0x9D91 U+6417 # +0x9D92 U+6428 # +0x9D93 U+640F # +0x9D94 U+6467 # +0x9D95 U+646F # +0x9D96 U+6476 # +0x9D97 U+644E # +0x9D98 U+652A # +0x9D99 U+6495 # +0x9D9A U+6493 # +0x9D9B U+64A5 # +0x9D9C U+64A9 # +0x9D9D U+6488 # +0x9D9E U+64BC # +0x9D9F U+64DA # +0x9DA0 U+64D2 # +0x9DA1 U+64C5 # +0x9DA2 U+64C7 # +0x9DA3 U+64BB # +0x9DA4 U+64D8 # +0x9DA5 U+64C2 # +0x9DA6 U+64F1 # +0x9DA7 U+64E7 # +0x9DA8 U+8209 # +0x9DA9 U+64E0 # +0x9DAA U+64E1 # +0x9DAB U+62AC # +0x9DAC U+64E3 # +0x9DAD U+64EF # +0x9DAE U+652C # +0x9DAF U+64F6 # +0x9DB0 U+64F4 # +0x9DB1 U+64F2 # +0x9DB2 U+64FA # +0x9DB3 U+6500 # +0x9DB4 U+64FD # +0x9DB5 U+6518 # +0x9DB6 U+651C # +0x9DB7 U+6505 # +0x9DB8 U+6524 # +0x9DB9 U+6523 # +0x9DBA U+652B # +0x9DBB U+6534 # +0x9DBC U+6535 # +0x9DBD U+6537 # +0x9DBE U+6536 # +0x9DBF U+6538 # +0x9DC0 U+754B # +0x9DC1 U+6548 # +0x9DC2 U+6556 # +0x9DC3 U+6555 # +0x9DC4 U+654D # +0x9DC5 U+6558 # +0x9DC6 U+655E # +0x9DC7 U+655D # +0x9DC8 U+6572 # +0x9DC9 U+6578 # +0x9DCA U+6582 # +0x9DCB U+6583 # +0x9DCC U+8B8A # +0x9DCD U+659B # +0x9DCE U+659F # +0x9DCF U+65AB # +0x9DD0 U+65B7 # +0x9DD1 U+65C3 # +0x9DD2 U+65C6 # +0x9DD3 U+65C1 # +0x9DD4 U+65C4 # +0x9DD5 U+65CC # +0x9DD6 U+65D2 # +0x9DD7 U+65DB # +0x9DD8 U+65D9 # +0x9DD9 U+65E0 # +0x9DDA U+65E1 # +0x9DDB U+65F1 # +0x9DDC U+6772 # +0x9DDD U+660A # +0x9DDE U+6603 # +0x9DDF U+65FB # +0x9DE0 U+6773 # +0x9DE1 U+6635 # +0x9DE2 U+6636 # +0x9DE3 U+6634 # +0x9DE4 U+661C # +0x9DE5 U+664F # +0x9DE6 U+6644 # +0x9DE7 U+6649 # +0x9DE8 U+6641 # +0x9DE9 U+665E # +0x9DEA U+665D # +0x9DEB U+6664 # +0x9DEC U+6667 # +0x9DED U+6668 # +0x9DEE U+665F # +0x9DEF U+6662 # +0x9DF0 U+6670 # +0x9DF1 U+6683 # +0x9DF2 U+6688 # +0x9DF3 U+668E # +0x9DF4 U+6689 # +0x9DF5 U+6684 # +0x9DF6 U+6698 # +0x9DF7 U+669D # +0x9DF8 U+66C1 # +0x9DF9 U+66B9 # +0x9DFA U+66C9 # +0x9DFB U+66BE # +0x9DFC U+66BC # +0x9E40 U+66C4 # +0x9E41 U+66B8 # +0x9E42 U+66D6 # +0x9E43 U+66DA # +0x9E44 U+66E0 # +0x9E45 U+663F # +0x9E46 U+66E6 # +0x9E47 U+66E9 # +0x9E48 U+66F0 # +0x9E49 U+66F5 # +0x9E4A U+66F7 # +0x9E4B U+670F # +0x9E4C U+6716 # +0x9E4D U+671E # +0x9E4E U+6726 # +0x9E4F U+6727 # +0x9E50 U+9738 # +0x9E51 U+672E # +0x9E52 U+673F # +0x9E53 U+6736 # +0x9E54 U+6741 # +0x9E55 U+6738 # +0x9E56 U+6737 # +0x9E57 U+6746 # +0x9E58 U+675E # +0x9E59 U+6760 # +0x9E5A U+6759 # +0x9E5B U+6763 # +0x9E5C U+6764 # +0x9E5D U+6789 # +0x9E5E U+6770 # +0x9E5F U+67A9 # +0x9E60 U+677C # +0x9E61 U+676A # +0x9E62 U+678C # +0x9E63 U+678B # +0x9E64 U+67A6 # +0x9E65 U+67A1 # +0x9E66 U+6785 # +0x9E67 U+67B7 # +0x9E68 U+67EF # +0x9E69 U+67B4 # +0x9E6A U+67EC # +0x9E6B U+67B3 # +0x9E6C U+67E9 # +0x9E6D U+67B8 # +0x9E6E U+67E4 # +0x9E6F U+67DE # +0x9E70 U+67DD # +0x9E71 U+67E2 # +0x9E72 U+67EE # +0x9E73 U+67B9 # +0x9E74 U+67CE # +0x9E75 U+67C6 # +0x9E76 U+67E7 # +0x9E77 U+6A9C # +0x9E78 U+681E # +0x9E79 U+6846 # +0x9E7A U+6829 # +0x9E7B U+6840 # +0x9E7C U+684D # +0x9E7D U+6832 # +0x9E7E U+684E # +0x9E80 U+68B3 # +0x9E81 U+682B # +0x9E82 U+6859 # +0x9E83 U+6863 # +0x9E84 U+6877 # +0x9E85 U+687F # +0x9E86 U+689F # +0x9E87 U+688F # +0x9E88 U+68AD # +0x9E89 U+6894 # +0x9E8A U+689D # +0x9E8B U+689B # +0x9E8C U+6883 # +0x9E8D U+6AAE # +0x9E8E U+68B9 # +0x9E8F U+6874 # +0x9E90 U+68B5 # +0x9E91 U+68A0 # +0x9E92 U+68BA # +0x9E93 U+690F # +0x9E94 U+688D # +0x9E95 U+687E # +0x9E96 U+6901 # +0x9E97 U+68CA # +0x9E98 U+6908 # +0x9E99 U+68D8 # +0x9E9A U+6922 # +0x9E9B U+6926 # +0x9E9C U+68E1 # +0x9E9D U+690C # +0x9E9E U+68CD # +0x9E9F U+68D4 # +0x9EA0 U+68E7 # +0x9EA1 U+68D5 # +0x9EA2 U+6936 # +0x9EA3 U+6912 # +0x9EA4 U+6904 # +0x9EA5 U+68D7 # +0x9EA6 U+68E3 # +0x9EA7 U+6925 # +0x9EA8 U+68F9 # +0x9EA9 U+68E0 # +0x9EAA U+68EF # +0x9EAB U+6928 # +0x9EAC U+692A # +0x9EAD U+691A # +0x9EAE U+6923 # +0x9EAF U+6921 # +0x9EB0 U+68C6 # +0x9EB1 U+6979 # +0x9EB2 U+6977 # +0x9EB3 U+695C # +0x9EB4 U+6978 # +0x9EB5 U+696B # +0x9EB6 U+6954 # +0x9EB7 U+697E # +0x9EB8 U+696E # +0x9EB9 U+6939 # +0x9EBA U+6974 # +0x9EBB U+693D # +0x9EBC U+6959 # +0x9EBD U+6930 # +0x9EBE U+6961 # +0x9EBF U+695E # +0x9EC0 U+695D # +0x9EC1 U+6981 # +0x9EC2 U+696A # +0x9EC3 U+69B2 # +0x9EC4 U+69AE # +0x9EC5 U+69D0 # +0x9EC6 U+69BF # +0x9EC7 U+69C1 # +0x9EC8 U+69D3 # +0x9EC9 U+69BE # +0x9ECA U+69CE # +0x9ECB U+5BE8 # +0x9ECC U+69CA # +0x9ECD U+69DD # +0x9ECE U+69BB # +0x9ECF U+69C3 # +0x9ED0 U+69A7 # +0x9ED1 U+6A2E # +0x9ED2 U+6991 # +0x9ED3 U+69A0 # +0x9ED4 U+699C # +0x9ED5 U+6995 # +0x9ED6 U+69B4 # +0x9ED7 U+69DE # +0x9ED8 U+69E8 # +0x9ED9 U+6A02 # +0x9EDA U+6A1B # +0x9EDB U+69FF # +0x9EDC U+6B0A # +0x9EDD U+69F9 # +0x9EDE U+69F2 # +0x9EDF U+69E7 # +0x9EE0 U+6A05 # +0x9EE1 U+69B1 # +0x9EE2 U+6A1E # +0x9EE3 U+69ED # +0x9EE4 U+6A14 # +0x9EE5 U+69EB # +0x9EE6 U+6A0A # +0x9EE7 U+6A12 # +0x9EE8 U+6AC1 # +0x9EE9 U+6A23 # +0x9EEA U+6A13 # +0x9EEB U+6A44 # +0x9EEC U+6A0C # +0x9EED U+6A72 # +0x9EEE U+6A36 # +0x9EEF U+6A78 # +0x9EF0 U+6A47 # +0x9EF1 U+6A62 # +0x9EF2 U+6A59 # +0x9EF3 U+6A66 # +0x9EF4 U+6A48 # +0x9EF5 U+6A38 # +0x9EF6 U+6A22 # +0x9EF7 U+6A90 # +0x9EF8 U+6A8D # +0x9EF9 U+6AA0 # +0x9EFA U+6A84 # +0x9EFB U+6AA2 # +0x9EFC U+6AA3 # +0x9F40 U+6A97 # +0x9F41 U+8617 # +0x9F42 U+6ABB # +0x9F43 U+6AC3 # +0x9F44 U+6AC2 # +0x9F45 U+6AB8 # +0x9F46 U+6AB3 # +0x9F47 U+6AAC # +0x9F48 U+6ADE # +0x9F49 U+6AD1 # +0x9F4A U+6ADF # +0x9F4B U+6AAA # +0x9F4C U+6ADA # +0x9F4D U+6AEA # +0x9F4E U+6AFB # +0x9F4F U+6B05 # +0x9F50 U+8616 # +0x9F51 U+6AFA # +0x9F52 U+6B12 # +0x9F53 U+6B16 # +0x9F54 U+9B31 # +0x9F55 U+6B1F # +0x9F56 U+6B38 # +0x9F57 U+6B37 # +0x9F58 U+76DC # +0x9F59 U+6B39 # +0x9F5A U+98EE # +0x9F5B U+6B47 # +0x9F5C U+6B43 # +0x9F5D U+6B49 # +0x9F5E U+6B50 # +0x9F5F U+6B59 # +0x9F60 U+6B54 # +0x9F61 U+6B5B # +0x9F62 U+6B5F # +0x9F63 U+6B61 # +0x9F64 U+6B78 # +0x9F65 U+6B79 # +0x9F66 U+6B7F # +0x9F67 U+6B80 # +0x9F68 U+6B84 # +0x9F69 U+6B83 # +0x9F6A U+6B8D # +0x9F6B U+6B98 # +0x9F6C U+6B95 # +0x9F6D U+6B9E # +0x9F6E U+6BA4 # +0x9F6F U+6BAA # +0x9F70 U+6BAB # +0x9F71 U+6BAF # +0x9F72 U+6BB2 # +0x9F73 U+6BB1 # +0x9F74 U+6BB3 # +0x9F75 U+6BB7 # +0x9F76 U+6BBC # +0x9F77 U+6BC6 # +0x9F78 U+6BCB # +0x9F79 U+6BD3 # +0x9F7A U+6BDF # +0x9F7B U+6BEC # +0x9F7C U+6BEB # +0x9F7D U+6BF3 # +0x9F7E U+6BEF # +0x9F80 U+9EBE # +0x9F81 U+6C08 # +0x9F82 U+6C13 # +0x9F83 U+6C14 # +0x9F84 U+6C1B # +0x9F85 U+6C24 # +0x9F86 U+6C23 # +0x9F87 U+6C5E # +0x9F88 U+6C55 # +0x9F89 U+6C62 # +0x9F8A U+6C6A # +0x9F8B U+6C82 # +0x9F8C U+6C8D # +0x9F8D U+6C9A # +0x9F8E U+6C81 # +0x9F8F U+6C9B # +0x9F90 U+6C7E # +0x9F91 U+6C68 # +0x9F92 U+6C73 # +0x9F93 U+6C92 # +0x9F94 U+6C90 # +0x9F95 U+6CC4 # +0x9F96 U+6CF1 # +0x9F97 U+6CD3 # +0x9F98 U+6CBD # +0x9F99 U+6CD7 # +0x9F9A U+6CC5 # +0x9F9B U+6CDD # +0x9F9C U+6CAE # +0x9F9D U+6CB1 # +0x9F9E U+6CBE # +0x9F9F U+6CBA # +0x9FA0 U+6CDB # +0x9FA1 U+6CEF # +0x9FA2 U+6CD9 # +0x9FA3 U+6CEA # +0x9FA4 U+6D1F # +0x9FA5 U+884D # +0x9FA6 U+6D36 # +0x9FA7 U+6D2B # +0x9FA8 U+6D3D # +0x9FA9 U+6D38 # +0x9FAA U+6D19 # +0x9FAB U+6D35 # +0x9FAC U+6D33 # +0x9FAD U+6D12 # +0x9FAE U+6D0C # +0x9FAF U+6D63 # +0x9FB0 U+6D93 # +0x9FB1 U+6D64 # +0x9FB2 U+6D5A # +0x9FB3 U+6D79 # +0x9FB4 U+6D59 # +0x9FB5 U+6D8E # +0x9FB6 U+6D95 # +0x9FB7 U+6FE4 # +0x9FB8 U+6D85 # +0x9FB9 U+6DF9 # +0x9FBA U+6E15 # +0x9FBB U+6E0A # +0x9FBC U+6DB5 # +0x9FBD U+6DC7 # +0x9FBE U+6DE6 # +0x9FBF U+6DB8 # +0x9FC0 U+6DC6 # +0x9FC1 U+6DEC # +0x9FC2 U+6DDE # +0x9FC3 U+6DCC # +0x9FC4 U+6DE8 # +0x9FC5 U+6DD2 # +0x9FC6 U+6DC5 # +0x9FC7 U+6DFA # +0x9FC8 U+6DD9 # +0x9FC9 U+6DE4 # +0x9FCA U+6DD5 # +0x9FCB U+6DEA # +0x9FCC U+6DEE # +0x9FCD U+6E2D # +0x9FCE U+6E6E # +0x9FCF U+6E2E # +0x9FD0 U+6E19 # +0x9FD1 U+6E72 # +0x9FD2 U+6E5F # +0x9FD3 U+6E3E # +0x9FD4 U+6E23 # +0x9FD5 U+6E6B # +0x9FD6 U+6E2B # +0x9FD7 U+6E76 # +0x9FD8 U+6E4D # +0x9FD9 U+6E1F # +0x9FDA U+6E43 # +0x9FDB U+6E3A # +0x9FDC U+6E4E # +0x9FDD U+6E24 # +0x9FDE U+6EFF # +0x9FDF U+6E1D # +0x9FE0 U+6E38 # +0x9FE1 U+6E82 # +0x9FE2 U+6EAA # +0x9FE3 U+6E98 # +0x9FE4 U+6EC9 # +0x9FE5 U+6EB7 # +0x9FE6 U+6ED3 # +0x9FE7 U+6EBD # +0x9FE8 U+6EAF # +0x9FE9 U+6EC4 # +0x9FEA U+6EB2 # +0x9FEB U+6ED4 # +0x9FEC U+6ED5 # +0x9FED U+6E8F # +0x9FEE U+6EA5 # +0x9FEF U+6EC2 # +0x9FF0 U+6E9F # +0x9FF1 U+6F41 # +0x9FF2 U+6F11 # +0x9FF3 U+704C # +0x9FF4 U+6EEC # +0x9FF5 U+6EF8 # +0x9FF6 U+6EFE # +0x9FF7 U+6F3F # +0x9FF8 U+6EF2 # +0x9FF9 U+6F31 # +0x9FFA U+6EEF # +0x9FFB U+6F32 # +0x9FFC U+6ECC # +0xE040 U+6F3E # +0xE041 U+6F13 # +0xE042 U+6EF7 # +0xE043 U+6F86 # +0xE044 U+6F7A # +0xE045 U+6F78 # +0xE046 U+6F81 # +0xE047 U+6F80 # +0xE048 U+6F6F # +0xE049 U+6F5B # +0xE04A U+6FF3 # +0xE04B U+6F6D # +0xE04C U+6F82 # +0xE04D U+6F7C # +0xE04E U+6F58 # +0xE04F U+6F8E # +0xE050 U+6F91 # +0xE051 U+6FC2 # +0xE052 U+6F66 # +0xE053 U+6FB3 # +0xE054 U+6FA3 # +0xE055 U+6FA1 # +0xE056 U+6FA4 # +0xE057 U+6FB9 # +0xE058 U+6FC6 # +0xE059 U+6FAA # +0xE05A U+6FDF # +0xE05B U+6FD5 # +0xE05C U+6FEC # +0xE05D U+6FD4 # +0xE05E U+6FD8 # +0xE05F U+6FF1 # +0xE060 U+6FEE # +0xE061 U+6FDB # +0xE062 U+7009 # +0xE063 U+700B # +0xE064 U+6FFA # +0xE065 U+7011 # +0xE066 U+7001 # +0xE067 U+700F # +0xE068 U+6FFE # +0xE069 U+701B # +0xE06A U+701A # +0xE06B U+6F74 # +0xE06C U+701D # +0xE06D U+7018 # +0xE06E U+701F # +0xE06F U+7030 # +0xE070 U+703E # +0xE071 U+7032 # +0xE072 U+7051 # +0xE073 U+7063 # +0xE074 U+7099 # +0xE075 U+7092 # +0xE076 U+70AF # +0xE077 U+70F1 # +0xE078 U+70AC # +0xE079 U+70B8 # +0xE07A U+70B3 # +0xE07B U+70AE # +0xE07C U+70DF # +0xE07D U+70CB # +0xE07E U+70DD # +0xE080 U+70D9 # +0xE081 U+7109 # +0xE082 U+70FD # +0xE083 U+711C # +0xE084 U+7119 # +0xE085 U+7165 # +0xE086 U+7155 # +0xE087 U+7188 # +0xE088 U+7166 # +0xE089 U+7162 # +0xE08A U+714C # +0xE08B U+7156 # +0xE08C U+716C # +0xE08D U+718F # +0xE08E U+71FB # +0xE08F U+7184 # +0xE090 U+7195 # +0xE091 U+71A8 # +0xE092 U+71AC # +0xE093 U+71D7 # +0xE094 U+71B9 # +0xE095 U+71BE # +0xE096 U+71D2 # +0xE097 U+71C9 # +0xE098 U+71D4 # +0xE099 U+71CE # +0xE09A U+71E0 # +0xE09B U+71EC # +0xE09C U+71E7 # +0xE09D U+71F5 # +0xE09E U+71FC # +0xE09F U+71F9 # +0xE0A0 U+71FF # +0xE0A1 U+720D # +0xE0A2 U+7210 # +0xE0A3 U+721B # +0xE0A4 U+7228 # +0xE0A5 U+722D # +0xE0A6 U+722C # +0xE0A7 U+7230 # +0xE0A8 U+7232 # +0xE0A9 U+723B # +0xE0AA U+723C # +0xE0AB U+723F # +0xE0AC U+7240 # +0xE0AD U+7246 # +0xE0AE U+724B # +0xE0AF U+7258 # +0xE0B0 U+7274 # +0xE0B1 U+727E # +0xE0B2 U+7282 # +0xE0B3 U+7281 # +0xE0B4 U+7287 # +0xE0B5 U+7292 # +0xE0B6 U+7296 # +0xE0B7 U+72A2 # +0xE0B8 U+72A7 # +0xE0B9 U+72B9 # +0xE0BA U+72B2 # +0xE0BB U+72C3 # +0xE0BC U+72C6 # +0xE0BD U+72C4 # +0xE0BE U+72CE # +0xE0BF U+72D2 # +0xE0C0 U+72E2 # +0xE0C1 U+72E0 # +0xE0C2 U+72E1 # +0xE0C3 U+72F9 # +0xE0C4 U+72F7 # +0xE0C5 U+500F # +0xE0C6 U+7317 # +0xE0C7 U+730A # +0xE0C8 U+731C # +0xE0C9 U+7316 # +0xE0CA U+731D # +0xE0CB U+7334 # +0xE0CC U+732F # +0xE0CD U+7329 # +0xE0CE U+7325 # +0xE0CF U+733E # +0xE0D0 U+734E # +0xE0D1 U+734F # +0xE0D2 U+9ED8 # +0xE0D3 U+7357 # +0xE0D4 U+736A # +0xE0D5 U+7368 # +0xE0D6 U+7370 # +0xE0D7 U+7378 # +0xE0D8 U+7375 # +0xE0D9 U+737B # +0xE0DA U+737A # +0xE0DB U+73C8 # +0xE0DC U+73B3 # +0xE0DD U+73CE # +0xE0DE U+73BB # +0xE0DF U+73C0 # +0xE0E0 U+73E5 # +0xE0E1 U+73EE # +0xE0E2 U+73DE # +0xE0E3 U+74A2 # +0xE0E4 U+7405 # +0xE0E5 U+746F # +0xE0E6 U+7425 # +0xE0E7 U+73F8 # +0xE0E8 U+7432 # +0xE0E9 U+743A # +0xE0EA U+7455 # +0xE0EB U+743F # +0xE0EC U+745F # +0xE0ED U+7459 # +0xE0EE U+7441 # +0xE0EF U+745C # +0xE0F0 U+7469 # +0xE0F1 U+7470 # +0xE0F2 U+7463 # +0xE0F3 U+746A # +0xE0F4 U+7476 # +0xE0F5 U+747E # +0xE0F6 U+748B # +0xE0F7 U+749E # +0xE0F8 U+74A7 # +0xE0F9 U+74CA # +0xE0FA U+74CF # +0xE0FB U+74D4 # +0xE0FC U+73F1 # +0xE140 U+74E0 # +0xE141 U+74E3 # +0xE142 U+74E7 # +0xE143 U+74E9 # +0xE144 U+74EE # +0xE145 U+74F2 # +0xE146 U+74F0 # +0xE147 U+74F1 # +0xE148 U+74F8 # +0xE149 U+74F7 # +0xE14A U+7504 # +0xE14B U+7503 # +0xE14C U+7505 # +0xE14D U+750C # +0xE14E U+750E # +0xE14F U+750D # +0xE150 U+7515 # +0xE151 U+7513 # +0xE152 U+751E # +0xE153 U+7526 # +0xE154 U+752C # +0xE155 U+753C # +0xE156 U+7544 # +0xE157 U+754D # +0xE158 U+754A # +0xE159 U+7549 # +0xE15A U+755B # +0xE15B U+7546 # +0xE15C U+755A # +0xE15D U+7569 # +0xE15E U+7564 # +0xE15F U+7567 # +0xE160 U+756B # +0xE161 U+756D # +0xE162 U+7578 # +0xE163 U+7576 # +0xE164 U+7586 # +0xE165 U+7587 # +0xE166 U+7574 # +0xE167 U+758A # +0xE168 U+7589 # +0xE169 U+7582 # +0xE16A U+7594 # +0xE16B U+759A # +0xE16C U+759D # +0xE16D U+75A5 # +0xE16E U+75A3 # +0xE16F U+75C2 # +0xE170 U+75B3 # +0xE171 U+75C3 # +0xE172 U+75B5 # +0xE173 U+75BD # +0xE174 U+75B8 # +0xE175 U+75BC # +0xE176 U+75B1 # +0xE177 U+75CD # +0xE178 U+75CA # +0xE179 U+75D2 # +0xE17A U+75D9 # +0xE17B U+75E3 # +0xE17C U+75DE # +0xE17D U+75FE # +0xE17E U+75FF # +0xE180 U+75FC # +0xE181 U+7601 # +0xE182 U+75F0 # +0xE183 U+75FA # +0xE184 U+75F2 # +0xE185 U+75F3 # +0xE186 U+760B # +0xE187 U+760D # +0xE188 U+7609 # +0xE189 U+761F # +0xE18A U+7627 # +0xE18B U+7620 # +0xE18C U+7621 # +0xE18D U+7622 # +0xE18E U+7624 # +0xE18F U+7634 # +0xE190 U+7630 # +0xE191 U+763B # +0xE192 U+7647 # +0xE193 U+7648 # +0xE194 U+7646 # +0xE195 U+765C # +0xE196 U+7658 # +0xE197 U+7661 # +0xE198 U+7662 # +0xE199 U+7668 # +0xE19A U+7669 # +0xE19B U+766A # +0xE19C U+7667 # +0xE19D U+766C # +0xE19E U+7670 # +0xE19F U+7672 # +0xE1A0 U+7676 # +0xE1A1 U+7678 # +0xE1A2 U+767C # +0xE1A3 U+7680 # +0xE1A4 U+7683 # +0xE1A5 U+7688 # +0xE1A6 U+768B # +0xE1A7 U+768E # +0xE1A8 U+7696 # +0xE1A9 U+7693 # +0xE1AA U+7699 # +0xE1AB U+769A # +0xE1AC U+76B0 # +0xE1AD U+76B4 # +0xE1AE U+76B8 # +0xE1AF U+76B9 # +0xE1B0 U+76BA # +0xE1B1 U+76C2 # +0xE1B2 U+76CD # +0xE1B3 U+76D6 # +0xE1B4 U+76D2 # +0xE1B5 U+76DE # +0xE1B6 U+76E1 # +0xE1B7 U+76E5 # +0xE1B8 U+76E7 # +0xE1B9 U+76EA # +0xE1BA U+862F # +0xE1BB U+76FB # +0xE1BC U+7708 # +0xE1BD U+7707 # +0xE1BE U+7704 # +0xE1BF U+7729 # +0xE1C0 U+7724 # +0xE1C1 U+771E # +0xE1C2 U+7725 # +0xE1C3 U+7726 # +0xE1C4 U+771B # +0xE1C5 U+7737 # +0xE1C6 U+7738 # +0xE1C7 U+7747 # +0xE1C8 U+775A # +0xE1C9 U+7768 # +0xE1CA U+776B # +0xE1CB U+775B # +0xE1CC U+7765 # +0xE1CD U+777F # +0xE1CE U+777E # +0xE1CF U+7779 # +0xE1D0 U+778E # +0xE1D1 U+778B # +0xE1D2 U+7791 # +0xE1D3 U+77A0 # +0xE1D4 U+779E # +0xE1D5 U+77B0 # +0xE1D6 U+77B6 # +0xE1D7 U+77B9 # +0xE1D8 U+77BF # +0xE1D9 U+77BC # +0xE1DA U+77BD # +0xE1DB U+77BB # +0xE1DC U+77C7 # +0xE1DD U+77CD # +0xE1DE U+77D7 # +0xE1DF U+77DA # +0xE1E0 U+77DC # +0xE1E1 U+77E3 # +0xE1E2 U+77EE # +0xE1E3 U+77FC # +0xE1E4 U+780C # +0xE1E5 U+7812 # +0xE1E6 U+7926 # +0xE1E7 U+7820 # +0xE1E8 U+792A # +0xE1E9 U+7845 # +0xE1EA U+788E # +0xE1EB U+7874 # +0xE1EC U+7886 # +0xE1ED U+787C # +0xE1EE U+789A # +0xE1EF U+788C # +0xE1F0 U+78A3 # +0xE1F1 U+78B5 # +0xE1F2 U+78AA # +0xE1F3 U+78AF # +0xE1F4 U+78D1 # +0xE1F5 U+78C6 # +0xE1F6 U+78CB # +0xE1F7 U+78D4 # +0xE1F8 U+78BE # +0xE1F9 U+78BC # +0xE1FA U+78C5 # +0xE1FB U+78CA # +0xE1FC U+78EC # +0xE240 U+78E7 # +0xE241 U+78DA # +0xE242 U+78FD # +0xE243 U+78F4 # +0xE244 U+7907 # +0xE245 U+7912 # +0xE246 U+7911 # +0xE247 U+7919 # +0xE248 U+792C # +0xE249 U+792B # +0xE24A U+7940 # +0xE24B U+7960 # +0xE24C U+7957 # +0xE24D U+795F # +0xE24E U+795A # +0xE24F U+7955 # +0xE250 U+7953 # +0xE251 U+797A # +0xE252 U+797F # +0xE253 U+798A # +0xE254 U+799D # +0xE255 U+79A7 # +0xE256 U+9F4B # +0xE257 U+79AA # +0xE258 U+79AE # +0xE259 U+79B3 # +0xE25A U+79B9 # +0xE25B U+79BA # +0xE25C U+79C9 # +0xE25D U+79D5 # +0xE25E U+79E7 # +0xE25F U+79EC # +0xE260 U+79E1 # +0xE261 U+79E3 # +0xE262 U+7A08 # +0xE263 U+7A0D # +0xE264 U+7A18 # +0xE265 U+7A19 # +0xE266 U+7A20 # +0xE267 U+7A1F # +0xE268 U+7980 # +0xE269 U+7A31 # +0xE26A U+7A3B # +0xE26B U+7A3E # +0xE26C U+7A37 # +0xE26D U+7A43 # +0xE26E U+7A57 # +0xE26F U+7A49 # +0xE270 U+7A61 # +0xE271 U+7A62 # +0xE272 U+7A69 # +0xE273 U+9F9D # +0xE274 U+7A70 # +0xE275 U+7A79 # +0xE276 U+7A7D # +0xE277 U+7A88 # +0xE278 U+7A97 # +0xE279 U+7A95 # +0xE27A U+7A98 # +0xE27B U+7A96 # +0xE27C U+7AA9 # +0xE27D U+7AC8 # +0xE27E U+7AB0 # +0xE280 U+7AB6 # +0xE281 U+7AC5 # +0xE282 U+7AC4 # +0xE283 U+7ABF # +0xE284 U+9083 # +0xE285 U+7AC7 # +0xE286 U+7ACA # +0xE287 U+7ACD # +0xE288 U+7ACF # +0xE289 U+7AD5 # +0xE28A U+7AD3 # +0xE28B U+7AD9 # +0xE28C U+7ADA # +0xE28D U+7ADD # +0xE28E U+7AE1 # +0xE28F U+7AE2 # +0xE290 U+7AE6 # +0xE291 U+7AED # +0xE292 U+7AF0 # +0xE293 U+7B02 # +0xE294 U+7B0F # +0xE295 U+7B0A # +0xE296 U+7B06 # +0xE297 U+7B33 # +0xE298 U+7B18 # +0xE299 U+7B19 # +0xE29A U+7B1E # +0xE29B U+7B35 # +0xE29C U+7B28 # +0xE29D U+7B36 # +0xE29E U+7B50 # +0xE29F U+7B7A # +0xE2A0 U+7B04 # +0xE2A1 U+7B4D # +0xE2A2 U+7B0B # +0xE2A3 U+7B4C # +0xE2A4 U+7B45 # +0xE2A5 U+7B75 # +0xE2A6 U+7B65 # +0xE2A7 U+7B74 # +0xE2A8 U+7B67 # +0xE2A9 U+7B70 # +0xE2AA U+7B71 # +0xE2AB U+7B6C # +0xE2AC U+7B6E # +0xE2AD U+7B9D # +0xE2AE U+7B98 # +0xE2AF U+7B9F # +0xE2B0 U+7B8D # +0xE2B1 U+7B9C # +0xE2B2 U+7B9A # +0xE2B3 U+7B8B # +0xE2B4 U+7B92 # +0xE2B5 U+7B8F # +0xE2B6 U+7B5D # +0xE2B7 U+7B99 # +0xE2B8 U+7BCB # +0xE2B9 U+7BC1 # +0xE2BA U+7BCC # +0xE2BB U+7BCF # +0xE2BC U+7BB4 # +0xE2BD U+7BC6 # +0xE2BE U+7BDD # +0xE2BF U+7BE9 # +0xE2C0 U+7C11 # +0xE2C1 U+7C14 # +0xE2C2 U+7BE6 # +0xE2C3 U+7BE5 # +0xE2C4 U+7C60 # +0xE2C5 U+7C00 # +0xE2C6 U+7C07 # +0xE2C7 U+7C13 # +0xE2C8 U+7BF3 # +0xE2C9 U+7BF7 # +0xE2CA U+7C17 # +0xE2CB U+7C0D # +0xE2CC U+7BF6 # +0xE2CD U+7C23 # +0xE2CE U+7C27 # +0xE2CF U+7C2A # +0xE2D0 U+7C1F # +0xE2D1 U+7C37 # +0xE2D2 U+7C2B # +0xE2D3 U+7C3D # +0xE2D4 U+7C4C # +0xE2D5 U+7C43 # +0xE2D6 U+7C54 # +0xE2D7 U+7C4F # +0xE2D8 U+7C40 # +0xE2D9 U+7C50 # +0xE2DA U+7C58 # +0xE2DB U+7C5F # +0xE2DC U+7C64 # +0xE2DD U+7C56 # +0xE2DE U+7C65 # +0xE2DF U+7C6C # +0xE2E0 U+7C75 # +0xE2E1 U+7C83 # +0xE2E2 U+7C90 # +0xE2E3 U+7CA4 # +0xE2E4 U+7CAD # +0xE2E5 U+7CA2 # +0xE2E6 U+7CAB # +0xE2E7 U+7CA1 # +0xE2E8 U+7CA8 # +0xE2E9 U+7CB3 # +0xE2EA U+7CB2 # +0xE2EB U+7CB1 # +0xE2EC U+7CAE # +0xE2ED U+7CB9 # +0xE2EE U+7CBD # +0xE2EF U+7CC0 # +0xE2F0 U+7CC5 # +0xE2F1 U+7CC2 # +0xE2F2 U+7CD8 # +0xE2F3 U+7CD2 # +0xE2F4 U+7CDC # +0xE2F5 U+7CE2 # +0xE2F6 U+9B3B # +0xE2F7 U+7CEF # +0xE2F8 U+7CF2 # +0xE2F9 U+7CF4 # +0xE2FA U+7CF6 # +0xE2FB U+7CFA # +0xE2FC U+7D06 # +0xE340 U+7D02 # +0xE341 U+7D1C # +0xE342 U+7D15 # +0xE343 U+7D0A # +0xE344 U+7D45 # +0xE345 U+7D4B # +0xE346 U+7D2E # +0xE347 U+7D32 # +0xE348 U+7D3F # +0xE349 U+7D35 # +0xE34A U+7D46 # +0xE34B U+7D73 # +0xE34C U+7D56 # +0xE34D U+7D4E # +0xE34E U+7D72 # +0xE34F U+7D68 # +0xE350 U+7D6E # +0xE351 U+7D4F # +0xE352 U+7D63 # +0xE353 U+7D93 # +0xE354 U+7D89 # +0xE355 U+7D5B # +0xE356 U+7D8F # +0xE357 U+7D7D # +0xE358 U+7D9B # +0xE359 U+7DBA # +0xE35A U+7DAE # +0xE35B U+7DA3 # +0xE35C U+7DB5 # +0xE35D U+7DC7 # +0xE35E U+7DBD # +0xE35F U+7DAB # +0xE360 U+7E3D # +0xE361 U+7DA2 # +0xE362 U+7DAF # +0xE363 U+7DDC # +0xE364 U+7DB8 # +0xE365 U+7D9F # +0xE366 U+7DB0 # +0xE367 U+7DD8 # +0xE368 U+7DDD # +0xE369 U+7DE4 # +0xE36A U+7DDE # +0xE36B U+7DFB # +0xE36C U+7DF2 # +0xE36D U+7DE1 # +0xE36E U+7E05 # +0xE36F U+7E0A # +0xE370 U+7E23 # +0xE371 U+7E21 # +0xE372 U+7E12 # +0xE373 U+7E31 # +0xE374 U+7E1F # +0xE375 U+7E09 # +0xE376 U+7E0B # +0xE377 U+7E22 # +0xE378 U+7E46 # +0xE379 U+7E66 # +0xE37A U+7E3B # +0xE37B U+7E35 # +0xE37C U+7E39 # +0xE37D U+7E43 # +0xE37E U+7E37 # +0xE380 U+7E32 # +0xE381 U+7E3A # +0xE382 U+7E67 # +0xE383 U+7E5D # +0xE384 U+7E56 # +0xE385 U+7E5E # +0xE386 U+7E59 # +0xE387 U+7E5A # +0xE388 U+7E79 # +0xE389 U+7E6A # +0xE38A U+7E69 # +0xE38B U+7E7C # +0xE38C U+7E7B # +0xE38D U+7E83 # +0xE38E U+7DD5 # +0xE38F U+7E7D # +0xE390 U+8FAE # +0xE391 U+7E7F # +0xE392 U+7E88 # +0xE393 U+7E89 # +0xE394 U+7E8C # +0xE395 U+7E92 # +0xE396 U+7E90 # +0xE397 U+7E93 # +0xE398 U+7E94 # +0xE399 U+7E96 # +0xE39A U+7E8E # +0xE39B U+7E9B # +0xE39C U+7E9C # +0xE39D U+7F38 # +0xE39E U+7F3A # +0xE39F U+7F45 # +0xE3A0 U+7F4C # +0xE3A1 U+7F4D # +0xE3A2 U+7F4E # +0xE3A3 U+7F50 # +0xE3A4 U+7F51 # +0xE3A5 U+7F55 # +0xE3A6 U+7F54 # +0xE3A7 U+7F58 # +0xE3A8 U+7F5F # +0xE3A9 U+7F60 # +0xE3AA U+7F68 # +0xE3AB U+7F69 # +0xE3AC U+7F67 # +0xE3AD U+7F78 # +0xE3AE U+7F82 # +0xE3AF U+7F86 # +0xE3B0 U+7F83 # +0xE3B1 U+7F88 # +0xE3B2 U+7F87 # +0xE3B3 U+7F8C # +0xE3B4 U+7F94 # +0xE3B5 U+7F9E # +0xE3B6 U+7F9D # +0xE3B7 U+7F9A # +0xE3B8 U+7FA3 # +0xE3B9 U+7FAF # +0xE3BA U+7FB2 # +0xE3BB U+7FB9 # +0xE3BC U+7FAE # +0xE3BD U+7FB6 # +0xE3BE U+7FB8 # +0xE3BF U+8B71 # +0xE3C0 U+7FC5 # +0xE3C1 U+7FC6 # +0xE3C2 U+7FCA # +0xE3C3 U+7FD5 # +0xE3C4 U+7FD4 # +0xE3C5 U+7FE1 # +0xE3C6 U+7FE6 # +0xE3C7 U+7FE9 # +0xE3C8 U+7FF3 # +0xE3C9 U+7FF9 # +0xE3CA U+98DC # +0xE3CB U+8006 # +0xE3CC U+8004 # +0xE3CD U+800B # +0xE3CE U+8012 # +0xE3CF U+8018 # +0xE3D0 U+8019 # +0xE3D1 U+801C # +0xE3D2 U+8021 # +0xE3D3 U+8028 # +0xE3D4 U+803F # +0xE3D5 U+803B # +0xE3D6 U+804A # +0xE3D7 U+8046 # +0xE3D8 U+8052 # +0xE3D9 U+8058 # +0xE3DA U+805A # +0xE3DB U+805F # +0xE3DC U+8062 # +0xE3DD U+8068 # +0xE3DE U+8073 # +0xE3DF U+8072 # +0xE3E0 U+8070 # +0xE3E1 U+8076 # +0xE3E2 U+8079 # +0xE3E3 U+807D # +0xE3E4 U+807F # +0xE3E5 U+8084 # +0xE3E6 U+8086 # +0xE3E7 U+8085 # +0xE3E8 U+809B # +0xE3E9 U+8093 # +0xE3EA U+809A # +0xE3EB U+80AD # +0xE3EC U+5190 # +0xE3ED U+80AC # +0xE3EE U+80DB # +0xE3EF U+80E5 # +0xE3F0 U+80D9 # +0xE3F1 U+80DD # +0xE3F2 U+80C4 # +0xE3F3 U+80DA # +0xE3F4 U+80D6 # +0xE3F5 U+8109 # +0xE3F6 U+80EF # +0xE3F7 U+80F1 # +0xE3F8 U+811B # +0xE3F9 U+8129 # +0xE3FA U+8123 # +0xE3FB U+812F # +0xE3FC U+814B # +0xE440 U+968B # +0xE441 U+8146 # +0xE442 U+813E # +0xE443 U+8153 # +0xE444 U+8151 # +0xE445 U+80FC # +0xE446 U+8171 # +0xE447 U+816E # +0xE448 U+8165 # +0xE449 U+8166 # +0xE44A U+8174 # +0xE44B U+8183 # +0xE44C U+8188 # +0xE44D U+818A # +0xE44E U+8180 # +0xE44F U+8182 # +0xE450 U+81A0 # +0xE451 U+8195 # +0xE452 U+81A4 # +0xE453 U+81A3 # +0xE454 U+815F # +0xE455 U+8193 # +0xE456 U+81A9 # +0xE457 U+81B0 # +0xE458 U+81B5 # +0xE459 U+81BE # +0xE45A U+81B8 # +0xE45B U+81BD # +0xE45C U+81C0 # +0xE45D U+81C2 # +0xE45E U+81BA # +0xE45F U+81C9 # +0xE460 U+81CD # +0xE461 U+81D1 # +0xE462 U+81D9 # +0xE463 U+81D8 # +0xE464 U+81C8 # +0xE465 U+81DA # +0xE466 U+81DF # +0xE467 U+81E0 # +0xE468 U+81E7 # +0xE469 U+81FA # +0xE46A U+81FB # +0xE46B U+81FE # +0xE46C U+8201 # +0xE46D U+8202 # +0xE46E U+8205 # +0xE46F U+8207 # +0xE470 U+820A # +0xE471 U+820D # +0xE472 U+8210 # +0xE473 U+8216 # +0xE474 U+8229 # +0xE475 U+822B # +0xE476 U+8238 # +0xE477 U+8233 # +0xE478 U+8240 # +0xE479 U+8259 # +0xE47A U+8258 # +0xE47B U+825D # +0xE47C U+825A # +0xE47D U+825F # +0xE47E U+8264 # +0xE480 U+8262 # +0xE481 U+8268 # +0xE482 U+826A # +0xE483 U+826B # +0xE484 U+822E # +0xE485 U+8271 # +0xE486 U+8277 # +0xE487 U+8278 # +0xE488 U+827E # +0xE489 U+828D # +0xE48A U+8292 # +0xE48B U+82AB # +0xE48C U+829F # +0xE48D U+82BB # +0xE48E U+82AC # +0xE48F U+82E1 # +0xE490 U+82E3 # +0xE491 U+82DF # +0xE492 U+82D2 # +0xE493 U+82F4 # +0xE494 U+82F3 # +0xE495 U+82FA # +0xE496 U+8393 # +0xE497 U+8303 # +0xE498 U+82FB # +0xE499 U+82F9 # +0xE49A U+82DE # +0xE49B U+8306 # +0xE49C U+82DC # +0xE49D U+8309 # +0xE49E U+82D9 # +0xE49F U+8335 # +0xE4A0 U+8334 # +0xE4A1 U+8316 # +0xE4A2 U+8332 # +0xE4A3 U+8331 # +0xE4A4 U+8340 # +0xE4A5 U+8339 # +0xE4A6 U+8350 # +0xE4A7 U+8345 # +0xE4A8 U+832F # +0xE4A9 U+832B # +0xE4AA U+8317 # +0xE4AB U+8318 # +0xE4AC U+8385 # +0xE4AD U+839A # +0xE4AE U+83AA # +0xE4AF U+839F # +0xE4B0 U+83A2 # +0xE4B1 U+8396 # +0xE4B2 U+8323 # +0xE4B3 U+838E # +0xE4B4 U+8387 # +0xE4B5 U+838A # +0xE4B6 U+837C # +0xE4B7 U+83B5 # +0xE4B8 U+8373 # +0xE4B9 U+8375 # +0xE4BA U+83A0 # +0xE4BB U+8389 # +0xE4BC U+83A8 # +0xE4BD U+83F4 # +0xE4BE U+8413 # +0xE4BF U+83EB # +0xE4C0 U+83CE # +0xE4C1 U+83FD # +0xE4C2 U+8403 # +0xE4C3 U+83D8 # +0xE4C4 U+840B # +0xE4C5 U+83C1 # +0xE4C6 U+83F7 # +0xE4C7 U+8407 # +0xE4C8 U+83E0 # +0xE4C9 U+83F2 # +0xE4CA U+840D # +0xE4CB U+8422 # +0xE4CC U+8420 # +0xE4CD U+83BD # +0xE4CE U+8438 # +0xE4CF U+8506 # +0xE4D0 U+83FB # +0xE4D1 U+846D # +0xE4D2 U+842A # +0xE4D3 U+843C # +0xE4D4 U+855A # +0xE4D5 U+8484 # +0xE4D6 U+8477 # +0xE4D7 U+846B # +0xE4D8 U+84AD # +0xE4D9 U+846E # +0xE4DA U+8482 # +0xE4DB U+8469 # +0xE4DC U+8446 # +0xE4DD U+842C # +0xE4DE U+846F # +0xE4DF U+8479 # +0xE4E0 U+8435 # +0xE4E1 U+84CA # +0xE4E2 U+8462 # +0xE4E3 U+84B9 # +0xE4E4 U+84BF # +0xE4E5 U+849F # +0xE4E6 U+84D9 # +0xE4E7 U+84CD # +0xE4E8 U+84BB # +0xE4E9 U+84DA # +0xE4EA U+84D0 # +0xE4EB U+84C1 # +0xE4EC U+84C6 # +0xE4ED U+84D6 # +0xE4EE U+84A1 # +0xE4EF U+8521 # +0xE4F0 U+84FF # +0xE4F1 U+84F4 # +0xE4F2 U+8517 # +0xE4F3 U+8518 # +0xE4F4 U+852C # +0xE4F5 U+851F # +0xE4F6 U+8515 # +0xE4F7 U+8514 # +0xE4F8 U+84FC # +0xE4F9 U+8540 # +0xE4FA U+8563 # +0xE4FB U+8558 # +0xE4FC U+8548 # +0xE540 U+8541 # +0xE541 U+8602 # +0xE542 U+854B # +0xE543 U+8555 # +0xE544 U+8580 # +0xE545 U+85A4 # +0xE546 U+8588 # +0xE547 U+8591 # +0xE548 U+858A # +0xE549 U+85A8 # +0xE54A U+856D # +0xE54B U+8594 # +0xE54C U+859B # +0xE54D U+85EA # +0xE54E U+8587 # +0xE54F U+859C # +0xE550 U+8577 # +0xE551 U+857E # +0xE552 U+8590 # +0xE553 U+85C9 # +0xE554 U+85BA # +0xE555 U+85CF # +0xE556 U+85B9 # +0xE557 U+85D0 # +0xE558 U+85D5 # +0xE559 U+85DD # +0xE55A U+85E5 # +0xE55B U+85DC # +0xE55C U+85F9 # +0xE55D U+860A # +0xE55E U+8613 # +0xE55F U+860B # +0xE560 U+85FE # +0xE561 U+85FA # +0xE562 U+8606 # +0xE563 U+8622 # +0xE564 U+861A # +0xE565 U+8630 # +0xE566 U+863F # +0xE567 U+864D # +0xE568 U+4E55 # +0xE569 U+8654 # +0xE56A U+865F # +0xE56B U+8667 # +0xE56C U+8671 # +0xE56D U+8693 # +0xE56E U+86A3 # +0xE56F U+86A9 # +0xE570 U+86AA # +0xE571 U+868B # +0xE572 U+868C # +0xE573 U+86B6 # +0xE574 U+86AF # +0xE575 U+86C4 # +0xE576 U+86C6 # +0xE577 U+86B0 # +0xE578 U+86C9 # +0xE579 U+8823 # +0xE57A U+86AB # +0xE57B U+86D4 # +0xE57C U+86DE # +0xE57D U+86E9 # +0xE57E U+86EC # +0xE580 U+86DF # +0xE581 U+86DB # +0xE582 U+86EF # +0xE583 U+8712 # +0xE584 U+8706 # +0xE585 U+8708 # +0xE586 U+8700 # +0xE587 U+8703 # +0xE588 U+86FB # +0xE589 U+8711 # +0xE58A U+8709 # +0xE58B U+870D # +0xE58C U+86F9 # +0xE58D U+870A # +0xE58E U+8734 # +0xE58F U+873F # +0xE590 U+8737 # +0xE591 U+873B # +0xE592 U+8725 # +0xE593 U+8729 # +0xE594 U+871A # +0xE595 U+8760 # +0xE596 U+875F # +0xE597 U+8778 # +0xE598 U+874C # +0xE599 U+874E # +0xE59A U+8774 # +0xE59B U+8757 # +0xE59C U+8768 # +0xE59D U+876E # +0xE59E U+8759 # +0xE59F U+8753 # +0xE5A0 U+8763 # +0xE5A1 U+876A # +0xE5A2 U+8805 # +0xE5A3 U+87A2 # +0xE5A4 U+879F # +0xE5A5 U+8782 # +0xE5A6 U+87AF # +0xE5A7 U+87CB # +0xE5A8 U+87BD # +0xE5A9 U+87C0 # +0xE5AA U+87D0 # +0xE5AB U+96D6 # +0xE5AC U+87AB # +0xE5AD U+87C4 # +0xE5AE U+87B3 # +0xE5AF U+87C7 # +0xE5B0 U+87C6 # +0xE5B1 U+87BB # +0xE5B2 U+87EF # +0xE5B3 U+87F2 # +0xE5B4 U+87E0 # +0xE5B5 U+880F # +0xE5B6 U+880D # +0xE5B7 U+87FE # +0xE5B8 U+87F6 # +0xE5B9 U+87F7 # +0xE5BA U+880E # +0xE5BB U+87D2 # +0xE5BC U+8811 # +0xE5BD U+8816 # +0xE5BE U+8815 # +0xE5BF U+8822 # +0xE5C0 U+8821 # +0xE5C1 U+8831 # +0xE5C2 U+8836 # +0xE5C3 U+8839 # +0xE5C4 U+8827 # +0xE5C5 U+883B # +0xE5C6 U+8844 # +0xE5C7 U+8842 # +0xE5C8 U+8852 # +0xE5C9 U+8859 # +0xE5CA U+885E # +0xE5CB U+8862 # +0xE5CC U+886B # +0xE5CD U+8881 # +0xE5CE U+887E # +0xE5CF U+889E # +0xE5D0 U+8875 # +0xE5D1 U+887D # +0xE5D2 U+88B5 # +0xE5D3 U+8872 # +0xE5D4 U+8882 # +0xE5D5 U+8897 # +0xE5D6 U+8892 # +0xE5D7 U+88AE # +0xE5D8 U+8899 # +0xE5D9 U+88A2 # +0xE5DA U+888D # +0xE5DB U+88A4 # +0xE5DC U+88B0 # +0xE5DD U+88BF # +0xE5DE U+88B1 # +0xE5DF U+88C3 # +0xE5E0 U+88C4 # +0xE5E1 U+88D4 # +0xE5E2 U+88D8 # +0xE5E3 U+88D9 # +0xE5E4 U+88DD # +0xE5E5 U+88F9 # +0xE5E6 U+8902 # +0xE5E7 U+88FC # +0xE5E8 U+88F4 # +0xE5E9 U+88E8 # +0xE5EA U+88F2 # +0xE5EB U+8904 # +0xE5EC U+890C # +0xE5ED U+890A # +0xE5EE U+8913 # +0xE5EF U+8943 # +0xE5F0 U+891E # +0xE5F1 U+8925 # +0xE5F2 U+892A # +0xE5F3 U+892B # +0xE5F4 U+8941 # +0xE5F5 U+8944 # +0xE5F6 U+893B # +0xE5F7 U+8936 # +0xE5F8 U+8938 # +0xE5F9 U+894C # +0xE5FA U+891D # +0xE5FB U+8960 # +0xE5FC U+895E # +0xE640 U+8966 # +0xE641 U+8964 # +0xE642 U+896D # +0xE643 U+896A # +0xE644 U+896F # +0xE645 U+8974 # +0xE646 U+8977 # +0xE647 U+897E # +0xE648 U+8983 # +0xE649 U+8988 # +0xE64A U+898A # +0xE64B U+8993 # +0xE64C U+8998 # +0xE64D U+89A1 # +0xE64E U+89A9 # +0xE64F U+89A6 # +0xE650 U+89AC # +0xE651 U+89AF # +0xE652 U+89B2 # +0xE653 U+89BA # +0xE654 U+89BD # +0xE655 U+89BF # +0xE656 U+89C0 # +0xE657 U+89DA # +0xE658 U+89DC # +0xE659 U+89DD # +0xE65A U+89E7 # +0xE65B U+89F4 # +0xE65C U+89F8 # +0xE65D U+8A03 # +0xE65E U+8A16 # +0xE65F U+8A10 # +0xE660 U+8A0C # +0xE661 U+8A1B # +0xE662 U+8A1D # +0xE663 U+8A25 # +0xE664 U+8A36 # +0xE665 U+8A41 # +0xE666 U+8A5B # +0xE667 U+8A52 # +0xE668 U+8A46 # +0xE669 U+8A48 # +0xE66A U+8A7C # +0xE66B U+8A6D # +0xE66C U+8A6C # +0xE66D U+8A62 # +0xE66E U+8A85 # +0xE66F U+8A82 # +0xE670 U+8A84 # +0xE671 U+8AA8 # +0xE672 U+8AA1 # +0xE673 U+8A91 # +0xE674 U+8AA5 # +0xE675 U+8AA6 # +0xE676 U+8A9A # +0xE677 U+8AA3 # +0xE678 U+8AC4 # +0xE679 U+8ACD # +0xE67A U+8AC2 # +0xE67B U+8ADA # +0xE67C U+8AEB # +0xE67D U+8AF3 # +0xE67E U+8AE7 # +0xE680 U+8AE4 # +0xE681 U+8AF1 # +0xE682 U+8B14 # +0xE683 U+8AE0 # +0xE684 U+8AE2 # +0xE685 U+8AF7 # +0xE686 U+8ADE # +0xE687 U+8ADB # +0xE688 U+8B0C # +0xE689 U+8B07 # +0xE68A U+8B1A # +0xE68B U+8AE1 # +0xE68C U+8B16 # +0xE68D U+8B10 # +0xE68E U+8B17 # +0xE68F U+8B20 # +0xE690 U+8B33 # +0xE691 U+97AB # +0xE692 U+8B26 # +0xE693 U+8B2B # +0xE694 U+8B3E # +0xE695 U+8B28 # +0xE696 U+8B41 # +0xE697 U+8B4C # +0xE698 U+8B4F # +0xE699 U+8B4E # +0xE69A U+8B49 # +0xE69B U+8B56 # +0xE69C U+8B5B # +0xE69D U+8B5A # +0xE69E U+8B6B # +0xE69F U+8B5F # +0xE6A0 U+8B6C # +0xE6A1 U+8B6F # +0xE6A2 U+8B74 # +0xE6A3 U+8B7D # +0xE6A4 U+8B80 # +0xE6A5 U+8B8C # +0xE6A6 U+8B8E # +0xE6A7 U+8B92 # +0xE6A8 U+8B93 # +0xE6A9 U+8B96 # +0xE6AA U+8B99 # +0xE6AB U+8B9A # +0xE6AC U+8C3A # +0xE6AD U+8C41 # +0xE6AE U+8C3F # +0xE6AF U+8C48 # +0xE6B0 U+8C4C # +0xE6B1 U+8C4E # +0xE6B2 U+8C50 # +0xE6B3 U+8C55 # +0xE6B4 U+8C62 # +0xE6B5 U+8C6C # +0xE6B6 U+8C78 # +0xE6B7 U+8C7A # +0xE6B8 U+8C82 # +0xE6B9 U+8C89 # +0xE6BA U+8C85 # +0xE6BB U+8C8A # +0xE6BC U+8C8D # +0xE6BD U+8C8E # +0xE6BE U+8C94 # +0xE6BF U+8C7C # +0xE6C0 U+8C98 # +0xE6C1 U+621D # +0xE6C2 U+8CAD # +0xE6C3 U+8CAA # +0xE6C4 U+8CBD # +0xE6C5 U+8CB2 # +0xE6C6 U+8CB3 # +0xE6C7 U+8CAE # +0xE6C8 U+8CB6 # +0xE6C9 U+8CC8 # +0xE6CA U+8CC1 # +0xE6CB U+8CE4 # +0xE6CC U+8CE3 # +0xE6CD U+8CDA # +0xE6CE U+8CFD # +0xE6CF U+8CFA # +0xE6D0 U+8CFB # +0xE6D1 U+8D04 # +0xE6D2 U+8D05 # +0xE6D3 U+8D0A # +0xE6D4 U+8D07 # +0xE6D5 U+8D0F # +0xE6D6 U+8D0D # +0xE6D7 U+8D10 # +0xE6D8 U+9F4E # +0xE6D9 U+8D13 # +0xE6DA U+8CCD # +0xE6DB U+8D14 # +0xE6DC U+8D16 # +0xE6DD U+8D67 # +0xE6DE U+8D6D # +0xE6DF U+8D71 # +0xE6E0 U+8D73 # +0xE6E1 U+8D81 # +0xE6E2 U+8D99 # +0xE6E3 U+8DC2 # +0xE6E4 U+8DBE # +0xE6E5 U+8DBA # +0xE6E6 U+8DCF # +0xE6E7 U+8DDA # +0xE6E8 U+8DD6 # +0xE6E9 U+8DCC # +0xE6EA U+8DDB # +0xE6EB U+8DCB # +0xE6EC U+8DEA # +0xE6ED U+8DEB # +0xE6EE U+8DDF # +0xE6EF U+8DE3 # +0xE6F0 U+8DFC # +0xE6F1 U+8E08 # +0xE6F2 U+8E09 # +0xE6F3 U+8DFF # +0xE6F4 U+8E1D # +0xE6F5 U+8E1E # +0xE6F6 U+8E10 # +0xE6F7 U+8E1F # +0xE6F8 U+8E42 # +0xE6F9 U+8E35 # +0xE6FA U+8E30 # +0xE6FB U+8E34 # +0xE6FC U+8E4A # +0xE740 U+8E47 # +0xE741 U+8E49 # +0xE742 U+8E4C # +0xE743 U+8E50 # +0xE744 U+8E48 # +0xE745 U+8E59 # +0xE746 U+8E64 # +0xE747 U+8E60 # +0xE748 U+8E2A # +0xE749 U+8E63 # +0xE74A U+8E55 # +0xE74B U+8E76 # +0xE74C U+8E72 # +0xE74D U+8E7C # +0xE74E U+8E81 # +0xE74F U+8E87 # +0xE750 U+8E85 # +0xE751 U+8E84 # +0xE752 U+8E8B # +0xE753 U+8E8A # +0xE754 U+8E93 # +0xE755 U+8E91 # +0xE756 U+8E94 # +0xE757 U+8E99 # +0xE758 U+8EAA # +0xE759 U+8EA1 # +0xE75A U+8EAC # +0xE75B U+8EB0 # +0xE75C U+8EC6 # +0xE75D U+8EB1 # +0xE75E U+8EBE # +0xE75F U+8EC5 # +0xE760 U+8EC8 # +0xE761 U+8ECB # +0xE762 U+8EDB # +0xE763 U+8EE3 # +0xE764 U+8EFC # +0xE765 U+8EFB # +0xE766 U+8EEB # +0xE767 U+8EFE # +0xE768 U+8F0A # +0xE769 U+8F05 # +0xE76A U+8F15 # +0xE76B U+8F12 # +0xE76C U+8F19 # +0xE76D U+8F13 # +0xE76E U+8F1C # +0xE76F U+8F1F # +0xE770 U+8F1B # +0xE771 U+8F0C # +0xE772 U+8F26 # +0xE773 U+8F33 # +0xE774 U+8F3B # +0xE775 U+8F39 # +0xE776 U+8F45 # +0xE777 U+8F42 # +0xE778 U+8F3E # +0xE779 U+8F4C # +0xE77A U+8F49 # +0xE77B U+8F46 # +0xE77C U+8F4E # +0xE77D U+8F57 # +0xE77E U+8F5C # +0xE780 U+8F62 # +0xE781 U+8F63 # +0xE782 U+8F64 # +0xE783 U+8F9C # +0xE784 U+8F9F # +0xE785 U+8FA3 # +0xE786 U+8FAD # +0xE787 U+8FAF # +0xE788 U+8FB7 # +0xE789 U+8FDA # +0xE78A U+8FE5 # +0xE78B U+8FE2 # +0xE78C U+8FEA # +0xE78D U+8FEF # +0xE78E U+9087 # +0xE78F U+8FF4 # +0xE790 U+9005 # +0xE791 U+8FF9 # +0xE792 U+8FFA # +0xE793 U+9011 # +0xE794 U+9015 # +0xE795 U+9021 # +0xE796 U+900D # +0xE797 U+901E # +0xE798 U+9016 # +0xE799 U+900B # +0xE79A U+9027 # +0xE79B U+9036 # +0xE79C U+9035 # +0xE79D U+9039 # +0xE79E U+8FF8 # +0xE79F U+904F # +0xE7A0 U+9050 # +0xE7A1 U+9051 # +0xE7A2 U+9052 # +0xE7A3 U+900E # +0xE7A4 U+9049 # +0xE7A5 U+903E # +0xE7A6 U+9056 # +0xE7A7 U+9058 # +0xE7A8 U+905E # +0xE7A9 U+9068 # +0xE7AA U+906F # +0xE7AB U+9076 # +0xE7AC U+96A8 # +0xE7AD U+9072 # +0xE7AE U+9082 # +0xE7AF U+907D # +0xE7B0 U+9081 # +0xE7B1 U+9080 # +0xE7B2 U+908A # +0xE7B3 U+9089 # +0xE7B4 U+908F # +0xE7B5 U+90A8 # +0xE7B6 U+90AF # +0xE7B7 U+90B1 # +0xE7B8 U+90B5 # +0xE7B9 U+90E2 # +0xE7BA U+90E4 # +0xE7BB U+6248 # +0xE7BC U+90DB # +0xE7BD U+9102 # +0xE7BE U+9112 # +0xE7BF U+9119 # +0xE7C0 U+9132 # +0xE7C1 U+9130 # +0xE7C2 U+914A # +0xE7C3 U+9156 # +0xE7C4 U+9158 # +0xE7C5 U+9163 # +0xE7C6 U+9165 # +0xE7C7 U+9169 # +0xE7C8 U+9173 # +0xE7C9 U+9172 # +0xE7CA U+918B # +0xE7CB U+9189 # +0xE7CC U+9182 # +0xE7CD U+91A2 # +0xE7CE U+91AB # +0xE7CF U+91AF # +0xE7D0 U+91AA # +0xE7D1 U+91B5 # +0xE7D2 U+91B4 # +0xE7D3 U+91BA # +0xE7D4 U+91C0 # +0xE7D5 U+91C1 # +0xE7D6 U+91C9 # +0xE7D7 U+91CB # +0xE7D8 U+91D0 # +0xE7D9 U+91D6 # +0xE7DA U+91DF # +0xE7DB U+91E1 # +0xE7DC U+91DB # +0xE7DD U+91FC # +0xE7DE U+91F5 # +0xE7DF U+91F6 # +0xE7E0 U+921E # +0xE7E1 U+91FF # +0xE7E2 U+9214 # +0xE7E3 U+922C # +0xE7E4 U+9215 # +0xE7E5 U+9211 # +0xE7E6 U+925E # +0xE7E7 U+9257 # +0xE7E8 U+9245 # +0xE7E9 U+9249 # +0xE7EA U+9264 # +0xE7EB U+9248 # +0xE7EC U+9295 # +0xE7ED U+923F # +0xE7EE U+924B # +0xE7EF U+9250 # +0xE7F0 U+929C # +0xE7F1 U+9296 # +0xE7F2 U+9293 # +0xE7F3 U+929B # +0xE7F4 U+925A # +0xE7F5 U+92CF # +0xE7F6 U+92B9 # +0xE7F7 U+92B7 # +0xE7F8 U+92E9 # +0xE7F9 U+930F # +0xE7FA U+92FA # +0xE7FB U+9344 # +0xE7FC U+932E # +0xE840 U+9319 # +0xE841 U+9322 # +0xE842 U+931A # +0xE843 U+9323 # +0xE844 U+933A # +0xE845 U+9335 # +0xE846 U+933B # +0xE847 U+935C # +0xE848 U+9360 # +0xE849 U+937C # +0xE84A U+936E # +0xE84B U+9356 # +0xE84C U+93B0 # +0xE84D U+93AC # +0xE84E U+93AD # +0xE84F U+9394 # +0xE850 U+93B9 # +0xE851 U+93D6 # +0xE852 U+93D7 # +0xE853 U+93E8 # +0xE854 U+93E5 # +0xE855 U+93D8 # +0xE856 U+93C3 # +0xE857 U+93DD # +0xE858 U+93D0 # +0xE859 U+93C8 # +0xE85A U+93E4 # +0xE85B U+941A # +0xE85C U+9414 # +0xE85D U+9413 # +0xE85E U+9403 # +0xE85F U+9407 # +0xE860 U+9410 # +0xE861 U+9436 # +0xE862 U+942B # +0xE863 U+9435 # +0xE864 U+9421 # +0xE865 U+943A # +0xE866 U+9441 # +0xE867 U+9452 # +0xE868 U+9444 # +0xE869 U+945B # +0xE86A U+9460 # +0xE86B U+9462 # +0xE86C U+945E # +0xE86D U+946A # +0xE86E U+9229 # +0xE86F U+9470 # +0xE870 U+9475 # +0xE871 U+9477 # +0xE872 U+947D # +0xE873 U+945A # +0xE874 U+947C # +0xE875 U+947E # +0xE876 U+9481 # +0xE877 U+947F # +0xE878 U+9582 # +0xE879 U+9587 # +0xE87A U+958A # +0xE87B U+9594 # +0xE87C U+9596 # +0xE87D U+9598 # +0xE87E U+9599 # +0xE880 U+95A0 # +0xE881 U+95A8 # +0xE882 U+95A7 # +0xE883 U+95AD # +0xE884 U+95BC # +0xE885 U+95BB # +0xE886 U+95B9 # +0xE887 U+95BE # +0xE888 U+95CA # +0xE889 U+6FF6 # +0xE88A U+95C3 # +0xE88B U+95CD # +0xE88C U+95CC # +0xE88D U+95D5 # +0xE88E U+95D4 # +0xE88F U+95D6 # +0xE890 U+95DC # +0xE891 U+95E1 # +0xE892 U+95E5 # +0xE893 U+95E2 # +0xE894 U+9621 # +0xE895 U+9628 # +0xE896 U+962E # +0xE897 U+962F # +0xE898 U+9642 # +0xE899 U+964C # +0xE89A U+964F # +0xE89B U+964B # +0xE89C U+9677 # +0xE89D U+965C # +0xE89E U+965E # +0xE89F U+965D # +0xE8A0 U+965F # +0xE8A1 U+9666 # +0xE8A2 U+9672 # +0xE8A3 U+966C # +0xE8A4 U+968D # +0xE8A5 U+9698 # +0xE8A6 U+9695 # +0xE8A7 U+9697 # +0xE8A8 U+96AA # +0xE8A9 U+96A7 # +0xE8AA U+96B1 # +0xE8AB U+96B2 # +0xE8AC U+96B0 # +0xE8AD U+96B4 # +0xE8AE U+96B6 # +0xE8AF U+96B8 # +0xE8B0 U+96B9 # +0xE8B1 U+96CE # +0xE8B2 U+96CB # +0xE8B3 U+96C9 # +0xE8B4 U+96CD # +0xE8B5 U+894D # +0xE8B6 U+96DC # +0xE8B7 U+970D # +0xE8B8 U+96D5 # +0xE8B9 U+96F9 # +0xE8BA U+9704 # +0xE8BB U+9706 # +0xE8BC U+9708 # +0xE8BD U+9713 # +0xE8BE U+970E # +0xE8BF U+9711 # +0xE8C0 U+970F # +0xE8C1 U+9716 # +0xE8C2 U+9719 # +0xE8C3 U+9724 # +0xE8C4 U+972A # +0xE8C5 U+9730 # +0xE8C6 U+9739 # +0xE8C7 U+973D # +0xE8C8 U+973E # +0xE8C9 U+9744 # +0xE8CA U+9746 # +0xE8CB U+9748 # +0xE8CC U+9742 # +0xE8CD U+9749 # +0xE8CE U+975C # +0xE8CF U+9760 # +0xE8D0 U+9764 # +0xE8D1 U+9766 # +0xE8D2 U+9768 # +0xE8D3 U+52D2 # +0xE8D4 U+976B # +0xE8D5 U+9771 # +0xE8D6 U+9779 # +0xE8D7 U+9785 # +0xE8D8 U+977C # +0xE8D9 U+9781 # +0xE8DA U+977A # +0xE8DB U+9786 # +0xE8DC U+978B # +0xE8DD U+978F # +0xE8DE U+9790 # +0xE8DF U+979C # +0xE8E0 U+97A8 # +0xE8E1 U+97A6 # +0xE8E2 U+97A3 # +0xE8E3 U+97B3 # +0xE8E4 U+97B4 # +0xE8E5 U+97C3 # +0xE8E6 U+97C6 # +0xE8E7 U+97C8 # +0xE8E8 U+97CB # +0xE8E9 U+97DC # +0xE8EA U+97ED # +0xE8EB U+9F4F # +0xE8EC U+97F2 # +0xE8ED U+7ADF # +0xE8EE U+97F6 # +0xE8EF U+97F5 # +0xE8F0 U+980F # +0xE8F1 U+980C # +0xE8F2 U+9838 # +0xE8F3 U+9824 # +0xE8F4 U+9821 # +0xE8F5 U+9837 # +0xE8F6 U+983D # +0xE8F7 U+9846 # +0xE8F8 U+984F # +0xE8F9 U+984B # +0xE8FA U+986B # +0xE8FB U+986F # +0xE8FC U+9870 # +0xE940 U+9871 # +0xE941 U+9874 # +0xE942 U+9873 # +0xE943 U+98AA # +0xE944 U+98AF # +0xE945 U+98B1 # +0xE946 U+98B6 # +0xE947 U+98C4 # +0xE948 U+98C3 # +0xE949 U+98C6 # +0xE94A U+98E9 # +0xE94B U+98EB # +0xE94C U+9903 # +0xE94D U+9909 # +0xE94E U+9912 # +0xE94F U+9914 # +0xE950 U+9918 # +0xE951 U+9921 # +0xE952 U+991D # +0xE953 U+991E # +0xE954 U+9924 # +0xE955 U+9920 # +0xE956 U+992C # +0xE957 U+992E # +0xE958 U+993D # +0xE959 U+993E # +0xE95A U+9942 # +0xE95B U+9949 # +0xE95C U+9945 # +0xE95D U+9950 # +0xE95E U+994B # +0xE95F U+9951 # +0xE960 U+9952 # +0xE961 U+994C # +0xE962 U+9955 # +0xE963 U+9997 # +0xE964 U+9998 # +0xE965 U+99A5 # +0xE966 U+99AD # +0xE967 U+99AE # +0xE968 U+99BC # +0xE969 U+99DF # +0xE96A U+99DB # +0xE96B U+99DD # +0xE96C U+99D8 # +0xE96D U+99D1 # +0xE96E U+99ED # +0xE96F U+99EE # +0xE970 U+99F1 # +0xE971 U+99F2 # +0xE972 U+99FB # +0xE973 U+99F8 # +0xE974 U+9A01 # +0xE975 U+9A0F # +0xE976 U+9A05 # +0xE977 U+99E2 # +0xE978 U+9A19 # +0xE979 U+9A2B # +0xE97A U+9A37 # +0xE97B U+9A45 # +0xE97C U+9A42 # +0xE97D U+9A40 # +0xE97E U+9A43 # +0xE980 U+9A3E # +0xE981 U+9A55 # +0xE982 U+9A4D # +0xE983 U+9A5B # +0xE984 U+9A57 # +0xE985 U+9A5F # +0xE986 U+9A62 # +0xE987 U+9A65 # +0xE988 U+9A64 # +0xE989 U+9A69 # +0xE98A U+9A6B # +0xE98B U+9A6A # +0xE98C U+9AAD # +0xE98D U+9AB0 # +0xE98E U+9ABC # +0xE98F U+9AC0 # +0xE990 U+9ACF # +0xE991 U+9AD1 # +0xE992 U+9AD3 # +0xE993 U+9AD4 # +0xE994 U+9ADE # +0xE995 U+9ADF # +0xE996 U+9AE2 # +0xE997 U+9AE3 # +0xE998 U+9AE6 # +0xE999 U+9AEF # +0xE99A U+9AEB # +0xE99B U+9AEE # +0xE99C U+9AF4 # +0xE99D U+9AF1 # +0xE99E U+9AF7 # +0xE99F U+9AFB # +0xE9A0 U+9B06 # +0xE9A1 U+9B18 # +0xE9A2 U+9B1A # +0xE9A3 U+9B1F # +0xE9A4 U+9B22 # +0xE9A5 U+9B23 # +0xE9A6 U+9B25 # +0xE9A7 U+9B27 # +0xE9A8 U+9B28 # +0xE9A9 U+9B29 # +0xE9AA U+9B2A # +0xE9AB U+9B2E # +0xE9AC U+9B2F # +0xE9AD U+9B32 # +0xE9AE U+9B44 # +0xE9AF U+9B43 # +0xE9B0 U+9B4F # +0xE9B1 U+9B4D # +0xE9B2 U+9B4E # +0xE9B3 U+9B51 # +0xE9B4 U+9B58 # +0xE9B5 U+9B74 # +0xE9B6 U+9B93 # +0xE9B7 U+9B83 # +0xE9B8 U+9B91 # +0xE9B9 U+9B96 # +0xE9BA U+9B97 # +0xE9BB U+9B9F # +0xE9BC U+9BA0 # +0xE9BD U+9BA8 # +0xE9BE U+9BB4 # +0xE9BF U+9BC0 # +0xE9C0 U+9BCA # +0xE9C1 U+9BB9 # +0xE9C2 U+9BC6 # +0xE9C3 U+9BCF # +0xE9C4 U+9BD1 # +0xE9C5 U+9BD2 # +0xE9C6 U+9BE3 # +0xE9C7 U+9BE2 # +0xE9C8 U+9BE4 # +0xE9C9 U+9BD4 # +0xE9CA U+9BE1 # +0xE9CB U+9C3A # +0xE9CC U+9BF2 # +0xE9CD U+9BF1 # +0xE9CE U+9BF0 # +0xE9CF U+9C15 # +0xE9D0 U+9C14 # +0xE9D1 U+9C09 # +0xE9D2 U+9C13 # +0xE9D3 U+9C0C # +0xE9D4 U+9C06 # +0xE9D5 U+9C08 # +0xE9D6 U+9C12 # +0xE9D7 U+9C0A # +0xE9D8 U+9C04 # +0xE9D9 U+9C2E # +0xE9DA U+9C1B # +0xE9DB U+9C25 # +0xE9DC U+9C24 # +0xE9DD U+9C21 # +0xE9DE U+9C30 # +0xE9DF U+9C47 # +0xE9E0 U+9C32 # +0xE9E1 U+9C46 # +0xE9E2 U+9C3E # +0xE9E3 U+9C5A # +0xE9E4 U+9C60 # +0xE9E5 U+9C67 # +0xE9E6 U+9C76 # +0xE9E7 U+9C78 # +0xE9E8 U+9CE7 # +0xE9E9 U+9CEC # +0xE9EA U+9CF0 # +0xE9EB U+9D09 # +0xE9EC U+9D08 # +0xE9ED U+9CEB # +0xE9EE U+9D03 # +0xE9EF U+9D06 # +0xE9F0 U+9D2A # +0xE9F1 U+9D26 # +0xE9F2 U+9DAF # +0xE9F3 U+9D23 # +0xE9F4 U+9D1F # +0xE9F5 U+9D44 # +0xE9F6 U+9D15 # +0xE9F7 U+9D12 # +0xE9F8 U+9D41 # +0xE9F9 U+9D3F # +0xE9FA U+9D3E # +0xE9FB U+9D46 # +0xE9FC U+9D48 # +0xEA40 U+9D5D # +0xEA41 U+9D5E # +0xEA42 U+9D64 # +0xEA43 U+9D51 # +0xEA44 U+9D50 # +0xEA45 U+9D59 # +0xEA46 U+9D72 # +0xEA47 U+9D89 # +0xEA48 U+9D87 # +0xEA49 U+9DAB # +0xEA4A U+9D6F # +0xEA4B U+9D7A # +0xEA4C U+9D9A # +0xEA4D U+9DA4 # +0xEA4E U+9DA9 # +0xEA4F U+9DB2 # +0xEA50 U+9DC4 # +0xEA51 U+9DC1 # +0xEA52 U+9DBB # +0xEA53 U+9DB8 # +0xEA54 U+9DBA # +0xEA55 U+9DC6 # +0xEA56 U+9DCF # +0xEA57 U+9DC2 # +0xEA58 U+9DD9 # +0xEA59 U+9DD3 # +0xEA5A U+9DF8 # +0xEA5B U+9DE6 # +0xEA5C U+9DED # +0xEA5D U+9DEF # +0xEA5E U+9DFD # +0xEA5F U+9E1A # +0xEA60 U+9E1B # +0xEA61 U+9E1E # +0xEA62 U+9E75 # +0xEA63 U+9E79 # +0xEA64 U+9E7D # +0xEA65 U+9E81 # +0xEA66 U+9E88 # +0xEA67 U+9E8B # +0xEA68 U+9E8C # +0xEA69 U+9E92 # +0xEA6A U+9E95 # +0xEA6B U+9E91 # +0xEA6C U+9E9D # +0xEA6D U+9EA5 # +0xEA6E U+9EA9 # +0xEA6F U+9EB8 # +0xEA70 U+9EAA # +0xEA71 U+9EAD # +0xEA72 U+9761 # +0xEA73 U+9ECC # +0xEA74 U+9ECE # +0xEA75 U+9ECF # +0xEA76 U+9ED0 # +0xEA77 U+9ED4 # +0xEA78 U+9EDC # +0xEA79 U+9EDE # +0xEA7A U+9EDD # +0xEA7B U+9EE0 # +0xEA7C U+9EE5 # +0xEA7D U+9EE8 # +0xEA7E U+9EEF # +0xEA80 U+9EF4 # +0xEA81 U+9EF6 # +0xEA82 U+9EF7 # +0xEA83 U+9EF9 # +0xEA84 U+9EFB # +0xEA85 U+9EFC # +0xEA86 U+9EFD # +0xEA87 U+9F07 # +0xEA88 U+9F08 # +0xEA89 U+76B7 # +0xEA8A U+9F15 # +0xEA8B U+9F21 # +0xEA8C U+9F2C # +0xEA8D U+9F3E # +0xEA8E U+9F4A # +0xEA8F U+9F52 # +0xEA90 U+9F54 # +0xEA91 U+9F63 # +0xEA92 U+9F5F # +0xEA93 U+9F60 # +0xEA94 U+9F61 # +0xEA95 U+9F66 # +0xEA96 U+9F67 # +0xEA97 U+9F6C # +0xEA98 U+9F6A # +0xEA99 U+9F77 # +0xEA9A U+9F72 # +0xEA9B U+9F76 # +0xEA9C U+9F95 # +0xEA9D U+9F9C # +0xEA9E U+9FA0 # +0xEA9F U+582F # [1983] +0xEAA0 U+69C7 # [1983] +0xEAA1 U+9059 # [1983] +0xEAA2 U+7464 # [1983] +0xEAA3 U+51DC # [1990] +0xEAA4 U+7199 # [1990] +0xEAA5 U+5653 # [2004] +0xEAA6 U+5DE2 # [2000] +0xEAA7 U+5E14 # [2000] +0xEAA8 U+5E18 # [2000] +0xEAA9 U+5E58 # [2000] +0xEAAA U+5E5E # [2000] +0xEAAB U+5EBE # [2000] +0xEAAC U+F928 # CJK COMPATIBILITY IDEOGRAPH-F928 [2000] +0xEAAD U+5ECB # [2000] +0xEAAE U+5EF9 # [2000] +0xEAAF U+5F00 # [2000] +0xEAB0 U+5F02 # [2000] +0xEAB1 U+5F07 # [2000] +0xEAB2 U+5F1D # [2000] +0xEAB3 U+5F23 # [2000] +0xEAB4 U+5F34 # [2000] +0xEAB5 U+5F36 # [2000] +0xEAB6 U+5F3D # [2000] +0xEAB7 U+5F40 # [2000] +0xEAB8 U+5F45 # [2000] +0xEAB9 U+5F54 # [2000] +0xEABA U+5F58 # [2000] +0xEABB U+5F64 # [2000] +0xEABC U+5F67 # [2000] +0xEABD U+5F7D # [2000] +0xEABE U+5F89 # [2000] +0xEABF U+5F9C # [2000] +0xEAC0 U+5FA7 # [2000] +0xEAC1 U+5FAF # [2000] +0xEAC2 U+5FB5 # [2000] +0xEAC3 U+5FB7 # [2000] +0xEAC4 U+5FC9 # [2000] +0xEAC5 U+5FDE # [2000] +0xEAC6 U+5FE1 # [2000] +0xEAC7 U+5FE9 # [2000] +0xEAC8 U+600D # [2000] +0xEAC9 U+6014 # [2000] +0xEACA U+6018 # [2000] +0xEACB U+6033 # [2000] +0xEACC U+6035 # [2000] +0xEACD U+6047 # [2000] +0xEACE U+FA3D # CJK COMPATIBILITY IDEOGRAPH-FA3D [2000] [Unicode3.2] +0xEACF U+609D # [2000] +0xEAD0 U+609E # [2000] +0xEAD1 U+60CB # [2000] +0xEAD2 U+60D4 # [2000] +0xEAD3 U+60D5 # [2000] +0xEAD4 U+60DD # [2000] +0xEAD5 U+60F8 # [2000] +0xEAD6 U+611C # [2000] +0xEAD7 U+612B # [2000] +0xEAD8 U+6130 # [2000] +0xEAD9 U+6137 # [2000] +0xEADA U+FA3E # CJK COMPATIBILITY IDEOGRAPH-FA3E [2000] [Unicode3.2] +0xEADB U+618D # [2000] +0xEADC U+FA3F # CJK COMPATIBILITY IDEOGRAPH-FA3F [2000] [Unicode3.2] +0xEADD U+61BC # [2000] +0xEADE U+61B9 # [2000] +0xEADF U+FA40 # CJK COMPATIBILITY IDEOGRAPH-FA40 [2000] [Unicode3.2] +0xEAE0 U+6222 # [2000] +0xEAE1 U+623E # [2000] +0xEAE2 U+6243 # [2000] +0xEAE3 U+6256 # [2000] +0xEAE4 U+625A # [2000] +0xEAE5 U+626F # [2000] +0xEAE6 U+6285 # [2000] +0xEAE7 U+62C4 # [2000] +0xEAE8 U+62D6 # [2000] +0xEAE9 U+62FC # [2000] +0xEAEA U+630A # [2000] +0xEAEB U+6318 # [2000] +0xEAEC U+6339 # [2000] +0xEAED U+6343 # [2000] +0xEAEE U+6365 # [2000] +0xEAEF U+637C # [2000] +0xEAF0 U+63E5 # [2000] +0xEAF1 U+63ED # [2000] +0xEAF2 U+63F5 # [2000] +0xEAF3 U+6410 # [2000] +0xEAF4 U+6414 # [2000] +0xEAF5 U+6422 # [2000] +0xEAF6 U+6479 # [2000] +0xEAF7 U+6451 # [2000] +0xEAF8 U+6460 # [2000] +0xEAF9 U+646D # [2000] +0xEAFA U+64CE # [2000] +0xEAFB U+64BE # [2000] +0xEAFC U+64BF # [2000] +0xEB40 U+64C4 # [2000] +0xEB41 U+64CA # [2000] +0xEB42 U+64D0 # [2000] +0xEB43 U+64F7 # [2000] +0xEB44 U+64FB # [2000] +0xEB45 U+6522 # [2000] +0xEB46 U+6529 # [2000] +0xEB47 U+FA41 # CJK COMPATIBILITY IDEOGRAPH-FA41 [2000] [Unicode3.2] +0xEB48 U+6567 # [2000] +0xEB49 U+659D # [2000] +0xEB4A U+FA42 # CJK COMPATIBILITY IDEOGRAPH-FA42 [2000] [Unicode3.2] +0xEB4B U+6600 # [2000] +0xEB4C U+6609 # [2000] +0xEB4D U+6615 # [2000] +0xEB4E U+661E # [2000] +0xEB4F U+663A # [2000] +0xEB50 U+6622 # [2000] +0xEB51 U+6624 # [2000] +0xEB52 U+662B # [2000] +0xEB53 U+6630 # [2000] +0xEB54 U+6631 # [2000] +0xEB55 U+6633 # [2000] +0xEB56 U+66FB # [2000] +0xEB57 U+6648 # [2000] +0xEB58 U+664C # [2000] +0xEB59 U+231C4 # [2000] [Unicode3.1] +0xEB5A U+6659 # [2000] +0xEB5B U+665A # [2000] +0xEB5C U+6661 # [2000] +0xEB5D U+6665 # [2000] +0xEB5E U+6673 # [2000] +0xEB5F U+6677 # [2000] +0xEB60 U+6678 # [2000] +0xEB61 U+668D # [2000] +0xEB62 U+FA43 # CJK COMPATIBILITY IDEOGRAPH-FA43 [2000] [Unicode3.2] +0xEB63 U+66A0 # [2000] +0xEB64 U+66B2 # [2000] +0xEB65 U+66BB # [2000] +0xEB66 U+66C6 # [2000] +0xEB67 U+66C8 # [2000] +0xEB68 U+3B22 # [2000] +0xEB69 U+66DB # [2000] +0xEB6A U+66E8 # [2000] +0xEB6B U+66FA # [2000] +0xEB6C U+6713 # [2000] +0xEB6D U+F929 # CJK COMPATIBILITY IDEOGRAPH-F929 [2000] +0xEB6E U+6733 # [2000] +0xEB6F U+6766 # [2000] +0xEB70 U+6747 # [2000] +0xEB71 U+6748 # [2000] +0xEB72 U+677B # [2000] +0xEB73 U+6781 # [2000] +0xEB74 U+6793 # [2000] +0xEB75 U+6798 # [2000] +0xEB76 U+679B # [2000] +0xEB77 U+67BB # [2000] +0xEB78 U+67F9 # [2000] +0xEB79 U+67C0 # [2000] +0xEB7A U+67D7 # [2000] +0xEB7B U+67FC # [2000] +0xEB7C U+6801 # [2000] +0xEB7D U+6852 # [2000] +0xEB7E U+681D # [2000] +0xEB80 U+682C # [2000] +0xEB81 U+6831 # [2000] +0xEB82 U+685B # [2000] +0xEB83 U+6872 # [2000] +0xEB84 U+6875 # [2000] +0xEB85 U+FA44 # CJK COMPATIBILITY IDEOGRAPH-FA44 [2000] [Unicode3.2] +0xEB86 U+68A3 # [2000] +0xEB87 U+68A5 # [2000] +0xEB88 U+68B2 # [2000] +0xEB89 U+68C8 # [2000] +0xEB8A U+68D0 # [2000] +0xEB8B U+68E8 # [2000] +0xEB8C U+68ED # [2000] +0xEB8D U+68F0 # [2000] +0xEB8E U+68F1 # [2000] +0xEB8F U+68FC # [2000] +0xEB90 U+690A # [2000] +0xEB91 U+6949 # [2000] +0xEB92 U+235C4 # [2000] [Unicode3.1] +0xEB93 U+6935 # [2000] +0xEB94 U+6942 # [2000] +0xEB95 U+6957 # [2000] +0xEB96 U+6963 # [2000] +0xEB97 U+6964 # [2000] +0xEB98 U+6968 # [2000] +0xEB99 U+6980 # [2000] +0xEB9A U+FA14 # CJK COMPATIBILITY IDEOGRAPH-FA14 [2000] +0xEB9B U+69A5 # [2000] +0xEB9C U+69AD # [2000] +0xEB9D U+69CF # [2000] +0xEB9E U+3BB6 # [2000] +0xEB9F U+3BC3 # [2000] +0xEBA0 U+69E2 # [2000] +0xEBA1 U+69E9 # [2000] +0xEBA2 U+69EA # [2000] +0xEBA3 U+69F5 # [2000] +0xEBA4 U+69F6 # [2000] +0xEBA5 U+6A0F # [2000] +0xEBA6 U+6A15 # [2000] +0xEBA7 U+2373F # [2000] [Unicode3.1] +0xEBA8 U+6A3B # [2000] +0xEBA9 U+6A3E # [2000] +0xEBAA U+6A45 # [2000] +0xEBAB U+6A50 # [2000] +0xEBAC U+6A56 # [2000] +0xEBAD U+6A5B # [2000] +0xEBAE U+6A6B # [2000] +0xEBAF U+6A73 # [2000] +0xEBB0 U+23763 # [2000] [Unicode3.1] +0xEBB1 U+6A89 # [2000] +0xEBB2 U+6A94 # [2000] +0xEBB3 U+6A9D # [2000] +0xEBB4 U+6A9E # [2000] +0xEBB5 U+6AA5 # [2000] +0xEBB6 U+6AE4 # [2000] +0xEBB7 U+6AE7 # [2000] +0xEBB8 U+3C0F # [2000] +0xEBB9 U+F91D # CJK COMPATIBILITY IDEOGRAPH-F91D [2000] +0xEBBA U+6B1B # [2000] +0xEBBB U+6B1E # [2000] +0xEBBC U+6B2C # [2000] +0xEBBD U+6B35 # [2000] +0xEBBE U+6B46 # [2000] +0xEBBF U+6B56 # [2000] +0xEBC0 U+6B60 # [2000] +0xEBC1 U+6B65 # [2000] +0xEBC2 U+6B67 # [2000] +0xEBC3 U+6B77 # [2000] +0xEBC4 U+6B82 # [2000] +0xEBC5 U+6BA9 # [2000] +0xEBC6 U+6BAD # [2000] +0xEBC7 U+F970 # CJK COMPATIBILITY IDEOGRAPH-F970 [2000] +0xEBC8 U+6BCF # [2000] +0xEBC9 U+6BD6 # [2000] +0xEBCA U+6BD7 # [2000] +0xEBCB U+6BFF # [2000] +0xEBCC U+6C05 # [2000] +0xEBCD U+6C10 # [2000] +0xEBCE U+6C33 # [2000] +0xEBCF U+6C59 # [2000] +0xEBD0 U+6C5C # [2000] +0xEBD1 U+6CAA # [2000] +0xEBD2 U+6C74 # [2000] +0xEBD3 U+6C76 # [2000] +0xEBD4 U+6C85 # [2000] +0xEBD5 U+6C86 # [2000] +0xEBD6 U+6C98 # [2000] +0xEBD7 U+6C9C # [2000] +0xEBD8 U+6CFB # [2000] +0xEBD9 U+6CC6 # [2000] +0xEBDA U+6CD4 # [2000] +0xEBDB U+6CE0 # [2000] +0xEBDC U+6CEB # [2000] +0xEBDD U+6CEE # [2000] +0xEBDE U+23CFE # [2000] [Unicode3.1] +0xEBDF U+6D04 # [2000] +0xEBE0 U+6D0E # [2000] +0xEBE1 U+6D2E # [2000] +0xEBE2 U+6D31 # [2000] +0xEBE3 U+6D39 # [2000] +0xEBE4 U+6D3F # [2000] +0xEBE5 U+6D58 # [2000] +0xEBE6 U+6D65 # [2000] +0xEBE7 U+FA45 # CJK COMPATIBILITY IDEOGRAPH-FA45 [2000] [Unicode3.2] +0xEBE8 U+6D82 # [2000] +0xEBE9 U+6D87 # [2000] +0xEBEA U+6D89 # [2000] +0xEBEB U+6D94 # [2000] +0xEBEC U+6DAA # [2000] +0xEBED U+6DAC # [2000] +0xEBEE U+6DBF # [2000] +0xEBEF U+6DC4 # [2000] +0xEBF0 U+6DD6 # [2000] +0xEBF1 U+6DDA # [2000] +0xEBF2 U+6DDB # [2000] +0xEBF3 U+6DDD # [2000] +0xEBF4 U+6DFC # [2000] +0xEBF5 U+FA46 # CJK COMPATIBILITY IDEOGRAPH-FA46 [2000] [Unicode3.2] +0xEBF6 U+6E34 # [2000] +0xEBF7 U+6E44 # [2000] +0xEBF8 U+6E5C # [2000] +0xEBF9 U+6E5E # [2000] +0xEBFA U+6EAB # [2000] +0xEBFB U+6EB1 # [2000] +0xEBFC U+6EC1 # [2000] +0xEC40 U+6EC7 # [2000] +0xEC41 U+6ECE # [2000] +0xEC42 U+6F10 # [2000] +0xEC43 U+6F1A # [2000] +0xEC44 U+FA47 # CJK COMPATIBILITY IDEOGRAPH-FA47 [2000] [Unicode3.2] +0xEC45 U+6F2A # [2000] +0xEC46 U+6F2F # [2000] +0xEC47 U+6F33 # [2000] +0xEC48 U+6F51 # [2000] +0xEC49 U+6F59 # [2000] +0xEC4A U+6F5E # [2000] +0xEC4B U+6F61 # [2000] +0xEC4C U+6F62 # [2000] +0xEC4D U+6F7E # [2000] +0xEC4E U+6F88 # [2000] +0xEC4F U+6F8C # [2000] +0xEC50 U+6F8D # [2000] +0xEC51 U+6F94 # [2000] +0xEC52 U+6FA0 # [2000] +0xEC53 U+6FA7 # [2000] +0xEC54 U+6FB6 # [2000] +0xEC55 U+6FBC # [2000] +0xEC56 U+6FC7 # [2000] +0xEC57 U+6FCA # [2000] +0xEC58 U+6FF9 # [2000] +0xEC59 U+6FF0 # [2000] +0xEC5A U+6FF5 # [2000] +0xEC5B U+7005 # [2000] +0xEC5C U+7006 # [2000] +0xEC5D U+7028 # [2000] +0xEC5E U+704A # [2000] +0xEC5F U+705D # [2000] +0xEC60 U+705E # [2000] +0xEC61 U+704E # [2000] +0xEC62 U+7064 # [2000] +0xEC63 U+7075 # [2000] +0xEC64 U+7085 # [2000] +0xEC65 U+70A4 # [2000] +0xEC66 U+70AB # [2000] +0xEC67 U+70B7 # [2000] +0xEC68 U+70D4 # [2000] +0xEC69 U+70D8 # [2000] +0xEC6A U+70E4 # [2000] +0xEC6B U+710F # [2000] +0xEC6C U+712B # [2000] +0xEC6D U+711E # [2000] +0xEC6E U+7120 # [2000] +0xEC6F U+712E # [2000] +0xEC70 U+7130 # [2000] +0xEC71 U+7146 # [2000] +0xEC72 U+7147 # [2000] +0xEC73 U+7151 # [2000] +0xEC74 U+FA48 # CJK COMPATIBILITY IDEOGRAPH-FA48 [2000] [Unicode3.2] +0xEC75 U+7152 # [2000] +0xEC76 U+715C # [2000] +0xEC77 U+7160 # [2000] +0xEC78 U+7168 # [2000] +0xEC79 U+FA15 # CJK COMPATIBILITY IDEOGRAPH-FA15 [2000] +0xEC7A U+7185 # [2000] +0xEC7B U+7187 # [2000] +0xEC7C U+7192 # [2000] +0xEC7D U+71C1 # [2000] +0xEC7E U+71BA # [2000] +0xEC80 U+71C4 # [2000] +0xEC81 U+71FE # [2000] +0xEC82 U+7200 # [2000] +0xEC83 U+7215 # [2000] +0xEC84 U+7255 # [2000] +0xEC85 U+7256 # [2000] +0xEC86 U+3E3F # [2000] +0xEC87 U+728D # [2000] +0xEC88 U+729B # [2000] +0xEC89 U+72BE # [2000] +0xEC8A U+72C0 # [2000] +0xEC8B U+72FB # [2000] +0xEC8C U+247F1 # [2000] [Unicode3.1] +0xEC8D U+7327 # [2000] +0xEC8E U+7328 # [2000] +0xEC8F U+FA16 # CJK COMPATIBILITY IDEOGRAPH-FA16 [2000] +0xEC90 U+7350 # [2000] +0xEC91 U+7366 # [2000] +0xEC92 U+737C # [2000] +0xEC93 U+7395 # [2000] +0xEC94 U+739F # [2000] +0xEC95 U+73A0 # [2000] +0xEC96 U+73A2 # [2000] +0xEC97 U+73A6 # [2000] +0xEC98 U+73AB # [2000] +0xEC99 U+73C9 # [2000] +0xEC9A U+73CF # [2000] +0xEC9B U+73D6 # [2000] +0xEC9C U+73D9 # [2000] +0xEC9D U+73E3 # [2000] +0xEC9E U+73E9 # [2000] +0xEC9F U+7407 # [2000] +0xECA0 U+740A # [2000] +0xECA1 U+741A # [2000] +0xECA2 U+741B # [2000] +0xECA3 U+FA4A # CJK COMPATIBILITY IDEOGRAPH-FA4A [2000] [Unicode3.2] +0xECA4 U+7426 # [2000] +0xECA5 U+7428 # [2000] +0xECA6 U+742A # [2000] +0xECA7 U+742B # [2000] +0xECA8 U+742C # [2000] +0xECA9 U+742E # [2000] +0xECAA U+742F # [2000] +0xECAB U+7430 # [2000] +0xECAC U+7444 # [2000] +0xECAD U+7446 # [2000] +0xECAE U+7447 # [2000] +0xECAF U+744B # [2000] +0xECB0 U+7457 # [2000] +0xECB1 U+7462 # [2000] +0xECB2 U+746B # [2000] +0xECB3 U+746D # [2000] +0xECB4 U+7486 # [2000] +0xECB5 U+7487 # [2000] +0xECB6 U+7489 # [2000] +0xECB7 U+7498 # [2000] +0xECB8 U+749C # [2000] +0xECB9 U+749F # [2000] +0xECBA U+74A3 # [2000] +0xECBB U+7490 # [2000] +0xECBC U+74A6 # [2000] +0xECBD U+74A8 # [2000] +0xECBE U+74A9 # [2000] +0xECBF U+74B5 # [2000] +0xECC0 U+74BF # [2000] +0xECC1 U+74C8 # [2000] +0xECC2 U+74C9 # [2000] +0xECC3 U+74DA # [2000] +0xECC4 U+74FF # [2000] +0xECC5 U+7501 # [2000] +0xECC6 U+7517 # [2000] +0xECC7 U+752F # [2000] +0xECC8 U+756F # [2000] +0xECC9 U+7579 # [2000] +0xECCA U+7592 # [2000] +0xECCB U+3F72 # [2000] +0xECCC U+75CE # [2000] +0xECCD U+75E4 # [2000] +0xECCE U+7600 # [2000] +0xECCF U+7602 # [2000] +0xECD0 U+7608 # [2000] +0xECD1 U+7615 # [2000] +0xECD2 U+7616 # [2000] +0xECD3 U+7619 # [2000] +0xECD4 U+761E # [2000] +0xECD5 U+762D # [2000] +0xECD6 U+7635 # [2000] +0xECD7 U+7643 # [2000] +0xECD8 U+764B # [2000] +0xECD9 U+7664 # [2000] +0xECDA U+7665 # [2000] +0xECDB U+766D # [2000] +0xECDC U+766F # [2000] +0xECDD U+7671 # [2000] +0xECDE U+7681 # [2000] +0xECDF U+769B # [2000] +0xECE0 U+769D # [2000] +0xECE1 U+769E # [2000] +0xECE2 U+76A6 # [2000] +0xECE3 U+76AA # [2000] +0xECE4 U+76B6 # [2000] +0xECE5 U+76C5 # [2000] +0xECE6 U+76CC # [2000] +0xECE7 U+76CE # [2000] +0xECE8 U+76D4 # [2000] +0xECE9 U+76E6 # [2000] +0xECEA U+76F1 # [2000] +0xECEB U+76FC # [2000] +0xECEC U+770A # [2000] +0xECED U+7719 # [2000] +0xECEE U+7734 # [2000] +0xECEF U+7736 # [2000] +0xECF0 U+7746 # [2000] +0xECF1 U+774D # [2000] +0xECF2 U+774E # [2000] +0xECF3 U+775C # [2000] +0xECF4 U+775F # [2000] +0xECF5 U+7762 # [2000] +0xECF6 U+777A # [2000] +0xECF7 U+7780 # [2000] +0xECF8 U+7794 # [2000] +0xECF9 U+77AA # [2000] +0xECFA U+77E0 # [2000] +0xECFB U+782D # [2000] +0xECFC U+2548E # [2000] [Unicode3.1] +0xED40 U+7843 # [2000] +0xED41 U+784E # [2000] +0xED42 U+784F # [2000] +0xED43 U+7851 # [2000] +0xED44 U+7868 # [2000] +0xED45 U+786E # [2000] +0xED46 U+FA4B # CJK COMPATIBILITY IDEOGRAPH-FA4B [2000] [Unicode3.2] +0xED47 U+78B0 # [2000] +0xED48 U+2550E # [2000] [Unicode3.1] +0xED49 U+78AD # [2000] +0xED4A U+78E4 # [2000] +0xED4B U+78F2 # [2000] +0xED4C U+7900 # [2000] +0xED4D U+78F7 # [2000] +0xED4E U+791C # [2000] +0xED4F U+792E # [2000] +0xED50 U+7931 # [2000] +0xED51 U+7934 # [2000] +0xED52 U+FA4C # CJK COMPATIBILITY IDEOGRAPH-FA4C [2000] [Unicode3.2] +0xED53 U+FA4D # CJK COMPATIBILITY IDEOGRAPH-FA4D [2000] [Unicode3.2] +0xED54 U+7945 # [2000] +0xED55 U+7946 # [2000] +0xED56 U+FA4E # CJK COMPATIBILITY IDEOGRAPH-FA4E [2000] [Unicode3.2] +0xED57 U+FA4F # CJK COMPATIBILITY IDEOGRAPH-FA4F [2000] [Unicode3.2] +0xED58 U+FA50 # CJK COMPATIBILITY IDEOGRAPH-FA50 [2000] [Unicode3.2] +0xED59 U+795C # [2000] +0xED5A U+FA51 # CJK COMPATIBILITY IDEOGRAPH-FA51 [2000] [Unicode3.2] +0xED5B U+FA19 # CJK COMPATIBILITY IDEOGRAPH-FA19 [2000] +0xED5C U+FA1A # CJK COMPATIBILITY IDEOGRAPH-FA1A [2000] +0xED5D U+7979 # [2000] +0xED5E U+FA52 # CJK COMPATIBILITY IDEOGRAPH-FA52 [2000] [Unicode3.2] +0xED5F U+FA53 # CJK COMPATIBILITY IDEOGRAPH-FA53 [2000] [Unicode3.2] +0xED60 U+FA1B # CJK COMPATIBILITY IDEOGRAPH-FA1B [2000] +0xED61 U+7998 # [2000] +0xED62 U+79B1 # [2000] +0xED63 U+79B8 # [2000] +0xED64 U+79C8 # [2000] +0xED65 U+79CA # [2000] +0xED66 U+25771 # [2000] [Unicode3.1] +0xED67 U+79D4 # [2000] +0xED68 U+79DE # [2000] +0xED69 U+79EB # [2000] +0xED6A U+79ED # [2000] +0xED6B U+7A03 # [2000] +0xED6C U+FA54 # CJK COMPATIBILITY IDEOGRAPH-FA54 [2000] [Unicode3.2] +0xED6D U+7A39 # [2000] +0xED6E U+7A5D # [2000] +0xED6F U+7A6D # [2000] +0xED70 U+FA55 # CJK COMPATIBILITY IDEOGRAPH-FA55 [2000] [Unicode3.2] +0xED71 U+7A85 # [2000] +0xED72 U+7AA0 # [2000] +0xED73 U+259C4 # [2000] [Unicode3.1] +0xED74 U+7AB3 # [2000] +0xED75 U+7ABB # [2000] +0xED76 U+7ACE # [2000] +0xED77 U+7AEB # [2000] +0xED78 U+7AFD # [2000] +0xED79 U+7B12 # [2000] +0xED7A U+7B2D # [2000] +0xED7B U+7B3B # [2000] +0xED7C U+7B47 # [2000] +0xED7D U+7B4E # [2000] +0xED7E U+7B60 # [2000] +0xED80 U+7B6D # [2000] +0xED81 U+7B6F # [2000] +0xED82 U+7B72 # [2000] +0xED83 U+7B9E # [2000] +0xED84 U+FA56 # CJK COMPATIBILITY IDEOGRAPH-FA56 [2000] [Unicode3.2] +0xED85 U+7BD7 # [2000] +0xED86 U+7BD9 # [2000] +0xED87 U+7C01 # [2000] +0xED88 U+7C31 # [2000] +0xED89 U+7C1E # [2000] +0xED8A U+7C20 # [2000] +0xED8B U+7C33 # [2000] +0xED8C U+7C36 # [2000] +0xED8D U+4264 # [2000] +0xED8E U+25DA1 # [2000] [Unicode3.1] +0xED8F U+7C59 # [2000] +0xED90 U+7C6D # [2000] +0xED91 U+7C79 # [2000] +0xED92 U+7C8F # [2000] +0xED93 U+7C94 # [2000] +0xED94 U+7CA0 # [2000] +0xED95 U+7CBC # [2000] +0xED96 U+7CD5 # [2000] +0xED97 U+7CD9 # [2000] +0xED98 U+7CDD # [2000] +0xED99 U+7D07 # [2000] +0xED9A U+7D08 # [2000] +0xED9B U+7D13 # [2000] +0xED9C U+7D1D # [2000] +0xED9D U+7D23 # [2000] +0xED9E U+7D31 # [2000] +0xED9F U+7D41 # [2000] +0xEDA0 U+7D48 # [2000] +0xEDA1 U+7D53 # [2000] +0xEDA2 U+7D5C # [2000] +0xEDA3 U+7D7A # [2000] +0xEDA4 U+7D83 # [2000] +0xEDA5 U+7D8B # [2000] +0xEDA6 U+7DA0 # [2000] +0xEDA7 U+7DA6 # [2000] +0xEDA8 U+7DC2 # [2000] +0xEDA9 U+7DCC # [2000] +0xEDAA U+7DD6 # [2000] +0xEDAB U+7DE3 # [2000] +0xEDAC U+FA57 # CJK COMPATIBILITY IDEOGRAPH-FA57 [2000] [Unicode3.2] +0xEDAD U+7E28 # [2000] +0xEDAE U+7E08 # [2000] +0xEDAF U+7E11 # [2000] +0xEDB0 U+7E15 # [2000] +0xEDB1 U+FA59 # CJK COMPATIBILITY IDEOGRAPH-FA59 [2000] [Unicode3.2] +0xEDB2 U+7E47 # [2000] +0xEDB3 U+7E52 # [2000] +0xEDB4 U+7E61 # [2000] +0xEDB5 U+7E8A # [2000] +0xEDB6 U+7E8D # [2000] +0xEDB7 U+7F47 # [2000] +0xEDB8 U+FA5A # CJK COMPATIBILITY IDEOGRAPH-FA5A [2000] [Unicode3.2] +0xEDB9 U+7F91 # [2000] +0xEDBA U+7F97 # [2000] +0xEDBB U+7FBF # [2000] +0xEDBC U+7FCE # [2000] +0xEDBD U+7FDB # [2000] +0xEDBE U+7FDF # [2000] +0xEDBF U+7FEC # [2000] +0xEDC0 U+7FEE # [2000] +0xEDC1 U+7FFA # [2000] +0xEDC2 U+FA5B # CJK COMPATIBILITY IDEOGRAPH-FA5B [2000] [Unicode3.2] +0xEDC3 U+8014 # [2000] +0xEDC4 U+8026 # [2000] +0xEDC5 U+8035 # [2000] +0xEDC6 U+8037 # [2000] +0xEDC7 U+803C # [2000] +0xEDC8 U+80CA # [2000] +0xEDC9 U+80D7 # [2000] +0xEDCA U+80E0 # [2000] +0xEDCB U+80F3 # [2000] +0xEDCC U+8118 # [2000] +0xEDCD U+814A # [2000] +0xEDCE U+8160 # [2000] +0xEDCF U+8167 # [2000] +0xEDD0 U+8168 # [2000] +0xEDD1 U+816D # [2000] +0xEDD2 U+81BB # [2000] +0xEDD3 U+81CA # [2000] +0xEDD4 U+81CF # [2000] +0xEDD5 U+81D7 # [2000] +0xEDD6 U+FA5C # CJK COMPATIBILITY IDEOGRAPH-FA5C [2000] [Unicode3.2] +0xEDD7 U+4453 # [2000] +0xEDD8 U+445B # [2000] +0xEDD9 U+8260 # [2000] +0xEDDA U+8274 # [2000] +0xEDDB U+26AFF # [2000] [Unicode3.1] +0xEDDC U+828E # [2000] +0xEDDD U+82A1 # [2000] +0xEDDE U+82A3 # [2000] +0xEDDF U+82A4 # [2000] +0xEDE0 U+82A9 # [2000] +0xEDE1 U+82AE # [2000] +0xEDE2 U+82B7 # [2000] +0xEDE3 U+82BE # [2000] +0xEDE4 U+82BF # [2000] +0xEDE5 U+82C6 # [2000] +0xEDE6 U+82D5 # [2000] +0xEDE7 U+82FD # [2000] +0xEDE8 U+82FE # [2000] +0xEDE9 U+8300 # [2000] +0xEDEA U+8301 # [2000] +0xEDEB U+8362 # [2000] +0xEDEC U+8322 # [2000] +0xEDED U+832D # [2000] +0xEDEE U+833A # [2000] +0xEDEF U+8343 # [2000] +0xEDF0 U+8347 # [2000] +0xEDF1 U+8351 # [2000] +0xEDF2 U+8355 # [2000] +0xEDF3 U+837D # [2000] +0xEDF4 U+8386 # [2000] +0xEDF5 U+8392 # [2000] +0xEDF6 U+8398 # [2000] +0xEDF7 U+83A7 # [2000] +0xEDF8 U+83A9 # [2000] +0xEDF9 U+83BF # [2000] +0xEDFA U+83C0 # [2000] +0xEDFB U+83C7 # [2000] +0xEDFC U+83CF # [2000] +0xEE40 U+83D1 # [2000] +0xEE41 U+83E1 # [2000] +0xEE42 U+83EA # [2000] +0xEE43 U+8401 # [2000] +0xEE44 U+8406 # [2000] +0xEE45 U+840A # [2000] +0xEE46 U+FA5F # CJK COMPATIBILITY IDEOGRAPH-FA5F [2000] [Unicode3.2] +0xEE47 U+8448 # [2000] +0xEE48 U+845F # [2000] +0xEE49 U+8470 # [2000] +0xEE4A U+8473 # [2000] +0xEE4B U+8485 # [2000] +0xEE4C U+849E # [2000] +0xEE4D U+84AF # [2000] +0xEE4E U+84B4 # [2000] +0xEE4F U+84BA # [2000] +0xEE50 U+84C0 # [2000] +0xEE51 U+84C2 # [2000] +0xEE52 U+26E40 # [2000] [Unicode3.1] +0xEE53 U+8532 # [2000] +0xEE54 U+851E # [2000] +0xEE55 U+8523 # [2000] +0xEE56 U+852F # [2000] +0xEE57 U+8559 # [2000] +0xEE58 U+8564 # [2000] +0xEE59 U+FA1F # CJK COMPATIBILITY IDEOGRAPH-FA1F [2000] +0xEE5A U+85AD # [2000] +0xEE5B U+857A # [2000] +0xEE5C U+858C # [2000] +0xEE5D U+858F # [2000] +0xEE5E U+85A2 # [2000] +0xEE5F U+85B0 # [2000] +0xEE60 U+85CB # [2000] +0xEE61 U+85CE # [2000] +0xEE62 U+85ED # [2000] +0xEE63 U+8612 # [2000] +0xEE64 U+85FF # [2000] +0xEE65 U+8604 # [2000] +0xEE66 U+8605 # [2000] +0xEE67 U+8610 # [2000] +0xEE68 U+270F4 # [2000] [Unicode3.1] +0xEE69 U+8618 # [2000] +0xEE6A U+8629 # [2000] +0xEE6B U+8638 # [2000] +0xEE6C U+8657 # [2000] +0xEE6D U+865B # [2000] +0xEE6E U+F936 # CJK COMPATIBILITY IDEOGRAPH-F936 [2000] +0xEE6F U+8662 # [2000] +0xEE70 U+459D # [2000] +0xEE71 U+866C # [2000] +0xEE72 U+8675 # [2000] +0xEE73 U+8698 # [2000] +0xEE74 U+86B8 # [2000] +0xEE75 U+86FA # [2000] +0xEE76 U+86FC # [2000] +0xEE77 U+86FD # [2000] +0xEE78 U+870B # [2000] +0xEE79 U+8771 # [2000] +0xEE7A U+8787 # [2000] +0xEE7B U+8788 # [2000] +0xEE7C U+87AC # [2000] +0xEE7D U+87AD # [2000] +0xEE7E U+87B5 # [2000] +0xEE80 U+45EA # [2000] +0xEE81 U+87D6 # [2000] +0xEE82 U+87EC # [2000] +0xEE83 U+8806 # [2000] +0xEE84 U+880A # [2000] +0xEE85 U+8810 # [2000] +0xEE86 U+8814 # [2000] +0xEE87 U+881F # [2000] +0xEE88 U+8898 # [2000] +0xEE89 U+88AA # [2000] +0xEE8A U+88CA # [2000] +0xEE8B U+88CE # [2000] +0xEE8C U+27684 # [2000] [Unicode3.1] +0xEE8D U+88F5 # [2000] +0xEE8E U+891C # [2000] +0xEE8F U+FA60 # CJK COMPATIBILITY IDEOGRAPH-FA60 [2000] [Unicode3.2] +0xEE90 U+8918 # [2000] +0xEE91 U+8919 # [2000] +0xEE92 U+891A # [2000] +0xEE93 U+8927 # [2000] +0xEE94 U+8930 # [2000] +0xEE95 U+8932 # [2000] +0xEE96 U+8939 # [2000] +0xEE97 U+8940 # [2000] +0xEE98 U+8994 # [2000] +0xEE99 U+FA61 # CJK COMPATIBILITY IDEOGRAPH-FA61 [2000] [Unicode3.2] +0xEE9A U+89D4 # [2000] +0xEE9B U+89E5 # [2000] +0xEE9C U+89F6 # [2000] +0xEE9D U+8A12 # [2000] +0xEE9E U+8A15 # [2000] +0xEE9F U+8A22 # [2000] +0xEEA0 U+8A37 # [2000] +0xEEA1 U+8A47 # [2000] +0xEEA2 U+8A4E # [2000] +0xEEA3 U+8A5D # [2000] +0xEEA4 U+8A61 # [2000] +0xEEA5 U+8A75 # [2000] +0xEEA6 U+8A79 # [2000] +0xEEA7 U+8AA7 # [2000] +0xEEA8 U+8AD0 # [2000] +0xEEA9 U+8ADF # [2000] +0xEEAA U+8AF4 # [2000] +0xEEAB U+8AF6 # [2000] +0xEEAC U+FA22 # CJK COMPATIBILITY IDEOGRAPH-FA22 [2000] +0xEEAD U+FA62 # CJK COMPATIBILITY IDEOGRAPH-FA62 [2000] [Unicode3.2] +0xEEAE U+FA63 # CJK COMPATIBILITY IDEOGRAPH-FA63 [2000] [Unicode3.2] +0xEEAF U+8B46 # [2000] +0xEEB0 U+8B54 # [2000] +0xEEB1 U+8B59 # [2000] +0xEEB2 U+8B69 # [2000] +0xEEB3 U+8B9D # [2000] +0xEEB4 U+8C49 # [2000] +0xEEB5 U+8C68 # [2000] +0xEEB6 U+FA64 # CJK COMPATIBILITY IDEOGRAPH-FA64 [2000] [Unicode3.2] +0xEEB7 U+8CE1 # [2000] +0xEEB8 U+8CF4 # [2000] +0xEEB9 U+8CF8 # [2000] +0xEEBA U+8CFE # [2000] +0xEEBB U+FA65 # CJK COMPATIBILITY IDEOGRAPH-FA65 [2000] [Unicode3.2] +0xEEBC U+8D12 # [2000] +0xEEBD U+8D1B # [2000] +0xEEBE U+8DAF # [2000] +0xEEBF U+8DCE # [2000] +0xEEC0 U+8DD1 # [2000] +0xEEC1 U+8DD7 # [2000] +0xEEC2 U+8E20 # [2000] +0xEEC3 U+8E23 # [2000] +0xEEC4 U+8E3D # [2000] +0xEEC5 U+8E70 # [2000] +0xEEC6 U+8E7B # [2000] +0xEEC7 U+28277 # [2000] [Unicode3.1] +0xEEC8 U+8EC0 # [2000] +0xEEC9 U+4844 # [2000] +0xEECA U+8EFA # [2000] +0xEECB U+8F1E # [2000] +0xEECC U+8F2D # [2000] +0xEECD U+8F36 # [2000] +0xEECE U+8F54 # [2000] +0xEECF U+283CD # [2000] [Unicode3.1] +0xEED0 U+8FA6 # [2000] +0xEED1 U+8FB5 # [2000] +0xEED2 U+8FE4 # [2000] +0xEED3 U+8FE8 # [2000] +0xEED4 U+8FEE # [2000] +0xEED5 U+9008 # [2000] +0xEED6 U+902D # [2000] +0xEED7 U+FA67 # CJK COMPATIBILITY IDEOGRAPH-FA67 [2000] [Unicode3.2] +0xEED8 U+9088 # [2000] +0xEED9 U+9095 # [2000] +0xEEDA U+9097 # [2000] +0xEEDB U+9099 # [2000] +0xEEDC U+909B # [2000] +0xEEDD U+90A2 # [2000] +0xEEDE U+90B3 # [2000] +0xEEDF U+90BE # [2000] +0xEEE0 U+90C4 # [2000] +0xEEE1 U+90C5 # [2000] +0xEEE2 U+90C7 # [2000] +0xEEE3 U+90D7 # [2000] +0xEEE4 U+90DD # [2000] +0xEEE5 U+90DE # [2000] +0xEEE6 U+90EF # [2000] +0xEEE7 U+90F4 # [2000] +0xEEE8 U+FA26 # CJK COMPATIBILITY IDEOGRAPH-FA26 [2000] +0xEEE9 U+9114 # [2000] +0xEEEA U+9115 # [2000] +0xEEEB U+9116 # [2000] +0xEEEC U+9122 # [2000] +0xEEED U+9123 # [2000] +0xEEEE U+9127 # [2000] +0xEEEF U+912F # [2000] +0xEEF0 U+9131 # [2000] +0xEEF1 U+9134 # [2000] +0xEEF2 U+913D # [2000] +0xEEF3 U+9148 # [2000] +0xEEF4 U+915B # [2000] +0xEEF5 U+9183 # [2000] +0xEEF6 U+919E # [2000] +0xEEF7 U+91AC # [2000] +0xEEF8 U+91B1 # [2000] +0xEEF9 U+91BC # [2000] +0xEEFA U+91D7 # [2000] +0xEEFB U+91FB # [2000] +0xEEFC U+91E4 # [2000] +0xEF40 U+91E5 # [2000] +0xEF41 U+91ED # [2000] +0xEF42 U+91F1 # [2000] +0xEF43 U+9207 # [2000] +0xEF44 U+9210 # [2000] +0xEF45 U+9238 # [2000] +0xEF46 U+9239 # [2000] +0xEF47 U+923A # [2000] +0xEF48 U+923C # [2000] +0xEF49 U+9240 # [2000] +0xEF4A U+9243 # [2000] +0xEF4B U+924F # [2000] +0xEF4C U+9278 # [2000] +0xEF4D U+9288 # [2000] +0xEF4E U+92C2 # [2000] +0xEF4F U+92CB # [2000] +0xEF50 U+92CC # [2000] +0xEF51 U+92D3 # [2000] +0xEF52 U+92E0 # [2000] +0xEF53 U+92FF # [2000] +0xEF54 U+9304 # [2000] +0xEF55 U+931F # [2000] +0xEF56 U+9321 # [2000] +0xEF57 U+9325 # [2000] +0xEF58 U+9348 # [2000] +0xEF59 U+9349 # [2000] +0xEF5A U+934A # [2000] +0xEF5B U+9364 # [2000] +0xEF5C U+9365 # [2000] +0xEF5D U+936A # [2000] +0xEF5E U+9370 # [2000] +0xEF5F U+939B # [2000] +0xEF60 U+93A3 # [2000] +0xEF61 U+93BA # [2000] +0xEF62 U+93C6 # [2000] +0xEF63 U+93DE # [2000] +0xEF64 U+93DF # [2000] +0xEF65 U+9404 # [2000] +0xEF66 U+93FD # [2000] +0xEF67 U+9433 # [2000] +0xEF68 U+944A # [2000] +0xEF69 U+9463 # [2000] +0xEF6A U+946B # [2000] +0xEF6B U+9471 # [2000] +0xEF6C U+9472 # [2000] +0xEF6D U+958E # [2000] +0xEF6E U+959F # [2000] +0xEF6F U+95A6 # [2000] +0xEF70 U+95A9 # [2000] +0xEF71 U+95AC # [2000] +0xEF72 U+95B6 # [2000] +0xEF73 U+95BD # [2000] +0xEF74 U+95CB # [2000] +0xEF75 U+95D0 # [2000] +0xEF76 U+95D3 # [2000] +0xEF77 U+49B0 # [2000] +0xEF78 U+95DA # [2000] +0xEF79 U+95DE # [2000] +0xEF7A U+9658 # [2000] +0xEF7B U+9684 # [2000] +0xEF7C U+F9DC # CJK COMPATIBILITY IDEOGRAPH-F9DC [2000] +0xEF7D U+969D # [2000] +0xEF7E U+96A4 # [2000] +0xEF80 U+96A5 # [2000] +0xEF81 U+96D2 # [2000] +0xEF82 U+96DE # [2000] +0xEF83 U+FA68 # CJK COMPATIBILITY IDEOGRAPH-FA68 [2000] [Unicode3.2] +0xEF84 U+96E9 # [2000] +0xEF85 U+96EF # [2000] +0xEF86 U+9733 # [2000] +0xEF87 U+973B # [2000] +0xEF88 U+974D # [2000] +0xEF89 U+974E # [2000] +0xEF8A U+974F # [2000] +0xEF8B U+975A # [2000] +0xEF8C U+976E # [2000] +0xEF8D U+9773 # [2000] +0xEF8E U+9795 # [2000] +0xEF8F U+97AE # [2000] +0xEF90 U+97BA # [2000] +0xEF91 U+97C1 # [2000] +0xEF92 U+97C9 # [2000] +0xEF93 U+97DE # [2000] +0xEF94 U+97DB # [2000] +0xEF95 U+97F4 # [2000] +0xEF96 U+FA69 # CJK COMPATIBILITY IDEOGRAPH-FA69 [2000] [Unicode3.2] +0xEF97 U+980A # [2000] +0xEF98 U+981E # [2000] +0xEF99 U+982B # [2000] +0xEF9A U+9830 # [2000] +0xEF9B U+FA6A # CJK COMPATIBILITY IDEOGRAPH-FA6A [2000] [Unicode3.2] +0xEF9C U+9852 # [2000] +0xEF9D U+9853 # [2000] +0xEF9E U+9856 # [2000] +0xEF9F U+9857 # [2000] +0xEFA0 U+9859 # [2000] +0xEFA1 U+985A # [2000] +0xEFA2 U+F9D0 # CJK COMPATIBILITY IDEOGRAPH-F9D0 [2000] +0xEFA3 U+9865 # [2000] +0xEFA4 U+986C # [2000] +0xEFA5 U+98BA # [2000] +0xEFA6 U+98C8 # [2000] +0xEFA7 U+98E7 # [2000] +0xEFA8 U+9958 # [2000] +0xEFA9 U+999E # [2000] +0xEFAA U+9A02 # [2000] +0xEFAB U+9A03 # [2000] +0xEFAC U+9A24 # [2000] +0xEFAD U+9A2D # [2000] +0xEFAE U+9A2E # [2000] +0xEFAF U+9A38 # [2000] +0xEFB0 U+9A4A # [2000] +0xEFB1 U+9A4E # [2000] +0xEFB2 U+9A52 # [2000] +0xEFB3 U+9AB6 # [2000] +0xEFB4 U+9AC1 # [2000] +0xEFB5 U+9AC3 # [2000] +0xEFB6 U+9ACE # [2000] +0xEFB7 U+9AD6 # [2000] +0xEFB8 U+9AF9 # [2000] +0xEFB9 U+9B02 # [2000] +0xEFBA U+9B08 # [2000] +0xEFBB U+9B20 # [2000] +0xEFBC U+4C17 # [2000] +0xEFBD U+9B2D # [2000] +0xEFBE U+9B5E # [2000] +0xEFBF U+9B79 # [2000] +0xEFC0 U+9B66 # [2000] +0xEFC1 U+9B72 # [2000] +0xEFC2 U+9B75 # [2000] +0xEFC3 U+9B84 # [2000] +0xEFC4 U+9B8A # [2000] +0xEFC5 U+9B8F # [2000] +0xEFC6 U+9B9E # [2000] +0xEFC7 U+9BA7 # [2000] +0xEFC8 U+9BC1 # [2000] +0xEFC9 U+9BCE # [2000] +0xEFCA U+9BE5 # [2000] +0xEFCB U+9BF8 # [2000] +0xEFCC U+9BFD # [2000] +0xEFCD U+9C00 # [2000] +0xEFCE U+9C23 # [2000] +0xEFCF U+9C41 # [2000] +0xEFD0 U+9C4F # [2000] +0xEFD1 U+9C50 # [2000] +0xEFD2 U+9C53 # [2000] +0xEFD3 U+9C63 # [2000] +0xEFD4 U+9C65 # [2000] +0xEFD5 U+9C77 # [2000] +0xEFD6 U+9D1D # [2000] +0xEFD7 U+9D1E # [2000] +0xEFD8 U+9D43 # [2000] +0xEFD9 U+9D47 # [2000] +0xEFDA U+9D52 # [2000] +0xEFDB U+9D63 # [2000] +0xEFDC U+9D70 # [2000] +0xEFDD U+9D7C # [2000] +0xEFDE U+9D8A # [2000] +0xEFDF U+9D96 # [2000] +0xEFE0 U+9DC0 # [2000] +0xEFE1 U+9DAC # [2000] +0xEFE2 U+9DBC # [2000] +0xEFE3 U+9DD7 # [2000] +0xEFE4 U+2A190 # [2000] [Unicode3.1] +0xEFE5 U+9DE7 # [2000] +0xEFE6 U+9E07 # [2000] +0xEFE7 U+9E15 # [2000] +0xEFE8 U+9E7C # [2000] +0xEFE9 U+9E9E # [2000] +0xEFEA U+9EA4 # [2000] +0xEFEB U+9EAC # [2000] +0xEFEC U+9EAF # [2000] +0xEFED U+9EB4 # [2000] +0xEFEE U+9EB5 # [2000] +0xEFEF U+9EC3 # [2000] +0xEFF0 U+9ED1 # [2000] +0xEFF1 U+9F10 # [2000] +0xEFF2 U+9F39 # [2000] +0xEFF3 U+9F57 # [2000] +0xEFF4 U+9F90 # [2000] +0xEFF5 U+9F94 # [2000] +0xEFF6 U+9F97 # [2000] +0xEFF7 U+9FA2 # [2000] +0xEFF8 U+59F8 # [2004] +0xEFF9 U+5C5B # [2004] +0xEFFA U+5E77 # [2004] +0xEFFB U+7626 # [2004] +0xEFFC U+7E6B # [2004] +0xF040 U+20089 # [2000] [Unicode3.1] +0xF041 U+4E02 # [2000] +0xF042 U+4E0F # [2000] +0xF043 U+4E12 # [2000] +0xF044 U+4E29 # [2000] +0xF045 U+4E2B # [2000] +0xF046 U+4E2E # [2000] +0xF047 U+4E40 # [2000] +0xF048 U+4E47 # [2000] +0xF049 U+4E48 # [2000] +0xF04A U+200A2 # [2000] [Unicode3.1] +0xF04B U+4E51 # [2000] +0xF04C U+3406 # [2000] +0xF04D U+200A4 # [2000] [Unicode3.1] +0xF04E U+4E5A # [2000] +0xF04F U+4E69 # [2000] +0xF050 U+4E9D # [2000] +0xF051 U+342C # [2000] +0xF052 U+342E # [2000] +0xF053 U+4EB9 # [2000] +0xF054 U+4EBB # [2000] +0xF055 U+201A2 # [2000] [Unicode3.1] +0xF056 U+4EBC # [2000] +0xF057 U+4EC3 # [2000] +0xF058 U+4EC8 # [2000] +0xF059 U+4ED0 # [2000] +0xF05A U+4EEB # [2000] +0xF05B U+4EDA # [2000] +0xF05C U+4EF1 # [2000] +0xF05D U+4EF5 # [2000] +0xF05E U+4F00 # [2000] +0xF05F U+4F16 # [2000] +0xF060 U+4F64 # [2000] +0xF061 U+4F37 # [2000] +0xF062 U+4F3E # [2000] +0xF063 U+4F54 # [2000] +0xF064 U+4F58 # [2000] +0xF065 U+20213 # [2000] [Unicode3.1] +0xF066 U+4F77 # [2000] +0xF067 U+4F78 # [2000] +0xF068 U+4F7A # [2000] +0xF069 U+4F7D # [2000] +0xF06A U+4F82 # [2000] +0xF06B U+4F85 # [2000] +0xF06C U+4F92 # [2000] +0xF06D U+4F9A # [2000] +0xF06E U+4FE6 # [2000] +0xF06F U+4FB2 # [2000] +0xF070 U+4FBE # [2000] +0xF071 U+4FC5 # [2000] +0xF072 U+4FCB # [2000] +0xF073 U+4FCF # [2000] +0xF074 U+4FD2 # [2000] +0xF075 U+346A # [2000] +0xF076 U+4FF2 # [2000] +0xF077 U+5000 # [2000] +0xF078 U+5010 # [2000] +0xF079 U+5013 # [2000] +0xF07A U+501C # [2000] +0xF07B U+501E # [2000] +0xF07C U+5022 # [2000] +0xF07D U+3468 # [2000] +0xF07E U+5042 # [2000] +0xF080 U+5046 # [2000] +0xF081 U+504E # [2000] +0xF082 U+5053 # [2000] +0xF083 U+5057 # [2000] +0xF084 U+5063 # [2000] +0xF085 U+5066 # [2000] +0xF086 U+506A # [2000] +0xF087 U+5070 # [2000] +0xF088 U+50A3 # [2000] +0xF089 U+5088 # [2000] +0xF08A U+5092 # [2000] +0xF08B U+5093 # [2000] +0xF08C U+5095 # [2000] +0xF08D U+5096 # [2000] +0xF08E U+509C # [2000] +0xF08F U+50AA # [2000] +0xF090 U+2032B # [2000] [Unicode3.1] +0xF091 U+50B1 # [2000] +0xF092 U+50BA # [2000] +0xF093 U+50BB # [2000] +0xF094 U+50C4 # [2000] +0xF095 U+50C7 # [2000] +0xF096 U+50F3 # [2000] +0xF097 U+20381 # [2000] [Unicode3.1] +0xF098 U+50CE # [2000] +0xF099 U+20371 # [2000] [Unicode3.1] +0xF09A U+50D4 # [2000] +0xF09B U+50D9 # [2000] +0xF09C U+50E1 # [2000] +0xF09D U+50E9 # [2000] +0xF09E U+3492 # [2000] +0xF140 U+5108 # [2000] +0xF141 U+203F9 # [2000] [Unicode3.1] +0xF142 U+5117 # [2000] +0xF143 U+511B # [2000] +0xF144 U+2044A # [2000] [Unicode3.1] +0xF145 U+5160 # [2000] +0xF146 U+20509 # [2000] [Unicode3.1] +0xF147 U+5173 # [2000] +0xF148 U+5183 # [2000] +0xF149 U+518B # [2000] +0xF14A U+34BC # [2000] +0xF14B U+5198 # [2000] +0xF14C U+51A3 # [2000] +0xF14D U+51AD # [2000] +0xF14E U+34C7 # [2000] +0xF14F U+51BC # [2000] +0xF150 U+205D6 # [2000] [Unicode3.1] +0xF151 U+20628 # [2000] [Unicode3.1] +0xF152 U+51F3 # [2000] +0xF153 U+51F4 # [2000] +0xF154 U+5202 # [2000] +0xF155 U+5212 # [2000] +0xF156 U+5216 # [2000] +0xF157 U+2074F # [2000] [Unicode3.1] +0xF158 U+5255 # [2000] +0xF159 U+525C # [2000] +0xF15A U+526C # [2000] +0xF15B U+5277 # [2000] +0xF15C U+5284 # [2000] +0xF15D U+5282 # [2000] +0xF15E U+20807 # [2000] [Unicode3.1] +0xF15F U+5298 # [2000] +0xF160 U+2083A # [2000] [Unicode3.1] +0xF161 U+52A4 # [2000] +0xF162 U+52A6 # [2000] +0xF163 U+52AF # [2000] +0xF164 U+52BA # [2000] +0xF165 U+52BB # [2000] +0xF166 U+52CA # [2000] +0xF167 U+351F # [2000] +0xF168 U+52D1 # [2000] +0xF169 U+208B9 # [2000] [Unicode3.1] +0xF16A U+52F7 # [2000] +0xF16B U+530A # [2000] +0xF16C U+530B # [2000] +0xF16D U+5324 # [2000] +0xF16E U+5335 # [2000] +0xF16F U+533E # [2000] +0xF170 U+5342 # [2000] +0xF171 U+2097C # [2000] [Unicode3.1] +0xF172 U+2099D # [2000] [Unicode3.1] +0xF173 U+5367 # [2000] +0xF174 U+536C # [2000] +0xF175 U+537A # [2000] +0xF176 U+53A4 # [2000] +0xF177 U+53B4 # [2000] +0xF178 U+20AD3 # [2000] [Unicode3.1] +0xF179 U+53B7 # [2000] +0xF17A U+53C0 # [2000] +0xF17B U+20B1D # [2000] [Unicode3.1] +0xF17C U+355D # [2000] +0xF17D U+355E # [2000] +0xF17E U+53D5 # [2000] +0xF180 U+53DA # [2000] +0xF181 U+3563 # [2000] +0xF182 U+53F4 # [2000] +0xF183 U+53F5 # [2000] +0xF184 U+5455 # [2000] +0xF185 U+5424 # [2000] +0xF186 U+5428 # [2000] +0xF187 U+356E # [2000] +0xF188 U+5443 # [2000] +0xF189 U+5462 # [2000] +0xF18A U+5466 # [2000] +0xF18B U+546C # [2000] +0xF18C U+548A # [2000] +0xF18D U+548D # [2000] +0xF18E U+5495 # [2000] +0xF18F U+54A0 # [2000] +0xF190 U+54A6 # [2000] +0xF191 U+54AD # [2000] +0xF192 U+54AE # [2000] +0xF193 U+54B7 # [2000] +0xF194 U+54BA # [2000] +0xF195 U+54BF # [2000] +0xF196 U+54C3 # [2000] +0xF197 U+20D45 # [2000] [Unicode3.1] +0xF198 U+54EC # [2000] +0xF199 U+54EF # [2000] +0xF19A U+54F1 # [2000] +0xF19B U+54F3 # [2000] +0xF19C U+5500 # [2000] +0xF19D U+5501 # [2000] +0xF19E U+5509 # [2000] +0xF19F U+553C # [2000] +0xF1A0 U+5541 # [2000] +0xF1A1 U+35A6 # [2000] +0xF1A2 U+5547 # [2000] +0xF1A3 U+554A # [2000] +0xF1A4 U+35A8 # [2000] +0xF1A5 U+5560 # [2000] +0xF1A6 U+5561 # [2000] +0xF1A7 U+5564 # [2000] +0xF1A8 U+20DE1 # [2000] [Unicode3.1] +0xF1A9 U+557D # [2000] +0xF1AA U+5582 # [2000] +0xF1AB U+5588 # [2000] +0xF1AC U+5591 # [2000] +0xF1AD U+35C5 # [2000] +0xF1AE U+55D2 # [2000] +0xF1AF U+20E95 # [2000] [Unicode3.1] +0xF1B0 U+20E6D # [2000] [Unicode3.1] +0xF1B1 U+55BF # [2000] +0xF1B2 U+55C9 # [2000] +0xF1B3 U+55CC # [2000] +0xF1B4 U+55D1 # [2000] +0xF1B5 U+55DD # [2000] +0xF1B6 U+35DA # [2000] +0xF1B7 U+55E2 # [2000] +0xF1B8 U+20E64 # [2000] [Unicode3.1] +0xF1B9 U+55E9 # [2000] +0xF1BA U+5628 # [2000] +0xF1BB U+20F5F # [2000] [Unicode3.1] +0xF1BC U+5607 # [2000] +0xF1BD U+5610 # [2000] +0xF1BE U+5630 # [2000] +0xF1BF U+5637 # [2000] +0xF1C0 U+35F4 # [2000] +0xF1C1 U+563D # [2000] +0xF1C2 U+563F # [2000] +0xF1C3 U+5640 # [2000] +0xF1C4 U+5647 # [2000] +0xF1C5 U+565E # [2000] +0xF1C6 U+5660 # [2000] +0xF1C7 U+566D # [2000] +0xF1C8 U+3605 # [2000] +0xF1C9 U+5688 # [2000] +0xF1CA U+568C # [2000] +0xF1CB U+5695 # [2000] +0xF1CC U+569A # [2000] +0xF1CD U+569D # [2000] +0xF1CE U+56A8 # [2000] +0xF1CF U+56AD # [2000] +0xF1D0 U+56B2 # [2000] +0xF1D1 U+56C5 # [2000] +0xF1D2 U+56CD # [2000] +0xF1D3 U+56DF # [2000] +0xF1D4 U+56E8 # [2000] +0xF1D5 U+56F6 # [2000] +0xF1D6 U+56F7 # [2000] +0xF1D7 U+21201 # [2000] [Unicode3.1] +0xF1D8 U+5715 # [2000] +0xF1D9 U+5723 # [2000] +0xF1DA U+21255 # [2000] [Unicode3.1] +0xF1DB U+5729 # [2000] +0xF1DC U+2127B # [2000] [Unicode3.1] +0xF1DD U+5745 # [2000] +0xF1DE U+5746 # [2000] +0xF1DF U+574C # [2000] +0xF1E0 U+574D # [2000] +0xF1E1 U+21274 # [2000] [Unicode3.1] +0xF1E2 U+5768 # [2000] +0xF1E3 U+576F # [2000] +0xF1E4 U+5773 # [2000] +0xF1E5 U+5774 # [2000] +0xF1E6 U+5775 # [2000] +0xF1E7 U+577B # [2000] +0xF1E8 U+212E4 # [2000] [Unicode3.1] +0xF1E9 U+212D7 # [2000] [Unicode3.1] +0xF1EA U+57AC # [2000] +0xF1EB U+579A # [2000] +0xF1EC U+579D # [2000] +0xF1ED U+579E # [2000] +0xF1EE U+57A8 # [2000] +0xF1EF U+57D7 # [2000] +0xF1F0 U+212FD # [2000] [Unicode3.1] +0xF1F1 U+57CC # [2000] +0xF1F2 U+21336 # [2000] [Unicode3.1] +0xF1F3 U+21344 # [2000] [Unicode3.1] +0xF1F4 U+57DE # [2000] +0xF1F5 U+57E6 # [2000] +0xF1F6 U+57F0 # [2000] +0xF1F7 U+364A # [2000] +0xF1F8 U+57F8 # [2000] +0xF1F9 U+57FB # [2000] +0xF1FA U+57FD # [2000] +0xF1FB U+5804 # [2000] +0xF1FC U+581E # [2000] +0xF240 U+5820 # [2000] +0xF241 U+5827 # [2000] +0xF242 U+5832 # [2000] +0xF243 U+5839 # [2000] +0xF244 U+213C4 # [2000] [Unicode3.1] +0xF245 U+5849 # [2000] +0xF246 U+584C # [2000] +0xF247 U+5867 # [2000] +0xF248 U+588A # [2000] +0xF249 U+588B # [2000] +0xF24A U+588D # [2000] +0xF24B U+588F # [2000] +0xF24C U+5890 # [2000] +0xF24D U+5894 # [2000] +0xF24E U+589D # [2000] +0xF24F U+58AA # [2000] +0xF250 U+58B1 # [2000] +0xF251 U+2146D # [2000] [Unicode3.1] +0xF252 U+58C3 # [2000] +0xF253 U+58CD # [2000] +0xF254 U+58E2 # [2000] +0xF255 U+58F3 # [2000] +0xF256 U+58F4 # [2000] +0xF257 U+5905 # [2000] +0xF258 U+5906 # [2000] +0xF259 U+590B # [2000] +0xF25A U+590D # [2000] +0xF25B U+5914 # [2000] +0xF25C U+5924 # [2000] +0xF25D U+215D7 # [2000] [Unicode3.1] +0xF25E U+3691 # [2000] +0xF25F U+593D # [2000] +0xF260 U+3699 # [2000] +0xF261 U+5946 # [2000] +0xF262 U+3696 # [2000] +0xF263 U+26C29 # [2000] [Unicode3.1] +0xF264 U+595B # [2000] +0xF265 U+595F # [2000] +0xF266 U+21647 # [2000] [Unicode3.1] +0xF267 U+5975 # [2000] +0xF268 U+5976 # [2000] +0xF269 U+597C # [2000] +0xF26A U+599F # [2000] +0xF26B U+59AE # [2000] +0xF26C U+59BC # [2000] +0xF26D U+59C8 # [2000] +0xF26E U+59CD # [2000] +0xF26F U+59DE # [2000] +0xF270 U+59E3 # [2000] +0xF271 U+59E4 # [2000] +0xF272 U+59E7 # [2000] +0xF273 U+59EE # [2000] +0xF274 U+21706 # [2000] [Unicode3.1] +0xF275 U+21742 # [2000] [Unicode3.1] +0xF276 U+36CF # [2000] +0xF277 U+5A0C # [2000] +0xF278 U+5A0D # [2000] +0xF279 U+5A17 # [2000] +0xF27A U+5A27 # [2000] +0xF27B U+5A2D # [2000] +0xF27C U+5A55 # [2000] +0xF27D U+5A65 # [2000] +0xF27E U+5A7A # [2000] +0xF280 U+5A8B # [2000] +0xF281 U+5A9C # [2000] +0xF282 U+5A9F # [2000] +0xF283 U+5AA0 # [2000] +0xF284 U+5AA2 # [2000] +0xF285 U+5AB1 # [2000] +0xF286 U+5AB3 # [2000] +0xF287 U+5AB5 # [2000] +0xF288 U+5ABA # [2000] +0xF289 U+5ABF # [2000] +0xF28A U+5ADA # [2000] +0xF28B U+5ADC # [2000] +0xF28C U+5AE0 # [2000] +0xF28D U+5AE5 # [2000] +0xF28E U+5AF0 # [2000] +0xF28F U+5AEE # [2000] +0xF290 U+5AF5 # [2000] +0xF291 U+5B00 # [2000] +0xF292 U+5B08 # [2000] +0xF293 U+5B17 # [2000] +0xF294 U+5B34 # [2000] +0xF295 U+5B2D # [2000] +0xF296 U+5B4C # [2000] +0xF297 U+5B52 # [2000] +0xF298 U+5B68 # [2000] +0xF299 U+5B6F # [2000] +0xF29A U+5B7C # [2000] +0xF29B U+5B7F # [2000] +0xF29C U+5B81 # [2000] +0xF29D U+5B84 # [2000] +0xF29E U+219C3 # [2000] [Unicode3.1] +0xF09F U+5B96 # [2000] +0xF0A0 U+5BAC # [2000] +0xF0A1 U+3761 # [2000] +0xF0A2 U+5BC0 # [2000] +0xF0A3 U+3762 # [2000] +0xF0A4 U+5BCE # [2000] +0xF0A5 U+5BD6 # [2000] +0xF0A6 U+376C # [2000] +0xF0A7 U+376B # [2000] +0xF0A8 U+5BF1 # [2000] +0xF0A9 U+5BFD # [2000] +0xF0AA U+3775 # [2000] +0xF0AB U+5C03 # [2000] +0xF0AC U+5C29 # [2000] +0xF0AD U+5C30 # [2000] +0xF0AE U+21C56 # [2000] [Unicode3.1] +0xF0AF U+5C5F # [2000] +0xF0B0 U+5C63 # [2000] +0xF0B1 U+5C67 # [2000] +0xF0B2 U+5C68 # [2000] +0xF0B3 U+5C69 # [2000] +0xF0B4 U+5C70 # [2000] +0xF0B5 U+21D2D # [2000] [Unicode3.1] +0xF0B6 U+21D45 # [2000] [Unicode3.1] +0xF0B7 U+5C7C # [2000] +0xF0B8 U+21D78 # [2000] [Unicode3.1] +0xF0B9 U+21D62 # [2000] [Unicode3.1] +0xF0BA U+5C88 # [2000] +0xF0BB U+5C8A # [2000] +0xF0BC U+37C1 # [2000] +0xF0BD U+21DA1 # [2000] [Unicode3.1] +0xF0BE U+21D9C # [2000] [Unicode3.1] +0xF0BF U+5CA0 # [2000] +0xF0C0 U+5CA2 # [2000] +0xF0C1 U+5CA6 # [2000] +0xF0C2 U+5CA7 # [2000] +0xF0C3 U+21D92 # [2000] [Unicode3.1] +0xF0C4 U+5CAD # [2000] +0xF0C5 U+5CB5 # [2000] +0xF0C6 U+21DB7 # [2000] [Unicode3.1] +0xF0C7 U+5CC9 # [2000] +0xF0C8 U+21DE0 # [2000] [Unicode3.1] +0xF0C9 U+21E33 # [2000] [Unicode3.1] +0xF0CA U+5D06 # [2000] +0xF0CB U+5D10 # [2000] +0xF0CC U+5D2B # [2000] +0xF0CD U+5D1D # [2000] +0xF0CE U+5D20 # [2000] +0xF0CF U+5D24 # [2000] +0xF0D0 U+5D26 # [2000] +0xF0D1 U+5D31 # [2000] +0xF0D2 U+5D39 # [2000] +0xF0D3 U+5D42 # [2000] +0xF0D4 U+37E8 # [2000] +0xF0D5 U+5D61 # [2000] +0xF0D6 U+5D6A # [2000] +0xF0D7 U+37F4 # [2000] +0xF0D8 U+5D70 # [2000] +0xF0D9 U+21F1E # [2000] [Unicode3.1] +0xF0DA U+37FD # [2000] +0xF0DB U+5D88 # [2000] +0xF0DC U+3800 # [2000] +0xF0DD U+5D92 # [2000] +0xF0DE U+5D94 # [2000] +0xF0DF U+5D97 # [2000] +0xF0E0 U+5D99 # [2000] +0xF0E1 U+5DB0 # [2000] +0xF0E2 U+5DB2 # [2000] +0xF0E3 U+5DB4 # [2000] +0xF0E4 U+21F76 # [2000] [Unicode3.1] +0xF0E5 U+5DB9 # [2000] +0xF0E6 U+5DD1 # [2000] +0xF0E7 U+5DD7 # [2000] +0xF0E8 U+5DD8 # [2000] +0xF0E9 U+5DE0 # [2000] +0xF0EA U+21FFA # [2000] [Unicode3.1] +0xF0EB U+5DE4 # [2000] +0xF0EC U+5DE9 # [2000] +0xF0ED U+382F # [2000] +0xF0EE U+5E00 # [2000] +0xF0EF U+3836 # [2000] +0xF0F0 U+5E12 # [2000] +0xF0F1 U+5E15 # [2000] +0xF0F2 U+3840 # [2000] +0xF0F3 U+5E1F # [2000] +0xF0F4 U+5E2E # [2000] +0xF0F5 U+5E3E # [2000] +0xF0F6 U+5E49 # [2000] +0xF0F7 U+385C # [2000] +0xF0F8 U+5E56 # [2000] +0xF0F9 U+3861 # [2000] +0xF0FA U+5E6B # [2000] +0xF0FB U+5E6C # [2000] +0xF0FC U+5E6D # [2000] +0xF29F U+5E6E # [2000] +0xF2A0 U+2217B # [2000] [Unicode3.1] +0xF2A1 U+5EA5 # [2000] +0xF2A2 U+5EAA # [2000] +0xF2A3 U+5EAC # [2000] +0xF2A4 U+5EB9 # [2000] +0xF2A5 U+5EBF # [2000] +0xF2A6 U+5EC6 # [2000] +0xF2A7 U+5ED2 # [2000] +0xF2A8 U+5ED9 # [2000] +0xF2A9 U+2231E # [2000] [Unicode3.1] +0xF2AA U+5EFD # [2000] +0xF2AB U+5F08 # [2000] +0xF2AC U+5F0E # [2000] +0xF2AD U+5F1C # [2000] +0xF2AE U+223AD # [2000] [Unicode3.1] +0xF2AF U+5F1E # [2000] +0xF2B0 U+5F47 # [2000] +0xF2B1 U+5F63 # [2000] +0xF2B2 U+5F72 # [2000] +0xF2B3 U+5F7E # [2000] +0xF2B4 U+5F8F # [2000] +0xF2B5 U+5FA2 # [2000] +0xF2B6 U+5FA4 # [2000] +0xF2B7 U+5FB8 # [2000] +0xF2B8 U+5FC4 # [2000] +0xF2B9 U+38FA # [2000] +0xF2BA U+5FC7 # [2000] +0xF2BB U+5FCB # [2000] +0xF2BC U+5FD2 # [2000] +0xF2BD U+5FD3 # [2000] +0xF2BE U+5FD4 # [2000] +0xF2BF U+5FE2 # [2000] +0xF2C0 U+5FEE # [2000] +0xF2C1 U+5FEF # [2000] +0xF2C2 U+5FF3 # [2000] +0xF2C3 U+5FFC # [2000] +0xF2C4 U+3917 # [2000] +0xF2C5 U+6017 # [2000] +0xF2C6 U+6022 # [2000] +0xF2C7 U+6024 # [2000] +0xF2C8 U+391A # [2000] +0xF2C9 U+604C # [2000] +0xF2CA U+607F # [2000] +0xF2CB U+608A # [2000] +0xF2CC U+6095 # [2000] +0xF2CD U+60A8 # [2000] +0xF2CE U+226F3 # [2000] [Unicode3.1] +0xF2CF U+60B0 # [2000] +0xF2D0 U+60B1 # [2000] +0xF2D1 U+60BE # [2000] +0xF2D2 U+60C8 # [2000] +0xF2D3 U+60D9 # [2000] +0xF2D4 U+60DB # [2000] +0xF2D5 U+60EE # [2000] +0xF2D6 U+60F2 # [2000] +0xF2D7 U+60F5 # [2000] +0xF2D8 U+6110 # [2000] +0xF2D9 U+6112 # [2000] +0xF2DA U+6113 # [2000] +0xF2DB U+6119 # [2000] +0xF2DC U+611E # [2000] +0xF2DD U+613A # [2000] +0xF2DE U+396F # [2000] +0xF2DF U+6141 # [2000] +0xF2E0 U+6146 # [2000] +0xF2E1 U+6160 # [2000] +0xF2E2 U+617C # [2000] +0xF2E3 U+2285B # [2000] [Unicode3.1] +0xF2E4 U+6192 # [2000] +0xF2E5 U+6193 # [2000] +0xF2E6 U+6197 # [2000] +0xF2E7 U+6198 # [2000] +0xF2E8 U+61A5 # [2000] +0xF2E9 U+61A8 # [2000] +0xF2EA U+61AD # [2000] +0xF2EB U+228AB # [2000] [Unicode3.1] +0xF2EC U+61D5 # [2000] +0xF2ED U+61DD # [2000] +0xF2EE U+61DF # [2000] +0xF2EF U+61F5 # [2000] +0xF2F0 U+2298F # [2000] [Unicode3.1] +0xF2F1 U+6215 # [2000] +0xF2F2 U+6223 # [2000] +0xF2F3 U+6229 # [2000] +0xF2F4 U+6246 # [2000] +0xF2F5 U+624C # [2000] +0xF2F6 U+6251 # [2000] +0xF2F7 U+6252 # [2000] +0xF2F8 U+6261 # [2000] +0xF2F9 U+6264 # [2000] +0xF2FA U+627B # [2000] +0xF2FB U+626D # [2000] +0xF2FC U+6273 # [2000] +0xF340 U+6299 # [2000] +0xF341 U+62A6 # [2000] +0xF342 U+62D5 # [2000] +0xF343 U+22AB8 # [2000] [Unicode3.1] +0xF344 U+62FD # [2000] +0xF345 U+6303 # [2000] +0xF346 U+630D # [2000] +0xF347 U+6310 # [2000] +0xF348 U+22B4F # [2000] [Unicode3.1] +0xF349 U+22B50 # [2000] [Unicode3.1] +0xF34A U+6332 # [2000] +0xF34B U+6335 # [2000] +0xF34C U+633B # [2000] +0xF34D U+633C # [2000] +0xF34E U+6341 # [2000] +0xF34F U+6344 # [2000] +0xF350 U+634E # [2000] +0xF351 U+22B46 # [2000] [Unicode3.1] +0xF352 U+6359 # [2000] +0xF353 U+22C1D # [2000] [Unicode3.1] +0xF354 U+22BA6 # [2000] [Unicode3.1] +0xF355 U+636C # [2000] +0xF356 U+6384 # [2000] +0xF357 U+6399 # [2000] +0xF358 U+22C24 # [2000] [Unicode3.1] +0xF359 U+6394 # [2000] +0xF35A U+63BD # [2000] +0xF35B U+63F7 # [2000] +0xF35C U+63D4 # [2000] +0xF35D U+63D5 # [2000] +0xF35E U+63DC # [2000] +0xF35F U+63E0 # [2000] +0xF360 U+63EB # [2000] +0xF361 U+63EC # [2000] +0xF362 U+63F2 # [2000] +0xF363 U+6409 # [2000] +0xF364 U+641E # [2000] +0xF365 U+6425 # [2000] +0xF366 U+6429 # [2000] +0xF367 U+642F # [2000] +0xF368 U+645A # [2000] +0xF369 U+645B # [2000] +0xF36A U+645D # [2000] +0xF36B U+6473 # [2000] +0xF36C U+647D # [2000] +0xF36D U+6487 # [2000] +0xF36E U+6491 # [2000] +0xF36F U+649D # [2000] +0xF370 U+649F # [2000] +0xF371 U+64CB # [2000] +0xF372 U+64CC # [2000] +0xF373 U+64D5 # [2000] +0xF374 U+64D7 # [2000] +0xF375 U+22DE1 # [2000] [Unicode3.1] +0xF376 U+64E4 # [2000] +0xF377 U+64E5 # [2000] +0xF378 U+64FF # [2000] +0xF379 U+6504 # [2000] +0xF37A U+3A6E # [2000] +0xF37B U+650F # [2000] +0xF37C U+6514 # [2000] +0xF37D U+6516 # [2000] +0xF37E U+3A73 # [2000] +0xF380 U+651E # [2000] +0xF381 U+6532 # [2000] +0xF382 U+6544 # [2000] +0xF383 U+6554 # [2000] +0xF384 U+656B # [2000] +0xF385 U+657A # [2000] +0xF386 U+6581 # [2000] +0xF387 U+6584 # [2000] +0xF388 U+6585 # [2000] +0xF389 U+658A # [2000] +0xF38A U+65B2 # [2000] +0xF38B U+65B5 # [2000] +0xF38C U+65B8 # [2000] +0xF38D U+65BF # [2000] +0xF38E U+65C2 # [2000] +0xF38F U+65C9 # [2000] +0xF390 U+65D4 # [2000] +0xF391 U+3AD6 # [2000] +0xF392 U+65F2 # [2000] +0xF393 U+65F9 # [2000] +0xF394 U+65FC # [2000] +0xF395 U+6604 # [2000] +0xF396 U+6608 # [2000] +0xF397 U+6621 # [2000] +0xF398 U+662A # [2000] +0xF399 U+6645 # [2000] +0xF39A U+6651 # [2000] +0xF39B U+664E # [2000] +0xF39C U+3AEA # [2000] +0xF39D U+231C3 # [2000] [Unicode3.1] +0xF39E U+6657 # [2000] +0xF39F U+665B # [2000] +0xF3A0 U+6663 # [2000] +0xF3A1 U+231F5 # [2000] [Unicode3.1] +0xF3A2 U+231B6 # [2000] [Unicode3.1] +0xF3A3 U+666A # [2000] +0xF3A4 U+666B # [2000] +0xF3A5 U+666C # [2000] +0xF3A6 U+666D # [2000] +0xF3A7 U+667B # [2000] +0xF3A8 U+6680 # [2000] +0xF3A9 U+6690 # [2000] +0xF3AA U+6692 # [2000] +0xF3AB U+6699 # [2000] +0xF3AC U+3B0E # [2000] +0xF3AD U+66AD # [2000] +0xF3AE U+66B1 # [2000] +0xF3AF U+66B5 # [2000] +0xF3B0 U+3B1A # [2000] +0xF3B1 U+66BF # [2000] +0xF3B2 U+3B1C # [2000] +0xF3B3 U+66EC # [2000] +0xF3B4 U+3AD7 # [2000] +0xF3B5 U+6701 # [2000] +0xF3B6 U+6705 # [2000] +0xF3B7 U+6712 # [2000] +0xF3B8 U+23372 # [2000] [Unicode3.1] +0xF3B9 U+6719 # [2000] +0xF3BA U+233D3 # [2000] [Unicode3.1] +0xF3BB U+233D2 # [2000] [Unicode3.1] +0xF3BC U+674C # [2000] +0xF3BD U+674D # [2000] +0xF3BE U+6754 # [2000] +0xF3BF U+675D # [2000] +0xF3C0 U+233D0 # [2000] [Unicode3.1] +0xF3C1 U+233E4 # [2000] [Unicode3.1] +0xF3C2 U+233D5 # [2000] [Unicode3.1] +0xF3C3 U+6774 # [2000] +0xF3C4 U+6776 # [2000] +0xF3C5 U+233DA # [2000] [Unicode3.1] +0xF3C6 U+6792 # [2000] +0xF3C7 U+233DF # [2000] [Unicode3.1] +0xF3C8 U+8363 # [2000] +0xF3C9 U+6810 # [2000] +0xF3CA U+67B0 # [2000] +0xF3CB U+67B2 # [2000] +0xF3CC U+67C3 # [2000] +0xF3CD U+67C8 # [2000] +0xF3CE U+67D2 # [2000] +0xF3CF U+67D9 # [2000] +0xF3D0 U+67DB # [2000] +0xF3D1 U+67F0 # [2000] +0xF3D2 U+67F7 # [2000] +0xF3D3 U+2344A # [2000] [Unicode3.1] +0xF3D4 U+23451 # [2000] [Unicode3.1] +0xF3D5 U+2344B # [2000] [Unicode3.1] +0xF3D6 U+6818 # [2000] +0xF3D7 U+681F # [2000] +0xF3D8 U+682D # [2000] +0xF3D9 U+23465 # [2000] [Unicode3.1] +0xF3DA U+6833 # [2000] +0xF3DB U+683B # [2000] +0xF3DC U+683E # [2000] +0xF3DD U+6844 # [2000] +0xF3DE U+6845 # [2000] +0xF3DF U+6849 # [2000] +0xF3E0 U+684C # [2000] +0xF3E1 U+6855 # [2000] +0xF3E2 U+6857 # [2000] +0xF3E3 U+3B77 # [2000] +0xF3E4 U+686B # [2000] +0xF3E5 U+686E # [2000] +0xF3E6 U+687A # [2000] +0xF3E7 U+687C # [2000] +0xF3E8 U+6882 # [2000] +0xF3E9 U+6890 # [2000] +0xF3EA U+6896 # [2000] +0xF3EB U+3B6D # [2000] +0xF3EC U+6898 # [2000] +0xF3ED U+6899 # [2000] +0xF3EE U+689A # [2000] +0xF3EF U+689C # [2000] +0xF3F0 U+68AA # [2000] +0xF3F1 U+68AB # [2000] +0xF3F2 U+68B4 # [2000] +0xF3F3 U+68BB # [2000] +0xF3F4 U+68FB # [2000] +0xF3F5 U+234E4 # [2000] [Unicode3.1] +0xF3F6 U+2355A # [2000] [Unicode3.1] +0xF3F7 U+FA13 # CJK COMPATIBILITY IDEOGRAPH-FA13 [2000] +0xF3F8 U+68C3 # [2000] +0xF3F9 U+68C5 # [2000] +0xF3FA U+68CC # [2000] +0xF3FB U+68CF # [2000] +0xF3FC U+68D6 # [2000] +0xF440 U+68D9 # [2000] +0xF441 U+68E4 # [2000] +0xF442 U+68E5 # [2000] +0xF443 U+68EC # [2000] +0xF444 U+68F7 # [2000] +0xF445 U+6903 # [2000] +0xF446 U+6907 # [2000] +0xF447 U+3B87 # [2000] +0xF448 U+3B88 # [2000] +0xF449 U+23594 # [2000] [Unicode3.1] +0xF44A U+693B # [2000] +0xF44B U+3B8D # [2000] +0xF44C U+6946 # [2000] +0xF44D U+6969 # [2000] +0xF44E U+696C # [2000] +0xF44F U+6972 # [2000] +0xF450 U+697A # [2000] +0xF451 U+697F # [2000] +0xF452 U+6992 # [2000] +0xF453 U+3BA4 # [2000] +0xF454 U+6996 # [2000] +0xF455 U+6998 # [2000] +0xF456 U+69A6 # [2000] +0xF457 U+69B0 # [2000] +0xF458 U+69B7 # [2000] +0xF459 U+69BA # [2000] +0xF45A U+69BC # [2000] +0xF45B U+69C0 # [2000] +0xF45C U+69D1 # [2000] +0xF45D U+69D6 # [2000] +0xF45E U+23639 # [2000] [Unicode3.1] +0xF45F U+23647 # [2000] [Unicode3.1] +0xF460 U+6A30 # [2000] +0xF461 U+23638 # [2000] [Unicode3.1] +0xF462 U+2363A # [2000] [Unicode3.1] +0xF463 U+69E3 # [2000] +0xF464 U+69EE # [2000] +0xF465 U+69EF # [2000] +0xF466 U+69F3 # [2000] +0xF467 U+3BCD # [2000] +0xF468 U+69F4 # [2000] +0xF469 U+69FE # [2000] +0xF46A U+6A11 # [2000] +0xF46B U+6A1A # [2000] +0xF46C U+6A1D # [2000] +0xF46D U+2371C # [2000] [Unicode3.1] +0xF46E U+6A32 # [2000] +0xF46F U+6A33 # [2000] +0xF470 U+6A34 # [2000] +0xF471 U+6A3F # [2000] +0xF472 U+6A46 # [2000] +0xF473 U+6A49 # [2000] +0xF474 U+6A7A # [2000] +0xF475 U+6A4E # [2000] +0xF476 U+6A52 # [2000] +0xF477 U+6A64 # [2000] +0xF478 U+2370C # [2000] [Unicode3.1] +0xF479 U+6A7E # [2000] +0xF47A U+6A83 # [2000] +0xF47B U+6A8B # [2000] +0xF47C U+3BF0 # [2000] +0xF47D U+6A91 # [2000] +0xF47E U+6A9F # [2000] +0xF480 U+6AA1 # [2000] +0xF481 U+23764 # [2000] [Unicode3.1] +0xF482 U+6AAB # [2000] +0xF483 U+6ABD # [2000] +0xF484 U+6AC6 # [2000] +0xF485 U+6AD4 # [2000] +0xF486 U+6AD0 # [2000] +0xF487 U+6ADC # [2000] +0xF488 U+6ADD # [2000] +0xF489 U+237FF # [2000] [Unicode3.1] +0xF48A U+237E7 # [2000] [Unicode3.1] +0xF48B U+6AEC # [2000] +0xF48C U+6AF1 # [2000] +0xF48D U+6AF2 # [2000] +0xF48E U+6AF3 # [2000] +0xF48F U+6AFD # [2000] +0xF490 U+23824 # [2000] [Unicode3.1] +0xF491 U+6B0B # [2000] +0xF492 U+6B0F # [2000] +0xF493 U+6B10 # [2000] +0xF494 U+6B11 # [2000] +0xF495 U+2383D # [2000] [Unicode3.1] +0xF496 U+6B17 # [2000] +0xF497 U+3C26 # [2000] +0xF498 U+6B2F # [2000] +0xF499 U+6B4A # [2000] +0xF49A U+6B58 # [2000] +0xF49B U+6B6C # [2000] +0xF49C U+6B75 # [2000] +0xF49D U+6B7A # [2000] +0xF49E U+6B81 # [2000] +0xF49F U+6B9B # [2000] +0xF4A0 U+6BAE # [2000] +0xF4A1 U+23A98 # [2000] [Unicode3.1] +0xF4A2 U+6BBD # [2000] +0xF4A3 U+6BBE # [2000] +0xF4A4 U+6BC7 # [2000] +0xF4A5 U+6BC8 # [2000] +0xF4A6 U+6BC9 # [2000] +0xF4A7 U+6BDA # [2000] +0xF4A8 U+6BE6 # [2000] +0xF4A9 U+6BE7 # [2000] +0xF4AA U+6BEE # [2000] +0xF4AB U+6BF1 # [2000] +0xF4AC U+6C02 # [2000] +0xF4AD U+6C0A # [2000] +0xF4AE U+6C0E # [2000] +0xF4AF U+6C35 # [2000] +0xF4B0 U+6C36 # [2000] +0xF4B1 U+6C3A # [2000] +0xF4B2 U+23C7F # [2000] [Unicode3.1] +0xF4B3 U+6C3F # [2000] +0xF4B4 U+6C4D # [2000] +0xF4B5 U+6C5B # [2000] +0xF4B6 U+6C6D # [2000] +0xF4B7 U+6C84 # [2000] +0xF4B8 U+6C89 # [2000] +0xF4B9 U+3CC3 # [2000] +0xF4BA U+6C94 # [2000] +0xF4BB U+6C95 # [2000] +0xF4BC U+6C97 # [2000] +0xF4BD U+6CAD # [2000] +0xF4BE U+6CC2 # [2000] +0xF4BF U+6CD0 # [2000] +0xF4C0 U+3CD2 # [2000] +0xF4C1 U+6CD6 # [2000] +0xF4C2 U+6CDA # [2000] +0xF4C3 U+6CDC # [2000] +0xF4C4 U+6CE9 # [2000] +0xF4C5 U+6CEC # [2000] +0xF4C6 U+6CED # [2000] +0xF4C7 U+23D00 # [2000] [Unicode3.1] +0xF4C8 U+6D00 # [2000] +0xF4C9 U+6D0A # [2000] +0xF4CA U+6D24 # [2000] +0xF4CB U+6D26 # [2000] +0xF4CC U+6D27 # [2000] +0xF4CD U+6C67 # [2000] +0xF4CE U+6D2F # [2000] +0xF4CF U+6D3C # [2000] +0xF4D0 U+6D5B # [2000] +0xF4D1 U+6D5E # [2000] +0xF4D2 U+6D60 # [2000] +0xF4D3 U+6D70 # [2000] +0xF4D4 U+6D80 # [2000] +0xF4D5 U+6D81 # [2000] +0xF4D6 U+6D8A # [2000] +0xF4D7 U+6D8D # [2000] +0xF4D8 U+6D91 # [2000] +0xF4D9 U+6D98 # [2000] +0xF4DA U+23D40 # [2000] [Unicode3.1] +0xF4DB U+6E17 # [2000] +0xF4DC U+23DFA # [2000] [Unicode3.1] +0xF4DD U+23DF9 # [2000] [Unicode3.1] +0xF4DE U+23DD3 # [2000] [Unicode3.1] +0xF4DF U+6DAB # [2000] +0xF4E0 U+6DAE # [2000] +0xF4E1 U+6DB4 # [2000] +0xF4E2 U+6DC2 # [2000] +0xF4E3 U+6D34 # [2000] +0xF4E4 U+6DC8 # [2000] +0xF4E5 U+6DCE # [2000] +0xF4E6 U+6DCF # [2000] +0xF4E7 U+6DD0 # [2000] +0xF4E8 U+6DDF # [2000] +0xF4E9 U+6DE9 # [2000] +0xF4EA U+6DF6 # [2000] +0xF4EB U+6E36 # [2000] +0xF4EC U+6E1E # [2000] +0xF4ED U+6E22 # [2000] +0xF4EE U+6E27 # [2000] +0xF4EF U+3D11 # [2000] +0xF4F0 U+6E32 # [2000] +0xF4F1 U+6E3C # [2000] +0xF4F2 U+6E48 # [2000] +0xF4F3 U+6E49 # [2000] +0xF4F4 U+6E4B # [2000] +0xF4F5 U+6E4C # [2000] +0xF4F6 U+6E4F # [2000] +0xF4F7 U+6E51 # [2000] +0xF4F8 U+6E53 # [2000] +0xF4F9 U+6E54 # [2000] +0xF4FA U+6E57 # [2000] +0xF4FB U+6E63 # [2000] +0xF4FC U+3D1E # [2000] +0xF540 U+6E93 # [2000] +0xF541 U+6EA7 # [2000] +0xF542 U+6EB4 # [2000] +0xF543 U+6EBF # [2000] +0xF544 U+6EC3 # [2000] +0xF545 U+6ECA # [2000] +0xF546 U+6ED9 # [2000] +0xF547 U+6F35 # [2000] +0xF548 U+6EEB # [2000] +0xF549 U+6EF9 # [2000] +0xF54A U+6EFB # [2000] +0xF54B U+6F0A # [2000] +0xF54C U+6F0C # [2000] +0xF54D U+6F18 # [2000] +0xF54E U+6F25 # [2000] +0xF54F U+6F36 # [2000] +0xF550 U+6F3C # [2000] +0xF551 U+23F7E # [2000] [Unicode3.1] +0xF552 U+6F52 # [2000] +0xF553 U+6F57 # [2000] +0xF554 U+6F5A # [2000] +0xF555 U+6F60 # [2000] +0xF556 U+6F68 # [2000] +0xF557 U+6F98 # [2000] +0xF558 U+6F7D # [2000] +0xF559 U+6F90 # [2000] +0xF55A U+6F96 # [2000] +0xF55B U+6FBE # [2000] +0xF55C U+6F9F # [2000] +0xF55D U+6FA5 # [2000] +0xF55E U+6FAF # [2000] +0xF55F U+3D64 # [2000] +0xF560 U+6FB5 # [2000] +0xF561 U+6FC8 # [2000] +0xF562 U+6FC9 # [2000] +0xF563 U+6FDA # [2000] +0xF564 U+6FDE # [2000] +0xF565 U+6FE9 # [2000] +0xF566 U+24096 # [2000] [Unicode3.1] +0xF567 U+6FFC # [2000] +0xF568 U+7000 # [2000] +0xF569 U+7007 # [2000] +0xF56A U+700A # [2000] +0xF56B U+7023 # [2000] +0xF56C U+24103 # [2000] [Unicode3.1] +0xF56D U+7039 # [2000] +0xF56E U+703A # [2000] +0xF56F U+703C # [2000] +0xF570 U+7043 # [2000] +0xF571 U+7047 # [2000] +0xF572 U+704B # [2000] +0xF573 U+3D9A # [2000] +0xF574 U+7054 # [2000] +0xF575 U+7065 # [2000] +0xF576 U+7069 # [2000] +0xF577 U+706C # [2000] +0xF578 U+706E # [2000] +0xF579 U+7076 # [2000] +0xF57A U+707E # [2000] +0xF57B U+7081 # [2000] +0xF57C U+7086 # [2000] +0xF57D U+7095 # [2000] +0xF57E U+7097 # [2000] +0xF580 U+70BB # [2000] +0xF581 U+241C6 # [2000] [Unicode3.1] +0xF582 U+709F # [2000] +0xF583 U+70B1 # [2000] +0xF584 U+241FE # [2000] [Unicode3.1] +0xF585 U+70EC # [2000] +0xF586 U+70CA # [2000] +0xF587 U+70D1 # [2000] +0xF588 U+70D3 # [2000] +0xF589 U+70DC # [2000] +0xF58A U+7103 # [2000] +0xF58B U+7104 # [2000] +0xF58C U+7106 # [2000] +0xF58D U+7107 # [2000] +0xF58E U+7108 # [2000] +0xF58F U+710C # [2000] +0xF590 U+3DC0 # [2000] +0xF591 U+712F # [2000] +0xF592 U+7131 # [2000] +0xF593 U+7150 # [2000] +0xF594 U+714A # [2000] +0xF595 U+7153 # [2000] +0xF596 U+715E # [2000] +0xF597 U+3DD4 # [2000] +0xF598 U+7196 # [2000] +0xF599 U+7180 # [2000] +0xF59A U+719B # [2000] +0xF59B U+71A0 # [2000] +0xF59C U+71A2 # [2000] +0xF59D U+71AE # [2000] +0xF59E U+71AF # [2000] +0xF59F U+71B3 # [2000] +0xF5A0 U+243BC # [2000] [Unicode3.1] +0xF5A1 U+71CB # [2000] +0xF5A2 U+71D3 # [2000] +0xF5A3 U+71D9 # [2000] +0xF5A4 U+71DC # [2000] +0xF5A5 U+7207 # [2000] +0xF5A6 U+3E05 # [2000] +0xF5A7 U+FA49 # CJK COMPATIBILITY IDEOGRAPH-FA49 [2000] [Unicode3.2] +0xF5A8 U+722B # [2000] +0xF5A9 U+7234 # [2000] +0xF5AA U+7238 # [2000] +0xF5AB U+7239 # [2000] +0xF5AC U+4E2C # [2000] +0xF5AD U+7242 # [2000] +0xF5AE U+7253 # [2000] +0xF5AF U+7257 # [2000] +0xF5B0 U+7263 # [2000] +0xF5B1 U+24629 # [2000] [Unicode3.1] +0xF5B2 U+726E # [2000] +0xF5B3 U+726F # [2000] +0xF5B4 U+7278 # [2000] +0xF5B5 U+727F # [2000] +0xF5B6 U+728E # [2000] +0xF5B7 U+246A5 # [2000] [Unicode3.1] +0xF5B8 U+72AD # [2000] +0xF5B9 U+72AE # [2000] +0xF5BA U+72B0 # [2000] +0xF5BB U+72B1 # [2000] +0xF5BC U+72C1 # [2000] +0xF5BD U+3E60 # [2000] +0xF5BE U+72CC # [2000] +0xF5BF U+3E66 # [2000] +0xF5C0 U+3E68 # [2000] +0xF5C1 U+72F3 # [2000] +0xF5C2 U+72FA # [2000] +0xF5C3 U+7307 # [2000] +0xF5C4 U+7312 # [2000] +0xF5C5 U+7318 # [2000] +0xF5C6 U+7319 # [2000] +0xF5C7 U+3E83 # [2000] +0xF5C8 U+7339 # [2000] +0xF5C9 U+732C # [2000] +0xF5CA U+7331 # [2000] +0xF5CB U+7333 # [2000] +0xF5CC U+733D # [2000] +0xF5CD U+7352 # [2000] +0xF5CE U+3E94 # [2000] +0xF5CF U+736B # [2000] +0xF5D0 U+736C # [2000] +0xF5D1 U+24896 # [2000] [Unicode3.1] +0xF5D2 U+736E # [2000] +0xF5D3 U+736F # [2000] +0xF5D4 U+7371 # [2000] +0xF5D5 U+7377 # [2000] +0xF5D6 U+7381 # [2000] +0xF5D7 U+7385 # [2000] +0xF5D8 U+738A # [2000] +0xF5D9 U+7394 # [2000] +0xF5DA U+7398 # [2000] +0xF5DB U+739C # [2000] +0xF5DC U+739E # [2000] +0xF5DD U+73A5 # [2000] +0xF5DE U+73A8 # [2000] +0xF5DF U+73B5 # [2000] +0xF5E0 U+73B7 # [2000] +0xF5E1 U+73B9 # [2000] +0xF5E2 U+73BC # [2000] +0xF5E3 U+73BF # [2000] +0xF5E4 U+73C5 # [2000] +0xF5E5 U+73CB # [2000] +0xF5E6 U+73E1 # [2000] +0xF5E7 U+73E7 # [2000] +0xF5E8 U+73F9 # [2000] +0xF5E9 U+7413 # [2000] +0xF5EA U+73FA # [2000] +0xF5EB U+7401 # [2000] +0xF5EC U+7424 # [2000] +0xF5ED U+7431 # [2000] +0xF5EE U+7439 # [2000] +0xF5EF U+7453 # [2000] +0xF5F0 U+7440 # [2000] +0xF5F1 U+7443 # [2000] +0xF5F2 U+744D # [2000] +0xF5F3 U+7452 # [2000] +0xF5F4 U+745D # [2000] +0xF5F5 U+7471 # [2000] +0xF5F6 U+7481 # [2000] +0xF5F7 U+7485 # [2000] +0xF5F8 U+7488 # [2000] +0xF5F9 U+24A4D # [2000] [Unicode3.1] +0xF5FA U+7492 # [2000] +0xF5FB U+7497 # [2000] +0xF5FC U+7499 # [2000] +0xF640 U+74A0 # [2000] +0xF641 U+74A1 # [2000] +0xF642 U+74A5 # [2000] +0xF643 U+74AA # [2000] +0xF644 U+74AB # [2000] +0xF645 U+74B9 # [2000] +0xF646 U+74BB # [2000] +0xF647 U+74BA # [2000] +0xF648 U+74D6 # [2000] +0xF649 U+74D8 # [2000] +0xF64A U+74DE # [2000] +0xF64B U+74EF # [2000] +0xF64C U+74EB # [2000] +0xF64D U+24B56 # [2000] [Unicode3.1] +0xF64E U+74FA # [2000] +0xF64F U+24B6F # [2000] [Unicode3.1] +0xF650 U+7520 # [2000] +0xF651 U+7524 # [2000] +0xF652 U+752A # [2000] +0xF653 U+3F57 # [2000] +0xF654 U+24C16 # [2000] [Unicode3.1] +0xF655 U+753D # [2000] +0xF656 U+753E # [2000] +0xF657 U+7540 # [2000] +0xF658 U+7548 # [2000] +0xF659 U+754E # [2000] +0xF65A U+7550 # [2000] +0xF65B U+7552 # [2000] +0xF65C U+756C # [2000] +0xF65D U+7572 # [2000] +0xF65E U+7571 # [2000] +0xF65F U+757A # [2000] +0xF660 U+757D # [2000] +0xF661 U+757E # [2000] +0xF662 U+7581 # [2000] +0xF663 U+24D14 # [2000] [Unicode3.1] +0xF664 U+758C # [2000] +0xF665 U+3F75 # [2000] +0xF666 U+75A2 # [2000] +0xF667 U+3F77 # [2000] +0xF668 U+75B0 # [2000] +0xF669 U+75B7 # [2000] +0xF66A U+75BF # [2000] +0xF66B U+75C0 # [2000] +0xF66C U+75C6 # [2000] +0xF66D U+75CF # [2000] +0xF66E U+75D3 # [2000] +0xF66F U+75DD # [2000] +0xF670 U+75DF # [2000] +0xF671 U+75E0 # [2000] +0xF672 U+75E7 # [2000] +0xF673 U+75EC # [2000] +0xF674 U+75EE # [2000] +0xF675 U+75F1 # [2000] +0xF676 U+75F9 # [2000] +0xF677 U+7603 # [2000] +0xF678 U+7618 # [2000] +0xF679 U+7607 # [2000] +0xF67A U+760F # [2000] +0xF67B U+3FAE # [2000] +0xF67C U+24E0E # [2000] [Unicode3.1] +0xF67D U+7613 # [2000] +0xF67E U+761B # [2000] +0xF680 U+761C # [2000] +0xF681 U+24E37 # [2000] [Unicode3.1] +0xF682 U+7625 # [2000] +0xF683 U+7628 # [2000] +0xF684 U+763C # [2000] +0xF685 U+7633 # [2000] +0xF686 U+24E6A # [2000] [Unicode3.1] +0xF687 U+3FC9 # [2000] +0xF688 U+7641 # [2000] +0xF689 U+24E8B # [2000] [Unicode3.1] +0xF68A U+7649 # [2000] +0xF68B U+7655 # [2000] +0xF68C U+3FD7 # [2000] +0xF68D U+766E # [2000] +0xF68E U+7695 # [2000] +0xF68F U+769C # [2000] +0xF690 U+76A1 # [2000] +0xF691 U+76A0 # [2000] +0xF692 U+76A7 # [2000] +0xF693 U+76A8 # [2000] +0xF694 U+76AF # [2000] +0xF695 U+2504A # [2000] [Unicode3.1] +0xF696 U+76C9 # [2000] +0xF697 U+25055 # [2000] [Unicode3.1] +0xF698 U+76E8 # [2000] +0xF699 U+76EC # [2000] +0xF69A U+25122 # [2000] [Unicode3.1] +0xF69B U+7717 # [2000] +0xF69C U+771A # [2000] +0xF69D U+772D # [2000] +0xF69E U+7735 # [2000] +0xF69F U+251A9 # [2000] [Unicode3.1] +0xF6A0 U+4039 # [2000] +0xF6A1 U+251E5 # [2000] [Unicode3.1] +0xF6A2 U+251CD # [2000] [Unicode3.1] +0xF6A3 U+7758 # [2000] +0xF6A4 U+7760 # [2000] +0xF6A5 U+776A # [2000] +0xF6A6 U+2521E # [2000] [Unicode3.1] +0xF6A7 U+7772 # [2000] +0xF6A8 U+777C # [2000] +0xF6A9 U+777D # [2000] +0xF6AA U+2524C # [2000] [Unicode3.1] +0xF6AB U+4058 # [2000] +0xF6AC U+779A # [2000] +0xF6AD U+779F # [2000] +0xF6AE U+77A2 # [2000] +0xF6AF U+77A4 # [2000] +0xF6B0 U+77A9 # [2000] +0xF6B1 U+77DE # [2000] +0xF6B2 U+77DF # [2000] +0xF6B3 U+77E4 # [2000] +0xF6B4 U+77E6 # [2000] +0xF6B5 U+77EA # [2000] +0xF6B6 U+77EC # [2000] +0xF6B7 U+4093 # [2000] +0xF6B8 U+77F0 # [2000] +0xF6B9 U+77F4 # [2000] +0xF6BA U+77FB # [2000] +0xF6BB U+2542E # [2000] [Unicode3.1] +0xF6BC U+7805 # [2000] +0xF6BD U+7806 # [2000] +0xF6BE U+7809 # [2000] +0xF6BF U+780D # [2000] +0xF6C0 U+7819 # [2000] +0xF6C1 U+7821 # [2000] +0xF6C2 U+782C # [2000] +0xF6C3 U+7847 # [2000] +0xF6C4 U+7864 # [2000] +0xF6C5 U+786A # [2000] +0xF6C6 U+254D9 # [2000] [Unicode3.1] +0xF6C7 U+788A # [2000] +0xF6C8 U+7894 # [2000] +0xF6C9 U+78A4 # [2000] +0xF6CA U+789D # [2000] +0xF6CB U+789E # [2000] +0xF6CC U+789F # [2000] +0xF6CD U+78BB # [2000] +0xF6CE U+78C8 # [2000] +0xF6CF U+78CC # [2000] +0xF6D0 U+78CE # [2000] +0xF6D1 U+78D5 # [2000] +0xF6D2 U+78E0 # [2000] +0xF6D3 U+78E1 # [2000] +0xF6D4 U+78E6 # [2000] +0xF6D5 U+78F9 # [2000] +0xF6D6 U+78FA # [2000] +0xF6D7 U+78FB # [2000] +0xF6D8 U+78FE # [2000] +0xF6D9 U+255A7 # [2000] [Unicode3.1] +0xF6DA U+7910 # [2000] +0xF6DB U+791B # [2000] +0xF6DC U+7930 # [2000] +0xF6DD U+7925 # [2000] +0xF6DE U+793B # [2000] +0xF6DF U+794A # [2000] +0xF6E0 U+7958 # [2000] +0xF6E1 U+795B # [2000] +0xF6E2 U+4105 # [2000] +0xF6E3 U+7967 # [2000] +0xF6E4 U+7972 # [2000] +0xF6E5 U+7994 # [2000] +0xF6E6 U+7995 # [2000] +0xF6E7 U+7996 # [2000] +0xF6E8 U+799B # [2000] +0xF6E9 U+79A1 # [2000] +0xF6EA U+79A9 # [2000] +0xF6EB U+79B4 # [2000] +0xF6EC U+79BB # [2000] +0xF6ED U+79C2 # [2000] +0xF6EE U+79C7 # [2000] +0xF6EF U+79CC # [2000] +0xF6F0 U+79CD # [2000] +0xF6F1 U+79D6 # [2000] +0xF6F2 U+4148 # [2000] +0xF6F3 U+257A9 # [2000] [Unicode3.1] +0xF6F4 U+257B4 # [2000] [Unicode3.1] +0xF6F5 U+414F # [2000] +0xF6F6 U+7A0A # [2000] +0xF6F7 U+7A11 # [2000] +0xF6F8 U+7A15 # [2000] +0xF6F9 U+7A1B # [2000] +0xF6FA U+7A1E # [2000] +0xF6FB U+4163 # [2000] +0xF6FC U+7A2D # [2000] +0xF740 U+7A38 # [2000] +0xF741 U+7A47 # [2000] +0xF742 U+7A4C # [2000] +0xF743 U+7A56 # [2000] +0xF744 U+7A59 # [2000] +0xF745 U+7A5C # [2000] +0xF746 U+7A5F # [2000] +0xF747 U+7A60 # [2000] +0xF748 U+7A67 # [2000] +0xF749 U+7A6A # [2000] +0xF74A U+7A75 # [2000] +0xF74B U+7A78 # [2000] +0xF74C U+7A82 # [2000] +0xF74D U+7A8A # [2000] +0xF74E U+7A90 # [2000] +0xF74F U+7AA3 # [2000] +0xF750 U+7AAC # [2000] +0xF751 U+259D4 # [2000] [Unicode3.1] +0xF752 U+41B4 # [2000] +0xF753 U+7AB9 # [2000] +0xF754 U+7ABC # [2000] +0xF755 U+7ABE # [2000] +0xF756 U+41BF # [2000] +0xF757 U+7ACC # [2000] +0xF758 U+7AD1 # [2000] +0xF759 U+7AE7 # [2000] +0xF75A U+7AE8 # [2000] +0xF75B U+7AF4 # [2000] +0xF75C U+25AE4 # [2000] [Unicode3.1] +0xF75D U+25AE3 # [2000] [Unicode3.1] +0xF75E U+7B07 # [2000] +0xF75F U+25AF1 # [2000] [Unicode3.1] +0xF760 U+7B3D # [2000] +0xF761 U+7B27 # [2000] +0xF762 U+7B2A # [2000] +0xF763 U+7B2E # [2000] +0xF764 U+7B2F # [2000] +0xF765 U+7B31 # [2000] +0xF766 U+41E6 # [2000] +0xF767 U+41F3 # [2000] +0xF768 U+7B7F # [2000] +0xF769 U+7B41 # [2000] +0xF76A U+41EE # [2000] +0xF76B U+7B55 # [2000] +0xF76C U+7B79 # [2000] +0xF76D U+7B64 # [2000] +0xF76E U+7B66 # [2000] +0xF76F U+7B69 # [2000] +0xF770 U+7B73 # [2000] +0xF771 U+25BB2 # [2000] [Unicode3.1] +0xF772 U+4207 # [2000] +0xF773 U+7B90 # [2000] +0xF774 U+7B91 # [2000] +0xF775 U+7B9B # [2000] +0xF776 U+420E # [2000] +0xF777 U+7BAF # [2000] +0xF778 U+7BB5 # [2000] +0xF779 U+7BBC # [2000] +0xF77A U+7BC5 # [2000] +0xF77B U+7BCA # [2000] +0xF77C U+25C4B # [2000] [Unicode3.1] +0xF77D U+25C64 # [2000] [Unicode3.1] +0xF77E U+7BD4 # [2000] +0xF780 U+7BD6 # [2000] +0xF781 U+7BDA # [2000] +0xF782 U+7BEA # [2000] +0xF783 U+7BF0 # [2000] +0xF784 U+7C03 # [2000] +0xF785 U+7C0B # [2000] +0xF786 U+7C0E # [2000] +0xF787 U+7C0F # [2000] +0xF788 U+7C26 # [2000] +0xF789 U+7C45 # [2000] +0xF78A U+7C4A # [2000] +0xF78B U+7C51 # [2000] +0xF78C U+7C57 # [2000] +0xF78D U+7C5E # [2000] +0xF78E U+7C61 # [2000] +0xF78F U+7C69 # [2000] +0xF790 U+7C6E # [2000] +0xF791 U+7C6F # [2000] +0xF792 U+7C70 # [2000] +0xF793 U+25E2E # [2000] [Unicode3.1] +0xF794 U+25E56 # [2000] [Unicode3.1] +0xF795 U+25E65 # [2000] [Unicode3.1] +0xF796 U+7CA6 # [2000] +0xF797 U+25E62 # [2000] [Unicode3.1] +0xF798 U+7CB6 # [2000] +0xF799 U+7CB7 # [2000] +0xF79A U+7CBF # [2000] +0xF79B U+25ED8 # [2000] [Unicode3.1] +0xF79C U+7CC4 # [2000] +0xF79D U+25EC2 # [2000] [Unicode3.1] +0xF79E U+7CC8 # [2000] +0xF79F U+7CCD # [2000] +0xF7A0 U+25EE8 # [2000] [Unicode3.1] +0xF7A1 U+7CD7 # [2000] +0xF7A2 U+25F23 # [2000] [Unicode3.1] +0xF7A3 U+7CE6 # [2000] +0xF7A4 U+7CEB # [2000] +0xF7A5 U+25F5C # [2000] [Unicode3.1] +0xF7A6 U+7CF5 # [2000] +0xF7A7 U+7D03 # [2000] +0xF7A8 U+7D09 # [2000] +0xF7A9 U+42C6 # [2000] +0xF7AA U+7D12 # [2000] +0xF7AB U+7D1E # [2000] +0xF7AC U+25FE0 # [2000] [Unicode3.1] +0xF7AD U+25FD4 # [2000] [Unicode3.1] +0xF7AE U+7D3D # [2000] +0xF7AF U+7D3E # [2000] +0xF7B0 U+7D40 # [2000] +0xF7B1 U+7D47 # [2000] +0xF7B2 U+2600C # [2000] [Unicode3.1] +0xF7B3 U+25FFB # [2000] [Unicode3.1] +0xF7B4 U+42D6 # [2000] +0xF7B5 U+7D59 # [2000] +0xF7B6 U+7D5A # [2000] +0xF7B7 U+7D6A # [2000] +0xF7B8 U+7D70 # [2000] +0xF7B9 U+42DD # [2000] +0xF7BA U+7D7F # [2000] +0xF7BB U+26017 # [2000] [Unicode3.1] +0xF7BC U+7D86 # [2000] +0xF7BD U+7D88 # [2000] +0xF7BE U+7D8C # [2000] +0xF7BF U+7D97 # [2000] +0xF7C0 U+26060 # [2000] [Unicode3.1] +0xF7C1 U+7D9D # [2000] +0xF7C2 U+7DA7 # [2000] +0xF7C3 U+7DAA # [2000] +0xF7C4 U+7DB6 # [2000] +0xF7C5 U+7DB7 # [2000] +0xF7C6 U+7DC0 # [2000] +0xF7C7 U+7DD7 # [2000] +0xF7C8 U+7DD9 # [2000] +0xF7C9 U+7DE6 # [2000] +0xF7CA U+7DF1 # [2000] +0xF7CB U+7DF9 # [2000] +0xF7CC U+4302 # [2000] +0xF7CD U+260ED # [2000] [Unicode3.1] +0xF7CE U+FA58 # CJK COMPATIBILITY IDEOGRAPH-FA58 [2000] [Unicode3.2] +0xF7CF U+7E10 # [2000] +0xF7D0 U+7E17 # [2000] +0xF7D1 U+7E1D # [2000] +0xF7D2 U+7E20 # [2000] +0xF7D3 U+7E27 # [2000] +0xF7D4 U+7E2C # [2000] +0xF7D5 U+7E45 # [2000] +0xF7D6 U+7E73 # [2000] +0xF7D7 U+7E75 # [2000] +0xF7D8 U+7E7E # [2000] +0xF7D9 U+7E86 # [2000] +0xF7DA U+7E87 # [2000] +0xF7DB U+432B # [2000] +0xF7DC U+7E91 # [2000] +0xF7DD U+7E98 # [2000] +0xF7DE U+7E9A # [2000] +0xF7DF U+4343 # [2000] +0xF7E0 U+7F3C # [2000] +0xF7E1 U+7F3B # [2000] +0xF7E2 U+7F3E # [2000] +0xF7E3 U+7F43 # [2000] +0xF7E4 U+7F44 # [2000] +0xF7E5 U+7F4F # [2000] +0xF7E6 U+34C1 # [2000] +0xF7E7 U+26270 # [2000] [Unicode3.1] +0xF7E8 U+7F52 # [2000] +0xF7E9 U+26286 # [2000] [Unicode3.1] +0xF7EA U+7F61 # [2000] +0xF7EB U+7F63 # [2000] +0xF7EC U+7F64 # [2000] +0xF7ED U+7F6D # [2000] +0xF7EE U+7F7D # [2000] +0xF7EF U+7F7E # [2000] +0xF7F0 U+2634C # [2000] [Unicode3.1] +0xF7F1 U+7F90 # [2000] +0xF7F2 U+517B # [2000] +0xF7F3 U+23D0E # [2000] [Unicode3.1] +0xF7F4 U+7F96 # [2000] +0xF7F5 U+7F9C # [2000] +0xF7F6 U+7FAD # [2000] +0xF7F7 U+26402 # [2000] [Unicode3.1] +0xF7F8 U+7FC3 # [2000] +0xF7F9 U+7FCF # [2000] +0xF7FA U+7FE3 # [2000] +0xF7FB U+7FE5 # [2000] +0xF7FC U+7FEF # [2000] +0xF840 U+7FF2 # [2000] +0xF841 U+8002 # [2000] +0xF842 U+800A # [2000] +0xF843 U+8008 # [2000] +0xF844 U+800E # [2000] +0xF845 U+8011 # [2000] +0xF846 U+8016 # [2000] +0xF847 U+8024 # [2000] +0xF848 U+802C # [2000] +0xF849 U+8030 # [2000] +0xF84A U+8043 # [2000] +0xF84B U+8066 # [2000] +0xF84C U+8071 # [2000] +0xF84D U+8075 # [2000] +0xF84E U+807B # [2000] +0xF84F U+8099 # [2000] +0xF850 U+809C # [2000] +0xF851 U+80A4 # [2000] +0xF852 U+80A7 # [2000] +0xF853 U+80B8 # [2000] +0xF854 U+2667E # [2000] [Unicode3.1] +0xF855 U+80C5 # [2000] +0xF856 U+80D5 # [2000] +0xF857 U+80D8 # [2000] +0xF858 U+80E6 # [2000] +0xF859 U+266B0 # [2000] [Unicode3.1] +0xF85A U+810D # [2000] +0xF85B U+80F5 # [2000] +0xF85C U+80FB # [2000] +0xF85D U+43EE # [2000] +0xF85E U+8135 # [2000] +0xF85F U+8116 # [2000] +0xF860 U+811E # [2000] +0xF861 U+43F0 # [2000] +0xF862 U+8124 # [2000] +0xF863 U+8127 # [2000] +0xF864 U+812C # [2000] +0xF865 U+2671D # [2000] [Unicode3.1] +0xF866 U+813D # [2000] +0xF867 U+4408 # [2000] +0xF868 U+8169 # [2000] +0xF869 U+4417 # [2000] +0xF86A U+8181 # [2000] +0xF86B U+441C # [2000] +0xF86C U+8184 # [2000] +0xF86D U+8185 # [2000] +0xF86E U+4422 # [2000] +0xF86F U+8198 # [2000] +0xF870 U+81B2 # [2000] +0xF871 U+81C1 # [2000] +0xF872 U+81C3 # [2000] +0xF873 U+81D6 # [2000] +0xF874 U+81DB # [2000] +0xF875 U+268DD # [2000] [Unicode3.1] +0xF876 U+81E4 # [2000] +0xF877 U+268EA # [2000] [Unicode3.1] +0xF878 U+81EC # [2000] +0xF879 U+26951 # [2000] [Unicode3.1] +0xF87A U+81FD # [2000] +0xF87B U+81FF # [2000] +0xF87C U+2696F # [2000] [Unicode3.1] +0xF87D U+8204 # [2000] +0xF87E U+269DD # [2000] [Unicode3.1] +0xF880 U+8219 # [2000] +0xF881 U+8221 # [2000] +0xF882 U+8222 # [2000] +0xF883 U+26A1E # [2000] [Unicode3.1] +0xF884 U+8232 # [2000] +0xF885 U+8234 # [2000] +0xF886 U+823C # [2000] +0xF887 U+8246 # [2000] +0xF888 U+8249 # [2000] +0xF889 U+8245 # [2000] +0xF88A U+26A58 # [2000] [Unicode3.1] +0xF88B U+824B # [2000] +0xF88C U+4476 # [2000] +0xF88D U+824F # [2000] +0xF88E U+447A # [2000] +0xF88F U+8257 # [2000] +0xF890 U+26A8C # [2000] [Unicode3.1] +0xF891 U+825C # [2000] +0xF892 U+8263 # [2000] +0xF893 U+26AB7 # [2000] [Unicode3.1] +0xF894 U+FA5D # CJK COMPATIBILITY IDEOGRAPH-FA5D [2000] [Unicode3.2] +0xF895 U+FA5E # CJK COMPATIBILITY IDEOGRAPH-FA5E [2000] [Unicode3.2] +0xF896 U+8279 # [2000] +0xF897 U+4491 # [2000] +0xF898 U+827D # [2000] +0xF899 U+827F # [2000] +0xF89A U+8283 # [2000] +0xF89B U+828A # [2000] +0xF89C U+8293 # [2000] +0xF89D U+82A7 # [2000] +0xF89E U+82A8 # [2000] +0xF89F U+82B2 # [2000] +0xF8A0 U+82B4 # [2000] +0xF8A1 U+82BA # [2000] +0xF8A2 U+82BC # [2000] +0xF8A3 U+82E2 # [2000] +0xF8A4 U+82E8 # [2000] +0xF8A5 U+82F7 # [2000] +0xF8A6 U+8307 # [2000] +0xF8A7 U+8308 # [2000] +0xF8A8 U+830C # [2000] +0xF8A9 U+8354 # [2000] +0xF8AA U+831B # [2000] +0xF8AB U+831D # [2000] +0xF8AC U+8330 # [2000] +0xF8AD U+833C # [2000] +0xF8AE U+8344 # [2000] +0xF8AF U+8357 # [2000] +0xF8B0 U+44BE # [2000] +0xF8B1 U+837F # [2000] +0xF8B2 U+44D4 # [2000] +0xF8B3 U+44B3 # [2000] +0xF8B4 U+838D # [2000] +0xF8B5 U+8394 # [2000] +0xF8B6 U+8395 # [2000] +0xF8B7 U+839B # [2000] +0xF8B8 U+839D # [2000] +0xF8B9 U+83C9 # [2000] +0xF8BA U+83D0 # [2000] +0xF8BB U+83D4 # [2000] +0xF8BC U+83DD # [2000] +0xF8BD U+83E5 # [2000] +0xF8BE U+83F9 # [2000] +0xF8BF U+840F # [2000] +0xF8C0 U+8411 # [2000] +0xF8C1 U+8415 # [2000] +0xF8C2 U+26C73 # [2000] [Unicode3.1] +0xF8C3 U+8417 # [2000] +0xF8C4 U+8439 # [2000] +0xF8C5 U+844A # [2000] +0xF8C6 U+844F # [2000] +0xF8C7 U+8451 # [2000] +0xF8C8 U+8452 # [2000] +0xF8C9 U+8459 # [2000] +0xF8CA U+845A # [2000] +0xF8CB U+845C # [2000] +0xF8CC U+26CDD # [2000] [Unicode3.1] +0xF8CD U+8465 # [2000] +0xF8CE U+8476 # [2000] +0xF8CF U+8478 # [2000] +0xF8D0 U+847C # [2000] +0xF8D1 U+8481 # [2000] +0xF8D2 U+450D # [2000] +0xF8D3 U+84DC # [2000] +0xF8D4 U+8497 # [2000] +0xF8D5 U+84A6 # [2000] +0xF8D6 U+84BE # [2000] +0xF8D7 U+4508 # [2000] +0xF8D8 U+84CE # [2000] +0xF8D9 U+84CF # [2000] +0xF8DA U+84D3 # [2000] +0xF8DB U+26E65 # [2000] [Unicode3.1] +0xF8DC U+84E7 # [2000] +0xF8DD U+84EA # [2000] +0xF8DE U+84EF # [2000] +0xF8DF U+84F0 # [2000] +0xF8E0 U+84F1 # [2000] +0xF8E1 U+84FA # [2000] +0xF8E2 U+84FD # [2000] +0xF8E3 U+850C # [2000] +0xF8E4 U+851B # [2000] +0xF8E5 U+8524 # [2000] +0xF8E6 U+8525 # [2000] +0xF8E7 U+852B # [2000] +0xF8E8 U+8534 # [2000] +0xF8E9 U+854F # [2000] +0xF8EA U+856F # [2000] +0xF8EB U+4525 # [2000] +0xF8EC U+4543 # [2000] +0xF8ED U+853E # [2000] +0xF8EE U+8551 # [2000] +0xF8EF U+8553 # [2000] +0xF8F0 U+855E # [2000] +0xF8F1 U+8561 # [2000] +0xF8F2 U+8562 # [2000] +0xF8F3 U+26F94 # [2000] [Unicode3.1] +0xF8F4 U+857B # [2000] +0xF8F5 U+857D # [2000] +0xF8F6 U+857F # [2000] +0xF8F7 U+8581 # [2000] +0xF8F8 U+8586 # [2000] +0xF8F9 U+8593 # [2000] +0xF8FA U+859D # [2000] +0xF8FB U+859F # [2000] +0xF8FC U+26FF8 # [2000] [Unicode3.1] +0xF940 U+26FF6 # [2000] [Unicode3.1] +0xF941 U+26FF7 # [2000] [Unicode3.1] +0xF942 U+85B7 # [2000] +0xF943 U+85BC # [2000] +0xF944 U+85C7 # [2000] +0xF945 U+85CA # [2000] +0xF946 U+85D8 # [2000] +0xF947 U+85D9 # [2000] +0xF948 U+85DF # [2000] +0xF949 U+85E1 # [2000] +0xF94A U+85E6 # [2000] +0xF94B U+85F6 # [2000] +0xF94C U+8600 # [2000] +0xF94D U+8611 # [2000] +0xF94E U+861E # [2000] +0xF94F U+8621 # [2000] +0xF950 U+8624 # [2000] +0xF951 U+8627 # [2000] +0xF952 U+2710D # [2000] [Unicode3.1] +0xF953 U+8639 # [2000] +0xF954 U+863C # [2000] +0xF955 U+27139 # [2000] [Unicode3.1] +0xF956 U+8640 # [2000] +0xF957 U+FA20 # CJK COMPATIBILITY IDEOGRAPH-FA20 [2000] +0xF958 U+8653 # [2000] +0xF959 U+8656 # [2000] +0xF95A U+866F # [2000] +0xF95B U+8677 # [2000] +0xF95C U+867A # [2000] +0xF95D U+8687 # [2000] +0xF95E U+8689 # [2000] +0xF95F U+868D # [2000] +0xF960 U+8691 # [2000] +0xF961 U+869C # [2000] +0xF962 U+869D # [2000] +0xF963 U+86A8 # [2000] +0xF964 U+FA21 # CJK COMPATIBILITY IDEOGRAPH-FA21 [2000] +0xF965 U+86B1 # [2000] +0xF966 U+86B3 # [2000] +0xF967 U+86C1 # [2000] +0xF968 U+86C3 # [2000] +0xF969 U+86D1 # [2000] +0xF96A U+86D5 # [2000] +0xF96B U+86D7 # [2000] +0xF96C U+86E3 # [2000] +0xF96D U+86E6 # [2000] +0xF96E U+45B8 # [2000] +0xF96F U+8705 # [2000] +0xF970 U+8707 # [2000] +0xF971 U+870E # [2000] +0xF972 U+8710 # [2000] +0xF973 U+8713 # [2000] +0xF974 U+8719 # [2000] +0xF975 U+871F # [2000] +0xF976 U+8721 # [2000] +0xF977 U+8723 # [2000] +0xF978 U+8731 # [2000] +0xF979 U+873A # [2000] +0xF97A U+873E # [2000] +0xF97B U+8740 # [2000] +0xF97C U+8743 # [2000] +0xF97D U+8751 # [2000] +0xF97E U+8758 # [2000] +0xF980 U+8764 # [2000] +0xF981 U+8765 # [2000] +0xF982 U+8772 # [2000] +0xF983 U+877C # [2000] +0xF984 U+273DB # [2000] [Unicode3.1] +0xF985 U+273DA # [2000] [Unicode3.1] +0xF986 U+87A7 # [2000] +0xF987 U+8789 # [2000] +0xF988 U+878B # [2000] +0xF989 U+8793 # [2000] +0xF98A U+87A0 # [2000] +0xF98B U+273FE # [2000] [Unicode3.1] +0xF98C U+45E5 # [2000] +0xF98D U+87BE # [2000] +0xF98E U+27410 # [2000] [Unicode3.1] +0xF98F U+87C1 # [2000] +0xF990 U+87CE # [2000] +0xF991 U+87F5 # [2000] +0xF992 U+87DF # [2000] +0xF993 U+27449 # [2000] [Unicode3.1] +0xF994 U+87E3 # [2000] +0xF995 U+87E5 # [2000] +0xF996 U+87E6 # [2000] +0xF997 U+87EA # [2000] +0xF998 U+87EB # [2000] +0xF999 U+87ED # [2000] +0xF99A U+8801 # [2000] +0xF99B U+8803 # [2000] +0xF99C U+880B # [2000] +0xF99D U+8813 # [2000] +0xF99E U+8828 # [2000] +0xF99F U+882E # [2000] +0xF9A0 U+8832 # [2000] +0xF9A1 U+883C # [2000] +0xF9A2 U+460F # [2000] +0xF9A3 U+884A # [2000] +0xF9A4 U+8858 # [2000] +0xF9A5 U+885F # [2000] +0xF9A6 U+8864 # [2000] +0xF9A7 U+27615 # [2000] [Unicode3.1] +0xF9A8 U+27614 # [2000] [Unicode3.1] +0xF9A9 U+8869 # [2000] +0xF9AA U+27631 # [2000] [Unicode3.1] +0xF9AB U+886F # [2000] +0xF9AC U+88A0 # [2000] +0xF9AD U+88BC # [2000] +0xF9AE U+88BD # [2000] +0xF9AF U+88BE # [2000] +0xF9B0 U+88C0 # [2000] +0xF9B1 U+88D2 # [2000] +0xF9B2 U+27693 # [2000] [Unicode3.1] +0xF9B3 U+88D1 # [2000] +0xF9B4 U+88D3 # [2000] +0xF9B5 U+88DB # [2000] +0xF9B6 U+88F0 # [2000] +0xF9B7 U+88F1 # [2000] +0xF9B8 U+4641 # [2000] +0xF9B9 U+8901 # [2000] +0xF9BA U+2770E # [2000] [Unicode3.1] +0xF9BB U+8937 # [2000] +0xF9BC U+27723 # [2000] [Unicode3.1] +0xF9BD U+8942 # [2000] +0xF9BE U+8945 # [2000] +0xF9BF U+8949 # [2000] +0xF9C0 U+27752 # [2000] [Unicode3.1] +0xF9C1 U+4665 # [2000] +0xF9C2 U+8962 # [2000] +0xF9C3 U+8980 # [2000] +0xF9C4 U+8989 # [2000] +0xF9C5 U+8990 # [2000] +0xF9C6 U+899F # [2000] +0xF9C7 U+89B0 # [2000] +0xF9C8 U+89B7 # [2000] +0xF9C9 U+89D6 # [2000] +0xF9CA U+89D8 # [2000] +0xF9CB U+89EB # [2000] +0xF9CC U+46A1 # [2000] +0xF9CD U+89F1 # [2000] +0xF9CE U+89F3 # [2000] +0xF9CF U+89FD # [2000] +0xF9D0 U+89FF # [2000] +0xF9D1 U+46AF # [2000] +0xF9D2 U+8A11 # [2000] +0xF9D3 U+8A14 # [2000] +0xF9D4 U+27985 # [2000] [Unicode3.1] +0xF9D5 U+8A21 # [2000] +0xF9D6 U+8A35 # [2000] +0xF9D7 U+8A3E # [2000] +0xF9D8 U+8A45 # [2000] +0xF9D9 U+8A4D # [2000] +0xF9DA U+8A58 # [2000] +0xF9DB U+8AAE # [2000] +0xF9DC U+8A90 # [2000] +0xF9DD U+8AB7 # [2000] +0xF9DE U+8ABE # [2000] +0xF9DF U+8AD7 # [2000] +0xF9E0 U+8AFC # [2000] +0xF9E1 U+27A84 # [2000] [Unicode3.1] +0xF9E2 U+8B0A # [2000] +0xF9E3 U+8B05 # [2000] +0xF9E4 U+8B0D # [2000] +0xF9E5 U+8B1C # [2000] +0xF9E6 U+8B1F # [2000] +0xF9E7 U+8B2D # [2000] +0xF9E8 U+8B43 # [2000] +0xF9E9 U+470C # [2000] +0xF9EA U+8B51 # [2000] +0xF9EB U+8B5E # [2000] +0xF9EC U+8B76 # [2000] +0xF9ED U+8B7F # [2000] +0xF9EE U+8B81 # [2000] +0xF9EF U+8B8B # [2000] +0xF9F0 U+8B94 # [2000] +0xF9F1 U+8B95 # [2000] +0xF9F2 U+8B9C # [2000] +0xF9F3 U+8B9E # [2000] +0xF9F4 U+8C39 # [2000] +0xF9F5 U+27BB3 # [2000] [Unicode3.1] +0xF9F6 U+8C3D # [2000] +0xF9F7 U+27BBE # [2000] [Unicode3.1] +0xF9F8 U+27BC7 # [2000] [Unicode3.1] +0xF9F9 U+8C45 # [2000] +0xF9FA U+8C47 # [2000] +0xF9FB U+8C4F # [2000] +0xF9FC U+8C54 # [2000] +0xFA40 U+8C57 # [2000] +0xFA41 U+8C69 # [2000] +0xFA42 U+8C6D # [2000] +0xFA43 U+8C73 # [2000] +0xFA44 U+27CB8 # [2000] [Unicode3.1] +0xFA45 U+8C93 # [2000] +0xFA46 U+8C92 # [2000] +0xFA47 U+8C99 # [2000] +0xFA48 U+4764 # [2000] +0xFA49 U+8C9B # [2000] +0xFA4A U+8CA4 # [2000] +0xFA4B U+8CD6 # [2000] +0xFA4C U+8CD5 # [2000] +0xFA4D U+8CD9 # [2000] +0xFA4E U+27DA0 # [2000] [Unicode3.1] +0xFA4F U+8CF0 # [2000] +0xFA50 U+8CF1 # [2000] +0xFA51 U+27E10 # [2000] [Unicode3.1] +0xFA52 U+8D09 # [2000] +0xFA53 U+8D0E # [2000] +0xFA54 U+8D6C # [2000] +0xFA55 U+8D84 # [2000] +0xFA56 U+8D95 # [2000] +0xFA57 U+8DA6 # [2000] +0xFA58 U+27FB7 # [2000] [Unicode3.1] +0xFA59 U+8DC6 # [2000] +0xFA5A U+8DC8 # [2000] +0xFA5B U+8DD9 # [2000] +0xFA5C U+8DEC # [2000] +0xFA5D U+8E0C # [2000] +0xFA5E U+47FD # [2000] +0xFA5F U+8DFD # [2000] +0xFA60 U+8E06 # [2000] +0xFA61 U+2808A # [2000] [Unicode3.1] +0xFA62 U+8E14 # [2000] +0xFA63 U+8E16 # [2000] +0xFA64 U+8E21 # [2000] +0xFA65 U+8E22 # [2000] +0xFA66 U+8E27 # [2000] +0xFA67 U+280BB # [2000] [Unicode3.1] +0xFA68 U+4816 # [2000] +0xFA69 U+8E36 # [2000] +0xFA6A U+8E39 # [2000] +0xFA6B U+8E4B # [2000] +0xFA6C U+8E54 # [2000] +0xFA6D U+8E62 # [2000] +0xFA6E U+8E6C # [2000] +0xFA6F U+8E6D # [2000] +0xFA70 U+8E6F # [2000] +0xFA71 U+8E98 # [2000] +0xFA72 U+8E9E # [2000] +0xFA73 U+8EAE # [2000] +0xFA74 U+8EB3 # [2000] +0xFA75 U+8EB5 # [2000] +0xFA76 U+8EB6 # [2000] +0xFA77 U+8EBB # [2000] +0xFA78 U+28282 # [2000] [Unicode3.1] +0xFA79 U+8ED1 # [2000] +0xFA7A U+8ED4 # [2000] +0xFA7B U+484E # [2000] +0xFA7C U+8EF9 # [2000] +0xFA7D U+282F3 # [2000] [Unicode3.1] +0xFA7E U+8F00 # [2000] +0xFA80 U+8F08 # [2000] +0xFA81 U+8F17 # [2000] +0xFA82 U+8F2B # [2000] +0xFA83 U+8F40 # [2000] +0xFA84 U+8F4A # [2000] +0xFA85 U+8F58 # [2000] +0xFA86 U+2840C # [2000] [Unicode3.1] +0xFA87 U+8FA4 # [2000] +0xFA88 U+8FB4 # [2000] +0xFA89 U+FA66 # CJK COMPATIBILITY IDEOGRAPH-FA66 [2000] [Unicode3.2] +0xFA8A U+8FB6 # [2000] +0xFA8B U+28455 # [2000] [Unicode3.1] +0xFA8C U+8FC1 # [2000] +0xFA8D U+8FC6 # [2000] +0xFA8E U+FA24 # CJK COMPATIBILITY IDEOGRAPH-FA24 [2000] +0xFA8F U+8FCA # [2000] +0xFA90 U+8FCD # [2000] +0xFA91 U+8FD3 # [2000] +0xFA92 U+8FD5 # [2000] +0xFA93 U+8FE0 # [2000] +0xFA94 U+8FF1 # [2000] +0xFA95 U+8FF5 # [2000] +0xFA96 U+8FFB # [2000] +0xFA97 U+9002 # [2000] +0xFA98 U+900C # [2000] +0xFA99 U+9037 # [2000] +0xFA9A U+2856B # [2000] [Unicode3.1] +0xFA9B U+9043 # [2000] +0xFA9C U+9044 # [2000] +0xFA9D U+905D # [2000] +0xFA9E U+285C8 # [2000] [Unicode3.1] +0xFA9F U+285C9 # [2000] [Unicode3.1] +0xFAA0 U+9085 # [2000] +0xFAA1 U+908C # [2000] +0xFAA2 U+9090 # [2000] +0xFAA3 U+961D # [2000] +0xFAA4 U+90A1 # [2000] +0xFAA5 U+48B5 # [2000] +0xFAA6 U+90B0 # [2000] +0xFAA7 U+90B6 # [2000] +0xFAA8 U+90C3 # [2000] +0xFAA9 U+90C8 # [2000] +0xFAAA U+286D7 # [2000] [Unicode3.1] +0xFAAB U+90DC # [2000] +0xFAAC U+90DF # [2000] +0xFAAD U+286FA # [2000] [Unicode3.1] +0xFAAE U+90F6 # [2000] +0xFAAF U+90F2 # [2000] +0xFAB0 U+9100 # [2000] +0xFAB1 U+90EB # [2000] +0xFAB2 U+90FE # [2000] +0xFAB3 U+90FF # [2000] +0xFAB4 U+9104 # [2000] +0xFAB5 U+9106 # [2000] +0xFAB6 U+9118 # [2000] +0xFAB7 U+911C # [2000] +0xFAB8 U+911E # [2000] +0xFAB9 U+9137 # [2000] +0xFABA U+9139 # [2000] +0xFABB U+913A # [2000] +0xFABC U+9146 # [2000] +0xFABD U+9147 # [2000] +0xFABE U+9157 # [2000] +0xFABF U+9159 # [2000] +0xFAC0 U+9161 # [2000] +0xFAC1 U+9164 # [2000] +0xFAC2 U+9174 # [2000] +0xFAC3 U+9179 # [2000] +0xFAC4 U+9185 # [2000] +0xFAC5 U+918E # [2000] +0xFAC6 U+91A8 # [2000] +0xFAC7 U+91AE # [2000] +0xFAC8 U+91B3 # [2000] +0xFAC9 U+91B6 # [2000] +0xFACA U+91C3 # [2000] +0xFACB U+91C4 # [2000] +0xFACC U+91DA # [2000] +0xFACD U+28949 # [2000] [Unicode3.1] +0xFACE U+28946 # [2000] [Unicode3.1] +0xFACF U+91EC # [2000] +0xFAD0 U+91EE # [2000] +0xFAD1 U+9201 # [2000] +0xFAD2 U+920A # [2000] +0xFAD3 U+9216 # [2000] +0xFAD4 U+9217 # [2000] +0xFAD5 U+2896B # [2000] [Unicode3.1] +0xFAD6 U+9233 # [2000] +0xFAD7 U+9242 # [2000] +0xFAD8 U+9247 # [2000] +0xFAD9 U+924A # [2000] +0xFADA U+924E # [2000] +0xFADB U+9251 # [2000] +0xFADC U+9256 # [2000] +0xFADD U+9259 # [2000] +0xFADE U+9260 # [2000] +0xFADF U+9261 # [2000] +0xFAE0 U+9265 # [2000] +0xFAE1 U+9267 # [2000] +0xFAE2 U+9268 # [2000] +0xFAE3 U+28987 # [2000] [Unicode3.1] +0xFAE4 U+28988 # [2000] [Unicode3.1] +0xFAE5 U+927C # [2000] +0xFAE6 U+927D # [2000] +0xFAE7 U+927F # [2000] +0xFAE8 U+9289 # [2000] +0xFAE9 U+928D # [2000] +0xFAEA U+9297 # [2000] +0xFAEB U+9299 # [2000] +0xFAEC U+929F # [2000] +0xFAED U+92A7 # [2000] +0xFAEE U+92AB # [2000] +0xFAEF U+289BA # [2000] [Unicode3.1] +0xFAF0 U+289BB # [2000] [Unicode3.1] +0xFAF1 U+92B2 # [2000] +0xFAF2 U+92BF # [2000] +0xFAF3 U+92C0 # [2000] +0xFAF4 U+92C6 # [2000] +0xFAF5 U+92CE # [2000] +0xFAF6 U+92D0 # [2000] +0xFAF7 U+92D7 # [2000] +0xFAF8 U+92D9 # [2000] +0xFAF9 U+92E5 # [2000] +0xFAFA U+92E7 # [2000] +0xFAFB U+9311 # [2000] +0xFAFC U+28A1E # [2000] [Unicode3.1] +0xFB40 U+28A29 # [2000] [Unicode3.1] +0xFB41 U+92F7 # [2000] +0xFB42 U+92F9 # [2000] +0xFB43 U+92FB # [2000] +0xFB44 U+9302 # [2000] +0xFB45 U+930D # [2000] +0xFB46 U+9315 # [2000] +0xFB47 U+931D # [2000] +0xFB48 U+931E # [2000] +0xFB49 U+9327 # [2000] +0xFB4A U+9329 # [2000] +0xFB4B U+28A71 # [2000] [Unicode3.1] +0xFB4C U+28A43 # [2000] [Unicode3.1] +0xFB4D U+9347 # [2000] +0xFB4E U+9351 # [2000] +0xFB4F U+9357 # [2000] +0xFB50 U+935A # [2000] +0xFB51 U+936B # [2000] +0xFB52 U+9371 # [2000] +0xFB53 U+9373 # [2000] +0xFB54 U+93A1 # [2000] +0xFB55 U+28A99 # [2000] [Unicode3.1] +0xFB56 U+28ACD # [2000] [Unicode3.1] +0xFB57 U+9388 # [2000] +0xFB58 U+938B # [2000] +0xFB59 U+938F # [2000] +0xFB5A U+939E # [2000] +0xFB5B U+93F5 # [2000] +0xFB5C U+28AE4 # [2000] [Unicode3.1] +0xFB5D U+28ADD # [2000] [Unicode3.1] +0xFB5E U+93F1 # [2000] +0xFB5F U+93C1 # [2000] +0xFB60 U+93C7 # [2000] +0xFB61 U+93DC # [2000] +0xFB62 U+93E2 # [2000] +0xFB63 U+93E7 # [2000] +0xFB64 U+9409 # [2000] +0xFB65 U+940F # [2000] +0xFB66 U+9416 # [2000] +0xFB67 U+9417 # [2000] +0xFB68 U+93FB # [2000] +0xFB69 U+9432 # [2000] +0xFB6A U+9434 # [2000] +0xFB6B U+943B # [2000] +0xFB6C U+9445 # [2000] +0xFB6D U+28BC1 # [2000] [Unicode3.1] +0xFB6E U+28BEF # [2000] [Unicode3.1] +0xFB6F U+946D # [2000] +0xFB70 U+946F # [2000] +0xFB71 U+9578 # [2000] +0xFB72 U+9579 # [2000] +0xFB73 U+9586 # [2000] +0xFB74 U+958C # [2000] +0xFB75 U+958D # [2000] +0xFB76 U+28D10 # [2000] [Unicode3.1] +0xFB77 U+95AB # [2000] +0xFB78 U+95B4 # [2000] +0xFB79 U+28D71 # [2000] [Unicode3.1] +0xFB7A U+95C8 # [2000] +0xFB7B U+28DFB # [2000] [Unicode3.1] +0xFB7C U+28E1F # [2000] [Unicode3.1] +0xFB7D U+962C # [2000] +0xFB7E U+9633 # [2000] +0xFB80 U+9634 # [2000] +0xFB81 U+28E36 # [2000] [Unicode3.1] +0xFB82 U+963C # [2000] +0xFB83 U+9641 # [2000] +0xFB84 U+9661 # [2000] +0xFB85 U+28E89 # [2000] [Unicode3.1] +0xFB86 U+9682 # [2000] +0xFB87 U+28EEB # [2000] [Unicode3.1] +0xFB88 U+969A # [2000] +0xFB89 U+28F32 # [2000] [Unicode3.1] +0xFB8A U+49E7 # [2000] +0xFB8B U+96A9 # [2000] +0xFB8C U+96AF # [2000] +0xFB8D U+96B3 # [2000] +0xFB8E U+96BA # [2000] +0xFB8F U+96BD # [2000] +0xFB90 U+49FA # [2000] +0xFB91 U+28FF8 # [2000] [Unicode3.1] +0xFB92 U+96D8 # [2000] +0xFB93 U+96DA # [2000] +0xFB94 U+96DD # [2000] +0xFB95 U+4A04 # [2000] +0xFB96 U+9714 # [2000] +0xFB97 U+9723 # [2000] +0xFB98 U+4A29 # [2000] +0xFB99 U+9736 # [2000] +0xFB9A U+9741 # [2000] +0xFB9B U+9747 # [2000] +0xFB9C U+9755 # [2000] +0xFB9D U+9757 # [2000] +0xFB9E U+975B # [2000] +0xFB9F U+976A # [2000] +0xFBA0 U+292A0 # [2000] [Unicode3.1] +0xFBA1 U+292B1 # [2000] [Unicode3.1] +0xFBA2 U+9796 # [2000] +0xFBA3 U+979A # [2000] +0xFBA4 U+979E # [2000] +0xFBA5 U+97A2 # [2000] +0xFBA6 U+97B1 # [2000] +0xFBA7 U+97B2 # [2000] +0xFBA8 U+97BE # [2000] +0xFBA9 U+97CC # [2000] +0xFBAA U+97D1 # [2000] +0xFBAB U+97D4 # [2000] +0xFBAC U+97D8 # [2000] +0xFBAD U+97D9 # [2000] +0xFBAE U+97E1 # [2000] +0xFBAF U+97F1 # [2000] +0xFBB0 U+9804 # [2000] +0xFBB1 U+980D # [2000] +0xFBB2 U+980E # [2000] +0xFBB3 U+9814 # [2000] +0xFBB4 U+9816 # [2000] +0xFBB5 U+4ABC # [2000] +0xFBB6 U+29490 # [2000] [Unicode3.1] +0xFBB7 U+9823 # [2000] +0xFBB8 U+9832 # [2000] +0xFBB9 U+9833 # [2000] +0xFBBA U+9825 # [2000] +0xFBBB U+9847 # [2000] +0xFBBC U+9866 # [2000] +0xFBBD U+98AB # [2000] +0xFBBE U+98AD # [2000] +0xFBBF U+98B0 # [2000] +0xFBC0 U+295CF # [2000] [Unicode3.1] +0xFBC1 U+98B7 # [2000] +0xFBC2 U+98B8 # [2000] +0xFBC3 U+98BB # [2000] +0xFBC4 U+98BC # [2000] +0xFBC5 U+98BF # [2000] +0xFBC6 U+98C2 # [2000] +0xFBC7 U+98C7 # [2000] +0xFBC8 U+98CB # [2000] +0xFBC9 U+98E0 # [2000] +0xFBCA U+2967F # [2000] [Unicode3.1] +0xFBCB U+98E1 # [2000] +0xFBCC U+98E3 # [2000] +0xFBCD U+98E5 # [2000] +0xFBCE U+98EA # [2000] +0xFBCF U+98F0 # [2000] +0xFBD0 U+98F1 # [2000] +0xFBD1 U+98F3 # [2000] +0xFBD2 U+9908 # [2000] +0xFBD3 U+4B3B # [2000] +0xFBD4 U+296F0 # [2000] [Unicode3.1] +0xFBD5 U+9916 # [2000] +0xFBD6 U+9917 # [2000] +0xFBD7 U+29719 # [2000] [Unicode3.1] +0xFBD8 U+991A # [2000] +0xFBD9 U+991B # [2000] +0xFBDA U+991C # [2000] +0xFBDB U+29750 # [2000] [Unicode3.1] +0xFBDC U+9931 # [2000] +0xFBDD U+9932 # [2000] +0xFBDE U+9933 # [2000] +0xFBDF U+993A # [2000] +0xFBE0 U+993B # [2000] +0xFBE1 U+993C # [2000] +0xFBE2 U+9940 # [2000] +0xFBE3 U+9941 # [2000] +0xFBE4 U+9946 # [2000] +0xFBE5 U+994D # [2000] +0xFBE6 U+994E # [2000] +0xFBE7 U+995C # [2000] +0xFBE8 U+995F # [2000] +0xFBE9 U+9960 # [2000] +0xFBEA U+99A3 # [2000] +0xFBEB U+99A6 # [2000] +0xFBEC U+99B9 # [2000] +0xFBED U+99BD # [2000] +0xFBEE U+99BF # [2000] +0xFBEF U+99C3 # [2000] +0xFBF0 U+99C9 # [2000] +0xFBF1 U+99D4 # [2000] +0xFBF2 U+99D9 # [2000] +0xFBF3 U+99DE # [2000] +0xFBF4 U+298C6 # [2000] [Unicode3.1] +0xFBF5 U+99F0 # [2000] +0xFBF6 U+99F9 # [2000] +0xFBF7 U+99FC # [2000] +0xFBF8 U+9A0A # [2000] +0xFBF9 U+9A11 # [2000] +0xFBFA U+9A16 # [2000] +0xFBFB U+9A1A # [2000] +0xFBFC U+9A20 # [2000] +0xFC40 U+9A31 # [2000] +0xFC41 U+9A36 # [2000] +0xFC42 U+9A44 # [2000] +0xFC43 U+9A4C # [2000] +0xFC44 U+9A58 # [2000] +0xFC45 U+4BC2 # [2000] +0xFC46 U+9AAF # [2000] +0xFC47 U+4BCA # [2000] +0xFC48 U+9AB7 # [2000] +0xFC49 U+4BD2 # [2000] +0xFC4A U+9AB9 # [2000] +0xFC4B U+29A72 # [2000] [Unicode3.1] +0xFC4C U+9AC6 # [2000] +0xFC4D U+9AD0 # [2000] +0xFC4E U+9AD2 # [2000] +0xFC4F U+9AD5 # [2000] +0xFC50 U+4BE8 # [2000] +0xFC51 U+9ADC # [2000] +0xFC52 U+9AE0 # [2000] +0xFC53 U+9AE5 # [2000] +0xFC54 U+9AE9 # [2000] +0xFC55 U+9B03 # [2000] +0xFC56 U+9B0C # [2000] +0xFC57 U+9B10 # [2000] +0xFC58 U+9B12 # [2000] +0xFC59 U+9B16 # [2000] +0xFC5A U+9B1C # [2000] +0xFC5B U+9B2B # [2000] +0xFC5C U+9B33 # [2000] +0xFC5D U+9B3D # [2000] +0xFC5E U+4C20 # [2000] +0xFC5F U+9B4B # [2000] +0xFC60 U+9B63 # [2000] +0xFC61 U+9B65 # [2000] +0xFC62 U+9B6B # [2000] +0xFC63 U+9B6C # [2000] +0xFC64 U+9B73 # [2000] +0xFC65 U+9B76 # [2000] +0xFC66 U+9B77 # [2000] +0xFC67 U+9BA6 # [2000] +0xFC68 U+9BAC # [2000] +0xFC69 U+9BB1 # [2000] +0xFC6A U+29DDB # [2000] [Unicode3.1] +0xFC6B U+29E3D # [2000] [Unicode3.1] +0xFC6C U+9BB2 # [2000] +0xFC6D U+9BB8 # [2000] +0xFC6E U+9BBE # [2000] +0xFC6F U+9BC7 # [2000] +0xFC70 U+9BF3 # [2000] +0xFC71 U+9BD8 # [2000] +0xFC72 U+9BDD # [2000] +0xFC73 U+9BE7 # [2000] +0xFC74 U+9BEA # [2000] +0xFC75 U+9BEB # [2000] +0xFC76 U+9BEF # [2000] +0xFC77 U+9BEE # [2000] +0xFC78 U+29E15 # [2000] [Unicode3.1] +0xFC79 U+9BFA # [2000] +0xFC7A U+29E8A # [2000] [Unicode3.1] +0xFC7B U+9BF7 # [2000] +0xFC7C U+29E49 # [2000] [Unicode3.1] +0xFC7D U+9C16 # [2000] +0xFC7E U+9C18 # [2000] +0xFC80 U+9C19 # [2000] +0xFC81 U+9C1A # [2000] +0xFC82 U+9C1D # [2000] +0xFC83 U+9C22 # [2000] +0xFC84 U+9C27 # [2000] +0xFC85 U+9C29 # [2000] +0xFC86 U+9C2A # [2000] +0xFC87 U+29EC4 # [2000] [Unicode3.1] +0xFC88 U+9C31 # [2000] +0xFC89 U+9C36 # [2000] +0xFC8A U+9C37 # [2000] +0xFC8B U+9C45 # [2000] +0xFC8C U+9C5C # [2000] +0xFC8D U+29EE9 # [2000] [Unicode3.1] +0xFC8E U+9C49 # [2000] +0xFC8F U+9C4A # [2000] +0xFC90 U+29EDB # [2000] [Unicode3.1] +0xFC91 U+9C54 # [2000] +0xFC92 U+9C58 # [2000] +0xFC93 U+9C5B # [2000] +0xFC94 U+9C5D # [2000] +0xFC95 U+9C5F # [2000] +0xFC96 U+9C69 # [2000] +0xFC97 U+9C6A # [2000] +0xFC98 U+9C6B # [2000] +0xFC99 U+9C6D # [2000] +0xFC9A U+9C6E # [2000] +0xFC9B U+9C70 # [2000] +0xFC9C U+9C72 # [2000] +0xFC9D U+9C75 # [2000] +0xFC9E U+9C7A # [2000] +0xFC9F U+9CE6 # [2000] +0xFCA0 U+9CF2 # [2000] +0xFCA1 U+9D0B # [2000] +0xFCA2 U+9D02 # [2000] +0xFCA3 U+29FCE # [2000] [Unicode3.1] +0xFCA4 U+9D11 # [2000] +0xFCA5 U+9D17 # [2000] +0xFCA6 U+9D18 # [2000] +0xFCA7 U+2A02F # [2000] [Unicode3.1] +0xFCA8 U+4CC4 # [2000] +0xFCA9 U+2A01A # [2000] [Unicode3.1] +0xFCAA U+9D32 # [2000] +0xFCAB U+4CD1 # [2000] +0xFCAC U+9D42 # [2000] +0xFCAD U+9D4A # [2000] +0xFCAE U+9D5F # [2000] +0xFCAF U+9D62 # [2000] +0xFCB0 U+2A0F9 # [2000] [Unicode3.1] +0xFCB1 U+9D69 # [2000] +0xFCB2 U+9D6B # [2000] +0xFCB3 U+2A082 # [2000] [Unicode3.1] +0xFCB4 U+9D73 # [2000] +0xFCB5 U+9D76 # [2000] +0xFCB6 U+9D77 # [2000] +0xFCB7 U+9D7E # [2000] +0xFCB8 U+9D84 # [2000] +0xFCB9 U+9D8D # [2000] +0xFCBA U+9D99 # [2000] +0xFCBB U+9DA1 # [2000] +0xFCBC U+9DBF # [2000] +0xFCBD U+9DB5 # [2000] +0xFCBE U+9DB9 # [2000] +0xFCBF U+9DBD # [2000] +0xFCC0 U+9DC3 # [2000] +0xFCC1 U+9DC7 # [2000] +0xFCC2 U+9DC9 # [2000] +0xFCC3 U+9DD6 # [2000] +0xFCC4 U+9DDA # [2000] +0xFCC5 U+9DDF # [2000] +0xFCC6 U+9DE0 # [2000] +0xFCC7 U+9DE3 # [2000] +0xFCC8 U+9DF4 # [2000] +0xFCC9 U+4D07 # [2000] +0xFCCA U+9E0A # [2000] +0xFCCB U+9E02 # [2000] +0xFCCC U+9E0D # [2000] +0xFCCD U+9E19 # [2000] +0xFCCE U+9E1C # [2000] +0xFCCF U+9E1D # [2000] +0xFCD0 U+9E7B # [2000] +0xFCD1 U+22218 # [2000] [Unicode3.1] +0xFCD2 U+9E80 # [2000] +0xFCD3 U+9E85 # [2000] +0xFCD4 U+9E9B # [2000] +0xFCD5 U+9EA8 # [2000] +0xFCD6 U+2A38C # [2000] [Unicode3.1] +0xFCD7 U+9EBD # [2000] +0xFCD8 U+2A437 # [2000] [Unicode3.1] +0xFCD9 U+9EDF # [2000] +0xFCDA U+9EE7 # [2000] +0xFCDB U+9EEE # [2000] +0xFCDC U+9EFF # [2000] +0xFCDD U+9F02 # [2000] +0xFCDE U+4D77 # [2000] +0xFCDF U+9F03 # [2000] +0xFCE0 U+9F17 # [2000] +0xFCE1 U+9F19 # [2000] +0xFCE2 U+9F2F # [2000] +0xFCE3 U+9F37 # [2000] +0xFCE4 U+9F3A # [2000] +0xFCE5 U+9F3D # [2000] +0xFCE6 U+9F41 # [2000] +0xFCE7 U+9F45 # [2000] +0xFCE8 U+9F46 # [2000] +0xFCE9 U+9F53 # [2000] +0xFCEA U+9F55 # [2000] +0xFCEB U+9F58 # [2000] +0xFCEC U+2A5F1 # [2000] [Unicode3.1] +0xFCED U+9F5D # [2000] +0xFCEE U+2A602 # [2000] [Unicode3.1] +0xFCEF U+9F69 # [2000] +0xFCF0 U+2A61A # [2000] [Unicode3.1] +0xFCF1 U+9F6D # [2000] +0xFCF2 U+9F70 # [2000] +0xFCF3 U+9F75 # [2000] +0xFCF4 U+2A6B2 # [2000] [Unicode3.1] diff --git a/ext/mbstring/tests/encoding_tests.inc b/ext/mbstring/tests/encoding_tests.inc new file mode 100644 index 0000000000000..e95bc8fd09aa9 --- /dev/null +++ b/ext/mbstring/tests/encoding_tests.inc @@ -0,0 +1,225 @@ +> 16) . pack('n', $char & 0xFFFF); + else + $char = pack('N', $char); + $from[$char] = $codepoint; + $to[$codepoint] = $char; + } + } +} + +function dbgPrint($str) { + $result = ''; + if (mb_check_encoding($str, 'ASCII')) + $result .= '"' . $str . '" '; + return $result . "(" . bin2hex($str) . ")"; +} + +function identifyValidString($goodString, $encoding) { + $result = mb_check_encoding($goodString, $encoding); + if (!$result) + die("mb_check_encoding failed on good $encoding string: " . dbgPrint($goodString)); +} + +function identifyInvalidString($badString, $encoding) { + $result = mb_check_encoding($badString, $encoding); + if ($result) + die("mb_check_encoding passed on bad $encoding string: " . dbgPrint($badString)); +} + +function testConversion($fromString, $toString, $fromEncoding, $toEncoding) { + $result = mb_convert_encoding($fromString, $toEncoding, $fromEncoding); + if ($result !== $toString) + die("mb_convert_encoding not working on $fromEncoding input: " . dbgPrint($fromString) . "\nExpected $toEncoding: " . dbgPrint($toString) . "\nActually got: " . dbgPrint($result)); +} + +function testValidConversion($fromString, $toString, $fromEncoding, $toEncoding) { + $illegalChars = mb_get_info('illegal_chars'); + testConversion($fromString, $toString, $fromEncoding, $toEncoding); + if (mb_get_info('illegal_chars') !== $illegalChars) + die("mb_convert_encoding incremented illegal_chars on valid $fromEncoding string: " . dbgPrint($fromString) . " when converting to $toEncoding"); +} + +function convertValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays = true) { + testValidConversion($fromString, $toString, $fromEncoding, $toEncoding); + if ($bothWays) + testValidConversion($toString, $fromString, $toEncoding, $fromEncoding); +} + +function convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding) { + $illegalChars = mb_get_info('illegal_chars'); + testConversion($fromString, $toString, $fromEncoding, $toEncoding); + if (mb_get_info('illegal_chars') <= $illegalChars) + die("mb_convert_encoding did not increment illegal_chars on invalid $fromEncoding string: " . dbgPrint($fromString) . " when converting to $toEncoding"); +} + +function testValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays = true) { + identifyValidString($fromString, $fromEncoding); + convertValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays); +} + +function testInvalidString($fromString, $toString, $fromEncoding, $toEncoding) { + identifyInvalidString($fromString, $fromEncoding); + convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding); +} + +// Only for encodings where valid characters can be concatenated together in any +// way, without any escape sequences +function testAllValidChars($charMap, $fromEncoding, $toEncoding, $bothWays = true) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + while (!empty($goodChars)) { + $length = min(rand(5,10), count($goodChars)); + $fromString = $toString = ''; + while ($length--) { + $goodChar = array_pop($goodChars); + $fromString .= $goodChar; + $toString .= $charMap[$goodChar]; + } + + testValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays); + } +} + +function testAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $replacement) { + $badChars = array_keys($badChars); + $goodChars = array(); + while (!empty($badChars)) { + if (empty($goodChars)) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + } + $goodChar = array_pop($goodChars); + $fromString = array_pop($badChars) . $goodChar; + $toString = $replacement . $charMap[$goodChar]; + + testInvalidString($fromString, $toString, $fromEncoding, $toEncoding); + } +} + +function convertAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $replacement) { + $badChars = array_keys($badChars); + $goodChars = array(); + while (!empty($badChars)) { + if (empty($goodChars)) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + } + $goodChar = array_pop($goodChars); + $fromString = array_pop($badChars) . $goodChar; + $toString = $replacement . $charMap[$goodChar]; + + convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding); + } +} + +function testTruncatedChars($truncated, $fromEncoding, $toEncoding, $replacement) { + $truncatedChars = array_keys($truncated); + foreach ($truncatedChars as $truncatedChar) { + testInvalidString($truncatedChar, $replacement, $fromEncoding, $toEncoding); + } +} + +// For variable-width encodings, where we have an exhaustive list of +// all valid characters of any width +// +// `$startBytes` maps from first-byte values to the corresponding character length +// (For encodings where the first byte can tell you the length of a multi-byte +// character) +// Note that `$startBytes` can be partial! +function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array()) { + $invalid = array(); + $truncated = array(); + $prefixes = array(); /* All sequences which are not (but can start) a valid character */ + + foreach ($valid as $char => $unicode) { + for ($len = 1; $len < strlen($char); $len++) + $prefixes[substr($char, 0, $len)] = true; + } + + $varLength = function($prefix) use($valid, &$invalid, &$truncated) { + for ($byte = 0; $byte < 256; $byte++) { + $str = $prefix . chr($byte); + if (!isset($valid[$str])) { + if (isset($prefixes[$str])) { + $truncated[$str] = true; + $varLength($str); + } else { + $invalid[$str] = true; + } + } + } + }; + + $fixedLength = function($prefix, $remaining) use($valid, &$invalid, &$truncated, &$fixedLength) { + if ($remaining == 0) { + if (!isset($valid[$prefix])) + $invalid[$prefix] = true; + } else if ($remaining == 1) { + $truncated[$prefix] = true; + for ($i = 0; $i < 256; $i++) { + $str = $prefix . chr($i); + if (!isset($valid[$str])) + $invalid[$str] = true; + } + } else { + $truncated[$prefix] = true; + for ($i = 0; $i < 256; $i++) + $fixedLength($prefix . chr($i), $remaining - 1); + } + }; + + for ($byte = 0; $byte < 256; $byte++) { + if (isset($startBytes[$byte])) { + $fixedLength(chr($byte), $startBytes[$byte] - 1); + } else { + $str = chr($byte); + if (!isset($valid[$str])) { + if (isset($prefixes[$str])) { + $truncated[$str] = true; + $varLength($str); + } else { + $invalid[$str] = true; + } + } + } + } +} + +function testEncodingFromUTF16ConversionTable($path, $encoding, $replacement = '%', $startBytes = array()) { + srand(1000); // Make results consistent + mb_substitute_character(0x25); // '%' + readConversionTable($path, $toUnicode, $fromUnicode); + + findInvalidChars($toUnicode, $invalid, $truncated, $startBytes); + testAllValidChars($toUnicode, $encoding, 'UTF-16BE'); + testAllInvalidChars($invalid, $toUnicode, $encoding, 'UTF-16BE', "\x00%"); + testTruncatedChars($truncated, $encoding, 'UTF-16BE', "\x00%"); + echo "Tested $encoding -> UTF-16BE\n"; + + findInvalidChars($fromUnicode, $invalid, $unused, array_fill_keys(range(0,0xFF), 2)); + convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', $encoding, $replacement); + echo "Tested UTF-16BE -> $encoding\n"; +} +?> diff --git a/ext/mbstring/tests/eucjp_encoding.phpt b/ext/mbstring/tests/eucjp_encoding.phpt new file mode 100644 index 0000000000000..dc321d3baeb25 --- /dev/null +++ b/ext/mbstring/tests/eucjp_encoding.phpt @@ -0,0 +1,81 @@ +--TEST-- +Exhaustive test of EUC-JP encoding verification and conversion +--SKIPIF-- + +--FILE-- + 2, 0x8F => 3)); + +/* In the JIS X 0212 character set, kuten code 0x2237 (EUC-JP 0x8FA2B7) + * is an ordinary tilde character + * This mapping is not reversible, because ASCII 0x7E also represents + * the same character */ +unset($validChars["\x8F\xA2\xB7"]); + +testAllValidChars($validChars, 'EUC-JP', 'UTF-32BE'); +echo "Encoding verification and conversion work for all valid characters\n"; + +testAllInvalidChars($invalidChars, $validChars, 'EUC-JP', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'EUC-JP', 'UTF-32BE', "\x00\x00\x00%"); +echo "Encoding verification and conversion work for all invalid characters\n"; + +testValidString("\x8F\xA2\xB7", "\x00\x00\x00~", 'EUC-JP', 'UTF-32BE', false); +echo "Irreversible mapping of 0x8FA2B7 follows JIS X 0212 correctly\n"; + +testAllValidChars($fromUnicode, 'UTF-32BE', 'EUC-JP', false); +echo "Unicode -> EUC-JP conversion works on all valid characters\n"; + +$invalidChars = array(); +for ($cp = 0; $cp <= 0xFFFF; $cp++) { + $char = pack('N', $cp); + if (!isset($fromUnicode[$char])) + $invalidChars[$char] = true; +} +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-32BE', 'EUC-JP', '%'); +echo "Unicode -> EUC-JP conversion works on all invalid characters\n"; +?> +--EXPECT-- +Encoding verification and conversion work for all valid characters +Encoding verification and conversion work for all invalid characters +Irreversible mapping of 0x8FA2B7 follows JIS X 0212 correctly +Unicode -> EUC-JP conversion works on all valid characters +Unicode -> EUC-JP conversion works on all invalid characters diff --git a/ext/mbstring/tests/illformed_utf_sequences.phpt b/ext/mbstring/tests/illformed_utf_sequences.phpt index 3b7d431a0ed1b..8f3b97e8ec90d 100644 --- a/ext/mbstring/tests/illformed_utf_sequences.phpt +++ b/ext/mbstring/tests/illformed_utf_sequences.phpt @@ -4,12 +4,9 @@ Unicode standard conformance test (ill-formed UTF sequences.) --FILE-- > 24, ($i >> 16) & 0xff, ($i >> 8) & 0xff, $i & 0xff), - 1, "UTF-32", true); + 1, "UTF-32"); if ($s === false) { $cnt++; } else { @@ -137,13 +134,13 @@ for ($i = 0xd7ff; $i <= 0xe000; ++$i) { } } var_dump($cnt); -var_dump(str_replace("0000feff","",$out)); +var_dump($out); $out = ''; $cnt = 0; for ($i = 0xd7ff; $i <= 0xe000; ++$i) { $s = chk_enc("\xff\xfe\x00\x00". pack('C4', $i & 0xff, ($i >> 8) & 0xff, ($i >> 16) & 0xff, ($i >> 24) & 0xff), - 1, "UTF-32", true); + 1, "UTF-32"); if ($s === false) { $cnt++; } else { @@ -151,7 +148,7 @@ for ($i = 0xd7ff; $i <= 0xe000; ++$i) { } } var_dump($cnt); -var_dump(str_replace("0000feff","",$out)); +var_dump($out); ?> --EXPECT-- @@ -199,10 +196,10 @@ bool(false) string(8) "0010ffff" bool(false) string(8) "0010ffff" -string(16) "0000feff0000fffd" -string(16) "0000feff0010ffff" -string(16) "0000feff0000fffd" -string(16) "0000feff0010ffff" +string(8) "0000fffd" +string(8) "0010ffff" +string(8) "0000fffd" +string(8) "0010ffff" UTF-32 and surrogates area int(2048) string(16) "0000d7ff0000e000" diff --git a/ext/mbstring/tests/iso8859_encodings.phpt b/ext/mbstring/tests/iso8859_encodings.phpt new file mode 100644 index 0000000000000..bbc70dfe3d1b9 --- /dev/null +++ b/ext/mbstring/tests/iso8859_encodings.phpt @@ -0,0 +1,46 @@ +--TEST-- +Exhaustive test of verification and conversion of ISO-8859-X text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested ISO-8859-1 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-1 +Tested ISO-8859-2 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-2 +Tested ISO-8859-3 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-3 +Tested ISO-8859-4 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-4 +Tested ISO-8859-5 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-5 +Tested ISO-8859-6 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-6 +Tested ISO-8859-7 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-7 +Tested ISO-8859-8 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-8 +Tested ISO-8859-9 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-9 +Tested ISO-8859-10 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-10 +Tested ISO-8859-13 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-13 +Tested ISO-8859-14 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-14 +Tested ISO-8859-15 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-15 +Tested ISO-8859-16 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-16 diff --git a/ext/mbstring/tests/koi8r_encoding.phpt b/ext/mbstring/tests/koi8r_encoding.phpt new file mode 100644 index 0000000000000..368de514e290d --- /dev/null +++ b/ext/mbstring/tests/koi8r_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of KOI8-R text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested KOI8-R -> UTF-16BE +Tested UTF-16BE -> KOI8-R diff --git a/ext/mbstring/tests/koi8u_encoding.phpt b/ext/mbstring/tests/koi8u_encoding.phpt new file mode 100644 index 0000000000000..499009225cdbc --- /dev/null +++ b/ext/mbstring/tests/koi8u_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of KOI8-U text +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Tested KOI8-U -> UTF-16BE +Tested UTF-16BE -> KOI8-U diff --git a/ext/mbstring/tests/mb_convert_encoding.phpt b/ext/mbstring/tests/mb_convert_encoding.phpt index 1f39d21b15ca8..5ea4440049aa6 100644 --- a/ext/mbstring/tests/mb_convert_encoding.phpt +++ b/ext/mbstring/tests/mb_convert_encoding.phpt @@ -20,11 +20,11 @@ $euc_jp = ' // Note: For some reason it complains, results are different. Not researched. echo "== BASIC TEST ==\n"; $s = $sjis; -$s = mb_convert_encoding($s, 'EUC-JP', 'SJIS'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'SJIS')); print("EUC-JP: $s\n"); // EUC-JP $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', 'JIS'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'JIS')); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -41,7 +41,7 @@ echo "== STRING ENCODING LIST ==\n"; $a = 'JIS,UTF-8,EUC-JP,SJIS'; $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', $a); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a)); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -58,7 +58,7 @@ echo "== ARRAY ENCODING LIST ==\n"; $a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS'); $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', $a); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a)); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -74,7 +74,7 @@ print("JIS: ".base64_encode($s)."\n"); // JIS echo "== DETECT ORDER ==\n"; $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', 'auto'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'auto')); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -86,18 +86,18 @@ $s = mb_convert_encoding($s, 'JIS', 'auto'); print("JIS: ".base64_encode($s)."\n"); // JIS -// Invalid(?) Parameters +// Invalid Parameters echo "== INVALID PARAMETER ==\n"; $s = mb_convert_encoding(1234, 'EUC-JP'); -print("INT: $s\n"); // EUC-JP +print("INT: $s\n"); $s = mb_convert_encoding('', 'EUC-JP'); print("EUC-JP: $s\n"); // SJIS $s = $euc_jp; try { - var_dump( mb_convert_encoding($s, 'BAD') ); + var_dump(mb_convert_encoding($s, 'BAD')); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } @@ -105,20 +105,20 @@ try { ?> --EXPECT-- == BASIC TEST == -EUC-JP: ÆüËÜ¸ì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ -EUC-JP: ÆüËÜ¸ì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == STRING ENCODING LIST == -EUC-JP: ÆüËÜ¸ì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == ARRAY ENCODING LIST == -EUC-JP: ÆüËÜ¸ì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == DETECT ORDER == -EUC-JP: ÆüËÜ¸ì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == INVALID PARAMETER == diff --git a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt index b3c8ba10bba63..45efe28766e78 100644 --- a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt +++ b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt @@ -1,5 +1,7 @@ --TEST-- mb_convert_encoding() when encoding detection fails +--INI-- +mbstring.strict_detection=1 --FILE-- 'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS'); -// Note: Due to detect order, detected as UTF-8 $s = $jis; $s = mb_detect_encoding($s, $a); print("JIS: $s\n"); @@ -98,7 +97,7 @@ JIS: JIS EUC-JP: EUC-JP EUC-JP: EUC-JP == ARRAY ENCODING LIST == -JIS: UTF-8 +JIS: JIS EUC-JP: EUC-JP SJIS: SJIS == DETECT ORDER == diff --git a/ext/mbstring/tests/mb_ereg-compat-02.phpt b/ext/mbstring/tests/mb_ereg-compat-02.phpt index 2f40422543804..e1ec87f644072 100644 --- a/ext/mbstring/tests/mb_ereg-compat-02.phpt +++ b/ext/mbstring/tests/mb_ereg-compat-02.phpt @@ -19,7 +19,7 @@ function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build echo "\n"; ?> --EXPECT-- -32 +1 This is a nice and simple string is is diff --git a/ext/mbstring/tests/mb_ereg.phpt b/ext/mbstring/tests/mb_ereg.phpt index bc95a5fbaa005..91182dd65370a 100644 --- a/ext/mbstring/tests/mb_ereg.phpt +++ b/ext/mbstring/tests/mb_ereg.phpt @@ -31,15 +31,15 @@ output_handler= } ?> --EXPECT-- -(15)6162632064656620676869206a6b6c2064656620676869206a6b6c -(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 -(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 -(15)6162632064656620676869206a6b6c2064656620676869206a6b6c -(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 -(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 -(15)6162632064656620676869206a6b6c2064656620676869206a6b6c -(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 -(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 -(15)6162632064656620676869206a6b6c2064656620676869206a6b6c -(39)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 -(39)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(1)6162632064656620676869206a6b6c2064656620676869206a6b6c +(1)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(1)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(1)6162632064656620676869206a6b6c2064656620676869206a6b6c +(1)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(1)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(1)6162632064656620676869206a6b6c2064656620676869206a6b6c +(1)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(1)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(1)6162632064656620676869206a6b6c2064656620676869206a6b6c +(1)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(1)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 diff --git a/ext/mbstring/tests/mb_ereg_basic.phpt b/ext/mbstring/tests/mb_ereg_basic.phpt index 9ec2ff754d377..7f04855eb02c8 100644 --- a/ext/mbstring/tests/mb_ereg_basic.phpt +++ b/ext/mbstring/tests/mb_ereg_basic.phpt @@ -76,17 +76,17 @@ Regex encoding set to utf-8 **-- ASCII String --** -- Without $regs argument-- -int(1) -int(1) +bool(true) +bool(true) --With $regs argument -- -int(36) +bool(true) array(2) { [0]=> string(48) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4" [1]=> string(24) "VGhpcyBpcyBhbiBFbmdsaXM=" } -int(17) +bool(true) array(1) { [0]=> string(24) "VGhpcyBpcyBhbiBFbmdsaXM=" @@ -94,10 +94,10 @@ array(1) { **-- Multibyte String --** -- Without $regs argument -- -int(1) +bool(true) bool(false) -- With $regs argument -- -int(35) +bool(true) array(3) { [0]=> string(48) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzQ=" diff --git a/ext/mbstring/tests/mb_ereg_variation3.phpt b/ext/mbstring/tests/mb_ereg_variation3.phpt index f667d64bdd7d0..6867165ec294f 100644 --- a/ext/mbstring/tests/mb_ereg_variation3.phpt +++ b/ext/mbstring/tests/mb_ereg_variation3.phpt @@ -69,84 +69,84 @@ echo "Done"; *** Testing mb_ereg() : variation *** -- Iteration 1 -- -int(3) +bool(true) array(1) { [0]=> string(4) "YUIx" } -- Iteration 2 -- -int(4) +bool(true) array(1) { [0]=> string(8) "YUJjRA==" } -- Iteration 3 -- -int(4) +bool(true) array(1) { [0]=> string(8) "YWIvPQ==" } -- Iteration 4 -- -int(2) +bool(true) array(1) { [0]=> string(4) "IAk=" } -- Iteration 5 -- -int(3) +bool(true) array(1) { [0]=> string(4) "MjM0" } -- Iteration 6 -- -int(9) +bool(true) array(1) { [0]=> string(12) "5pel5pys6Kqe" } -- Iteration 7 -- -int(4) +bool(true) array(1) { [0]=> string(8) "Zmpkcw==" } -- Iteration 8 -- -int(9) +bool(true) array(1) { [0]=> string(12) "5pel5pys6Kqe" } -- Iteration 9 -- -int(5) +bool(true) array(1) { [0]=> string(8) "LiEiKkA=" } -- Iteration 10 -- -int(1) +bool(true) array(1) { [0]=> string(4) "CQ==" } -- Iteration 11 -- -int(5) +bool(true) array(1) { [0]=> string(8) "SURTSlY=" } -- Iteration 12 -- -int(4) +bool(true) array(1) { [0]=> string(8) "M2I1RA==" diff --git a/ext/mbstring/tests/mb_ereg_variation4.phpt b/ext/mbstring/tests/mb_ereg_variation4.phpt index 07c61971ddfd0..7883361ce9cd0 100644 --- a/ext/mbstring/tests/mb_ereg_variation4.phpt +++ b/ext/mbstring/tests/mb_ereg_variation4.phpt @@ -72,21 +72,21 @@ echo "Done"; *** Testing mb_ereg() : usage variations *** -- Iteration 1 -- -int(47) +bool(true) array(1) { [0]=> string(64) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJk=" } -- Iteration 2 -- -int(27) +bool(true) array(1) { [0]=> string(36) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ" } -- Iteration 3 -- -int(5) +bool(true) array(1) { [0]=> string(8) "MDEyMzQ=" @@ -99,14 +99,14 @@ bool(false) bool(false) -- Iteration 6 -- -int(20) +bool(true) array(1) { [0]=> string(28) "MDEyMzTvvJXvvJbvvJfvvJjvvJk=" } -- Iteration 7 -- -int(50) +bool(true) array(1) { [0]=> string(68) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" @@ -116,14 +116,14 @@ array(1) { bool(false) -- Iteration 9 -- -int(50) +bool(true) array(1) { [0]=> string(68) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" } -- Iteration 10 -- -int(3) +bool(true) array(1) { [0]=> string(4) "44CC" @@ -136,7 +136,7 @@ bool(false) bool(false) -- Iteration 13 -- -int(5) +bool(true) array(1) { [0]=> string(8) "MDEyMzQ=" diff --git a/ext/mbstring/tests/mb_ereg_variation5.phpt b/ext/mbstring/tests/mb_ereg_variation5.phpt index 31fd50d97cf34..fd08e56993b4b 100644 --- a/ext/mbstring/tests/mb_ereg_variation5.phpt +++ b/ext/mbstring/tests/mb_ereg_variation5.phpt @@ -59,17 +59,17 @@ function base64_encode_var_dump($regs) { --EXPECT-- *** Testing mb_ereg() : usage variations *** -ASCII String without $regs arg: int(1) +ASCII String without $regs arg: bool(true) ASCII String with $regs arg: -int(38) +bool(true) array(1) { [0]=> string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4=" } -Multibyte String without $regs arg: int(1) +Multibyte String without $regs arg: bool(true) Multubyte String with $regs arg: -int(53) +bool(true) array(1) { [0]=> string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" diff --git a/ext/mbstring/tests/mb_ereg_variation6.phpt b/ext/mbstring/tests/mb_ereg_variation6.phpt index dc91aef209660..ec1a70c536de5 100644 --- a/ext/mbstring/tests/mb_ereg_variation6.phpt +++ b/ext/mbstring/tests/mb_ereg_variation6.phpt @@ -78,13 +78,13 @@ Regex encoding set to utf-8 --** Pattern is: \w+ **-- -- ASCII String: -- -int(4) +bool(true) array(1) { [0]=> string(8) "VGhpcw==" } -- Multibyte String: -- -int(27) +bool(true) array(1) { [0]=> string(36) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ" @@ -92,13 +92,13 @@ array(1) { --** Pattern is: \W+ **-- -- ASCII String: -- -int(1) +bool(true) array(1) { [0]=> string(4) "IA==" } -- Multibyte String: -- -int(3) +bool(true) array(1) { [0]=> string(4) "44CC" @@ -106,7 +106,7 @@ array(1) { --** Pattern is: \s+ **-- -- ASCII String: -- -int(1) +bool(true) array(1) { [0]=> string(4) "IA==" @@ -117,13 +117,13 @@ NULL --** Pattern is: \S+ **-- -- ASCII String: -- -int(4) +bool(true) array(1) { [0]=> string(8) "VGhpcw==" } -- Multibyte String: -- -int(53) +bool(true) array(1) { [0]=> string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" @@ -131,13 +131,13 @@ array(1) { --** Pattern is: \d+ **-- -- ASCII String: -- -int(10) +bool(true) array(1) { [0]=> string(16) "MDEyMzQ1Njc4OQ==" } -- Multibyte String: -- -int(20) +bool(true) array(1) { [0]=> string(28) "MDEyMzTvvJXvvJbvvJfvvJjvvJk=" @@ -145,13 +145,13 @@ array(1) { --** Pattern is: \D+ **-- -- ASCII String: -- -int(27) +bool(true) array(1) { [0]=> string(36) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4g" } -- Multibyte String: -- -int(30) +bool(true) array(1) { [0]=> string(40) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC" @@ -159,13 +159,13 @@ array(1) { --** Pattern is: \b **-- -- ASCII String: -- -int(1) +bool(true) array(1) { [0]=> bool(false) } -- Multibyte String: -- -int(1) +bool(true) array(1) { [0]=> bool(false) @@ -173,13 +173,13 @@ array(1) { --** Pattern is: \B **-- -- ASCII String: -- -int(1) +bool(true) array(1) { [0]=> bool(false) } -- Multibyte String: -- -int(1) +bool(true) array(1) { [0]=> bool(false) diff --git a/ext/mbstring/tests/mb_ereg_variation7.phpt b/ext/mbstring/tests/mb_ereg_variation7.phpt index 76e6dce08f10e..d54011f9f8d79 100644 --- a/ext/mbstring/tests/mb_ereg_variation7.phpt +++ b/ext/mbstring/tests/mb_ereg_variation7.phpt @@ -60,7 +60,7 @@ echo "Done"; --EXPECT-- *** Testing mb_ereg() : usage variations *** Regex encoding set to utf-8 -int(38) +bool(true) array(5) { [0]=> string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4=" @@ -73,7 +73,7 @@ array(5) { [4]=> string(4) "ODk=" } -int(64) +bool(true) array(5) { [0]=> string(88) "zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==" diff --git a/ext/mbstring/tests/mb_eregi.phpt b/ext/mbstring/tests/mb_eregi.phpt index ced6fadcdf839..a12ab70116e12 100644 --- a/ext/mbstring/tests/mb_eregi.phpt +++ b/ext/mbstring/tests/mb_eregi.phpt @@ -15,6 +15,6 @@ var_dump(mb_eregi('xyzp', 'XYZ')); var_dump(mb_eregi('ö', 'Öäü')); ?> --EXPECT-- -int(1) +bool(true) bool(false) -int(1) +bool(true) diff --git a/ext/mbstring/tests/mb_internal_encoding_variation2.phpt b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt index df38a9876b8d4..ccf06802ba4c9 100644 --- a/ext/mbstring/tests/mb_internal_encoding_variation2.phpt +++ b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt @@ -50,10 +50,6 @@ $encoding = array('UCS-4', /*1*/ 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', /*35*/ - 'byte2be', - 'byte2le', - 'byte4be', - 'byte4le', 'BASE64', /*40*/ 'HTML-ENTITIES', '7bit', @@ -263,104 +259,84 @@ string(11) "ISO-8859-15" -- Iteration 36 -- string(11) "ISO-8859-15" bool(true) -string(7) "byte2be" - --- Iteration 37 -- -string(7) "byte2be" -bool(true) -string(7) "byte2le" - --- Iteration 38 -- -string(7) "byte2le" -bool(true) -string(7) "byte4be" - --- Iteration 39 -- -string(7) "byte4be" -bool(true) -string(7) "byte4le" - --- Iteration 40 -- -string(7) "byte4le" -bool(true) string(6) "BASE64" --- Iteration 41 -- +-- Iteration 37 -- string(6) "BASE64" bool(true) string(13) "HTML-ENTITIES" --- Iteration 42 -- +-- Iteration 38 -- string(13) "HTML-ENTITIES" bool(true) string(4) "7bit" --- Iteration 43 -- +-- Iteration 39 -- string(4) "7bit" bool(true) string(4) "8bit" --- Iteration 44 -- +-- Iteration 40 -- string(4) "8bit" bool(true) string(6) "EUC-CN" --- Iteration 45 -- +-- Iteration 41 -- string(6) "EUC-CN" bool(true) string(5) "CP936" --- Iteration 46 -- +-- Iteration 42 -- string(5) "CP936" bool(true) string(2) "HZ" --- Iteration 47 -- +-- Iteration 43 -- string(2) "HZ" bool(true) string(6) "EUC-TW" --- Iteration 48 -- +-- Iteration 44 -- string(6) "EUC-TW" bool(true) string(5) "CP950" --- Iteration 49 -- +-- Iteration 45 -- string(5) "CP950" bool(true) string(5) "BIG-5" --- Iteration 50 -- +-- Iteration 46 -- string(5) "BIG-5" bool(true) string(6) "EUC-KR" --- Iteration 51 -- +-- Iteration 47 -- string(6) "EUC-KR" bool(true) string(3) "UHC" --- Iteration 52 -- +-- Iteration 48 -- string(3) "UHC" bool(true) string(11) "ISO-2022-KR" --- Iteration 53 -- +-- Iteration 49 -- string(11) "ISO-2022-KR" bool(true) string(12) "Windows-1251" --- Iteration 54 -- +-- Iteration 50 -- string(12) "Windows-1251" bool(true) string(12) "Windows-1252" --- Iteration 55 -- +-- Iteration 51 -- string(12) "Windows-1252" bool(true) string(5) "CP866" --- Iteration 56 -- +-- Iteration 52 -- string(5) "CP866" bool(true) string(6) "KOI8-R" diff --git a/ext/mbstring/tests/mbregex_stack_limit.phpt b/ext/mbstring/tests/mbregex_stack_limit.phpt index ccd763e2b5022..ade2f1e288bb1 100644 --- a/ext/mbstring/tests/mbregex_stack_limit.phpt +++ b/ext/mbstring/tests/mbregex_stack_limit.phpt @@ -26,5 +26,5 @@ echo 'OK'; --EXPECT-- bool(false) bool(false) -int(1) +bool(true) OK diff --git a/ext/mbstring/tests/retry_limit.phpt b/ext/mbstring/tests/retry_limit.phpt index 2da9010f8e337..251e5111efb7c 100644 --- a/ext/mbstring/tests/retry_limit.phpt +++ b/ext/mbstring/tests/retry_limit.phpt @@ -19,5 +19,5 @@ var_dump(mb_ereg($regex, $str)); ?> --EXPECT-- -int(1) +bool(true) bool(false) diff --git a/ext/mbstring/tests/sjis2004_encoding.phpt b/ext/mbstring/tests/sjis2004_encoding.phpt new file mode 100644 index 0000000000000..cf9ef7a91a79a --- /dev/null +++ b/ext/mbstring/tests/sjis2004_encoding.phpt @@ -0,0 +1,62 @@ +--TEST-- +Exhaustive test of SJIS-2004 encoding verification and conversion +--SKIPIF-- + +--FILE-- + UTF-32BE string */ +$fromUnicode = array(); /* UTF-16BE -> SJIS-2004 */ +$fp = fopen(__DIR__ . '/data/SJIS-2004.txt', 'r+'); +while ($line = fgets($fp, 256)) { + if ($line[0] == '#') + continue; + + $codepoint2 = null; + if (sscanf($line, "0x%x\tU+%x+%x", $bytes, $codepoint1, $codepoint2) >= 2) { + $sjis = ($bytes < 256) ? chr($bytes) : pack('n', $bytes); + if ($codepoint2) { + $validChars[$sjis] = pack('NN', $codepoint1, $codepoint2); + } else { + /* Two input byte sequences can translate to either a 'halfwidth' or a + * 'fullwidth' version of a character; our implementation of SJIS-2004 + * translates them to the fullwidth versions */ + if (preg_match('/Fullwidth: U\+([0-9A-F]+)/', $line, $match)) + $codepoint1 = hexdec($match[1]); + $validChars[$sjis] = pack('N', $codepoint1); + if ($codepoint1 <= 0xFFFF) + $fromUnicode[pack('n', $codepoint1)] = $sjis; + } + } +} +$fromUnicode["\x00\x7E"] = "\x7E"; /* Not reversible; SJIS 0x7E -> U+203E */ +$fromUnicode["\x00\x5C"] = "\x5C"; /* Not reversible; SJIS 0x5C -> U+00A5 */ + +testAllValidChars($validChars, 'SJIS-2004', 'UTF-32BE'); +echo "SJIS-2004 verification and conversion works for all valid characters\n"; + +findInvalidChars($validChars, $invalidChars, $truncated, + array_fill_keys(range(0x81, 0x9F), 2) + array_fill_keys(range(0xE0, 0xFC), 2)); +testAllInvalidChars($invalidChars, $validChars, 'SJIS-2004', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'SJIS-2004', 'UTF-32BE', "\x00\x00\x00%"); +echo "SJIS-2004 verification and conversion rejects all invalid characters\n"; + +testAllValidChars($fromUnicode, 'UTF-16BE', 'SJIS-2004', false); +echo "Unicode -> SJIS-2004 conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'SJIS-2004', '%'); +echo "Unicode -> SJIS-2004 conversion works on all invalid characters\n"; +?> +--EXPECT-- +SJIS-2004 verification and conversion works for all valid characters +SJIS-2004 verification and conversion rejects all invalid characters +Unicode -> SJIS-2004 conversion works on all valid characters +Unicode -> SJIS-2004 conversion works on all invalid characters diff --git a/ext/mbstring/tests/sjis_encoding.phpt b/ext/mbstring/tests/sjis_encoding.phpt new file mode 100644 index 0000000000000..a75ce85a4f81f --- /dev/null +++ b/ext/mbstring/tests/sjis_encoding.phpt @@ -0,0 +1,65 @@ +--TEST-- +Exhaustive test of Shift-JIS encoding verification and conversion +--SKIPIF-- + +--FILE-- + SJIS conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'Shift-JIS', '%'); +echo "Unicode -> SJIS conversion works on all invalid characters\n"; +?> +--EXPECT-- +SJIS verification and conversion works on all valid characters +SJIS verification and conversion works on all invalid characters +Unicode -> SJIS conversion works on all valid characters +Unicode -> SJIS conversion works on all invalid characters diff --git a/ext/mbstring/tests/sjismac_encoding.phpt b/ext/mbstring/tests/sjismac_encoding.phpt new file mode 100644 index 0000000000000..2dedfa7970572 --- /dev/null +++ b/ext/mbstring/tests/sjismac_encoding.phpt @@ -0,0 +1,85 @@ +--TEST-- +Exhaustive test of MacJapanese encoding verification and conversion +--SKIPIF-- + +--FILE-- + UTF-32BE string */ +$fromUnicode = array(); /* UTF-16BE -> MacJapanese */ +$fp = fopen(__DIR__ . '/data/MacJapanese-SJIS.txt', 'r+'); +while ($line = fgets($fp, 256)) { + if ($line[0] == '#') + continue; + + $cp1 = $cp2 = $cp3 = $cp4 = $cp5 = null; + if (sscanf($line, "0x%x\t0x%x+0x%x+0x%x+0x%x+0x%x", $bytes, $cp1, $cp2, $cp3, $cp4, $cp5) >= 2) { + if ($bytes < 256) { + $macJap = chr($bytes); + } else { + $macJap = pack('n', $bytes); + } + + if ($cp5) { + $validChars[$macJap] = pack('NNNNN', $cp1, $cp2, $cp3, $cp4, $cp5); + $fromUnicode[pack('nnnnn', $cp1, $cp2, $cp3, $cp4, $cp5)] = $macJap; + } else if ($cp4) { + $validChars[$macJap] = pack('NNNN', $cp1, $cp2, $cp3, $cp4); + $fromUnicode[pack('nnnn', $cp1, $cp2, $cp3, $cp4)] = $macJap; + } else if ($cp3) { + $validChars[$macJap] = pack('NNN', $cp1, $cp2, $cp3); + $fromUnicode[pack('nnn', $cp1, $cp2, $cp3)] = $macJap; + } else if ($cp2) { + $validChars[$macJap] = pack('NN', $cp1, $cp2); + $fromUnicode[pack('nn', $cp1, $cp2)] = $macJap; + } else { + $validChars[$macJap] = pack('N', $cp1); + $fromUnicode[pack('n', $cp1)] = $macJap; + } + } +} +/* Although not included in the table, 0x0-0x1F and 0x7F are valid; + * these are 'control characters' */ +for ($i = 0; $i < 0x20; $i++) { + $validChars[chr($i)] = pack('N', $i); + $fromUnicode[pack('n', $i)] = chr($i); +} +$validChars["\x7F"] = pack('N', 0x7F); +$fromUnicode["\x00\x7F"] = "\x7F"; + +/* While Shift-JIS 0x815C normally corresponds to U+2015 (HORIZONTAL BAR), + * for MacJapanese we convert 0x815C to U+2014 (EM DASH) + * (See recommendations in JAPANESE.txt from the Unicode Consortium, under + * 'Unicode mapping issues', point 3) + * However, when converting Unicode -> MacJapanese, we accept both U+2014 + * and U+2015 */ +$fromUnicode["\x20\x15"] = "\x81\x5C"; + +testAllValidChars($validChars, 'SJIS-mac', 'UTF-32BE'); +echo "MacJapanese verification and conversion works on all valid characters\n"; + +findInvalidChars($validChars, $invalidChars, $truncated, + array_fill_keys(range(0x81, 0x9F), 2) + array_fill_keys(range(0xE0, 0xED), 2)); +testAllInvalidChars($invalidChars, $validChars, 'SJIS-mac', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'SJIS-mac', 'UTF-32BE', "\x00\x00\x00%"); +echo "MacJapanese verification and conversion rejects all invalid characters\n"; + +testAllValidChars($fromUnicode, 'UTF-16BE', 'SJIS-mac', false); +echo "Unicode -> SJIS-mac conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'SJIS-mac', '%'); +echo "Unicode -> SJIS-mac conversion works on all invalid characters\n"; +?> +--EXPECT-- +MacJapanese verification and conversion works on all valid characters +MacJapanese verification and conversion rejects all invalid characters +Unicode -> SJIS-mac conversion works on all valid characters +Unicode -> SJIS-mac conversion works on all invalid characters diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 05ffffa926a10..55557da48898d 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -577,7 +577,6 @@ PHP_MINIT_FUNCTION(mysqli) zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); zend_declare_property_null(ce, "driver_version", sizeof("driver_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "embedded", sizeof("embedded") - 1, ZEND_ACC_PUBLIC); zend_declare_property_null(ce, "reconnect", sizeof("reconnect") - 1, ZEND_ACC_PUBLIC); zend_declare_property_null(ce, "report_mode", sizeof("report_mode") - 1, ZEND_ACC_PUBLIC); ce->ce_flags |= ZEND_ACC_FINAL; @@ -1200,16 +1199,9 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags fci.param_count = 0; fci.named_params = NULL; - if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) { + if (ctor_params) { if (zend_fcall_info_args(&fci, ctor_params) == FAILURE) { - /* Two problems why we throw exceptions here: PHP is typeless - * and hence passing one argument that's not an array could be - * by mistake and the other way round is possible, too. The - * single value is an array. Also we'd have to make that one - * argument passed by reference. - */ - zend_argument_error(zend_ce_exception, 3, "must be of type array, %s given", zend_zval_type_name(ctor_params)); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } } @@ -1223,8 +1215,11 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags zval_ptr_dtor(&retval); } zend_fcall_info_args_clear(&fci, 1); - } else if (ctor_params) { - zend_throw_exception_ex(zend_ce_exception, 0, "Class %s does not have a constructor hence you cannot use ctor_params", ZSTR_VAL(ce->name)); + } else if (ctor_params && zend_hash_num_elements(Z_ARRVAL_P(ctor_params)) > 0) { + zend_argument_error(zend_ce_exception, ERROR_ARG_POS(3), + "must be empty when the specified class (%s) does not have a constructor", + ZSTR_VAL(ce->name) + ); } } } diff --git a/ext/mysqli/mysqli.stub.php b/ext/mysqli/mysqli.stub.php index 5c7ae9bf987f3..c1059254fc14f 100644 --- a/ext/mysqli/mysqli.stub.php +++ b/ext/mysqli/mysqli.stub.php @@ -9,7 +9,7 @@ final class mysqli_driver class mysqli { public function __construct( - ?string $host = null, + ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, @@ -56,9 +56,10 @@ public function commit(int $flags = -1, ?string $name = null) {} /** * @return mysqli|null|false * @alias mysqli_connect + * @no-verify */ public function connect( - ?string $host = null, + ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, @@ -75,6 +76,7 @@ public function dump_debug_info() {} /** * @return bool * @alias mysqli_debug + * @no-verify Should really be a static method */ public function debug(string $options) {} @@ -112,7 +114,6 @@ public function get_warnings() {} /** * @return mysqli|false - * @alias mysqli_init_method */ public function init() {} @@ -171,7 +172,7 @@ public function query(string $query, int $result_mode = MYSQLI_STORE_RESULT) {} * @alias mysqli_real_connect */ public function real_connect( - ?string $host = null, + ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, @@ -363,7 +364,7 @@ public function fetch_assoc() {} * @return object|null * @alias mysqli_fetch_object */ - public function fetch_object(string $class = "stdClass", array $params = []) {} + public function fetch_object(string $class = "stdClass", array $constructor_args = []) {} /** * @return array|null @@ -535,7 +536,7 @@ function mysqli_close(mysqli $mysql): bool {} function mysqli_commit(mysqli $mysql, int $flags = -1, ?string $name = null): bool {} function mysqli_connect( - ?string $host = null, + ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, @@ -551,7 +552,7 @@ function mysqli_data_seek(mysqli_result $result, int $offset): bool {} function mysqli_dump_debug_info(mysqli $mysql): bool {} -function mysqli_debug(string $debug): bool {} +function mysqli_debug(string $options): bool {} function mysqli_errno(mysqli $mysql): int {} @@ -559,16 +560,16 @@ function mysqli_error(mysqli $mysql): ?string {} function mysqli_error_list(mysqli $mysql): array {} -function mysqli_stmt_execute(mysqli_stmt $stmt): bool {} +function mysqli_stmt_execute(mysqli_stmt $statement): bool {} /** @alias mysqli_stmt_execute */ -function mysqli_execute(mysqli_stmt $stmt): bool {} +function mysqli_execute(mysqli_stmt $statement): bool {} function mysqli_fetch_field(mysqli_result $result): object|false {} function mysqli_fetch_fields(mysqli_result $result): array {} -function mysqli_fetch_field_direct(mysqli_result $result, int $offset): object|false {} +function mysqli_fetch_field_direct(mysqli_result $result, int $index): object|false {} function mysqli_fetch_lengths(mysqli_result $result): array|false {} @@ -580,7 +581,7 @@ function mysqli_fetch_array(mysqli_result $result, int $mode = MYSQLI_BOTH): arr function mysqli_fetch_assoc(mysqli_result $result): ?array {} -function mysqli_fetch_object(mysqli_result $result, string $class = "stdClass", array $params = []): ?object {} +function mysqli_fetch_object(mysqli_result $result, string $class = "stdClass", array $constructor_args = []): ?object {} function mysqli_fetch_row(mysqli_result $result): ?array {} @@ -651,7 +652,7 @@ function mysqli_query(mysqli $mysql, string $query, int $result_mode = MYSQLI_ST function mysqli_real_connect( mysqli $mysql, - ?string $host = null, + ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, @@ -678,63 +679,63 @@ function mysqli_select_db(mysqli $mysql, string $database): bool {} function mysqli_set_charset(mysqli $mysql, string $charset): bool {} -function mysqli_stmt_affected_rows(mysqli_stmt $stmt): int|string {} +function mysqli_stmt_affected_rows(mysqli_stmt $statement): int|string {} -function mysqli_stmt_attr_get(mysqli_stmt $stmt, int $attribute): int {} +function mysqli_stmt_attr_get(mysqli_stmt $statement, int $attribute): int {} -function mysqli_stmt_attr_set(mysqli_stmt $stmt, int $attribute, int $value): bool {} +function mysqli_stmt_attr_set(mysqli_stmt $statement, int $attribute, int $value): bool {} -function mysqli_stmt_bind_param(mysqli_stmt $stmt, string $types, mixed &...$vars): bool {} +function mysqli_stmt_bind_param(mysqli_stmt $statement, string $types, mixed &...$vars): bool {} -function mysqli_stmt_bind_result(mysqli_stmt $stmt, mixed &...$vars): bool {} +function mysqli_stmt_bind_result(mysqli_stmt $statement, mixed &...$vars): bool {} -function mysqli_stmt_close(mysqli_stmt $stmt): bool {} +function mysqli_stmt_close(mysqli_stmt $statement): bool {} -function mysqli_stmt_data_seek(mysqli_stmt $stmt, int $offset): void {} +function mysqli_stmt_data_seek(mysqli_stmt $statement, int $offset): void {} -function mysqli_stmt_errno(mysqli_stmt $stmt): int {} +function mysqli_stmt_errno(mysqli_stmt $statement): int {} -function mysqli_stmt_error(mysqli_stmt $stmt): ?string {} +function mysqli_stmt_error(mysqli_stmt $statement): ?string {} -function mysqli_stmt_error_list(mysqli_stmt $stmt): array {} +function mysqli_stmt_error_list(mysqli_stmt $statement): array {} -function mysqli_stmt_fetch(mysqli_stmt $stmt): ?bool {} +function mysqli_stmt_fetch(mysqli_stmt $statement): ?bool {} -function mysqli_stmt_field_count(mysqli_stmt $stmt): int {} +function mysqli_stmt_field_count(mysqli_stmt $statement): int {} -function mysqli_stmt_free_result(mysqli_stmt $stmt): void {} +function mysqli_stmt_free_result(mysqli_stmt $statement): void {} #if defined(MYSQLI_USE_MYSQLND) -function mysqli_stmt_get_result(mysqli_stmt $stmt): mysqli_result|false {} +function mysqli_stmt_get_result(mysqli_stmt $statement): mysqli_result|false {} #endif -function mysqli_stmt_get_warnings(mysqli_stmt $stmt): mysqli_warning|false {} +function mysqli_stmt_get_warnings(mysqli_stmt $statement): mysqli_warning|false {} function mysqli_stmt_init(mysqli $mysql): mysqli_stmt|false {} -function mysqli_stmt_insert_id(mysqli_stmt $stmt): int|string {} +function mysqli_stmt_insert_id(mysqli_stmt $statement): int|string {} #if defined(MYSQLI_USE_MYSQLND) -function mysqli_stmt_more_results(mysqli_stmt $stmt): bool {} +function mysqli_stmt_more_results(mysqli_stmt $statement): bool {} -function mysqli_stmt_next_result(mysqli_stmt $stmt): bool {} +function mysqli_stmt_next_result(mysqli_stmt $statement): bool {} #endif -function mysqli_stmt_num_rows(mysqli_stmt $stmt): int|string {} +function mysqli_stmt_num_rows(mysqli_stmt $statement): int|string {} -function mysqli_stmt_param_count(mysqli_stmt $stmt): int {} +function mysqli_stmt_param_count(mysqli_stmt $statement): int {} -function mysqli_stmt_prepare(mysqli_stmt $stmt, string $query): bool {} +function mysqli_stmt_prepare(mysqli_stmt $statement, string $query): bool {} -function mysqli_stmt_reset(mysqli_stmt $stmt): bool {} +function mysqli_stmt_reset(mysqli_stmt $statement): bool {} -function mysqli_stmt_result_metadata(mysqli_stmt $stmt): mysqli_result|false {} +function mysqli_stmt_result_metadata(mysqli_stmt $statement): mysqli_result|false {} -function mysqli_stmt_send_long_data(mysqli_stmt $stmt, int $param_num, string $data): bool {} +function mysqli_stmt_send_long_data(mysqli_stmt $statement, int $param_num, string $data): bool {} -function mysqli_stmt_store_result(mysqli_stmt $stmt): bool {} +function mysqli_stmt_store_result(mysqli_stmt $statement): bool {} -function mysqli_stmt_sqlstate(mysqli_stmt $stmt): ?string {} +function mysqli_stmt_sqlstate(mysqli_stmt $statement): ?string {} function mysqli_sqlstate(mysqli $mysql): ?string {} diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 91915809428a0..d1e0634dc7a9a 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -169,6 +169,7 @@ PHP_FUNCTION(mysqli_autocommit) MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_autocommit(mysql->mysql, (my_bool)automode)) { + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } RETURN_TRUE; @@ -708,6 +709,7 @@ PHP_FUNCTION(mysqli_commit) #else if (FAIL == mysqlnd_commit(mysql->mysql, flags, name)) { #endif + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } RETURN_TRUE; @@ -1070,7 +1072,8 @@ void mysqli_stmt_fetch_mysqlnd(INTERNAL_FUNCTION_PARAMETERS) } MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); - if (FAIL == mysqlnd_stmt_fetch(stmt->stmt, &fetched_anything)) { + if (FAIL == mysqlnd_stmt_fetch(stmt->stmt, &fetched_anything)) { + MYSQLI_REPORT_STMT_ERROR(stmt->stmt); RETURN_BOOL(FALSE); } else if (fetched_anything == TRUE) { RETURN_BOOL(TRUE); @@ -1482,13 +1485,6 @@ PHP_FUNCTION(mysqli_init) } /* }}} */ -/* {{{ Initialize mysqli and return a resource for use with mysql_real_connect */ -PHP_FUNCTION(mysqli_init_method) -{ - php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE); -} -/* }}} */ - /* {{{ Get the ID generated from the previous INSERT operation */ PHP_FUNCTION(mysqli_insert_id) { @@ -1556,7 +1552,11 @@ PHP_FUNCTION(mysqli_next_result) { } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - RETURN_BOOL(!mysql_next_result(mysql->mysql)); + if (mysql_next_result(mysql->mysql)) { + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); + RETURN_FALSE; + } + RETURN_TRUE; } /* }}} */ @@ -1587,7 +1587,11 @@ PHP_FUNCTION(mysqli_stmt_next_result) { } MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); - RETURN_BOOL(!mysql_stmt_next_result(stmt->stmt)); + if (mysql_stmt_next_result(stmt->stmt)) { + MYSQLI_REPORT_STMT_ERROR(stmt->stmt); + RETURN_FALSE; + } + RETURN_TRUE; } /* }}} */ #endif @@ -1927,6 +1931,7 @@ PHP_FUNCTION(mysqli_rollback) #else if (FAIL == mysqlnd_rollback(mysql->mysql, flags, name)) { #endif + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } RETURN_TRUE; @@ -2297,6 +2302,7 @@ PHP_FUNCTION(mysqli_stmt_attr_set) #else if (FAIL == mysql_stmt_attr_set(stmt->stmt, attr, mode_p)) { #endif + MYSQLI_REPORT_STMT_ERROR(stmt->stmt); RETURN_FALSE; } RETURN_TRUE; diff --git a/ext/mysqli/mysqli_arginfo.h b/ext/mysqli/mysqli_arginfo.h index 2666df942e374..509840a7fc57d 100644 --- a/ext/mysqli/mysqli_arginfo.h +++ b/ext/mysqli/mysqli_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7687edcf18fa03c0ae95ac4b3d32c196790ba65e */ + * Stub hash: 480939b71e1dacbdbb4634dbabf375943e399b6f */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_affected_rows, 0, 1, MAY_BE_LONG|MAY_BE_STRING) ZEND_ARG_OBJ_INFO(0, mysql, mysqli, 0) @@ -38,7 +38,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_commit, 0, 1, _IS_BOOL, 0 ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_connect, 0, 0, mysqli, MAY_BE_NULL|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, host, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, hostname, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, username, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, database, IS_STRING, 1, "null") @@ -60,7 +60,7 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_dump_debug_info arginfo_mysqli_close ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_debug, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, debug, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, options, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_errno, 0, 1, IS_LONG, 0) @@ -74,7 +74,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_error_list, 0, 1, IS_ARRA ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_execute, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() #define arginfo_mysqli_execute arginfo_mysqli_stmt_execute @@ -89,7 +89,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_fetch_field_direct, 0, 2, MAY_BE_OBJECT|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, result, mysqli_result, 0) - ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_fetch_lengths, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -115,7 +115,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_fetch_object, 0, 1, IS_OBJECT, 1) ZEND_ARG_OBJ_INFO(0, result, mysqli_result, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "\"stdClass\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, constructor_args, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() #define arginfo_mysqli_fetch_row arginfo_mysqli_fetch_assoc @@ -235,7 +235,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_real_connect, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, mysql, mysqli, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, host, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, hostname, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, username, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, database, IS_STRING, 1, "null") @@ -277,68 +277,68 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_set_charset, 0, 2, _IS_BO ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_stmt_affected_rows, 0, 1, MAY_BE_LONG|MAY_BE_STRING) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_attr_get, 0, 2, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_attr_set, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, attribute, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_bind_param, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, types, IS_STRING, 0) ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_bind_result, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0) ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_close arginfo_mysqli_stmt_execute ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_data_seek, 0, 2, IS_VOID, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_errno, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_error, 0, 1, IS_STRING, 1) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_error_list, 0, 1, IS_ARRAY, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_fetch, 0, 1, _IS_BOOL, 1) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_field_count arginfo_mysqli_stmt_errno ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_free_result, 0, 1, IS_VOID, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() #if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_get_result, 0, 1, mysqli_result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_get_warnings, 0, 1, mysqli_warning, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_init, 0, 1, mysqli_stmt, MAY_BE_FALSE) @@ -349,7 +349,7 @@ ZEND_END_ARG_INFO() #if defined(MYSQLI_USE_MYSQLND) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_more_results, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() #endif @@ -362,18 +362,18 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_param_count arginfo_mysqli_stmt_errno ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_prepare, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_mysqli_stmt_reset arginfo_mysqli_stmt_execute ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_stmt_result_metadata, 0, 1, mysqli_result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_send_long_data, 0, 3, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, stmt, mysqli_stmt, 0) + ZEND_ARG_OBJ_INFO(0, statement, mysqli_stmt, 0) ZEND_ARG_TYPE_INFO(0, param_num, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -423,7 +423,7 @@ ZEND_END_ARG_INFO() #define arginfo_mysqli_set_opt arginfo_mysqli_options ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli___construct, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, host, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, hostname, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, username, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, database, IS_STRING, 1, "null") @@ -511,7 +511,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_query, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_real_connect, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, host, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, hostname, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, username, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, database, IS_STRING, 1, "null") @@ -614,7 +614,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_result_fetch_object, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "\"stdClass\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, constructor_args, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() #define arginfo_class_mysqli_result_fetch_row arginfo_class_mysqli_character_set_name @@ -811,7 +811,7 @@ ZEND_FUNCTION(mysqli_use_result); ZEND_FUNCTION(mysqli_warning_count); ZEND_FUNCTION(mysqli_refresh); ZEND_METHOD(mysqli, __construct); -ZEND_FUNCTION(mysqli_init_method); +ZEND_METHOD(mysqli, init); ZEND_METHOD(mysqli_result, __construct); ZEND_METHOD(mysqli_result, getIterator); ZEND_METHOD(mysqli_stmt, __construct); @@ -967,7 +967,7 @@ static const zend_function_entry class_mysqli_methods[] = { #endif ZEND_ME_MAPPING(get_server_info, mysqli_get_server_info, arginfo_class_mysqli_get_server_info, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(get_warnings, mysqli_get_warnings, arginfo_class_mysqli_get_warnings, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(init, mysqli_init_method, arginfo_class_mysqli_init, ZEND_ACC_PUBLIC) + ZEND_ME(mysqli, init, arginfo_class_mysqli_init, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(kill, mysqli_kill, arginfo_class_mysqli_kill, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(multi_query, mysqli_multi_query, arginfo_class_mysqli_multi_query, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(more_results, mysqli_more_results, arginfo_class_mysqli_more_results, ZEND_ACC_PUBLIC) diff --git a/ext/mysqli/mysqli_driver.c b/ext/mysqli/mysqli_driver.c index c40ff00583137..c3fb5e48bb8a3 100644 --- a/ext/mysqli/mysqli_driver.c +++ b/ext/mysqli/mysqli_driver.c @@ -78,16 +78,6 @@ static int driver_report_write(mysqli_object *obj, zval *value) } /* }}} */ -/* {{{ property driver_embedded_read */ -static int driver_embedded_read(mysqli_object *obj, zval *retval, zend_bool quiet) -{ - /* No longer supported */ - ZVAL_FALSE(retval); - - return SUCCESS; -} -/* }}} */ - /* {{{ property driver_client_version_read */ static int driver_client_version_read(mysqli_object *obj, zval *retval, zend_bool quiet) { @@ -135,7 +125,6 @@ const mysqli_property_entry mysqli_driver_property_entries[] = { {"client_info", sizeof("client_info") - 1, driver_client_info_read, NULL}, {"client_version", sizeof("client_version") - 1, driver_client_version_read, NULL}, {"driver_version", sizeof("driver_version") - 1, driver_driver_version_read, NULL}, - {"embedded", sizeof("embedded") - 1, driver_embedded_read, NULL}, {"reconnect", sizeof("reconnect") - 1, driver_reconnect_read, driver_reconnect_write}, {"report_mode", sizeof("report_mode") - 1, driver_report_read, driver_report_write}, {NULL, 0, NULL, NULL} diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 5bbb1d38888cd..364638c44a077 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -383,6 +383,13 @@ PHP_METHOD(mysqli, __construct) mysqli_common_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE, TRUE); } +/* {{{ Initialize mysqli and return a resource for use with mysql_real_connect */ +PHP_METHOD(mysqli, init) +{ + php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE); +} +/* }}} */ + /* {{{ Returns the numerical value of the error message from last connect command */ PHP_FUNCTION(mysqli_connect_errno) { @@ -733,7 +740,7 @@ static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_ar MYSQLI_RESOURCE *my_res; mysqli_object *intern = Z_MYSQLI_P(elem); if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) { - zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name)); + zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name)); return FAILURE; } mysql = (MY_MYSQL*) my_res->ptr; @@ -754,12 +761,11 @@ static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_a MYSQLND **p = in_array; zval dest_array; zval *elem, *dest_elem; - int ret = 0, i = 0; + int ret = 0; array_init_size(&dest_array, zend_hash_num_elements(Z_ARRVAL_P(out_array))); ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(out_array), elem) { - i++; if (Z_TYPE_P(elem) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(elem), mysqli_link_class_entry)) { continue; @@ -769,8 +775,8 @@ static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_a MYSQLI_RESOURCE *my_res; mysqli_object *intern = Z_MYSQLI_P(elem); if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) { - php_error_docref(NULL, E_WARNING, "[%d] Couldn't fetch %s", i, ZSTR_VAL(intern->zo.ce->name)); - continue; + zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name)); + return FAILURE; } mysql = (MY_MYSQL *) my_res->ptr; if (mysql->mysql == *p) { @@ -860,6 +866,7 @@ PHP_FUNCTION(mysqli_poll) if (e_array != NULL) { if (mysqlnd_zval_array_to_mysqlnd_array(e_array, &new_e_array) == FAILURE) { efree(new_e_array); + efree(new_r_array); RETURN_THROWS(); } } @@ -1160,7 +1167,7 @@ PHP_FUNCTION(mysqli_begin_transaction) zval *mysql_link; zend_long flags = TRANS_START_NO_OPT; char * name = NULL; - size_t name_len = -1; + size_t name_len = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ls!", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { RETURN_THROWS(); @@ -1170,7 +1177,7 @@ PHP_FUNCTION(mysqli_begin_transaction) zend_argument_value_error(ERROR_ARG_POS(2), "must be one of the MYSQLI_TRANS_* constants"); RETURN_THROWS(); } - if (!name_len) { + if (name && !name_len) { zend_argument_value_error(ERROR_ARG_POS(3), "cannot be empty"); RETURN_THROWS(); } diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c index c99b3df5df894..7b1552e5ace47 100644 --- a/ext/mysqli/mysqli_warning.c +++ b/ext/mysqli/mysqli_warning.c @@ -201,7 +201,7 @@ static int mysqli_warning_message(mysqli_object *obj, zval *retval, zend_bool qu if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { if (!quiet) { - zend_throw_error(NULL, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); + zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); } return FAILURE; @@ -221,7 +221,7 @@ static int mysqli_warning_sqlstate(mysqli_object *obj, zval *retval, zend_bool q if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { if (!quiet) { - zend_throw_error(NULL, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); + zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); } return FAILURE; @@ -241,7 +241,7 @@ static int mysqli_warning_errno(mysqli_object *obj, zval *retval, zend_bool quie if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { if (!quiet) { - zend_throw_error(NULL, "Couldn't fetch %s", ZSTR_VAL(obj->zo.ce->name)); + zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(obj->zo.ce->name)); } return FAILURE; diff --git a/ext/mysqli/tests/073.phpt b/ext/mysqli/tests/073.phpt index 496beed114f43..c03cb2236d1ed 100644 --- a/ext/mysqli/tests/073.phpt +++ b/ext/mysqli/tests/073.phpt @@ -6,7 +6,6 @@ mysqli_driver properties embedded); var_dump($driver->client_version); var_dump($driver->client_info); var_dump($driver->driver_version); @@ -15,7 +14,6 @@ mysqli_driver properties print "done!"; ?> --EXPECTF-- -bool(false) int(%d) string(%d) "%s" int(%d) diff --git a/ext/mysqli/tests/bug79375.phpt b/ext/mysqli/tests/bug79375.phpt new file mode 100644 index 0000000000000..6c6176311daa3 --- /dev/null +++ b/ext/mysqli/tests/bug79375.phpt @@ -0,0 +1,172 @@ +--TEST-- +Bug #79375: mysqli_store_result does not report error from lock wait timeout +--SKIPIF-- + +--FILE-- +query('DROP TABLE IF EXISTS test'); +$mysqli->query('CREATE TABLE test (first int) ENGINE = InnoDB'); +$mysqli->query('INSERT INTO test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)'); + +function testStmtStoreResult(mysqli $mysqli, string $name) { + $mysqli->query("SET innodb_lock_wait_timeout = 1"); + $mysqli->query("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $stmt = $mysqli->prepare($query); + $stmt->execute(); + try { + $stmt->store_result(); + echo "Got {$stmt->num_rows} for $name\n"; + } catch(mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; + } +} +function testStmtGetResult(mysqli $mysqli, string $name) { + $mysqli->query("SET innodb_lock_wait_timeout = 1"); + $mysqli->query("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $stmt = $mysqli->prepare($query); + $stmt->execute(); + try { + $res = $stmt->get_result(); + echo "Got {$res->num_rows} for $name\n"; + } catch(mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; + } +} +function testNormalQuery(mysqli $mysqli, string $name) { + $mysqli->query("SET innodb_lock_wait_timeout = 1"); + $mysqli->query("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + try { + $res = $mysqli->query($query); + echo "Got {$res->num_rows} for $name\n"; + } catch(mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; + } +} +function testStmtUseResult(mysqli $mysqli, string $name) { + $mysqli->query("SET innodb_lock_wait_timeout = 1"); + $mysqli->query("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $stmt = $mysqli->prepare($query); + $stmt->execute(); + try { + $stmt->fetch(); // should throw an error + $stmt->fetch(); + echo "Got {$stmt->num_rows} for $name\n"; + } catch (mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; + } +} +function testResultFetchRow(mysqli $mysqli, string $name) { + $mysqli->query("SET innodb_lock_wait_timeout = 1"); + $mysqli->query("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $res = $mysqli->query($query, MYSQLI_USE_RESULT); + try { + $res->fetch_row(); + $res->fetch_row(); + echo "Got {$res->num_rows} for $name\n"; + } catch(mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; + } +} + +testStmtStoreResult($mysqli, 'first connection'); +testStmtStoreResult($mysqli2, 'second connection'); + +$mysqli->close(); +$mysqli2->close(); + +echo "\n"; +// try it again for get_result +$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket); +$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket); + +testStmtGetResult($mysqli, 'first connection'); +testStmtGetResult($mysqli2, 'second connection'); + +$mysqli->close(); +$mysqli2->close(); + +echo "\n"; +// try it again with unprepared query +$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket); +$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket); + +testNormalQuery($mysqli, 'first connection'); +testNormalQuery($mysqli2, 'second connection'); + +$mysqli->close(); +$mysqli2->close(); + +echo "\n"; +// try it again with unprepared query +$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket); +$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket); + +testStmtUseResult($mysqli, 'first connection'); +testStmtUseResult($mysqli2, 'second connection'); + +$mysqli->close(); +$mysqli2->close(); + +echo "\n"; +// try it again using fetch_row on a result object +$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket); +$mysqli2 = new my_mysqli($host, $user, $passwd, $db, $port, $socket); + +testResultFetchRow($mysqli, 'first connection'); +testResultFetchRow($mysqli2, 'second connection'); + +$mysqli->close(); +$mysqli2->close(); + +?> +--CLEAN-- + +--EXPECTF-- +Running query on first connection +Got %d for first connection +Running query on second connection +Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got %d for first connection +Running query on second connection +Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got %d for first connection +Running query on second connection +Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got %d for first connection +Running query on second connection +Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got 1 for first connection +Running query on second connection + +Warning: mysqli_result::fetch_row(): Error while reading a row in %s on line %d +Got 0 for second connection diff --git a/ext/mysqli/tests/mysqli_change_user_new.phpt b/ext/mysqli/tests/mysqli_change_user_new.phpt index bff89fb8ddd96..d36f667314f52 100644 --- a/ext/mysqli/tests/mysqli_change_user_new.phpt +++ b/ext/mysqli/tests/mysqli_change_user_new.phpt @@ -11,6 +11,9 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) if (mysqli_get_server_version($link) < 50600) die("SKIP For MySQL >= 5.6.0"); + +if (mysqli_get_server_version($link) >= 10_00_00) + die("SKIP Not applicable for MariaDB"); ?> --FILE-- = 50600) +if (mysqli_get_server_version($link) >= 50600 && mysqli_get_server_version($link) < 10_00_00) die("SKIP For MySQL < 5.6.0"); ?> --FILE-- @@ -102,10 +102,14 @@ if (mysqli_get_server_version($link) >= 50600) mysqli_close($link); - if (false !== ($tmp = @mysqli_change_user($link, $user, $passwd, $db))) - printf("[026] Expecting false, got %s/%s\n", gettype($tmp), $tmp); + try { + mysqli_change_user($link, $user, $passwd, $db); + } catch (Error $exception) { + echo $exception->getMessage() . "\n"; + } print "done!"; ?> --EXPECT-- +mysqli object is already closed done! diff --git a/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt index 65b60367da3bb..55fd3be47ee8b 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt @@ -72,9 +72,6 @@ require_once('skipifconnectfailure.inc'); $driver->report_mode = MYSQLI_REPORT_STRICT; assert($driver->report_mode === MYSQLI_REPORT_STRICT); - assert(is_bool($driver->embedded)); - printf("driver->embedded = '%s'\n", $driver->embedded); - printf("driver->reconnect = '%s'\n", $driver->reconnect); printf("\nAccess to undefined properties:\n"); @@ -93,7 +90,6 @@ Class variables: client_info client_version driver_version -embedded reconnect report_mode @@ -101,7 +97,6 @@ Object variables: client_info client_version driver_version -embedded reconnect report_mode @@ -110,7 +105,6 @@ driver->client_info = '%s' driver->client_version = '%d' driver->driver_version = '%d' driver->report_mode = '%d' -driver->embedded = '' driver->reconnect = '' Access to undefined properties: diff --git a/ext/mysqli/tests/mysqli_driver.phpt b/ext/mysqli/tests/mysqli_driver.phpt index 9af4f22f1fc7e..4ef41e355c59a 100644 --- a/ext/mysqli/tests/mysqli_driver.phpt +++ b/ext/mysqli/tests/mysqli_driver.phpt @@ -102,10 +102,6 @@ require_once('skipifconnectfailure.inc'); $driver->reconnect = false; $driver->reconnect = $reconnect; - if (!is_bool($embedded = $driver->embedded)) - printf("[020] Expecting boolean/any, got %s/%s\n", - gettype($embedded), $embedded); - print "done!"; ?> --EXPECTF-- diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt index 4a4d240be3721..6959090b78689 100644 --- a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt +++ b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt @@ -44,7 +44,7 @@ require_once('skipifconnectfailure.inc'); require_once("clean_table.inc"); ?> --EXPECTF-- -mysqli_fetch_field_direct(): Argument #2 ($offset) must be greater than or equal to 0 +mysqli_fetch_field_direct(): Argument #2 ($index) must be greater than or equal to 0 object(stdClass)#%d (13) { ["name"]=> string(2) "ID" @@ -73,6 +73,6 @@ object(stdClass)#%d (13) { ["decimals"]=> int(%d) } -mysqli_fetch_field_direct(): Argument #2 ($offset) must be less than the number of fields for this result set +mysqli_fetch_field_direct(): Argument #2 ($index) must be less than the number of fields for this result set mysqli_result object is already closed done! diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt index f5708ac55853d..8076311112ce2 100644 --- a/ext/mysqli/tests/mysqli_fetch_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object.phpt @@ -147,6 +147,6 @@ Exception: Too few arguments to function mysqli_fetch_object_construct::__constr NULL NULL mysqli_result object is already closed -[0] mysqli_fetch_object(): Argument #3 ($params) must be of type array, string given in %s on line %d +[0] mysqli_fetch_object(): Argument #3 ($constructor_args) must be of type array, string given in %s on line %d mysqli_fetch_object(): Argument #2 ($class) must be a valid class name, this_class_does_not_exist given done! diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt index 979c523199716..5d823648c71c4 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt @@ -57,7 +57,7 @@ object(mysqli_fetch_object_test)#%d (%d) { } Exception with mysqli. Note that at all other places we throws errors but no exceptions unless the error mode has been changed: -Exception: Class mysqli_fetch_object_test does not have a constructor hence you cannot use ctor_params +Exception: mysqli_fetch_object(): Argument #3 ($constructor_args) must be empty when the specified class (mysqli_fetch_object_test) does not have a constructor Fatal error with PHP (but no exception!): diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt index f402db82d87b3..c541ad2d044bc 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -73,14 +73,9 @@ require_once('skipifconnectfailure.inc'); } try { - $obj = $res->fetch_object('mysqli_fetch_object_construct', null); - - if (($obj->ID !== "3") || ($obj->label !== "c") || ($obj->a !== NULL) || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_construct')) { - printf("[009] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error); - var_dump($obj); - } - } catch (Error $e) { - handle_catchable_fatal($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); + $res->fetch_object('mysqli_fetch_object_construct', null); + } catch (TypeError $exception) { + echo $exception->getMessage() . "\n"; mysqli_fetch_object($res); } @@ -134,7 +129,7 @@ require_once('skipifconnectfailure.inc'); mysqli object is not fully initialized [0] Object of class mysqli could not be converted to string in %s on line %d [0] mysqli_result::fetch_object() expects at most 2 arguments, 3 given in %s on line %d -[0] mysqli_result::fetch_object(): Argument #2 ($params) must be of type array, null given in %s on line %d +mysqli_result::fetch_object(): Argument #2 ($constructor_args) must be of type array, null given Exception: Too few arguments to function mysqli_fetch_object_construct::__construct(), 1 passed and exactly 2 expected NULL NULL diff --git a/ext/mysqli/tests/mysqli_next_result_error.phpt b/ext/mysqli/tests/mysqli_next_result_error.phpt new file mode 100644 index 0000000000000..4118bd0eab0bd --- /dev/null +++ b/ext/mysqli/tests/mysqli_next_result_error.phpt @@ -0,0 +1,67 @@ +--TEST-- +Error in multi query +--SKIPIF-- + +--FILE-- +multi_query("SELECT 1; SELECT 2; Syntax Error"); + +try { + do { + if ($res = $mysqli->store_result()) { + var_dump($res->fetch_all(MYSQLI_ASSOC)); + $res->free(); + } + } while ($mysqli->more_results() && $mysqli->next_result()); +} catch (mysqli_sql_exception $e) { + echo $e->getMessage(), "\n"; +} + +$mysqli->query("DROP PROCEDURE IF EXISTS p"); +$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT 1; SELECT foobar FROM table_that_does_not_exist; END;'); + +$stmt = $mysqli->prepare("CALL p()"); +$stmt->execute(); + +try { + do { + $stmt->bind_result($num); + while ($stmt->fetch()) { + echo "num = $num\n"; + } + } while ($stmt->more_results() && $stmt->next_result()); +} catch (mysqli_sql_exception $e) { + echo $e->getMessage(), "\n"; +} + +$mysqli->query("DROP PROCEDURE IF EXISTS p"); + +?> +--EXPECTF-- +array(1) { + [0]=> + array(1) { + [1]=> + string(1) "1" + } +} +array(1) { + [0]=> + array(1) { + [2]=> + string(1) "2" + } +} +You have an error in your SQL syntax; %s +num = 1 +Table '%s.table_that_does_not_exist' doesn't exist diff --git a/ext/mysqli/tests/mysqli_poll.phpt b/ext/mysqli/tests/mysqli_poll.phpt index 7ff77f71c8e90..615c027d68482 100644 --- a/ext/mysqli/tests/mysqli_poll.phpt +++ b/ext/mysqli/tests/mysqli_poll.phpt @@ -40,6 +40,14 @@ if (!$IS_MYSQLND) echo $e->getMessage() . \PHP_EOL; } + $link->close(); + $read[0] = get_connection(); + try { + mysqli_poll($read, $error, $reject, 0, 1); + } catch (\Error $e) { + echo $e->getMessage() . \PHP_EOL; + } + function poll_async($offset, $link, $links, $errors, $reject, $exp_ready, $use_oo_syntax) { if ($exp_ready !== ($tmp = mysqli_poll($links, $errors, $reject, 0, 1000))) @@ -116,6 +124,7 @@ if (!$IS_MYSQLND) --EXPECTF-- mysqli_poll(): Argument #4 ($seconds) must be greater than or equal to 0 mysqli_poll(): Argument #5 ($microseconds) must be greater than or equal to 0 +mysqli object is already closed [012 + 6] Rejecting thread %d: 0/ [013 + 6] Rejecting thread %d: 0/ [014 + 6] Rejecting thread %d: 0/ diff --git a/ext/mysqli/tests/mysqli_report.phpt b/ext/mysqli/tests/mysqli_report.phpt index dda3c3ec734b2..840c2c017a0cc 100644 --- a/ext/mysqli/tests/mysqli_report.phpt +++ b/ext/mysqli/tests/mysqli_report.phpt @@ -49,6 +49,20 @@ require_once('skipifconnectfailure.inc'); printf("[009] select_db should have failed\n"); // mysqli_store_result() and mysqli_use_result() cannot be tested, because one would need to cause an error inside the C function to test it + mysqli_multi_query($link, "SELECT 1; FOO;"); + mysqli_autocommit($link, true); + mysqli_commit($link); + mysqli_rollback($link); + $stmt = mysqli_stmt_init($link); + mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?"); + while(mysqli_more_results($link)) { + mysqli_next_result($link); + $res = mysqli_store_result($link); + } + mysqli_next_result($link); + + $stmt = mysqli_prepare($link, "SELECT 1"); + mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE); // Check that none of the above would have caused any error messages if MYSQL_REPORT_ERROR would // not have been set. If that would be the case, the test would be broken. @@ -65,6 +79,21 @@ require_once('skipifconnectfailure.inc'); mysqli_real_query($link, "FOO"); mysqli_select_db($link, "Oh lord, let this be an unknown database name"); + mysqli_multi_query($link, "SELECT 1; FOO;"); + mysqli_autocommit($link, true); + mysqli_commit($link); + mysqli_rollback($link); + $stmt = mysqli_stmt_init($link); + mysqli_stmt_prepare($stmt, "SELECT id FROM test WHERE id > ?"); + while(mysqli_more_results($link)) { + mysqli_next_result($link); + $res = mysqli_store_result($link); + } + mysqli_next_result($link); + + $stmt = mysqli_prepare($link, "SELECT 1"); + mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE); + /* Internal macro MYSQL_REPORT_STMT_ERROR */ @@ -292,6 +321,24 @@ mysqli_kill(): Argument #2 ($process_id) must be greater than 0 Warning: mysqli_prepare(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d Warning: mysqli_real_query(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d + +Warning: mysqli_autocommit(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d + +Warning: mysqli_commit(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d + +Warning: mysqli_rollback(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d + +Warning: mysqli_stmt_prepare(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d + +Warning: mysqli_next_result(): (%s/%d): Commands out of sync; you can't run this command now in %s on line %d + +Warning: mysqli_next_result(): (%s/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d + +Warning: mysqli_store_result(): (%s/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d + +Warning: mysqli_next_result(): (%s/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d + +Warning: mysqli_stmt_attr_set(): (%s/%d): Not implemented in %s on line %d mysqli_kill(): Argument #2 ($process_id) must be greater than 0 Warning: mysqli_stmt_prepare(): (%d/%d): You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'FOO' at line 1 in %s on line %d diff --git a/ext/mysqli/tests/mysqli_stmt_get_result.phpt b/ext/mysqli/tests/mysqli_stmt_get_result.phpt index 2dee92d9ae9d3..74b15dfae3b05 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result.phpt @@ -109,53 +109,84 @@ if (!function_exists('mysqli_stmt_get_result')) mysqli_stmt_close($stmt); + // get_result cannot be used in PS cursor mode if (!$stmt = mysqli_stmt_init($link)) - printf("[032] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2")) + printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + if (!mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY)) + printf("[032] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + if (!mysqli_stmt_execute($stmt)) printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); + try { + $res = mysqli_stmt_get_result($stmt); + // we expect no segfault if we try to fetch a row because get_result should throw an error or return false + mysqli_fetch_assoc($res); + } catch (\mysqli_sql_exception $e) { + echo $e->getMessage() . "\n"; + } + + try { + $res = $stmt->get_result(); + // we expect no segfault if we try to fetch a row because get_result should throw an error or return false + $res->fetch_assoc(); + } catch (\mysqli_sql_exception $e) { + echo $e->getMessage() . "\n"; + } + mysqli_report(MYSQLI_REPORT_OFF); + + if (!$stmt = mysqli_stmt_init($link)) + printf("[034] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2")) + printf("[035] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + if (!mysqli_stmt_execute($stmt)) - printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); $id = NULL; $label = NULL; if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label))) - printf("[035] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1)); + printf("[037] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1)); if (!is_object($tmp = $result = mysqli_stmt_get_result($stmt))) - printf("[036] Expecting array, got %s/%s, [%d] %s\n", + printf("[038] Expecting array, got %s/%s, [%d] %s\n", gettype($tmp), var_export($tmp, 1), mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); if (false !== ($tmp = mysqli_stmt_fetch($stmt))) - printf("[037] Expecting boolean/false, got %s/%s, [%d] %s\n", + printf("[039] Expecting boolean/false, got %s/%s, [%d] %s\n", gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); - printf("[038] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); - printf("[039] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link)); + printf("[040] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + printf("[041] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link)); while ($row = mysqli_fetch_assoc($result)) { var_dump($row); } mysqli_free_result($result); - if (!mysqli_kill($link, mysqli_thread_id($link))) - printf("[040] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + if (!mysqli_kill($link, mysqli_thread_id($link))) + printf("[042] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); - if (false !== ($tmp = mysqli_stmt_get_result($stmt))) - printf("[041] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1)); + if (false !== ($tmp = mysqli_stmt_get_result($stmt))) + printf("[043] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1)); - mysqli_stmt_close($stmt); + mysqli_stmt_close($stmt); - try { + try { mysqli_stmt_fetch($stmt); } catch (Error $exception) { - echo $exception->getMessage() . "\n"; + echo $exception->getMessage(), "\n"; } - mysqli_close($link); + mysqli_close($link); - print "done!"; + print "done!"; ?> --CLEAN-- int(1) diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 2415b91a3b837..55da87fdf0b60 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -109,7 +109,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s) } /* Position at the first row */ set->data_cursor = set->data; - } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_ZVAL) { + } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_C) { /*TODO*/ } @@ -119,9 +119,11 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s) stmt->state = MYSQLND_STMT_USE_OR_STORE_CALLED; } else { COPY_CLIENT_ERROR(conn->error_info, result->stored_data->error_info); + COPY_CLIENT_ERROR(stmt->error_info, result->stored_data->error_info); stmt->result->m.free_result_contents(stmt->result); stmt->result = NULL; stmt->state = MYSQLND_STMT_PREPARED; + DBG_RETURN(NULL); } DBG_RETURN(result); @@ -149,13 +151,19 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s) } if (stmt->cursor_exists) { - /* Silently convert buffered to unbuffered, for now */ - DBG_RETURN(s->m->use_result(s)); + /* Prepared statement cursors are not supported as of yet */ + char * msg; + mnd_sprintf(&msg, 0, "%s() cannot be used with cursors", get_active_function_name()); + SET_CLIENT_ERROR(stmt->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, msg); + if (msg) { + mnd_sprintf_free(msg); + } + DBG_RETURN(NULL); } /* Nothing to store for UPSERT/LOAD DATA*/ if (GET_CONNECTION_STATE(&conn->state) != CONN_FETCHING_DATA || stmt->state != MYSQLND_STMT_WAITING_USE_OR_STORE) { - SET_CLIENT_ERROR(conn->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE, mysqlnd_out_of_sync); + SET_CLIENT_ERROR(stmt->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE, mysqlnd_out_of_sync); DBG_RETURN(NULL); } @@ -176,7 +184,7 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const s) break; } - if ((result = result->m.store_result(result, conn, MYSQLND_STORE_PS | MYSQLND_STORE_NO_COPY))) { + if (result->m.store_result(result, conn, MYSQLND_STORE_PS | MYSQLND_STORE_NO_COPY)) { UPSERT_STATUS_SET_AFFECTED_ROWS(stmt->upsert_status, result->stored_data->row_count); stmt->state = MYSQLND_STMT_PREPARED; result->type = MYSQLND_RES_PS_BUF; @@ -407,6 +415,7 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const s, const char * const ret = conn->command->stmt_prepare(conn, query_string); if (FAIL == ret) { + COPY_CLIENT_ERROR(stmt->error_info, *conn->error_info); goto fail; } } @@ -879,9 +888,13 @@ mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES * result, void * param, const unsi } else if (ret == FAIL) { if (row_packet->error_info.error_no) { COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info); - COPY_CLIENT_ERROR(stmt->error_info, row_packet->error_info); + if (stmt) { + COPY_CLIENT_ERROR(stmt->error_info, row_packet->error_info); + } + } + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); } - SET_CONNECTION_STATE(&conn->state, CONN_READY); result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { DBG_INF("EOF"); diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 25f0e8215a157..28761aeb0a286 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -741,7 +741,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info); DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error); } - SET_CONNECTION_STATE(&conn->state, CONN_READY); + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); + } result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { /* Mark the connection as usable again */ @@ -879,7 +881,9 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void COPY_CLIENT_ERROR(conn->error_info, row_packet->error_info); DBG_ERR_FMT("errorno=%u error=%s", row_packet->error_info.error_no, row_packet->error_info.error); } - SET_CONNECTION_STATE(&conn->state, CONN_READY); + if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) { + SET_CONNECTION_STATE(&conn->state, CONN_READY); + } result->unbuf->eof_reached = TRUE; /* so next time we won't get an error */ } else if (row_packet->eof) { /* Mark the connection as usable again */ @@ -905,7 +909,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void result->memory_pool->checkpoint = checkpoint; DBG_INF_FMT("ret=%s fetched=%u", ret == PASS? "PASS":"FAIL", *fetched_anything); - DBG_RETURN(PASS); + DBG_RETURN(ret); } /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 515526d11df58..e11d42d8bd6f8 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -1351,6 +1351,15 @@ php_mysqlnd_rset_field_read(MYSQLND_CONN_DATA * conn, void * _packet) } /* }}} */ +/* Like SET_CLIENT_ERROR, but for packet error_info. The type is the same, + * but only some parts of it are used. */ +static void set_packet_error( + MYSQLND_ERROR_INFO *info, unsigned err_no, const char *sqlstate, const char *error) +{ + info->error_no = err_no; + strlcpy(info->sqlstate, sqlstate, sizeof(info->sqlstate)); + strlcpy(info->error, error, sizeof(info->error)); +} /* {{{ php_mysqlnd_read_row_ex */ static enum_func_status @@ -1358,6 +1367,7 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc, MYSQLND_VIO * vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info, + MYSQLND_CONNECTION_STATE * connection_state, MYSQLND_MEMORY_POOL * pool, MYSQLND_ROW_BUFFER * buffer, size_t * const data_size) @@ -1386,6 +1396,8 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc, *data_size = 0; if (UNEXPECTED(FAIL == mysqlnd_read_header(pfc, vio, &header, stats, error_info))) { ret = FAIL; + SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT); + set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone); } else { *data_size += header.size; buffer->ptr = pool->get_chunk(pool, *data_size + prealloc_more_bytes); @@ -1393,7 +1405,8 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc, if (UNEXPECTED(PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info)))) { DBG_ERR("Empty row packet body"); - php_error(E_WARNING, "Empty row packet body"); + SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT); + set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone); } else { while (header.size >= MYSQLND_MAX_PACKET_SIZE) { if (FAIL == mysqlnd_read_header(pfc, vio, &header, stats, error_info)) { @@ -1422,7 +1435,8 @@ php_mysqlnd_read_row_ex(MYSQLND_PFC * pfc, if (PASS != (ret = pfc->data->m.receive(pfc, vio, p, header.size, stats, error_info))) { DBG_ERR("Empty row packet body"); - php_error(E_WARNING, "Empty row packet body"); + SET_CONNECTION_STATE(connection_state, CONN_QUIT_SENT); + set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone); break; } } @@ -1713,8 +1727,8 @@ php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_ROW_BUFFER * row_buffer, zval * fi static enum_func_status php_mysqlnd_rowp_read(MYSQLND_CONN_DATA * conn, void * _packet) { - MYSQLND_PACKET_ROW *packet= (MYSQLND_PACKET_ROW *) _packet; - MYSQLND_ERROR_INFO * error_info = conn->error_info; + MYSQLND_PACKET_ROW *packet = (MYSQLND_PACKET_ROW *) _packet; + MYSQLND_ERROR_INFO * error_info = &packet->error_info; MYSQLND_PFC * pfc = conn->protocol_frame_codec; MYSQLND_VIO * vio = conn->vio; MYSQLND_STATS * stats = conn->stats; @@ -1724,7 +1738,7 @@ php_mysqlnd_rowp_read(MYSQLND_CONN_DATA * conn, void * _packet) DBG_ENTER("php_mysqlnd_rowp_read"); - ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info, + ret = php_mysqlnd_read_row_ex(pfc, vio, stats, error_info, &conn->state, packet->result_set_memory_pool, &packet->row_buffer, &data_size); if (FAIL == ret) { goto end; diff --git a/ext/oci8/oci8.stub.php b/ext/oci8/oci8.stub.php index 419df17be0956..ee8ea98b5430b 100644 --- a/ext/oci8/oci8.stub.php +++ b/ext/oci8/oci8.stub.php @@ -2,534 +2,468 @@ /** @generate-function-entries */ -/** @param resource $statement_resource */ -function oci_define_by_name($statement_resource, string $column_name, mixed &$variable, int $type = 0): bool {} +/** @param resource $statement */ +function oci_define_by_name($statement, string $column, mixed &$var, int $type = 0): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_define_by_name * @deprecated */ -function ocidefinebyname($statement_resource, string $column_name, mixed &$variable, int $type = 0): bool {} +function ocidefinebyname($statement, string $column, mixed &$var, int $type = 0): bool {} -/** @param resource $statement_resource */ -function oci_bind_by_name($statement_resource, string $column_name, mixed &$variable, int $maximum_length = -1, int $type = 0): bool {} +/** @param resource $statement */ +function oci_bind_by_name($statement, string $param, mixed &$var, int $max_length = -1, int $type = 0): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_bind_by_name * @deprecated */ -function ocibindbyname($statement_resource, string $column_name, mixed &$variable, int $maximum_length = -1, int $type = 0): bool {} +function ocibindbyname($statement, string $param, mixed &$var, int $max_length = -1, int $type = 0): bool {} -/** @param resource $statement_resource */ -function oci_bind_array_by_name($statement_resource, string $column_name, mixed &$variable, int $maximum_array_length, int $maximum_item_length = -1, int $type = SQLT_AFC): bool {} +/** @param resource $statement */ +function oci_bind_array_by_name($statement, string $param, mixed &$var, int $max_array_length, int $max_item_length = -1, int $type = SQLT_AFC): bool {} -function oci_free_descriptor(OCILob $lob_descriptor): bool {} +function oci_free_descriptor(OCILob $lob): bool {} /** * @alias oci_free_descriptor * @deprecated */ -function ocifreedesc(OCILob $lob_descriptor): bool {} +function ocifreedesc(OCILob $lob): bool {} -function oci_lob_save(OCILob $lob_descriptor, string $data, int $offset = 0): bool {} +function oci_lob_save(OCILob $lob, string $data, int $offset = 0): bool {} /** * @alias oci_lob_save * @deprecated */ -function ocisavelob(OCILob $lob_descriptor, string $data, int $offset = 0): bool {} +function ocisavelob(OCILob $lob, string $data, int $offset = 0): bool {} -function oci_lob_import(OCILob $lob_descriptor, string $filename): bool {} +function oci_lob_import(OCILob $lob, string $filename): bool {} /** * @alias oci_lob_import * @deprecated */ -function ocisavelobfile(OCILob $lob_descriptor, string $filename): bool {} +function ocisavelobfile(OCILob $lob, string $filename): bool {} -function oci_lob_load(OCILob $lob_descriptor): string|false {} +function oci_lob_load(OCILob $lob): string|false {} /** * @alias oci_lob_load * @deprecated */ -function ociloadlob(OCILob $lob_descriptor): string|false {} +function ociloadlob(OCILob $lob): string|false {} -function oci_lob_read(OCILob $lob_descriptor, int $length): string|false {} +function oci_lob_read(OCILob $lob, int $length): string|false {} -function oci_lob_eof(OCILob $lob_descriptor): bool {} +function oci_lob_eof(OCILob $lob): bool {} -function oci_lob_tell(OCILob $lob_descriptor): int|false {} +function oci_lob_tell(OCILob $lob): int|false {} -function oci_lob_rewind(OCILob $lob_descriptor): bool {} +function oci_lob_rewind(OCILob $lob): bool {} -function oci_lob_seek(OCILob $lob_descriptor, int $offset, int $whence = OCI_SEEK_SET): bool {} +function oci_lob_seek(OCILob $lob, int $offset, int $whence = OCI_SEEK_SET): bool {} -function oci_lob_size(OCILob $lob_descriptor): int|false {} +function oci_lob_size(OCILob $lob): int|false {} -function oci_lob_write(OCILob $lob_descriptor, string $string, ?int $length = null): int|false {} +function oci_lob_write(OCILob $lob, string $data, ?int $length = null): int|false {} -function oci_lob_append(OCILob $lob_descriptor_to, OCILob $lob_descriptor_from): bool {} +function oci_lob_append(OCILob $to, OCILob $from): bool {} -function oci_lob_truncate(OCILob $lob_descriptor, int $length = 0): bool {} +function oci_lob_truncate(OCILob $lob, int $length = 0): bool {} -function oci_lob_erase(OCILob $lob_descriptor, ?int $offset = null, ?int $length = null): int|false {} +function oci_lob_erase(OCILob $lob, ?int $offset = null, ?int $length = null): int|false {} -function oci_lob_flush(OCILob $lob_descriptor, int $flag = 0): bool {} +function oci_lob_flush(OCILob $lob, int $flag = 0): bool {} -function ocisetbufferinglob(OCILob $lob_descriptor, bool $mode): bool {} +function ocisetbufferinglob(OCILob $lob, bool $mode): bool {} -function ocigetbufferinglob(OCILob $lob_descriptor): bool {} +function ocigetbufferinglob(OCILob $lob): bool {} -function oci_lob_copy(OCILob $lob_descriptor_to, OCILob $lob_descriptor_from, ?int $length = null): bool {} +function oci_lob_copy(OCILob $to, OCILob $from, ?int $length = null): bool {} -function oci_lob_is_equal(OCILob $lob_descriptor_first, OCILob $lob_descriptor_second): bool {} +function oci_lob_is_equal(OCILob $lob1, OCILob $lob2): bool {} -function oci_lob_export(OCILob $lob_descriptor, string $filename, ?int $start = null, ?int $length = null): bool {} +function oci_lob_export(OCILob $lob, string $filename, ?int $offset = null, ?int $length = null): bool {} /** * @alias oci_lob_export * @deprecated */ -function ociwritelobtofile(OCILob $lob_descriptor, string $filename, ?int $start = null, ?int $length = null): bool {} +function ociwritelobtofile(OCILob $lob, string $filename, ?int $offset = null, ?int $length = null): bool {} -/** - * @param resource $connection_resource - */ -function oci_new_descriptor($connection_resource, int $type = OCI_DTYPE_LOB): ?OCILob {} +/** @param resource $connection */ +function oci_new_descriptor($connection, int $type = OCI_DTYPE_LOB): ?OCILob {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_new_descriptor * @deprecated */ -function ocinewdescriptor($connection_resource, int $type = OCI_DTYPE_LOB): ?OCILob {} +function ocinewdescriptor($connection, int $type = OCI_DTYPE_LOB): ?OCILob {} -/** - * @param resource $connection_resource - */ -function oci_rollback($connection_resource): bool {} +/** @param resource $connection */ +function oci_rollback($connection): bool {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_rollback * @deprecated */ -function ocirollback($connection_resource): bool {} +function ocirollback($connection): bool {} -/** - * @param resource $connection_resource - */ -function oci_commit($connection_resource): bool {} +/** @param resource $connection */ +function oci_commit($connection): bool {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_commit * @deprecated */ -function ocicommit($connection_resource): bool {} +function ocicommit($connection): bool {} -/** - * @param resource $statement_resource - */ -function oci_field_name($statement_resource, string|int $column_number_or_name): string|false {} +/** @param resource $statement */ +function oci_field_name($statement, string|int $column): string|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_name * @deprecated */ -function ocicolumnname($statement_resource, string|int $column_number_or_name): string|false {} +function ocicolumnname($statement, string|int $column): string|false {} -/** - * @param resource $statement_resource - */ -function oci_field_size($statement_resource, string|int $column_number_or_name): int|false {} +/** @param resource $statement */ +function oci_field_size($statement, string|int $column): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_size * @deprecated */ -function ocicolumnsize($statement_resource, string|int $column_number_or_name): int|false {} +function ocicolumnsize($statement, string|int $column): int|false {} -/** - * @param resource $statement_resource - */ -function oci_field_scale($statement_resource, string|int $column_number_or_name): int|false {} +/** @param resource $statement */ +function oci_field_scale($statement, string|int $column): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_scale * @deprecated */ -function ocicolumnscale($statement_resource, string|int $column_number_or_name): int|false {} +function ocicolumnscale($statement, string|int $column): int|false {} -/** - * @param resource $statement_resource - */ -function oci_field_precision($statement_resource, string|int $column_number_or_name): int|false {} +/** @param resource $statement */ +function oci_field_precision($statement, string|int $column): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_precision * @deprecated */ -function ocicolumnprecision($statement_resource, string|int $column_number_or_name): int|false {} +function ocicolumnprecision($statement, string|int $column): int|false {} -/** - * @param resource $statement_resource - */ -function oci_field_type($statement_resource, string|int $column_number_or_name): string|int|false {} +/** @param resource $statement */ +function oci_field_type($statement, string|int $column): string|int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_type * @deprecated */ -function ocicolumntype($statement_resource, string|int $column_number_or_name): string|int|false {} +function ocicolumntype($statement, string|int $column): string|int|false {} -/** - * @param resource $statement_resource - */ -function oci_field_type_raw($statement_resource, string|int $column_number_or_name): int|false {} +/** @param resource $statement */ +function oci_field_type_raw($statement, string|int $column): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_type_raw * @deprecated */ -function ocicolumntyperaw($statement_resource, string|int $column_number_or_name): int|false {} +function ocicolumntyperaw($statement, string|int $column): int|false {} -/** - * @param resource $statement_resource - */ -function oci_field_is_null($statement_resource, string|int $column_number_or_name): bool {} +/** @param resource $statement */ +function oci_field_is_null($statement, string|int $column): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_field_is_null * @deprecated */ -function ocicolumnisnull($statement_resource, string|int $column_number_or_name): bool {} +function ocicolumnisnull($statement, string|int $column): bool {} -/** - * @param resource $statement_resource - */ -function oci_execute($statement_resource, int $mode = OCI_COMMIT_ON_SUCCESS): bool {} +/** @param resource $statement */ +function oci_execute($statement, int $mode = OCI_COMMIT_ON_SUCCESS): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_execute * @deprecated */ -function ociexecute($statement_resource, int $mode = OCI_COMMIT_ON_SUCCESS): bool {} +function ociexecute($statement, int $mode = OCI_COMMIT_ON_SUCCESS): bool {} -/** - * @param resource $statement_resource - */ -function oci_cancel($statement_resource): bool {} +/** @param resource $statement */ +function oci_cancel($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_cancel * @deprecated */ -function ocicancel($statement_resource): bool {} +function ocicancel($statement): bool {} -/** - * @param resource $statement_resource - */ -function oci_fetch($statement_resource): bool {} +/** @param resource $statement */ +function oci_fetch($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_fetch * @deprecated */ -function ocifetch($statement_resource): bool {} +function ocifetch($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @param array $result * @deprecated */ -function ocifetchinto($statement_resource, &$result, int $mode = OCI_NUM): int|false {} +function ocifetchinto($statement, &$result, int $mode = OCI_NUM): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @param array $output */ -function oci_fetch_all($statement_resource, &$output, int $skip = 0, int $maximum_rows = -1, int $flags = 0): int {} +function oci_fetch_all($statement, &$output, int $offset = 0, int $limit = -1, int $flags = 0): int {} /** - * @param resource $statement_resource + * @param resource $statement * @param array $output * @alias oci_fetch_all * @deprecated */ -function ocifetchstatement($statement_resource, &$output, int $skip = 0, int $maximum_rows = -1, int $flags = 0): int {} +function ocifetchstatement($statement, &$output, int $offset = 0, int $limit = -1, int $flags = 0): int {} -/** - * @param resource $statement_resource - */ -function oci_fetch_object($statement_resource, int $mode = PHP_OCI_ASSOC | PHP_OCI_RETURN_NULLS): stdClass|null|false {} +/** @param resource $statement */ +function oci_fetch_object($statement, int $mode = PHP_OCI_ASSOC | PHP_OCI_RETURN_NULLS): stdClass|null|false {} -/** - * @param resource $statement_resource - */ -function oci_fetch_row($statement_resource): array|false {} +/** @param resource $statement */ +function oci_fetch_row($statement): array|false {} -/** - * @param resource $statement_resource - */ -function oci_fetch_assoc($statement_resource): array|false {} +/** @param resource $statement */ +function oci_fetch_assoc($statement): array|false {} -/** - * @param resource $statement_resource - */ -function oci_fetch_array($statement_resource, int $mode = PHP_OCI_BOTH | PHP_OCI_RETURN_NULLS): array|false {} +/** @param resource $statement */ +function oci_fetch_array($statement, int $mode = PHP_OCI_BOTH | PHP_OCI_RETURN_NULLS): array|false {} -/** - * @param resource $statement_resource - */ -function oci_free_statement($statement_resource): bool {} +/** @param resource $statement */ +function oci_free_statement($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_free_statement * @deprecated */ -function ocifreestatement($statement_resource): bool {} +function ocifreestatement($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_free_statement */ -function oci_free_cursor($statement_resource): bool {} +function oci_free_cursor($statement): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_free_statement * @deprecated */ -function ocifreecursor($statement_resource): bool {} +function ocifreecursor($statement): bool {} -/** - * @param resource $connection_resource - */ -function oci_close($connection_resource): ?bool {} +/** @param resource $connection */ +function oci_close($connection): ?bool {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_close * @deprecated */ -function ocilogoff($connection_resource): ?bool {} +function ocilogoff($connection): ?bool {} -/** - * @return resource|false - */ -function oci_new_connect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +/** @return resource|false */ +function oci_new_connect(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_new_connect * @deprecated */ -function ocinlogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +function ocinlogon(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false */ -function oci_connect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +function oci_connect(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_connect * @deprecated */ -function ocilogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +function ocilogon(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} -/** - * @return resource|false - */ -function oci_pconnect(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +/** @return resource|false */ +function oci_pconnect(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} /** * @return resource|false * @alias oci_pconnect * @deprecated */ -function ociplogon(string $username, string $password, ?string $connection_string = null, string $character_set = "", int $session_mode = OCI_DEFAULT) {} +function ociplogon(string $username, string $password, ?string $connection_string = null, string $encoding = "", int $session_mode = OCI_DEFAULT) {} -/** - * @param resource|null $connection_or_statement_resource - */ -function oci_error($connection_or_statement_resource = null): array|false {} +/** @param resource|null $connection_or_statement */ +function oci_error($connection_or_statement = null): array|false {} /** - * @param resource|null $connection_or_statement_resource + * @param resource|null $connection_or_statement * @alias oci_error * @deprecated */ -function ocierror($connection_or_statement_resource = null): array|false {} +function ocierror($connection_or_statement = null): array|false {} -/** - * @param resource $statement_resource - */ -function oci_num_fields($statement_resource): int {} +/** @param resource $statement */ +function oci_num_fields($statement): int {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_num_fields * @deprecated */ -function ocinumcols($statement_resource): int {} +function ocinumcols($statement): int {} /** - * @param resource $connection_resource + * @param resource $connection * @return resource|false */ -function oci_parse($connection_resource, string $sql_text) {} +function oci_parse($connection, string $sql) {} /** - * @param resource $connection_resource + * @param resource $connection * @return resource|false * @alias oci_parse * @deprecated */ -function ociparse($connection_resource, string $sql_text) {} +function ociparse($connection, string $sql) {} /** - * @param resource $statement_resource + * @param resource $statement * @return resource|false */ -function oci_get_implicit_resultset($statement_resource) {} +function oci_get_implicit_resultset($statement) {} -/** - * @param resource $statement_resource - */ -function oci_set_prefetch($statement_resource, int $number_of_rows): bool {} +/** @param resource $statement */ +function oci_set_prefetch($statement, int $rows): bool {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_set_prefetch * @deprecated */ -function ocisetprefetch($statement_resource, int $number_of_rows): bool {} +function ocisetprefetch($statement, int $rows): bool {} -/** - * @param resource $connection_resource - */ -function oci_set_client_identifier($connection_resource, string $client_identifier): bool {} +/** @param resource $connection */ +function oci_set_client_identifier($connection, string $client_id): bool {} -function oci_set_edition(string $edition_name): bool {} +function oci_set_edition(string $edition): bool {} -/** - * @param resource $connection_resource - */ -function oci_set_module_name($connection_resource, string $module_name): bool {} +/** @param resource $connection */ +function oci_set_module_name($connection, string $name): bool {} -/** - * @param resource $connection_resource - */ -function oci_set_action($connection_resource, string $action): bool {} +/** @param resource $connection */ +function oci_set_action($connection, string $action): bool {} /** - * @param resource $connection_resource + * @param resource $connection */ -function oci_set_client_info($connection_resource, string $client_information): bool {} +function oci_set_client_info($connection, string $client_info): bool {} -/** - * @param resource $connection_resource - */ -function oci_set_db_operation($connection_resource, string $action): bool {} +/** @param resource $connection */ +function oci_set_db_operation($connection, string $action): bool {} -/** - * @param resource $connection_resource - */ -function oci_set_call_timeout($connection_resource, int $call_timeout): bool {} +/** @param resource $connection */ +function oci_set_call_timeout($connection, int $timeout): bool {} /** - * @param resource|string $connection_resource_or_connection_string + * @param resource|string $connection * @return resource|bool */ -function oci_password_change($connection_resource_or_connection_string, string $username, string $old_password, string $new_password) {} +function oci_password_change($connection, string $username, string $old_password, string $new_password) {} /** - * @param resource|string $connection_resource_or_connection_string + * @param resource|string $connection * @return resource|bool * @alias oci_password_change * @deprecated */ -function ocipasswordchange($connection_resource_or_connection_string, string $username, string $old_password, string $new_password) {} +function ocipasswordchange($connection, string $username, string $old_password, string $new_password) {} /** - * @param resource $connection_resource + * @param resource $connection * @return resource|false */ -function oci_new_cursor($connection_resource) {} +function oci_new_cursor($connection) {} /** - * @param resource $connection_resource + * @param resource $connection * @return resource|false * @alias oci_new_cursor * @deprecated */ -function ocinewcursor($connection_resource) {} +function ocinewcursor($connection) {} -/** - * @param resource $statement_resource - */ -function oci_result($statement_resource, string|int $column_number_or_name): mixed {} +/** @param resource $statement */ +function oci_result($statement, string|int $column): mixed {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_result * @deprecated */ -function ociresult($statement_resource, string|int $column_number_or_name): mixed {} +function ociresult($statement, string|int $column): mixed {} function oci_client_version(): string {} -/** - * @param resource $connection_resource - */ -function oci_server_version($connection_resource): string|false {} +/** @param resource $connection */ +function oci_server_version($connection): string|false {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_server_version * @deprecated */ -function ociserverversion($connection_resource): string|false {} +function ociserverversion($connection): string|false {} -/** - * @param resource $statement_resource - */ -function oci_statement_type($statement_resource): string|false {} +/** @param resource $statement */ +function oci_statement_type($statement): string|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_statement_type * @deprecated */ -function ocistatementtype($statement_resource): string|false {} +function ocistatementtype($statement): string|false {} -/** - * @param resource $statement_resource - */ -function oci_num_rows($statement_resource): int|false {} +/** @param resource $statement */ +function oci_num_rows($statement): int|false {} /** - * @param resource $statement_resource + * @param resource $statement * @alias oci_num_rows * @deprecated */ -function ocirowcount($statement_resource): int|false {} +function ocirowcount($statement): int|false {} function oci_free_collection(OCICollection $collection): bool {} @@ -555,7 +489,7 @@ function oci_collection_element_get(OCICollection $collection, int $index): stri */ function ocicollgetelem(OCICollection $collection, int $index): string|float|null|false {} -function oci_collection_assign(OCICollection $collection_to, OCICollection $collection_from): bool {} +function oci_collection_assign(OCICollection $to, OCICollection $from): bool {} function oci_collection_element_assign(OCICollection $collection, int $index, string $value): bool {} @@ -581,35 +515,29 @@ function oci_collection_max(OCICollection $collection): int|false {} */ function ocicollmax(OCICollection $collection): int|false {} -function oci_collection_trim(OCICollection $collection, int $number): bool {} +function oci_collection_trim(OCICollection $collection, int $num): bool {} /** * @alias oci_collection_trim * @deprecated */ -function ocicolltrim(OCICollection $collection, int $number): bool {} +function ocicolltrim(OCICollection $collection, int $num): bool {} -/** - * @param resource $connection_resource - */ -function oci_new_collection($connection_resource, string $type_name, ?string $schema_name = null): OCICollection|false {} +/** @param resource $connection */ +function oci_new_collection($connection, string $type_name, ?string $schema = null): OCICollection|false {} /** - * @param resource $connection_resource + * @param resource $connection * @alias oci_new_collection * @deprecated */ -function ocinewcollection($connection_resource, string $type_name, ?string $schema_name = null): OCICollection|false {} +function ocinewcollection($connection, string $type_name, ?string $schema = null): OCICollection|false {} -/** - * @param resource $connection_resource - */ -function oci_register_taf_callback($connection_resource, ?callable $function_name): bool {} +/** @param resource $connection */ +function oci_register_taf_callback($connection, ?callable $callback): bool {} -/** - * @param resource $connection_resource - */ -function oci_unregister_taf_callback($connection_resource): bool {} +/** @param resource $connection */ +function oci_unregister_taf_callback($connection): bool {} class OCILob { /** @@ -676,13 +604,13 @@ public function size() {} * @alias oci_lob_write * @return int|false */ - public function write(string $string, ?int $length = null) {} + public function write(string $data, ?int $length = null) {} /** * @alias oci_lob_append * @return bool */ - public function append(OCILob $lob_descriptor_from) {} + public function append(OCILob $from) {} /** * @alias oci_lob_truncate @@ -718,24 +646,18 @@ public function getbuffering() {} * @alias oci_lob_export * @return bool */ - public function writetofile(string $filename, ?int $start = null, ?int $length = null) {} + public function writetofile(string $filename, ?int $offset = null, ?int $length = null) {} /** * @alias oci_lob_export * @return bool */ - public function export(string $filename, ?int $start = null, ?int $length = null) {} + public function export(string $filename, ?int $offset = null, ?int $length = null) {} - /** - * @alias oci_lob_write_temporary - * @return bool - */ + /** @return bool */ public function writetemporary(string $data, int $type = OCI_TEMP_CLOB) {} - /** - * @alias oci_lob_close - * @return bool - */ + /** @return bool */ public function close() {} /** @@ -768,7 +690,7 @@ public function getElem(int $index) {} * @alias oci_collection_assign * @return bool */ - public function assign(OCICollection $collection_from) {} + public function assign(OCICollection $from) {} /** * @alias oci_collection_element_assign @@ -792,5 +714,5 @@ public function max() {} * @alias oci_collection_trim * @return bool */ - public function trim(int $number) {} + public function trim(int $num) {} } diff --git a/ext/oci8/oci8_arginfo.h b/ext/oci8/oci8_arginfo.h index bd6c7bc310d60..4486036c4905e 100644 --- a/ext/oci8/oci8_arginfo.h +++ b/ext/oci8/oci8_arginfo.h @@ -1,42 +1,42 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 154cd2128ba63d5d361b1f2f6ff55ae1659c59b9 */ + * Stub hash: e7a7a9402b2668136f9f47d6e547e3af46a78a50 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_define_by_name, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_INFO(0, column_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(1, variable, IS_MIXED, 0) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, column, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_ocidefinebyname arginfo_oci_define_by_name ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_bind_by_name, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_INFO(0, column_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(1, variable, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maximum_length, IS_LONG, 0, "-1") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, param, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_ocibindbyname arginfo_oci_bind_by_name ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_bind_array_by_name, 0, 4, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_INFO(0, column_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(1, variable, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, maximum_array_length, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maximum_item_length, IS_LONG, 0, "-1") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, param, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, max_array_length, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_item_length, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "SQLT_AFC") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_free_descriptor, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_END_ARG_INFO() #define arginfo_ocifreedesc arginfo_oci_free_descriptor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_save, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -44,33 +44,33 @@ ZEND_END_ARG_INFO() #define arginfo_ocisavelob arginfo_oci_lob_save ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_import, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ocisavelobfile arginfo_oci_lob_import ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_lob_load, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_END_ARG_INFO() #define arginfo_ociloadlob arginfo_oci_lob_load ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_lob_read, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_oci_lob_eof arginfo_oci_free_descriptor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_lob_tell, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_END_ARG_INFO() #define arginfo_oci_lob_rewind arginfo_oci_free_descriptor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_seek, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "OCI_SEEK_SET") ZEND_END_ARG_INFO() @@ -78,68 +78,68 @@ ZEND_END_ARG_INFO() #define arginfo_oci_lob_size arginfo_oci_lob_tell ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_lob_write, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_append, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_to, OCILob, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_from, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, to, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, from, OCILob, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_truncate, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_lob_erase, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_flush, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flag, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ocisetbufferinglob, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, mode, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_ocigetbufferinglob arginfo_oci_free_descriptor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_copy, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_to, OCILob, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_from, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, to, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, from, OCILob, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_is_equal, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_first, OCILob, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_second, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob1, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob2, OCILob, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_lob_export, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, lob_descriptor, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, lob, OCILob, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_ociwritelobtofile arginfo_oci_lob_export ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_oci_new_descriptor, 0, 1, OCILob, 1) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "OCI_DTYPE_LOB") ZEND_END_ARG_INFO() #define arginfo_ocinewdescriptor arginfo_oci_new_descriptor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_rollback, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_END_ARG_INFO() #define arginfo_ocirollback arginfo_oci_rollback @@ -149,15 +149,15 @@ ZEND_END_ARG_INFO() #define arginfo_ocicommit arginfo_oci_rollback ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_field_name, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_MASK(0, column_number_or_name, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_ocicolumnname arginfo_oci_field_name ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_field_size, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_MASK(0, column_number_or_name, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_ocicolumnsize arginfo_oci_field_size @@ -171,8 +171,8 @@ ZEND_END_ARG_INFO() #define arginfo_ocicolumnprecision arginfo_oci_field_size ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_field_type, 0, 2, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_MASK(0, column_number_or_name, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_ocicolumntype arginfo_oci_field_type @@ -182,21 +182,21 @@ ZEND_END_ARG_INFO() #define arginfo_ocicolumntyperaw arginfo_oci_field_size ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_field_is_null, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_MASK(0, column_number_or_name, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_ocicolumnisnull arginfo_oci_field_is_null ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_execute, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "OCI_COMMIT_ON_SUCCESS") ZEND_END_ARG_INFO() #define arginfo_ociexecute arginfo_oci_execute ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_cancel, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #define arginfo_ocicancel arginfo_oci_cancel @@ -206,34 +206,34 @@ ZEND_END_ARG_INFO() #define arginfo_ocifetch arginfo_oci_cancel ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ocifetchinto, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_ARG_INFO(1, result) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "OCI_NUM") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_fetch_all, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_ARG_INFO(1, output) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, skip, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maximum_rows, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_ocifetchstatement arginfo_oci_fetch_all ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_oci_fetch_object, 0, 1, stdClass, MAY_BE_NULL|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PHP_OCI_ASSOC | PHP_OCI_RETURN_NULLS") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_fetch_row, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #define arginfo_oci_fetch_assoc arginfo_oci_fetch_row ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_fetch_array, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PHP_OCI_BOTH | PHP_OCI_RETURN_NULLS") ZEND_END_ARG_INFO() @@ -246,7 +246,7 @@ ZEND_END_ARG_INFO() #define arginfo_ocifreecursor arginfo_oci_cancel ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_close, 0, 1, _IS_BOOL, 1) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_END_ARG_INFO() #define arginfo_ocilogoff arginfo_oci_close @@ -255,7 +255,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_new_connect, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, connection_string, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, character_set, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, session_mode, IS_LONG, 0, "OCI_DEFAULT") ZEND_END_ARG_INFO() @@ -270,68 +270,68 @@ ZEND_END_ARG_INFO() #define arginfo_ociplogon arginfo_oci_new_connect ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_error, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection_or_statement_resource, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection_or_statement, "null") ZEND_END_ARG_INFO() #define arginfo_ocierror arginfo_oci_error ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_num_fields, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #define arginfo_ocinumcols arginfo_oci_num_fields ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_parse, 0, 0, 2) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, sql_text, IS_STRING, 0) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, sql, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ociparse arginfo_oci_parse ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_get_implicit_resultset, 0, 0, 1) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_prefetch, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_INFO(0, number_of_rows, IS_LONG, 0) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, rows, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_ocisetprefetch arginfo_oci_set_prefetch ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_client_identifier, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, client_identifier, IS_STRING, 0) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, client_id, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_edition, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, edition_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, edition, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_module_name, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, module_name, IS_STRING, 0) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_action, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, action, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_client_info, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, client_information, IS_STRING, 0) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, client_info, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_oci_set_db_operation arginfo_oci_set_action ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_set_call_timeout, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, call_timeout, IS_LONG, 0) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, timeout, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_password_change, 0, 0, 4) - ZEND_ARG_INFO(0, connection_resource_or_connection_string) + ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, old_password, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, new_password, IS_STRING, 0) @@ -340,14 +340,14 @@ ZEND_END_ARG_INFO() #define arginfo_ocipasswordchange arginfo_oci_password_change ZEND_BEGIN_ARG_INFO_EX(arginfo_oci_new_cursor, 0, 0, 1) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_END_ARG_INFO() #define arginfo_ocinewcursor arginfo_oci_new_cursor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_result, 0, 2, IS_MIXED, 0) - ZEND_ARG_INFO(0, statement_resource) - ZEND_ARG_TYPE_MASK(0, column_number_or_name, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_ociresult arginfo_oci_result @@ -356,19 +356,19 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_client_version, 0, 0, IS_STR ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_server_version, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_END_ARG_INFO() #define arginfo_ociserverversion arginfo_oci_server_version ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_statement_type, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #define arginfo_ocistatementtype arginfo_oci_statement_type ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_oci_num_rows, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, statement_resource) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #define arginfo_ocirowcount arginfo_oci_num_rows @@ -394,8 +394,8 @@ ZEND_END_ARG_INFO() #define arginfo_ocicollgetelem arginfo_oci_collection_element_get ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_collection_assign, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, collection_to, OCICollection, 0) - ZEND_ARG_OBJ_INFO(0, collection_from, OCICollection, 0) + ZEND_ARG_OBJ_INFO(0, to, OCICollection, 0) + ZEND_ARG_OBJ_INFO(0, from, OCICollection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_collection_element_assign, 0, 3, _IS_BOOL, 0) @@ -418,22 +418,22 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_collection_trim, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, collection, OCICollection, 0) - ZEND_ARG_TYPE_INFO(0, number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, num, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_ocicolltrim arginfo_oci_collection_trim ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_oci_new_collection, 0, 2, OCICollection, MAY_BE_FALSE) - ZEND_ARG_INFO(0, connection_resource) + ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, type_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema_name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_ocinewcollection arginfo_oci_new_collection ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_oci_register_taf_callback, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_resource) - ZEND_ARG_TYPE_INFO(0, function_name, IS_CALLABLE, 1) + ZEND_ARG_INFO(0, connection) + ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1) ZEND_END_ARG_INFO() #define arginfo_oci_unregister_taf_callback arginfo_oci_rollback @@ -470,12 +470,12 @@ ZEND_END_ARG_INFO() #define arginfo_class_OCILob_size arginfo_class_OCILob_load ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCILob_write, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCILob_append, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, lob_descriptor_from, OCILob, 0) + ZEND_ARG_OBJ_INFO(0, from, OCILob, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCILob_truncate, 0, 0, 0) @@ -499,7 +499,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCILob_writetofile, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() @@ -525,7 +525,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCICollection_getElem, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCICollection_assign, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, collection_from, OCICollection, 0) + ZEND_ARG_OBJ_INFO(0, from, OCICollection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCICollection_assignelem, 0, 0, 2) @@ -538,7 +538,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_OCICollection_max arginfo_class_OCILob_load ZEND_BEGIN_ARG_INFO_EX(arginfo_class_OCICollection_trim, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, num, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -619,8 +619,8 @@ ZEND_FUNCTION(oci_collection_trim); ZEND_FUNCTION(oci_new_collection); ZEND_FUNCTION(oci_register_taf_callback); ZEND_FUNCTION(oci_unregister_taf_callback); -ZEND_FUNCTION(oci_lob_write_temporary); -ZEND_FUNCTION(oci_lob_close); +ZEND_METHOD(OCILob, writetemporary); +ZEND_METHOD(OCILob, close); static const zend_function_entry ext_functions[] = { @@ -771,8 +771,8 @@ static const zend_function_entry class_OCILob_methods[] = { ZEND_ME_MAPPING(getbuffering, ocigetbufferinglob, arginfo_class_OCILob_getbuffering, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(writetofile, oci_lob_export, arginfo_class_OCILob_writetofile, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(export, oci_lob_export, arginfo_class_OCILob_export, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(writetemporary, oci_lob_write_temporary, arginfo_class_OCILob_writetemporary, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(close, oci_lob_close, arginfo_class_OCILob_close, ZEND_ACC_PUBLIC) + ZEND_ME(OCILob, writetemporary, arginfo_class_OCILob_writetemporary, ZEND_ACC_PUBLIC) + ZEND_ME(OCILob, close, arginfo_class_OCILob_close, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(free, oci_free_descriptor, arginfo_class_OCILob_free, ZEND_ACC_PUBLIC) ZEND_FE_END }; diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c index 91db3f4815fc3..df71b510fd910 100644 --- a/ext/oci8/oci8_interface.c +++ b/ext/oci8/oci8_interface.c @@ -916,7 +916,7 @@ PHP_FUNCTION(oci_lob_export) /* }}} */ /* {{{ Writes temporary blob */ -PHP_FUNCTION(oci_lob_write_temporary) +PHP_METHOD(OCILob, writetemporary) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; @@ -943,7 +943,7 @@ PHP_FUNCTION(oci_lob_write_temporary) /* }}} */ /* {{{ Closes lob descriptor */ -PHP_FUNCTION(oci_lob_close) +PHP_METHOD(OCILob, close) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; diff --git a/ext/oci8/tests/array_bind_002.phpt b/ext/oci8/tests/array_bind_002.phpt index 863f543c0f5a4..aa0def13d23ab 100644 --- a/ext/oci8/tests/array_bind_002.phpt +++ b/ext/oci8/tests/array_bind_002.phpt @@ -63,7 +63,7 @@ var_dump($array); echo "Done\n"; ?> --EXPECTF-- -oci_bind_array_by_name(): Argument #4 ($maximum_array_length) must be greater than 0 +oci_bind_array_by_name(): Argument #4 ($max_array_length) must be greater than 0 Warning: oci_execute(): ORA-%r(01008|57000)%r: %s in %s on line %d array(5) { diff --git a/ext/oci8/tests/conn_attr_4.phpt b/ext/oci8/tests/conn_attr_4.phpt index 20282d16878a3..b2d3267ecedec 100644 --- a/ext/oci8/tests/conn_attr_4.phpt +++ b/ext/oci8/tests/conn_attr_4.phpt @@ -90,10 +90,10 @@ echo "Done\n"; **Test Negative cases************ Invalid Connection resource 1 -string(89) "oci_set_action(): Argument #1 ($connection_resource) must be of type resource, null given" +string(89) "oci_set_action(): Argument #1 ($connection) must be of type resource, null given" Invalid Connection resource 2 -string(96) "oci_set_client_info(): Argument #1 ($connection_resource) must be of type resource, string given" +string(96) "oci_set_client_info(): Argument #1 ($connection) must be of type resource, string given" Invalid Action value string(78) "oci_set_action(): Argument #2 ($action) must be of type string, resource given" diff --git a/ext/oci8/tests/define1.phpt b/ext/oci8/tests/define1.phpt index e79fd76e1b9bd..b5daf7a4b13fb 100644 --- a/ext/oci8/tests/define1.phpt +++ b/ext/oci8/tests/define1.phpt @@ -52,6 +52,6 @@ echo "Done\n"; --EXPECTF-- bool(true) bool(false) -oci_define_by_name(): Argument #2 ($column_name) cannot be empty +oci_define_by_name(): Argument #2 ($column) cannot be empty string(4) "some" Done diff --git a/ext/oci8/tests/refcur_prefetch_1.phpt b/ext/oci8/tests/refcur_prefetch_1.phpt index 5f8fe821d40a6..c6d830506c102 100644 --- a/ext/oci8/tests/refcur_prefetch_1.phpt +++ b/ext/oci8/tests/refcur_prefetch_1.phpt @@ -223,9 +223,9 @@ NULL ----------------------------------------------- Test with Prefetch (invalid) value set to -12345 ----------------------------------------------- -oci_set_prefetch(): Argument #2 ($number_of_rows) must be greater than or equal to 0 +oci_set_prefetch(): Argument #2 ($rows) must be greater than or equal to 0 ----------------------------------------------- Test with Prefetch (invalid) value set to -1 ----------------------------------------------- -oci_set_prefetch(): Argument #2 ($number_of_rows) must be greater than or equal to 0 +oci_set_prefetch(): Argument #2 ($rows) must be greater than or equal to 0 Done diff --git a/ext/odbc/odbc.stub.php b/ext/odbc/odbc.stub.php index 667d5e88b76a2..e241022e1049c 100644 --- a/ext/odbc/odbc.stub.php +++ b/ext/odbc/odbc.stub.php @@ -4,67 +4,67 @@ function odbc_close_all(): void {} -/** @param resource $result_id */ -function odbc_binmode($result_id, int $mode): bool {} +/** @param resource $statement */ +function odbc_binmode($statement, int $mode): bool {} -/** @param resource $result_id */ -function odbc_longreadlen($result_id, int $length): bool {} +/** @param resource $statement */ +function odbc_longreadlen($statement, int $length): bool {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_prepare($connection_id, string $query) {} +function odbc_prepare($odbc, string $query) {} -/** @param resource $result_id */ -function odbc_execute($result_id, array $parameters_array = []): bool {} +/** @param resource $statement */ +function odbc_execute($statement, array $params = []): bool {} -/** @param resource $result_id */ -function odbc_cursor($result_id): string|false {} +/** @param resource $statement */ +function odbc_cursor($statement): string|false {} #ifdef HAVE_SQLDATASOURCES -/** @param resource $connection_id */ -function odbc_data_source($connection_id, int $fetch_type): array|false {} +/** @param resource $odbc */ +function odbc_data_source($odbc, int $fetch_type): array|false {} #endif /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_exec($connection_id, string $query) {} +function odbc_exec($odbc, string $query) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false * @alias odbc_exec */ -function odbc_do($connection_id, string $query) {} +function odbc_do($odbc, string $query) {} #ifdef PHP_ODBC_HAVE_FETCH_HASH -/** @param resource $result */ -function odbc_fetch_object($result, int $rownumber = -1): stdClass|false {} +/** @param resource $statement */ +function odbc_fetch_object($statement, int $row = -1): stdClass|false {} -/** @param resource $result */ -function odbc_fetch_array($result, int $rownumber = -1): array|false {} +/** @param resource $statement */ +function odbc_fetch_array($statement, int $row = -1): array|false {} #endif /** - * @param resource $result_id - * @param array $result_array + * @param resource $statement + * @param array $array */ -function odbc_fetch_into($result_id, &$result_array, int $rownumber = 0): int|false {} +function odbc_fetch_into($statement, &$array, int $row = 0): int|false {} -/** @param resource $result_id */ -function odbc_fetch_row($result_id, ?int $row_number = null): bool {} +/** @param resource $statement */ +function odbc_fetch_row($statement, ?int $row = null): bool {} -/** @param resource $result_id */ -function odbc_result($result_id, string|int $field): string|bool|null {} +/** @param resource $statement */ +function odbc_result($statement, string|int $field): string|bool|null {} -/** @param resource $result_id */ -function odbc_result_all($result_id, string $format = ""): int|false {} +/** @param resource $statement */ +function odbc_result_all($statement, string $format = ""): int|false {} -/** @param resource $result_id */ -function odbc_free_result($result_id): bool {} +/** @param resource $statement */ +function odbc_free_result($statement): bool {} /** @return resource|false */ function odbc_connect(string $dsn, string $user, string $password, int $cursor_option = SQL_CUR_USE_DRIVER) {} @@ -72,125 +72,125 @@ function odbc_connect(string $dsn, string $user, string $password, int $cursor_o /** @return resource|false */ function odbc_pconnect(string $dsn, string $user, string $password, int $cursor_option = SQL_CUR_USE_DRIVER) {} -/** @param resource $connection_id */ -function odbc_close($connection_id): void {} +/** @param resource $odbc */ +function odbc_close($odbc): void {} -/** @param resource $result_id */ -function odbc_num_rows($result_id): int {} +/** @param resource $statement */ +function odbc_num_rows($statement): int {} #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) -/** @param resource $result_id */ -function odbc_next_result($result_id): bool {} +/** @param resource $statement */ +function odbc_next_result($statement): bool {} #endif -/** @param resource $result_id */ -function odbc_num_fields($result_id): int {} +/** @param resource $statement */ +function odbc_num_fields($statement): int {} -/** @param resource $result_id */ -function odbc_field_name($result_id, int $field_number): string|false {} +/** @param resource $statement */ +function odbc_field_name($statement, int $field): string|false {} -/** @param resource $result_id */ -function odbc_field_type($result_id, int $field_number): string|false {} +/** @param resource $statement */ +function odbc_field_type($statement, int $field): string|false {} -/** @param resource $result_id */ -function odbc_field_len($result_id, int $field_number): int|false {} +/** @param resource $statement */ +function odbc_field_len($statement, int $field): int|false {} /** - * @param resource $result_id + * @param resource $statement * @alias odbc_field_len */ -function odbc_field_precision($result_id, int $field_number): int|false {} +function odbc_field_precision($statement, int $field): int|false {} -/** @param resource $result_id */ -function odbc_field_scale($result_id, int $field_number): int|false {} +/** @param resource $statement */ +function odbc_field_scale($statement, int $field): int|false {} -/** @param resource $result_id */ -function odbc_field_num($result_id, string $field_name): int|false {} +/** @param resource $statement */ +function odbc_field_num($statement, string $field): int|false {} -/** @param resource $connection_id */ -function odbc_autocommit($connection_id, int $onoff = 0): int|bool {} +/** @param resource $odbc */ +function odbc_autocommit($odbc, bool $enable = false): int|bool {} -/** @param resource $connection_id */ -function odbc_commit($connection_id): bool {} +/** @param resource $odbc */ +function odbc_commit($odbc): bool {} -/** @param resource $connection_id */ -function odbc_rollback($connection_id): bool {} +/** @param resource $odbc */ +function odbc_rollback($odbc): bool {} -/** @param resource|null $connection_id */ -function odbc_error($connection_id = null): string {} +/** @param resource|null $odbc */ +function odbc_error($odbc = null): string {} -/** @param resource|null $connection_id */ -function odbc_errormsg($connection_id = null): string {} +/** @param resource|null $odbc */ +function odbc_errormsg($odbc = null): string {} -/** @param resource $conn_id */ -function odbc_setoption($conn_id, int $which, int $option, int $value): bool {} +/** @param resource $odbc */ +function odbc_setoption($odbc, int $which, int $option, int $value): bool {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_tables($connection_id, ?string $catalog = null, ?string $schema = null, ?string $name = null, ?string $table_types = null) {} +function odbc_tables($odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $types = null) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_columns($connection_id, ?string $catalog = null, ?string $schema = null, ?string $table_name = null, ?string $column_name = null) {} +function odbc_columns($odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $column = null) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_gettypeinfo($connection_id, int $data_type = 0) {} +function odbc_gettypeinfo($odbc, int $data_type = 0) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_primarykeys($connection_id, ?string $catalog, string $schema, string $table) {} +function odbc_primarykeys($odbc, ?string $catalog, string $schema, string $table) {} #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_procedurecolumns($connection_id, ?string $catalog = null, ?string $schema = null, ?string $proc = null, ?string $column = null) {} +function odbc_procedurecolumns($odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null, ?string $column = null) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_procedures($connection_id, ?string $catalog = null, ?string $schema = null, ?string $name = null) {} +function odbc_procedures($odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_foreignkeys($connection_id, ?string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table) {} +function odbc_foreignkeys($odbc, ?string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table) {} #endif /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_specialcolumns($connection_id, int $type, ?string $catalog, string $schema, string $table, int $scope, int $nullable) {} +function odbc_specialcolumns($odbc, int $type, ?string $catalog, string $schema, string $table, int $scope, int $nullable) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_statistics($connection_id, ?string $catalog, string $schema, string $name, int $unique, int $accuracy) {} +function odbc_statistics($odbc, ?string $catalog, string $schema, string $table, int $unique, int $accuracy) {} #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_tableprivileges($connection_id, ?string $catalog, string $schema, string $name) {} +function odbc_tableprivileges($odbc, ?string $catalog, string $schema, string $table) {} /** - * @param resource $connection_id + * @param resource $odbc * @return resource|false */ -function odbc_columnprivileges($connection_id, ?string $catalog, string $schema, string $table, string $column) {} +function odbc_columnprivileges($odbc, ?string $catalog, string $schema, string $table, string $column) {} #endif diff --git a/ext/odbc/odbc_arginfo.h b/ext/odbc/odbc_arginfo.h index ad2fbf48b02a4..974edf32f0824 100644 --- a/ext/odbc/odbc_arginfo.h +++ b/ext/odbc/odbc_arginfo.h @@ -1,36 +1,36 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 53069f42e460cfea8e2daf499277f6ceb9c760f7 */ + * Stub hash: dd2205269dd48e1af19c3980291b21d86fa11a93 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_close_all, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_binmode, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_longreadlen, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_prepare, 0, 0, 2) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_execute, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, parameters_array, IS_ARRAY, 0, "[]") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_cursor, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #if defined(HAVE_SQLDATASOURCES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_data_source, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, fetch_type, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -41,41 +41,41 @@ ZEND_END_ARG_INFO() #if defined(PHP_ODBC_HAVE_FETCH_HASH) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_fetch_object, 0, 1, stdClass, MAY_BE_FALSE) - ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "-1") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #endif #if defined(PHP_ODBC_HAVE_FETCH_HASH) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_fetch_array, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "-1") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_fetch_into, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_INFO(1, result_array) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_INFO(1, array) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_fetch_row, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row_number, IS_LONG, 1, "null") + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_result, 0, 2, MAY_BE_STRING|MAY_BE_BOOL|MAY_BE_NULL) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_MASK(0, field, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_result_all, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_free_result, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_connect, 0, 0, 3) @@ -88,31 +88,31 @@ ZEND_END_ARG_INFO() #define arginfo_odbc_pconnect arginfo_odbc_connect ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_close, 0, 1, IS_VOID, 0) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_num_rows, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_next_result, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, result_id) + ZEND_ARG_INFO(0, statement) ZEND_END_ARG_INFO() #endif #define arginfo_odbc_num_fields arginfo_odbc_num_rows ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_name, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_odbc_field_type arginfo_odbc_field_name ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_len, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_odbc_field_precision arginfo_odbc_field_len @@ -120,57 +120,57 @@ ZEND_END_ARG_INFO() #define arginfo_odbc_field_scale arginfo_odbc_field_len ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_num, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, result_id) - ZEND_ARG_TYPE_INFO(0, field_name, IS_STRING, 0) + ZEND_ARG_INFO(0, statement) + ZEND_ARG_TYPE_INFO(0, field, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_autocommit, 0, 1, MAY_BE_LONG|MAY_BE_BOOL) - ZEND_ARG_INFO(0, connection_id) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, onoff, IS_LONG, 0, "0") + ZEND_ARG_INFO(0, odbc) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_commit, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_END_ARG_INFO() #define arginfo_odbc_rollback arginfo_odbc_commit ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_error, 0, 0, IS_STRING, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, connection_id, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, odbc, "null") ZEND_END_ARG_INFO() #define arginfo_odbc_errormsg arginfo_odbc_error ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_setoption, 0, 4, _IS_BOOL, 0) - ZEND_ARG_INFO(0, conn_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, which, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_tables, 0, 0, 1) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table_types, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, types, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_columns, 0, 0, 1) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table_name, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, column_name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, column, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_gettypeinfo, 0, 0, 1) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, data_type, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_primarykeys, 0, 0, 4) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0) @@ -178,26 +178,26 @@ ZEND_END_ARG_INFO() #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_procedurecolumns, 0, 0, 1) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, proc, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, procedure, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, column, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #endif #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_procedures, 0, 0, 1) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, procedure, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #endif #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_foreignkeys, 0, 0, 7) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, pk_catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, pk_schema, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pk_table, IS_STRING, 0) @@ -208,7 +208,7 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_specialcolumns, 0, 0, 7) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) @@ -218,26 +218,26 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_specialcolumns, 0, 0, 7) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_statistics, 0, 0, 6) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, unique, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, accuracy, IS_LONG, 0) ZEND_END_ARG_INFO() #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_tableprivileges, 0, 0, 4) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_columnprivileges, 0, 0, 5) - ZEND_ARG_INFO(0, connection_id) + ZEND_ARG_INFO(0, odbc) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0) diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index d058fd0191d2e..4cfdc6c30dfde 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -960,24 +960,34 @@ PHP_FUNCTION(odbc_prepare) * Execute prepared SQL statement. Supports only input parameters. */ +typedef struct odbc_params_t { + SQLLEN vallen; + int fp; +} odbc_params_t; + +static void odbc_release_params(odbc_result *result, odbc_params_t *params) { + SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); + for (int i = 0; i < result->numparams; i++) { + if (params[i].fp != -1) { + close(params[i].fp); + } + } + efree(params); +} + /* {{{ Execute a prepared statement */ PHP_FUNCTION(odbc_execute) { zval *pv_res, *tmp; HashTable *pv_param_ht = (HashTable *) &zend_empty_array; - typedef struct params_t { - SQLLEN vallen; - int fp; - } params_t; - params_t *params = NULL; + odbc_params_t *params = NULL; char *filename; - unsigned char otype; SQLSMALLINT ctype; - odbc_result *result; + odbc_result *result; int i, ne; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|h/", &pv_res, &pv_param_ht) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|h", &pv_res, &pv_param_ht) == FAILURE) { RETURN_THROWS(); } @@ -991,38 +1001,21 @@ PHP_FUNCTION(odbc_execute) RETURN_FALSE; } - zend_hash_internal_pointer_reset(pv_param_ht); - params = (params_t *)safe_emalloc(sizeof(params_t), result->numparams, 0); + params = (odbc_params_t *)safe_emalloc(sizeof(odbc_params_t), result->numparams, 0); for(i = 0; i < result->numparams; i++) { params[i].fp = -1; } - for(i = 1; i <= result->numparams; i++) { - if ((tmp = zend_hash_get_current_data(pv_param_ht)) == NULL) { - php_error_docref(NULL, E_WARNING,"Error getting parameter"); - SQLFreeStmt(result->stmt,SQL_RESET_PARAMS); - for (i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); - RETURN_FALSE; - } - - otype = Z_TYPE_P(tmp); - if (!try_convert_to_string(tmp)) { - SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); - for (i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); + i = 1; + ZEND_HASH_FOREACH_VAL(pv_param_ht, tmp) { + unsigned char otype = Z_TYPE_P(tmp); + zend_string *tmpstr = zval_try_get_string(tmp); + if (!tmpstr) { + odbc_release_params(result, params); RETURN_THROWS(); } - params[i-1].vallen = Z_STRLEN_P(tmp); + params[i-1].vallen = ZSTR_LEN(tmpstr); params[i-1].fp = -1; if (IS_SQL_BINARY(result->param_info[i-1].sqltype)) { @@ -1031,38 +1024,30 @@ PHP_FUNCTION(odbc_execute) ctype = SQL_C_CHAR; } - if (Z_STRLEN_P(tmp) > 2 && - Z_STRVAL_P(tmp)[0] == '\'' && - Z_STRVAL_P(tmp)[Z_STRLEN_P(tmp) - 1] == '\'') { + if (ZSTR_LEN(tmpstr) > 2 && + ZSTR_VAL(tmpstr)[0] == '\'' && + ZSTR_VAL(tmpstr)[ZSTR_LEN(tmpstr) - 1] == '\'') { - if (CHECK_ZVAL_NULL_PATH(tmp)) { + if (ZSTR_LEN(tmpstr) != strlen(ZSTR_VAL(tmpstr))) { + odbc_release_params(result, params); + zend_string_release(tmpstr); RETURN_FALSE; } - filename = estrndup(&Z_STRVAL_P(tmp)[1], Z_STRLEN_P(tmp) - 2); + filename = estrndup(&ZSTR_VAL(tmpstr)[1], ZSTR_LEN(tmpstr) - 2); filename[strlen(filename)] = '\0'; /* Check the basedir */ if (php_check_open_basedir(filename)) { efree(filename); - SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); - for (i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); + odbc_release_params(result, params); + zend_string_release(tmpstr); RETURN_FALSE; } if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) { php_error_docref(NULL, E_WARNING,"Can't open file %s", filename); - SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); - for (i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); + odbc_release_params(result, params); + zend_string_release(tmpstr); efree(filename); RETURN_FALSE; } @@ -1085,22 +1070,18 @@ PHP_FUNCTION(odbc_execute) rc = SQLBindParameter(result->stmt, (SQLUSMALLINT)i, SQL_PARAM_INPUT, ctype, result->param_info[i-1].sqltype, result->param_info[i-1].precision, result->param_info[i-1].scale, - Z_STRVAL_P(tmp), 0, + ZSTR_VAL(tmpstr), 0, ¶ms[i-1].vallen); } if (rc == SQL_ERROR) { odbc_sql_error(result->conn_ptr, result->stmt, "SQLBindParameter"); - SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); - for (i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); + odbc_release_params(result, params); + zend_string_release(tmpstr); RETURN_FALSE; } - zend_hash_move_forward(pv_param_ht); - } + zend_string_release(tmpstr); + if (++i > result->numparams) break; + } ZEND_HASH_FOREACH_END(); } /* Close cursor, needed for doing multiple selects */ rc = SQLFreeStmt(result->stmt, SQL_CLOSE); @@ -1109,42 +1090,35 @@ PHP_FUNCTION(odbc_execute) odbc_sql_error(result->conn_ptr, result->stmt, "SQLFreeStmt"); } - rc = SQLExecute(result->stmt); - result->fetched = 0; - if (rc == SQL_NEED_DATA) { - char buf[4096]; - int fp, nbytes; - while (rc == SQL_NEED_DATA) { - rc = SQLParamData(result->stmt, (void*)&fp); - if (rc == SQL_NEED_DATA) { - while ((nbytes = read(fp, &buf, 4096)) > 0) { - SQLPutData(result->stmt, (void*)&buf, nbytes); + rc = SQLExecute(result->stmt); + switch (rc) { + case SQL_NEED_DATA: { + char buf[4096]; + int fp, nbytes; + while (rc == SQL_NEED_DATA) { + rc = SQLParamData(result->stmt, (void*)&fp); + if (rc == SQL_NEED_DATA) { + while ((nbytes = read(fp, &buf, 4096)) > 0) { + SQLPutData(result->stmt, (void*)&buf, nbytes); + } } } + break; } - } else { - switch (rc) { - case SQL_SUCCESS: - break; - case SQL_NO_DATA_FOUND: - case SQL_SUCCESS_WITH_INFO: - odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute"); - break; - default: - odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute"); - RETVAL_FALSE; - } + case SQL_SUCCESS: + break; + case SQL_NO_DATA_FOUND: + case SQL_SUCCESS_WITH_INFO: + odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute"); + break; + default: + odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute"); + RETVAL_FALSE; } if (result->numparams > 0) { - SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); - for(i = 0; i < result->numparams; i++) { - if (params[i].fp != -1) { - close(params[i].fp); - } - } - efree(params); + odbc_release_params(result, params); } if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO || rc == SQL_NO_DATA_FOUND) { @@ -1466,6 +1440,9 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) if (rc == SQL_SUCCESS_WITH_INFO) { ZVAL_STRINGL(&tmp, buf, result->longreadlen); + } else if (rc != SQL_SUCCESS) { + php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", i + 1, rc); + ZVAL_FALSE(&tmp); } else if (result->values[i].vallen == SQL_NULL_DATA) { ZVAL_NULL(&tmp); break; @@ -1616,6 +1593,9 @@ PHP_FUNCTION(odbc_fetch_into) } if (rc == SQL_SUCCESS_WITH_INFO) { ZVAL_STRINGL(&tmp, buf, result->longreadlen); + } else if (rc != SQL_SUCCESS) { + php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", i + 1, rc); + ZVAL_FALSE(&tmp); } else if (result->values[i].vallen == SQL_NULL_DATA) { ZVAL_NULL(&tmp); break; @@ -1848,12 +1828,13 @@ PHP_FUNCTION(odbc_result) RETURN_FALSE; } - if (result->values[field_ind].vallen == SQL_NULL_DATA) { - zend_string_efree(field_str); - RETURN_NULL(); - } else if (rc == SQL_NO_DATA_FOUND) { + if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { zend_string_efree(field_str); + php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", field_ind + 1, rc); RETURN_FALSE; + } else if (result->values[field_ind].vallen == SQL_NULL_DATA) { + zend_string_efree(field_str); + RETURN_NULL(); } /* Reduce fieldlen by 1 if we have char data. One day we might have binary strings... */ @@ -1899,6 +1880,12 @@ PHP_FUNCTION(odbc_result) RETURN_FALSE; } + if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { + php_error_docref(NULL, E_WARNING, "Cannot get data of column #%d (retcode %u)", field_ind + 1, rc); + efree(field); + RETURN_FALSE; + } + if (result->values[field_ind].vallen == SQL_NULL_DATA) { efree(field); RETURN_NULL(); @@ -2007,6 +1994,11 @@ PHP_FUNCTION(odbc_result_all) } if (rc == SQL_SUCCESS_WITH_INFO) { PHPWRITE(buf, result->longreadlen); + } else if (rc != SQL_SUCCESS) { + php_printf(""); + php_error_docref(NULL, E_WARNING, "Cannot get data of column #%zu (retcode %u)", i + 1, rc); + efree(buf); + RETURN_FALSE; } else if (result->values[i].vallen == SQL_NULL_DATA) { php_printf("NULL"); break; @@ -2373,6 +2365,7 @@ PHP_FUNCTION(odbc_next_result) } efree(result->values); result->values = NULL; + result->numcols = 0; } result->fetched = 0; @@ -2546,9 +2539,9 @@ PHP_FUNCTION(odbc_autocommit) odbc_connection *conn; RETCODE rc; zval *pv_conn; - zend_long pv_onoff = 0; + zend_bool pv_onoff = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &pv_conn, &pv_onoff) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|b", &pv_conn, &pv_onoff) == FAILURE) { RETURN_THROWS(); } @@ -2557,7 +2550,7 @@ PHP_FUNCTION(odbc_autocommit) } if (ZEND_NUM_ARGS() > 1) { - rc = SQLSetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, (pv_onoff) ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF); + rc = SQLSetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, pv_onoff ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { odbc_sql_error(conn, SQL_NULL_HSTMT, "Set autocommit"); RETURN_FALSE; diff --git a/ext/odbc/tests/bug44618.phpt b/ext/odbc/tests/bug44618.phpt new file mode 100644 index 0000000000000..668cee7afad49 --- /dev/null +++ b/ext/odbc/tests/bug44618.phpt @@ -0,0 +1,62 @@ +--TEST-- +Bug #44618 (Fetching may rely on uninitialized data) +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECTF-- +Warning: odbc_fetch_array(): Cannot get data of column #3 (retcode 100) in %s on line %d +array(3) { + ["ID"]=> + string(1) "1" + ["real1"]=> + string(5) "10.02" + ["text1"]=> + bool(false) +} + +Warning: odbc_fetch_into(): Cannot get data of column #3 (retcode 100) in %s on line %d +array(3) { + [0]=> + string(1) "1" + [1]=> + string(5) "10.02" + [2]=> + bool(false) +} + +Warning: odbc_result(): Cannot get data of column #3 (retcode 100) in %s on line %d +bool(false) + +
IDreal1text1
110.02
+Warning: odbc_result_all(): Cannot get data of column #3 (retcode 100) in %s on line %d diff --git a/ext/odbc/tests/bug46050.phpt b/ext/odbc/tests/bug46050.phpt new file mode 100644 index 0000000000000..33564f2170e0e --- /dev/null +++ b/ext/odbc/tests/bug46050.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #46050 (odbc_next_result corrupts prepared resource) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +array(1) { + ["1"]=> + string(1) "1" +} +bool(false) +bool(true) +array(1) { + ["1"]=> + string(1) "1" +} diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 7b9fb2afca7f7..bad814ed6ea8c 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -1371,6 +1371,7 @@ static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_arr MAKE_NOP(last_op); block->len--; } + block->successors[0] = follow_block - cfg->blocks; block->successors_count = 1; ++(*opt_count); break; @@ -1515,16 +1516,16 @@ static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_arr target = op_array->opcodes + follow_block->start; if (target->opcode == ZEND_JMP) { - /* JMPZNZ(X, L1, L2), L1: JMP(L3) -> JMPZNZ(X, L3, L2) */ + /* JMPZNZ(X, L1, L2), L2: JMP(L3) -> JMPZNZ(X, L1, L3) */ next = follow_block->successors[0]; } else if (target->opcode == ZEND_JMPNZ && SAME_VAR(target->op1, last_op->op1)) { - /* JMPZNZ(X, L1, L2), L1: X = JMPNZ(X, L3) -> JMPZNZ(X, L1+1, L2) */ + /* JMPZNZ(X, L1, L2), L2: X = JMPNZ(X, L3) -> JMPZNZ(X, L1, L3) */ next = follow_block->successors[0]; } else if ((target->opcode == ZEND_JMPZ || target->opcode == ZEND_JMPZNZ) && SAME_VAR(target->op1, last_op->op1)) { - /* JMPZNZ(X, L1, L2), L1: JMPZ(X, L3) -> JMPZNZ(X, L3, L2) */ - next = target_block->successors[1]; + /* JMPZNZ(X, L1, L2), L2: JMPZ(X, L3) -> JMPZNZ(X, L1, L2+1) */ + next = follow_block->successors[1]; } else { break; } @@ -1900,7 +1901,7 @@ void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx) /* Eliminate NOPs */ for (b = blocks; b < end; b++) { - if (b->flags & ZEND_BB_REACHABLE) { + if (b->flags & (ZEND_BB_REACHABLE|ZEND_BB_UNREACHABLE_FREE)) { strip_nops(op_array, b); } } diff --git a/ext/opcache/Optimizer/dfa_pass.c b/ext/opcache/Optimizer/dfa_pass.c index 0605d5f299bd3..765b023f07ee9 100644 --- a/ext/opcache/Optimizer/dfa_pass.c +++ b/ext/opcache/Optimizer/dfa_pass.c @@ -1091,29 +1091,68 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx || opline->opcode == ZEND_IS_SMALLER_OR_EQUAL ) { - if (opline->op1_type == IS_CONST - && opline->op2_type != IS_CONST - && (OP2_INFO() & MAY_BE_ANY) == MAY_BE_DOUBLE - && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op1.constant)) == IS_LONG - ) { + if (opline->op1_type == IS_CONST && opline->op2_type != IS_CONST) { + zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); + + if ((OP2_INFO() & MAY_BE_ANY) == MAY_BE_DOUBLE + && Z_TYPE_INFO_P(zv) == IS_LONG) { // op_1: #v.? = ADD long(?), #?.? [double] => #v.? = ADD double(?), #?.? [double] - zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); - ZVAL_DOUBLE(&tmp, zval_get_double(zv)); - opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); + ZVAL_DOUBLE(&tmp, zval_get_double(zv)); + opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); + zv = CT_CONSTANT_EX(op_array, opline->op1.constant); + } + if (opline->opcode == ZEND_ADD) { + zv = CT_CONSTANT_EX(op_array, opline->op1.constant); + + if (((OP2_INFO() & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG + && Z_TYPE_INFO_P(zv) == IS_LONG + && Z_LVAL_P(zv) == 0) + || ((OP2_INFO() & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_DOUBLE + && Z_TYPE_INFO_P(zv) == IS_DOUBLE + && Z_DVAL_P(zv) == 0.0)) { + +// op_1: #v.? = ADD 0, #?.? [double,long] => #v.? = QM_ASSIGN #?.? + + opline->opcode = ZEND_QM_ASSIGN; + opline->op1_type = opline->op2_type; + opline->op1.var = opline->op2.var; + opline->op2_type = IS_UNUSED; + opline->op2.num = 0; + ssa->ops[op_1].op1_use = ssa->ops[op_1].op2_use; + ssa->ops[op_1].op1_use_chain = ssa->ops[op_1].op2_use_chain; + ssa->ops[op_1].op2_use = -1; + ssa->ops[op_1].op2_use_chain = -1; + } + } + } else if (opline->op1_type != IS_CONST && opline->op2_type == IS_CONST) { + zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); - } else if (opline->op1_type != IS_CONST - && opline->op2_type == IS_CONST - && (OP1_INFO() & MAY_BE_ANY) == MAY_BE_DOUBLE - && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG - ) { + if ((OP1_INFO() & MAY_BE_ANY) == MAY_BE_DOUBLE + && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG) { // op_1: #v.? = ADD #?.? [double], long(?) => #v.? = ADD #?.? [double], double(?) - zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); - ZVAL_DOUBLE(&tmp, zval_get_double(zv)); - opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); + ZVAL_DOUBLE(&tmp, zval_get_double(zv)); + opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); + zv = CT_CONSTANT_EX(op_array, opline->op2.constant); + } + if (opline->opcode == ZEND_ADD || opline->opcode == ZEND_SUB) { + if (((OP1_INFO() & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG + && Z_TYPE_INFO_P(zv) == IS_LONG + && Z_LVAL_P(zv) == 0) + || ((OP1_INFO() & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_DOUBLE + && Z_TYPE_INFO_P(zv) == IS_DOUBLE + && Z_DVAL_P(zv) == 0.0)) { + +// op_1: #v.? = ADD #?.? [double,long], 0 => #v.? = QM_ASSIGN #?.? + + opline->opcode = ZEND_QM_ASSIGN; + opline->op2_type = IS_UNUSED; + opline->op2.num = 0; + } + } } } else if (opline->opcode == ZEND_CONCAT) { if (!(OP1_INFO() & MAY_BE_OBJECT) @@ -1151,6 +1190,114 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx } } + if (opline->opcode == ZEND_QM_ASSIGN + && ssa->ops[op_1].result_def == v + && opline->op1_type & (IS_TMP_VAR|IS_VAR) + && !(ssa->var_info[v].type & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) + ) { + + int src_var = ssa->ops[op_1].op1_use; + + if (src_var >= 0 + && !(ssa->var_info[src_var].type & MAY_BE_REF) + && ssa->vars[src_var].definition >= 0 + && ssa->ops[ssa->vars[src_var].definition].result_def == src_var + && ssa->ops[ssa->vars[src_var].definition].result_use < 0 + && ssa->vars[src_var].use_chain == op_1 + && ssa->ops[op_1].op1_use_chain < 0 + && !ssa->vars[src_var].phi_use_chain + && !ssa->vars[src_var].sym_use_chain + && opline_supports_assign_contraction( + ssa, &op_array->opcodes[ssa->vars[src_var].definition], + src_var, opline->result.var) + ) { + + int orig_var = ssa->ops[op_1].result_use; + int op_2 = ssa->vars[src_var].definition; + +// op_2: #src_var.T = OP ... => #v.CV = OP ... +// op_1: QM_ASSIGN #src_var.T #orig_var.CV [undef,scalar] -> #v.CV, NOP + + if (orig_var < 0 || zend_ssa_unlink_use_chain(ssa, op_1, orig_var)) { + /* Reconstruct SSA */ + ssa->vars[v].definition = op_2; + ssa->ops[op_2].result_def = v; + + ssa->vars[src_var].definition = -1; + ssa->vars[src_var].use_chain = -1; + + ssa->ops[op_1].op1_use = -1; + ssa->ops[op_1].op1_def = -1; + ssa->ops[op_1].op1_use_chain = -1; + ssa->ops[op_1].result_use = -1; + ssa->ops[op_1].result_def = -1; + ssa->ops[op_1].res_use_chain = -1; + + /* Update opcodes */ + op_array->opcodes[op_2].result_type = opline->result_type; + op_array->opcodes[op_2].result.var = opline->result.var; + + MAKE_NOP(opline); + remove_nops = 1; + + if (op_array->opcodes[op_2].opcode == ZEND_SUB + && op_array->opcodes[op_2].op1_type == op_array->opcodes[op_2].result_type + && op_array->opcodes[op_2].op1.var == op_array->opcodes[op_2].result.var + && op_array->opcodes[op_2].op2_type == IS_CONST + && Z_TYPE_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op2.constant)) == IS_LONG + && Z_LVAL_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op2.constant)) == 1 + && ssa->ops[op_2].op1_use >= 0 + && !(ssa->var_info[ssa->ops[op_2].op1_use].type & (MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { + + op_array->opcodes[op_2].opcode = ZEND_PRE_DEC; + SET_UNUSED(op_array->opcodes[op_2].op2); + SET_UNUSED(op_array->opcodes[op_2].result); + + ssa->ops[op_2].result_def = -1; + ssa->ops[op_2].op1_def = v; + + } else if (op_array->opcodes[op_2].opcode == ZEND_ADD + && op_array->opcodes[op_2].op1_type == op_array->opcodes[op_2].result_type + && op_array->opcodes[op_2].op1.var == op_array->opcodes[op_2].result.var + && op_array->opcodes[op_2].op2_type == IS_CONST + && Z_TYPE_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op2.constant)) == IS_LONG + && Z_LVAL_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op2.constant)) == 1 + && ssa->ops[op_2].op1_use >= 0 + && !(ssa->var_info[ssa->ops[op_2].op1_use].type & (MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { + + op_array->opcodes[op_2].opcode = ZEND_PRE_INC; + SET_UNUSED(op_array->opcodes[op_2].op2); + SET_UNUSED(op_array->opcodes[op_2].result); + + ssa->ops[op_2].result_def = -1; + ssa->ops[op_2].op1_def = v; + + } else if (op_array->opcodes[op_2].opcode == ZEND_ADD + && op_array->opcodes[op_2].op2_type == op_array->opcodes[op_2].result_type + && op_array->opcodes[op_2].op2.var == op_array->opcodes[op_2].result.var + && op_array->opcodes[op_2].op1_type == IS_CONST + && Z_TYPE_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op1.constant)) == IS_LONG + && Z_LVAL_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op_2].op1.constant)) == 1 + && ssa->ops[op_2].op2_use >= 0 + && !(ssa->var_info[ssa->ops[op_2].op2_use].type & (MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { + + op_array->opcodes[op_2].opcode = ZEND_PRE_INC; + op_array->opcodes[op_2].op1_type = op_array->opcodes[op_2].op2_type; + op_array->opcodes[op_2].op1.var = op_array->opcodes[op_2].op2.var; + SET_UNUSED(op_array->opcodes[op_2].op2); + SET_UNUSED(op_array->opcodes[op_2].result); + + ssa->ops[op_2].result_def = -1; + ssa->ops[op_2].op1_def = v; + ssa->ops[op_2].op1_use = ssa->ops[op_2].op2_use; + ssa->ops[op_2].op1_use_chain = ssa->ops[op_2].op2_use_chain; + ssa->ops[op_2].op2_use = -1; + ssa->ops[op_2].op2_use_chain = -1; + } + } + } + } + if (ssa->vars[v].var >= op_array->last_var) { /* skip TMP and VAR */ continue; diff --git a/ext/opcache/Optimizer/ssa_integrity.c b/ext/opcache/Optimizer/ssa_integrity.c index 4f042cae74255..5cb383c77ad60 100644 --- a/ext/opcache/Optimizer/ssa_integrity.c +++ b/ext/opcache/Optimizer/ssa_integrity.c @@ -287,8 +287,9 @@ int ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ext /* Phis */ FOREACH_PHI(phi) { - int source; - FOREACH_PHI_SOURCE(phi, source) { + unsigned num_sources = NUM_PHI_SOURCES(phi); + for (i = 0; i < num_sources; i++) { + int source = phi->sources[i]; if (source < 0) { FAIL(VARFMT " negative source\n", VAR(phi->ssa_var)); } @@ -298,7 +299,16 @@ int ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ext if (ssa->vars[source].var != ssa->vars[phi->ssa_var].var) { FAIL(VARFMT " source of phi for " VARFMT "\n", VAR(source), VAR(phi->ssa_var)); } - } FOREACH_PHI_SOURCE_END(); + if (phi->use_chains[i]) { + int j; + for (j = i + 1; j < num_sources; j++) { + if (phi->sources[j] == source && phi->use_chains[j]) { + FAIL("use chain for source " VARFMT " of phi " VARFMT + " at %d despite earlier use\n", VAR(source), VAR(phi->ssa_var), j); + } + } + } + } if (ssa->vars[phi->ssa_var].definition_phi != phi) { FAIL(VARFMT " does not define this phi\n", VAR(phi->ssa_var)); } diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index c306da272637c..9bb11096d891e 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -843,7 +843,6 @@ int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int uint32_t line; zend_op *opline; zend_ssa_op *ssa_op; - zend_long op1_min, op2_min, op1_max, op2_max; if (ssa->vars[var].definition_phi) { zend_ssa_phi *p = ssa->vars[var].definition_phi; @@ -984,6 +983,13 @@ int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int opline = op_array->opcodes + line; ssa_op = &ssa->ops[line]; + return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp); +} + +int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp) +{ + zend_long op1_min, op2_min, op1_max, op2_max; + tmp->underflow = 0; tmp->overflow = 0; switch (opline->opcode) { @@ -1337,16 +1343,20 @@ int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int break; case ZEND_ASSIGN_DIM: case ZEND_ASSIGN_OBJ: - if (ssa_op->op1_def == var) { - if ((opline+1)->opcode == ZEND_OP_DATA) { - opline++; - ssa_op++; + case ZEND_ASSIGN_STATIC_PROP: + case ZEND_ASSIGN_DIM_OP: + case ZEND_ASSIGN_OBJ_OP: + case ZEND_ASSIGN_STATIC_PROP_OP: + if ((ssa_op+1)->op1_def == var) { + opline++; + ssa_op++; + if (OP1_HAS_RANGE()) { tmp->min = OP1_MIN_RANGE(); tmp->max = OP1_MAX_RANGE(); tmp->underflow = OP1_RANGE_UNDERFLOW(); tmp->overflow = OP1_RANGE_OVERFLOW(); - return 1; } + return 1; } break; case ZEND_ASSIGN_OP: @@ -1359,31 +1369,14 @@ int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int } } break; - case ZEND_ASSIGN_DIM_OP: - case ZEND_ASSIGN_OBJ_OP: - case ZEND_ASSIGN_STATIC_PROP_OP: - if ((opline+1)->opcode == ZEND_OP_DATA) { - if ((ssa_op+1)->op1_def == var) { - opline++; - ssa_op++; - if (OP1_HAS_RANGE()) { - tmp->min = OP1_MIN_RANGE(); - tmp->max = OP1_MAX_RANGE(); - tmp->underflow = OP1_RANGE_UNDERFLOW(); - tmp->overflow = OP1_RANGE_OVERFLOW(); - return 1; - } - } - } - break; case ZEND_OP_DATA: - if ((opline-1)->opcode == ZEND_ASSIGN_DIM || - (opline-1)->opcode == ZEND_ASSIGN_OBJ || - ((opline-1)->opcode == ZEND_ASSIGN_OP && - ((opline-1)->extended_value == ZEND_ADD || - (opline-1)->extended_value == ZEND_SUB || - (opline-1)->extended_value == ZEND_MUL))) { - if (ssa_op->op1_def == var) { + if (ssa_op->op1_def == var) { + if ((opline-1)->opcode == ZEND_ASSIGN_DIM || + (opline-1)->opcode == ZEND_ASSIGN_OBJ || + (opline-1)->opcode == ZEND_ASSIGN_STATIC_PROP || + (opline-1)->opcode == ZEND_ASSIGN_DIM_OP || + (opline-1)->opcode == ZEND_ASSIGN_OBJ_OP || + (opline-1)->opcode == ZEND_ASSIGN_STATIC_PROP_OP) { if (OP1_HAS_RANGE()) { tmp->min = OP1_MIN_RANGE(); tmp->max = OP1_MAX_RANGE(); @@ -1991,6 +1984,9 @@ uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int } if (t1 & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)) { tmp |= MAY_BE_NULL; + if (write) { + tmp |= MAY_BE_INDIRECT; + } } if (t1 & (MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_RESOURCE)) { if (!write) { @@ -2015,24 +2011,28 @@ static uint32_t assign_dim_result_type( tmp |= MAY_BE_RC1 | MAY_BE_RCN; } if (tmp & MAY_BE_ARRAY) { - if (value_type & MAY_BE_UNDEF) { - tmp |= MAY_BE_ARRAY_OF_NULL; - } - if (dim_op_type == IS_UNUSED) { - tmp |= MAY_BE_ARRAY_KEY_LONG; - } else { - if (dim_type & (MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_RESOURCE|MAY_BE_DOUBLE)) { - tmp |= MAY_BE_ARRAY_KEY_LONG; + /* Only add key type if we have a value type. We want to maintain the invariant that a + * key type exists iff a value type exists even in dead code that may use empty types. */ + if (value_type & (MAY_BE_ANY|MAY_BE_UNDEF)) { + if (value_type & MAY_BE_UNDEF) { + tmp |= MAY_BE_ARRAY_OF_NULL; } - if (dim_type & MAY_BE_STRING) { - tmp |= MAY_BE_ARRAY_KEY_STRING; - if (dim_op_type != IS_CONST) { - // FIXME: numeric string + if (dim_op_type == IS_UNUSED) { + tmp |= MAY_BE_ARRAY_KEY_LONG; + } else { + if (dim_type & (MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_RESOURCE|MAY_BE_DOUBLE)) { tmp |= MAY_BE_ARRAY_KEY_LONG; } - } - if (dim_type & (MAY_BE_UNDEF|MAY_BE_NULL)) { - tmp |= MAY_BE_ARRAY_KEY_STRING; + if (dim_type & MAY_BE_STRING) { + tmp |= MAY_BE_ARRAY_KEY_STRING; + if (dim_op_type != IS_CONST) { + // FIXME: numeric string + tmp |= MAY_BE_ARRAY_KEY_LONG; + } + } + if (dim_type & (MAY_BE_UNDEF|MAY_BE_NULL)) { + tmp |= MAY_BE_ARRAY_KEY_STRING; + } } } /* Only add value type if we have a key type. It might be that the key type is illegal @@ -3399,18 +3399,20 @@ static zend_always_inline int _zend_update_type_info( if (opline->result_type != IS_TMP_VAR) { tmp |= MAY_BE_REF | MAY_BE_INDIRECT; } else if (!(opline->op1_type & (IS_VAR|IS_TMP_VAR)) || !(t1 & MAY_BE_RC1)) { + zend_class_entry *ce = NULL; + + if (opline->op1_type == IS_UNUSED) { + ce = op_array->scope; + } else if (ssa_op->op1_use >= 0 && !ssa->var_info[ssa_op->op1_use].is_instanceof) { + ce = ssa->var_info[ssa_op->op1_use].ce; + } if (prop_info) { /* FETCH_OBJ_R/IS for plain property increments reference counter, so it can't be 1 */ - tmp &= ~MAY_BE_RC1; - } else { - zend_class_entry *ce = NULL; - - if (opline->op1_type == IS_UNUSED) { - ce = op_array->scope; - } else if (ssa_op->op1_use >= 0 && !ssa->var_info[ssa_op->op1_use].is_instanceof) { - ce = ssa->var_info[ssa_op->op1_use].ce; + if (ce && !ce->create_object) { + tmp &= ~MAY_BE_RC1; } + } else { if (ce && !ce->create_object && !ce->__get) { tmp &= ~MAY_BE_RC1; } diff --git a/ext/opcache/Optimizer/zend_inference.h b/ext/opcache/Optimizer/zend_inference.h index 2bd120c882fbe..6b1021a4cce88 100644 --- a/ext/opcache/Optimizer/zend_inference.h +++ b/ext/opcache/Optimizer/zend_inference.h @@ -257,6 +257,7 @@ int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert); int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int var, int widening, int narrowing, zend_ssa_range *tmp); +int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp); void zend_inference_init_range(const zend_op_array *op_array, zend_ssa *ssa, int var, zend_bool underflow, zend_long min, zend_long max, zend_bool overflow); int zend_inference_narrowing_meet(zend_ssa_var_info *var_info, zend_ssa_range *r); int zend_inference_widening_meet(zend_ssa_var_info *var_info, zend_ssa_range *r); diff --git a/ext/opcache/Optimizer/zend_ssa.c b/ext/opcache/Optimizer/zend_ssa.c index 28a39823b5758..3a6a098196ffd 100644 --- a/ext/opcache/Optimizer/zend_ssa.c +++ b/ext/opcache/Optimizer/zend_ssa.c @@ -1319,11 +1319,7 @@ static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi, for (j = 0; j < predecessors_count; j++) { if (phi->sources[j] == var_num) { if (j < pred_offset) { - if (next_phi == NULL) { - next_phi = phi->use_chains[pred_offset]; - } else { - ZEND_ASSERT(phi->use_chains[pred_offset] == NULL); - } + ZEND_ASSERT(next_phi == NULL); } else if (j >= pred_offset) { phi->use_chains[j] = next_phi; } @@ -1612,6 +1608,8 @@ void zend_ssa_rename_var_uses(zend_ssa *ssa, int old, int new, zend_bool update_ new_var->phi_use_chain = phi; } after_first_new_source = 1; + } else { + phi->use_chains[j] = NULL; } } } diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 340c19764f46d..c8ee9b9da690c 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -802,7 +802,7 @@ static inline void kill_all_lockers(struct flock *mem_usage_check) /* errno is not ESRCH or we ran out of tries to kill the locker */ ZCSG(force_restart_time) = time(NULL); /* restore forced restart request */ /* cannot kill the locker, bail out with error */ - zend_accel_error(ACCEL_LOG_ERROR, "Cannot kill process %d!", mem_usage_check->l_pid); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot kill process %d!", mem_usage_check->l_pid); } mem_usage_check->l_type = F_WRLCK; @@ -2634,10 +2634,12 @@ static int zend_accel_init_shm(void) if (ZCG(accel_directives).interned_strings_buffer) { accel_shared_globals = zend_shared_alloc((ZCG(accel_directives).interned_strings_buffer * 1024 * 1024)); } else { - accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals)); + /* Make sure there is always at least one interned string hash slot, + * so the table can be queried unconditionally. */ + accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals) + sizeof(uint32_t)); } if (!accel_shared_globals) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); zend_shared_alloc_unlock(); return FAILURE; } @@ -2675,6 +2677,8 @@ static int zend_accel_init_shm(void) STRTAB_INVALID_POS, (char*)ZCSG(interned_strings).start - ((char*)&ZCSG(interned_strings) + sizeof(zend_string_table))); + } else { + *STRTAB_HASH_TO_SLOT(&ZCSG(interned_strings), 0) = STRTAB_INVALID_POS; } zend_interned_strings_set_request_storage_handlers(accel_new_interned_string_for_php, accel_init_interned_string_for_php); @@ -2977,7 +2981,7 @@ static zend_result accel_post_startup(void) page_size = getpagesize(); # endif if (!page_size || (page_size & (page_size - 1))) { - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can't get page size."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can't get page size."); abort(); } jit_size = JIT_G(buffer_size); @@ -2997,10 +3001,10 @@ static zend_result accel_post_startup(void) break; case ALLOC_FAILURE: accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - probably not enough shared memory."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - probably not enough shared memory."); return SUCCESS; case SUCCESSFULLY_REATTACHED: -#ifdef HAVE_JIT +#if defined(HAVE_JIT) && !defined(ZEND_WIN32) reattached = 1; #endif zend_shared_alloc_lock(); @@ -3010,7 +3014,7 @@ static zend_result accel_post_startup(void) break; case FAILED_REATTACHED: accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can not reattach to exiting shared memory."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can not reattach to exiting shared memory."); return SUCCESS; break; #if ENABLE_FILE_CACHE_FALLBACK @@ -3050,7 +3054,7 @@ static zend_result accel_post_startup(void) SHM_PROTECT(); } else if (!ZCG(accel_directives).file_cache) { accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "opcache.file_cache_only is set without a proper setting of opcache.file_cache"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache_only is set without a proper setting of opcache.file_cache"); return SUCCESS; } else { accel_shared_globals = calloc(1, sizeof(zend_accel_shared_globals)); @@ -4130,7 +4134,8 @@ static void preload_register_trait_methods(zend_class_entry *ce) { zend_op_array *op_array; ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) { if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { - zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array); + ZEND_ASSERT(op_array->refcount && "Must have refcount pointer"); + zend_shared_alloc_register_xlat_entry(op_array->refcount, op_array); } } ZEND_HASH_FOREACH_END(); } @@ -4141,18 +4146,20 @@ static void preload_fix_trait_methods(zend_class_entry *ce) ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) { if (op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) { - zend_op_array *orig_op_array = zend_shared_alloc_get_xlat_entry(op_array->opcodes); - if (orig_op_array) { - zend_class_entry *scope = op_array->scope; - uint32_t fn_flags = op_array->fn_flags; - zend_function *prototype = op_array->prototype; - HashTable *ht = op_array->static_variables; - *op_array = *orig_op_array; - op_array->scope = scope; - op_array->fn_flags = fn_flags; - op_array->prototype = prototype; - op_array->static_variables = ht; - } + zend_op_array *orig_op_array = zend_shared_alloc_get_xlat_entry(op_array->refcount); + ZEND_ASSERT(orig_op_array && "Must be in xlat table"); + + zend_string *function_name = op_array->function_name; + zend_class_entry *scope = op_array->scope; + uint32_t fn_flags = op_array->fn_flags; + zend_function *prototype = op_array->prototype; + HashTable *ht = op_array->static_variables; + *op_array = *orig_op_array; + op_array->function_name = function_name; + op_array->scope = scope; + op_array->fn_flags = fn_flags; + op_array->prototype = prototype; + op_array->static_variables = ht; } } ZEND_HASH_FOREACH_END(); } @@ -4183,16 +4190,12 @@ static int preload_optimize(zend_persistent_script *script) } ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) { - if (ce->num_traits) { - preload_fix_trait_methods(ce); - } + preload_fix_trait_methods(ce); } ZEND_HASH_FOREACH_END(); ZEND_HASH_FOREACH_PTR(preload_scripts, script) { ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) { - if (ce->num_traits) { - preload_fix_trait_methods(ce); - } + preload_fix_trait_methods(ce); } ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END(); @@ -4213,7 +4216,7 @@ static zend_persistent_script* preload_script_in_shared_memory(zend_persistent_s uint32_t checkpoint; if (zend_accel_hash_is_full(&ZCSG(hash))) { - zend_accel_error(ACCEL_LOG_FATAL, "Not enough entries in hash table for preloading. Consider increasing the value for the opcache.max_accelerated_files directive in php.ini."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Not enough entries in hash table for preloading. Consider increasing the value for the opcache.max_accelerated_files directive in php.ini."); return NULL; } @@ -4265,7 +4268,7 @@ static zend_persistent_script* preload_script_in_shared_memory(zend_persistent_s } #endif if (!ZCG(mem)) { - zend_accel_error(ACCEL_LOG_FATAL, "Not enough shared memory for preloading. Consider increasing the value for the opcache.memory_consumption directive in php.ini."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Not enough shared memory for preloading. Consider increasing the value for the opcache.memory_consumption directive in php.ini."); return NULL; } @@ -4444,7 +4447,6 @@ static int accel_preload(const char *config, zend_bool in_child) } CG(compiler_options) |= ZEND_COMPILE_PRELOAD; CG(compiler_options) |= ZEND_COMPILE_HANDLE_OP_ARRAY; - CG(compiler_options) |= ZEND_COMPILE_IGNORE_INTERNAL_CLASSES; CG(compiler_options) |= ZEND_COMPILE_DELAYED_BINDING; CG(compiler_options) |= ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION; CG(compiler_options) |= ZEND_COMPILE_IGNORE_OTHER_FILES; @@ -4475,6 +4477,10 @@ static int accel_preload(const char *config, zend_bool in_child) destroy_op_array(op_array); efree_size(op_array, sizeof(zend_op_array)); } else { + if (EG(exception)) { + zend_exception_error(EG(exception), E_ERROR); + } + CG(unclean_shutdown) = 1; ret = FAILURE; } @@ -4510,6 +4516,7 @@ static int accel_preload(const char *config, zend_bool in_child) php_call_shutdown_functions(); zend_call_destructors(); + php_output_end_all(); php_free_shutdown_functions(); /* Release stored values to avoid dangling pointers */ @@ -4583,7 +4590,7 @@ static int accel_preload(const char *config, zend_bool in_child) CG(map_ptr_last) = orig_map_ptr_last; if (EG(full_tables_cleanup)) { - zend_accel_error(ACCEL_LOG_FATAL, "Preloading is not compatible with dl() function."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading is not compatible with dl() function."); ret = FAILURE; goto finish; } @@ -4666,7 +4673,7 @@ static int accel_preload(const char *config, zend_bool in_child) zend_hash_sort_ex(&script->script.class_table, preload_sort_classes, NULL, 0); if (preload_optimize(script) != SUCCESS) { - zend_accel_error(ACCEL_LOG_FATAL, "Optimization error during preloading!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Optimization error during preloading!"); return FAILURE; } @@ -4765,7 +4772,7 @@ static int accel_finish_startup(void) if (ZCG(accel_directives).preload && *ZCG(accel_directives).preload) { #ifdef ZEND_WIN32 - zend_accel_error(ACCEL_LOG_ERROR, "Preloading is not supported on Windows"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Preloading is not supported on Windows"); return FAILURE; #else int in_child = 0; @@ -4808,21 +4815,21 @@ static int accel_finish_startup(void) if (!ZCG(accel_directives).preload_user || !*ZCG(accel_directives).preload_user) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "\"opcache.preload_user\" has not been defined"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "\"opcache.preload_user\" has not been defined"); return FAILURE; } pw = getpwnam(ZCG(accel_directives).preload_user); if (pw == NULL) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to getpwnam(\"%s\")", ZCG(accel_directives).preload_user); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to getpwnam(\"%s\")", ZCG(accel_directives).preload_user); return FAILURE; } pid = fork(); if (pid == -1) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to fork()"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to fork()"); return FAILURE; } else if (pid == 0) { /* children */ if (setgid(pw->pw_gid) < 0) { @@ -4843,7 +4850,7 @@ static int accel_finish_startup(void) if (waitpid(pid, &status, 0) < 0) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to waitpid(%d)", pid); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to waitpid(%d)", pid); return FAILURE; } diff --git a/ext/opcache/jit/zend_elf.c b/ext/opcache/jit/zend_elf.c index 58d6fdd72cc6a..ce44b5208b358 100644 --- a/ext/opcache/jit/zend_elf.c +++ b/ext/opcache/jit/zend_elf.c @@ -19,7 +19,7 @@ #include #include -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__DragonFly__) #include #elif defined(__HAIKU__) #include @@ -55,7 +55,7 @@ void zend_elf_load_symbols(void) int fd = open("/proc/self/exe", O_RDONLY); #elif defined(__NetBSD__) int fd = open("/proc/curproc/exe", O_RDONLY); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) char path[PATH_MAX]; size_t pathlen = sizeof(path); int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 7c9a8bb7cff2e..eea6b5c7ba972 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -16,6 +16,7 @@ +----------------------------------------------------------------------+ */ +#include "php_version.h" #include #include "zend_shared_alloc.h" #include "Zend/zend_execute.h" @@ -192,6 +193,7 @@ static zend_bool zend_long_is_power_of_two(zend_long x) #define OP_RANGE(ssa_op, opN) \ (((opline->opN##_type & (IS_TMP_VAR|IS_VAR|IS_CV)) && \ + ssa->var_info && \ (ssa_op)->opN##_use >= 0 && \ ssa->var_info[(ssa_op)->opN##_use].has_range) ? \ &ssa->var_info[(ssa_op)->opN##_use].range : NULL) @@ -726,6 +728,11 @@ static int zend_jit_op_array_analyze1(const zend_op_array *op_array, zend_script } #endif + /* TODO: move this to zend_cfg.c ? */ + if (!op_array->function_name) { + ssa->cfg.flags |= ZEND_FUNC_INDIRECT_VAR_ACCESS; + } + if ((JIT_G(opt_level) >= ZEND_JIT_LEVEL_OPT_FUNC) && ssa->cfg.blocks && op_array->last_try_catch == 0 @@ -962,7 +969,8 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval ** if (ival) { if ((ival->range.start > last->range.start) || (ival->range.start == last->range.start && - ival->range.end > last->range.end)) { + ((!ival->hint && last->hint && last->hint != ival) || + ival->range.end > last->range.end))) { last->list_next = ival; last = ival; ival->list_next = NULL; @@ -976,7 +984,8 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval ** break; } else if ((ival->range.start < (*p)->range.start) || (ival->range.start == (*p)->range.start && - ival->range.end < (*p)->range.end)) { + ((ival->hint && !(*p)->hint && ival->hint != *p) || + ival->range.end < (*p)->range.end))) { ival->list_next = *p; *p = ival; break; @@ -1366,6 +1375,27 @@ static int zend_jit_compute_liveness(const zend_op_array *op_array, zend_ssa *ss zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use); } break; + case ZEND_SUB: + case ZEND_ADD: + case ZEND_MUL: + case ZEND_BW_OR: + case ZEND_BW_AND: + case ZEND_BW_XOR: + if (i == ssa->ops[line].result_def) { + if (ssa->ops[line].op1_use >= 0 && + intervals[ssa->ops[line].op1_use] && + ssa->ops[line].op1_use_chain < 0 && + !ssa->vars[ssa->ops[line].op1_use].phi_use_chain) { + zend_jit_add_hint(intervals, i, ssa->ops[line].op1_use); + } else if (opline->opcode != ZEND_SUB && + ssa->ops[line].op2_use >= 0 && + intervals[ssa->ops[line].op2_use] && + ssa->ops[line].op2_use_chain < 0 && + !ssa->vars[ssa->ops[line].op2_use].phi_use_chain) { + zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use); + } + } + break; } } } @@ -1535,6 +1565,15 @@ static int zend_jit_try_allocate_free_reg(const zend_op_array *op_array, const z if (ssa->ops[line].op1_def == current->ssa_var || ssa->ops[line].op2_def == current->ssa_var || ssa->ops[line].result_def == current->ssa_var) { + regset = zend_jit_get_def_scratch_regset( + ssa_opcodes ? ssa_opcodes[line] : op_array->opcodes + line, + ssa->ops + line, + op_array, ssa, current->ssa_var, line == last_use_line); + ZEND_REGSET_FOREACH(regset, reg) { + if (line < freeUntilPos[reg]) { + freeUntilPos[reg] = line; + } + } ZEND_REGSET_FOREACH_END(); line++; } while (line <= range->end) { @@ -2224,7 +2263,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else if (ival->flags & ZREG_STORE) { ZEND_ASSERT(ival->reg != ZREG_NONE); - if (!zend_jit_store_var(&dasm_state, ssa->var_info[phi->ssa_var].type, ssa->vars[phi->ssa_var].var, ival->reg)) { + if (!zend_jit_store_var(&dasm_state, ssa->var_info[phi->ssa_var].type, ssa->vars[phi->ssa_var].var, ival->reg, 1)) { goto jit_failure; } } @@ -2677,14 +2716,14 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } if (!zend_jit_qm_assign(&dasm_state, opline, OP1_INFO(), op1_addr, op1_def_addr, - RES_INFO(), RES_REG_ADDR())) { + -1, RES_INFO(), RES_REG_ADDR())) { goto jit_failure; } goto done; case ZEND_INIT_FCALL: case ZEND_INIT_FCALL_BY_NAME: case ZEND_INIT_NS_FCALL_BY_NAME: - if (!zend_jit_init_fcall(&dasm_state, opline, b, op_array, ssa, ssa_op, call_level, NULL)) { + if (!zend_jit_init_fcall(&dasm_state, opline, b, op_array, ssa, ssa_op, call_level, NULL, 1)) { goto jit_failure; } goto done; @@ -2796,8 +2835,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op target_label = target_label2 = (uint32_t)-1; } if (!zend_jit_cmp(&dasm_state, opline, - OP1_INFO(), OP1_REG_ADDR(), - OP2_INFO(), OP2_REG_ADDR(), + OP1_INFO(), OP1_RANGE(), OP1_REG_ADDR(), + OP2_INFO(), OP2_RANGE(), OP2_REG_ADDR(), res_addr, zend_may_throw(opline, ssa_op, op_array, ssa), smart_branch_opcode, target_label, target_label2, @@ -2825,8 +2864,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op target_label = target_label2 = (uint32_t)-1; } if (!zend_jit_identical(&dasm_state, opline, - OP1_INFO(), OP1_REG_ADDR(), - OP2_INFO(), OP2_REG_ADDR(), + OP1_INFO(), OP1_RANGE(), OP1_REG_ADDR(), + OP2_INFO(), OP2_RANGE(), OP2_REG_ADDR(), RES_REG_ADDR(), zend_may_throw(opline, ssa_op, op_array, ssa), smart_branch_opcode, target_label, target_label2, @@ -2891,6 +2930,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } } else { int j; + zend_bool left_frame = 0; if (!zend_jit_return(&dasm_state, opline, op_array, op1_info, OP1_REG_ADDR())) { @@ -2906,20 +2946,23 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (!zend_jit_label(&dasm_state, jit_return_label)) { goto jit_failure; } - if (!zend_jit_leave_frame(&dasm_state)) { - goto jit_failure; - } for (j = 0 ; j < op_array->last_var; j++) { uint32_t info = zend_ssa_cv_info(op_array, ssa, j); if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { + if (!left_frame) { + left_frame = 1; + if (!zend_jit_leave_frame(&dasm_state)) { + goto jit_failure; + } + } if (!zend_jit_free_cv(&dasm_state, info, j)) { goto jit_failure; } } } - if (!zend_jit_leave_func(&dasm_state, op_array, opline, op1_info, NULL, NULL, - (ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS) != 0, 1)) { + if (!zend_jit_leave_func(&dasm_state, op_array, opline, op1_info, left_frame, + NULL, NULL, (ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS) != 0, 1)) { goto jit_failure; } } @@ -3253,7 +3296,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } if (!zend_jit_init_method_call(&dasm_state, opline, b, op_array, ssa, ssa_op, call_level, op1_info, op1_addr, ce, ce_is_instanceof, 0, NULL, - NULL)) { + NULL, 1)) { goto jit_failure; } goto done; diff --git a/ext/opcache/jit/zend_jit.h b/ext/opcache/jit/zend_jit.h index 7ffc80ef36f30..ed0dc29a6c82b 100644 --- a/ext/opcache/jit/zend_jit.h +++ b/ext/opcache/jit/zend_jit.h @@ -101,7 +101,7 @@ typedef struct _zend_jit_globals { zend_long hot_side_exit; /* number of exits before taking side trace */ zend_long blacklist_root_trace; /* number of attempts to JIT a root trace before blacklist it */ zend_long blacklist_side_trace; /* number of attempts to JIT a side trace before blacklist it */ - zend_long max_loops_unroll; /* max number of unrolled loops */ + zend_long max_loop_unrolls; /* max number of unrolled loops */ zend_long max_recursive_calls; /* max number of recursive inlined call unrolls */ zend_long max_recursive_returns; /* max number of recursive inlined return unrolls */ zend_long max_polymorphic_calls; /* max number of inlined polymorphic calls */ diff --git a/ext/opcache/jit/zend_jit_disasm_x86.c b/ext/opcache/jit/zend_jit_disasm_x86.c index a470179917e6d..afd830e89f1aa 100644 --- a/ext/opcache/jit/zend_jit_disasm_x86.c +++ b/ext/opcache/jit/zend_jit_disasm_x86.c @@ -421,6 +421,7 @@ static int zend_jit_disasm_init(void) REGISTER_HELPER(zend_jit_fetch_dim_r_helper); REGISTER_HELPER(zend_jit_fetch_dim_is_helper); REGISTER_HELPER(zend_jit_fetch_dim_isset_helper); + REGISTER_HELPER(zend_jit_fetch_dim_str_offset_r_helper); REGISTER_HELPER(zend_jit_fetch_dim_str_r_helper); REGISTER_HELPER(zend_jit_fetch_dim_str_is_helper); REGISTER_HELPER(zend_jit_fetch_dim_obj_r_helper); @@ -490,6 +491,9 @@ static int zend_jit_disasm_init(void) REGISTER_HELPER(zend_jit_pre_dec_obj_helper); REGISTER_HELPER(zend_jit_post_inc_obj_helper); REGISTER_HELPER(zend_jit_post_dec_obj_helper); +#if (PHP_VERSION_ID <= 80000) && (SIZEOF_SIZE_T == 4) + REGISTER_HELPER(zval_jit_update_constant_ex); +#endif #undef REGISTER_HELPER #ifndef _WIN32 diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 22904a8e1d3bc..5d5a30541b7c0 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -437,7 +437,7 @@ static int ZEND_FASTCALL zend_jit_undefined_op_helper_write(HashTable *ht, uint3 static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim, zval *result) { - zend_long hval; + zend_ulong hval; zend_string *offset_key; zval *retval; @@ -478,6 +478,9 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim, } str_index: + if (ZEND_HANDLE_NUMERIC(offset_key, hval)) { + goto num_index; + } retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -509,7 +512,7 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim, static void ZEND_FASTCALL zend_jit_fetch_dim_is_helper(zend_array *ht, zval *dim, zval *result) { - zend_long hval; + zend_ulong hval; zend_string *offset_key; zval *retval; @@ -550,6 +553,9 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_is_helper(zend_array *ht, zval *dim } str_index: + if (ZEND_HANDLE_NUMERIC(offset_key, hval)) { + goto num_index; + } retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -578,7 +584,7 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_is_helper(zend_array *ht, zval *dim static int ZEND_FASTCALL zend_jit_fetch_dim_isset_helper(zend_array *ht, zval *dim) { - zend_long hval; + zend_ulong hval; zend_string *offset_key; zval *retval; @@ -618,6 +624,9 @@ static int ZEND_FASTCALL zend_jit_fetch_dim_isset_helper(zend_array *ht, zval *d } str_index: + if (ZEND_HANDLE_NUMERIC(offset_key, hval)) { + goto num_index; + } retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -645,7 +654,7 @@ static int ZEND_FASTCALL zend_jit_fetch_dim_isset_helper(zend_array *ht, zval *d static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *dim) { - zend_long hval; + zend_ulong hval; zend_string *offset_key; zval *retval; @@ -688,6 +697,9 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *di } str_index: + if (ZEND_HANDLE_NUMERIC(offset_key, hval)) { + goto num_index; + } retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -726,7 +738,7 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *di static zval* ZEND_FASTCALL zend_jit_fetch_dim_w_helper(zend_array *ht, zval *dim) { - zend_long hval; + zend_ulong hval; zend_string *offset_key; zval *retval; @@ -769,6 +781,9 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_w_helper(zend_array *ht, zval *dim } str_index: + if (ZEND_HANDLE_NUMERIC(offset_key, hval)) { + goto num_index; + } retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -834,7 +849,30 @@ static zend_never_inline zend_long zend_check_string_offset(zval *dim/*, int typ return _zval_get_long_func(dim); } -static void ZEND_FASTCALL zend_jit_fetch_dim_str_r_helper(zval *container, zval *dim, zval *result) +static zend_always_inline zend_string* zend_jit_fetch_dim_str_offset(zend_string *str, zend_long offset) +{ + if (UNEXPECTED((zend_ulong)offset >= (zend_ulong)ZSTR_LEN(str))) { + if (EXPECTED(offset < 0)) { + /* Handle negative offset */ + zend_long real_offset = (zend_long)ZSTR_LEN(str) + offset; + + if (EXPECTED(real_offset >= 0)) { + return ZSTR_CHAR((zend_uchar)ZSTR_VAL(str)[real_offset]); + } + } + zend_error(E_WARNING, "Uninitialized string offset " ZEND_LONG_FMT, offset); + return ZSTR_EMPTY_ALLOC(); + } else { + return ZSTR_CHAR((zend_uchar)ZSTR_VAL(str)[offset]); + } +} + +static zend_string* ZEND_FASTCALL zend_jit_fetch_dim_str_offset_r_helper(zend_string *str, zend_long offset) +{ + return zend_jit_fetch_dim_str_offset(str, offset); +} + +static zend_string* ZEND_FASTCALL zend_jit_fetch_dim_str_r_helper(zend_string *str, zval *dim) { zend_long offset; @@ -843,22 +881,10 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_str_r_helper(zval *container, zval } else { offset = Z_LVAL_P(dim); } - - if (UNEXPECTED(Z_STRLEN_P(container) < ((offset < 0) ? -(size_t)offset : ((size_t)offset + 1)))) { - zend_error(E_WARNING, "Uninitialized string offset " ZEND_LONG_FMT, offset); - ZVAL_EMPTY_STRING(result); - } else { - zend_uchar c; - zend_long real_offset; - - real_offset = (UNEXPECTED(offset < 0)) /* Handle negative offset */ - ? (zend_long)Z_STRLEN_P(container) + offset : offset; - c = (zend_uchar)Z_STRVAL_P(container)[real_offset]; - ZVAL_CHAR(result, c); - } + return zend_jit_fetch_dim_str_offset(str, offset); } -static void ZEND_FASTCALL zend_jit_fetch_dim_str_is_helper(zval *container, zval *dim, zval *result) +static void ZEND_FASTCALL zend_jit_fetch_dim_str_is_helper(zend_string *str, zval *dim, zval *result) { zend_long offset; @@ -892,16 +918,19 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_str_is_helper(zval *container, zval offset = Z_LVAL_P(dim); } - if (UNEXPECTED(Z_STRLEN_P(container) < ((offset < 0) ? -(size_t)offset : ((size_t)offset + 1)))) { + if ((zend_ulong)offset >= (zend_ulong)ZSTR_LEN(str)) { + if (offset < 0) { + /* Handle negative offset */ + zend_long real_offset = (zend_long)ZSTR_LEN(str) + offset; + + if (real_offset >= 0) { + ZVAL_CHAR(result, (zend_uchar)ZSTR_VAL(str)[real_offset]); + return; + } + } ZVAL_NULL(result); } else { - zend_uchar c; - zend_long real_offset; - - real_offset = (UNEXPECTED(offset < 0)) /* Handle negative offset */ - ? (zend_long)Z_STRLEN_P(container) + offset : offset; - c = (zend_uchar)Z_STRVAL_P(container)[real_offset]; - ZVAL_CHAR(result, c); + ZVAL_CHAR(result, (zend_uchar)ZSTR_VAL(str)[offset]); } } @@ -2609,3 +2638,32 @@ static void ZEND_FASTCALL zend_jit_post_dec_obj_helper(zend_object *zobj, zend_s zval_ptr_dtor(z); } } + +#if (PHP_VERSION_ID <= 80000) && (SIZEOF_SIZE_T == 4) +static zend_result ZEND_FASTCALL zval_jit_update_constant_ex(zval *p, zend_class_entry *scope) +{ + if (Z_TYPE_P(p) == IS_CONSTANT_AST) { + zend_ast *ast = Z_ASTVAL_P(p); + + if (ast->kind == ZEND_AST_CONSTANT) { + zend_string *name = zend_ast_get_constant_name(ast); + zval *zv = zend_get_constant_ex(name, scope, ast->attr); + if (UNEXPECTED(zv == NULL)) { + return FAILURE; + } + + zval_ptr_dtor_nogc(p); + ZVAL_COPY_OR_DUP(p, zv); + } else { + zval tmp; + + if (UNEXPECTED(zend_ast_evaluate(&tmp, ast, scope) != SUCCESS)) { + return FAILURE; + } + zval_ptr_dtor_nogc(p); + ZVAL_COPY_VALUE(p, &tmp); + } + } + return SUCCESS; +} +#endif \ No newline at end of file diff --git a/ext/opcache/jit/zend_jit_internal.h b/ext/opcache/jit/zend_jit_internal.h index e1cf4ffb8dba8..22a5aa4100b25 100644 --- a/ext/opcache/jit/zend_jit_internal.h +++ b/ext/opcache/jit/zend_jit_internal.h @@ -317,9 +317,10 @@ typedef union _zend_jit_trace_stack { int32_t ssa_var; uint32_t info; struct { - uint8_t type; - int8_t reg; - uint16_t flags; + uint8_t type; /* variable type (for type inference) */ + uint8_t mem_type; /* stack slot type (for eliminate dead type store) */ + int8_t reg; + uint8_t flags; }; } zend_jit_trace_stack; @@ -329,21 +330,34 @@ typedef union _zend_jit_trace_stack { (_stack)[_slot].info #define STACK_TYPE(_stack, _slot) \ (_stack)[_slot].type +#define STACK_MEM_TYPE(_stack, _slot) \ + (_stack)[_slot].mem_type #define STACK_REG(_stack, _slot) \ (_stack)[_slot].reg +#define STACK_FLAGS(_stack, _slot) \ + (_stack)[_slot].flags #define SET_STACK_VAR(_stack, _slot, _ssa_var) do { \ (_stack)[_slot].ssa_var = _ssa_var; \ } while (0) #define SET_STACK_INFO(_stack, _slot, _info) do { \ (_stack)[_slot].info = _info; \ } while (0) -#define SET_STACK_TYPE(_stack, _slot, _type) do { \ - (_stack)[_slot].type = _type; \ +#define SET_STACK_TYPE(_stack, _slot, _type, _set_mem_type) do { \ + uint8_t __type = (_type); \ + (_stack)[_slot].type = __type; \ + if (_set_mem_type) { \ + (_stack)[_slot].mem_type = __type; \ + } \ (_stack)[_slot].reg = ZREG_NONE; \ (_stack)[_slot].flags = 0; \ } while (0) #define SET_STACK_REG(_stack, _slot, _reg) do { \ (_stack)[_slot].reg = _reg; \ + (_stack)[_slot].flags = 0; \ + } while (0) +#define SET_STACK_REG_EX(_stack, _slot, _reg, _flags) do { \ + (_stack)[_slot].reg = _reg; \ + (_stack)[_slot].flags = _flags; \ } while (0) /* trace info flags */ @@ -378,6 +392,7 @@ struct _zend_jit_trace_stack_frame { const zend_op *call_opline; uint32_t call_level; uint32_t _info; + int used_stack; zend_jit_trace_stack stack[1]; }; @@ -441,6 +456,10 @@ struct _zend_jit_trace_stack_frame { (frame)->_info |= TRACE_FRAME_MASK_LAST_SEND_BY_VAL; \ (frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_REF; \ } while (0) +#define TRACE_FRAME_SET_LAST_SEND_UNKNOWN(frame) do { \ + (frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_VAL; \ + (frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_REF; \ + } while (0) #define TRACE_FRAME_SET_RETURN_VALUE_USED(frame) do { \ (frame)->_info |= TRACE_FRAME_MASK_RETURN_VALUE_USED; \ (frame)->_info &= ~TRACE_FRAME_MASK_RETURN_VALUE_UNUSED; \ diff --git a/ext/opcache/jit/zend_jit_perf_dump.c b/ext/opcache/jit/zend_jit_perf_dump.c index 613280c2179d2..8555be2b80ea4 100644 --- a/ext/opcache/jit/zend_jit_perf_dump.c +++ b/ext/opcache/jit/zend_jit_perf_dump.c @@ -32,6 +32,9 @@ # include #elif defined(__NetBSD__) # include +#elif defined(__DragonFly__) +# include +# include #elif defined(__sun) // avoiding thread.h inclusion as it conflicts with vtunes types. extern unsigned int thr_self(void); @@ -124,7 +127,7 @@ static void zend_jit_perf_jitdump_open(void) fd = open("/proc/self/exe", O_RDONLY); #elif defined(__NetBSD__) fd = open("/proc/curproc/exe", O_RDONLY); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) char path[PATH_MAX]; size_t pathlen = sizeof(path); int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; @@ -226,6 +229,8 @@ static void zend_jit_perf_jitdump_register(const char *name, void *start, size_t thread_id = getthrid(); #elif defined(__NetBSD__) thread_id = _lwp_self(); +#elif defined(__DragonFly__) + thread_id = lwp_gettid(); #elif defined(__sun) thread_id = thr_self(); #endif diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 0d691f8c2da8f..e15dde5354e18 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -28,6 +28,8 @@ static const void **zend_jit_exit_groups = NULL; #define ZEND_JIT_TRACE_STOP_DESCRIPTION(name, description) \ description, +#define USE_ABSTRACT_STACK_FOR_RES_USE_INFO 1 + static const char * zend_jit_trace_stop_description[] = { ZEND_JIT_TRACE_STOP(ZEND_JIT_TRACE_STOP_DESCRIPTION) }; @@ -152,6 +154,7 @@ static uint32_t zend_jit_trace_get_exit_point(const zend_op *to_opline, uint32_t stack = JIT_G(current_frame)->stack; do { if (STACK_TYPE(stack, stack_size-1) != IS_UNKNOWN + || STACK_MEM_TYPE(stack, stack_size-1) != IS_UNKNOWN || STACK_REG(stack, stack_size-1) != ZREG_NONE) { break; } @@ -363,61 +366,51 @@ static zend_always_inline zend_ssa_alias_kind zend_jit_var_may_alias(const zend_ return NO_ALIAS; } -#define STACK_VAR_TYPE(_var) \ - STACK_TYPE(stack, EX_VAR_TO_NUM(_var)) - -#define SET_STACK_VAR_TYPE(_var, _type) do { \ - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(_var), _type); \ - } while (0) - - - -static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array *op_array, - const zend_ssa *ssa, - zend_ssa *tssa, - uint32_t var, +static zend_always_inline void zend_jit_trace_add_op_guard(zend_ssa *tssa, int ssa_var, uint8_t op_type) { zend_ssa_var_info *info = &tssa->var_info[ssa_var]; - if (zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(var)) != NO_ALIAS) { - info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info(op_type); - } else if ((info->type & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << op_type)) { - info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info_ex(op_type, info->type); + if ((info->type & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << op_type)) { + if (UNEXPECTED(tssa->vars[ssa_var].alias != NO_ALIAS)) { + info->type |= MAY_BE_GUARD; + } else { + info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info_ex(op_type, info->type); + } } } -#define ADD_OP_GUARD(_var, _ssa_var, _op_type) do { \ +#define ADD_OP_GUARD(_ssa_var, _op_type) do { \ if (_ssa_var >= 0 && _op_type != IS_UNKNOWN) { \ - zend_jit_trace_add_op_guard(op_array, ssa, tssa, _var, _ssa_var, _op_type); \ + zend_jit_trace_add_op_guard(tssa, _ssa_var, _op_type); \ } \ } while (0) #define CHECK_OP_TRACE_TYPE(_var, _ssa_var, op_info, op_type) do { \ if (op_type != IS_UNKNOWN) { \ - if ((op_info & MAY_BE_GUARD) != 0 \ - && op_type != STACK_VAR_TYPE(_var)) { \ + if ((op_info & MAY_BE_GUARD) != 0) { \ if (!zend_jit_type_guard(&dasm_state, opline, _var, op_type)) { \ goto jit_failure; \ } \ - if (zend_jit_var_may_alias(op_array, op_array_ssa, _var) != NO_ALIAS) { \ - SET_STACK_VAR_TYPE(_var, IS_UNKNOWN); \ + if (ssa->vars[_ssa_var].alias != NO_ALIAS) { \ + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(_var), IS_UNKNOWN, 1); \ + op_info = zend_jit_trace_type_to_info(op_type); \ } else { \ - SET_STACK_VAR_TYPE(_var, op_type); \ + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(_var), op_type, 1); \ op_info &= ~MAY_BE_GUARD; \ + ssa->var_info[_ssa_var].type &= op_info; \ } \ - ssa->var_info[_ssa_var].type &= op_info; \ } \ } \ } while (0) #define ADD_OP1_TRACE_GUARD() \ - ADD_OP_GUARD(opline->op1.var, tssa->ops[idx].op1_use, op1_type) + ADD_OP_GUARD(tssa->ops[idx].op1_use, op1_type) #define ADD_OP2_TRACE_GUARD() \ - ADD_OP_GUARD(opline->op2.var, tssa->ops[idx].op2_use, op2_type) + ADD_OP_GUARD(tssa->ops[idx].op2_use, op2_type) #define ADD_OP1_DATA_TRACE_GUARD() \ - ADD_OP_GUARD((opline+1)->op1.var, tssa->ops[idx+1].op1_use, op3_type) + ADD_OP_GUARD(tssa->ops[idx+1].op1_use, op3_type) #define CHECK_OP1_TRACE_TYPE() \ CHECK_OP_TRACE_TYPE(opline->op1.var, ssa_op->op1_use, op1_info, op1_type) @@ -426,21 +419,12 @@ static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array #define CHECK_OP1_DATA_TRACE_TYPE() \ CHECK_OP_TRACE_TYPE((opline+1)->op1.var, (ssa_op+1)->op1_use, op1_data_info, op3_type) -#define SET_OP1_STACK_VAR_TYPE(_type) \ - SET_STACK_VAR_TYPE(opline->op1.var, _type) -#define SET_OP2_STACK_VAR_TYPE( _type) \ - SET_STACK_VAR_TYPE(opline->op2.var, _type) -#define SET_OP1_DATA_STACK_VAR_TYPE(_type) \ - SET_STACK_VAR_TYPE((opline+1)->op1.var, _type) -#define SET_RES_STACK_VAR_TYPE(_type) \ - SET_STACK_VAR_TYPE(opline->result.var, _type) - static zend_always_inline size_t zend_jit_trace_frame_size(const zend_op_array *op_array) { if (op_array && op_array->type == ZEND_USER_FUNCTION) { - return offsetof(zend_jit_trace_stack_frame, stack) + ZEND_MM_ALIGNED_SIZE((op_array->last_var + op_array->T) * sizeof(zend_jit_trace_stack)); + return ZEND_MM_ALIGNED_SIZE(offsetof(zend_jit_trace_stack_frame, stack) + ZEND_MM_ALIGNED_SIZE((op_array->last_var + op_array->T) * sizeof(zend_jit_trace_stack))); } else { - return offsetof(zend_jit_trace_stack_frame, stack); + return ZEND_MM_ALIGNED_SIZE(offsetof(zend_jit_trace_stack_frame, stack)); } } @@ -476,7 +460,7 @@ static void zend_jit_trace_send_type(const zend_op *opline, zend_jit_trace_stack } } } - SET_STACK_VAR_TYPE(opline->result.var, type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), type, 1); } static zend_ssa *zend_jit_trace_build_ssa(const zend_op_array *op_array, zend_script *script) @@ -669,12 +653,73 @@ static int zend_jit_trace_add_phis(zend_jit_trace_rec *trace_buffer, uint32_t ss return ssa_vars_count; } +static int zend_jit_trace_add_call_phis(zend_jit_trace_rec *trace_buffer, uint32_t ssa_vars_count, zend_ssa *tssa, zend_jit_trace_stack *stack) +{ + zend_ssa_phi *prev = NULL; + const zend_op_array *op_array = trace_buffer->op_array; + const zend_op *opline = trace_buffer[1].opline; + int count = opline - op_array->opcodes; + int i; + + for(i = 0; i < count; i++) { + zend_ssa_phi *phi = zend_arena_calloc(&CG(arena), 1, + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)) + + ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2) + + sizeof(void*) * 2); + phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); + phi->sources[0] = STACK_VAR(stack, i); + phi->sources[1] = -1; + phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2)); + phi->pi = -1; + phi->var = i; + phi->ssa_var = ssa_vars_count; + SET_STACK_VAR(stack, i, ssa_vars_count); + ssa_vars_count++; + phi->block = 1; + if (prev) { + prev->next = phi; + } else { + tssa->blocks[1].phis = phi; + } + prev = phi; + } + return ssa_vars_count; +} + +static int zend_jit_trace_add_ret_phis(zend_jit_trace_rec *trace_buffer, uint32_t ssa_vars_count, zend_ssa *tssa, zend_jit_trace_stack *stack) +{ + const zend_op *opline = trace_buffer[1].opline - 1; + int i; + + if (RETURN_VALUE_USED(opline)) { + zend_ssa_phi *phi = zend_arena_calloc(&CG(arena), 1, + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)) + + ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2) + + sizeof(void*) * 2); + + i = EX_VAR_TO_NUM(opline->result.var); + phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); + phi->sources[0] = STACK_VAR(stack, i); + phi->sources[1] = -1; + phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2)); + phi->pi = -1; + phi->var = i; + phi->ssa_var = ssa_vars_count; + SET_STACK_VAR(stack, i, ssa_vars_count); + ssa_vars_count++; + phi->block = 1; + tssa->blocks[1].phis = phi; + } + return ssa_vars_count; +} + static int zend_jit_trace_copy_ssa_var_info(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op **tssa_opcodes, zend_ssa *tssa, int ssa_var) { int var, use; zend_ssa_op *op; zend_ssa_var_info *info; unsigned int no_val; + zend_ssa_alias_kind alias; if (tssa->vars[ssa_var].phi_use_chain) { // TODO: this may be incorrect ??? @@ -688,17 +733,21 @@ static int zend_jit_trace_copy_ssa_var_info(const zend_op_array *op_array, const op = ssa->ops + (tssa_opcodes[use] - op_array->opcodes); if (tssa->ops[use].op1_use == var) { no_val = ssa->vars[op->op1_use].no_val; + alias = ssa->vars[op->op1_use].alias; info = ssa->var_info + op->op1_use; } else if (tssa->ops[use].op2_use == var) { no_val = ssa->vars[op->op2_use].no_val; + alias = ssa->vars[op->op2_use].alias; info = ssa->var_info + op->op2_use; } else if (tssa->ops[use].result_use == var) { no_val = ssa->vars[op->result_use].no_val; + alias = ssa->vars[op->result_use].alias; info = ssa->var_info + op->result_use; } else { assert(0); } tssa->vars[ssa_var].no_val = no_val; + tssa->vars[ssa_var].alias = alias; memcpy(&tssa->var_info[ssa_var], info, sizeof(zend_ssa_var_info)); return 1; } @@ -711,6 +760,7 @@ static int zend_jit_trace_copy_ssa_var_range(const zend_op_array *op_array, cons zend_ssa_op *op; zend_ssa_var_info *info; unsigned int no_val; + zend_ssa_alias_kind alias; def = tssa->vars[ssa_var].definition; if (def >= 0) { @@ -718,18 +768,22 @@ static int zend_jit_trace_copy_ssa_var_range(const zend_op_array *op_array, cons op = ssa->ops + (tssa_opcodes[def] - op_array->opcodes); if (tssa->ops[def].op1_def == ssa_var) { no_val = ssa->vars[op->op1_def].no_val; + alias = ssa->vars[op->op1_def].alias; info = ssa->var_info + op->op1_def; } else if (tssa->ops[def].op2_def == ssa_var) { no_val = ssa->vars[op->op2_def].no_val; + alias = ssa->vars[op->op2_def].alias; info = ssa->var_info + op->op2_def; } else if (tssa->ops[def].result_def == ssa_var) { no_val = ssa->vars[op->result_def].no_val; + alias = ssa->vars[op->result_def].alias; info = ssa->var_info + op->result_def; } else { assert(0); } tssa->vars[ssa_var].no_val = no_val; + tssa->vars[ssa_var].alias = alias; if (info->has_range) { if (tssa->var_info[ssa_var].has_range) { @@ -775,7 +829,8 @@ static int zend_jit_trace_restrict_ssa_var_info(const zend_op_array *op_array, c } else if (instanceof_function(info->ce, tssa->var_info[ssa_var].ce)) { // TODO: TSSA may miss Pi() functions and corresponding instanceof() constraints ??? } else { - ZEND_UNREACHABLE(); + // TODO: classes may implement the same interface ??? + //ZEND_UNREACHABLE(); } } tssa->var_info[ssa_var].is_instanceof = @@ -933,6 +988,7 @@ static int is_checked_guard(const zend_ssa *tssa, const zend_op **ssa_opcodes, u typedef struct _zend_tssa { zend_ssa ssa; const zend_op **tssa_opcodes; + int used_stack; } zend_tssa; static const zend_op _nop_opcode = {0}; @@ -951,7 +1007,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin zend_jit_trace_stack *stack; uint32_t build_flags = ZEND_SSA_RC_INFERENCE | ZEND_SSA_USE_CV_RESULTS; uint32_t optimization_level = 0; - int call_level, level, num_op_arrays; + int call_level, level, num_op_arrays, used_stack, max_used_stack; size_t frame_size, stack_top, stack_size, stack_bottom; zend_jit_op_array_trace_extension *jit_extension; zend_ssa *ssa; @@ -1090,7 +1146,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin tssa->blocks = zend_arena_calloc(&CG(arena), 2, sizeof(zend_ssa_block)); tssa->cfg.predecessors = zend_arena_calloc(&CG(arena), 2, sizeof(int)); - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { tssa->cfg.blocks_count = 2; tssa->cfg.edges_count = 2; @@ -1116,6 +1174,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin tssa->cfg.blocks[0].successors_count = 0; tssa->cfg.blocks[0].predecessors_count = 0; } + ((zend_tssa*)tssa)->used_stack = -1; if (JIT_G(opt_level) < ZEND_JIT_LEVEL_INLINE) { return tssa; @@ -1142,6 +1201,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin // TODO: For tracing, it's possible, to create pseudo Phi functions // at the end of loop, without this additional pass (like LuaJIT) ??? ssa_vars_count = zend_jit_trace_add_phis(trace_buffer, ssa_vars_count, tssa, stack); + } else if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL) { + ssa_vars_count = zend_jit_trace_add_call_phis(trace_buffer, ssa_vars_count, tssa, stack); + } else if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { + ssa_vars_count = zend_jit_trace_add_ret_phis(trace_buffer, ssa_vars_count, tssa, stack); } p = trace_buffer + ZEND_JIT_TRACE_START_REC_SIZE; @@ -1219,7 +1282,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin i++; } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { /* Update Phi sources */ zend_ssa_phi *phi = tssa->blocks[1].phis; @@ -1281,26 +1346,40 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin if (ssa->var_info && zend_jit_trace_copy_ssa_var_info(op_array, ssa, ssa_opcodes, tssa, i)) { /* pass */ - } else if (op_array->arg_info) { - zend_arg_info *arg_info = &op_array->arg_info[i]; - zend_class_entry *ce; - uint32_t tmp = zend_fetch_arg_info_type(script, arg_info, &ce); + } else { + if (ssa->vars) { + ssa_vars[i].no_val = ssa->vars[i].no_val; + ssa_vars[i].alias = ssa->vars[i].alias; + } else { + ssa_vars[i].alias = zend_jit_var_may_alias(op_array, ssa, i); + } + if (op_array->arg_info) { + zend_arg_info *arg_info = &op_array->arg_info[i]; + zend_class_entry *ce; + uint32_t tmp = zend_fetch_arg_info_type(script, arg_info, &ce); - if (ZEND_ARG_SEND_MODE(arg_info)) { - tmp |= MAY_BE_REF; + if (ZEND_ARG_SEND_MODE(arg_info)) { + tmp |= MAY_BE_REF; + } + ssa_var_info[i].type = tmp; + ssa_var_info[i].ce = ce; + ssa_var_info[i].is_instanceof = 1; + } else { + ssa_var_info[i].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } - ssa_var_info[i].type = tmp; - ssa_var_info[i].ce = ce; - ssa_var_info[i].is_instanceof = 1; - } else { - ssa_var_info[i].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } - } else if (op_array->function_name - && zend_jit_var_may_alias(op_array, ssa, i) == NO_ALIAS) { - ssa_vars[i].no_val = ssa->vars ? ssa->vars[i].no_val : 0; - ssa_var_info[i].type = MAY_BE_UNDEF; } else { - ssa_var_info[i].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; + if (ssa->vars) { + ssa_vars[i].no_val = ssa->vars[i].no_val; + ssa_vars[i].alias = ssa->vars[i].alias; + } else { + ssa_vars[i].alias = zend_jit_var_may_alias(op_array, ssa, i); + } + if (ssa_vars[i].alias == NO_ALIAS) { + ssa_var_info[i].type = MAY_BE_UNDEF; + } else { + ssa_var_info[i].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; + } } i++; } @@ -1321,6 +1400,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin while (i < op_array->last_var + op_array->T) { if (!ssa->var_info || !zend_jit_trace_copy_ssa_var_info(op_array, ssa, ssa_opcodes, tssa, i)) { + if (ssa->vars) { + ssa_vars[i].alias = ssa->vars[i].alias; + } else { + ssa_vars[i].alias = zend_jit_var_may_alias(op_array, ssa, i); + } if (i < op_array->last_var) { ssa_var_info[i].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } else { @@ -1339,13 +1423,16 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { /* Propagate initial value through Phi functions */ zend_ssa_phi *phi = tssa->blocks[1].phis; while (phi) { if (!ssa->var_info || !zend_jit_trace_copy_ssa_var_info(op_array, ssa, ssa_opcodes, tssa, phi->ssa_var)) { + ssa_vars[phi->ssa_var].alias = ssa_vars[phi->sources[0]].alias; ssa_var_info[phi->ssa_var].type = ssa_var_info[phi->sources[0]].type; } phi = phi->next; @@ -1356,11 +1443,18 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin top = zend_jit_trace_call_frame(frame, op_array); TRACE_FRAME_INIT(frame, op_array, 0, 0); TRACE_FRAME_SET_RETURN_SSA_VAR(frame, -1); + frame->used_stack = 0; for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(frame->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(frame->stack, i, IS_UNKNOWN, 1); } memset(&return_value_info, 0, sizeof(return_value_info)); + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + max_used_stack = used_stack = 0; + } else { + max_used_stack = used_stack = -1; + } + p = trace_buffer + ZEND_JIT_TRACE_START_REC_SIZE; idx = 0; level = 0; @@ -1613,6 +1707,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin case ZEND_SEND_VAL_EX: case ZEND_SEND_VAR_EX: case ZEND_SEND_VAR_NO_REF_EX: + if (opline->op2_type == IS_CONST) { + /* Named parameters not supported in JIT */ + break; + } if (opline->op2.num > MAX_ARG_FLAG_NUM) { goto propagate_arg; } @@ -1621,6 +1719,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin case ZEND_SEND_VAR: case ZEND_SEND_VAR_NO_REF: case ZEND_SEND_FUNC_ARG: + if (opline->op2_type == IS_CONST) { + /* Named parameters not supported in JIT */ + break; + } ADD_OP1_TRACE_GUARD(); propagate_arg: /* Propagate argument type */ @@ -1650,6 +1752,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } } + if (opline->op1_type == IS_CV && (info & MAY_BE_RC1)) { + info |= MAY_BE_RCN; + } if (info & MAY_BE_UNDEF) { info |= MAY_BE_NULL; info &= ~MAY_BE_UNDEF; @@ -1678,16 +1783,21 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } break; case ZEND_CHECK_FUNC_ARG: - if (frame - && frame->call - && frame->call->func) { - uint32_t arg_num = opline->op2.num; - - if (ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, arg_num)) { - TRACE_FRAME_SET_LAST_SEND_BY_REF(frame->call); - } else { - TRACE_FRAME_SET_LAST_SEND_BY_VAL(frame->call); - } + if (!frame + || !frame->call + || !frame->call->func) { + break; + } + if (opline->op2_type == IS_CONST + || opline->op2.num > MAX_ARG_FLAG_NUM) { + /* Named parameters not supported in JIT */ + TRACE_FRAME_SET_LAST_SEND_UNKNOWN(frame->call); + break; + } + if (ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, opline->op2.num)) { + TRACE_FRAME_SET_LAST_SEND_BY_REF(frame->call); + } else { + TRACE_FRAME_SET_LAST_SEND_BY_VAL(frame->call); } break; case ZEND_FETCH_OBJ_FUNC_ARG: @@ -1720,6 +1830,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin ADD_OP2_TRACE_GUARD(); } break; + case ZEND_SEND_ARRAY: + case ZEND_SEND_UNPACK: + case ZEND_CHECK_UNDEF_ARGS: + case ZEND_INCLUDE_OR_EVAL: + max_used_stack = used_stack = -1; default: break; } @@ -1746,6 +1861,27 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin zend_jit_trace_copy_ssa_var_range(op_array, ssa, ssa_opcodes, tssa, ssa_ops[idx+1].result_def); } } + } else { + if (ssa_ops[idx].op1_def >= 0) { + ssa_vars[ssa_ops[idx].op1_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->op1.var)); + } + if (ssa_ops[idx].op2_def >= 0) { + ssa_vars[ssa_ops[idx].op2_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->op2.var)); + } + if (ssa_ops[idx].result_def >= 0) { + ssa_vars[ssa_ops[idx].result_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->result.var)); + } + if (len == 2 && (opline+1)->opcode == ZEND_OP_DATA) { + if (ssa_ops[idx+1].op1_def >= 0) { + ssa_vars[ssa_ops[idx+1].op1_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM((opline+1)->op1.var)); + } + if (ssa_ops[idx+1].op2_def >= 0) { + ssa_vars[ssa_ops[idx+1].op2_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM((opline+1)->op2.var)); + } + if (ssa_ops[idx+1].result_def >= 0) { + ssa_vars[ssa_ops[idx+1].result_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM((opline+1)->result.var)); + } + } } if (opline->opcode == ZEND_RECV_INIT && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { @@ -1765,17 +1901,13 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin if (ssa->var_info) { /* Add statically inferred restrictions */ if (ssa_ops[idx].op1_def >= 0) { - if ((opline->opcode == ZEND_SEND_VAR_EX - || opline->opcode == ZEND_FETCH_DIM_FUNC_ARG - || opline->opcode == ZEND_FETCH_OBJ_FUNC_ARG) + if (opline->opcode == ZEND_SEND_VAR_EX && frame && frame->call && frame->call->func && !ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, opline->op2.num)) { ssa_var_info[ssa_ops[idx].op1_def] = ssa_var_info[ssa_ops[idx].op1_use]; - if (opline->opcode == ZEND_SEND_VAR_EX) { - ssa_var_info[ssa_ops[idx].op1_def].type &= ~MAY_BE_GUARD; - } + ssa_var_info[ssa_ops[idx].op1_def].type &= ~MAY_BE_GUARD; if (ssa_var_info[ssa_ops[idx].op1_def].type & MAY_BE_RC1) { ssa_var_info[ssa_ops[idx].op1_def].type |= MAY_BE_RCN; } @@ -1847,9 +1979,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin /* Trace missed INIT_FCALL opcode */ call = top; TRACE_FRAME_INIT(call, op_array, 0, 0); + call->used_stack = 0; top = zend_jit_trace_call_frame(top, op_array); for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(call->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(call->stack, i, IS_UNKNOWN, 1); } } else { ZEND_ASSERT(&call->func->op_array == op_array); @@ -1882,12 +2015,18 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } else { ssa_var_info[v].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } - } else if (op_array->function_name - && zend_jit_var_may_alias(op_array, ssa, i) == NO_ALIAS) { - ssa_vars[v].no_val = ssa->vars ? ssa->vars[i].no_val : 0; - ssa_var_info[v].type = MAY_BE_UNDEF; } else { - ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; + if (ssa->vars) { + ssa_vars[v].no_val = ssa->vars[i].no_val; + ssa_vars[v].alias = ssa->vars[i].alias; + } else { + ssa_vars[v].alias = zend_jit_var_may_alias(op_array, ssa, i); + } + if (ssa_vars[v].alias == NO_ALIAS) { + ssa_var_info[v].type = MAY_BE_UNDEF; + } else { + ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; + } } if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && i < op_array->num_args) { @@ -1928,7 +2067,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin while (q->op == ZEND_JIT_TRACE_INIT_CALL) { q++; } - if (q->op == ZEND_JIT_TRACE_VM) { + if (q->op == ZEND_JIT_TRACE_VM + || (q->op == ZEND_JIT_TRACE_END + && q->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET)) { const zend_op *opline = q->opline - 1; if (opline->result_type != IS_UNUSED) { ssa_var_info[ @@ -1955,14 +2096,19 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin top = frame; if (frame->prev) { + if (used_stack > 0) { + used_stack -= frame->used_stack; + } frame = frame->prev; ZEND_ASSERT(&frame->func->op_array == op_array); } else { + max_used_stack = used_stack = -1; frame = zend_jit_trace_ret_frame(frame, op_array); TRACE_FRAME_INIT(frame, op_array, 0, 0); TRACE_FRAME_SET_RETURN_SSA_VAR(frame, -1); + frame->used_stack = 0; for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(frame->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(frame->stack, i, IS_UNKNOWN, 1); } } @@ -1970,6 +2116,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin call = top; TRACE_FRAME_INIT(call, p->func, 0, 0); call->prev = frame->call; + call->used_stack = 0; frame->call = call; top = zend_jit_trace_call_frame(top, p->op_array); if (p->func && p->func->type == ZEND_USER_FUNCTION) { @@ -1977,6 +2124,33 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin SET_STACK_INFO(call->stack, i, -1); } } + if (used_stack >= 0 + && !(p->info & ZEND_JIT_TRACE_FAKE_INIT_CALL)) { + if (p->func == NULL || (p-1)->op != ZEND_JIT_TRACE_VM) { + max_used_stack = used_stack = -1; + } else { + const zend_op *opline = (p-1)->opline; + + switch (opline->opcode) { + case ZEND_INIT_FCALL: + case ZEND_INIT_FCALL_BY_NAME: + case ZEND_INIT_NS_FCALL_BY_NAME: + case ZEND_INIT_METHOD_CALL: + case ZEND_INIT_DYNAMIC_CALL: + //case ZEND_INIT_STATIC_METHOD_CALL: + //case ZEND_INIT_USER_CALL: + //case ZEND_NEW: + frame->used_stack = zend_vm_calc_used_stack(opline->extended_value, (zend_function*)p->func); + used_stack += frame->used_stack; + if (used_stack > max_used_stack) { + max_used_stack = used_stack; + } + break; + default: + max_used_stack = used_stack = -1; + } + } + } } else if (p->op == ZEND_JIT_TRACE_DO_ICALL) { call = frame->call; if (call) { @@ -1988,7 +2162,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + ((zend_tssa*)tssa)->used_stack = max_used_stack; + + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { /* Propagate guards through Phi sources */ zend_ssa_phi *phi = tssa->blocks[1].phis; @@ -2003,7 +2181,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin uint32_t t1 = ssa_var_info[phi->sources[1]].type; if (t & MAY_BE_GUARD) { - if (zend_jit_var_may_alias(op_array, ssa, phi->sources[0]) != NO_ALIAS) { + if (tssa->vars[phi->ssa_var].alias != NO_ALIAS) { /* pass */ } else if (((t0 | t1) & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == (t & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))) { if (!((t0 | t1) & MAY_BE_GUARD)) { @@ -2020,7 +2198,8 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin ssa_var_info[phi->sources[0]].type = MAY_BE_GUARD | (t & t0); } if ((t1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != (t & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))) { - if (is_checked_guard(tssa, ssa_opcodes, phi->sources[1], phi->ssa_var)) { + if (((t & t1) & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != 0 + && is_checked_guard(tssa, ssa_opcodes, phi->sources[1], phi->ssa_var)) { ssa_var_info[phi->sources[1]].type = MAY_BE_GUARD | (t & t1); ssa_var_info[phi->ssa_var].type = t & ~MAY_BE_GUARD; } @@ -2172,13 +2351,15 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace vars_op_array[i] = op_array; /* We don't start intervals for variables used in Phi */ if ((ssa->vars[i].use_chain >= 0 /*|| ssa->vars[i].phi_use_chain*/) - && zend_jit_var_supports_reg(ssa, i) - && zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) { + && !zend_ssa_is_no_val_use(ssa_opcodes[ssa->vars[i].use_chain], ssa->ops + ssa->vars[i].use_chain, i) + && ssa->vars[i].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, i)) { start[i] = 0; if (i < parent_vars_count && STACK_REG(parent_stack, i) != ZREG_NONE && STACK_REG(parent_stack, i) < ZREG_NUM) { /* We will try to reuse register from parent trace */ + flags[i] = STACK_FLAGS(parent_stack, i); count += 2; } else { flags[i] = ZREG_LOAD; @@ -2196,15 +2377,17 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace } } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { zend_ssa_phi *phi = ssa->blocks[1].phis; while (phi) { SET_STACK_VAR(stack, phi->var, phi->ssa_var); vars_op_array[phi->ssa_var] = op_array; if (ssa->vars[phi->ssa_var].use_chain >= 0 - && zend_jit_var_supports_reg(ssa, phi->ssa_var) - && zend_jit_var_may_alias(op_array, op_array_ssa, phi->sources[0]) == NO_ALIAS) { + && ssa->vars[phi->ssa_var].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, phi->ssa_var)) { start[phi->ssa_var] = 0; count++; } @@ -2224,6 +2407,16 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace support_opline = zend_jit_opline_supports_reg(op_array, ssa, opline, ssa_op, p); + + if (support_opline + && opline->opcode == ZEND_ASSIGN + && opline->op1_type == IS_CV + && ssa_op->op1_def >= 0 + && ssa->vars[ssa_op->op1_def].alias != NO_ALIAS) { + /* avoid register allocation in case of possibility of indirect modification*/ + support_opline = 0; + } + if (ssa_op->op1_use >= 0 && start[ssa_op->op1_use] >= 0 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { @@ -2301,8 +2494,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace if (ssa_op->result_def >= 0 && (ssa->vars[ssa_op->result_def].use_chain >= 0 || ssa->vars[ssa_op->result_def].phi_use_chain) - && zend_jit_var_supports_reg(ssa, ssa_op->result_def) - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->result.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->result_def].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, ssa_op->result_def)) { if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) || opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC @@ -2323,8 +2516,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace if (ssa_op->op1_def >= 0 && (ssa->vars[ssa_op->op1_def].use_chain >= 0 || ssa->vars[ssa_op->op1_def].phi_use_chain) - && zend_jit_var_supports_reg(ssa, ssa_op->op1_def) - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { start[ssa_op->op1_def] = idx; vars_op_array[ssa_op->op1_def] = op_array; count++; @@ -2332,8 +2525,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace if (ssa_op->op2_def >= 0 && (ssa->vars[ssa_op->op2_def].use_chain >= 0 || ssa->vars[ssa_op->op2_def].phi_use_chain) - && zend_jit_var_supports_reg(ssa, ssa_op->op2_def) - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op2.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op2_def].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, ssa_op->op2_def)) { start[ssa_op->op2_def] = idx; vars_op_array[ssa_op->op2_def] = op_array; count++; @@ -2373,8 +2566,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace if (support_opline && (ssa->vars[ssa_op->op1_def].use_chain >= 0 || ssa->vars[ssa_op->op1_def].phi_use_chain) - && zend_jit_var_supports_reg(ssa, ssa_op->op1_def) - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { start[ssa_op->op1_def] = idx; vars_op_array[ssa_op->op1_def] = op_array; count++; @@ -2436,8 +2629,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace SET_STACK_VAR(stack, i, j); vars_op_array[j] = op_array; if (ssa->vars[j].use_chain >= 0 - && zend_jit_var_supports_reg(ssa, j) - && zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) { + && ssa->vars[j].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, j)) { start[j] = idx; flags[j] = ZREG_LOAD; count++; @@ -2468,8 +2661,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace SET_STACK_VAR(stack, i, j); vars_op_array[j] = op_array; if (ssa->vars[j].use_chain >= 0 - && zend_jit_var_supports_reg(ssa, j) - && zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) { + && ssa->vars[j].alias == NO_ALIAS + && zend_jit_var_supports_reg(ssa, j)) { start[j] = idx; flags[j] = ZREG_LOAD; count++; @@ -2484,22 +2677,28 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace } } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { zend_ssa_phi *phi = ssa->blocks[1].phis; while (phi) { i = phi->sources[1]; - if (start[i] >= 0) { + if (start[i] >= 0 && !ssa->vars[phi->ssa_var].no_val) { end[i] = idx; flags[i] &= ~ZREG_LAST_USE; } phi = phi->next; } - for (i = 0; i < op_array->last_var; i++) { - if (start[i] >= 0 && !ssa->vars[i].phi_use_chain) { - end[i] = idx; - flags[i] &= ~ZREG_LAST_USE; + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + for (i = 0; i < op_array->last_var; i++) { + if (start[i] >= 0 && !ssa->vars[i].phi_use_chain) { + end[i] = idx; + flags[i] &= ~ZREG_LAST_USE; + } else { + zend_jit_close_var(stack, i, start, end, flags, idx); + } } } } else { @@ -2586,7 +2785,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace } } - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { zend_ssa_phi *phi = ssa->blocks[1].phis; while (phi) { @@ -2620,6 +2821,10 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace } break; case ZEND_SEND_VAR: + if (opline->op2_type == IS_CONST) { + /* Named parameters not supported in JIT */ + break; + } case ZEND_PRE_INC: case ZEND_PRE_DEC: if (i == ssa->ops[line].op1_def && @@ -2643,6 +2848,41 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use); } break; + case ZEND_SUB: + case ZEND_ADD: + case ZEND_MUL: + case ZEND_BW_OR: + case ZEND_BW_AND: + case ZEND_BW_XOR: + if (i == ssa->ops[line].result_def) { + if (ssa->ops[line].op1_use >= 0 && + intervals[ssa->ops[line].op1_use] && + ssa->ops[line].op1_use_chain < 0 && + !ssa->vars[ssa->ops[line].op1_use].phi_use_chain) { + + zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op1_use].definition_phi; + if (phi && + intervals[phi->sources[1]] && + intervals[phi->sources[1]]->hint == intervals[ssa->ops[line].op1_use]) { + break; + } + zend_jit_add_hint(intervals, i, ssa->ops[line].op1_use); + } else if (opline->opcode != ZEND_SUB && + ssa->ops[line].op2_use >= 0 && + intervals[ssa->ops[line].op2_use] && + ssa->ops[line].op2_use_chain < 0 && + !ssa->vars[ssa->ops[line].op2_use].phi_use_chain) { + + zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op2_use].definition_phi; + if (phi && + intervals[phi->sources[1]] && + intervals[phi->sources[1]]->hint == intervals[ssa->ops[line].op2_use]) { + break; + } + zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use); + } + } + break; } } } @@ -2712,7 +2952,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace } /* SSA resolution */ - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { + if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { zend_ssa_phi *phi = ssa->blocks[1].phis; while (phi) { @@ -2882,7 +3124,8 @@ static int zend_jit_trace_stack_needs_deoptimization(zend_jit_trace_stack *stack uint32_t i; for (i = 0; i < stack_size; i++) { - if (STACK_REG(stack, i) != ZREG_NONE) { + if (STACK_REG(stack, i) != ZREG_NONE + && !(STACK_FLAGS(stack, i) & (ZREG_LOAD|ZREG_STORE))) { return 1; } } @@ -2910,6 +3153,7 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst, const zend_op *opline, zend_jit_trace_stack *parent_stack, int parent_vars_count, + zend_ssa *ssa, zend_jit_trace_stack *stack, zend_lifetime_interval **ra) { @@ -2923,14 +3167,25 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst, if (reg != ZREG_NONE) { if (reg < ZREG_NUM) { - if (ra && ra[i] && ra[i]->reg == reg) { - /* register already loaded by parent trace */ - if (stack) { - SET_STACK_REG(stack, i, reg); + if (ssa && ssa->vars[i].no_val) { + /* pass */ + } else if (ra && ra[i] && ra[i]->reg == reg) { + /* register already loaded by parent trace */ + if (stack) { + SET_STACK_REG_EX(stack, i, reg, STACK_FLAGS(parent_stack, i)); } has_unsaved_vars = 1; - } else if (!zend_jit_store_var(Dst, 1 << STACK_TYPE(parent_stack, i), i, reg)) { - return 0; + } else { + uint8_t type = STACK_TYPE(parent_stack, i); + + if (stack) { + SET_STACK_TYPE(stack, i, type, 1); + } + if (!(STACK_FLAGS(parent_stack, i) & (ZREG_LOAD|ZREG_STORE)) + && !zend_jit_store_var(Dst, 1 << type, i, reg, + STACK_MEM_TYPE(parent_stack, i) != type)) { + return 0; + } } } else { /* delay custom deoptimization instructions to prevent register clobbering */ @@ -2947,11 +3202,17 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst, if (reg != ZREG_NONE) { if (reg < ZREG_NUM) { - if (ra && ra[i] && ra[i]->reg == reg) { + if (ssa && ssa->vars[i].no_val) { + /* pass */ + } else if (ra && ra[i] && ra[i]->reg == reg) { + uint8_t type = STACK_TYPE(parent_stack, i); + if (stack) { - SET_STACK_REG(stack, i, ZREG_NONE); + SET_STACK_TYPE(stack, i, type, 1); } - if (!zend_jit_store_var(Dst, 1 << STACK_TYPE(parent_stack, i), i, reg)) { + if (!(STACK_FLAGS(parent_stack, i) & (ZREG_LOAD|ZREG_STORE)) + && !zend_jit_store_var(Dst, 1 << type, i, reg, + STACK_MEM_TYPE(parent_stack, i) != type)) { return 0; } } @@ -3043,6 +3304,7 @@ static void zend_jit_trace_update_condition_ranges(const zend_op *opline, const case ZEND_CASE: case ZEND_IS_IDENTICAL: case ZEND_CASE_STRICT: + case ZEND_IS_NOT_IDENTICAL: if (!exit_if_true) { /* op1 == op2 */ if (ssa_op->op1_use >= 0) { @@ -3060,7 +3322,6 @@ static void zend_jit_trace_update_condition_ranges(const zend_op *opline, const } break; case ZEND_IS_NOT_EQUAL: - case ZEND_IS_NOT_IDENTICAL: if (exit_if_true) { /* op1 == op2 */ if (ssa_op->op1_use >= 0) { @@ -3173,6 +3434,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par zend_uchar res_type = IS_UNKNOWN; const zend_op *opline, *orig_opline; const zend_ssa_op *ssa_op, *orig_ssa_op; + int used_stack; JIT_G(current_trace) = trace_buffer; @@ -3185,6 +3447,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } ssa_opcodes = ((zend_tssa*)ssa)->tssa_opcodes; + used_stack = ((zend_tssa*)ssa)->used_stack; /* Register allocation */ if ((JIT_G(opt_flags) & (ZEND_JIT_REG_ALLOC_LOCAL|ZEND_JIT_REG_ALLOC_GLOBAL)) @@ -3200,7 +3463,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par TRACE_FRAME_INIT(frame, op_array, TRACE_FRAME_MASK_UNKNOWN_RETURN, -1); stack = frame->stack; for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } opline = p[1].opline; @@ -3240,6 +3503,12 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par int parent_vars_count = 0; zend_jit_trace_stack *parent_stack = NULL; + if (used_stack > 0) { + if (!zend_jit_stack_check(&dasm_state, opline, used_stack)) { + goto jit_failure; + } + } + if (parent_trace) { parent_vars_count = MIN(zend_jit_traces[parent_trace].exit_info[exit_num].stack_size, op_array->last_var + op_array->T); @@ -3259,16 +3528,32 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par uint32_t info = ssa->var_info[i].type; if (!(info & MAY_BE_GUARD) && has_concrete_type(info)) { - SET_STACK_TYPE(stack, i, concrete_type(info)); - } else if (zend_jit_var_may_alias(op_array, op_array_ssa, i) != NO_ALIAS) { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + uint8_t type, mem_type; + + type = concrete_type(info); + if (i < parent_vars_count + && STACK_TYPE(parent_stack, i) == type) { + mem_type = STACK_MEM_TYPE(parent_stack, i); + if (mem_type != IS_UNKNOWN) { + SET_STACK_TYPE(stack, i, mem_type, 1); + } + SET_STACK_TYPE(stack, i, type, 0); + } else { + SET_STACK_TYPE(stack, i, type, 1); + } + } else if (ssa->vars[i].alias != NO_ALIAS) { + SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } else if (i < parent_vars_count && STACK_TYPE(parent_stack, i) != IS_UNKNOWN) { /* This must be already handled by trace type inference */ ZEND_UNREACHABLE(); - SET_STACK_TYPE(stack, i, STACK_TYPE(parent_stack, i)); + // SET_STACK_TYPE(stack, i, STACK_TYPE(parent_stack, i)); } else if ((info & MAY_BE_GUARD) != 0 - && trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + && (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || (trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET + && (opline-1)->result_type == IS_VAR + && EX_VAR_TO_NUM((opline-1)->result.var) == i)) && (ssa->vars[i].use_chain != -1 || (ssa->vars[i].phi_use_chain && !(ssa->var_info[ssa->vars[i].phi_use_chain->ssa_var].type & MAY_BE_GUARD)))) { @@ -3278,19 +3563,19 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } info &= ~MAY_BE_GUARD; ssa->var_info[i].type = info; - SET_STACK_TYPE(stack, i, concrete_type(info)); + SET_STACK_TYPE(stack, i, concrete_type(info), 1); } else if (trace_buffer->start == ZEND_JIT_TRACE_START_ENTER && op_array->function_name && i >= op_array->num_args) { /* This must be already handled by trace type inference */ ZEND_UNREACHABLE(); - SET_STACK_TYPE(stack, i, IS_UNDEF); - } else { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + // SET_STACK_TYPE(stack, i, IS_UNDEF, 1); } if ((info & MAY_BE_PACKED_GUARD) != 0 - && trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + && (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL + || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) && ssa->vars[i].use_chain != -1) { if (!zend_jit_packed_guard(&dasm_state, opline, EX_NUM_TO_VAR(i), info)) { goto jit_failure; @@ -3305,7 +3590,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (!zend_jit_trace_deoptimization(&dasm_state, zend_jit_traces[parent_trace].exit_info[exit_num].flags, zend_jit_traces[parent_trace].exit_info[exit_num].opline, - parent_stack, parent_vars_count, stack, ra)) { + parent_stack, parent_vars_count, ssa, stack, ra)) { goto jit_failure; } } @@ -3314,8 +3599,22 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && trace_buffer->stop != ZEND_JIT_TRACE_STOP_RECURSIVE_CALL && trace_buffer->stop != ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { for (i = 0; i < last_var; i++) { - if (ra[i] && (ra[i]->flags & ZREG_LOAD) != 0) { - //SET_STACK_REG(stack, i, ra[i]->reg); + if (ra[i] + && (ra[i]->flags & ZREG_LOAD) != 0 + && ra[i]->reg != stack[i].reg) { + + if ((ssa->var_info[i].type & MAY_BE_GUARD) != 0) { + uint8_t op_type; + + ssa->var_info[i].type &= ~MAY_BE_GUARD; + op_type = concrete_type(ssa->var_info[i].type); + if (!zend_jit_type_guard(&dasm_state, opline, i, op_type)) { + goto jit_failure; + } + SET_STACK_TYPE(stack, i, op_type, 1); + } + + SET_STACK_REG_EX(stack, i, ra[i]->reg, ZREG_LOAD); if (!zend_jit_load_var(&dasm_state, ssa->var_info[i].type, i, ra[i]->reg)) { goto jit_failure; } @@ -3340,13 +3639,16 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (ival->flags & ZREG_LOAD) { ZEND_ASSERT(ival->reg != ZREG_NONE); + SET_STACK_REG_EX(stack, phi->var, ival->reg, ZREG_LOAD); if (!zend_jit_load_var(&dasm_state, ssa->var_info[phi->ssa_var].type, ssa->vars[phi->ssa_var].var, ival->reg)) { goto jit_failure; } } else if (ival->flags & ZREG_STORE) { ZEND_ASSERT(ival->reg != ZREG_NONE); - if (!zend_jit_store_var(&dasm_state, ssa->var_info[phi->ssa_var].type, ssa->vars[phi->ssa_var].var, ival->reg)) { + SET_STACK_REG_EX(stack, phi->var, ival->reg, ZREG_STORE); + if (!zend_jit_store_var(&dasm_state, ssa->var_info[phi->ssa_var].type, ssa->vars[phi->ssa_var].var, ival->reg, + STACK_MEM_TYPE(stack, phi->var) != ssa->var_info[phi->ssa_var].type)) { goto jit_failure; } } else { @@ -3377,7 +3679,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } for (i = 0; i < last_var; i++) { if (ra && ra[i] && (ra[i]->flags & ZREG_LOAD) != 0) { - //SET_STACK_REG(stack, i, ra[i]->reg); + SET_STACK_REG_EX(stack, i, ra[i]->reg, ZREG_LOAD); if (!zend_jit_load_var(&dasm_state, ssa->var_info[i].type, i, ra[i]->reg)) { goto jit_failure; } @@ -3448,15 +3750,17 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par break; } if (opline->result_type != IS_UNUSED) { +#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO + res_use_info = zend_jit_trace_type_to_info( + STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->result.var))) + & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE); +#else if (opline->result_type == IS_CV) { res_use_info = RES_USE_INFO(); } else { -#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO - res_use_info = zend_jit_trace_type_to_info(STACK_VAR_TYPE(opline->result.var)); -#else - res_use_info = -1; -#endif + res_use_info = MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE; } +#endif res_info = RES_INFO(); res_addr = RES_REG_ADDR(); } else { @@ -3465,6 +3769,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par res_addr = 0; } op1_def_info = OP1_DEF_INFO(); + if (op1_def_info & MAY_BE_GUARD + && !has_concrete_type(op1_def_info)) { + op1_def_info &= ~MAY_BE_GUARD; + } if (!zend_jit_inc_dec(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op1_def_info, OP1_DEF_REG_ADDR(), @@ -3514,6 +3822,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && frame->call->func && !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num))) && (opline+1)->op1_type == IS_TMP_VAR + && (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */ && (opline+1)->op1.var == opline->result.var) { p++; if (frame->call) { @@ -3536,15 +3845,17 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } } else { +#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO + res_use_info = zend_jit_trace_type_to_info( + STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->result.var))) + & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE); +#else if (opline->result_type == IS_CV) { res_use_info = RES_USE_INFO(); } else { -#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO - res_use_info = zend_jit_trace_type_to_info(STACK_VAR_TYPE(opline->result.var)); -#else - res_use_info = -1; -#endif + res_use_info = MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE; } +#endif } res_info = RES_INFO(); if (!zend_jit_long_math(&dasm_state, opline, @@ -3586,6 +3897,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && frame->call->func && !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num))) && (opline+1)->op1_type == IS_TMP_VAR + && (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */ && (opline+1)->op1.var == opline->result.var) { p++; if (frame->call @@ -3610,15 +3922,17 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } } else { +#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO + res_use_info = zend_jit_trace_type_to_info( + STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->result.var))) + & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE); +#else if (opline->result_type == IS_CV) { res_use_info = RES_USE_INFO(); } else { -#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO - res_use_info = zend_jit_trace_type_to_info(STACK_VAR_TYPE(opline->result.var)); -#else - res_use_info = -1; -#endif + res_use_info = MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE; } +#endif } res_info = RES_INFO(); if (opline->opcode == ZEND_ADD && @@ -3667,6 +3981,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && frame->call->func && !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num))) && (opline+1)->op1_type == IS_TMP_VAR + && (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */ && (opline+1)->op1.var == opline->result.var) { p++; if (frame->call @@ -3737,6 +4052,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } } op1_def_info = OP1_DEF_INFO(); + if (op1_def_info & MAY_BE_GUARD + && !has_concrete_type(op1_def_info)) { + op1_def_info &= ~MAY_BE_GUARD; + } if (!zend_jit_assign_op(&dasm_state, opline, op1_info, op1_def_info, OP1_RANGE(), op2_info, OP2_RANGE(), @@ -3780,7 +4099,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -3842,7 +4161,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -3914,7 +4233,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -3980,7 +4299,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4027,7 +4346,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4068,7 +4387,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, opline->op2_type, op2_addr, 1)) { @@ -4101,6 +4420,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && frame->call->func && !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num))) && (opline+1)->op1_type == IS_TMP_VAR + && (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */ && (opline+1)->op1.var == opline->result.var) { p++; if (frame->call @@ -4151,16 +4471,23 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_info = OP1_INFO(); CHECK_OP1_TRACE_TYPE(); res_info = RES_INFO(); +#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO + res_use_info = zend_jit_trace_type_to_info( + STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->result.var))) + & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE); +#else + res_use_info = MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE; +#endif if (!zend_jit_qm_assign(&dasm_state, opline, op1_info, op1_addr, op1_def_addr, - res_info, RES_REG_ADDR())) { + res_use_info, res_info, RES_REG_ADDR())) { goto jit_failure; } goto done; case ZEND_INIT_FCALL: case ZEND_INIT_FCALL_BY_NAME: case ZEND_INIT_NS_FCALL_BY_NAME: - if (!zend_jit_init_fcall(&dasm_state, opline, op_array_ssa->cfg.map ? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level, p + 1)) { + if (!zend_jit_init_fcall(&dasm_state, opline, op_array_ssa->cfg.map ? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level, p + 1, used_stack < 0)) { goto jit_failure; } goto done; @@ -4249,14 +4576,15 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } goto done; case ZEND_CHECK_FUNC_ARG: - if (opline->op2_type == IS_CONST) { - /* Named parameters not supported in JIT */ + if (!JIT_G(current_frame) + || !JIT_G(current_frame)->call + || !JIT_G(current_frame)->call->func) { break; } - if (opline->op2.num > MAX_ARG_FLAG_NUM - && (!JIT_G(current_frame) - || !JIT_G(current_frame)->call - || !JIT_G(current_frame)->call->func)) { + if (opline->op2_type == IS_CONST + || opline->op2.num > MAX_ARG_FLAG_NUM) { + /* Named parameters not supported in JIT */ + TRACE_FRAME_SET_LAST_SEND_UNKNOWN(JIT_G(current_frame)->call); break; } if (!zend_jit_check_func_arg(&dasm_state, opline)) { @@ -4299,18 +4627,26 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } smart_branch_opcode = exit_if_true ? ZEND_JMPNZ : ZEND_JMPZ; + if (!zend_jit_cmp(&dasm_state, opline, + op1_info, OP1_RANGE(), OP1_REG_ADDR(), + op2_info, OP2_RANGE(), OP2_REG_ADDR(), + RES_REG_ADDR(), + zend_may_throw(opline, ssa_op, op_array, ssa), + smart_branch_opcode, -1, -1, exit_addr)) { + goto jit_failure; + } zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); } else { smart_branch_opcode = 0; exit_addr = NULL; - } - if (!zend_jit_cmp(&dasm_state, opline, - op1_info, OP1_REG_ADDR(), - op2_info, OP2_REG_ADDR(), - RES_REG_ADDR(), - zend_may_throw(opline, ssa_op, op_array, ssa), - smart_branch_opcode, -1, -1, exit_addr)) { - goto jit_failure; + if (!zend_jit_cmp(&dasm_state, opline, + op1_info, OP1_RANGE(), OP1_REG_ADDR(), + op2_info, OP2_RANGE(), OP2_REG_ADDR(), + RES_REG_ADDR(), + zend_may_throw(opline, ssa_op, op_array, ssa), + smart_branch_opcode, -1, -1, exit_addr)) { + goto jit_failure; + } } goto done; case ZEND_IS_IDENTICAL: @@ -4337,18 +4673,26 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par exit_if_true = !exit_if_true; } smart_branch_opcode = exit_if_true ? ZEND_JMPNZ : ZEND_JMPZ; + if (!zend_jit_identical(&dasm_state, opline, + op1_info, OP1_RANGE(), OP1_REG_ADDR(), + op2_info, OP2_RANGE(), OP2_REG_ADDR(), + RES_REG_ADDR(), + zend_may_throw(opline, ssa_op, op_array, ssa), + smart_branch_opcode, -1, -1, exit_addr)) { + goto jit_failure; + } zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); } else { smart_branch_opcode = 0; exit_addr = NULL; - } - if (!zend_jit_identical(&dasm_state, opline, - op1_info, OP1_REG_ADDR(), - op2_info, OP2_REG_ADDR(), - RES_REG_ADDR(), - zend_may_throw(opline, ssa_op, op_array, ssa), - smart_branch_opcode, -1, -1, exit_addr)) { - goto jit_failure; + if (!zend_jit_identical(&dasm_state, opline, + op1_info, OP1_RANGE(), OP1_REG_ADDR(), + op2_info, OP2_RANGE(), OP2_REG_ADDR(), + RES_REG_ADDR(), + zend_may_throw(opline, ssa_op, op_array, ssa), + smart_branch_opcode, -1, -1, exit_addr)) { + goto jit_failure; + } } goto done; case ZEND_DEFINED: @@ -4417,29 +4761,36 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else { int j; int may_throw = 0; + zend_bool left_frame = 0; if (!zend_jit_return(&dasm_state, opline, op_array, op1_info, OP1_REG_ADDR())) { goto jit_failure; } - if (!zend_jit_leave_frame(&dasm_state)) { - goto jit_failure; - } for (j = 0 ; j < op_array->last_var; j++) { uint32_t info; zend_uchar type; - if (opline->op1_type == IS_CV - && EX_VAR_TO_NUM(opline->op1.var) == j - && !(op1_info & MAY_BE_REF) - && JIT_G(current_frame) - && TRACE_FRAME_IS_RETURN_VALUE_USED(JIT_G(current_frame))) { - continue; - } info = zend_ssa_cv_info(op_array, op_array_ssa, j); type = STACK_TYPE(stack, j); info = zend_jit_trace_type_to_info_ex(type, info); + if (opline->op1_type == IS_CV + && EX_VAR_TO_NUM(opline->op1.var) == j + && !(op1_info & (MAY_BE_REF|MAY_BE_OBJECT))) { + if (JIT_G(current_frame) + && TRACE_FRAME_IS_RETURN_VALUE_USED(JIT_G(current_frame))) { + continue; + } else { + info |= MAY_BE_NULL; + } + } if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { + if (!left_frame) { + left_frame = 1; + if (!zend_jit_leave_frame(&dasm_state)) { + goto jit_failure; + } + } if (!zend_jit_free_cv(&dasm_state, info, j)) { goto jit_failure; } @@ -4450,7 +4801,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } } } - if (!zend_jit_leave_func(&dasm_state, op_array, opline, op1_info, + if (!zend_jit_leave_func(&dasm_state, op_array, opline, op1_info, left_frame, p + 1, &zend_jit_traces[ZEND_JIT_TRACE_NUM], (op_array_ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS) != 0, may_throw)) { goto jit_failure; @@ -4517,7 +4868,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); } else { @@ -4559,7 +4910,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4635,7 +4986,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4709,7 +5060,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4750,7 +5101,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -4863,11 +5214,14 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { CHECK_OP1_TRACE_TYPE(); + if (!(op1_info & MAY_BE_OBJECT)) { + break; + } } if (ssa->var_info && ssa->ops) { if (ssa_op->op1_use >= 0) { @@ -4963,7 +5317,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -5089,7 +5443,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if (opline->op1_type == IS_CV - && zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) { + && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { ssa->var_info[ssa_op->op1_use].guarded_reference = 1; } } else { @@ -5112,7 +5466,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op_array_ssa->cfg.map ? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level, op1_info, op1_addr, ce, ce_is_instanceof, delayed_fetch_this, op1_ce, - p + 1)) { + p + 1, used_stack < 0)) { goto jit_failure; } goto done; @@ -5122,7 +5476,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } op2_info = OP2_INFO(); CHECK_OP2_TRACE_TYPE(); - if (!zend_jit_init_closure_call(&dasm_state, opline, op_array_ssa->cfg.map ? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level, p + 1)) { + if (!zend_jit_init_closure_call(&dasm_state, opline, op_array_ssa->cfg.map ? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level, p + 1, used_stack < 0)) { goto jit_failure; } goto done; @@ -5157,7 +5511,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } if (opline->op1_type != IS_CONST && (p+1)->op == ZEND_JIT_TRACE_INIT_CALL && (p+1)->func) { - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_OBJECT); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_OBJECT, 1); if (!zend_jit_init_fcall_guard(&dasm_state, 0, (p+1)->func, opline+1)) { goto jit_failure; } @@ -5200,6 +5554,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } if (ssa_op) { + zend_ssa_range tmp; + /* Keep information about known types on abstract stack */ if (ssa_op->result_def >= 0) { zend_uchar type = IS_UNKNOWN; @@ -5214,7 +5570,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else if (opline->opcode == ZEND_QM_ASSIGN) { if (opline->op1_type != IS_CONST) { /* copy */ - type = STACK_VAR_TYPE(opline->op1.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)); } } else if (opline->opcode == ZEND_ASSIGN) { if (opline->op2_type != IS_CONST @@ -5222,25 +5578,46 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par /* assignment to typed reference may cause conversion */ && (ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF) == 0) { /* copy */ - type = STACK_VAR_TYPE(opline->op2.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var)); } } else if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { /* copy */ - type = STACK_VAR_TYPE(opline->op1.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)); } - SET_RES_STACK_VAR_TYPE(type); - if (type != IS_UNKNOWN) { - ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; - if (opline->opcode == ZEND_FETCH_THIS - && delayed_fetch_this) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_THIS); - } else if (ssa->var_info[ssa_op->result_def].avoid_refcounting) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_TRY_ADDREF); - } else if (ra && ra[ssa_op->result_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg); + if (opline->opcode == ZEND_JMP_SET + || opline->opcode == ZEND_COALESCE + || opline->opcode == ZEND_JMP_NULL) { + if ((p+1)->op != ZEND_JIT_TRACE_VM) { + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); + } else if ((p+1)->opline != (opline + 1)) { + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), type, 1); + } + } else { + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), type, + (type == IS_UNKNOWN || !ra || !ra[ssa_op->result_def])); + if (type != IS_UNKNOWN) { + ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; + if (opline->opcode == ZEND_FETCH_THIS + && delayed_fetch_this) { + SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_THIS); + } else if (ssa->var_info[ssa_op->result_def].avoid_refcounting) { + SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_TRY_ADDREF); + } else if (ra && ra[ssa_op->result_def]) { + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, + ra[ssa_op->result_def]->flags & ZREG_STORE); + } } } + + if (type == IS_LONG + && zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->result_def, &tmp)) { + ssa->var_info[ssa_op->result_def].range.min = tmp.min; + ssa->var_info[ssa_op->result_def].range.max = tmp.max; + ssa->var_info[ssa_op->result_def].range.underflow = 0; + ssa->var_info[ssa_op->result_def].range.overflow = 0; + ssa->var_info[ssa_op->result_def].has_range = 1; + } } if (ssa_op->op1_def >= 0) { zend_uchar type = IS_UNKNOWN; @@ -5250,10 +5627,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par type = concrete_type(ssa->var_info[ssa_op->op1_def].type); } else if (opline->opcode == ZEND_ASSIGN) { if (!(OP1_INFO() & MAY_BE_REF) - || STACK_VAR_TYPE(opline->op1.var) != IS_UNKNOWN) { + || STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)) != IS_UNKNOWN) { if (opline->op2_type != IS_CONST) { /* copy */ - type = STACK_VAR_TYPE(opline->op2.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var)); } } } else if (opline->opcode == ZEND_SEND_VAR @@ -5264,15 +5641,25 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || opline->opcode == ZEND_JMP_NULL || opline->opcode == ZEND_FE_RESET_R) { /* keep old value */ - type = STACK_VAR_TYPE(opline->op1.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)); } - SET_OP1_STACK_VAR_TYPE(type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), type, + (type == IS_UNKNOWN || !ra || !ra[ssa_op->op1_def])); if (type != IS_UNKNOWN) { ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; if (ra && ra[ssa_op->op1_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg); + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, + ra[ssa_op->op1_def]->flags & ZREG_STORE); } } + if (type == IS_LONG + && zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp)) { + ssa->var_info[ssa_op->op1_def].range.min = tmp.min; + ssa->var_info[ssa_op->op1_def].range.max = tmp.max; + ssa->var_info[ssa_op->op1_def].range.underflow = 0; + ssa->var_info[ssa_op->op1_def].range.overflow = 0; + ssa->var_info[ssa_op->op1_def].has_range = 1; + } } if (ssa_op->op2_def >= 0) { zend_uchar type = IS_UNKNOWN; @@ -5282,15 +5669,25 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par type = concrete_type(ssa->var_info[ssa_op->op2_def].type); } else if (opline->opcode == ZEND_ASSIGN) { /* keep old value */ - type = STACK_VAR_TYPE(opline->op2.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var)); } - SET_OP2_STACK_VAR_TYPE(type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), type, + (type == IS_UNKNOWN || !ra || !ra[ssa_op->op2_def])); if (type != IS_UNKNOWN) { ssa->var_info[ssa_op->op2_def].type &= ~MAY_BE_GUARD; if (ra && ra[ssa_op->op2_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op2.var), ra[ssa_op->op2_def]->reg); + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op2.var), ra[ssa_op->op2_def]->reg, + ra[ssa_op->op2_def]->flags & ZREG_STORE); } } + if (type == IS_LONG + && zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op2_def, &tmp)) { + ssa->var_info[ssa_op->op2_def].range.min = tmp.min; + ssa->var_info[ssa_op->op2_def].range.max = tmp.max; + ssa->var_info[ssa_op->op2_def].range.underflow = 0; + ssa->var_info[ssa_op->op2_def].range.overflow = 0; + ssa->var_info[ssa_op->op2_def].has_range = 1; + } } switch (opline->opcode) { @@ -5315,15 +5712,25 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || (opline-1)->opcode == ZEND_ASSIGN_OBJ || (opline-1)->opcode == ZEND_ASSIGN_STATIC_PROP) { /* keep old value */ - type = STACK_VAR_TYPE(opline->op1.var); + type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)); } - SET_OP1_STACK_VAR_TYPE(type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), type, + (type == IS_UNKNOWN || !ra || !ra[ssa_op->op1_def])); if (type != IS_UNKNOWN) { ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; if (ra && ra[ssa_op->op1_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg); + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, + ra[ssa_op->op1_def]->reg & ZREG_STORE); } } + if (type == IS_LONG + && zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp)) { + ssa->var_info[ssa_op->op1_def].range.min = tmp.min; + ssa->var_info[ssa_op->op1_def].range.max = tmp.max; + ssa->var_info[ssa_op->op1_def].range.underflow = 0; + ssa->var_info[ssa_op->op1_def].range.overflow = 0; + ssa->var_info[ssa_op->op1_def].has_range = 1; + } } ssa_op++; break; @@ -5338,9 +5745,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && has_concrete_type(ssa->var_info[ssa_op->result_def].type)) { type = concrete_type(ssa->var_info[ssa_op->result_def].type); } - SET_RES_STACK_VAR_TYPE(type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), type, + (!ra || !ra[ssa_op->result_def])); if (ra && ra[ssa_op->result_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg); + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, + ra[ssa_op->result_def]->flags & ZREG_STORE); } } ssa_op++; @@ -5358,9 +5767,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { type = concrete_type(ssa->var_info[ssa_op->op1_def].type); } - SET_OP1_STACK_VAR_TYPE(type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), type, + (!ra || !ra[ssa_op->op1_def])); if (ra && ra[ssa_op->op1_def]) { - SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg); + SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, + ra[ssa_op->op1_def]->flags & ZREG_STORE); } } ssa_op++; @@ -5433,7 +5844,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par for (i = 0; i < op_array->last_var; i++,j++) { if (ra[j] && (ra[j]->flags & ZREG_LOAD) != 0) { - //SET_STACK_REG(stack, i, ra[j]->reg); + SET_STACK_REG_EX(stack, i, ra[j]->reg, ZREG_LOAD); if (!zend_jit_load_var(&dasm_state, ssa->var_info[j].type, i, ra[j]->reg)) { goto jit_failure; } @@ -5461,16 +5872,16 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par /* Initialize abstract stack using SSA */ if (!(ssa->var_info[j].type & MAY_BE_GUARD) && has_concrete_type(ssa->var_info[j].type)) { - SET_STACK_TYPE(stack, i, concrete_type(ssa->var_info[j].type)); + SET_STACK_TYPE(stack, i, concrete_type(ssa->var_info[j].type), 1); } else { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } } if (ra) { j = ZEND_JIT_TRACE_GET_FIRST_SSA_VAR(p->info); for (i = 0; i < op_array->last_var + op_array->T; i++, j++) { if (ra[j] && (ra[j]->flags & ZREG_LOAD) != 0) { - //SET_STACK_REG(stack, i, ra[j]->reg); + SET_STACK_REG_EX(stack, i, ra[j]->reg, ZREG_LOAD); if (!zend_jit_load_var(&dasm_state, ssa->var_info[j].type, i, ra[j]->reg)) { goto jit_failure; } @@ -5479,7 +5890,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } } else { for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } } opline = NULL; @@ -5489,7 +5900,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && (p+1)->op == ZEND_JIT_TRACE_VM) { const zend_op *opline = (p+1)->opline - 1; if (opline->result_type != IS_UNUSED) { - SET_RES_STACK_VAR_TYPE(res_type); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), res_type, 1); } } res_type = IS_UNKNOWN; @@ -5515,9 +5926,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && (init_opline->opcode != ZEND_INIT_METHOD_CALL || init_opline->op1_type == IS_UNDEF) && (init_opline->opcode != ZEND_INIT_USER_CALL - || init_opline->op2_type == IS_CONST) /* no closure */ + || (p->func && (!p->func->common.scope || (p->func->common.fn_flags & ZEND_ACC_STATIC)))) && (init_opline->opcode != ZEND_INIT_DYNAMIC_CALL - || init_opline->op2_type == IS_CONST) /* no closure */ + || (p->func && (!p->func->common.scope || (p->func->common.fn_flags & ZEND_ACC_STATIC)))) ) { TRACE_FRAME_SET_NO_NEED_RELEASE_THIS(call); } @@ -5532,25 +5943,25 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par i = 0; while (i < p->op_array->num_args) { /* Types of arguments are going to be stored in abstract stack when processing SEV instruction */ - SET_STACK_TYPE(call->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(call->stack, i, IS_UNKNOWN, 1); i++; } while (i < p->op_array->last_var) { if (jit_extension && zend_jit_var_may_alias(p->op_array, &jit_extension->func_info.ssa, i) != NO_ALIAS) { - SET_STACK_TYPE(call->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(call->stack, i, IS_UNKNOWN, 1); } else { - SET_STACK_TYPE(call->stack, i, IS_UNDEF); + SET_STACK_TYPE(call->stack, i, IS_UNDEF, 1); } i++; } while (i < p->op_array->last_var + p->op_array->T) { - SET_STACK_TYPE(call->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(call->stack, i, IS_UNKNOWN, 1); i++; } } else { for (i = 0; i < p->op_array->last_var + p->op_array->T; i++) { - SET_STACK_TYPE(call->stack, i, IS_UNKNOWN); + SET_STACK_TYPE(call->stack, i, IS_UNKNOWN, 1); } } } @@ -5659,7 +6070,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else if (p->stop == ZEND_JIT_TRACE_STOP_LINK || p->stop == ZEND_JIT_TRACE_STOP_INTERPRETER) { if (!zend_jit_trace_deoptimization(&dasm_state, 0, NULL, - stack, op_array->last_var + op_array->T, NULL, NULL)) { + stack, op_array->last_var + op_array->T, NULL, NULL, NULL)) { goto jit_failure; } if (p->stop == ZEND_JIT_TRACE_STOP_LINK) { @@ -5680,7 +6091,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par uint32_t exit_point; for (i = 0; i < op_array->last_var + op_array->T; i++) { - SET_STACK_TYPE(stack, i, IS_UNKNOWN); + SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); timeout_exit_addr = zend_jit_trace_get_exit_addr(exit_point); @@ -5769,7 +6180,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } jit_cleanup: - /* Clenup used op_arrays */ + /* Clean up used op_arrays */ while (num_op_arrays > 0) { op_array = op_arrays[--num_op_arrays]; jit_extension = @@ -5823,7 +6234,7 @@ static const void *zend_jit_trace_exit_to_vm(uint32_t trace_num, uint32_t exit_n if (!zend_jit_trace_deoptimization(&dasm_state, zend_jit_traces[trace_num].exit_info[exit_num].flags, zend_jit_traces[trace_num].exit_info[exit_num].opline, - stack, stack_size, NULL, NULL)) { + stack, stack_size, NULL, NULL, NULL)) { goto jit_failure; } @@ -6046,20 +6457,19 @@ static void zend_jit_dump_trace(zend_jit_trace_rec *trace_buffer, zend_ssa *tssa if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL || trace_buffer->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { + zend_ssa_phi *p = tssa->blocks[1].phis; + fprintf(stderr, "LOOP:\n"); - if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) { - zend_ssa_phi *p = tssa->blocks[1].phis; - - while (p) { - fprintf(stderr, " ;"); - zend_dump_ssa_var(op_array, tssa, p->ssa_var, 0, p->var, ZEND_DUMP_RC_INFERENCE); - fprintf(stderr, " = Phi("); - zend_dump_ssa_var(op_array, tssa, p->sources[0], 0, p->var, ZEND_DUMP_RC_INFERENCE); - fprintf(stderr, ", "); - zend_dump_ssa_var(op_array, tssa, p->sources[1], 0, p->var, ZEND_DUMP_RC_INFERENCE); - fprintf(stderr, ")\n"); - p = p->next; - } + + while (p) { + fprintf(stderr, " ;"); + zend_dump_ssa_var(op_array, tssa, p->ssa_var, 0, p->var, ZEND_DUMP_RC_INFERENCE); + fprintf(stderr, " = Phi("); + zend_dump_ssa_var(op_array, tssa, p->sources[0], 0, p->var, ZEND_DUMP_RC_INFERENCE); + fprintf(stderr, ", "); + zend_dump_ssa_var(op_array, tssa, p->sources[1], 0, p->var, ZEND_DUMP_RC_INFERENCE); + fprintf(stderr, ")\n"); + p = p->next; } } } @@ -6748,6 +7158,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf const zend_op *orig_opline = EX(opline); const zend_op *opline; zend_jit_trace_info *t = &zend_jit_traces[trace_num]; + int repeat_last_opline = 0; /* Deoptimizatoion of VM stack state */ uint32_t i; @@ -6802,19 +7213,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf if (UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) { /* Undefined array index or property */ - if (JIT_G(debug) & ZEND_JIT_DEBUG_TRACE_EXIT) { - fprintf(stderr, " TRACE %d exit %d %s%s%s() %s:%d\n", - trace_num, - exit_num, - EX(func)->op_array.scope ? ZSTR_VAL(EX(func)->op_array.scope->name) : "", - EX(func)->op_array.scope ? "::" : "", - EX(func)->op_array.function_name ? - ZSTR_VAL(EX(func)->op_array.function_name) : "$main", - ZSTR_VAL(EX(func)->op_array.filename), - EX(opline)->lineno); - } - EX(opline) = t->exit_info[exit_num].opline - 1; - return 0; + repeat_last_opline = 1; } else { ZVAL_COPY(EX_VAR_NUM(i), val); } @@ -6878,6 +7277,11 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf EX(opline)->lineno); } + if (repeat_last_opline) { + EX(opline) = t->exit_info[exit_num].opline - 1; + return (EX(opline) == t->opline); + } + if (t->exit_info[exit_num].flags & ZEND_JIT_EXIT_TO_VM) { if (zend_jit_trace_exit_is_bad(trace_num, exit_num)) { zend_jit_blacklist_trace_exit(trace_num, exit_num); diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 48df7ff108092..6573200430543 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -315,7 +315,7 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_trace_c } #ifdef HAVE_GCC_GLOBAL_REGS execute_data = EG(current_execute_data); - opline = EX(opline); + opline = execute_data ? EX(opline) : NULL; return; #else return 1; @@ -406,7 +406,7 @@ static int zend_jit_trace_recursive_ret_count(const zend_op_array *op_array, con static int zend_jit_trace_has_recursive_ret(zend_execute_data *ex, const zend_op_array *orig_op_array, const zend_op *orig_opline, int ret_level) { - while (ex != NULL && ret_level < ZEND_JIT_TRACE_MAX_RET_DEPTH) { + while (ex != NULL && ex->func != NULL && ret_level < ZEND_JIT_TRACE_MAX_RET_DEPTH) { if (&ex->func->op_array == orig_op_array && ex->opline + 1 == orig_opline) { return 1; } @@ -1022,7 +1022,7 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex, stop = ZEND_JIT_TRACE_STOP_LOOP; ret_level = 0; break; - } else if (loop_unroll_limit < JIT_G(max_loops_unroll)) { + } else if (loop_unroll_limit < JIT_G(max_loop_unrolls)) { last_loop = idx; last_loop_opline = opline; last_loop_level = level; diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 5e097e27e73c6..7306ee2a3cb56 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -87,6 +87,10 @@ |.define T3, [r4+0x18] // Used to store old value of IP (CALL VM only) |.define T2, [r4+0x14] // Used to store old value of FP (CALL VM only) |.define T1, [r4] + |.define A4, [r4+0xC] // preallocated slots for arguments of "cdecl" functions (intersect with T1) + |.define A3, [r4+0x8] + |.define A2, [r4+0x4] + |.define A1, [r4] |.endif |.define HYBRID_SPAD, 16 // padding for stack alignment @@ -535,11 +539,7 @@ static void* dasm_labels[zend_lb_MAX]; |.macro UNDEF_OPLINE_RESULT | mov r0, EX->opline -|.if X64 - | movsxd r0, dword OP:r0->result.var -|.else - | mov r0, OP:r0->result.var -|.endif +| mov eax, dword OP:r0->result.var | SET_Z_TYPE_INFO FP + r0, IS_UNDEF |.endmacro @@ -602,8 +602,10 @@ static void* dasm_labels[zend_lb_MAX]; | mov r0, lval |.endif || if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) { +| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | vcvtsi2sd, xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), r0 || } else { +| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | cvtsi2sd, xmm(reg-ZREG_XMM0), r0 || } || } @@ -614,14 +616,18 @@ static void* dasm_labels[zend_lb_MAX]; | SSE_GET_LONG reg, Z_LVAL_P(Z_ZV(addr)) || } else if (Z_MODE(addr) == IS_MEM_ZVAL) { || if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) { +| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] || } else { +| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | cvtsi2sd xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] || } || } else if (Z_MODE(addr) == IS_REG) { || if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) { +| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), Ra(Z_REG(addr)) || } else { +| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) | cvtsi2sd xmm(reg-ZREG_XMM0), Ra(Z_REG(addr)) || } || } else { @@ -1734,10 +1740,8 @@ static int zend_jit_interrupt_handler_stub(dasm_State **Dst) | mov CARG1, FP | EXT_CALL zend_interrupt_function, r0 |.else - | sub r4, 12 - | push FP + | mov aword A1, FP | EXT_CALL zend_interrupt_function, r0 - | add r4, 16 |.endif | //ZEND_VM_ENTER(); | //execute_data = EG(current_execute_data); @@ -1806,11 +1810,7 @@ static int zend_jit_exception_handler_undef_stub(dasm_State **Dst) | MEM_OP2_2_ZTS mov, r0, aword, executor_globals, opline_before_exception, r0 | test byte OP:r0->result_type, (IS_TMP_VAR|IS_VAR) | jnz >1 - | .if X64 - | movsxd r0, dword OP:r0->result.var - | .else - | mov r0, aword OP:r0->result.var - | .endif + | mov eax, dword OP:r0->result.var | SET_Z_TYPE_INFO FP + r0, IS_UNDEF |1: | jmp ->exception_handler @@ -1909,11 +1909,7 @@ static int zend_jit_throw_cannot_pass_by_ref_stub(dasm_State **Dst) { |->throw_cannot_pass_by_ref: | mov r0, EX->opline - |.if X64 - | movsxd r1, dword OP:r0->result.var - |.else - | mov r1, OP:r0->result.var - |.endif + | mov ecx, dword OP:r0->result.var | SET_Z_TYPE_INFO RX+r1, IS_UNDEF | // last EX(call) frame may be delayed | cmp RX, EX->call @@ -1927,11 +1923,7 @@ static int zend_jit_throw_cannot_pass_by_ref_stub(dasm_State **Dst) | EXT_CALL zend_cannot_pass_by_reference, r0 | cmp byte OP:RX->op1_type, IS_TMP_VAR | jne >9 - |.if X64 - | movsxd r0, dword OP:RX->op1.var - |.else - | mov r0, OP:RX->op1.var - |.endif + | mov eax, dword OP:RX->op1.var | add r0, FP | ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL |9: @@ -1960,11 +1952,7 @@ static int zend_jit_undefined_offset_stub(dasm_State **Dst) | sub r4, 12 |.endif | mov r0, EX->opline - |.if X64 - | movsxd r1, dword OP:r0->result.var - |.else - | mov r1, OP:r0->result.var - |.endif + | mov ecx, dword OP:r0->result.var | cmp byte OP:r0->op2_type, IS_CONST | SET_Z_TYPE_INFO FP + r1, IS_NULL | jne >2 @@ -1976,11 +1964,7 @@ static int zend_jit_undefined_offset_stub(dasm_State **Dst) |.endif | jmp >3 |2: - |.if X64 - | movsxd r0, dword OP:r0->op2.var - |.else - | mov r0, OP:r0->op2.var - |.endif + | mov eax, dword OP:r0->op2.var | add r0, FP |3: |.if X64WIN @@ -2028,11 +2012,7 @@ static int zend_jit_undefined_index_stub(dasm_State **Dst) | sub r4, 12 |.endif | mov r0, EX->opline - |.if X64 - | movsxd r1, dword OP:r0->result.var - |.else - | mov r1, OP:r0->result.var - |.endif + | mov ecx, dword OP:r0->result.var | cmp byte OP:r0->op2_type, IS_CONST | SET_Z_TYPE_INFO FP + r1, IS_NULL | jne >2 @@ -2044,11 +2024,7 @@ static int zend_jit_undefined_index_stub(dasm_State **Dst) |.endif | jmp >3 |2: - |.if X64 - | movsxd r0, dword OP:r0->op2.var - |.else - | mov r0, OP:r0->op2.var - |.endif + | mov eax, dword OP:r0->op2.var | add r0, FP |3: |.if X64WIN @@ -2102,11 +2078,7 @@ static int zend_jit_cannot_add_element_stub(dasm_State **Dst) | mov r0, EX->opline | cmp byte OP:r0->result_type, IS_UNUSED | jz >1 - |.if X64 - | movsxd r0, dword OP:r0->result.var - |.else - | mov r0, OP:r0->result.var - |.endif + | mov eax, dword OP:r0->result.var | SET_Z_TYPE_INFO FP + r0, IS_NULL |1: |.if X64WIN @@ -2143,15 +2115,13 @@ static int zend_jit_undefined_function_stub(dasm_State **Dst) | add CARG3, offsetof(zend_string, val) | EXT_CALL zend_throw_error, r0 |.else - | sub r4, 4 | mov r0, aword [r0 + offsetof(zend_op, op2.zv)] | mov r0, aword [r0] | add r0, offsetof(zend_string, val) - | push r0 - | push "Call to undefined function %s()" - | push 0 + | mov aword A3, r0 + | mov aword A2, "Call to undefined function %s()" + | mov aword A1, 0 | EXT_CALL zend_throw_error, r0 - | add r4, 16 |.endif | jmp ->exception_handler return 1; @@ -3579,7 +3549,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra case ZEND_FE_FETCH_RW: if (opline->op2_type == IS_CV) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1); } exit_opline = (trace->opline == opline + 1) ? ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) : @@ -3591,7 +3561,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); } exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); @@ -3796,12 +3766,12 @@ static int zend_jit_load_reg(dasm_State **Dst, zend_jit_addr src, zend_jit_addr return 1; } -static int zend_jit_store_var(dasm_State **Dst, uint32_t info, int var, zend_reg reg) +static int zend_jit_store_var(dasm_State **Dst, uint32_t info, int var, zend_reg reg, zend_bool set_type) { zend_jit_addr src = ZEND_ADDR_REG(reg); zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, EX_NUM_TO_VAR(var)); - return zend_jit_spill_store(Dst, src, dst, info, 1); + return zend_jit_spill_store(Dst, src, dst, info, set_type); } static int zend_jit_store_var_if_necessary(dasm_State **Dst, int var, zend_jit_addr src, uint32_t info) @@ -3838,7 +3808,7 @@ static int zend_jit_load_var(dasm_State **Dst, uint32_t info, int var, zend_reg return zend_jit_load_reg(Dst, src, dst, info); } -static int zend_jit_update_regs(dasm_State **Dst, zend_jit_addr src, zend_jit_addr dst, uint32_t info) +static int zend_jit_update_regs(dasm_State **Dst, uint32_t var, zend_jit_addr src, zend_jit_addr dst, uint32_t info) { if (!zend_jit_same_addr(src, dst)) { if (Z_MODE(src) == IS_REG) { @@ -3852,7 +3822,12 @@ static int zend_jit_update_regs(dasm_State **Dst, zend_jit_addr src, zend_jit_ad } } else if (Z_MODE(dst) == IS_MEM_ZVAL) { if (!Z_LOAD(src) && !Z_STORE(src)) { - if (!zend_jit_spill_store(Dst, src, dst, info, 1)) { + if (!zend_jit_spill_store(Dst, src, dst, info, + JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || + JIT_G(current_frame) == NULL || + STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var)) == IS_UNKNOWN || + (1 << STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var))) != (info & MAY_BE_ANY) + )) { return 0; } } @@ -3959,7 +3934,7 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { | ZVAL_COPY_VALUE res_addr, res_use_info, op1_addr, MAY_BE_LONG, ZREG_R0, ZREG_R1 } - if (!zend_jit_update_regs(Dst, op1_addr, op1_def_addr, MAY_BE_LONG)) { + if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, MAY_BE_LONG)) { return 0; } if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { @@ -3978,7 +3953,7 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op stack = JIT_G(current_frame)->stack; old_op1_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_DOUBLE); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_DOUBLE, 0); if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_LONG_MAX_PLUS_1); } else { @@ -3987,16 +3962,16 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op if (opline->result_type != IS_UNUSED) { old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); if (opline->opcode == ZEND_PRE_INC) { - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MAX_PLUS_1); } else if (opline->opcode == ZEND_PRE_DEC) { - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MIN_MINUS_1); } else if (opline->opcode == ZEND_POST_INC) { - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MAX); } else if (opline->opcode == ZEND_POST_DEC) { - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MIN); } } @@ -4455,6 +4430,8 @@ static int zend_jit_math_double_double(dasm_State **Dst, result_reg = Z_REG(res_addr); } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr)) { result_reg = Z_REG(op1_addr); + } else if (zend_is_commutative(opcode) && Z_MODE(op2_addr) == IS_REG && Z_LAST_USE(op2_addr)) { + result_reg = Z_REG(op2_addr); } else { result_reg = ZREG_XMM0; } @@ -4985,7 +4962,9 @@ static int zend_jit_long_math_helper(dasm_State **Dst, | LONG_MATH opcode, result_reg, op2_addr } - | SET_ZVAL_LVAL res_addr, Ra(result_reg) + if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != result_reg) { + | SET_ZVAL_LVAL res_addr, Ra(result_reg) + } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_LONG) { @@ -5252,7 +5231,7 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o } | // if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) |.if X64 - | movsxd r0, dword [FCARG1a + offsetof(zend_array, nNumUsed)] + | mov eax, dword [FCARG1a + offsetof(zend_array, nNumUsed)] if (val == 0) { | test r0, r0 } else if (val > 0 && !op2_loaded) { @@ -5528,7 +5507,9 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o | // retval = Z_INDIRECT_P(retval); | GET_Z_PTR r0, r0 | IF_NOT_Z_TYPE r0, IS_UNDEF, >8 - if (type == BP_VAR_IS && not_found_exit_addr) { + if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { + | jmp &exit_addr + } else if (type == BP_VAR_IS && not_found_exit_addr) { | jmp ¬_found_exit_addr } |2: @@ -6572,9 +6553,129 @@ static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, uint32_t return result; } -static int zend_jit_cmp_long_long(dasm_State **Dst, const zend_op *opline, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_is_constant_cmp_long_long(const zend_op *opline, + zend_ssa_range *op1_range, + zend_jit_addr op1_addr, + zend_ssa_range *op2_range, + zend_jit_addr op2_addr, + zend_bool *result) +{ + zend_long op1_min; + zend_long op1_max; + zend_long op2_min; + zend_long op2_max; + + if (op1_range) { + op1_min = op1_range->min; + op1_max = op1_range->max; + } else if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { + ZEND_ASSERT(Z_TYPE_P(Z_ZV(op1_addr)) == IS_LONG); + op1_min = op1_max = Z_LVAL_P(Z_ZV(op1_addr)); + } else { + return 0; + } + + if (op2_range) { + op2_min = op2_range->min; + op2_max = op2_range->max; + } else if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { + ZEND_ASSERT(Z_TYPE_P(Z_ZV(op2_addr)) == IS_LONG); + op2_min = op2_max = Z_LVAL_P(Z_ZV(op2_addr)); + } else { + return 0; + } + + switch (opline->opcode) { + case ZEND_IS_EQUAL: + case ZEND_IS_IDENTICAL: + case ZEND_CASE: + case ZEND_CASE_STRICT: + if (op1_min == op1_max && op2_min == op2_max && op1_min == op2_min) { + *result = 1; + return 1; + } else if (op1_max < op2_min || op1_min > op2_max) { + *result = 0; + return 1; + } + return 0; + case ZEND_IS_NOT_EQUAL: + case ZEND_IS_NOT_IDENTICAL: + if (op1_min == op1_max && op2_min == op2_max && op1_min == op2_min) { + *result = 0; + return 1; + } else if (op1_max < op2_min || op1_min > op2_max) { + *result = 1; + return 1; + } + return 0; + case ZEND_IS_SMALLER: + if (op1_max < op2_min) { + *result = 1; + return 1; + } else if (op1_min >= op2_max) { + *result = 0; + return 1; + } + return 0; + case ZEND_IS_SMALLER_OR_EQUAL: + if (op1_max <= op2_min) { + *result = 1; + return 1; + } else if (op1_min > op2_max) { + *result = 0; + return 1; + } + return 0; + default: + ZEND_UNREACHABLE(); + } + return 0; +} + +static int zend_jit_cmp_long_long(dasm_State **Dst, + const zend_op *opline, + zend_ssa_range *op1_range, + zend_jit_addr op1_addr, + zend_ssa_range *op2_range, + zend_jit_addr op2_addr, + zend_jit_addr res_addr, + zend_uchar smart_branch_opcode, + uint32_t target_label, + uint32_t target_label2, + const void *exit_addr) { zend_bool swap = 0; + zend_bool result; + + if (zend_jit_is_constant_cmp_long_long(opline, op1_range, op1_addr, op2_range, op2_addr, &result)) { + if (!smart_branch_opcode || + smart_branch_opcode == ZEND_JMPZ_EX || + smart_branch_opcode == ZEND_JMPNZ_EX) { + | SET_ZVAL_TYPE_INFO res_addr, (result ? IS_TRUE : IS_FALSE) + } + if (smart_branch_opcode && !exit_addr) { + if (smart_branch_opcode == ZEND_JMPZ || + smart_branch_opcode == ZEND_JMPZ_EX) { + if (!result) { + | jmp => target_label + } + } else if (smart_branch_opcode == ZEND_JMPNZ || + smart_branch_opcode == ZEND_JMPNZ_EX) { + if (result) { + | jmp => target_label + } + } else if (smart_branch_opcode == ZEND_JMPZNZ) { + if (!result) { + | jmp => target_label + } else { + | jmp => target_label2 + } + } else { + ZEND_UNREACHABLE(); + } + } + return 1; + } if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { @@ -7350,7 +7451,20 @@ static int zend_jit_cmp_slow(dasm_State **Dst, const zend_op *opline, zend_jit_a return 1; } -static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_cmp(dasm_State **Dst, + const zend_op *opline, + uint32_t op1_info, + zend_ssa_range *op1_range, + zend_jit_addr op1_addr, + uint32_t op2_info, + zend_ssa_range *op2_range, + zend_jit_addr op2_addr, + zend_jit_addr res_addr, + int may_throw, + zend_uchar smart_branch_opcode, + uint32_t target_label, + uint32_t target_label2, + const void *exit_addr) { zend_bool same_ops = (opline->op1_type == opline->op2_type) && (opline->op1.var == opline->op2.var); zend_bool has_slow; @@ -7386,7 +7500,7 @@ static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, uint32_t op1_in | IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >9 } } - if (!zend_jit_cmp_long_long(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { + if (!zend_jit_cmp_long_long(Dst, opline, op1_range, op1_addr, op2_range, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { @@ -7575,7 +7689,20 @@ static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, uint32_t op1_in return 1; } -static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_identical(dasm_State **Dst, + const zend_op *opline, + uint32_t op1_info, + zend_ssa_range *op1_range, + zend_jit_addr op1_addr, + uint32_t op2_info, + zend_ssa_range *op2_range, + zend_jit_addr op2_addr, + zend_jit_addr res_addr, + int may_throw, + zend_uchar smart_branch_opcode, + uint32_t target_label, + uint32_t target_label2, + const void *exit_addr) { uint32_t identical_label = (uint32_t)-1; uint32_t not_identical_label = (uint32_t)-1; @@ -7608,7 +7735,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, uint32_t if ((op1_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG && (op2_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG) { - if (!zend_jit_cmp_long_long(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { + if (!zend_jit_cmp_long_long(Dst, opline, op1_range, op1_addr, op2_range, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } return 1; @@ -8412,10 +8539,10 @@ static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_ return 1; } -static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr, uint32_t res_info, zend_jit_addr res_addr) +static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr) { if (op1_addr != op1_def_addr) { - if (!zend_jit_update_regs(Dst, op1_addr, op1_def_addr, op1_info)) { + if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, op1_info)) { return 0; } if (Z_MODE(op1_def_addr) == IS_REG && Z_MODE(op1_addr) != IS_REG) { @@ -8423,7 +8550,7 @@ static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, uint32_t } } - if (!zend_jit_simple_assign(Dst, opline, res_addr, -1, -1, opline->op1_type, op1_addr, op1_info, 0, 0, 0)) { + if (!zend_jit_simple_assign(Dst, opline, res_addr, res_use_info, res_info, opline->op1_type, op1_addr, op1_info, 0, 0, 0)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { @@ -8437,7 +8564,7 @@ static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1 ZEND_ASSERT(opline->op1_type == IS_CV); if (op2_addr != op2_def_addr) { - if (!zend_jit_update_regs(Dst, op2_addr, op2_def_addr, op2_info)) { + if (!zend_jit_update_regs(Dst, opline->op2.var, op2_addr, op2_def_addr, op2_info)) { return 0; } if (Z_MODE(op2_def_addr) == IS_REG && Z_MODE(op2_addr) != IS_REG) { @@ -8477,7 +8604,25 @@ typedef struct _zend_closure { zif_handler orig_internal_handler; } zend_closure; -static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zend_function *func, zend_bool is_closure, zend_bool use_this) +static int zend_jit_stack_check(dasm_State **Dst, const zend_op *opline, uint32_t used_stack) +{ + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); + const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); + + if (!exit_addr) { + return 0; + } + + | // Check Stack Overflow + | MEM_OP2_2_ZTS mov, r1, aword, executor_globals, vm_stack_end, r0 + | MEM_OP2_2_ZTS sub, r1, aword, executor_globals, vm_stack_top, r0 + | cmp r1, used_stack + | jb &exit_addr + + return 1; +} + +static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zend_function *func, zend_bool is_closure, zend_bool use_this, zend_bool stack_check) { uint32_t used_stack; @@ -8511,7 +8656,7 @@ static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zen |.if X64 | movsxd r2, edx |.endif - | sub FCARG1a, r2 + | sub FCARG1a, r2 |1: } @@ -8519,51 +8664,54 @@ static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zen | // if (UNEXPECTED(used_stack > (size_t)(((char*)EG(vm_stack_end)) - (char*)call))) { | MEM_OP2_2_ZTS mov, RX, aword, executor_globals, vm_stack_top, RX - | // Check Stack Overflow - | MEM_OP2_2_ZTS mov, r2, aword, executor_globals, vm_stack_end, r2 - | sub r2, RX - if (func) { - | cmp r2, used_stack - } else { - | cmp r2, FCARG1a - } - - if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); - const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); - - if (!exit_addr) { - return 0; - } - | jb &exit_addr - } else { - | jb >1 - | // EG(vm_stack_top) = (zval*)((char*)call + used_stack); - |.cold_code - |1: + if (stack_check) { + | // Check Stack Overflow + | MEM_OP2_2_ZTS mov, r2, aword, executor_globals, vm_stack_end, r2 + | sub r2, RX if (func) { - | mov FCARG1d, used_stack + | cmp r2, used_stack + } else { + | cmp r2, FCARG1a } + + if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); + const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); + + if (!exit_addr) { + return 0; + } + + | jb &exit_addr + } else { + | jb >1 + | // EG(vm_stack_top) = (zval*)((char*)call + used_stack); + |.cold_code + |1: + if (func) { + | mov FCARG1d, used_stack + } #ifdef _WIN32 - if (0) { + if (0) { #else - if (func && func->type == ZEND_INTERNAL_FUNCTION) { + if (func && func->type == ZEND_INTERNAL_FUNCTION) { #endif - | SET_EX_OPLINE opline, r0 - | EXT_CALL zend_jit_int_extend_stack_helper, r0 - } else { - if (!is_closure) { - | mov FCARG2a, r0 + | SET_EX_OPLINE opline, r0 + | EXT_CALL zend_jit_int_extend_stack_helper, r0 } else { - | lea FCARG2a, aword [r0 + offsetof(zend_closure, func)] + if (!is_closure) { + | mov FCARG2a, r0 + } else { + | lea FCARG2a, aword [r0 + offsetof(zend_closure, func)] + } + | SET_EX_OPLINE opline, r0 + | EXT_CALL zend_jit_extend_stack_helper, r0 } - | SET_EX_OPLINE opline, r0 - | EXT_CALL zend_jit_extend_stack_helper, r0 + | mov RX, r0 + | jmp >1 + |.code } - | mov RX, r0 - | jmp >1 - |.code } if (func) { @@ -8905,7 +9053,7 @@ static int zend_jit_init_fcall_guard(dasm_State **Dst, uint32_t level, const zen return 1; } -static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t b, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, zend_jit_trace_rec *trace) +static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t b, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, zend_jit_trace_rec *trace, zend_bool stack_check) { zend_func_info *info = ZEND_FUNC_INFO(op_array); zend_call_info *call_info = NULL; @@ -9038,7 +9186,7 @@ static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t |3: } - if (!zend_jit_push_call_frame(Dst, opline, func, 0, 0)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 0, 0, stack_check)) { return 0; } @@ -9067,7 +9215,8 @@ static int zend_jit_init_method_call(dasm_State **Dst, zend_bool ce_is_instanceof, zend_bool use_this, zend_class_entry *trace_ce, - zend_jit_trace_rec *trace) + zend_jit_trace_rec *trace, + zend_bool stack_check) { zend_func_info *info = ZEND_FUNC_INFO(op_array); zend_call_info *call_info = NULL; @@ -9277,7 +9426,7 @@ static int zend_jit_init_method_call(dasm_State **Dst, } if (!func || (func->common.fn_flags & ZEND_ACC_STATIC) == 0) { - if (!zend_jit_push_call_frame(Dst, opline, func, 0, use_this)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 0, use_this, stack_check)) { return 0; } } @@ -9306,7 +9455,8 @@ static int zend_jit_init_closure_call(dasm_State **Dst, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, - zend_jit_trace_rec *trace) + zend_jit_trace_rec *trace, + zend_bool stack_check) { zend_function *func = NULL; zend_jit_addr op2_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var); @@ -9375,7 +9525,7 @@ static int zend_jit_init_closure_call(dasm_State **Dst, } } - if (!zend_jit_push_call_frame(Dst, opline, func, 1, 0)) { + if (!zend_jit_push_call_frame(Dst, opline, func, 1, 0, stack_check)) { return 0; } @@ -9691,6 +9841,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend if (!trace && op_array == &func->op_array) { /* recursive call */ if (ZEND_OBSERVER_ENABLED) { + | SAVE_IP | mov FCARG1a, FP | EXT_CALL zend_observer_fcall_begin, r0 } @@ -9768,8 +9919,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend } | // opline += num_args; |.if X64 - | movsxd r2, ecx - | imul r2, r2, sizeof(zend_op) + || ZEND_ASSERT(sizeof(zend_op) == 32); + | mov edx, ecx + | shl r2, 5 |.else | imul r2, ecx, sizeof(zend_op) |.endif @@ -9785,9 +9937,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend | sub edx, ecx | jle >3 //??? | // zval *var = EX_VAR_NUM(num_args); - |.if X64 - | movsxd r1, ecx - |.endif +// |.if X64 +// | movsxd r1, ecx +// |.endif | shl r1, 4 | lea r1, [FP + r1 + (ZEND_CALL_FRAME_SLOT * sizeof(zval))] |2: @@ -9799,6 +9951,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend } if (ZEND_OBSERVER_ENABLED) { + | SAVE_IP | mov FCARG1a, FP | EXT_CALL zend_observer_fcall_begin, r0 } @@ -10369,7 +10522,7 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend } } else { if (op1_addr != op1_def_addr) { - if (!zend_jit_update_regs(Dst, op1_addr, op1_def_addr, op1_info)) { + if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, op1_info)) { return 0; } if (Z_MODE(op1_def_addr) == IS_REG && Z_MODE(op1_addr) != IS_REG) { @@ -10898,7 +11051,15 @@ static int zend_jit_free_op(dasm_State **Dst, const zend_op *opline, uint32_t in return 1; } -static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, const zend_op *opline, uint32_t op1_info, zend_jit_trace_rec *trace, zend_jit_trace_info *trace_info, int indirect_var_access, int may_throw) +static int zend_jit_leave_func(dasm_State **Dst, + const zend_op_array *op_array, + const zend_op *opline, + uint32_t op1_info, + zend_bool left_frame, + zend_jit_trace_rec *trace, + zend_jit_trace_info *trace_info, + int indirect_var_access, + int may_throw) { zend_bool may_be_top_frame = JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || @@ -10925,6 +11086,12 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, | mov FCARG1d, dword [FP + offsetof(zend_execute_data, This.u1.type_info)] } if (may_need_call_helper) { + if (!left_frame) { + left_frame = 1; + if (!zend_jit_leave_frame(Dst)) { + return 0; + } + } /* ZEND_CALL_FAKE_CLOSURE handled on slow path to eliminate check for ZEND_CALL_CLOSURE on fast path */ | test FCARG1d, (ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_FAKE_CLOSURE) if (trace && trace->op != ZEND_JIT_TRACE_END) { @@ -10939,8 +11106,11 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, if (may_be_top_frame) { // TODO: try to avoid this check ??? if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { +#if 0 + /* this check should be handled by the following OPLINE guard */ | cmp IP, zend_jit_halt_op | je ->trace_halt +#endif } else if (GCC_GLOBAL_REGS) { | test IP, IP | je ->trace_halt @@ -10962,12 +11132,24 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, } if (op_array->fn_flags & ZEND_ACC_CLOSURE) { + if (!left_frame) { + left_frame = 1; + if (!zend_jit_leave_frame(Dst)) { + return 0; + } + } | // OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); | mov FCARG1a, EX->func | sub FCARG1a, sizeof(zend_object) | OBJ_RELEASE ZREG_FCARG1a, >4 |4: } else if (may_need_release_this) { + if (!left_frame) { + left_frame = 1; + if (!zend_jit_leave_frame(Dst)) { + return 0; + } + } | // if (call_info & ZEND_CALL_RELEASE_THIS) | test FCARG1d, ZEND_CALL_RELEASE_THIS | je >4 @@ -10985,6 +11167,11 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, | // execute_data = EX(prev_execute_data); | mov FP, EX->prev_execute_data + if (!left_frame) { + | // EG(current_execute_data) = execute_data; + | MEM_OP2_1_ZTS mov, aword, executor_globals, current_execute_data, FP, r0 + } + |9: if (trace) { if (trace->op != ZEND_JIT_TRACE_END @@ -11179,6 +11366,7 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o if (ZEND_OBSERVER_ENABLED) { | xor FCARG2a, FCARG2a | mov FCARG1a, FP + | SET_EX_OPLINE opline, r0 | EXT_CALL zend_observer_fcall_end, r0 } return 1; @@ -11199,9 +11387,15 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); } | ZVAL_COPY_VALUE ret_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 - if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || (op1_info & MAY_BE_REF) || (return_value_used != 1)) { - | // TODO: JIT: if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) ZVAL_NULL(retval_ptr); ??? - | TRY_ADDREF op1_info, ah, r2 + if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { + if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || + (op1_info & (MAY_BE_REF|MAY_BE_OBJECT)) || + !op_array->function_name) { + | TRY_ADDREF op1_info, ah, r2 + } else if (return_value_used != 1) { + | // if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) ZVAL_NULL(retval_ptr); + | SET_ZVAL_TYPE_INFO op1_addr, IS_NULL + } } } else { if (op1_info & MAY_BE_REF) { @@ -11246,6 +11440,7 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o if (ZEND_OBSERVER_ENABLED) { | LOAD_ZVAL_ADDR FCARG2a, ret_addr | mov FCARG1a, FP + | SET_EX_OPLINE opline, r0 | EXT_CALL zend_observer_fcall_end, r0 } return 1; @@ -11389,7 +11584,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, if (!(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF) - (MAY_BE_STRING|MAY_BE_LONG)))) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); @@ -11404,7 +11599,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, if (opline->opcode == ZEND_FETCH_DIM_IS && !(res_info & MAY_BE_NULL)) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_NULL); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_NULL, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_NULL); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); @@ -11454,24 +11649,30 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, } } | SET_EX_OPLINE opline, r0 - if (Z_REG(op1_addr) != ZREG_FCARG1a || Z_OFFSET(op1_addr) != 0) { - | LOAD_ZVAL_ADDR FCARG1a, op1_addr - } - | LOAD_ZVAL_ADDR FCARG2a, op2_addr - |.if X64 - | LOAD_ZVAL_ADDR CARG3, res_addr - |.else - | sub r4, 12 - | PUSH_ZVAL_ADDR res_addr, r0 - |.endif + | GET_ZVAL_LVAL ZREG_FCARG1a, op1_addr if (opline->opcode != ZEND_FETCH_DIM_IS) { - | EXT_CALL zend_jit_fetch_dim_str_r_helper, r0 + if ((op2_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_LONG) { + | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr + | EXT_CALL zend_jit_fetch_dim_str_offset_r_helper, r0 + } else { + | LOAD_ZVAL_ADDR FCARG2a, op2_addr + | EXT_CALL zend_jit_fetch_dim_str_r_helper, r0 + } + | SET_ZVAL_PTR res_addr, r0 + | SET_ZVAL_TYPE_INFO res_addr, IS_STRING } else { + | LOAD_ZVAL_ADDR FCARG2a, op2_addr + |.if X64 + | LOAD_ZVAL_ADDR CARG3, res_addr + |.else + | sub r4, 12 + | PUSH_ZVAL_ADDR res_addr, r0 + |.endif | EXT_CALL zend_jit_fetch_dim_str_is_helper, r0 + |.if not(X64) + | add r4, 12 + |.endif } - |.if not(X64) - | add r4, 12 - |.endif if ((op1_info & MAY_BE_ARRAY) || (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_STRING)))) { | jmp >9 // END @@ -11537,7 +11738,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, } if ((op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_OBJECT|may_be_string))) - && !exit_addr) { + && (!exit_addr || !(op1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_STRING)))) { if (opline->opcode != ZEND_FETCH_DIM_IS && opline->opcode != ZEND_FETCH_LIST_R) { if ((op1_info & MAY_BE_UNDEF) || (op2_info & MAY_BE_UNDEF)) { | LOAD_ZVAL_ADDR FCARG1a, orig_op1_addr @@ -11583,7 +11784,11 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, | ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1 if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (type < IS_STRING) { - | SET_ZVAL_TYPE_INFO res_addr, type + if (Z_REG(res_addr) != ZREG_FP || + JIT_G(current_frame) == NULL || + STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(res_addr))) != type) { + | SET_ZVAL_TYPE_INFO res_addr, type + } } else { | SET_ZVAL_TYPE_INFO res_addr, edx if (!result_avoid_refcounting) { @@ -12009,11 +12214,10 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_ | mov r0, aword [r0 + opline->extended_value] | sub r0, 1 | // if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) + | MEM_OP2_2_ZTS mov, ecx, dword, executor_globals, symbol_table.nNumUsed, r1 |.if X64 - | MEM_OP2_2_ZTS movsxd, r1, dword, executor_globals, symbol_table.nNumUsed, r1 | shl r1, 5 |.else - | MEM_OP2_2_ZTS mov, r1, dword, executor_globals, symbol_table.nNumUsed, r1 | imul r1, sizeof(Bucket) |.endif | cmp r0, r1 @@ -12228,20 +12432,18 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen } else { | ADDR_OP2_2 mov, aword EX->opline, opline, r0 } - |.if X64 - | LOAD_ZVAL_ADDR CARG1, res_addr - | mov r0, EX->func - | mov CARG2, [r0 + offsetof(zend_op_array, scope)] - | EXT_CALL zval_update_constant_ex, r0 - |.else - | sub r4, 8 - | mov r0, EX->func - | push dword [r0 + offsetof(zend_op_array, scope)] - | LOAD_ZVAL_ADDR r0, res_addr - | push r0 - | EXT_CALL zval_update_constant_ex, r0 - | add r4, 16 - |.endif + | LOAD_ZVAL_ADDR FCARG1a, res_addr + | mov r0, EX->func + | mov FCARG2a, [r0 + offsetof(zend_op_array, scope)] + | .if X64 + | EXT_CALL zval_update_constant_ex, r0 + | .else + ||#if (PHP_VERSION_ID <= 80000) + | EXT_CALL zval_jit_update_constant_ex, r0 + ||#else + | EXT_CALL zval_update_constant_ex, r0 + ||#endif + | .endif | test al, al | jnz >1 |.cold_code @@ -12561,10 +12763,19 @@ static int zend_jit_fetch_obj(dasm_State **Dst, } } else if (flags == ZEND_FETCH_REF) { | IF_TYPE dl, IS_REFERENCE, >1 + if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { + | LOAD_ADDR FCARG2a, prop_info + } else { + int prop_info_offset = + (((prop_info->offset - (sizeof(zend_object) - sizeof(zval))) / sizeof(zval)) * sizeof(void*)); + + | mov r0, aword [FCARG1a + offsetof(zend_object, ce)] + | mov r0, aword [r0 + offsetof(zend_class_entry, properties_info_table)] + | mov FCARG2a, aword[r0 + prop_info_offset] + } if (Z_REG(prop_addr) != ZREG_FCARG1a || Z_OFFSET(prop_addr) != 0) { | LOAD_ZVAL_ADDR FCARG1a, prop_addr } - | LOAD_ADDR FCARG2a, prop_info |.if X64 | LOAD_ZVAL_ADDR CARG3, res_addr |.else @@ -12625,7 +12836,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, } old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); @@ -12653,7 +12864,11 @@ static int zend_jit_fetch_obj(dasm_State **Dst, | // ZVAL_COPY | ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1 if (type < IS_STRING) { - | SET_ZVAL_TYPE_INFO res_addr, type + if (Z_REG(res_addr) != ZREG_FP || + JIT_G(current_frame) == NULL || + STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(res_addr))) != type) { + | SET_ZVAL_TYPE_INFO res_addr, type + } } else { | SET_ZVAL_TYPE_INFO res_addr, edx if (!result_avoid_refcounting) { @@ -12958,7 +13173,9 @@ static int zend_jit_incdec_obj(dasm_State **Dst, zend_jit_addr var_addr = prop_addr; var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0); - | LOAD_ZVAL_ADDR FCARG1a, prop_addr + if (Z_REG(prop_addr) != ZREG_FCARG1a || Z_OFFSET(prop_addr) != 0) { + | LOAD_ZVAL_ADDR FCARG1a, prop_addr + } | IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, >2 | GET_ZVAL_PTR FCARG1a, var_addr @@ -13282,8 +13499,32 @@ static int zend_jit_assign_obj_op(dasm_State **Dst, if (ZEND_TYPE_IS_SET(prop_info->type)) { uint32_t info = val_info; + if (opline) { + | SET_EX_OPLINE opline, r0 + } + + | IF_ZVAL_TYPE prop_addr, IS_REFERENCE, >1 + |.cold_code + |1: + | GET_ZVAL_PTR FCARG1a, prop_addr + if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2a || Z_OFFSET(val_addr) != 0) { + | LOAD_ZVAL_ADDR FCARG2a, val_addr + } + |.if X64 + | LOAD_ADDR CARG3, binary_op + |.else + | sub r4, 12 + | PUSH_ADDR binary_op, r0 + |.endif + | EXT_CALL zend_jit_assign_op_to_typed_ref, r0 + |.if not(X64) + | add r4, 12 + |.endif + | jmp >9 + |.code + | // value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC); - | SET_EX_OPLINE opline, r0 + if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { | LOAD_ADDR FCARG2a, prop_info } else { @@ -13809,11 +14050,9 @@ static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, uint32_t op1_i | LOAD_ADDR CARG2, len | EXT_CALL zend_write, r0 |.else - | sub r4, 8 - | push len - | push str + | mov aword A2, len + | mov aword A1, str | EXT_CALL zend_write, r0 - | add r4, 16 |.endif if (!zend_jit_check_exception(Dst)) { return 0; @@ -13831,12 +14070,11 @@ static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, uint32_t op1_i | mov CARG2, aword [r0 + offsetof(zend_string, len)] | EXT_CALL zend_write, r0 |.else - | sub r4, 8 - | push aword [r0 + offsetof(zend_string, len)] | add r0, offsetof(zend_string, val) - | push r0 + | mov aword A1, r0 + | mov r0, aword [r0 + (offsetof(zend_string, len)-offsetof(zend_string, val))] + | mov aword A2, r0 | EXT_CALL zend_write, r0 - | add r4, 16 |.endif if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { | ZVAL_PTR_DTOR op1_addr, op1_info, 0, 0, opline @@ -14468,7 +14706,8 @@ static int zend_jit_fe_fetch(dasm_State **Dst, const zend_op *opline, uint32_t o | mov FCARG1d, dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)] | // p = fe_ht->arData + pos; |.if X64 - | movsxd r0, FCARG1d + || ZEND_ASSERT(sizeof(Bucket) == 32); + | mov eax, FCARG1d | shl r0, 5 |.else | imul r0, FCARG1a, sizeof(Bucket) @@ -14862,7 +15101,7 @@ static zend_bool zend_jit_opline_supports_reg(const zend_op_array *op_array, zen case ZEND_MUL: op1_info = OP1_INFO(); op2_info = OP2_INFO(); - return !((op1_info | op2_info) & (MAY_BE_ANY - (MAY_BE_LONG|MAY_BE_DOUBLE))); + return !((op1_info | op2_info) & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_DOUBLE))); case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: @@ -14871,13 +15110,13 @@ static zend_bool zend_jit_opline_supports_reg(const zend_op_array *op_array, zen case ZEND_MOD: op1_info = OP1_INFO(); op2_info = OP2_INFO(); - return !((op1_info | op2_info) & (MAY_BE_ANY - MAY_BE_LONG)); + return !((op1_info | op2_info) & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - MAY_BE_LONG)); case ZEND_PRE_INC: case ZEND_PRE_DEC: case ZEND_POST_INC: case ZEND_POST_DEC: op1_info = OP1_INFO(); - return opline->op1_type == IS_CV && !(op1_info & (MAY_BE_ANY - MAY_BE_LONG)); + return opline->op1_type == IS_CV && !(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - MAY_BE_LONG)); case ZEND_BOOL: case ZEND_BOOL_NOT: case ZEND_JMPZ: @@ -14980,6 +15219,28 @@ static zend_bool zend_needs_extra_reg_for_const(const zend_op *opline, zend_ucha return 0; } +static zend_regset zend_jit_get_def_scratch_regset(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, int current_var, zend_bool last_use) +{ + uint32_t op1_info, op2_info; + + switch (opline->opcode) { + case ZEND_FETCH_DIM_R: + op1_info = OP1_INFO(); + op2_info = OP2_INFO(); + if (((opline->op1_type & (IS_TMP_VAR|IS_VAR)) && + (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) || + ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && + (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)))) { + return ZEND_REGSET(ZREG_FCARG1a); + } + break; + default: + break; + } + + return ZEND_REGSET_EMPTY; +} + static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, int current_var, zend_bool last_use) { uint32_t op1_info, op2_info, res_info; @@ -15117,7 +15378,8 @@ static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend } if ((op1_info & MAY_BE_DOUBLE) && (op2_info & MAY_BE_DOUBLE)) { if (ssa_op->result_def != current_var && - (ssa_op->op1_use != current_var || !last_use)) { + (ssa_op->op1_use != current_var || !last_use) && + (!zend_is_commutative(opline->opcode) || ssa_op->op2_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } } @@ -15177,7 +15439,9 @@ static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend regset = ZEND_REGSET_EMPTY; if (opline->op2_type == IS_CONST && Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) == IS_LONG && - zend_long_is_power_of_two(Z_LVAL_P(RT_CONSTANT(opline, opline->op2)))) { + zend_long_is_power_of_two(Z_LVAL_P(RT_CONSTANT(opline, opline->op2))) && + OP1_HAS_RANGE() && + OP1_MIN_RANGE() >= 0) { if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_R0); diff --git a/ext/opcache/tests/bug65915.phpt b/ext/opcache/tests/bug65915.phpt index c616c4fb5f622..b62dbd8ea74fb 100644 --- a/ext/opcache/tests/bug65915.phpt +++ b/ext/opcache/tests/bug65915.phpt @@ -5,7 +5,11 @@ opcache.enable=1 opcache.enable_cli=1 opcache.file_cache_only=0 --SKIPIF-- - + --FILE-- +===DONE=== +--EXPECT-- +===DONE=== diff --git a/ext/opcache/tests/preload.inc b/ext/opcache/tests/preload.inc index 52bb60e3484ea..13c9db1283595 100644 --- a/ext/opcache/tests/preload.inc +++ b/ext/opcache/tests/preload.inc @@ -45,6 +45,19 @@ class Z { class Z2 extends Z {} +class TraitAliasTest { + use T1 { + T1::foo as bar; + } +} + +// Create reference to a property declared in an internal parent class. +class MyException extends Exception { + public function __construct($message) { + $this->message =& $message; + } +} + function get_anon() { return new class {}; } diff --git a/ext/opcache/tests/preload_dynamic_function.inc b/ext/opcache/tests/preload_dynamic_function.inc new file mode 100644 index 0000000000000..3caa9592b882a --- /dev/null +++ b/ext/opcache/tests/preload_dynamic_function.inc @@ -0,0 +1,4 @@ + +--FILE-- + +--EXPECT-- +bool(true) diff --git a/ext/opcache/tests/preload_early_binding.inc b/ext/opcache/tests/preload_early_binding.inc new file mode 100644 index 0000000000000..0adcd6b6d7e5e --- /dev/null +++ b/ext/opcache/tests/preload_early_binding.inc @@ -0,0 +1,3 @@ + +--FILE-- +OK +--EXPECT-- +object(X)#1 (0) { +} +OK diff --git a/ext/opcache/tests/preload_ind.inc b/ext/opcache/tests/preload_ind.inc new file mode 100644 index 0000000000000..f7f3f4f231cf3 --- /dev/null +++ b/ext/opcache/tests/preload_ind.inc @@ -0,0 +1,2 @@ + +--FILE-- +OK +--EXPECTF-- +Warning: Can't preload class C with unresolved property types in %s on line %d +OK diff --git a/ext/opcache/tests/preload_ind2.inc b/ext/opcache/tests/preload_ind2.inc new file mode 100644 index 0000000000000..93a741f95a90b --- /dev/null +++ b/ext/opcache/tests/preload_ind2.inc @@ -0,0 +1,9 @@ + +--FILE-- + +--EXPECT-- +int(1) +int(2) +int(2) +int(3) + +int(1) +int(1) diff --git a/ext/opcache/tests/preload_parse_error.inc b/ext/opcache/tests/preload_parse_error.inc new file mode 100644 index 0000000000000..08b9d7799cd79 --- /dev/null +++ b/ext/opcache/tests/preload_parse_error.inc @@ -0,0 +1,2 @@ + +--FILE-- +OK +--EXPECTF-- +Parse error: syntax error, unexpected identifier "error" in %s on line %d diff --git a/ext/opcache/tests/preload_prop_info_table.phpt b/ext/opcache/tests/preload_prop_info_table.phpt new file mode 100644 index 0000000000000..51c798409cbe6 --- /dev/null +++ b/ext/opcache/tests/preload_prop_info_table.phpt @@ -0,0 +1,19 @@ +--TEST-- +Preloading of the property info table with internal parent +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.preload={PWD}/preload.inc +--SKIPIF-- + +--FILE-- +getMessage(), "\n"; +?> +--EXPECT-- +foo diff --git a/ext/opcache/tests/preload_trait_alias.phpt b/ext/opcache/tests/preload_trait_alias.phpt new file mode 100644 index 0000000000000..89b843cd76e3a --- /dev/null +++ b/ext/opcache/tests/preload_trait_alias.phpt @@ -0,0 +1,23 @@ +--TEST-- +Preloading trait uses with aliased names +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.preload={PWD}/preload.inc +--SKIPIF-- + +--FILE-- + +--EXPECT-- +array(2) { + [0]=> + string(3) "bar" + [1]=> + string(3) "foo" +} diff --git a/ext/opcache/tests/preload_trait_multiple_fixup.inc b/ext/opcache/tests/preload_trait_multiple_fixup.inc new file mode 100644 index 0000000000000..c6c202372547f --- /dev/null +++ b/ext/opcache/tests/preload_trait_multiple_fixup.inc @@ -0,0 +1,33 @@ + +--FILE-- +method(); +(new C4)->method(); +?> +--EXPECT-- +Foo +Foo diff --git a/ext/opcache/tests/preload_variance.inc b/ext/opcache/tests/preload_variance.inc index 7b2dd7b8ffa17..85e569f3455c8 100644 --- a/ext/opcache/tests/preload_variance.inc +++ b/ext/opcache/tests/preload_variance.inc @@ -13,19 +13,25 @@ class B extends Z { class C extends Z { public function method($a): self {} public function method2($a): C {} + public function method3($a): object {} + public function method4(D $a) {} } class D extends C { public function method($a): self {} public function method2($a): D {} + public function method3($a): stdClass {} + public function method4(C $a) {} } // Works. interface I {} interface J extends I {} class E { + public I|J $prop; public function method($a): I {} } class F extends E { + public J|I $prop; public function method($a): J {} } diff --git a/ext/opcache/tests/zzz_basic_logging.phpt b/ext/opcache/tests/zzz_basic_logging.phpt index bf04b50861a55..0fbf308a51a77 100644 --- a/ext/opcache/tests/zzz_basic_logging.phpt +++ b/ext/opcache/tests/zzz_basic_logging.phpt @@ -12,7 +12,11 @@ opcache.log_verbosity_level=4 opcache.huge_code_pages=0 opcache.preload= --SKIPIF-- - + --FILE-- entries = (zend_blacklist_entry *) calloc(sizeof(zend_blacklist_entry), blacklist->size); if (!blacklist->entries) { - zend_accel_error(ACCEL_LOG_FATAL, "Blacklist initialization: no memory\n"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Blacklist initialization: no memory\n"); return; } blacklist->regexp_list = NULL; @@ -68,7 +68,7 @@ void zend_accel_blacklist_init(zend_blacklist *blacklist) static void blacklist_report_regexp_error(const char *pcre_error, int pcre_error_offset) { - zend_accel_error(ACCEL_LOG_ERROR, "Blacklist compilation failed (offset: %d), %s\n", pcre_error_offset, pcre_error); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Blacklist compilation failed (offset: %d), %s\n", pcre_error_offset, pcre_error); } static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) @@ -163,7 +163,7 @@ static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) if (*c || i == blacklist->pos - 1) { if (*c) { if (!backtrack) { - zend_accel_error(ACCEL_LOG_ERROR, "Too long blacklist entry\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Too long blacklist entry\n"); } p = backtrack; } else { @@ -173,7 +173,7 @@ static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) it = (zend_regexp_list*)malloc(sizeof(zend_regexp_list)); if (!it) { - zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "malloc() failed\n"); return; } it->next = NULL; @@ -302,7 +302,7 @@ static void zend_accel_blacklist_loadone(zend_blacklist *blacklist, char *filena blacklist->entries[blacklist->pos].path_length = path_length; blacklist->entries[blacklist->pos].path = (char *)malloc(path_length + 1); if (!blacklist->entries[blacklist->pos].path) { - zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "malloc() failed\n"); fclose(fp); return; } diff --git a/ext/opcache/zend_accelerator_debug.c b/ext/opcache/zend_accelerator_debug.c index f91c269975b8e..a3db2a7215c19 100644 --- a/ext/opcache/zend_accelerator_debug.c +++ b/ext/opcache/zend_accelerator_debug.c @@ -28,9 +28,8 @@ #endif #include "ZendAccelerator.h" -void zend_accel_error(int type, const char *format, ...) +static void zend_accel_error_va_args(int type, const char *format, va_list args) { - va_list args; time_t timestamp; char *time_string; FILE * fLog = NULL; @@ -77,9 +76,7 @@ void zend_accel_error(int type, const char *format, ...) break; } - va_start(args, format); vfprintf(fLog, format, args); - va_end(args); fprintf(fLog, "\n"); fflush(fLog); @@ -98,3 +95,22 @@ void zend_accel_error(int type, const char *format, ...) } } + +void zend_accel_error(int type, const char *format, ...) +{ + va_list args; + va_start(args, format); + zend_accel_error_va_args(type, format, args); + va_end(args); +} + +ZEND_NORETURN void zend_accel_error_noreturn(int type, const char *format, ...) +{ + va_list args; + va_start(args, format); + ZEND_ASSERT(type == ACCEL_LOG_FATAL || type == ACCEL_LOG_ERROR); + zend_accel_error_va_args(type, format, args); + va_end(args); + /* Should never reach this. */ + abort(); +} diff --git a/ext/opcache/zend_accelerator_debug.h b/ext/opcache/zend_accelerator_debug.h index 234d0367deb23..61456096d136a 100644 --- a/ext/opcache/zend_accelerator_debug.h +++ b/ext/opcache/zend_accelerator_debug.h @@ -29,5 +29,6 @@ #define ACCEL_LOG_DEBUG 4 void zend_accel_error(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); +ZEND_NORETURN void zend_accel_error_noreturn(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); #endif /* _ZEND_ACCELERATOR_DEBUG_H */ diff --git a/ext/opcache/zend_accelerator_hash.c b/ext/opcache/zend_accelerator_hash.c index 7cd9ef1ef45be..b0293ae8f2ff2 100644 --- a/ext/opcache/zend_accelerator_hash.c +++ b/ext/opcache/zend_accelerator_hash.c @@ -54,14 +54,14 @@ void zend_accel_hash_init(zend_accel_hash *accel_hash, uint32_t hash_size) /* set up hash pointers table */ accel_hash->hash_table = zend_shared_alloc(sizeof(zend_accel_hash_entry *)*accel_hash->max_num_entries); if (!accel_hash->hash_table) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return; } /* set up hash values table */ accel_hash->hash_entries = zend_shared_alloc(sizeof(zend_accel_hash_entry)*accel_hash->max_num_entries); if (!accel_hash->hash_entries) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return; } memset(accel_hash->hash_table, 0, sizeof(zend_accel_hash_entry *)*accel_hash->max_num_entries); diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index 4258ddd6864d2..d68ab9531ad21 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -301,7 +301,7 @@ ZEND_INI_BEGIN() STD_PHP_INI_ENTRY("opcache.jit_hot_side_exit" , "8", PHP_INI_ALL, OnUpdateCounter, hot_side_exit, zend_jit_globals, jit_globals) STD_PHP_INI_ENTRY("opcache.jit_blacklist_root_trace" , "16", PHP_INI_ALL, OnUpdateCounter, blacklist_root_trace, zend_jit_globals, jit_globals) STD_PHP_INI_ENTRY("opcache.jit_blacklist_side_trace" , "8", PHP_INI_ALL, OnUpdateCounter, blacklist_side_trace, zend_jit_globals, jit_globals) - STD_PHP_INI_ENTRY("opcache.jit_max_loops_unroll" , "8", PHP_INI_ALL, OnUpdateUnrollL, max_loops_unroll, zend_jit_globals, jit_globals) + STD_PHP_INI_ENTRY("opcache.jit_max_loop_unrolls" , "8", PHP_INI_ALL, OnUpdateUnrollL, max_loop_unrolls, zend_jit_globals, jit_globals) STD_PHP_INI_ENTRY("opcache.jit_max_recursive_calls" , "2", PHP_INI_ALL, OnUpdateUnrollC, max_recursive_calls, zend_jit_globals, jit_globals) STD_PHP_INI_ENTRY("opcache.jit_max_recursive_returns" , "2", PHP_INI_ALL, OnUpdateUnrollR, max_recursive_returns, zend_jit_globals, jit_globals) STD_PHP_INI_ENTRY("opcache.jit_max_polymorphic_calls" , "2", PHP_INI_ALL, OnUpdateLong, max_polymorphic_calls, zend_jit_globals, jit_globals) @@ -785,7 +785,7 @@ ZEND_FUNCTION(opcache_get_configuration) add_assoc_long(&directives, "opcache.jit_hot_return", JIT_G(hot_return)); add_assoc_long(&directives, "opcache.jit_hot_side_exit", JIT_G(hot_side_exit)); add_assoc_long(&directives, "opcache.jit_max_exit_counters", JIT_G(max_exit_counters)); - add_assoc_long(&directives, "opcache.jit_max_loops_unroll", JIT_G(max_loops_unroll)); + add_assoc_long(&directives, "opcache.jit_max_loop_unrolls", JIT_G(max_loop_unrolls)); add_assoc_long(&directives, "opcache.jit_max_polymorphic_calls", JIT_G(max_polymorphic_calls)); add_assoc_long(&directives, "opcache.jit_max_recursive_calls", JIT_G(max_recursive_calls)); add_assoc_long(&directives, "opcache.jit_max_recursive_returns", JIT_G(max_recursive_returns)); diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index 415aa76093f7e..efadcb91fb94e 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -230,15 +230,6 @@ static void zend_persist_zval(zval *z) } } break; - case IS_REFERENCE: - new_ptr = zend_shared_alloc_get_xlat_entry(Z_REF_P(z)); - if (new_ptr) { - Z_REF_P(z) = new_ptr; - } else { - Z_REF_P(z) = zend_shared_memdup_put_free(Z_REF_P(z), sizeof(zend_reference)); - zend_persist_zval(Z_REFVAL_P(z)); - } - break; case IS_CONSTANT_AST: new_ptr = zend_shared_alloc_get_xlat_entry(Z_AST_P(z)); if (new_ptr) { @@ -254,8 +245,7 @@ static void zend_persist_zval(zval *z) } break; default: - ZEND_ASSERT(Z_TYPE_P(z) != IS_OBJECT); - ZEND_ASSERT(Z_TYPE_P(z) != IS_RESOURCE); + ZEND_ASSERT(Z_TYPE_P(z) < IS_STRING); break; } } @@ -914,8 +904,11 @@ static void zend_persist_class_entry(zval *zv) for (i = 0; i < ce->default_properties_count; i++) { if (ce->properties_info_table[i]) { - ce->properties_info_table[i] = zend_shared_alloc_get_xlat_entry( + zend_property_info *prop_info = zend_shared_alloc_get_xlat_entry( ce->properties_info_table[i]); + if (prop_info) { + ce->properties_info_table[i] = prop_info; + } } } } diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c index 4a612751a6c28..9de02e91e28b8 100644 --- a/ext/opcache/zend_persist_calc.c +++ b/ext/opcache/zend_persist_calc.c @@ -128,13 +128,6 @@ static void zend_persist_zval_calc(zval *z) } ZEND_HASH_FOREACH_END(); } break; - case IS_REFERENCE: - size = zend_shared_memdup_size(Z_REF_P(z), sizeof(zend_reference)); - if (size) { - ADD_SIZE(size); - zend_persist_zval_calc(Z_REFVAL_P(z)); - } - break; case IS_CONSTANT_AST: size = zend_shared_memdup_size(Z_AST_P(z), sizeof(zend_ast_ref)); if (size) { @@ -143,8 +136,7 @@ static void zend_persist_zval_calc(zval *z) } break; default: - ZEND_ASSERT(Z_TYPE_P(z) != IS_OBJECT); - ZEND_ASSERT(Z_TYPE_P(z) != IS_RESOURCE); + ZEND_ASSERT(Z_TYPE_P(z) < IS_STRING); break; } } diff --git a/ext/opcache/zend_shared_alloc.c b/ext/opcache/zend_shared_alloc.c index d32a70b7e8356..f4cb4f55af6fa 100644 --- a/ext/opcache/zend_shared_alloc.c +++ b/ext/opcache/zend_shared_alloc.c @@ -86,7 +86,7 @@ void zend_shared_alloc_create_lock(char *lockfile_path) fchmod(lock_file, 0666); if (lock_file == -1) { - zend_accel_error(ACCEL_LOG_FATAL, "Unable to create lock file: %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Unable to create lock file: %s (%d)", strerror(errno), errno); } val = fcntl(lock_file, F_GETFD, 0); val |= FD_CLOEXEC; @@ -98,7 +98,7 @@ void zend_shared_alloc_create_lock(char *lockfile_path) static void no_memory_bailout(size_t allocate_size, char *error) { - zend_accel_error(ACCEL_LOG_FATAL, "Unable to allocate shared memory segment of %zu bytes: %s: %s (%d)", allocate_size, error?error:"unknown", strerror(errno), errno ); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Unable to allocate shared memory segment of %zu bytes: %s: %s (%d)", allocate_size, error?error:"unknown", strerror(errno), errno ); } static void copy_shared_segments(void *to, void *from, int count, int size) @@ -231,14 +231,14 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) p_tmp_shared_globals = (zend_smm_shared_globals *) zend_shared_alloc(sizeof(zend_smm_shared_globals)); if (!p_tmp_shared_globals) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } memset(p_tmp_shared_globals, 0, sizeof(zend_smm_shared_globals)); tmp_shared_segments = zend_shared_alloc(shared_segments_array_size + ZSMMG(shared_segments_count) * sizeof(void *)); if (!tmp_shared_segments) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } @@ -252,7 +252,7 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) ZSMMG(shared_memory_state).positions = (int *)zend_shared_alloc(sizeof(int) * ZSMMG(shared_segments_count)); if (!ZSMMG(shared_memory_state).positions) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } @@ -263,7 +263,7 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) ZSMMG(reserved) = (char*)ZSMMG(shared_segments)[i]->p + ZSMMG(shared_segments)[i]->end; ZSMMG(reserved_size) = reserved_size; } else { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } } @@ -340,7 +340,7 @@ void *zend_shared_alloc(size_t size) #if 1 if (!ZCG(locked)) { - zend_accel_error(ACCEL_LOG_ERROR, "Shared memory lock not obtained"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Shared memory lock not obtained"); } #endif if (block_size > ZSMMG(shared_free)) { /* No hope to find a big-enough block */ @@ -482,7 +482,7 @@ void zend_shared_alloc_lock(void) if (errno == EINTR) { continue; } - zend_accel_error(ACCEL_LOG_ERROR, "Cannot create lock - %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot create lock - %s (%d)", strerror(errno), errno); } break; } @@ -508,7 +508,7 @@ void zend_shared_alloc_unlock(void) #ifndef ZEND_WIN32 if (fcntl(lock_file, F_SETLK, &mem_write_unlock) == -1) { - zend_accel_error(ACCEL_LOG_ERROR, "Cannot remove lock - %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot remove lock - %s (%d)", strerror(errno), errno); } #ifdef ZTS tsrm_mutex_unlock(zts_lock); @@ -631,7 +631,7 @@ void zend_accel_shared_protect(int mode) for (i = 0; i < ZSMMG(shared_segments_count); i++) { DWORD oldProtect; if (!VirtualProtect(ZSMMG(shared_segments)[i]->p, ZSMMG(shared_segments)[i]->end, mode, &oldProtect)) { - zend_accel_error(ACCEL_LOG_ERROR, "Failed to protect memory"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Failed to protect memory"); } } #endif diff --git a/ext/openssl/config0.m4 b/ext/openssl/config0.m4 index 9df2469363fa6..e08a76897aeeb 100644 --- a/ext/openssl/config0.m4 +++ b/ext/openssl/config0.m4 @@ -1,7 +1,7 @@ PHP_ARG_WITH([openssl], [for OpenSSL support], [AS_HELP_STRING([--with-openssl], - [Include OpenSSL support (requires OpenSSL >= 1.0.1)])]) + [Include OpenSSL support (requires OpenSSL >= 1.0.2)])]) PHP_ARG_WITH([kerberos], [for Kerberos support], diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index abaf88f15a38c..113d0c2ec4aa8 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -1149,13 +1149,6 @@ PHP_MINIT_FUNCTION(openssl) OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); OpenSSL_add_all_algorithms(); - -#if !defined(OPENSSL_NO_AES) && defined(EVP_CIPH_CCM_MODE) && OPENSSL_VERSION_NUMBER < 0x100020000 - EVP_add_cipher(EVP_aes_128_ccm()); - EVP_add_cipher(EVP_aes_192_ccm()); - EVP_add_cipher(EVP_aes_256_ccm()); -#endif - SSL_load_error_strings(); #else OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL); @@ -3671,26 +3664,18 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req case OPENSSL_KEYTYPE_RSA: { RSA* rsaparam; -#if OPENSSL_VERSION_NUMBER < 0x10002000L - /* OpenSSL 1.0.2 deprecates RSA_generate_key */ - PHP_OPENSSL_RAND_ADD_TIME(); - rsaparam = (RSA*)RSA_generate_key(req->priv_key_bits, RSA_F4, NULL, NULL); -#else - { - BIGNUM *bne = (BIGNUM *)BN_new(); - if (BN_set_word(bne, RSA_F4) != 1) { - BN_free(bne); - php_error_docref(NULL, E_WARNING, "Failed setting exponent"); - return NULL; - } - rsaparam = RSA_new(); - PHP_OPENSSL_RAND_ADD_TIME(); - if (rsaparam == NULL || !RSA_generate_key_ex(rsaparam, req->priv_key_bits, bne, NULL)) { - php_openssl_store_errors(); - } + BIGNUM *bne = (BIGNUM *)BN_new(); + if (BN_set_word(bne, RSA_F4) != 1) { BN_free(bne); + php_error_docref(NULL, E_WARNING, "Failed setting exponent"); + return NULL; } -#endif + rsaparam = RSA_new(); + PHP_OPENSSL_RAND_ADD_TIME(); + if (rsaparam == NULL || !RSA_generate_key_ex(rsaparam, req->priv_key_bits, bne, NULL)) { + php_openssl_store_errors(); + } + BN_free(bne); if (rsaparam && EVP_PKEY_assign_RSA(req->priv_key, rsaparam)) { return_val = req->priv_key; } else { @@ -5907,7 +5892,7 @@ PHP_FUNCTION(openssl_cms_sign) Z_PARAM_OPTIONAL Z_PARAM_LONG(flags) Z_PARAM_LONG(encoding) - Z_PARAM_PATH(extracertsfilename, extracertsfilename_len) + Z_PARAM_PATH_OR_NULL(extracertsfilename, extracertsfilename_len) ZEND_PARSE_PARAMETERS_END(); RETVAL_FALSE; @@ -6889,6 +6874,8 @@ PHP_FUNCTION(openssl_digest) struct php_openssl_cipher_mode { zend_bool is_aead; zend_bool is_single_run_aead; + zend_bool set_tag_length_always; + zend_bool set_tag_length_when_encrypting; int aead_get_tag_flag; int aead_set_tag_flag; int aead_ivlen_flag; @@ -6896,27 +6883,43 @@ struct php_openssl_cipher_mode { static void php_openssl_load_cipher_mode(struct php_openssl_cipher_mode *mode, const EVP_CIPHER *cipher_type) /* {{{ */ { - switch (EVP_CIPHER_mode(cipher_type)) { -#ifdef EVP_CIPH_GCM_MODE + int cipher_mode = EVP_CIPHER_mode(cipher_type); + memset(mode, 0, sizeof(struct php_openssl_cipher_mode)); + switch (cipher_mode) { +#if PHP_OPENSSL_API_VERSION >= 0x10100 + case EVP_CIPH_GCM_MODE: + case EVP_CIPH_OCB_MODE: + case EVP_CIPH_CCM_MODE: + mode->is_aead = 1; + /* For OCB mode, explicitly set the tag length even when decrypting, + * see https://github.com/openssl/openssl/issues/8331. */ + mode->set_tag_length_always = cipher_mode == EVP_CIPH_OCB_MODE; + mode->set_tag_length_when_encrypting = cipher_mode == EVP_CIPH_CCM_MODE; + mode->is_single_run_aead = cipher_mode == EVP_CIPH_CCM_MODE; + mode->aead_get_tag_flag = EVP_CTRL_AEAD_GET_TAG; + mode->aead_set_tag_flag = EVP_CTRL_AEAD_SET_TAG; + mode->aead_ivlen_flag = EVP_CTRL_AEAD_SET_IVLEN; + break; +#else +# ifdef EVP_CIPH_GCM_MODE case EVP_CIPH_GCM_MODE: mode->is_aead = 1; - mode->is_single_run_aead = 0; mode->aead_get_tag_flag = EVP_CTRL_GCM_GET_TAG; mode->aead_set_tag_flag = EVP_CTRL_GCM_SET_TAG; mode->aead_ivlen_flag = EVP_CTRL_GCM_SET_IVLEN; break; -#endif -#ifdef EVP_CIPH_CCM_MODE +# endif +# ifdef EVP_CIPH_CCM_MODE case EVP_CIPH_CCM_MODE: mode->is_aead = 1; mode->is_single_run_aead = 1; + mode->set_tag_length_when_encrypting = 1; mode->aead_get_tag_flag = EVP_CTRL_CCM_GET_TAG; mode->aead_set_tag_flag = EVP_CTRL_CCM_SET_TAG; mode->aead_ivlen_flag = EVP_CTRL_CCM_SET_IVLEN; break; +# endif #endif - default: - memset(mode, 0, sizeof(struct php_openssl_cipher_mode)); } } /* }}} */ @@ -6998,12 +7001,13 @@ static int php_openssl_cipher_init(const EVP_CIPHER *cipher_type, if (php_openssl_validate_iv(piv, piv_len, max_iv_len, free_iv, cipher_ctx, mode) == FAILURE) { return FAILURE; } - if (mode->is_single_run_aead && enc) { + if (mode->set_tag_length_always || (enc && mode->set_tag_length_when_encrypting)) { if (!EVP_CIPHER_CTX_ctrl(cipher_ctx, mode->aead_set_tag_flag, tag_len, NULL)) { php_error_docref(NULL, E_WARNING, "Setting tag length for AEAD cipher failed"); return FAILURE; } - } else if (!enc && tag && tag_len > 0) { + } + if (!enc && tag && tag_len > 0) { if (!mode->is_aead) { php_error_docref(NULL, E_WARNING, "The tag cannot be used because the cipher algorithm does not support AEAD"); } else if (!EVP_CIPHER_CTX_ctrl(cipher_ctx, mode->aead_set_tag_flag, tag_len, (unsigned char *) tag)) { @@ -7156,8 +7160,6 @@ PHP_OPENSSL_API zend_string* php_openssl_encrypt( } } else if (tag) { ZEND_TRY_ASSIGN_REF_NULL(tag); - php_error_docref(NULL, E_WARNING, - "The authenticated tag cannot be provided for cipher that doesn not support AEAD"); } else if (mode.is_aead) { php_error_docref(NULL, E_WARNING, "A tag should be provided when using AEAD mode"); zend_string_release_ex(outbuf, 0); diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h index c674ead34b28a..838832388c556 100644 --- a/ext/openssl/php_openssl.h +++ b/ext/openssl/php_openssl.h @@ -35,9 +35,7 @@ extern zend_module_entry openssl_module_entry; #endif #else /* OpenSSL version check */ -#if OPENSSL_VERSION_NUMBER < 0x10002000L -#define PHP_OPENSSL_API_VERSION 0x10001 -#elif OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L #define PHP_OPENSSL_API_VERSION 0x10002 #else #define PHP_OPENSSL_API_VERSION 0x10100 diff --git a/ext/openssl/tests/cipher_tests.inc b/ext/openssl/tests/cipher_tests.inc index 779bfa8515cbd..1d4988c5a8c3f 100644 --- a/ext/openssl/tests/cipher_tests.inc +++ b/ext/openssl/tests/cipher_tests.inc @@ -108,7 +108,58 @@ $php_openssl_cipher_tests = array( '01e4a9a4fba43c90ccdcb281d48c7c6f' . 'd62875d2aca417034c34aee5', ), - ) + ), + // First few test vectors from RFC 7253. + 'aes-128-ocb' => array( + array( + 'key' => '000102030405060708090A0B0C0D0E0F', + 'iv' => 'BBAA99887766554433221100', + 'aad' => '', + 'pt' => '', + 'tag' => '785407BFFFC8AD9EDCC5520AC9111EE6', + 'ct' => '', + ), + array( + 'key' => '000102030405060708090A0B0C0D0E0F', + 'iv' => 'BBAA99887766554433221101', + 'aad' => '0001020304050607', + 'pt' => '0001020304050607', + 'tag' => '5725BDA0D3B4EB3A257C9AF1F8F03009', + 'ct' => '6820B3657B6F615A', + ), + array( + 'key' => '000102030405060708090A0B0C0D0E0F', + 'iv' => 'BBAA99887766554433221102', + 'aad' => '0001020304050607', + 'pt' => '', + 'tag' => '81017F8203F081277152FADE694A0A00', + 'ct' => '', + ), + array( + 'key' => '000102030405060708090A0B0C0D0E0F', + 'iv' => 'BBAA99887766554433221103', + 'aad' => '', + 'pt' => '0001020304050607', + 'tag' => '14054CD1F35D82760B2CD00D2F99BFA9', + 'ct' => '45DD69F8F5AAE724', + ), + array( + 'key' => '000102030405060708090A0B0C0D0E0F', + 'iv' => 'BBAA99887766554433221104', + 'aad' => '000102030405060708090A0B0C0D0E0F', + 'pt' => '000102030405060708090A0B0C0D0E0F', + 'tag' => '3AD7A4FF3835B8C5701C1CCEC8FC3358', + 'ct' => '571D535B60B277188BE5147170A9A22C', + ), + array( + 'key' => '0F0E0D0C0B0A09080706050403020100', + 'iv' => 'BBAA9988776655443322110D', + 'aad' => '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627', + 'pt' => '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627', + 'tag' => 'D0C515F4D1CDD4FDAC4F02AA', + 'ct' => '1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6A', + ), + ), ); function openssl_get_cipher_tests($method) diff --git a/ext/openssl/tests/openssl_decrypt_basic.phpt b/ext/openssl/tests/openssl_decrypt_basic.phpt index 37d17150fb25e..4175e703d2bb8 100644 --- a/ext/openssl/tests/openssl_decrypt_basic.phpt +++ b/ext/openssl/tests/openssl_decrypt_basic.phpt @@ -28,9 +28,16 @@ var_dump(rtrim($output)); $encrypted = openssl_encrypt($data, "bf-ecb", $password, OPENSSL_DONT_ZERO_PAD_KEY); $output = openssl_decrypt($encrypted, "bf-ecb", $password, OPENSSL_DONT_ZERO_PAD_KEY); var_dump($output); + +// It's okay to pass $tag for a non-authenticated cipher. +// It will be populated with null in that case. +openssl_encrypt($data, $method, $password, 0, $iv, $tag); +var_dump($tag); + ?> --EXPECT-- string(45) "openssl_encrypt() and openssl_decrypt() tests" string(45) "openssl_encrypt() and openssl_decrypt() tests" string(45) "openssl_encrypt() and openssl_decrypt() tests" string(45) "openssl_encrypt() and openssl_decrypt() tests" +NULL diff --git a/ext/openssl/tests/openssl_decrypt_error.phpt b/ext/openssl/tests/openssl_decrypt_error.phpt index 5f79cd86c2e5d..7564b878ec2c2 100644 --- a/ext/openssl/tests/openssl_decrypt_error.phpt +++ b/ext/openssl/tests/openssl_decrypt_error.phpt @@ -20,8 +20,6 @@ var_dump(openssl_decrypt($wrong, $wrong, $password)); var_dump(openssl_decrypt($encrypted, $wrong, $wrong)); var_dump(openssl_decrypt($wrong, $wrong, $wrong)); -// invalid using of an authentication tag -var_dump(openssl_encrypt($data, $method, $password, 0, $iv, $wrong)); ?> --EXPECTF-- Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in %s on line %d @@ -41,6 +39,3 @@ bool(false) Warning: openssl_decrypt(): Unknown cipher algorithm in %s on line %d bool(false) - -Warning: openssl_encrypt(): The authenticated tag cannot be provided for cipher that doesn not support AEAD in %s on line %d -string(44) "yof6cPPH4mLee6TOc0YQSrh4dvywMqxGUyjp0lV6+aM=" diff --git a/ext/openssl/tests/openssl_decrypt_ocb.phpt b/ext/openssl/tests/openssl_decrypt_ocb.phpt new file mode 100644 index 0000000000000..cea35501dd352 --- /dev/null +++ b/ext/openssl/tests/openssl_decrypt_ocb.phpt @@ -0,0 +1,60 @@ +--TEST-- +openssl_decrypt() with OCB cipher algorithm tests +--SKIPIF-- + +--FILE-- + $test) { + echo "TEST $idx\n"; + $pt = openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA, + $test['iv'], $test['tag'], $test['aad']); + var_dump($test['pt'] === $pt); +} + +// no IV +var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA, + NULL, $test['tag'], $test['aad'])); + +// IV too long +var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA, + str_repeat('x', 32), $test['tag'], $test['aad'])); + +// failed because no AAD +var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA, + $test['iv'], $test['tag'])); + +// failed because wrong tag +var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA, + $test['iv'], str_repeat('x', 16), $test['aad'])); + +?> +--EXPECTF-- +TEST 0 +bool(true) +TEST 1 +bool(true) +TEST 2 +bool(true) +TEST 3 +bool(true) +TEST 4 +bool(true) +TEST 5 +bool(true) + +Warning: openssl_decrypt(): Setting of IV length for AEAD mode failed in %s on line %d +bool(false) + +Warning: openssl_decrypt(): Setting of IV length for AEAD mode failed in %s on line %d +bool(false) +bool(false) +bool(false) diff --git a/ext/openssl/tests/openssl_encrypt_error.phpt b/ext/openssl/tests/openssl_encrypt_error.phpt index 0b1bc662f77cc..81a5bebff3b67 100644 --- a/ext/openssl/tests/openssl_encrypt_error.phpt +++ b/ext/openssl/tests/openssl_encrypt_error.phpt @@ -15,9 +15,6 @@ $arr = array(1); // wrong parameters tests var_dump(openssl_encrypt($data, $wrong, $password)); -// invalid using of an authentication tag -var_dump(openssl_encrypt($data, $method, $password, 0, $iv, $wrong)); - // padding of the key is disabled var_dump(openssl_encrypt($data, $method, $password, OPENSSL_DONT_ZERO_PAD_KEY, $iv)); ?> @@ -25,8 +22,5 @@ var_dump(openssl_encrypt($data, $method, $password, OPENSSL_DONT_ZERO_PAD_KEY, $ Warning: openssl_encrypt(): Unknown cipher algorithm in %s on line %d bool(false) -Warning: openssl_encrypt(): The authenticated tag cannot be provided for cipher that doesn not support AEAD in %s on line %d -string(44) "iPR4HulskuaP5Z6me5uImk6BqVyJG73+63tkPauVZYk=" - Warning: openssl_encrypt(): Key length cannot be set for the cipher algorithm in %s on line %d bool(false) diff --git a/ext/openssl/tests/openssl_encrypt_ocb.phpt b/ext/openssl/tests/openssl_encrypt_ocb.phpt new file mode 100644 index 0000000000000..ee35a37ce43b7 --- /dev/null +++ b/ext/openssl/tests/openssl_encrypt_ocb.phpt @@ -0,0 +1,60 @@ +--TEST-- +openssl_encrypt() with OCB cipher algorithm tests +--SKIPIF-- + +--FILE-- + $test) { + echo "TEST $idx\n"; + $ct = openssl_encrypt($test['pt'], $method, $test['key'], OPENSSL_RAW_DATA, + $test['iv'], $tag, $test['aad'], strlen($test['tag'])); + var_dump($test['ct'] === $ct); + var_dump($test['tag'] === $tag); +} + +// Empty IV error +var_dump(openssl_encrypt('data', $method, 'password', 0, NULL, $tag, '')); + +// Failing to retrieve tag (must be at most 16 bytes) +var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 12), $tag, '', 20)); + +// Failing when no tag supplied +var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 12))); +?> +--EXPECTF-- +TEST 0 +bool(true) +bool(true) +TEST 1 +bool(true) +bool(true) +TEST 2 +bool(true) +bool(true) +TEST 3 +bool(true) +bool(true) +TEST 4 +bool(true) +bool(true) +TEST 5 +bool(true) +bool(true) + +Warning: openssl_encrypt(): Setting of IV length for AEAD mode failed in %s on line %d +bool(false) + +Warning: openssl_encrypt(): Setting tag length for AEAD cipher failed in %s on line %d +bool(false) + +Warning: openssl_encrypt(): A tag should be provided when using AEAD mode in %s on line %d +bool(false) diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index feb9ee52c1164..6fdbf1df16bfe 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -33,11 +33,8 @@ #include #include #include - -#if OPENSSL_VERSION_NUMBER >= 0x10002000L #include #include -#endif #ifdef PHP_WIN32 #include "win32/winutil.h" @@ -80,10 +77,8 @@ #ifndef OPENSSL_NO_TLSEXT #define HAVE_TLS_SNI 1 -#if OPENSSL_VERSION_NUMBER >= 0x10002000L #define HAVE_TLS_ALPN 1 #endif -#endif #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) #define HAVE_SEC_LEVEL 1 @@ -1294,12 +1289,8 @@ static int php_openssl_set_server_ecdh_curve(php_stream *stream, SSL_CTX *ctx) / zvcurve = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "ecdh_curve"); if (zvcurve == NULL) { -#if OPENSSL_VERSION_NUMBER >= 0x10002000L SSL_CTX_set_ecdh_auto(ctx, 1); return SUCCESS; -#else - curve_nid = NID_X9_62_prime256v1; -#endif } else { if (!try_convert_to_string(zvcurve)) { return FAILURE; diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index 0df11aa3887c9..f9a48b040607d 100644 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -428,6 +428,7 @@ PHP_RINIT_FUNCTION(pcntl) zend_hash_init(&PCNTL_G(php_signal_table), 16, NULL, ZVAL_PTR_DTOR, 0); PCNTL_G(head) = PCNTL_G(tail) = PCNTL_G(spares) = NULL; PCNTL_G(async_signals) = 0; + PCNTL_G(last_error) = 0; return SUCCESS; } diff --git a/ext/pcntl/pcntl.stub.php b/ext/pcntl/pcntl.stub.php index 2c3cd64aad170..ea66c9f898369 100644 --- a/ext/pcntl/pcntl.stub.php +++ b/ext/pcntl/pcntl.stub.php @@ -6,36 +6,36 @@ function pcntl_fork(): int {} /** * @param int $status - * @param array $rusage + * @param array $resource_usage */ -function pcntl_waitpid(int $pid, &$status, int $options = 0, &$rusage = []): int {} +function pcntl_waitpid(int $process_id, &$status, int $flags = 0, &$resource_usage = []): int {} /** * @param int $status - * @param array $rusage + * @param array $resource_usage */ -function pcntl_wait(&$status, int $options = 0, &$rusage = []): int {} +function pcntl_wait(&$status, int $flags = 0, &$resource_usage = []): int {} /** @param callable|int $handler */ -function pcntl_signal(int $signo, $handler, bool $restart_syscalls = true): bool {} +function pcntl_signal(int $signal, $handler, bool $restart_syscalls = true): bool {} /** @return callable|int */ -function pcntl_signal_get_handler(int $signo) {} +function pcntl_signal_get_handler(int $signal) {} function pcntl_signal_dispatch(): bool {} #ifdef HAVE_SIGPROCMASK -/** @param array $oldset */ -function pcntl_sigprocmask(int $how, array $set, &$oldset = null): bool {} +/** @param array $old_signals */ +function pcntl_sigprocmask(int $mode, array $signals, &$old_signals = null): bool {} #endif #ifdef HAVE_STRUCT_SIGINFO_T #if defined(HAVE_SIGWAITINFO) && defined(HAVE_SIGTIMEDWAIT) /** @param array $info */ -function pcntl_sigwaitinfo(array $set, &$info = []): int|false {} +function pcntl_sigwaitinfo(array $signals, &$info = []): int|false {} /** @param array $info */ -function pcntl_sigtimedwait(array $set, &$info = [], int $seconds = 0, int $nanoseconds = 0): int|false {} +function pcntl_sigtimedwait(array $signals, &$info = [], int $seconds = 0, int $nanoseconds = 0): int|false {} #endif #endif @@ -55,7 +55,7 @@ function pcntl_wtermsig(int $status): int|false {} function pcntl_wstopsig(int $status): int|false {} -function pcntl_exec(string $path, array $args = [], array $envs = []): bool {} +function pcntl_exec(string $path, array $args = [], array $env_vars = []): bool {} function pcntl_alarm(int $seconds): int {} @@ -65,16 +65,16 @@ function pcntl_get_last_error(): int {} function pcntl_errno(): int {} #ifdef HAVE_GETPRIORITY -function pcntl_getpriority(?int $pid = null, int $process_identifier = PRIO_PROCESS): int|false {} +function pcntl_getpriority(?int $process_id = null, int $mode = PRIO_PROCESS): int|false {} #endif #ifdef HAVE_SETPRIORITY -function pcntl_setpriority(int $priority, ?int $pid = null, int $process_identifier = PRIO_PROCESS): bool{} +function pcntl_setpriority(int $priority, ?int $process_id = null, int $mode = PRIO_PROCESS): bool{} #endif -function pcntl_strerror(int $errno): string {} +function pcntl_strerror(int $error_code): string {} -function pcntl_async_signals(?bool $on = null): bool {} +function pcntl_async_signals(?bool $enable = null): bool {} #ifdef HAVE_UNSHARE function pcntl_unshare(int $flags): bool {} diff --git a/ext/pcntl/pcntl_arginfo.h b/ext/pcntl/pcntl_arginfo.h index fb0fe5fa08049..87a2579c9bbad 100644 --- a/ext/pcntl/pcntl_arginfo.h +++ b/ext/pcntl/pcntl_arginfo.h @@ -1,30 +1,30 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 306208d94ba3bf6f8112f868a332e99717bc07fa */ + * Stub hash: 8742901e9b4fe5ee595a1e7c492474723f95d253 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_fork, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_waitpid, 0, 2, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, pid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) ZEND_ARG_INFO(1, status) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, rusage, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, resource_usage, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_wait, 0, 1, IS_LONG, 0) ZEND_ARG_INFO(1, status) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, rusage, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, resource_usage, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_signal, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, signo, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, signal, IS_LONG, 0) ZEND_ARG_INFO(0, handler) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, restart_syscalls, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_pcntl_signal_get_handler, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, signo, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, signal, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_signal_dispatch, 0, 0, _IS_BOOL, 0) @@ -32,22 +32,22 @@ ZEND_END_ARG_INFO() #if defined(HAVE_SIGPROCMASK) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_sigprocmask, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, how, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, set, IS_ARRAY, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, oldset, "null") + ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, signals, IS_ARRAY, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, old_signals, "null") ZEND_END_ARG_INFO() #endif #if defined(HAVE_STRUCT_SIGINFO_T) && defined(HAVE_SIGWAITINFO) && defined(HAVE_SIGTIMEDWAIT) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pcntl_sigwaitinfo, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, set, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, signals, IS_ARRAY, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, info, "[]") ZEND_END_ARG_INFO() #endif #if defined(HAVE_STRUCT_SIGINFO_T) && defined(HAVE_SIGWAITINFO) && defined(HAVE_SIGTIMEDWAIT) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pcntl_sigtimedwait, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, set, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, signals, IS_ARRAY, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, info, "[]") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, seconds, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nanoseconds, IS_LONG, 0, "0") @@ -79,7 +79,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_exec, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, args, IS_ARRAY, 0, "[]") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, envs, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, env_vars, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_alarm, 0, 1, IS_LONG, 0) @@ -92,25 +92,25 @@ ZEND_END_ARG_INFO() #if defined(HAVE_GETPRIORITY) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pcntl_getpriority, 0, 0, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pid, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_identifier, IS_LONG, 0, "PRIO_PROCESS") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_id, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PRIO_PROCESS") ZEND_END_ARG_INFO() #endif #if defined(HAVE_SETPRIORITY) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_setpriority, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, priority, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pid, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_identifier, IS_LONG, 0, "PRIO_PROCESS") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_id, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PRIO_PROCESS") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_strerror, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, errno, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pcntl_async_signals, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, on, _IS_BOOL, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null") ZEND_END_ARG_INFO() #if defined(HAVE_UNSHARE) diff --git a/ext/pcntl/tests/002.phpt b/ext/pcntl/tests/002.phpt index 68b264309268a..254da8613606d 100644 --- a/ext/pcntl/tests/002.phpt +++ b/ext/pcntl/tests/002.phpt @@ -7,6 +7,7 @@ pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait() elseif (!function_exists('pcntl_sigwaitinfo') or !function_exists('pcntl_sigtimedwait')) die('skip required functionality is not available'); elseif (!defined('CLD_EXITED')) die('skip CLD_EXITED not defined'); elseif (getenv('SKIP_ASAN')) die('skip Fails intermittently under asan/msan'); + elseif (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- --EXPECT-- -pcntl_getpriority(): Argument #2 ($process_identifier) must be one of PRIO_PGRP, PRIO_USER, or PRIO_PROCESS +pcntl_getpriority(): Argument #2 ($mode) must be one of PRIO_PGRP, PRIO_USER, or PRIO_PROCESS diff --git a/ext/pcntl/tests/pcntl_setpriority_error.phpt b/ext/pcntl/tests/pcntl_setpriority_error.phpt index d354ab2bc5c14..f4b578158795a 100644 --- a/ext/pcntl/tests/pcntl_setpriority_error.phpt +++ b/ext/pcntl/tests/pcntl_setpriority_error.phpt @@ -20,4 +20,4 @@ try { ?> --EXPECT-- -pcntl_setpriority(): Argument #3 ($process_identifier) must be one of PRIO_PGRP, PRIO_USER, or PRIO_PROCESS +pcntl_setpriority(): Argument #3 ($mode) must be one of PRIO_PGRP, PRIO_USER, or PRIO_PROCESS diff --git a/ext/pcntl/tests/pcntl_signal.phpt b/ext/pcntl/tests/pcntl_signal.phpt index 4b94064e2a973..f05bfc3c77e02 100644 --- a/ext/pcntl/tests/pcntl_signal.phpt +++ b/ext/pcntl/tests/pcntl_signal.phpt @@ -45,7 +45,7 @@ echo "ok\n"; signal dispatched got signal from %r\d+|nobody%r bool(true) -pcntl_signal(): Argument #1 ($signo) must be greater than or equal to 1 -pcntl_signal(): Argument #1 ($signo) must be greater than or equal to 1 +pcntl_signal(): Argument #1 ($signal) must be greater than or equal to 1 +pcntl_signal(): Argument #1 ($signal) must be greater than or equal to 1 pcntl_signal(): Argument #2 ($handler) must be of type callable|int, string given ok diff --git a/ext/pcntl/tests/pcntl_unshare_01.phpt b/ext/pcntl/tests/pcntl_unshare_01.phpt index fcbf112e4d6f4..6eb5a20bdddba 100644 --- a/ext/pcntl/tests/pcntl_unshare_01.phpt +++ b/ext/pcntl/tests/pcntl_unshare_01.phpt @@ -9,6 +9,7 @@ if (!defined("CLONE_NEWUSER")) die("skip flag unavailable"); if (@pcntl_unshare(CLONE_NEWUSER) == false && pcntl_get_last_error() == PCNTL_EPERM) { die("skip Insufficient privileges to use CLONE_NEWUSER"); } +if (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- --FILE-- --FILE-- methods->in_transaction) { + return dbh->methods->in_transaction(dbh); + } + return dbh->in_txn; +} + /* {{{ Initiates a transaction */ PHP_METHOD(PDO, beginTransaction) { @@ -586,7 +594,7 @@ PHP_METHOD(PDO, beginTransaction) PDO_CONSTRUCT_CHECK; - if (dbh->in_txn) { + if (pdo_is_in_transaction(dbh)) { zend_throw_exception_ex(php_pdo_get_exception(), 0, "There is already an active transaction"); RETURN_THROWS(); } @@ -617,7 +625,7 @@ PHP_METHOD(PDO, commit) PDO_CONSTRUCT_CHECK; - if (!dbh->in_txn) { + if (!pdo_is_in_transaction(dbh)) { zend_throw_exception_ex(php_pdo_get_exception(), 0, "There is no active transaction"); RETURN_THROWS(); } @@ -641,7 +649,7 @@ PHP_METHOD(PDO, rollBack) PDO_CONSTRUCT_CHECK; - if (!dbh->in_txn) { + if (!pdo_is_in_transaction(dbh)) { zend_throw_exception_ex(php_pdo_get_exception(), 0, "There is no active transaction"); RETURN_THROWS(); } @@ -665,11 +673,7 @@ PHP_METHOD(PDO, inTransaction) PDO_CONSTRUCT_CHECK; - if (!dbh->methods->in_transaction) { - RETURN_BOOL(dbh->in_txn); - } - - RETURN_BOOL(dbh->methods->in_transaction(dbh)); + RETURN_BOOL(pdo_is_in_transaction(dbh)); } /* }}} */ @@ -765,7 +769,7 @@ static zend_result pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *v } if ((item = zend_hash_index_find(Z_ARRVAL_P(value), 0)) == NULL) { zend_value_error("PDO::ATTR_STATEMENT_CLASS value must be an array with the format " - "array(classname, array(ctor_args))"); + "array(classname, constructor_args)"); return FAILURE; } if (Z_TYPE_P(item) != IS_STRING || (pce = zend_lookup_class(Z_STR_P(item))) == NULL) { @@ -787,7 +791,7 @@ static zend_result pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *v } if ((item = zend_hash_index_find(Z_ARRVAL_P(value), 1)) != NULL) { if (Z_TYPE_P(item) != IS_ARRAY) { - zend_type_error("PDO::ATTR_STATEMENT_CLASS ctor_args must be of type ?array, %s given", + zend_type_error("PDO::ATTR_STATEMENT_CLASS constructor_args must be of type ?array, %s given", zend_zval_type_name(value)); return FAILURE; } @@ -810,9 +814,7 @@ static zend_result pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *v } fail: - if (attr == PDO_ATTR_AUTOCOMMIT) { - zend_throw_exception_ex(php_pdo_get_exception(), 0, "The auto-commit mode cannot be changed for this driver"); - } else if (!dbh->methods->set_attribute) { + if (!dbh->methods->set_attribute) { pdo_raise_impl_error(dbh, NULL, "IM001", "driver does not support setting attributes"); } else { PDO_HANDLE_DBH_ERR(); @@ -1291,8 +1293,12 @@ static int dbh_compare(zval *object1, zval *object2) static HashTable *dbh_get_gc(zend_object *object, zval **gc_data, int *gc_count) { pdo_dbh_t *dbh = php_pdo_dbh_fetch_inner(object); - *gc_data = &dbh->def_stmt_ctor_args; - *gc_count = 1; + zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create(); + zend_get_gc_buffer_add_zval(gc_buffer, &dbh->def_stmt_ctor_args); + if (dbh->methods && dbh->methods->get_gc) { + dbh->methods->get_gc(dbh, gc_buffer); + } + zend_get_gc_buffer_use(gc_buffer, gc_data, gc_count); return zend_std_get_properties(object); } diff --git a/ext/pdo/pdo_dbh.stub.php b/ext/pdo/pdo_dbh.stub.php index a30d89890c330..adca7d6b7a263 100644 --- a/ext/pdo/pdo_dbh.stub.php +++ b/ext/pdo/pdo_dbh.stub.php @@ -34,10 +34,10 @@ public function inTransaction() {} public function lastInsertId(?string $name = null) {} /** @return PDOStatement|false */ - public function prepare(string $query, array $driver_options = []) {} + public function prepare(string $query, array $options = []) {} /** @return PDOStatement|false */ - public function query(string $query, ?int $fetch_mode = null, mixed ...$fetch_mode_args) {} + public function query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs) {} /** @return string|false */ public function quote(string $string, int $type = PDO::PARAM_STR) {} diff --git a/ext/pdo/pdo_dbh_arginfo.h b/ext/pdo/pdo_dbh_arginfo.h index ffeb1c9eeb01a..ac2fc76350f91 100644 --- a/ext/pdo/pdo_dbh_arginfo.h +++ b/ext/pdo/pdo_dbh_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 2bee02a9952faf3f768873bafe1be9ef89086029 */ + * Stub hash: 788d1cd616c140df4072c6e0564c2995fbdc84ad */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, dsn, IS_STRING, 0) @@ -35,13 +35,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_prepare, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, driver_options, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_query, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetch_mode, IS_LONG, 1, "null") - ZEND_ARG_VARIADIC_TYPE_INFO(0, fetch_mode_args, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetchMode, IS_LONG, 1, "null") + ZEND_ARG_VARIADIC_TYPE_INFO(0, fetchModeArgs, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_quote, 0, 0, 1) diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 3222a617f07e9..f8ff90ba9b425 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -2287,15 +2287,18 @@ static const zend_object_iterator_funcs pdo_stmt_iter_funcs = { zend_object_iterator *pdo_stmt_iter_get(zend_class_entry *ce, zval *object, int by_ref) { - pdo_stmt_t *stmt = Z_PDO_STMT_P(object); - struct php_pdo_iterator *I; - if (by_ref) { zend_throw_error(NULL, "An iterator cannot be used with foreach by reference"); return NULL; } - I = ecalloc(1, sizeof(struct php_pdo_iterator)); + pdo_stmt_t *stmt = Z_PDO_STMT_P(object); + if (!stmt->dbh) { + zend_throw_error(NULL, "PDO object is uninitialized"); + return NULL; + } + + struct php_pdo_iterator *I = ecalloc(1, sizeof(struct php_pdo_iterator)); zend_iterator_init(&I->iter); I->iter.funcs = &pdo_stmt_iter_funcs; Z_ADDREF_P(object); diff --git a/ext/pdo/pdo_stmt.stub.php b/ext/pdo/pdo_stmt.stub.php index eccd22d7d9541..06d6a557e73ff 100644 --- a/ext/pdo/pdo_stmt.stub.php +++ b/ext/pdo/pdo_stmt.stub.php @@ -5,10 +5,10 @@ class PDOStatement implements IteratorAggregate { /** @return bool */ - public function bindColumn(string|int $column, mixed &$param, int $type = 0, int $max_length = 0, mixed $driver_options = null) {} + public function bindColumn(string|int $column, mixed &$var, int $type = 0, int $maxLength = 0, mixed $driverOptions = null) {} /** @return bool */ - public function bindParam(string|int $param, mixed &$bind_var, int $type = PDO::PARAM_STR, int $max_length = 0, mixed $driver_options = null) {} + public function bindParam(string|int $param, mixed &$var, int $type = PDO::PARAM_STR, int $maxLength = 0, mixed $driverOptions = null) {} /** @return bool */ public function bindValue(string|int $param, mixed $value, int $type = PDO::PARAM_STR) {} @@ -29,25 +29,25 @@ public function errorCode() {} public function errorInfo() {} /** @return bool */ - public function execute(?array $input_parameters = null) {} + public function execute(?array $params = null) {} /** @return mixed */ - public function fetch(int $mode = PDO::FETCH_BOTH, int $cursor_orientation = PDO::FETCH_ORI_NEXT, int $cursor_offset = 0) {} + public function fetch(int $mode = PDO::FETCH_BOTH, int $cursorOrientation = PDO::FETCH_ORI_NEXT, int $cursorOffset = 0) {} /** @return array */ public function fetchAll(int $mode = PDO::FETCH_BOTH, mixed ...$args) {} /** @return mixed */ - public function fetchColumn(int $index = 0) {} + public function fetchColumn(int $column = 0) {} /** @return mixed */ - public function fetchObject(?string $class = "stdClass", ?array $constructor_args = null) {} + public function fetchObject(?string $class = "stdClass", ?array $ctorArgs = null) {} /** @return mixed */ public function getAttribute(int $name) {} /** @return array|false */ - public function getColumnMeta(int $index) {} + public function getColumnMeta(int $column) {} /** @return bool */ public function nextRowset() {} @@ -59,7 +59,7 @@ public function rowCount() {} public function setAttribute(int $attribute, mixed $value) {} /** @return bool */ - public function setFetchMode(int $mode, mixed ...$fetch_mode_args) {} + public function setFetchMode(int $mode, mixed ...$args) {} public function getIterator(): Iterator {} } diff --git a/ext/pdo/pdo_stmt_arginfo.h b/ext/pdo/pdo_stmt_arginfo.h index f55c1ea848d19..9e7eea4c3b02a 100644 --- a/ext/pdo/pdo_stmt_arginfo.h +++ b/ext/pdo/pdo_stmt_arginfo.h @@ -1,20 +1,20 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b3338fc077eab1280da093f059fac14dd7f19678 */ + * Stub hash: 574055f1dbb6a1bee10e4476642a759e53ca2802 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2) ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) - ZEND_ARG_TYPE_INFO(1, param, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, driver_options, IS_MIXED, 0, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxLength, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, driverOptions, IS_MIXED, 0, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindParam, 0, 0, 2) ZEND_ARG_TYPE_MASK(0, param, MAY_BE_STRING|MAY_BE_LONG, NULL) - ZEND_ARG_TYPE_INFO(1, bind_var, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "PDO::PARAM_STR") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, driver_options, IS_MIXED, 0, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxLength, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, driverOptions, IS_MIXED, 0, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindValue, 0, 0, 2) @@ -35,13 +35,13 @@ ZEND_END_ARG_INFO() #define arginfo_class_PDOStatement_errorInfo arginfo_class_PDOStatement_closeCursor ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_execute, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, input_parameters, IS_ARRAY, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetch, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PDO::FETCH_BOTH") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cursor_orientation, IS_LONG, 0, "PDO::FETCH_ORI_NEXT") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cursor_offset, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cursorOrientation, IS_LONG, 0, "PDO::FETCH_ORI_NEXT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cursorOffset, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchAll, 0, 0, 0) @@ -50,12 +50,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchAll, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchColumn, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, index, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, column, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchObject, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "\"stdClass\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, constructor_args, IS_ARRAY, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ctorArgs, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_getAttribute, 0, 0, 1) @@ -63,7 +63,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_getAttribute, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_getColumnMeta, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, column, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_PDOStatement_nextRowset arginfo_class_PDOStatement_closeCursor @@ -77,7 +77,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_setFetchMode, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) - ZEND_ARG_VARIADIC_TYPE_INFO(0, fetch_mode_args, IS_MIXED, 0) + ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_PDOStatement_getIterator, 0, 0, Iterator, 0) diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h index 960ddec4efe08..974eb0bad0209 100644 --- a/ext/pdo/php_pdo_driver.h +++ b/ext/pdo/php_pdo_driver.h @@ -286,6 +286,10 @@ typedef int (*pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh); * scope */ typedef void (*pdo_dbh_request_shutdown)(pdo_dbh_t *dbh); +/* Called when the PDO handle is scanned for GC. Should populate the get_gc buffer + * with any zvals in the driver_data that would be freed if the handle is destroyed. */ +typedef void (*pdo_dbh_get_gc_func)(pdo_dbh_t *dbh, zend_get_gc_buffer *buffer); + /* for adding methods to the dbh or stmt objects pointer to a list of driver specific functions. The convention is to prefix the function names using the PDO driver name; this will @@ -316,6 +320,7 @@ struct pdo_dbh_methods { pdo_dbh_get_driver_methods_func get_driver_methods; pdo_dbh_request_shutdown persistent_shutdown; pdo_dbh_txn_func in_transaction; + pdo_dbh_get_gc_func get_gc; }; /* }}} */ diff --git a/ext/pdo/tests/bug_44173.phpt b/ext/pdo/tests/bug_44173.phpt index 0baa7973e5a70..1b59d5590f099 100644 --- a/ext/pdo/tests/bug_44173.phpt +++ b/ext/pdo/tests/bug_44173.phpt @@ -73,7 +73,7 @@ try { ?> --EXPECT-- PDO::query() expects exactly 2 arguments for the fetch mode provided, 4 given -PDO::query(): Argument #2 ($fetch_mode) must be of type ?int, string given +PDO::query(): Argument #2 ($fetchMode) must be of type ?int, string given PDO::query() expects at most 4 arguments for the fetch mode provided, 5 given PDO::query() expects exactly 3 arguments for the fetch mode provided, 2 given PDO::query() expects exactly 3 arguments for the fetch mode provided, 2 given diff --git a/ext/pdo/tests/pdo_uninitialized.phpt b/ext/pdo/tests/pdo_uninitialized.phpt new file mode 100644 index 0000000000000..4ddfa7558cb44 --- /dev/null +++ b/ext/pdo/tests/pdo_uninitialized.phpt @@ -0,0 +1,39 @@ +--TEST-- +Uninitialized PDO objects +--SKIPIF-- + +--FILE-- +query("foo"); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +$stmt = new MyPDOStatement; +try { + $stmt->fetch(); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +$stmt = new MyPDOStatement; +try { + foreach ($stmt as $row) {} +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +PDO object is not initialized, constructor was not called +PDO object is uninitialized +PDO object is uninitialized diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c index 7f160a402f7e2..e581642037d3e 100644 --- a/ext/pdo_dblib/dblib_driver.c +++ b/ext/pdo_dblib/dblib_driver.c @@ -417,7 +417,8 @@ static const struct pdo_dbh_methods dblib_methods = { NULL, /* check liveness */ NULL, /* get driver methods */ NULL, /* request shutdown */ - NULL /* in transaction */ + NULL, /* in transaction */ + NULL /* get gc */ }; static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options) diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c index c27a9e2ed553a..c299907f0fea1 100644 --- a/ext/pdo_firebird/firebird_driver.c +++ b/ext/pdo_firebird/firebird_driver.c @@ -1005,7 +1005,11 @@ static const struct pdo_dbh_methods firebird_methods = { /* {{{ */ NULL, /* last_id not supported */ pdo_firebird_fetch_error_func, firebird_handle_get_attribute, - NULL /* check_liveness */ + NULL, /* check_liveness */ + NULL, /* get driver methods */ + NULL, /* request shutdown */ + NULL, /* in transaction */ + NULL /* get gc */ }; /* }}} */ diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index a666489a503f9..a83b12b8725a0 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -349,7 +349,11 @@ static int mysql_handle_commit(pdo_dbh_t *dbh) { PDO_DBG_ENTER("mysql_handle_commit"); PDO_DBG_INF_FMT("dbh=%p", dbh); - PDO_DBG_RETURN(0 == mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server)); + if (mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server)) { + pdo_mysql_error(dbh); + PDO_DBG_RETURN(0); + } + PDO_DBG_RETURN(1); } /* }}} */ @@ -358,7 +362,11 @@ static int mysql_handle_rollback(pdo_dbh_t *dbh) { PDO_DBG_ENTER("mysql_handle_rollback"); PDO_DBG_INF_FMT("dbh=%p", dbh); - PDO_DBG_RETURN(0 == mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server)); + if (mysql_rollback(((pdo_mysql_db_handle *)dbh->driver_data)->server)) { + pdo_mysql_error(dbh); + PDO_DBG_RETURN(0); + } + PDO_DBG_RETURN(1); } /* }}} */ @@ -368,7 +376,11 @@ static inline int mysql_handle_autocommit(pdo_dbh_t *dbh) PDO_DBG_ENTER("mysql_handle_autocommit"); PDO_DBG_INF_FMT("dbh=%p", dbh); PDO_DBG_INF_FMT("dbh->autocommit=%d", dbh->auto_commit); - PDO_DBG_RETURN(0 == mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit)); + if (mysql_autocommit(((pdo_mysql_db_handle *)dbh->driver_data)->server, dbh->auto_commit)) { + pdo_mysql_error(dbh); + PDO_DBG_RETURN(0); + } + PDO_DBG_RETURN(1); } /* }}} */ @@ -385,7 +397,9 @@ static int pdo_mysql_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /* ignore if the new value equals the old one */ if (dbh->auto_commit ^ bval) { dbh->auto_commit = bval; - mysql_handle_autocommit(dbh); + if (!mysql_handle_autocommit(dbh)) { + PDO_DBG_RETURN(0); + } } PDO_DBG_RETURN(1); @@ -563,7 +577,8 @@ static const struct pdo_dbh_methods mysql_methods = { pdo_mysql_check_liveness, NULL, pdo_mysql_request_shutdown, - pdo_mysql_in_transaction + pdo_mysql_in_transaction, + NULL /* get_gc */ }; /* }}} */ diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index 591443520fa3d..00a2583cdf7e6 100644 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -255,7 +255,10 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt) /* {{{ */ /* if buffered, pre-fetch all the data */ if (H->buffered) { - mysql_stmt_store_result(S->stmt); + if (mysql_stmt_store_result(S->stmt)) { + pdo_mysql_error_stmt(stmt); + PDO_DBG_RETURN(0); + } } } } @@ -298,6 +301,7 @@ static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt) /* {{{ */ /* if buffered, pre-fetch all the data */ if (H->buffered) { if (mysql_stmt_store_result(S->stmt)) { + pdo_mysql_error_stmt(stmt); PDO_DBG_RETURN(0); } } @@ -386,7 +390,8 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt) /* {{{ */ /* if buffered, pre-fetch all the data */ if (H->buffered) { if (mysql_stmt_store_result(S->stmt)) { - PDO_DBG_RETURN(1); + pdo_mysql_error_stmt(stmt); + PDO_DBG_RETURN(0); } } } @@ -621,6 +626,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori PDO_DBG_INF_FMT("stmt=%p", S->stmt); if (S->stmt) { if (FAIL == mysqlnd_stmt_fetch(S->stmt, &fetched_anything) || fetched_anything == FALSE) { + pdo_mysql_error_stmt(stmt); PDO_DBG_RETURN(0); } @@ -660,11 +666,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori #endif /* PDO_USE_MYSQLND */ if ((S->current_data = mysql_fetch_row(S->result)) == NULL) { -#ifdef PDO_USE_MYSQLND - if (S->result->unbuf && !S->result->unbuf->eof_reached && mysql_errno(S->H->server)) { -#else - if (!S->result->eof && mysql_errno(S->H->server)) { -#endif + if (!S->H->buffered && mysql_errno(S->H->server)) { pdo_mysql_error_stmt(stmt); } PDO_DBG_RETURN(0); diff --git a/ext/pdo_mysql/tests/bug66528.phpt b/ext/pdo_mysql/tests/bug66528.phpt new file mode 100644 index 0000000000000..a5c79c12b3251 --- /dev/null +++ b/ext/pdo_mysql/tests/bug66528.phpt @@ -0,0 +1,51 @@ +--TEST-- +Bug #66528: No PDOException or errorCode if database becomes unavailable before PDO::commit +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + +$dbh->exec('DROP TABLE IF EXISTS test'); +$dbh->exec('CREATE TABLE test (a int) engine=innodb'); +$dbh->beginTransaction(); +$dbh->exec('INSERT INTO test (a) VALUES (1), (2)'); +$stmt = $dbh->query('SELECT * FROM test'); + +try { + $dbh->commit(); +} catch (PDOException $e) { + echo $e->getMessage(), "\n"; +} + +try { + $dbh->rollBack(); +} catch (PDOException $e) { + echo $e->getMessage(), "\n"; +} + +try { + $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, false); +} catch (PDOException $e) { + echo $e->getMessage(), "\n"; +} + +?> +--CLEAN-- + +--EXPECT-- +SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. +SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. +SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. diff --git a/ext/pdo_mysql/tests/bug79375.phpt b/ext/pdo_mysql/tests/bug79375.phpt new file mode 100644 index 0000000000000..c7905a7018809 --- /dev/null +++ b/ext/pdo_mysql/tests/bug79375.phpt @@ -0,0 +1,113 @@ +--TEST-- +Bug #79375: mysqli_store_result does not report error from lock wait timeout +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + return $db; +} + +$db = createDB(); +$db2 = createDB(); +$db->query('DROP TABLE IF EXISTS test'); +$db->query('CREATE TABLE test (first int) ENGINE = InnoDB'); +$db->query('INSERT INTO test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)'); + +function testNormalQuery(PDO $db, string $name) { + $db->exec("SET innodb_lock_wait_timeout = 1"); + $db->exec("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + try { + $stmt = $db->query($query); + echo "Got {$stmt->rowCount()} for $name\n"; + } catch (PDOException $e) { + echo $e->getMessage()."\n"; + } +} + +function testPrepareExecute(PDO $db, string $name) { + $db->exec("SET innodb_lock_wait_timeout = 1"); + $db->exec("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $stmt = $db->prepare($query); + try { + $stmt->execute(); + echo "Got {$stmt->rowCount()} for $name\n"; + } catch (PDOException $e) { + echo $e->getMessage()."\n"; + } +} + +function testUnbuffered(PDO $db, string $name) { + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $db->exec("SET innodb_lock_wait_timeout = 1"); + $db->exec("START TRANSACTION"); + $query = "SELECT first FROM test WHERE first = 1 FOR UPDATE"; + echo "Running query on $name\n"; + $stmt = $db->prepare($query); + $stmt->execute(); + try { + $rows = $stmt->fetchAll(); + $count = count($rows); + echo "Got $count for $name\n"; + } catch (PDOException $e) { + echo $e->getMessage()."\n"; + } +} + +testNormalQuery($db, 'first connection'); +testNormalQuery($db2, 'second connection'); +unset($db); +unset($db2); +echo "\n"; + +$db = createDB(); +$db2 = createDB(); +testPrepareExecute($db, 'first connection'); +testPrepareExecute($db2, 'second connection'); +unset($db); +unset($db2); +echo "\n"; + +$db = createDB(); +$db2 = createDB(); +testUnbuffered($db, 'first connection'); +testUnbuffered($db2, 'second connection'); +unset($db); +unset($db2); +echo "\n"; + +?> +--CLEAN-- + +--EXPECT-- +Running query on first connection +Got 1 for first connection +Running query on second connection +SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got 1 for first connection +Running query on second connection +SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction + +Running query on first connection +Got 1 for first connection +Running query on second connection +SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction diff --git a/ext/pdo_mysql/tests/bug_37445.phpt b/ext/pdo_mysql/tests/bug_37445.phpt index ca321443e3d78..834950fd486bf 100644 --- a/ext/pdo_mysql/tests/bug_37445.phpt +++ b/ext/pdo_mysql/tests/bug_37445.phpt @@ -17,7 +17,7 @@ $stmt = $db->prepare("SELECT 1"); $stmt->bindParam(':a', 'b'); ?> --EXPECTF-- -Fatal error: Uncaught Error: PDOStatement::bindParam(): Argument #2 ($bind_var) cannot be passed by reference in %sbug_37445.php:%d +Fatal error: Uncaught Error: PDOStatement::bindParam(): Argument #2 ($var) cannot be passed by reference in %sbug_37445.php:%d Stack trace: #0 {main} thrown in %sbug_37445.php on line %d diff --git a/ext/pdo_mysql/tests/bug_38546.phpt b/ext/pdo_mysql/tests/bug_38546.phpt index 238bccb035ede..8122c05317a5d 100644 --- a/ext/pdo_mysql/tests/bug_38546.phpt +++ b/ext/pdo_mysql/tests/bug_38546.phpt @@ -230,14 +230,14 @@ Array [3] => 2 ) -Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'true' for column 'some_bool_1' at row 1 in %s +Warning: PDOStatement::execute(): SQLSTATE[%s]: %s: 1366 Incorrect integer value: 'true' for column %s at row 1 in %s array(3) { [0]=> - string(5) "HY000" + string(5) "%s" [1]=> int(1366) [2]=> - string(65) "Incorrect integer value: 'true' for column 'some_bool_1' at row 1" + string(%d) "Incorrect integer value: 'true' for column %s at row 1" } Array ( diff --git a/ext/pdo_mysql/tests/bug_74376.phpt b/ext/pdo_mysql/tests/bug_74376.phpt index 5abc546d15cc4..77e06414302f2 100644 --- a/ext/pdo_mysql/tests/bug_74376.phpt +++ b/ext/pdo_mysql/tests/bug_74376.phpt @@ -23,5 +23,7 @@ $stmt = $db->query("select (select 1 union select 2)"); print "ok"; ?> ---EXPECT-- +--EXPECTF-- + +Warning: PDO::query(): SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row in %s on line %d ok diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt index 62de8ad1ca37b..f268117821d21 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt @@ -73,7 +73,7 @@ array(1) { } } -Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO %s(id) VALUES (3)' at line 1 in %s on line %d +Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'INSERT INTO %s(id) VALUES (3)' at line 1 in %s on line %d bool(false) string(5) "42000" array(2) { diff --git a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt index 506be6475f35c..f88ae149faf16 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt @@ -23,9 +23,14 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) // DDL will issue an implicit commit $db->exec(sprintf('DROP TABLE IF EXISTS test_commit')); $db->exec(sprintf('CREATE TABLE test_commit(id INT) ENGINE=%s', MySQLPDOTest::detect_transactional_mysql_engine($db))); - if (true !== ($tmp = $db->commit())) { - printf("[002] No commit allowed? [%s] %s\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + try { + $db->commit(); + $failed = false; + } catch (PDOException $e) { + $failed = true; + } + if (!$failed) { + printf("[002] Commit should have failed\n"); } // pdo_transaction_transitions should check this as well... diff --git a/ext/pdo_mysql/tests/pdo_mysql_inTransaction.phpt b/ext/pdo_mysql/tests/pdo_mysql_inTransaction.phpt index 6d82e22b1238f..7ce93e8409a36 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_inTransaction.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_inTransaction.phpt @@ -14,11 +14,11 @@ const BEGIN = ['BEGIN', 'START TRANSACTION']; const END = ['COMMIT', 'ROLLBACK']; $db = MySQLPDOTest::factory(); -// $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // mysql does not support -for ($b = 0; $b < count(BEGIN); $b++) { - for ($e = 0; $e < count(END); $e++) { +// $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // mysql does not support +foreach (BEGIN as $begin) { + foreach (END as $end) { foreach (['exec', 'query', 'execute'] as $w) { - foreach ([BEGIN[$b], END[$e]] as $command) { + foreach ([$begin, $end] as $command) { switch ($w) { case 'exec': $db->exec($command); @@ -38,6 +38,37 @@ for ($b = 0; $b < count(BEGIN); $b++) { } } } +echo "\n"; + +// Mixing PDO transaction API and explicit queries. +foreach (END as $end) { + $db->beginTransaction(); + var_dump($db->inTransaction()); + $db->exec($end); + var_dump($db->inTransaction()); +} + +$db->exec('START TRANSACTION'); +var_dump($db->inTransaction()); +$db->rollBack(); +var_dump($db->inTransaction()); +$db->exec('START TRANSACTION'); +var_dump($db->inTransaction()); +$db->commit(); +var_dump($db->inTransaction()); +echo "\n"; + +// DDL query causes an implicit commit. +$db->beginTransaction(); +var_dump($db->inTransaction()); +$db->exec('DROP TABLE IF EXISTS test'); +var_dump($db->inTransaction()); + +// We should be able to start a new transaction after the implicit commit. +$db->beginTransaction(); +var_dump($db->inTransaction()); +$db->commit(); +var_dump($db->inTransaction()); ?> --EXPECT-- @@ -65,3 +96,17 @@ bool(true) bool(false) bool(true) bool(false) + +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(false) + +bool(true) +bool(false) +bool(true) +bool(false) diff --git a/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt b/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt index a1f1644cf3687..e17a233109791 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt @@ -175,7 +175,7 @@ array(3) { } bool(false) -Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test (id, label) VALUES (99, 'x')' at line 1 in %s on line %d +Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near 'INSERT INTO test (id, label) VALUES (99, 'x')' at line 1 in %s on line %d string(5) "42000" Testing with PDO::MYSQL_ATTR_MULTI_STATEMENTS set to true diff --git a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt index d27aefc6be46a..25a467d877fde 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt @@ -37,12 +37,15 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) $db->query('DROP TABLE IF EXISTS test2'); $db->query('CREATE TABLE test2(id INT)'); $num++; - $db->rollBack(); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[002] ROLLBACK should have no effect because of the implicit COMMIT - triggered by DROP/CREATE TABLE\n"); - + try { + $db->rollBack(); + $failed = false; + } catch (PDOException $e) { + $failed = true; + } + if (!$failed) { + printf("[003] Rollback should have failed\n"); + } $db->query('DROP TABLE IF EXISTS test2'); $db->query('CREATE TABLE test2(id INT) ENGINE=MyISAM'); diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt index 61734061d9109..b5b0275f04f7d 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt @@ -302,6 +302,6 @@ $db->exec('DROP TABLE IF EXISTS test'); print "done!"; ?> --EXPECT-- -PDOStatement::getColumnMeta(): Argument #1 ($index) must be greater than or equal to 0 +PDOStatement::getColumnMeta(): Argument #1 ($column) must be greater than or equal to 0 Testing native PS... done! diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c index 096a26575ef0c..2c65fc973ba32 100644 --- a/ext/pdo_oci/oci_driver.c +++ b/ext/pdo_oci/oci_driver.c @@ -705,9 +705,10 @@ static const struct pdo_dbh_methods oci_methods = { pdo_oci_fetch_error_func, oci_handle_get_attribute, pdo_oci_check_liveness, /* check_liveness */ - NULL, /* get_driver_methods */ - NULL, - NULL + NULL, /* get_driver_methods */ + NULL, /* request_shutdown */ + NULL, /* in_transaction */ + NULL /* get_gc */ }; static int pdo_oci_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c index 9a254553d5b31..81e4915da56f1 100644 --- a/ext/pdo_odbc/odbc_driver.c +++ b/ext/pdo_odbc/odbc_driver.c @@ -384,7 +384,11 @@ static const struct pdo_dbh_methods odbc_methods = { NULL, /* last id */ pdo_odbc_fetch_error_func, odbc_handle_get_attr, /* get attr */ - NULL, /* check_liveness */ + NULL, /* check_liveness */ + NULL, /* get_driver_methods */ + NULL, /* request_shutdown */ + NULL, /* in_transaction */ + NULL /* get_gc */ }; static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index d800d65a2df0e..37680b8efacd3 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -1179,6 +1179,7 @@ static const struct pdo_dbh_methods pgsql_methods = { pdo_pgsql_get_driver_methods, /* get_driver_methods */ NULL, pgsql_handle_in_transaction, + NULL /* get_gc */ }; static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_pgsql/pgsql_driver.stub.php b/ext/pdo_pgsql/pgsql_driver.stub.php index bf63c5656e2b5..e6d3695373cf9 100644 --- a/ext/pdo_pgsql/pgsql_driver.stub.php +++ b/ext/pdo_pgsql/pgsql_driver.stub.php @@ -5,16 +5,16 @@ // These are extension methods for PDO. This is not a real class. class PDO_PGSql_Ext { /** @return bool */ - public function pgsqlCopyFromArray(string $table_name, array $rows, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} + public function pgsqlCopyFromArray(string $tableName, array $rows, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null) {} /** @return bool */ - public function pgsqlCopyFromFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} + public function pgsqlCopyFromFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null) {} /** @return array|false */ - public function pgsqlCopyToArray(string $table_name, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} + public function pgsqlCopyToArray(string $tableName, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null) {} /** @return bool */ - public function pgsqlCopyToFile(string $table_name, string $filename, string $delimiter = "\t", string $null_as = "\\\\N", ?string $fields = null) {} + public function pgsqlCopyToFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null) {} /** @return string|false */ public function pgsqlLOBCreate() {} @@ -26,7 +26,7 @@ public function pgsqlLOBOpen(string $oid, string $mode = "rb") {} public function pgsqlLOBUnlink(string $oid) {} /** @return array|false */ - public function pgsqlGetNotify(int $result_type = PDO::FETCH_USE_DEFAULT, int $ms_timeout = 0) {} + public function pgsqlGetNotify(int $fetchMode = PDO::FETCH_USE_DEFAULT, int $timeoutMilliseconds = 0) {} /** @return int */ public function pgsqlGetPid() {} diff --git a/ext/pdo_pgsql/pgsql_driver_arginfo.h b/ext/pdo_pgsql/pgsql_driver_arginfo.h index 0c79009f989a4..d8d33450af8f0 100644 --- a/ext/pdo_pgsql/pgsql_driver_arginfo.h +++ b/ext/pdo_pgsql/pgsql_driver_arginfo.h @@ -1,26 +1,26 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 6e5758f2ff93c89f3658aa8f6cfb32a60fd85127 */ + * Stub hash: 82be78f03c363afd795c59bcbb061ef0b2f9d08c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromArray, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyFromFile, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlCopyToArray, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") + ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -39,8 +39,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlLOBUnlink, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_PGSql_Ext_pgsqlGetNotify, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PDO::FETCH_USE_DEFAULT") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ms_timeout, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetchMode, IS_LONG, 0, "PDO::FETCH_USE_DEFAULT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeoutMilliseconds, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_class_PDO_PGSql_Ext_pgsqlGetPid arginfo_class_PDO_PGSql_Ext_pgsqlLOBCreate diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c index 26fa1c00eb829..a8a96c7a131f6 100644 --- a/ext/pdo_sqlite/sqlite_driver.c +++ b/ext/pdo_sqlite/sqlite_driver.c @@ -695,6 +695,25 @@ static void pdo_sqlite_request_shutdown(pdo_dbh_t *dbh) } } +static void pdo_sqlite_get_gc(pdo_dbh_t *dbh, zend_get_gc_buffer *gc_buffer) +{ + pdo_sqlite_db_handle *H = dbh->driver_data; + + struct pdo_sqlite_func *func = H->funcs; + while (func) { + zend_get_gc_buffer_add_zval(gc_buffer, &func->func); + zend_get_gc_buffer_add_zval(gc_buffer, &func->step); + zend_get_gc_buffer_add_zval(gc_buffer, &func->fini); + func = func->next; + } + + struct pdo_sqlite_collation *collation = H->collations; + while (collation) { + zend_get_gc_buffer_add_zval(gc_buffer, &collation->callback); + collation = collation->next; + } +} + static const struct pdo_dbh_methods sqlite_methods = { sqlite_handle_closer, sqlite_handle_preparer, @@ -710,7 +729,8 @@ static const struct pdo_dbh_methods sqlite_methods = { NULL, /* check_liveness: not needed */ get_driver_methods, pdo_sqlite_request_shutdown, - NULL + NULL, /* in_transaction */ + pdo_sqlite_get_gc }; static char *make_filename_safe(const char *filename) diff --git a/ext/pdo_sqlite/sqlite_driver.stub.php b/ext/pdo_sqlite/sqlite_driver.stub.php index eafd3c0c4850a..fc827cd381c1f 100644 --- a/ext/pdo_sqlite/sqlite_driver.stub.php +++ b/ext/pdo_sqlite/sqlite_driver.stub.php @@ -5,10 +5,10 @@ // These are extension methods for PDO. This is not a real class. class PDO_SQLite_Ext { /** @return bool */ - public function sqliteCreateFunction(string $function_name, callable $callback, int $num_args = -1, int $flags = 0) {} + public function sqliteCreateFunction(string $name, callable $callback, int $numArgs = -1, int $flags = 0) {} /** @return bool */ - public function sqliteCreateAggregate(string $function_name, callable $step_func, callable $finalize_func, int $num_args = -1) {} + public function sqliteCreateAggregate(string $name, callable $step, callable $finalize, int $numArgs = -1) {} /** @return bool */ public function sqliteCreateCollation(string $name, callable $callback) {} diff --git a/ext/pdo_sqlite/sqlite_driver_arginfo.h b/ext/pdo_sqlite/sqlite_driver_arginfo.h index ad3df39bac961..370f3d1315940 100644 --- a/ext/pdo_sqlite/sqlite_driver_arginfo.h +++ b/ext/pdo_sqlite/sqlite_driver_arginfo.h @@ -1,18 +1,18 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: e367675f85371fb06484e39dd6ccb3433766ffb8 */ + * Stub hash: 49737f1a08f0b1b66e326b7d06e316105202d27d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_SQLite_Ext_sqliteCreateFunction, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, num_args, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, numArgs, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_SQLite_Ext_sqliteCreateAggregate, 0, 0, 3) - ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, step_func, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO(0, finalize_func, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, num_args, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, step, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, finalize, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, numArgs, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDO_SQLite_Ext_sqliteCreateCollation, 0, 0, 2) diff --git a/ext/pdo_sqlite/tests/gc.phpt b/ext/pdo_sqlite/tests/gc.phpt new file mode 100644 index 0000000000000..25407697e6b82 --- /dev/null +++ b/ext/pdo_sqlite/tests/gc.phpt @@ -0,0 +1,24 @@ +--TEST-- +GC support for PDO Sqlite driver data +--SKIPIF-- + +--FILE-- +a = new PDO('sqlite::memory:'); +$obj->a->sqliteCreateFunction('func1', function() use ($obj) {}, 1); +$obj->a->sqliteCreateAggregate('func2', function() use ($obj) {}, function() use($obj) {}); +$obj->a->sqliteCreateCollation('col', function() use ($obj) {}); + +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate_002.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate_002.phpt index 5660288af3b46..a906e8e52d37c 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate_002.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate_002.phpt @@ -20,5 +20,5 @@ try { ?> --EXPECT-- -PDO::sqliteCreateAggregate(): Argument #2 ($step_func) must be a valid callback, function "a" not found or invalid function name -PDO::sqliteCreateAggregate(): Argument #3 ($finalize_func) must be a valid callback, function "" not found or invalid function name +PDO::sqliteCreateAggregate(): Argument #2 ($step) must be a valid callback, function "a" not found or invalid function name +PDO::sqliteCreateAggregate(): Argument #3 ($finalize) must be a valid callback, function "" not found or invalid function name diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 88cf0c431eeb4..4685c7cd741e5 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -1836,7 +1836,7 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ zend_class_entry *ce = NULL; if (into_object) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l!Ca!", &result, &row, &row_is_null, &ce, &ctor_params) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l!Ca", &result, &row, &row_is_null, &ce, &ctor_params) == FAILURE) { RETURN_THROWS(); } if (!ce) { @@ -1935,14 +1935,7 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ if (ctor_params) { if (zend_fcall_info_args(&fci, ctor_params) == FAILURE) { - /* Two problems why we throw exceptions here: PHP is typeless - * and hence passing one argument that's not an array could be - * by mistake and the other way round is possible, too. The - * single value is an array. Also we'd have to make that one - * argument passed by reference. - */ - zend_throw_exception(zend_ce_exception, "Parameter ctor_params must be an array", 0); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } } @@ -1958,8 +1951,11 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ if (fci.params) { efree(fci.params); } - } else if (ctor_params) { - zend_throw_exception_ex(zend_ce_exception, 0, "Class %s does not have a constructor hence you cannot use ctor_params", ZSTR_VAL(ce->name)); + } else if (ctor_params && zend_hash_num_elements(Z_ARRVAL_P(ctor_params)) > 0) { + zend_argument_error(zend_ce_exception, 3, + "must be empty when the specified class (%s) does not have a constructor", + ZSTR_VAL(ce->name) + ); } } } @@ -3359,8 +3355,7 @@ PHP_FUNCTION(pg_unescape_bytea) char *from, *tmp; size_t to_len; size_t from_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!", - &from, &from_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &from, &from_len) == FAILURE) { RETURN_THROWS(); } diff --git a/ext/pgsql/pgsql.stub.php b/ext/pgsql/pgsql.stub.php index a6dfb5d18512e..aff847bbc444a 100644 --- a/ext/pgsql/pgsql.stub.php +++ b/ext/pgsql/pgsql.stub.php @@ -3,10 +3,10 @@ /** @generate-function-entries */ /** @return resource|false */ -function pg_connect(string $connection_string, int $connection_type = 0) {} +function pg_connect(string $connection_string, int $flags = 0) {} /** @return resource|false */ -function pg_pconnect(string $connection_string, int $connection_type = 0) {} +function pg_pconnect(string $connection_string, int $flags = 0) {} /** @param resource $connection */ function pg_connect_poll($connection): int {} @@ -43,7 +43,7 @@ function pg_host($connection = null): string {} function pg_version($connection = null): array {} /** @param resource|string $connection */ -function pg_parameter_status($connection, string $param_name = UNKNOWN): string|false {} +function pg_parameter_status($connection, string $name = UNKNOWN): string|false {} /** @param resource|null $connection */ function pg_ping($connection = null): bool {} @@ -72,14 +72,14 @@ function pg_query_params($connection, $query, array $params = UNKNOWN) {} * @param resource|string $connection * @return resource|false */ -function pg_prepare($connection, string $stmt_name, string $query = UNKNOWN) {} +function pg_prepare($connection, string $statement_name, string $query = UNKNOWN) {} /** * @param resource|string $connection - * @param string|array $stmt_name + * @param string|array $statement_name * @return resource|false */ -function pg_execute($connection, $stmt_name, array $params = UNKNOWN) {} +function pg_execute($connection, $statement_name, array $params = UNKNOWN) {} /** @param resource $result */ function pg_num_rows($result): int {} @@ -112,122 +112,122 @@ function pg_affected_rows($result): int {} function pg_cmdtuples($result): int {} /** @param resource $connection */ -function pg_last_notice($connection, int $option = PGSQL_NOTICE_LAST): array|string|bool {} +function pg_last_notice($connection, int $mode = PGSQL_NOTICE_LAST): array|string|bool {} /** @param resource $result */ -function pg_field_table($result, int $field_number, bool $oid_only = false): string|int|false {} +function pg_field_table($result, int $field, bool $oid_only = false): string|int|false {} /** @param resource $result */ -function pg_field_name($result, int $field_number): string {} +function pg_field_name($result, int $field): string {} /** * @param resource $result * @alias pg_field_name * @deprecated */ -function pg_fieldname($result, int $field_number): string {} +function pg_fieldname($result, int $field): string {} /** @param resource $result */ -function pg_field_size($result, int $field_number): int {} +function pg_field_size($result, int $field): int {} /** * @param resource $result * @alias pg_field_size * @deprecated */ -function pg_fieldsize($result, int $field_number): int {} +function pg_fieldsize($result, int $field): int {} /** @param resource $result */ -function pg_field_type($result, int $field_number): string {} +function pg_field_type($result, int $field): string {} /** * @param resource $result * @alias pg_field_type * @deprecated */ -function pg_fieldtype($result, int $field_number): string {} +function pg_fieldtype($result, int $field): string {} /** @param resource $result */ -function pg_field_type_oid($result, int $field_number): string|int {} +function pg_field_type_oid($result, int $field): string|int {} /** @param resource $result */ -function pg_field_num($result, string $field_name): int {} +function pg_field_num($result, string $field): int {} /** * @param resource $result * @alias pg_field_num * @deprecated */ -function pg_fieldnum($result, string $field_name): int {} +function pg_fieldnum($result, string $field): int {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row */ -function pg_fetch_result($result, $row_number, string|int $field = UNKNOWN): string|false|null {} +function pg_fetch_result($result, $row, string|int $field = UNKNOWN): string|false|null {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row * @alias pg_fetch_result * @deprecated */ -function pg_result($result, $row_number, string|int $field = UNKNOWN): string|false|null {} +function pg_result($result, $row, string|int $field = UNKNOWN): string|false|null {} /** * @param resource $result */ -function pg_fetch_row($result, ?int $row_number = null, int $result_type = PGSQL_NUM): array|false {} +function pg_fetch_row($result, ?int $row = null, int $mode = PGSQL_NUM): array|false {} /** * @param resource $result */ -function pg_fetch_assoc($result, ?int $row_number = null): array|false {} +function pg_fetch_assoc($result, ?int $row = null): array|false {} /** * @param resource $result */ -function pg_fetch_array($result, ?int $row_number = null, int $result_type = PGSQL_BOTH): array|false {} +function pg_fetch_array($result, ?int $row = null, int $mode = PGSQL_BOTH): array|false {} /** @param resource $result */ -function pg_fetch_object($result, ?int $row_number = null, string $class_name = "stdClass", ?array $ctor_params = null): object|false {} +function pg_fetch_object($result, ?int $row = null, string $class = "stdClass", array $constructor_args = []): object|false {} /** @param resource $result */ -function pg_fetch_all($result, int $result_type = PGSQL_ASSOC): array {} +function pg_fetch_all($result, int $mode = PGSQL_ASSOC): array {} /** @param resource $result */ -function pg_fetch_all_columns($result, int $field_number = 0): array {} +function pg_fetch_all_columns($result, int $field = 0): array {} /** @param resource $result */ -function pg_result_seek($result, int $row_number): bool {} +function pg_result_seek($result, int $row): bool {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row */ -function pg_field_prtlen($result, $row_number, string|int $field = UNKNOWN): int|false {} +function pg_field_prtlen($result, $row, string|int $field = UNKNOWN): int|false {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row * @alias pg_field_prtlen * @deprecated */ -function pg_fieldprtlen($result, $row_number, string|int $field = UNKNOWN): int|false {} +function pg_fieldprtlen($result, $row, string|int $field = UNKNOWN): int|false {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row */ -function pg_field_is_null($result, $row_number, string|int $field = UNKNOWN): int|false {} +function pg_field_is_null($result, $row, string|int $field = UNKNOWN): int|false {} /** * @param resource $result - * @param string|int $row_number + * @param string|int $row * @alias pg_field_is_null * @deprecated */ -function pg_fieldisnull($result, $row_number, string|int $field = UNKNOWN): int|false {} +function pg_fieldisnull($result, $row, string|int $field = UNKNOWN): int|false {} /** @param resource $result */ function pg_free_result($result): bool {} @@ -257,132 +257,132 @@ function pg_untrace($connection = null): bool {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid */ -function pg_lo_create($connection = UNKNOWN, $large_object_id = UNKNOWN): string|int|false {} +function pg_lo_create($connection = UNKNOWN, $oid = UNKNOWN): string|int|false {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid * @alias pg_lo_create * @deprecated */ -function pg_locreate($connection = UNKNOWN, $large_object_id = UNKNOWN): string|int|false {} +function pg_locreate($connection = UNKNOWN, $oid = UNKNOWN): string|int|false {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid */ -function pg_lo_unlink($connection, $large_object_id = UNKNOWN): bool {} +function pg_lo_unlink($connection, $oid = UNKNOWN): bool {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid * @alias pg_lo_unlink * @deprecated */ -function pg_lounlink($connection, $large_object_id = UNKNOWN): bool {} +function pg_lounlink($connection, $oid = UNKNOWN): bool {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid * @return resource|false */ -function pg_lo_open($connection, $large_object_id = UNKNOWN, string $mode = UNKNOWN) {} +function pg_lo_open($connection, $oid = UNKNOWN, string $mode = UNKNOWN) {} /** * @param resource $connection - * @param string|int $large_object_id + * @param string|int $oid * @return resource|false * @alias pg_lo_open * @deprecated */ -function pg_loopen($connection, $large_object_id = UNKNOWN, string $mode = UNKNOWN) {} +function pg_loopen($connection, $oid = UNKNOWN, string $mode = UNKNOWN) {} -/** @param resource $large_object */ -function pg_lo_close($large_object): bool {} +/** @param resource $lob */ +function pg_lo_close($lob): bool {} /** - * @param resource $large_object + * @param resource $lob * @alias pg_lo_close * @deprecated */ -function pg_loclose($large_object): bool {} +function pg_loclose($lob): bool {} -/** @param resource $large_object */ -function pg_lo_read($large_object, int $len = 8192): string|false {} +/** @param resource $lob */ +function pg_lo_read($lob, int $length = 8192): string|false {} /** - * @param resource $large_object + * @param resource $lob * @alias pg_lo_read * @deprecated */ -function pg_loread($large_object, int $len = 8192): string|false {} +function pg_loread($lob, int $length = 8192): string|false {} -/** @param resource $large_object */ -function pg_lo_write($large_object, string $buf, ?int $len = null): int|false {} +/** @param resource $lob */ +function pg_lo_write($lob, string $data, ?int $length = null): int|false {} /** - * @param resource $large_object + * @param resource $lob * @alias pg_lo_write * @deprecated */ -function pg_lowrite($large_object, string $buf, ?int $len = null): int|false {} +function pg_lowrite($lob, string $data, ?int $length = null): int|false {} -/** @param resource $large_object */ -function pg_lo_read_all($large_object): int {} +/** @param resource $lob */ +function pg_lo_read_all($lob): int {} /** - * @param resource $large_object + * @param resource $lob * @alias pg_lo_read_all * @deprecated */ -function pg_loreadall($large_object): int {} +function pg_loreadall($lob): int {} /** * @param resource|string $connection * @param string|int $filename - * @param string|int $large_object_id + * @param string|int $oid * @return resource|false */ -function pg_lo_import($connection, $filename = UNKNOWN, $large_object_id = UNKNOWN): string|int|false {} +function pg_lo_import($connection, $filename = UNKNOWN, $oid = UNKNOWN): string|int|false {} /** * @param resource|string $connection * @param string|int $filename - * @param string|int $large_object_id + * @param string|int $oid * @return resource|false * @alias pg_lo_import * @deprecated */ -function pg_loimport($connection, $filename = UNKNOWN, $large_object_id = UNKNOWN): string|int|false {} +function pg_loimport($connection, $filename = UNKNOWN, $oid = UNKNOWN): string|int|false {} /** * @param resource|string|int $connection - * @param string|int $large_object_id + * @param string|int $oid * @param string|int $filename * @return resource|false */ -function pg_lo_export($connection, $large_object_id = UNKNOWN, $filename = UNKNOWN): bool {} +function pg_lo_export($connection, $oid = UNKNOWN, $filename = UNKNOWN): bool {} /** * @param resource|string|int $connection - * @param string|int $large_object_id + * @param string|int $oid * @param string|int $filename * @return resource|false * @alias pg_lo_export * @deprecated */ -function pg_loexport($connection, $large_object_id = UNKNOWN, $filename = UNKNOWN): bool {} +function pg_loexport($connection, $oid = UNKNOWN, $filename = UNKNOWN): bool {} -/** @param resource $large_object */ -function pg_lo_seek($large_object, int $offset, int $whence = SEEK_CUR): bool {} +/** @param resource $lob */ +function pg_lo_seek($lob, int $offset, int $whence = SEEK_CUR): bool {} -/** @param resource $large_object */ -function pg_lo_tell($large_object): int {} +/** @param resource $lob */ +function pg_lo_tell($lob): int {} -/** @param resource $large_object */ -function pg_lo_truncate($large_object, int $size): bool {} +/** @param resource $lob */ +function pg_lo_truncate($lob, int $size): bool {} /** @param resource|int $connection */ function pg_set_error_verbosity($connection, int $verbosity = UNKNOWN): int|false {} @@ -414,30 +414,30 @@ function pg_end_copy($connection = null): bool {} function pg_put_line($connection, string $query = UNKNOWN): bool {} /** @param resource $connection */ -function pg_copy_to($connection, string $table_name, string $delimiter = "\t", string $null_as = "\\\\N"): array|false {} +function pg_copy_to($connection, string $table_name, string $separator = "\t", string $null_as = "\\\\N"): array|false {} /** @param resource $connection */ -function pg_copy_from($connection, string $table_name, array $rows, string $delimiter = "\t", string $null_as = "\\\\N"): bool {} +function pg_copy_from($connection, string $table_name, array $rows, string $separator = "\t", string $null_as = "\\\\N"): bool {} /** @param resource|string $connection */ -function pg_escape_string($connection, string $data = UNKNOWN): string {} +function pg_escape_string($connection, string $string = UNKNOWN): string {} /** @param resource|string $connection */ -function pg_escape_bytea($connection, string $data = UNKNOWN): string {} +function pg_escape_bytea($connection, string $string = UNKNOWN): string {} -function pg_unescape_bytea(?string $data = null): string {} +function pg_unescape_bytea(string $string): string {} /** @param resource|string $connection */ -function pg_escape_literal($connection, string $data = UNKNOWN): string|false {} +function pg_escape_literal($connection, string $string = UNKNOWN): string|false {} /** @param resource|string $connection */ -function pg_escape_identifier($connection, string $data = UNKNOWN): string|false {} +function pg_escape_identifier($connection, string $string = UNKNOWN): string|false {} /** @param resource $result */ function pg_result_error($result): string|false {} /** @param resource $result */ -function pg_result_error_field($result, int $fieldcode): string|false|null {} +function pg_result_error_field($result, int $field_code): string|false|null {} /** @param resource $connection */ function pg_connection_status($connection): int {} @@ -461,7 +461,7 @@ function pg_send_query($connection, string $query): int|bool {} function pg_send_query_params($connection, string $query, array $params): int|bool {} /** @param resource $connection */ -function pg_send_prepare($connection, string $stmtname, string $query): int|bool {} +function pg_send_prepare($connection, string $statement_name, string $query): int|bool {} /** @param resource $connection */ function pg_send_execute($connection, string $query, array $params): int|bool {} @@ -473,10 +473,10 @@ function pg_send_execute($connection, string $query, array $params): int|bool {} function pg_get_result($connection) {} /** @param resource $result */ -function pg_result_status($result, int $result_type = PGSQL_STATUS_LONG): string|int {} +function pg_result_status($result, int $mode = PGSQL_STATUS_LONG): string|int {} /** @param resource $result */ -function pg_get_notify($result, int $result_type = PGSQL_ASSOC): array|false {} +function pg_get_notify($result, int $mode = PGSQL_ASSOC): array|false {} /** @param resource $connection */ function pg_get_pid($connection): int {} @@ -497,19 +497,19 @@ function pg_flush($connection): int|bool {} function pg_meta_data($connection, string $table_name, bool $extended = false): array|false {} /** @param resource $connection */ -function pg_convert($connection, string $table_name, array $values, int $options = 0): array|false {} +function pg_convert($connection, string $table_name, array $values, int $flags = 0): array|false {} /** * @param resource $connection * @return resource|string|bool */ -function pg_insert($connection, string $table_name, array $values, int $options = 0) {} +function pg_insert($connection, string $table_name, array $values, int $flags = PGSQL_DML_EXEC) {} /** @param resource $connection */ -function pg_update($connection, string $table_name, array $values, array $ids, int $options = 0): string|bool {} +function pg_update($connection, string $table_name, array $values, array $conditions, int $flags = PGSQL_DML_EXEC): string|bool {} /** @param resource $connection */ -function pg_delete($connection, string $table_name, array $ids, int $options = 0): string|bool {} +function pg_delete($connection, string $table_name, array $conditions, int $flags = PGSQL_DML_EXEC): string|bool {} /** @param resource $connection */ -function pg_select($connection, string $table_name, array $ids, int $options = 0, int $result_type = PGSQL_ASSOC): array|string|false {} +function pg_select($connection, string $table_name, array $conditions, int $flags = PGSQL_DML_EXEC, int $mode = PGSQL_ASSOC): array|string|false {} diff --git a/ext/pgsql/pgsql_arginfo.h b/ext/pgsql/pgsql_arginfo.h index a0f267c8ff896..3d9a4f2d5d2b8 100644 --- a/ext/pgsql/pgsql_arginfo.h +++ b/ext/pgsql/pgsql_arginfo.h @@ -1,9 +1,9 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9735dbc8a4ca642ee825ae8942470ac2dec89f50 */ + * Stub hash: de1718d3e6e66dfade25462b8461983b914120ed */ ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_connect, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, connection_string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, connection_type, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_pg_pconnect arginfo_pg_connect @@ -38,7 +38,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_parameter_status, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO(0, param_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pg_ping arginfo_pg_close @@ -58,13 +58,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_prepare, 0, 0, 2) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO(0, stmt_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, statement_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_execute, 0, 0, 2) ZEND_ARG_INFO(0, connection) - ZEND_ARG_INFO(0, stmt_name) + ZEND_ARG_INFO(0, statement_name) ZEND_ARG_TYPE_INFO(0, params, IS_ARRAY, 0) ZEND_END_ARG_INFO() @@ -84,25 +84,25 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_last_notice, 0, 1, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, option, IS_LONG, 0, "PGSQL_NOTICE_LAST") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_NOTICE_LAST") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_field_table, 0, 2, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, oid_only, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_field_name, 0, 2, IS_STRING, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_pg_fieldname arginfo_pg_field_name ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_field_size, 0, 2, IS_LONG, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_pg_fieldsize arginfo_pg_field_size @@ -113,19 +113,19 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_field_type_oid, 0, 2, MAY_BE_STRING|MAY_BE_LONG) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_field_num, 0, 2, IS_LONG, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, field_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, field, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pg_fieldnum arginfo_pg_field_num ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_fetch_result, 0, 2, MAY_BE_STRING|MAY_BE_FALSE|MAY_BE_NULL) ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, row_number) + ZEND_ARG_INFO(0, row) ZEND_ARG_TYPE_MASK(0, field, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() @@ -133,46 +133,46 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_fetch_row, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row_number, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_NUM") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_NUM") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_fetch_assoc, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row_number, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_fetch_array, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row_number, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_BOTH") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_BOTH") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_fetch_object, 0, 1, MAY_BE_OBJECT|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row_number, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 0, "\"stdClass\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ctor_params, IS_ARRAY, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "\"stdClass\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, constructor_args, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_fetch_all, 0, 1, IS_ARRAY, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_ASSOC") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_ASSOC") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_fetch_all_columns, 0, 1, IS_ARRAY, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, field_number, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, field, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_result_seek, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, row_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, row, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_field_prtlen, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, row_number) + ZEND_ARG_INFO(0, row) ZEND_ARG_TYPE_MASK(0, field, MAY_BE_STRING|MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() @@ -204,49 +204,49 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_lo_create, 0, 0, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) - ZEND_ARG_INFO(0, large_object_id) + ZEND_ARG_INFO(0, oid) ZEND_END_ARG_INFO() #define arginfo_pg_locreate arginfo_pg_lo_create ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_unlink, 0, 1, _IS_BOOL, 0) ZEND_ARG_INFO(0, connection) - ZEND_ARG_INFO(0, large_object_id) + ZEND_ARG_INFO(0, oid) ZEND_END_ARG_INFO() #define arginfo_pg_lounlink arginfo_pg_lo_unlink ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_lo_open, 0, 0, 1) ZEND_ARG_INFO(0, connection) - ZEND_ARG_INFO(0, large_object_id) + ZEND_ARG_INFO(0, oid) ZEND_ARG_TYPE_INFO(0, mode, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pg_loopen arginfo_pg_lo_open ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_close, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, large_object) + ZEND_ARG_INFO(0, lob) ZEND_END_ARG_INFO() #define arginfo_pg_loclose arginfo_pg_lo_close ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_lo_read, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, large_object) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 0, "8192") + ZEND_ARG_INFO(0, lob) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "8192") ZEND_END_ARG_INFO() #define arginfo_pg_loread arginfo_pg_lo_read ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_lo_write, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, large_object) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 1, "null") + ZEND_ARG_INFO(0, lob) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_pg_lowrite arginfo_pg_lo_write ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_read_all, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, large_object) + ZEND_ARG_INFO(0, lob) ZEND_END_ARG_INFO() #define arginfo_pg_loreadall arginfo_pg_lo_read_all @@ -254,21 +254,21 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_lo_import, 0, 1, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, large_object_id) + ZEND_ARG_INFO(0, oid) ZEND_END_ARG_INFO() #define arginfo_pg_loimport arginfo_pg_lo_import ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_export, 0, 1, _IS_BOOL, 0) ZEND_ARG_INFO(0, connection) - ZEND_ARG_INFO(0, large_object_id) + ZEND_ARG_INFO(0, oid) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() #define arginfo_pg_loexport arginfo_pg_lo_export ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_seek, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, large_object) + ZEND_ARG_INFO(0, lob) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "SEEK_CUR") ZEND_END_ARG_INFO() @@ -276,7 +276,7 @@ ZEND_END_ARG_INFO() #define arginfo_pg_lo_tell arginfo_pg_lo_read_all ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_lo_truncate, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, large_object) + ZEND_ARG_INFO(0, lob) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -306,7 +306,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_copy_to, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") ZEND_END_ARG_INFO() @@ -314,24 +314,24 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_copy_from, 0, 3, _IS_BOOL, 0) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\"\\t\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, null_as, IS_STRING, 0, "\"\\\\\\\\N\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_escape_string, 0, 1, IS_STRING, 0) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pg_escape_bytea arginfo_pg_escape_string -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_unescape_bytea, 0, 0, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, data, IS_STRING, 1, "null") +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pg_unescape_bytea, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_escape_literal, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pg_escape_identifier arginfo_pg_escape_literal @@ -342,7 +342,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_result_error_field, 0, 2, MAY_BE_STRING|MAY_BE_FALSE|MAY_BE_NULL) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO(0, fieldcode, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, field_code, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_pg_connection_status arginfo_pg_connect_poll @@ -370,7 +370,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_send_prepare, 0, 3, MAY_BE_LONG|MAY_BE_BOOL) ZEND_ARG_INFO(0, connection) - ZEND_ARG_TYPE_INFO(0, stmtname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, statement_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -382,12 +382,12 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_result_status, 0, 1, MAY_BE_STRING|MAY_BE_LONG) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_STATUS_LONG") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_STATUS_LONG") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_get_notify, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, result) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_ASSOC") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_ASSOC") ZEND_END_ARG_INFO() #define arginfo_pg_get_pid arginfo_pg_connect_poll @@ -410,37 +410,37 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_convert, 0, 3, MAY_BE_ARRAY|M ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_insert, 0, 0, 3) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PGSQL_DML_EXEC") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_update, 0, 4, MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, ids, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, conditions, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PGSQL_DML_EXEC") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_delete, 0, 3, MAY_BE_STRING|MAY_BE_BOOL) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ids, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, conditions, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PGSQL_DML_EXEC") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pg_select, 0, 3, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, connection) ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ids, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, result_type, IS_LONG, 0, "PGSQL_ASSOC") + ZEND_ARG_TYPE_INFO(0, conditions, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PGSQL_DML_EXEC") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PGSQL_ASSOC") ZEND_END_ARG_INFO() diff --git a/ext/pgsql/tests/03sync_query.phpt b/ext/pgsql/tests/03sync_query.phpt index cc3b1b86b98a5..135e4217e503a 100644 --- a/ext/pgsql/tests/03sync_query.phpt +++ b/ext/pgsql/tests/03sync_query.phpt @@ -136,15 +136,15 @@ echo "OK"; Argument #3 must be greater than or equal to 0 Argument #3 must be less than the number of fields for this result set Argument #3 must be a field name from this result set -pg_fetch_all_columns(): Argument #2 ($field_number) must be greater than or equal to 0 -pg_fetch_all_columns(): Argument #2 ($field_number) must be less than the number of fields for this result set +pg_fetch_all_columns(): Argument #2 ($field) must be greater than or equal to 0 +pg_fetch_all_columns(): Argument #2 ($field) must be less than the number of fields for this result set Argument #2 must be greater than or equal to 0 Argument #2 must be less than the number of fields for this result set Argument #2 must be a field name from this result set -pg_field_name(): Argument #2 ($field_number) must be greater than or equal to 0 -pg_field_name(): Argument #2 ($field_number) must be less than the number of fields for this result set -pg_field_table(): Argument #2 ($field_number) must be greater than or equal to 0 -pg_field_table(): Argument #2 ($field_number) must be less than the number of fields for this result set +pg_field_name(): Argument #2 ($field) must be greater than or equal to 0 +pg_field_name(): Argument #2 ($field) must be less than the number of fields for this result set +pg_field_table(): Argument #2 ($field) must be greater than or equal to 0 +pg_field_table(): Argument #2 ($field) must be less than the number of fields for this result set array(0) { } OK diff --git a/ext/pgsql/tests/09notice.phpt b/ext/pgsql/tests/09notice.phpt index 2b4df446d8f05..f1f971195052e 100644 --- a/ext/pgsql/tests/09notice.phpt +++ b/ext/pgsql/tests/09notice.phpt @@ -72,4 +72,4 @@ bool(true) string(0) "" array(0) { } -pg_last_notice(): Argument #2 ($option) must be one of PGSQL_NOTICE_LAST, PGSQL_NOTICE_ALL, or PGSQL_NOTICE_CLEAR +pg_last_notice(): Argument #2 ($mode) must be one of PGSQL_NOTICE_LAST, PGSQL_NOTICE_ALL, or PGSQL_NOTICE_CLEAR diff --git a/ext/pgsql/tests/22pg_fetch_object.phpt b/ext/pgsql/tests/22pg_fetch_object.phpt index 22c90c4c3c08f..4eac5b788d852 100644 --- a/ext/pgsql/tests/22pg_fetch_object.phpt +++ b/ext/pgsql/tests/22pg_fetch_object.phpt @@ -40,5 +40,5 @@ object(test_class)#1 (3) { ["bin"]=> NULL } -pg_fetch_object(): Argument #3 ($class_name) must be a valid class name, does_not_exist given +pg_fetch_object(): Argument #3 ($class) must be a valid class name, does_not_exist given Ok diff --git a/ext/pgsql/tests/bug60244.phpt b/ext/pgsql/tests/bug60244.phpt index 4d2f4cbcd773b..888e51129ff56 100644 --- a/ext/pgsql/tests/bug60244.phpt +++ b/ext/pgsql/tests/bug60244.phpt @@ -42,10 +42,10 @@ pg_close($db); ?> --EXPECT-- -pg_fetch_array(): Argument #2 ($row_number) must be greater than or equal to 0 -pg_fetch_assoc(): Argument #2 ($row_number) must be greater than or equal to 0 -pg_fetch_object(): Argument #2 ($row_number) must be greater than or equal to 0 -pg_fetch_row(): Argument #2 ($row_number) must be greater than or equal to 0 +pg_fetch_array(): Argument #2 ($row) must be greater than or equal to 0 +pg_fetch_assoc(): Argument #2 ($row) must be greater than or equal to 0 +pg_fetch_object(): Argument #2 ($row) must be greater than or equal to 0 +pg_fetch_row(): Argument #2 ($row) must be greater than or equal to 0 array(2) { [0]=> string(1) "a" diff --git a/ext/pgsql/tests/skipif.inc b/ext/pgsql/tests/skipif.inc index 38c2888afa5fb..92712f3e05ea7 100644 --- a/ext/pgsql/tests/skipif.inc +++ b/ext/pgsql/tests/skipif.inc @@ -12,6 +12,11 @@ include("lcmess.inc"); if (!extension_loaded("pgsql")) { die("skip pgsql extension not loaded\n"); } +if (getenv("SKIP_REPEAT")) { + // pgsql tests are order-dependent. + // We should probably change that, but in the meantime do not allow repetition. + die("skip Cannot repeat pgsql tests"); +} $conn = @pg_connect($conn_str); if (!is_resource($conn)) { die("skip could not connect\n"); diff --git a/ext/phar/func_interceptors.c b/ext/phar/func_interceptors.c index f7cfe2249f777..9987f79572ffd 100644 --- a/ext/phar/func_interceptors.c +++ b/ext/phar/func_interceptors.c @@ -36,7 +36,7 @@ PHAR_FUNC(phar_opendir) /* {{{ */ goto skip_phar; } - if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|z", &filename, &filename_len, &zcontext) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|r!", &filename, &filename_len, &zcontext) == FAILURE) { RETURN_THROWS(); } @@ -347,7 +347,7 @@ PHAR_FUNC(phar_fopen) /* {{{ */ /* no need to check, include_path not even specified in fopen/ no active phars */ goto skip_phar; } - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "ps|br", &filename, &filename_len, &mode, &mode_len, &use_include_path, &zcontext) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "ps|br!", &filename, &filename_len, &mode, &mode_len, &use_include_path, &zcontext) == FAILURE) { goto skip_phar; } if (use_include_path || (!IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://"))) { diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 0d8aef562e5f2..0cb94de993519 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -2336,10 +2336,10 @@ PHP_METHOD(Phar, convertToExecutable) size_t ext_len = 0; uint32_t flags; zend_object *ret; - /* a number that is not 0, 1 or 2 (Which is also Greg's birthday, so there) */ - zend_long format = 9021976, method = 9021976; + zend_long format, method; + zend_bool format_is_null = 1, method_is_null = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|lls!", &format, &method, &ext, &ext_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!l!s!", &format, &format_is_null, &method, &method_is_null, &ext, &ext_len) == FAILURE) { RETURN_THROWS(); } @@ -2351,9 +2351,12 @@ PHP_METHOD(Phar, convertToExecutable) RETURN_THROWS(); } + if (format_is_null) { + format = PHAR_FORMAT_SAME; + } switch (format) { - case 9021976: - case PHAR_FORMAT_SAME: /* null is converted to 0 */ + case 9021976: /* Retained for BC */ + case PHAR_FORMAT_SAME: /* by default, use the existing format */ if (phar_obj->archive->is_tar) { format = PHAR_FORMAT_TAR; @@ -2373,8 +2376,11 @@ PHP_METHOD(Phar, convertToExecutable) RETURN_THROWS(); } - switch (method) { - case 9021976: + if (method_is_null) { + flags = phar_obj->archive->flags & PHAR_FILE_COMPRESSION_MASK; + } else { + switch (method) { + case 9021976: /* Retained for BC */ flags = phar_obj->archive->flags & PHAR_FILE_COMPRESSION_MASK; break; case 0: @@ -2414,6 +2420,7 @@ PHP_METHOD(Phar, convertToExecutable) zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Unknown compression specified, please pass one of Phar::GZ or Phar::BZ2"); RETURN_THROWS(); + } } is_data = phar_obj->archive->is_data; @@ -2440,18 +2447,21 @@ PHP_METHOD(Phar, convertToData) size_t ext_len = 0; uint32_t flags; zend_object *ret; - /* a number that is not 0, 1 or 2 (Which is also Greg's birthday so there) */ - zend_long format = 9021976, method = 9021976; + zend_long format, method; + zend_bool format_is_null = 1, method_is_null = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|lls!", &format, &method, &ext, &ext_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!l!s!", &format, &format_is_null, &method, &method_is_null, &ext, &ext_len) == FAILURE) { RETURN_THROWS(); } PHAR_ARCHIVE_OBJECT(); + if (format_is_null) { + format = PHAR_FORMAT_SAME; + } switch (format) { - case 9021976: - case PHAR_FORMAT_SAME: /* null is converted to 0 */ + case 9021976: /* Retained for BC */ + case PHAR_FORMAT_SAME: /* by default, use the existing format */ if (phar_obj->archive->is_tar) { format = PHAR_FORMAT_TAR; @@ -2476,8 +2486,11 @@ PHP_METHOD(Phar, convertToData) RETURN_THROWS(); } - switch (method) { - case 9021976: + if (method_is_null) { + flags = phar_obj->archive->flags & PHAR_FILE_COMPRESSION_MASK; + } else { + switch (method) { + case 9021976: /* Retained for BC */ flags = phar_obj->archive->flags & PHAR_FILE_COMPRESSION_MASK; break; case 0: @@ -2517,6 +2530,7 @@ PHP_METHOD(Phar, convertToData) zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Unknown compression specified, please pass one of Phar::GZ or Phar::BZ2"); RETURN_THROWS(); + } } is_data = phar_obj->archive->is_data; @@ -4505,17 +4519,21 @@ PHP_METHOD(PharFileInfo, getCompressedSize) /* {{{ Returns whether the entry is compressed, and whether it is compressed with Phar::GZ or Phar::BZ2 if specified */ PHP_METHOD(PharFileInfo, isCompressed) { - /* a number that is not Phar::GZ or Phar::BZ2 */ - zend_long method = 9021976; + zend_long method; + zend_bool method_is_null = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &method) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &method, &method_is_null) == FAILURE) { RETURN_THROWS(); } PHAR_ENTRY_OBJECT(); + if (method_is_null) { + RETURN_BOOL(entry_obj->entry->flags & PHAR_ENT_COMPRESSION_MASK); + } + switch (method) { - case 9021976: + case 9021976: /* Retained for BC */ RETURN_BOOL(entry_obj->entry->flags & PHAR_ENT_COMPRESSION_MASK); case PHAR_ENT_COMPRESSED_GZ: RETURN_BOOL(entry_obj->entry->flags & PHAR_ENT_COMPRESSED_GZ); diff --git a/ext/phar/phar_object.stub.php b/ext/phar/phar_object.stub.php index 5fda00d4d7192..f51b3b0368b3e 100644 --- a/ext/phar/phar_object.stub.php +++ b/ext/phar/phar_object.stub.php @@ -13,52 +13,52 @@ public function __construct(string $filename, int $flags = FilesystemIterator::S public function __destruct() {} /** @return void */ - public function addEmptyDir(string $dirname) {} + public function addEmptyDir(string $directory) {} /** @return void */ - public function addFile(string $filename, ?string $localname = null) {} + public function addFile(string $filename, ?string $localName = null) {} /** @return void */ - public function addFromString(string $localname, string $contents) {} + public function addFromString(string $localName, string $contents) {} /** @return array|false */ - public function buildFromDirectory(string $base_dir, string $regex = "") {} + public function buildFromDirectory(string $directory, string $pattern = "") {} /** @return array|false */ - public function buildFromIterator(Traversable $iterator, ?string $base_directory = null) {} + public function buildFromIterator(Traversable $iterator, ?string $baseDirectory = null) {} /** @return void */ - public function compressFiles(int $compression_type) {} + public function compressFiles(int $compression) {} /** @return bool */ public function decompressFiles() {} /** @return Phar|null */ - public function compress(int $compression_type, ?string $file_ext = null) {} + public function compress(int $compression, ?string $extension = null) {} /** @return Phar|null */ - public function decompress(?string $file_ext = null) {} + public function decompress(?string $extension = null) {} /** @return Phar|null */ - public function convertToExecutable(int $format = 9021976, int $compression_type = 9021976, ?string $file_ext = null) {} + public function convertToExecutable(?int $format = null, ?int $compression = null, ?string $extension = null) {} /** @return Phar|null */ - public function convertToData(int $format = 9021976, int $compression_type = 9021976, ?string $file_ext = null) {} + public function convertToData(?int $format = null, ?int $compression = null, ?string $extension = null) {} /** @return bool */ - public function copy(string $newfile, string $oldfile) {} + public function copy(string $to, string $from) {} /** @return int */ public function count(int $mode = COUNT_NORMAL) {} /** @return bool */ - public function delete(string $entry) {} + public function delete(string $localName) {} /** @return bool */ public function delMetadata() {} /** @return bool */ - public function extractTo(string $pathto, array|string|null $files = null, bool $overwrite = false) {} + public function extractTo(string $directory, array|string|null $files = null, bool $overwrite = false) {} /** @return string|null */ public function getAlias() {} @@ -67,7 +67,7 @@ public function getAlias() {} public function getPath() {} /** @return mixed */ - public function getMetadata(array $unserialize_options = []) {} + public function getMetadata(array $unserializeOptions = []) {} /** @return bool */ public function getModified() {} @@ -91,53 +91,53 @@ public function isBuffering() {} public function isCompressed() {} /** @return bool */ - public function isFileFormat(int $fileformat) {} + public function isFileFormat(int $format) {} /** @return bool */ public function isWritable() {} /** - * @param string $entry + * @param string $localName * @return bool */ - public function offsetExists($entry) {} + public function offsetExists($localName) {} /** - * @param string $entry + * @param string $localName * @return PharFileInfo */ - public function offsetGet($entry) {} + public function offsetGet($localName) {} /** - * @param string $entry + * @param string $localName * @param resource|string $value * @return void */ - public function offsetSet($entry, $value) {} + public function offsetSet($localName, $value) {} /** - * @param string $entry + * @param string $localName * @return bool */ - public function offsetUnset($entry) {} + public function offsetUnset($localName) {} /** @return bool */ public function setAlias(string $alias) {} /** @return bool */ - public function setDefaultStub(?string $index = null, ?string $webindex = null) {} + public function setDefaultStub(?string $index = null, ?string $webIndex = null) {} /** @return void */ public function setMetadata(mixed $metadata) {} /** @return void */ - public function setSignatureAlgorithm(int $algorithm, ?string $privatekey = null) {} + public function setSignatureAlgorithm(int $algo, ?string $privateKey = null) {} /** - * @param resource $newstub + * @param resource $stub * @return bool */ - public function setStub($newstub, int $maxlen = -1) {} + public function setStub($stub, int $length = -1) {} /** @return void */ public function startBuffering() {} @@ -147,11 +147,11 @@ public function stopBuffering() {} final public static function apiVersion(): string {} - final public static function canCompress(int $method = 0): bool {} + final public static function canCompress(int $compression = 0): bool {} final public static function canWrite(): bool {} - final public static function createDefaultStub(?string $index = null, ?string $webindex = null): string {} + final public static function createDefaultStub(?string $index = null, ?string $webIndex = null): string {} final public static function getSupportedCompression(): array {} @@ -159,30 +159,29 @@ final public static function getSupportedSignatures(): array {} final public static function interceptFileFuncs(): void {} - final public static function isValidPharFilename( - string $filename, bool $executable = true): bool {} + final public static function isValidPharFilename(string $filename, bool $executable = true): bool {} final public static function loadPhar(string $filename, ?string $alias = null): bool {} final public static function mapPhar(?string $alias = null, int $offset = 0): bool {} - final public static function running(bool $retphar = true): string {} + final public static function running(bool $returnPhar = true): string {} - final public static function mount(string $inphar, string $externalfile): void {} + final public static function mount(string $pharPath, string $externalPath): void {} - final public static function mungServer(array $munglist): void {} + final public static function mungServer(array $variables): void {} - final public static function unlinkArchive(string $archive): bool {} + final public static function unlinkArchive(string $filename): bool {} final public static function webPhar( - ?string $alias = null, ?string $index = null, string $f404 = "", - array $mimetypes = [], ?callable $rewrites = null): void {} + ?string $alias = null, ?string $index = null, string $fileNotFoundScript = "", + array $mimeTypes = [], ?callable $rewrite = null): void {} } class PharData extends RecursiveDirectoryIterator implements Countable, ArrayAccess { /** @implementation-alias Phar::__construct */ - public function __construct(string $filename, int $flags = FilesystemIterator::SKIP_DOTS|FilesystemIterator::UNIX_PATHS, ?string $alias = null, int $fileformat = 0) {} + public function __construct(string $filename, int $flags = FilesystemIterator::SKIP_DOTS|FilesystemIterator::UNIX_PATHS, ?string $alias = null, int $format = 0) {} /** @implementation-alias Phar::__destruct */ public function __destruct() {} @@ -191,37 +190,37 @@ public function __destruct() {} * @return void * @implementation-alias Phar::addEmptyDir */ - public function addEmptyDir(string $dirname) {} + public function addEmptyDir(string $directory) {} /** * @return void * @implementation-alias Phar::addFile */ - public function addFile(string $filename, ?string $localname = null) {} + public function addFile(string $filename, ?string $localName = null) {} /** * @return void * @implementation-alias Phar::addFromString */ - public function addFromString(string $localname, string $contents) {} + public function addFromString(string $localName, string $contents) {} /** * @return array|false * @implementation-alias Phar::buildFromDirectory */ - public function buildFromDirectory(string $base_dir, string $regex = "") {} + public function buildFromDirectory(string $directory, string $pattern = "") {} /** * @return array|false * @implementation-alias Phar::buildFromIterator */ - public function buildFromIterator(Traversable $iterator, ?string $base_directory = null) {} + public function buildFromIterator(Traversable $iterator, ?string $baseDirectory = null) {} /** * @return void * @implementation-alias Phar::compressFiles */ - public function compressFiles(int $compression_type) {} + public function compressFiles(int $compression) {} /** * @return bool @@ -233,31 +232,31 @@ public function decompressFiles() {} * @return Phar|null * @implementation-alias Phar::compress */ - public function compress(int $compression_type, ?string $file_ext = null) {} + public function compress(int $compression, ?string $extension = null) {} /** * @return Phar|null * @implementation-alias Phar::decompress */ - public function decompress(?string $file_ext = null) {} + public function decompress(?string $extension = null) {} /** * @return Phar|null * @implementation-alias Phar::convertToExecutable */ - public function convertToExecutable(int $format = 9021976, int $compression_type = 9021976, ?string $file_ext = null) {} + public function convertToExecutable(?int $format = null, ?int $compression = null, ?string $extension = null) {} /** * @return Phar|null * @implementation-alias Phar::convertToData */ - public function convertToData(int $format = 9021976, int $compression_type = 9021976, ?string $file_ext = null) {} + public function convertToData(?int $format = null, ?int $compression = null, ?string $extension = null) {} /** * @return bool * @implementation-alias Phar::copy */ - public function copy(string $newfile, string $oldfile) {} + public function copy(string $to, string $from) {} /** * @return int @@ -269,7 +268,7 @@ public function count(int $mode = COUNT_NORMAL) {} * @return bool * @implementation-alias Phar::delete */ - public function delete(string $entry) {} + public function delete(string $localName) {} /** * @return bool @@ -281,7 +280,7 @@ public function delMetadata() {} * @return bool * @implementation-alias Phar::extractTo */ - public function extractTo(string $pathto, array|string|null $files = null, bool $overwrite = false) {} + public function extractTo(string $directory, array|string|null $files = null, bool $overwrite = false) {} /** * @return string|null @@ -347,7 +346,7 @@ public function isCompressed() {} * @return bool * @implementation-alias Phar::isFileFormat */ - public function isFileFormat(int $fileformat) {} + public function isFileFormat(int $format) {} /** * @return bool @@ -356,33 +355,33 @@ public function isFileFormat(int $fileformat) {} public function isWritable() {} /** - * @param string $entry + * @param string $localName * @return bool * @implementation-alias Phar::offsetExists */ - public function offsetExists($entry) {} + public function offsetExists($localName) {} /** - * @param string $entry + * @param string $localName * @return PharFileInfo * @implementation-alias Phar::offsetGet */ - public function offsetGet($entry) {} + public function offsetGet($localName) {} /** - * @param string $entry + * @param string $localName * @param resource|string $value * @return void * @implementation-alias Phar::offsetSet */ - public function offsetSet($entry, $value) {} + public function offsetSet($localName, $value) {} /** - * @param string $entry + * @param string $localName * @return bool * @implementation-alias Phar::offsetUnset */ - public function offsetUnset($entry) {} + public function offsetUnset($localName) {} /** * @return bool @@ -394,7 +393,7 @@ public function setAlias(string $alias) {} * @return bool * @implementation-alias Phar::setDefaultStub */ - public function setDefaultStub(?string $index = null, ?string $webindex = null) {} + public function setDefaultStub(?string $index = null, ?string $webIndex = null) {} /** * @return void @@ -406,7 +405,7 @@ public function setMetadata(mixed $metadata) {} * @return void * @implementation-alias Phar::setSignatureAlgorithm */ - public function setSignatureAlgorithm(int $algorithm, ?string $privatekey = null) {} + public function setSignatureAlgorithm(int $algo, ?string $privateKey = null) {} /** * @param resource $newstub @@ -431,13 +430,13 @@ public function stopBuffering() {} final public static function apiVersion(): string {} /** @implementation-alias Phar::canCompress */ - final public static function canCompress(int $method = 0): bool {} + final public static function canCompress(int $compression = 0): bool {} /** @implementation-alias Phar::canWrite */ final public static function canWrite(): bool {} /** @implementation-alias Phar::createDefaultStub */ - final public static function createDefaultStub(?string $index = null, ?string $webindex = null): string {} + final public static function createDefaultStub(?string $index = null, ?string $webIndex = null): string {} /** @implementation-alias Phar::getSupportedCompression */ final public static function getSupportedCompression(): array {} @@ -449,8 +448,7 @@ final public static function getSupportedSignatures(): array {} final public static function interceptFileFuncs(): void {} /** @implementation-alias Phar::isValidPharFilename */ - final public static function isValidPharFilename( - string $filename, bool $executable = true): bool {} + final public static function isValidPharFilename(string $filename, bool $executable = true): bool {} /** @implementation-alias Phar::loadPhar */ final public static function loadPhar(string $filename, ?string $alias = null): bool {} @@ -459,21 +457,21 @@ final public static function loadPhar(string $filename, ?string $alias = null): final public static function mapPhar(?string $alias = null, int $offset = 0): bool {} /** @implementation-alias Phar::running */ - final public static function running(bool $retphar = true): string {} + final public static function running(bool $returnPhar = true): string {} /** @implementation-alias Phar::mount */ - final public static function mount(string $inphar, string $externalfile): void {} + final public static function mount(string $pharPath, string $externalPath): void {} /** @implementation-alias Phar::mungServer */ - final public static function mungServer(array $munglist): void {} + final public static function mungServer(array $variables): void {} /** @implementation-alias Phar::unlinkArchive */ - final public static function unlinkArchive(string $archive): bool {} + final public static function unlinkArchive(string $filename): bool {} /** @implementation-alias Phar::webPhar */ final public static function webPhar( - ?string $alias = null, ?string $index = null, string $f404 = "", - array $mimetypes = [], ?callable $rewrites = null): void {} + ?string $alias = null, ?string $index = null, string $fileNotFoundScript = "", + array $mimeTypes = [], ?callable $rewrite = null): void {} } class PharFileInfo extends SplFileInfo @@ -486,7 +484,7 @@ public function __destruct() {} public function chmod(int $perms) {} /** @return bool */ - public function compress(int $compression_type) {} + public function compress(int $compression) {} /** @return bool */ public function decompress() {} @@ -504,7 +502,7 @@ public function getCRC32() {} public function getContent() {} /** @return mixed */ - public function getMetadata(array $unserialize_options = []) {} + public function getMetadata(array $unserializeOptions = []) {} /** @return int */ public function getPharFlags() {} @@ -513,7 +511,7 @@ public function getPharFlags() {} public function hasMetadata() {} /** @return bool */ - public function isCompressed(int $compression_type = 9021976) {} + public function isCompressed(?int $compression = null) {} /** @return bool */ public function isCRCChecked() {} diff --git a/ext/phar/phar_object_arginfo.h b/ext/phar/phar_object_arginfo.h index 916312dba6b4b..0998eec27a5ec 100644 --- a/ext/phar/phar_object_arginfo.h +++ b/ext/phar/phar_object_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: e67cd4d59555843688a1bdd90ecd7d3924f1ee29 */ + * Stub hash: e06a2ea3d97778e61aca0f91fda7b72c29ef171d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -11,55 +11,55 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar___destruct, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_addEmptyDir, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, dirname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_addFile, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, localname, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, localName, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_addFromString, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, localname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, localName, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, contents, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_buildFromDirectory, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, base_dir, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, regex, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_buildFromIterator, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base_directory, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, baseDirectory, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_compressFiles, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, compression_type, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, compression, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Phar_decompressFiles arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_compress, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, compression_type, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file_ext, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO(0, compression, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_decompress, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file_ext, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_convertToExecutable, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_LONG, 0, "9021976") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compression_type, IS_LONG, 0, "9021976") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file_ext, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compression, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_Phar_convertToData arginfo_class_Phar_convertToExecutable ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_copy, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, newfile, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, oldfile, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_count, 0, 0, 0) @@ -67,13 +67,13 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_count, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_delete, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, entry, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, localName, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Phar_delMetadata arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_extractTo, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, pathto, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, files, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, overwrite, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -83,7 +83,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_Phar_getPath arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_getMetadata, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, unserialize_options, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, unserializeOptions, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() #define arginfo_class_Phar_getModified arginfo_class_Phar___destruct @@ -101,19 +101,19 @@ ZEND_END_ARG_INFO() #define arginfo_class_Phar_isCompressed arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_isFileFormat, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, fileformat, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Phar_isWritable arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_offsetExists, 0, 0, 1) - ZEND_ARG_INFO(0, entry) + ZEND_ARG_INFO(0, localName) ZEND_END_ARG_INFO() #define arginfo_class_Phar_offsetGet arginfo_class_Phar_offsetExists ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_offsetSet, 0, 0, 2) - ZEND_ARG_INFO(0, entry) + ZEND_ARG_INFO(0, localName) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() @@ -125,7 +125,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_setDefaultStub, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, index, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, webindex, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, webIndex, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_setMetadata, 0, 0, 1) @@ -133,13 +133,13 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_setMetadata, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_setSignatureAlgorithm, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, algorithm, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, privatekey, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO(0, algo, IS_LONG, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, privateKey, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Phar_setStub, 0, 0, 1) - ZEND_ARG_INFO(0, newstub) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxlen, IS_LONG, 0, "-1") + ZEND_ARG_INFO(0, stub) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #define arginfo_class_Phar_startBuffering arginfo_class_Phar___destruct @@ -150,7 +150,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_apiVersion, 0, 0, IS_ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_canCompress, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, method, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compression, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_canWrite, 0, 0, _IS_BOOL, 0) @@ -158,7 +158,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_createDefaultStub, 0, 0, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, index, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, webindex, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, webIndex, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_getSupportedCompression, 0, 0, IS_ARRAY, 0) @@ -185,35 +185,35 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_mapPhar, 0, 0, _IS_BO ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_running, 0, 0, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retphar, _IS_BOOL, 0, "true") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, returnPhar, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_mount, 0, 2, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, inphar, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, externalfile, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pharPath, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, externalPath, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_mungServer, 0, 1, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, munglist, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, variables, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_unlinkArchive, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, archive, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Phar_webPhar, 0, 0, IS_VOID, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, alias, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, index, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, f404, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mimetypes, IS_ARRAY, 0, "[]") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rewrites, IS_CALLABLE, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fileNotFoundScript, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mimeTypes, IS_ARRAY, 0, "[]") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rewrite, IS_CALLABLE, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PharData___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, alias, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fileformat, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_class_PharData___destruct arginfo_class_Phar___destruct @@ -254,7 +254,9 @@ ZEND_END_ARG_INFO() #define arginfo_class_PharData_getPath arginfo_class_Phar___destruct -#define arginfo_class_PharData_getMetadata arginfo_class_Phar_getMetadata +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PharData_getMetadata, 0, 0, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, unserialize_options, IS_ARRAY, 0, "[]") +ZEND_END_ARG_INFO() #define arginfo_class_PharData_getModified arginfo_class_Phar___destruct @@ -290,7 +292,10 @@ ZEND_END_ARG_INFO() #define arginfo_class_PharData_setSignatureAlgorithm arginfo_class_Phar_setSignatureAlgorithm -#define arginfo_class_PharData_setStub arginfo_class_Phar_setStub +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PharData_setStub, 0, 0, 1) + ZEND_ARG_INFO(0, newstub) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxlen, IS_LONG, 0, "-1") +ZEND_END_ARG_INFO() #define arginfo_class_PharData_startBuffering arginfo_class_Phar___destruct @@ -355,7 +360,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_PharFileInfo_hasMetadata arginfo_class_Phar___destruct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PharFileInfo_isCompressed, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compression_type, IS_LONG, 0, "9021976") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compression, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_PharFileInfo_isCRCChecked arginfo_class_Phar___destruct diff --git a/ext/phar/tests/badparameters.phpt b/ext/phar/tests/badparameters.phpt index 746858c7c467e..a52a6a03a3737 100644 --- a/ext/phar/tests/badparameters.phpt +++ b/ext/phar/tests/badparameters.phpt @@ -228,14 +228,14 @@ try { } ?> --EXPECTF-- -Phar::mungServer(): Argument #1 ($munglist) must be of type array, string given +Phar::mungServer(): Argument #1 ($variables) must be of type array, string given Phar::createDefaultStub(): Argument #1 ($index) must be of type ?string, array given Phar::loadPhar(): Argument #1 ($filename) must be of type string, array given -Phar::canCompress(): Argument #1 ($method) must be of type int, string given +Phar::canCompress(): Argument #1 ($compression) must be of type int, string given Phar::__construct(): Argument #1 ($filename) must be of type string, array given -Phar::convertToExecutable(): Argument #1 ($format) must be of type int, array given -Phar::convertToData(): Argument #1 ($format) must be of type int, array given -PharData::delete(): Argument #1 ($entry) must be of type string, array given +Phar::convertToExecutable(): Argument #1 ($format) must be of type ?int, array given +Phar::convertToData(): Argument #1 ($format) must be of type ?int, array given +PharData::delete(): Argument #1 ($localName) must be of type string, array given Cannot write out phar archive, phar is read-only Entry oops does not exist and cannot be deleted %sfrontcontroller10.phar @@ -244,23 +244,23 @@ A Phar alias cannot be set in a plain tar archive Phar::setAlias(): Argument #1 ($alias) must be of type string, array given Cannot change stub, phar is read-only A Phar stub cannot be set in a plain tar archive -Phar::setStub(): Argument #1 ($newstub) must be of type string, array given +Phar::setStub(): Argument #1 ($stub) must be of type string, array given A Phar stub cannot be set in a plain tar archive Phar::setDefaultStub(): Argument #1 ($index) must be of type ?string, array given Cannot change stub: phar.readonly=1 Cannot set signature algorithm, phar is read-only -Phar::compress(): Argument #1 ($compression_type) must be of type int, array given +Phar::compress(): Argument #1 ($compression) must be of type int, array given Cannot compress phar archive, phar is read-only -Phar::compressFiles(): Argument #1 ($compression_type) must be of type int, array given +Phar::compressFiles(): Argument #1 ($compression) must be of type int, array given Phar is readonly, cannot change compression Phar::copy() expects exactly 2 arguments, 1 given Cannot copy "a" to "b", phar is read-only -Phar::offsetExists(): Argument #1 ($entry) must be of type string, array given -Phar::offsetGet(): Argument #1 ($entry) must be of type string, array given +Phar::offsetExists(): Argument #1 ($localName) must be of type string, array given +Phar::offsetGet(): Argument #1 ($localName) must be of type string, array given Phar::offsetSet() expects exactly 2 arguments, 1 given -PharData::offsetUnset(): Argument #1 ($entry) must be of type string, array given +PharData::offsetUnset(): Argument #1 ($localName) must be of type string, array given Write operations disabled by the php.ini setting phar.readonly -Phar::addEmptyDir(): Argument #1 ($dirname) must be of type string, array given +Phar::addEmptyDir(): Argument #1 ($directory) must be of type string, array given Phar::addFile(): Argument #1 ($filename) must be of type string, array given Phar::addFromString() expects exactly 2 arguments, 1 given Write operations disabled by the php.ini setting phar.readonly diff --git a/ext/phar/tests/bug64931/bug64931.phpt b/ext/phar/tests/bug64931/bug64931.phpt index 6d29b301aafa7..1826bc1ccfefe 100644 --- a/ext/phar/tests/bug64931/bug64931.phpt +++ b/ext/phar/tests/bug64931/bug64931.phpt @@ -53,4 +53,4 @@ CAUGHT: Cannot create any files in magic ".phar" directory CAUGHT: Cannot create any files in magic ".phar" directory CAUGHT: Cannot create any files in magic ".phar" directory CAUGHT: Cannot create any files in magic ".phar" directory -CAUGHT: Phar::addFromString(): Argument #1 ($localname) must not contain any null bytes +CAUGHT: Phar::addFromString(): Argument #1 ($localName) must not contain any null bytes diff --git a/ext/phar/tests/cache_list/frontcontroller31.phpt b/ext/phar/tests/cache_list/frontcontroller31.phpt index 897272999cff6..41e36bf669962 100644 --- a/ext/phar/tests/cache_list/frontcontroller31.phpt +++ b/ext/phar/tests/cache_list/frontcontroller31.phpt @@ -13,7 +13,7 @@ Content-type: text/html; charset=UTF-8 --FILE_EXTERNAL-- files/frontcontroller16.phar --EXPECTF-- -Fatal error: Uncaught TypeError: Phar::webPhar(): Argument #5 ($rewrites) must be a valid callback or null, class "fail" not found in %s:%d +Fatal error: Uncaught TypeError: Phar::webPhar(): Argument #5 ($rewrite) must be a valid callback or null, class "fail" not found in %s:%d Stack trace: #0 %s(%d): Phar::webPhar('test.phar', '/index.php', '', Array, Array) #1 {main} diff --git a/ext/phar/tests/create_path_error.phpt b/ext/phar/tests/create_path_error.phpt index a3da9c276c13c..e6dfabaf4e75e 100644 --- a/ext/phar/tests/create_path_error.phpt +++ b/ext/phar/tests/create_path_error.phpt @@ -78,4 +78,4 @@ string(5) "query" 11:Error: file_put_contents(phar://%s): Failed to open stream: phar error: invalid path "%s" contains illegal character 12:Error: file_put_contents(phar://%s): Failed to open stream: phar error: invalid path "%s" contains illegal character 13:Error: file_put_contents(phar://%s): Failed to open stream: phar error: invalid path "%s" contains illegal character -Exception: Phar::offsetSet(): Argument #1 ($entry) must not contain any null bytes +Exception: Phar::offsetSet(): Argument #1 ($localName) must not contain any null bytes diff --git a/ext/phar/tests/fgc_edgecases.phpt b/ext/phar/tests/fgc_edgecases.phpt index aad575749bd37..ae9381ff1e6c7 100644 --- a/ext/phar/tests/fgc_edgecases.phpt +++ b/ext/phar/tests/fgc_edgecases.phpt @@ -71,7 +71,7 @@ echo file_get_contents("./hi", 0, $context, 50000); echo file_get_contents("./hi"); echo file_get_contents("./hi", 0, $context, 0, 0); ?> -file_get_contents(): Argument #5 ($max_length) must be greater than or equal to 0 +file_get_contents(): Argument #5 ($length) must be greater than or equal to 0 test test --EXPECTF-- -SplFileInfo::setFileClass(): Argument #1 ($class_name) must be a class name derived from SplFileObject, SplFileInfo given +SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, SplFileInfo given MyFile::__construct(phar://%s/a.php) a.php MyFile::__construct(phar://%s/b/c.php) diff --git a/ext/phar/tests/phar_unlinkarchive.phpt b/ext/phar/tests/phar_unlinkarchive.phpt index a900c1db3fbb5..c6fe0dc508206 100644 --- a/ext/phar/tests/phar_unlinkarchive.phpt +++ b/ext/phar/tests/phar_unlinkarchive.phpt @@ -92,7 +92,7 @@ __HALT_COMPILER(); Unknown phar archive "" Unknown phar archive "%sphar_unlinkarchive.phar" Unknown phar archive "%sphar_unlinkarchive.phar.tar": internal corruption of phar "%sphar_unlinkarchive.phar.tar" (truncated entry) -Phar::unlinkArchive(): Argument #1 ($archive) must be of type string, array given +Phar::unlinkArchive(): Argument #1 ($filename) must be of type string, array given bool(false) string(48) "" phar archive "%sphar_unlinkarchive.phar" has open file handles or objects. fclose() all file handles, and unset() all objects prior to calling unlinkArchive() diff --git a/ext/posix/posix.stub.php b/ext/posix/posix.stub.php index d009d7df674d3..a509d9460f427 100644 --- a/ext/posix/posix.stub.php +++ b/ext/posix/posix.stub.php @@ -2,7 +2,7 @@ /** @generate-function-entries */ -function posix_kill(int $pid, int $sig): bool {} +function posix_kill(int $process_id, int $signal): bool {} function posix_getpid(): int {} @@ -10,22 +10,22 @@ function posix_getppid(): int {} function posix_getuid(): int {} -function posix_setuid(int $uid): bool {} +function posix_setuid(int $user_id): bool {} function posix_geteuid(): int {} #ifdef HAVE_SETEUID -function posix_seteuid(int $uid): bool {} +function posix_seteuid(int $user_id): bool {} #endif function posix_getgid(): int {} -function posix_setgid(int $gid): bool {} +function posix_setgid(int $group_id): bool {} function posix_getegid(): int {} #ifdef HAVE_SETEGID -function posix_setegid(int $gid): bool {} +function posix_setegid(int $group_id): bool {} #endif #ifdef HAVE_GETGROUPS @@ -42,14 +42,14 @@ function posix_getpgrp(): int {} function posix_setsid(): int {} #endif -function posix_setpgid(int $pid, int $pgid): bool {} +function posix_setpgid(int $process_id, int $process_group_id): bool {} #ifdef HAVE_GETPGID -function posix_getpgid(int $pid): int|false {} +function posix_getpgid(int $process_id): int|false {} #endif #ifdef HAVE_GETSID -function posix_getsid(int $pid): int|false {} +function posix_getsid(int $process_id): int|false {} #endif function posix_uname(): array|false {} @@ -61,38 +61,38 @@ function posix_times(): array|false {} function posix_ctermid(): string|false {} #endif -/** @param resource|int $fd */ -function posix_ttyname($fd): string|false {} +/** @param resource|int $file_descriptor */ +function posix_ttyname($file_descriptor): string|false {} -/** @param resource|int $fd */ -function posix_isatty($fd): bool {} +/** @param resource|int $file_descriptor */ +function posix_isatty($file_descriptor): bool {} function posix_getcwd(): string|false {} #ifdef HAVE_MKFIFO -function posix_mkfifo(string $pathname, int $mode): bool {} +function posix_mkfifo(string $filename, int $permissions): bool {} #endif #ifdef HAVE_MKNOD -function posix_mknod(string $pathname, int $mode, int $major = 0, int $minor = 0): bool {} +function posix_mknod(string $filename, int $flags, int $major = 0, int $minor = 0): bool {} #endif -function posix_access(string $file, int $mode = 0): bool {} +function posix_access(string $filename, int $flags = 0): bool {} function posix_getgrnam(string $name): array|false {} -function posix_getgrgid(int $gid): array|false {} +function posix_getgrgid(int $group_id): array|false {} function posix_getpwnam(string $username): array|false {} -function posix_getpwuid(int $uid): array|false {} +function posix_getpwuid(int $user_id): array|false {} #ifdef HAVE_GETRLIMIT function posix_getrlimit(): array|false {} #endif #ifdef HAVE_SETRLIMIT -function posix_setrlimit(int $resource, int $softlimit, int $hardlimit): bool {} +function posix_setrlimit(int $resource, int $soft_limit, int $hard_limit): bool {} #endif function posix_get_last_error(): int {} @@ -100,8 +100,8 @@ function posix_get_last_error(): int {} /** @alias posix_get_last_error */ function posix_errno(): int {} -function posix_strerror(int $errno): string {} +function posix_strerror(int $error_code): string {} #ifdef HAVE_INITGROUPS -function posix_initgroups(string $name, int $base_group_id): bool {} +function posix_initgroups(string $username, int $group_id): bool {} #endif diff --git a/ext/posix/posix_arginfo.h b/ext/posix/posix_arginfo.h index 9cb7523d4bdf3..1d7b90f364d07 100644 --- a/ext/posix/posix_arginfo.h +++ b/ext/posix/posix_arginfo.h @@ -1,9 +1,9 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c97ecb9b83ed873ca1ee2046ade191eef5bff25b */ + * Stub hash: 6d1383a6f98104498b466ce5d9dcf5721760e8b7 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_kill, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pid, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, sig, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, signal, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_getpid, 0, 0, IS_LONG, 0) @@ -14,28 +14,28 @@ ZEND_END_ARG_INFO() #define arginfo_posix_getuid arginfo_posix_getpid ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_setuid, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, uid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, user_id, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_posix_geteuid arginfo_posix_getpid #if defined(HAVE_SETEUID) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_seteuid, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, uid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, user_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #define arginfo_posix_getgid arginfo_posix_getpid ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_setgid, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, gid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, group_id, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_posix_getegid arginfo_posix_getpid #if defined(HAVE_SETEGID) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_setegid, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, gid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, group_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -57,19 +57,19 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_setpgid, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pid, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, pgid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_group_id, IS_LONG, 0) ZEND_END_ARG_INFO() #if defined(HAVE_GETPGID) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getpgid, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, pid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_GETSID) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getsid, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, pid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -84,11 +84,11 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_ttyname, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fd) + ZEND_ARG_INFO(0, file_descriptor) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_isatty, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, fd) + ZEND_ARG_INFO(0, file_descriptor) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getcwd, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) @@ -96,23 +96,23 @@ ZEND_END_ARG_INFO() #if defined(HAVE_MKFIFO) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_mkfifo, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pathname, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if defined(HAVE_MKNOD) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_mknod, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pathname, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, major, IS_LONG, 0, "0") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, minor, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_access, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getgrnam, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -120,7 +120,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getgrnam, 0, 1, MAY_BE_ARR ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getgrgid, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, gid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, group_id, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getpwnam, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -128,7 +128,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getpwnam, 0, 1, MAY_BE_ARR ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_posix_getpwuid, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, uid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, user_id, IS_LONG, 0) ZEND_END_ARG_INFO() #if defined(HAVE_GETRLIMIT) @@ -139,8 +139,8 @@ ZEND_END_ARG_INFO() #if defined(HAVE_SETRLIMIT) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_setrlimit, 0, 3, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, resource, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, softlimit, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, hardlimit, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, soft_limit, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, hard_limit, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -149,13 +149,13 @@ ZEND_END_ARG_INFO() #define arginfo_posix_errno arginfo_posix_getpid ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_strerror, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, errno, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) ZEND_END_ARG_INFO() #if defined(HAVE_INITGROUPS) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_posix_initgroups, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, base_group_id, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, group_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c index 63732b77b087b..4253f5f1595f8 100644 --- a/ext/pspell/pspell.c +++ b/ext/pspell/pspell.c @@ -19,6 +19,7 @@ #endif #include "php.h" +#include "zend_interfaces.h" #include #include @@ -48,58 +49,139 @@ static PHP_MINIT_FUNCTION(pspell); static PHP_MINFO_FUNCTION(pspell); -static int le_pspell, le_pspell_config; +static zend_class_entry *php_pspell_ce = NULL; +static zend_object_handlers php_pspell_handlers; +static zend_class_entry *php_pspell_config_ce = NULL; +static zend_object_handlers php_pspell_config_handlers; zend_module_entry pspell_module_entry = { STANDARD_MODULE_HEADER, - "pspell", ext_functions, PHP_MINIT(pspell), NULL, NULL, NULL, PHP_MINFO(pspell), PHP_PSPELL_VERSION, STANDARD_MODULE_PROPERTIES + "pspell", + ext_functions, + PHP_MINIT(pspell), + NULL, + NULL, + NULL, + PHP_MINFO(pspell), + PHP_PSPELL_VERSION, + STANDARD_MODULE_PROPERTIES, }; #ifdef COMPILE_DL_PSPELL ZEND_GET_MODULE(pspell) #endif -static void php_pspell_close(zend_resource *rsrc) +/* class PSpell */ + +typedef struct _php_pspell_object { + PspellManager *mgr; + zend_object std; +} php_pspell_object; + +static php_pspell_object *php_pspell_object_from_zend_object(zend_object *zobj) { + return ((php_pspell_object*)(zobj + 1)) - 1; +} + +static zend_object *php_pspell_object_to_zend_object(php_pspell_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_function *php_pspell_object_get_constructor(zend_object *object) { - PspellManager *manager = (PspellManager *)rsrc->ptr; + zend_throw_error(NULL, "You cannot initialize a PSpell object except through helper functions"); + return NULL; +} + +static zend_object *php_pspell_object_create(zend_class_entry *ce) +{ + php_pspell_object *obj = zend_object_alloc(sizeof(php_pspell_object), ce); + zend_object *zobj = php_pspell_object_to_zend_object(obj); + + obj->mgr = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_pspell_handlers; + + return zobj; +} + +static void php_pspell_object_free(zend_object *zobj) { + delete_pspell_manager(php_pspell_object_from_zend_object(zobj)->mgr); +} - delete_pspell_manager(manager); +/* class PSpellConfig */ + +typedef struct _php_pspell_config_object { + PspellConfig *cfg; + zend_object std; +} php_pspell_config_object; + +static php_pspell_config_object *php_pspell_config_object_from_zend_object(zend_object *zobj) { + return ((php_pspell_config_object*)(zobj + 1)) - 1; } -static void php_pspell_close_config(zend_resource *rsrc) +static zend_object *php_pspell_config_object_to_zend_object(php_pspell_config_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_function *php_pspell_config_object_get_constructor(zend_object *object) { - PspellConfig *config = (PspellConfig *)rsrc->ptr; + zend_throw_error(NULL, "You cannot initialize a PSpellConfig object except through helper functions"); + return NULL; +} - delete_pspell_config(config); +static zend_object *php_pspell_config_object_create(zend_class_entry *ce) +{ + php_pspell_config_object *obj = zend_object_alloc(sizeof(php_pspell_config_object), ce); + zend_object *zobj = php_pspell_config_object_to_zend_object(obj); + + obj->cfg = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_pspell_config_handlers; + + return zobj; } -#define PSPELL_FETCH_CONFIG do { \ - zval *res = zend_hash_index_find(&EG(regular_list), conf); \ - if (res == NULL || Z_RES_P(res)->type != le_pspell_config) { \ - zend_throw_error(NULL, "%s(): " ZEND_LONG_FMT " is not a PSPELL config index", get_active_function_name(), conf); \ - RETURN_THROWS(); \ - } \ - config = (PspellConfig *)Z_RES_P(res)->ptr; \ -} while (0) - -#define PSPELL_FETCH_MANAGER do { \ - zval *res = zend_hash_index_find(&EG(regular_list), scin); \ - if (res == NULL || Z_RES_P(res)->type != le_pspell) { \ - zend_throw_error(NULL, "%s(): " ZEND_LONG_FMT " is not a PSPELL result index", get_active_function_name(), scin); \ - RETURN_THROWS(); \ - } \ - manager = (PspellManager *)Z_RES_P(res)->ptr; \ -} while (0); +static void php_pspell_config_object_free(zend_object *zobj) { + delete_pspell_config(php_pspell_config_object_from_zend_object(zobj)->cfg); +} /* {{{ PHP_MINIT_FUNCTION */ static PHP_MINIT_FUNCTION(pspell) { + zend_class_entry ce; + INIT_CLASS_ENTRY(ce, "PSpell", class_PSpell_methods); + php_pspell_ce = zend_register_internal_class(&ce); + php_pspell_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_pspell_ce->create_object = php_pspell_object_create; + php_pspell_ce->serialize = zend_class_serialize_deny; + php_pspell_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&php_pspell_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_pspell_handlers.clone_obj = NULL; + php_pspell_handlers.free_obj = php_pspell_object_free; + php_pspell_handlers.get_constructor = php_pspell_object_get_constructor; + php_pspell_handlers.offset = XtOffsetOf(php_pspell_object, std); + + INIT_CLASS_ENTRY(ce, "PSpellConfig", class_PSpellConfig_methods); + php_pspell_config_ce = zend_register_internal_class(&ce); + php_pspell_config_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_pspell_config_ce->create_object = php_pspell_config_object_create; + php_pspell_config_ce->serialize = zend_class_serialize_deny; + php_pspell_config_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&php_pspell_config_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_pspell_config_handlers.clone_obj = NULL; + php_pspell_config_handlers.free_obj = php_pspell_config_object_free; + php_pspell_config_handlers.get_constructor = php_pspell_config_object_get_constructor; + php_pspell_config_handlers.offset = XtOffsetOf(php_pspell_config_object, std); + REGISTER_LONG_CONSTANT("PSPELL_FAST", PSPELL_FAST, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_NORMAL", PSPELL_NORMAL, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_BAD_SPELLERS", PSPELL_BAD_SPELLERS, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_RUN_TOGETHER", PSPELL_RUN_TOGETHER, CONST_PERSISTENT | CONST_CS); - le_pspell = zend_register_list_destructors_ex(php_pspell_close, NULL, "pspell", module_number); - le_pspell_config = zend_register_list_destructors_ex(php_pspell_close_config, NULL, "pspell config", module_number); + return SUCCESS; } /* }}} */ @@ -111,7 +193,6 @@ PHP_FUNCTION(pspell_new) size_t language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; zend_long mode = Z_L(0), speed = Z_L(0); int argc = ZEND_NUM_ARGS(); - zval *ind; #ifdef PHP_WIN32 TCHAR aspell_dir[200]; @@ -122,7 +203,6 @@ PHP_FUNCTION(pspell_new) #endif PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; if (zend_parse_parameters(argc, "s|sssl", &language, &language_len, &spelling, &spelling_len, @@ -194,9 +274,8 @@ PHP_FUNCTION(pspell_new) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ @@ -207,7 +286,6 @@ PHP_FUNCTION(pspell_new_personal) size_t personal_len, language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; zend_long mode = Z_L(0), speed = Z_L(0); int argc = ZEND_NUM_ARGS(); - zval *ind; #ifdef PHP_WIN32 TCHAR aspell_dir[200]; @@ -218,7 +296,6 @@ PHP_FUNCTION(pspell_new_personal) #endif PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; if (zend_parse_parameters(argc, "ps|sssl", &personal, &personal_len, &language, &language_len, @@ -298,26 +375,22 @@ PHP_FUNCTION(pspell_new_personal) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ /* {{{ Load a dictionary based on the given config */ PHP_FUNCTION(pspell_new_config) { - zend_long conf; - zval *ind; + zval *zcfg; PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &conf) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zcfg, php_pspell_config_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; ret = new_pspell_manager(config); @@ -327,27 +400,24 @@ PHP_FUNCTION(pspell_new_config) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ /* {{{ Returns true if word is valid */ PHP_FUNCTION(pspell_check) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; - PSPELL_FETCH_MANAGER; - - if (pspell_manager_check(manager, word)) { + if (pspell_manager_check(manager, ZSTR_VAL(word))) { RETURN_TRUE; } else { RETURN_FALSE; @@ -358,22 +428,20 @@ PHP_FUNCTION(pspell_check) /* {{{ Returns array of suggestions */ PHP_FUNCTION(pspell_suggest) { - zend_long scin; - char *word; - size_t word_len; + zval *zmgr; + zend_string *word; PspellManager *manager; const PspellWordList *wl; const char *sug; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; array_init(return_value); - wl = pspell_manager_suggest(manager, word); + wl = pspell_manager_suggest(manager, ZSTR_VAL(word)); if (wl) { PspellStringEmulation *els = pspell_word_list_elements(wl); while ((sug = pspell_string_emulation_next(els)) != 0) { @@ -390,18 +458,16 @@ PHP_FUNCTION(pspell_suggest) /* {{{ Notify the dictionary of a user-selected replacement */ PHP_FUNCTION(pspell_store_replacement) { - size_t miss_len, corr_len; - zend_long scin; - char *miss, *corr; + zval *zmgr; + zend_string *miss, *corr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lss", &scin, &miss, &miss_len, &corr, &corr_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OSS", &zmgr, php_pspell_ce, &miss, &corr) == FAILURE) { RETURN_THROWS(); } + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; - PSPELL_FETCH_MANAGER; - - pspell_manager_store_replacement(manager, miss, corr); + pspell_manager_store_replacement(manager, ZSTR_VAL(miss), ZSTR_VAL(corr)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -414,23 +480,21 @@ PHP_FUNCTION(pspell_store_replacement) /* {{{ Adds a word to a personal list */ PHP_FUNCTION(pspell_add_to_personal) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ - if (word_len == 0) { + if (ZSTR_LEN(word) == 0) { RETURN_FALSE; } - pspell_manager_add_to_personal(manager, word); + pspell_manager_add_to_personal(manager, ZSTR_VAL(word)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -443,23 +507,21 @@ PHP_FUNCTION(pspell_add_to_personal) /* {{{ Adds a word to the current session */ PHP_FUNCTION(pspell_add_to_session) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ - if (word_len == 0) { + if (ZSTR_LEN(word) == 0) { RETURN_FALSE; } - pspell_manager_add_to_session(manager, word); + pspell_manager_add_to_session(manager, ZSTR_VAL(word)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -472,14 +534,13 @@ PHP_FUNCTION(pspell_add_to_session) /* {{{ Clears the current session */ PHP_FUNCTION(pspell_clear_session) { - zend_long scin; + zval *zmgr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &scin) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zmgr, php_pspell_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; pspell_manager_clear_session(manager); if (pspell_manager_error_number(manager) == 0) { @@ -494,14 +555,13 @@ PHP_FUNCTION(pspell_clear_session) /* {{{ Saves the current (personal) wordlist */ PHP_FUNCTION(pspell_save_wordlist) { - zend_long scin; + zval *zmgr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &scin) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zmgr, php_pspell_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; pspell_manager_save_all_word_lists(manager); @@ -520,7 +580,6 @@ PHP_FUNCTION(pspell_config_create) { char *language, *spelling = NULL, *jargon = NULL, *encoding = NULL; size_t language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; - zval *ind; PspellConfig *config; #ifdef PHP_WIN32 @@ -577,23 +636,22 @@ PHP_FUNCTION(pspell_config_create) which is not what we want */ pspell_config_replace(config, "save-repl", "false"); - ind = zend_list_insert(config, le_pspell_config); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_config_ce); + php_pspell_config_object_from_zend_object(Z_OBJ_P(return_value))->cfg = config; } /* }}} */ /* {{{ Consider run-together words as valid components */ PHP_FUNCTION(pspell_config_runtogether) { - zend_long conf; + zval *zcfg; zend_bool runtogether; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &conf, &runtogether) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &zcfg, php_pspell_config_ce, &runtogether) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "run-together", runtogether ? "true" : "false"); @@ -604,14 +662,14 @@ PHP_FUNCTION(pspell_config_runtogether) /* {{{ Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS) */ PHP_FUNCTION(pspell_config_mode) { - zend_long conf, mode; + zval *zcfg; + zend_long mode; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &conf, &mode) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &zcfg, php_pspell_config_ce, &mode) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; /* First check what mode we want (how many suggestions) */ if (mode == PSPELL_FAST) { @@ -630,14 +688,14 @@ PHP_FUNCTION(pspell_config_mode) PHP_FUNCTION(pspell_config_ignore) { char ignore_str[MAX_LENGTH_OF_LONG + 1]; - zend_long conf, ignore = 0L; + zval *zcfg; + zend_long ignore = 0L; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &conf, &ignore) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &zcfg, php_pspell_config_ce, &ignore) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; snprintf(ignore_str, sizeof(ignore_str), ZEND_LONG_FMT, ignore); @@ -648,22 +706,20 @@ PHP_FUNCTION(pspell_config_ignore) static void pspell_config_path(INTERNAL_FUNCTION_PARAMETERS, char *option) { - zend_long conf; - char *value; - size_t value_len; + zval *zcfg; + zend_string *value; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lp", &conf, &value, &value_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP", &zcfg, php_pspell_config_ce, &value) == FAILURE) { RETURN_THROWS(); } + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; - PSPELL_FETCH_CONFIG; - - if (php_check_open_basedir(value)) { + if (php_check_open_basedir(ZSTR_VAL(value))) { RETURN_FALSE; } - pspell_config_replace(config, option, value); + pspell_config_replace(config, option, ZSTR_VAL(value)); RETURN_TRUE; } @@ -692,24 +748,22 @@ PHP_FUNCTION(pspell_config_data_dir) /* {{{ Use a personal dictionary with replacement pairs for this config */ PHP_FUNCTION(pspell_config_repl) { - zend_long conf; - char *repl; - size_t repl_len; + zval *zcfg; + zend_string *repl; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lp", &conf, &repl, &repl_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP", &zcfg, php_pspell_config_ce, &repl) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "save-repl", "true"); - if (php_check_open_basedir(repl)) { + if (php_check_open_basedir(ZSTR_VAL(repl))) { RETURN_FALSE; } - pspell_config_replace(config, "repl", repl); + pspell_config_replace(config, "repl", ZSTR_VAL(repl)); RETURN_TRUE; } @@ -718,15 +772,14 @@ PHP_FUNCTION(pspell_config_repl) /* {{{ Save replacement pairs when personal list is saved for this config */ PHP_FUNCTION(pspell_config_save_repl) { - zend_long conf; + zval *zcfg; zend_bool save; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &conf, &save) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &zcfg, php_pspell_config_ce, &save) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "save-repl", save ? "true" : "false"); diff --git a/ext/pspell/pspell.stub.php b/ext/pspell/pspell.stub.php index 03363f46b8a6a..a10de4b9f98f1 100644 --- a/ext/pspell/pspell.stub.php +++ b/ext/pspell/pspell.stub.php @@ -2,40 +2,36 @@ /** @generate-function-entries */ -function pspell_new(string $language, string $spelling = "", string $jargon = "", string $encoding = "", int $mode = 0): int|false {} - -function pspell_new_personal(string $personal, string $language, string $spelling = "", string $jargon = "", string $encoding = "", int $mode = 0): int|false {} - -function pspell_new_config(int $config): int|false {} - -function pspell_check(int $pspell, string $word): bool {} - -function pspell_suggest(int $pspell, string $word): array|false {} - -function pspell_store_replacement(int $pspell, string $misspell, string $correct): bool {} - -function pspell_add_to_personal(int $pspell, string $word): bool {} - -function pspell_add_to_session(int $pspell, string $word): bool {} - -function pspell_clear_session(int $pspell): bool {} - -function pspell_save_wordlist(int $pspell): bool {} - -function pspell_config_create(string $language, string $spelling = "", string $jargon = "", string $encoding = ""): int {} - -function pspell_config_runtogether(int $conf, bool $runtogether): bool {} - -function pspell_config_mode(int $conf, int $mode): bool {} - -function pspell_config_ignore(int $conf, int $ignore): bool {} - -function pspell_config_personal(int $conf, string $personal): bool {} - -function pspell_config_dict_dir(int $conf, string $directory): bool {} - -function pspell_config_data_dir(int $conf, string $directory): bool {} - -function pspell_config_repl(int $conf, string $repl): bool {} - -function pspell_config_save_repl(int $conf, bool $save): bool {} +final class PSpell {} +final class PSpellConfig {} + +function pspell_new(string $language, string $spelling = "", string $jargon = "", string $encoding = "", int $mode = 0): PSpell|false {} + +function pspell_new_personal( + string $filename, + string $language, + string $spelling = "", + string $jargon = "", + string $encoding = "", + int $mode = 0 +): PSpell|false {} + +function pspell_new_config(PSpellConfig $config): PSpell|false {} + +function pspell_check(PSpell $dictionary, string $word): bool {} +function pspell_suggest(PSpell $dictionary, string $word): array|false {} +function pspell_store_replacement(PSpell $dictionary, string $misspelled, string $correct): bool {} +function pspell_add_to_personal(PSpell $dictionary, string $word): bool {} +function pspell_add_to_session(PSpell $dictionary, string $word): bool {} +function pspell_clear_session(PSpell $dictionary): bool {} +function pspell_save_wordlist(PSpell $dictionary): bool {} + +function pspell_config_create(string $language, string $spelling = "", string $jargon = "", string $encoding = ""): PSpellConfig {} +function pspell_config_runtogether(PSpellConfig $config, bool $allow): bool {} +function pspell_config_mode(PSpellConfig $config, int $mode): bool {} +function pspell_config_ignore(PSpellConfig $config, int $min_length): bool {} +function pspell_config_personal(PSpellConfig $config, string $filename): bool {} +function pspell_config_dict_dir(PSpellConfig $config, string $directory): bool {} +function pspell_config_data_dir(PSpellConfig $config, string $directory): bool {} +function pspell_config_repl(PSpellConfig $config, string $filename): bool {} +function pspell_config_save_repl(PSpellConfig $config, bool $save): bool {} diff --git a/ext/pspell/pspell_arginfo.h b/ext/pspell/pspell_arginfo.h index 4a009dec12d04..f3b7b5531085e 100644 --- a/ext/pspell/pspell_arginfo.h +++ b/ext/pspell/pspell_arginfo.h @@ -1,7 +1,7 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 77f9effa6d246cf2b8da121d219462cce8a99918 */ + * Stub hash: efc4c20a1507cfba58ec265a2fe6f61b1e0f8a61 */ -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, PSpell, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, jargon, IS_STRING, 0, "\"\"") @@ -9,8 +9,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, MAY_BE_LONG|MA ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, personal, IS_STRING, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, PSpell, MAY_BE_FALSE) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, jargon, IS_STRING, 0, "\"\"") @@ -18,23 +18,23 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, MAY_B ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_config, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new_config, 0, 1, PSpell, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_check, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pspell, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_suggest, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, pspell, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_store_replacement, 0, 3, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pspell, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, misspell, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) + ZEND_ARG_TYPE_INFO(0, misspelled, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, correct, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -43,12 +43,12 @@ ZEND_END_ARG_INFO() #define arginfo_pspell_add_to_session arginfo_pspell_check ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_clear_session, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, pspell, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_END_ARG_INFO() #define arginfo_pspell_save_wordlist arginfo_pspell_clear_session -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_create, 0, 1, IS_LONG, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_pspell_config_create, 0, 1, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, jargon, IS_STRING, 0, "\"\"") @@ -56,39 +56,36 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_create, 0, 1, IS_L ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_runtogether, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, runtogether, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) + ZEND_ARG_TYPE_INFO(0, allow, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_mode, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_ignore, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, ignore, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) + ZEND_ARG_TYPE_INFO(0, min_length, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_personal, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, personal, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_dict_dir, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_pspell_config_data_dir arginfo_pspell_config_dict_dir -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_repl, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, repl, IS_STRING, 0) -ZEND_END_ARG_INFO() +#define arginfo_pspell_config_repl arginfo_pspell_config_personal ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_save_repl, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, conf, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, save, _IS_BOOL, 0) ZEND_END_ARG_INFO() @@ -136,3 +133,13 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(pspell_config_save_repl, arginfo_pspell_config_save_repl) ZEND_FE_END }; + + +static const zend_function_entry class_PSpell_methods[] = { + ZEND_FE_END +}; + + +static const zend_function_entry class_PSpellConfig_methods[] = { + ZEND_FE_END +}; diff --git a/ext/pspell/tests/003.phpt b/ext/pspell/tests/003.phpt index e8677ae82687d..63291a8d424a5 100644 --- a/ext/pspell/tests/003.phpt +++ b/ext/pspell/tests/003.phpt @@ -34,7 +34,7 @@ var_dump(pspell_config_ignore($cfg, PHP_INT_MAX)); bool(false) Warning: pspell_new_config(): PSPELL couldn't open the dictionary. reason: The encoding "b0rked" is not known. This could also mean that the file "%sb0rked.%s" could not be opened for reading or does not exist. in %s003.php on line 9 -pspell_check(): 0 is not a PSPELL result index +pspell_check(): Argument #1 ($dictionary) must be of type PSpell, bool given --- bool(true) bool(true) diff --git a/ext/readline/tests/libedit_info_001.phpt b/ext/readline/tests/libedit_info_001.phpt index 46618120fba8a..8b6fb80671914 100644 --- a/ext/readline/tests/libedit_info_001.phpt +++ b/ext/readline/tests/libedit_info_001.phpt @@ -6,6 +6,7 @@ if (READLINE_LIB != "libedit") die("skip libedit only"); if(substr(PHP_OS, 0, 3) == 'WIN' ) { die('skip not for windows'); } +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); ?> --FILE-- --FILE-- --FILE-- + --FILE-- --FILE-- name : ZSTR_VAL(arg_info->name)); - if (!required) { + if (!required && !ZEND_ARG_IS_VARIADIC(arg_info)) { if (fptr->type == ZEND_INTERNAL_FUNCTION) { smart_str_appends(str, " = "); /* TODO: We don't have a way to fetch the default value for an internal function @@ -2952,6 +2952,9 @@ ZEND_METHOD(ReflectionUnionType, getTypes) type_mask = ZEND_TYPE_PURE_MASK(param->type); ZEND_ASSERT(!(type_mask & MAY_BE_VOID)); + if (type_mask & MAY_BE_STATIC) { + append_type_mask(return_value, MAY_BE_STATIC); + } if (type_mask & MAY_BE_CALLABLE) { append_type_mask(return_value, MAY_BE_CALLABLE); } diff --git a/ext/reflection/php_reflection.stub.php b/ext/reflection/php_reflection.stub.php index cf6613c3a32ed..7e2f061142bc3 100644 --- a/ext/reflection/php_reflection.stub.php +++ b/ext/reflection/php_reflection.stub.php @@ -19,7 +19,7 @@ interface Reflector extends Stringable abstract class ReflectionFunctionAbstract implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} /** @return bool */ public function inNamespace() {} @@ -199,7 +199,7 @@ public function setAccessible(bool $accessible) {} class ReflectionClass implements Reflector { - final private function __clone() {} + final private function __clone(): void {} public function __construct(object|string $objectOrClass) {} @@ -370,7 +370,7 @@ public function __construct(object $object) {} class ReflectionProperty implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} public function __construct(object|string $class, string $property) {} @@ -435,7 +435,7 @@ public function getAttributes(?string $name = null, int $flags = 0): array {} class ReflectionClassConstant implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} public function __construct(object|string $class, string $constant) {} @@ -472,7 +472,7 @@ public function getAttributes(?string $name = null, int $flags = 0): array {} class ReflectionParameter implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} /** @param string|array|object $function */ public function __construct($function, int|string $param) {} @@ -551,7 +551,7 @@ public function getAttributes(?string $name = null, int $flags = 0): array {} abstract class ReflectionType implements Stringable { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} /** @return bool */ public function allowsNull() {} @@ -576,7 +576,7 @@ public function getTypes(): array {} class ReflectionExtension implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} public function __construct(string $name) {} @@ -619,7 +619,7 @@ public function isTemporary() {} class ReflectionZendExtension implements Reflector { /** @implementation-alias ReflectionClass::__clone */ - final private function __clone() {} + final private function __clone(): void {} public function __construct(string $name) {} @@ -648,7 +648,7 @@ public static function fromArrayElement(array $array, int|string $key): ?Reflect public function getId(): string {} /** @implementation-alias ReflectionClass::__clone */ - private function __clone() {} + private function __clone(): void {} private function __construct() {} } @@ -661,7 +661,7 @@ public function isRepeated(): bool {} public function getArguments(): array {} public function newInstance(): object {} - private function __clone() {} + private function __clone(): void {} private function __construct() {} } diff --git a/ext/reflection/php_reflection_arginfo.h b/ext/reflection/php_reflection_arginfo.h index 6044f7f2434cd..591a160ed3150 100644 --- a/ext/reflection/php_reflection_arginfo.h +++ b/ext/reflection/php_reflection_arginfo.h @@ -1,62 +1,63 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4429ea0f96f81c3dbfb2a7e6e00ce49aea4bfeb1 */ + * Stub hash: ec7607b8087ddd4297bf51cc4072465d2a0f27af */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunctionAbstract___clone, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunctionAbstract___clone, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionFunctionAbstract_inNamespace arginfo_class_ReflectionFunctionAbstract___clone +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunctionAbstract_inNamespace, 0, 0, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionFunctionAbstract_isClosure arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isClosure arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_isDeprecated arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isDeprecated arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_isInternal arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isInternal arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_isUserDefined arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isUserDefined arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_isGenerator arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isGenerator arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_isVariadic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_isVariadic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getClosureThis arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getClosureThis arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getClosureScopeClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getClosureScopeClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getDocComment arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getDocComment arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getEndLine arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getEndLine arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getExtension arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getExtension arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getExtensionName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getExtensionName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getFileName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getFileName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getNamespaceName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getNamespaceName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getNumberOfParameters arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getNumberOfParameters arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getNumberOfRequiredParameters arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getNumberOfRequiredParameters arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getParameters arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getParameters arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getShortName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getShortName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getStartLine arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getStartLine arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getStaticVariables arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getStaticVariables arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_returnsReference arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_returnsReference arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_hasReturnType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_hasReturnType arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionFunctionAbstract_getReturnType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunctionAbstract_getReturnType arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunctionAbstract_getAttributes, 0, 0, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null") @@ -70,7 +71,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction___toString, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invoke, 0, 0, 0) ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0) @@ -80,25 +81,25 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invokeArgs, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionFunction_getClosure arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionFunction_getClosure arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionGenerator___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, generator, Generator, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionGenerator_getExecutingLine arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionGenerator_getExecutingLine arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionGenerator_getExecutingFile arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionGenerator_getExecutingFile arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionGenerator_getTrace, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "DEBUG_BACKTRACE_PROVIDE_OBJECT") ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionGenerator_getFunction arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionGenerator_getFunction arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionGenerator_getThis arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionGenerator_getThis arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionGenerator_getExecutingGenerator arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionGenerator_getExecutingGenerator arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod___construct, 0, 0, 1) ZEND_ARG_TYPE_MASK(0, objectOrMethod, MAY_BE_OBJECT|MAY_BE_STRING, NULL) @@ -107,27 +108,27 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionMethod___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionMethod_isPublic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isPublic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isPrivate arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isPrivate arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isProtected arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isProtected arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isAbstract arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isAbstract arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isFinal arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isFinal arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isStatic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isStatic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isConstructor arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isConstructor arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_isDestructor arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_isDestructor arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_getClosure, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, object, IS_OBJECT, 1, "null") ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionMethod_getModifiers arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_getModifiers arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invoke, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 1) @@ -139,9 +140,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invokeArgs, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionMethod_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_getDeclaringClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionMethod_getPrototype arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionMethod_getPrototype arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_setAccessible, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, accessible, _IS_BOOL, 0) @@ -155,27 +156,27 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionClass___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionClass_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isInternal arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isInternal arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isUserDefined arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isUserDefined arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isAnonymous arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isAnonymous arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isInstantiable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isInstantiable arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isCloneable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isCloneable arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getFileName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getFileName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getStartLine arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getStartLine arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getEndLine arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getEndLine arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getDocComment arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getDocComment arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getConstructor arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getConstructor arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_hasMethod, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) @@ -203,25 +204,25 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionClass_getReflectionConstant arginfo_class_ReflectionClass_hasMethod -#define arginfo_class_ReflectionClass_getInterfaces arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getInterfaces arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getInterfaceNames arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getInterfaceNames arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isInterface arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isInterface arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getTraits arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getTraits arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getTraitNames arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getTraitNames arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getTraitAliases arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getTraitAliases arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isTrait arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isTrait arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isAbstract arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isAbstract arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isFinal arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isFinal arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getModifiers arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getModifiers arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_isInstance, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0) @@ -229,19 +230,19 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionClass_newInstance arginfo_class_ReflectionFunction_invoke -#define arginfo_class_ReflectionClass_newInstanceWithoutConstructor arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_newInstanceWithoutConstructor arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_newInstanceArgs, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, args, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionClass_getParentClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getParentClass arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_isSubclassOf, 0, 0, 1) ZEND_ARG_OBJ_TYPE_MASK(0, class, ReflectionClass, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionClass_getStaticProperties arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getStaticProperties arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_getStaticPropertyValue, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) @@ -253,25 +254,25 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_setStaticPropertyValue, 0, ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionClass_getDefaultProperties arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getDefaultProperties arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isIterable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isIterable arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_isIterateable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_isIterateable arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_implementsInterface, 0, 0, 1) ZEND_ARG_OBJ_TYPE_MASK(0, interface, ReflectionClass, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionClass_getExtension arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getExtension arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getExtensionName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getExtensionName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_inNamespace arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_inNamespace arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getNamespaceName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getNamespaceName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClass_getShortName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClass_getShortName arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionClass_getAttributes arginfo_class_ReflectionFunctionAbstract_getAttributes @@ -286,7 +287,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionProperty___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionProperty_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getName arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionProperty_getValue arginfo_class_ReflectionMethod_getClosure @@ -297,34 +298,34 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionProperty_isInitialized arginfo_class_ReflectionMethod_getClosure -#define arginfo_class_ReflectionProperty_isPublic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_isPublic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_isPrivate arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_isPrivate arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_isProtected arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_isProtected arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_isStatic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_isStatic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_isDefault arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_isDefault arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionProperty_isPromoted, 0, 0, _IS_BOOL, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ReflectionProperty_getModifiers arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getModifiers arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getDeclaringClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_getDocComment arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getDocComment arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionProperty_setAccessible arginfo_class_ReflectionMethod_setAccessible -#define arginfo_class_ReflectionProperty_getType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getType arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionProperty_hasType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_hasType arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionProperty_hasDefaultValue arginfo_class_ReflectionProperty_isPromoted -#define arginfo_class_ReflectionProperty_getDefaultValue arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionProperty_getDefaultValue arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionProperty_getAttributes arginfo_class_ReflectionFunctionAbstract_getAttributes @@ -337,21 +338,21 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionClassConstant___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionClassConstant_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_getValue arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_getValue arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_isPublic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_isPublic arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_isPrivate arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_isPrivate arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_isProtected arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_isProtected arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_getModifiers arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_getModifiers arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_getDeclaringClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionClassConstant_getDocComment arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionClassConstant_getDocComment arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionClassConstant_getAttributes arginfo_class_ReflectionFunctionAbstract_getAttributes @@ -364,41 +365,41 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionParameter___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionParameter_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isPassedByReference arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isPassedByReference arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_canBePassedByValue arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_canBePassedByValue arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getDeclaringFunction arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getDeclaringFunction arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getDeclaringClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getClass arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getClass arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_hasType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_hasType arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getType arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getType arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isArray arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isArray arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isCallable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isCallable arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_allowsNull arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_allowsNull arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getPosition arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getPosition arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isOptional arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isOptional arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isDefaultValueAvailable arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isDefaultValueAvailable arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getDefaultValue arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getDefaultValue arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isDefaultValueConstant arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isDefaultValueConstant arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_getDefaultValueConstantName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_getDefaultValueConstantName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionParameter_isVariadic arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionParameter_isVariadic arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionParameter_isPromoted arginfo_class_ReflectionProperty_isPromoted @@ -406,13 +407,13 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionType___clone arginfo_class_ReflectionFunctionAbstract___clone -#define arginfo_class_ReflectionType_allowsNull arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionType_allowsNull arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionType___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionNamedType_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionNamedType_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionNamedType_isBuiltin arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionNamedType_isBuiltin arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionUnionType_getTypes, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() @@ -423,27 +424,27 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionExtension___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionExtension_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getVersion arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getVersion arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getFunctions arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getFunctions arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getConstants arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getConstants arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getINIEntries arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getINIEntries arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getClasses arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getClasses arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getClassNames arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getClassNames arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_getDependencies arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_getDependencies arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_info arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_info arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_isPersistent arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_isPersistent arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionExtension_isTemporary arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionExtension_isTemporary arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionZendExtension___clone arginfo_class_ReflectionFunctionAbstract___clone @@ -451,15 +452,15 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionZendExtension___toString arginfo_class_ReflectionFunction___toString -#define arginfo_class_ReflectionZendExtension_getName arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionZendExtension_getName arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionZendExtension_getVersion arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionZendExtension_getVersion arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionZendExtension_getAuthor arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionZendExtension_getAuthor arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionZendExtension_getURL arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionZendExtension_getURL arginfo_class_ReflectionFunctionAbstract_inNamespace -#define arginfo_class_ReflectionZendExtension_getCopyright arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionZendExtension_getCopyright arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ReflectionReference_fromArrayElement, 0, 2, ReflectionReference, 1) ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0) @@ -470,7 +471,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionReference___clone arginfo_class_ReflectionFunctionAbstract___clone -#define arginfo_class_ReflectionReference___construct arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionReference___construct arginfo_class_ReflectionFunctionAbstract_inNamespace #define arginfo_class_ReflectionAttribute_getName arginfo_class_ReflectionFunction___toString @@ -486,7 +487,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ReflectionAttribute___clone arginfo_class_ReflectionFunctionAbstract___clone -#define arginfo_class_ReflectionAttribute___construct arginfo_class_ReflectionFunctionAbstract___clone +#define arginfo_class_ReflectionAttribute___construct arginfo_class_ReflectionFunctionAbstract_inNamespace ZEND_METHOD(Reflection, getModifierNames); diff --git a/ext/reflection/tests/ReflectionClass_toString_001.phpt b/ext/reflection/tests/ReflectionClass_toString_001.phpt index 13b6130a407e2..86d6720fe6db1 100644 --- a/ext/reflection/tests/ReflectionClass_toString_001.phpt +++ b/ext/reflection/tests/ReflectionClass_toString_001.phpt @@ -32,6 +32,7 @@ Class [ class ReflectionClass implements Reflector, String - Parameters [0] { } + - Return [ void ] } Method [ public method __construct ] { @@ -261,7 +262,7 @@ Class [ class ReflectionClass implements Reflector, String Method [ public method newInstance ] { - Parameters [1] { - Parameter #0 [ mixed ...$args = ] + Parameter #0 [ mixed ...$args ] } } diff --git a/ext/reflection/tests/bug80190.phpt b/ext/reflection/tests/bug80190.phpt new file mode 100644 index 0000000000000..16f2fbba42729 --- /dev/null +++ b/ext/reflection/tests/bug80190.phpt @@ -0,0 +1,67 @@ +--TEST-- +Bug #80190: ReflectionMethod::getReturnType() does not handle static as part of union type +--FILE-- +getMethods() as $method) { + print $method->getDeclaringClass()->getName() . '::' . $method->getName() . '()' . PHP_EOL; + print ' $method->getReturnType() returns ' . get_class($method->getReturnType()) . PHP_EOL; + print ' $method->getReturnType()->__toString() returns ' . $method->getReturnType() . PHP_EOL; + + if ($method->getReturnType() instanceof ReflectionUnionType) { + print ' $method->getReturnType()->getTypes() returns an array with ' . count($method->getReturnType()->getTypes()) . ' element(s)' . PHP_EOL; + + print ' type(s) in union: '; + + $types = []; + + foreach ($method->getReturnType()->getTypes() as $type) { + $types[] = get_class($type) . "($type)"; + } + + print join(', ', $types) . PHP_EOL; + } + + print PHP_EOL; +} + +?> +--EXPECT-- +C::a() + $method->getReturnType() returns ReflectionNamedType + $method->getReturnType()->__toString() returns self + +C::b() + $method->getReturnType() returns ReflectionUnionType + $method->getReturnType()->__toString() returns stdClass|self + $method->getReturnType()->getTypes() returns an array with 2 element(s) + type(s) in union: ReflectionNamedType(stdClass), ReflectionNamedType(self) + +C::c() + $method->getReturnType() returns ReflectionNamedType + $method->getReturnType()->__toString() returns static + +C::d() + $method->getReturnType() returns ReflectionUnionType + $method->getReturnType()->__toString() returns stdClass|static + $method->getReturnType()->getTypes() returns an array with 2 element(s) + type(s) in union: ReflectionNamedType(stdClass), ReflectionNamedType(static) diff --git a/ext/reflection/tests/bug80299.phpt b/ext/reflection/tests/bug80299.phpt new file mode 100644 index 0000000000000..61aec5b1ce05b --- /dev/null +++ b/ext/reflection/tests/bug80299.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #80299: ReflectionFunction->invokeArgs confused in arguments +--FILE-- +invokeArgs($args); + +?> +--EXPECTF-- +Warning: {closure}(): Argument #1 ($foo) must be passed by reference, value given in %s on line %d diff --git a/ext/session/tests/003.phpt b/ext/session/tests/003.phpt index e7e429437513a..4f9b37b75d93e 100644 --- a/ext/session/tests/003.phpt +++ b/ext/session/tests/003.phpt @@ -17,7 +17,7 @@ class foo { function method() { $this->yes++; } } -session_id("abtest"); +session_id("test003"); session_start(); session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}'); diff --git a/ext/session/tests/004.phpt b/ext/session/tests/004.phpt index 4b81a088b2fa6..c3ed0c56165c5 100644 --- a/ext/session/tests/004.phpt +++ b/ext/session/tests/004.phpt @@ -55,7 +55,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test004"); session_start(); $_SESSION["baz"]->method(); $_SESSION["arr"][3]->method(); @@ -75,7 +75,7 @@ session_destroy(); ?> --EXPECT-- OPEN: PHPSESSID -READ: abtest +READ: test004 object(foo)#2 (2) { ["bar"]=> string(2) "ok" @@ -91,9 +91,9 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test004, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} OPEN: PHPSESSID -READ: abtest +READ: test004 object(foo)#3 (2) { ["bar"]=> string(2) "ok" @@ -109,4 +109,4 @@ array(1) { int(2) } } -DESTROY: abtest +DESTROY: test004 diff --git a/ext/session/tests/005.phpt b/ext/session/tests/005.phpt index a7b42de7fa38b..2b51ceed94841 100644 --- a/ext/session/tests/005.phpt +++ b/ext/session/tests/005.phpt @@ -56,7 +56,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test005"); session_start(); session_decode($hnd->data); @@ -91,7 +91,7 @@ session_destroy(); ?> --EXPECT-- OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#4 (2) { ["bar"]=> string(2) "ok" @@ -107,10 +107,10 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test005, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} CLOSE OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#2 (2) { ["bar"]=> string(2) "ok" @@ -127,10 +127,10 @@ array(1) { } } int(123) -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; +WRITE: test005, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; CLOSE OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#4 (2) { ["bar"]=> string(2) "ok" @@ -147,5 +147,5 @@ array(1) { } } int(123) -DESTROY: abtest +DESTROY: test005 CLOSE diff --git a/ext/session/tests/006.phpt b/ext/session/tests/006.phpt index 68cea7314a90a..e3c048748f0a1 100644 --- a/ext/session/tests/006.phpt +++ b/ext/session/tests/006.phpt @@ -13,7 +13,7 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test006"); session_start(); class a { diff --git a/ext/session/tests/009.phpt b/ext/session/tests/009.phpt index 10069c21d0e83..898cf76a5a355 100644 --- a/ext/session/tests/009.phpt +++ b/ext/session/tests/009.phpt @@ -13,14 +13,14 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test009"); ### Phase 1 cleanup session_start(); session_destroy(); ### Phase 2 $_SESSION["c"] does not contain any value -session_id("abtest"); +session_id("test009"); session_start(); var_dump($_SESSION); $_SESSION["name"] = "foo"; diff --git a/ext/session/tests/012.phpt b/ext/session/tests/012.phpt index c555d2ca1e8b9..ad3f54962e5a0 100644 --- a/ext/session/tests/012.phpt +++ b/ext/session/tests/012.phpt @@ -14,7 +14,7 @@ error_reporting(E_ALL); ### Absurd example, value of $_SESSION does not matter -session_id("abtest"); +session_id("test012"); session_start(); $_SESSION["_SESSION"] = Array(); $_SESSION = "kk"; diff --git a/ext/session/tests/013.phpt b/ext/session/tests/013.phpt index 32909eb58c6fa..07fcea407b23b 100644 --- a/ext/session/tests/013.phpt +++ b/ext/session/tests/013.phpt @@ -12,10 +12,10 @@ session.save_handler=files diff --git a/ext/session/tests/015.phpt b/ext/session/tests/015.phpt index 527b86bc1d1b0..788f1eac063ac 100644 --- a/ext/session/tests/015.phpt +++ b/ext/session/tests/015.phpt @@ -16,7 +16,7 @@ session.save_handler=files @@ -24,4 +24,4 @@ session_start(); session_destroy(); ?> --EXPECT-- - + diff --git a/ext/session/tests/018.phpt b/ext/session/tests/018.phpt index 5ec132b34f090..d132abf7173bd 100644 --- a/ext/session/tests/018.phpt +++ b/ext/session/tests/018.phpt @@ -16,7 +16,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("test018"); session_start(); ?>
@@ -24,4 +24,4 @@ session_start(); session_destroy(); ?> --EXPECT-- - + diff --git a/ext/session/tests/019.phpt b/ext/session/tests/019.phpt index d9a478245b92e..e3793a5522268 100644 --- a/ext/session/tests/019.phpt +++ b/ext/session/tests/019.phpt @@ -23,7 +23,7 @@ class TFoo { } } -session_id("abtest"); +session_id("test019"); session_start(); $_SESSION["o1"] = new TFoo(42); diff --git a/ext/session/tests/020.phpt b/ext/session/tests/020.phpt index 267e52191cf25..f4ec38c8fbb45 100644 --- a/ext/session/tests/020.phpt +++ b/ext/session/tests/020.phpt @@ -17,7 +17,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("test020"); session_start(); ?> @@ -25,4 +25,4 @@ session_start(); session_destroy(); ?> --EXPECT-- - + diff --git a/ext/session/tests/021.phpt b/ext/session/tests/021.phpt index 4a97d7d32a087..2532324feeb32 100644 --- a/ext/session/tests/021.phpt +++ b/ext/session/tests/021.phpt @@ -19,7 +19,7 @@ error_reporting(E_ALL); ini_set('session.trans_sid_hosts', 'php.net'); $_SERVER['HTTP_HOST'] = 'php.net'; -session_id("abtest"); +session_id("test021"); session_start(); ?> @@ -60,11 +60,11 @@ session_destroy(); --EXPECT--
- +
- +
- +
- +
diff --git a/ext/session/tests/023.phpt b/ext/session/tests/023.phpt index 23c7096f234c8..e9ce084256093 100644 --- a/ext/session/tests/023.phpt +++ b/ext/session/tests/023.phpt @@ -17,7 +17,7 @@ class foo { function method() { $this->yes++; } } -session_id("abtest"); +session_id("test023"); session_start(); session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}'); $baz = $_SESSION['baz']; diff --git a/ext/session/tests/024.phpt b/ext/session/tests/024.phpt index 174f2e263963e..913956f5b37b6 100644 --- a/ext/session/tests/024.phpt +++ b/ext/session/tests/024.phpt @@ -56,7 +56,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test024"); session_start(); $baz = $_SESSION['baz']; @@ -79,7 +79,7 @@ session_destroy(); ?> --EXPECTF-- OPEN: PHPSESSID -READ: abtest +READ: test024 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -95,9 +95,9 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test024, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} OPEN: PHPSESSID -READ: abtest +READ: test024 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -113,4 +113,4 @@ array(1) { int(2) } } -DESTROY: abtest +DESTROY: test024 diff --git a/ext/session/tests/025.phpt b/ext/session/tests/025.phpt index 172ea579c6500..4e91da97960b9 100644 --- a/ext/session/tests/025.phpt +++ b/ext/session/tests/025.phpt @@ -57,7 +57,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test025"); session_start(); $baz = $_SESSION['baz']; $arr = $_SESSION['arr']; @@ -93,7 +93,7 @@ session_destroy(); ?> --EXPECTF-- OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -109,10 +109,10 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test025, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} CLOSE OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -129,10 +129,10 @@ array(1) { } } int(123) -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; +WRITE: test025, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; CLOSE OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -149,5 +149,5 @@ array(1) { } } int(123) -DESTROY: abtest +DESTROY: test025 CLOSE diff --git a/ext/session/tests/026.phpt b/ext/session/tests/026.phpt index b61039ee0c245..f5abdac0a573b 100644 --- a/ext/session/tests/026.phpt +++ b/ext/session/tests/026.phpt @@ -13,7 +13,7 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test026"); session_start(); class a { diff --git a/ext/session/tests/027.phpt b/ext/session/tests/027.phpt index ebaf25467c969..969bc5b87219f 100644 --- a/ext/session/tests/027.phpt +++ b/ext/session/tests/027.phpt @@ -13,14 +13,14 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test027"); ### Phase 1 cleanup session_start(); session_destroy(); ### Phase 2 $_SESSION["c"] does not contain any value -session_id("abtest"); +session_id("test027"); session_start(); var_dump($_SESSION); $_SESSION["name"] = "foo"; diff --git a/ext/session/tests/CONFLICTS b/ext/session/tests/CONFLICTS deleted file mode 100644 index 30888ae480e80..0000000000000 --- a/ext/session/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -session diff --git a/ext/session/tests/bug41600.phpt b/ext/session/tests/bug41600.phpt index 79d5e128419f4..d4dfce9d884b3 100644 --- a/ext/session/tests/bug41600.phpt +++ b/ext/session/tests/bug41600.phpt @@ -17,7 +17,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("bug41600"); session_start(); ?> @@ -25,4 +25,4 @@ session_start(); session_destroy(); ?> --EXPECT-- - + diff --git a/ext/session/tests/bug42596.phpt b/ext/session/tests/bug42596.phpt index f27e86387e4fa..83567bde5f41d 100644 --- a/ext/session/tests/bug42596.phpt +++ b/ext/session/tests/bug42596.phpt @@ -15,7 +15,7 @@ session.serialize_handler=php session.save_handler=files --FILE-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867 --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -50,7 +50,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_cleanup.phpt b/ext/session/tests/rfc1867_cleanup.phpt index ae5dcbe8dcfa2..9baa6144ba688 100644 --- a/ext/session/tests/rfc1867_cleanup.phpt +++ b/ext/session/tests/rfc1867_cleanup.phpt @@ -18,15 +18,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-cleanup --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-cleanup-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-cleanup-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -50,7 +50,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-cleanup" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_disabled.phpt b/ext/session/tests/rfc1867_disabled.phpt index 5bedb1de88fc2..8d8effd1f42ca 100644 --- a/ext/session/tests/rfc1867_disabled.phpt +++ b/ext/session/tests/rfc1867_disabled.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-disabled --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-disabled-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-disabled-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-disabled" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_disabled_2.phpt b/ext/session/tests/rfc1867_disabled_2.phpt index d63748369d2c8..c539c6eaeae4e 100644 --- a/ext/session/tests/rfc1867_disabled_2.phpt +++ b/ext/session/tests/rfc1867_disabled_2.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-disabled-2 --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-disabled-2-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-disabled-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-disabled-2" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_inter.phpt b/ext/session/tests/rfc1867_inter.phpt index b961bbcac3053..fd28dfe07a30c 100644 --- a/ext/session/tests/rfc1867_inter.phpt +++ b/ext/session/tests/rfc1867_inter.phpt @@ -18,15 +18,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-inter --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-inter-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-inter-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -54,7 +54,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__) . "_2"])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-inter" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_no_name.phpt b/ext/session/tests/rfc1867_no_name.phpt index 98e8e7cf0988b..15877a664e644 100644 --- a/ext/session/tests/rfc1867_no_name.phpt +++ b/ext/session/tests/rfc1867_no_name.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-no-name --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-no-name-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-no-name-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-no-name" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_sid_cookie.phpt b/ext/session/tests/rfc1867_sid_cookie.phpt index 804a9ba3084b3..85c28934f440b 100644 --- a/ext/session/tests/rfc1867_sid_cookie.phpt +++ b/ext/session/tests/rfc1867_sid_cookie.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-cookie --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-cookie-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-cookie-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-cookie" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_get.phpt b/ext/session/tests/rfc1867_sid_get.phpt index 17d1ebce0f5ad..dfb192cb47cb0 100644 --- a/ext/session/tests/rfc1867_sid_get.phpt +++ b/ext/session/tests/rfc1867_sid_get.phpt @@ -17,13 +17,13 @@ session.save_handler=files --SKIPIF-- --GET-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-get-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -47,7 +47,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-get" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_get_2.phpt b/ext/session/tests/rfc1867_sid_get_2.phpt index 4b32c6e352871..33e4489cc8bd8 100644 --- a/ext/session/tests/rfc1867_sid_get_2.phpt +++ b/ext/session/tests/rfc1867_sid_get_2.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests-cookie +PHPSESSID=rfc1867-sid-get-2-cookie --GET-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-get-2 --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-get-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-get-2" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_only_cookie.phpt b/ext/session/tests/rfc1867_sid_only_cookie.phpt index 0c376bb026a53..54897b91c8582 100644 --- a/ext/session/tests/rfc1867_sid_only_cookie.phpt +++ b/ext/session/tests/rfc1867_sid_only_cookie.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-only-cookie --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-only-cookie-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-only-cookie-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-only-cookie" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_only_cookie_2.phpt b/ext/session/tests/rfc1867_sid_only_cookie_2.phpt index 9b0aae9429af3..3fd46148d724e 100644 --- a/ext/session/tests/rfc1867_sid_only_cookie_2.phpt +++ b/ext/session/tests/rfc1867_sid_only_cookie_2.phpt @@ -16,13 +16,13 @@ session.save_handler=files --SKIPIF-- --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-only-cookie-2-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-only-cookie-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" diff --git a/ext/session/tests/rfc1867_sid_post.phpt b/ext/session/tests/rfc1867_sid_post.phpt index a126f9ba386f7..f22f1534039dc 100644 --- a/ext/session/tests/rfc1867_sid_post.phpt +++ b/ext/session/tests/rfc1867_sid_post.phpt @@ -21,7 +21,7 @@ Content-Type: multipart/form-data; boundary=---------------------------208960602 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests +rfc1867-sid-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -45,7 +45,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-post" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/session_basic1.phpt b/ext/session/tests/session_basic1.phpt index ffdcf6c5eca3f..13c21d3e85af1 100644 --- a/ext/session/tests/session_basic1.phpt +++ b/ext/session/tests/session_basic1.phpt @@ -17,7 +17,7 @@ ob_start(); echo "*** Testing basic session functionality : variation1 ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic1'; session_id($session_id); $path = __DIR__; var_dump(session_save_path($path)); @@ -47,20 +47,20 @@ ob_end_flush(); *** Testing basic session functionality : variation1 *** string(0) "" *** Without lazy_write *** -string(6) "testid" +string(14) "session-basic1" bool(true) array(1) { ["lazy_write"]=> bool(false) } bool(true) -string(6) "testid" +string(14) "session-basic1" *** With lazy_write *** -string(6) "testid" +string(14) "session-basic1" bool(true) bool(true) -string(6) "testid" +string(14) "session-basic1" *** Cleanup *** -string(6) "testid" +string(14) "session-basic1" bool(true) bool(true) diff --git a/ext/session/tests/session_basic2.phpt b/ext/session/tests/session_basic2.phpt index cb9585303ce2a..68230f89b76c9 100644 --- a/ext/session/tests/session_basic2.phpt +++ b/ext/session/tests/session_basic2.phpt @@ -19,7 +19,7 @@ ob_start(); echo "*** Testing basic session functionality : variation2 ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic2'; session_id($session_id); $path = __DIR__; var_dump(session_save_path($path)); @@ -55,7 +55,7 @@ ob_end_flush(); *** Testing basic session functionality : variation2 *** string(0) "" *** Without lazy_write *** -string(6) "testid" +string(14) "session-basic2" bool(true) bool(true) bool(true) diff --git a/ext/session/tests/session_basic3.phpt b/ext/session/tests/session_basic3.phpt index f6ed10e2962af..5f6bd72b82ab5 100644 --- a/ext/session/tests/session_basic3.phpt +++ b/ext/session/tests/session_basic3.phpt @@ -93,7 +93,7 @@ output_reset_rewrite_vars(); echo "*** Test trans sid ***\n"; ob_start(); -$session_id = 'testid'; +$session_id = 'session-basic3'; session_id($session_id); session_start(); // Should add session ID to relative URL only for SECURITY @@ -225,39 +225,39 @@ ob_end_flush(); *** Testing basic session functionality : variation3 use_trans_sid *** *** Test trans sid *** -test -test -test -test -test -test -test -test +test +test +test +test +test +test +test +test -test -test -test -test -test -test +test +test +test +test +test +test -test -test -test -test -test -test -test -test +test +test +test +test +test +test +test +test -test -test -test -test -test -test -test -test +test +test +test +test +test +test +test +test test test @@ -310,19 +310,19 @@ ob_end_flush(); test test - + -
+
-
+
-
+
@@ -341,5 +341,5 @@ ob_end_flush(); bool(true) *** Cleanup *** bool(true) -string(6) "testid" +string(14) "session-basic3" bool(true) diff --git a/ext/session/tests/session_basic5.phpt b/ext/session/tests/session_basic5.phpt index 50e6cde920d0d..6a7511c317072 100644 --- a/ext/session/tests/session_basic5.phpt +++ b/ext/session/tests/session_basic5.phpt @@ -24,7 +24,7 @@ ini_set('session.trans_sid_hosts','php.net,example.com'); echo "*** Testing basic session functionality : variation5 use_trans_sid ***\n"; echo "*** Test trans sid ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic5'; session_id($session_id); session_start(); // Should add session ID to allowed hosts only for SECURITY @@ -238,116 +238,116 @@ ob_end_flush(); *** Testing basic session functionality : variation5 use_trans_sid *** *** Test trans sid *** -test -test -test -test -test -test -test -test - -test -test -test -test -test -test - -test -test -test -test -test -test -test -test - -test -test -test -test -test -test -test -test - -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test - -test -test -test -test -test -test -test -test -test -test -test -test -test -test - -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test -test - -
+test +test +test +test +test +test +test +test + +test +test +test +test +test +test + +test +test +test +test +test +test +test +test + +test +test +test +test +test +test +test +test + +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test + +test +test +test +test +test +test +test +test +test +test +test +test +test +test + +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test +test + +
-
r +r
-
+
-
+
-
+
-
+
-
+
@@ -436,5 +436,5 @@ ob_end_flush(); bool(true) *** Cleanup *** bool(true) -string(6) "testid" +string(14) "session-basic5" bool(true) diff --git a/ext/session/tests/session_commit_variation4.phpt b/ext/session/tests/session_commit_variation4.phpt index 2633f543af5d3..b0c3ad4a9432d 100644 --- a/ext/session/tests/session_commit_variation4.phpt +++ b/ext/session/tests/session_commit_variation4.phpt @@ -12,7 +12,7 @@ ob_start(); echo "*** Testing session_commit() : variation ***\n"; var_dump(ini_get('session.use_strict_mode')); -var_dump(session_id("test")); +var_dump(session_id("session-commit-variation4")); var_dump(session_start()); var_dump(session_id()); var_dump(session_commit()); @@ -38,18 +38,18 @@ ob_end_flush(); string(1) "0" string(0) "" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) string(1) "0" -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) bool(true) string(1) "0" diff --git a/ext/session/tests/session_module_name_variation4.phpt b/ext/session/tests/session_module_name_variation4.phpt index 9b845151a899f..7e58ddc6c48e9 100644 --- a/ext/session/tests/session_module_name_variation4.phpt +++ b/ext/session/tests/session_module_name_variation4.phpt @@ -15,6 +15,8 @@ echo "*** Testing session_module_name() : variation ***\n"; require_once "save_handler.inc"; $path = __DIR__; +$path = __DIR__ . '/session_module_name_variation4'; +@mkdir($path); session_save_path($path); session_module_name("files"); @@ -35,6 +37,7 @@ var_dump($_SESSION); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECT-- *** Testing session_module_name() : variation *** diff --git a/ext/session/tests/session_save_path_variation4.phpt b/ext/session/tests/session_save_path_variation4.phpt index 8b3df52262569..ec22e92051fa5 100644 --- a/ext/session/tests/session_save_path_variation4.phpt +++ b/ext/session/tests/session_save_path_variation4.phpt @@ -14,7 +14,7 @@ ob_start(); echo "*** Testing session_save_path() : variation ***\n"; $initdir = __DIR__; -$sessions = ($initdir."/sessions"); +$sessions = ($initdir."/session_save_path_variation4"); chdir($initdir); @@ -38,7 +38,7 @@ ob_end_flush(); --CLEAN-- --EXPECTF-- diff --git a/ext/session/tests/session_save_path_variation5.phpt b/ext/session/tests/session_save_path_variation5.phpt index 446a472ab4690..3977d0deab409 100644 --- a/ext/session/tests/session_save_path_variation5.phpt +++ b/ext/session/tests/session_save_path_variation5.phpt @@ -15,7 +15,7 @@ session.name=PHPSESSID ob_start(); echo "*** Testing session_save_path() : variation ***\n"; $directory = __DIR__; -$sessions = ($directory."/sessions"); +$sessions = ($directory."/session_save_path_variation5"); chdir($directory); ini_set('open_basedir', '.'); @@ -36,7 +36,7 @@ ob_end_flush(); --CLEAN-- --EXPECTF-- diff --git a/ext/session/tests/session_set_save_handler_basic.phpt b/ext/session/tests/session_set_save_handler_basic.phpt index 459f03c825a6b..23865aa512bf6 100644 --- a/ext/session/tests/session_set_save_handler_basic.phpt +++ b/ext/session/tests/session_set_save_handler_basic.phpt @@ -20,7 +20,8 @@ var_dump(session_module_name(FALSE)); var_dump(session_module_name("blah")); var_dump(session_module_name("foo")); -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_basic'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "gc"); @@ -55,6 +56,7 @@ session_start(); session_destroy(); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : basic functionality *** diff --git a/ext/session/tests/session_set_save_handler_variation2.phpt b/ext/session/tests/session_set_save_handler_variation2.phpt index 224846466e1af..a4b7d4df6ee54 100644 --- a/ext/session/tests/session_set_save_handler_variation2.phpt +++ b/ext/session/tests/session_set_save_handler_variation2.phpt @@ -10,13 +10,15 @@ ob_start(); echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation2'; +@mkdir($path); session_save_path($path); var_dump(session_start()); var_dump(session_set_save_handler("open", "close", "read", "write", "destroy", "gc")); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation3.phpt b/ext/session/tests/session_set_save_handler_variation3.phpt index be825cbe7234f..cc0ae1fb23443 100644 --- a/ext/session/tests/session_set_save_handler_variation3.phpt +++ b/ext/session/tests/session_set_save_handler_variation3.phpt @@ -12,13 +12,15 @@ ob_start(); echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation3'; +@mkdir($path); var_dump(session_status()); session_save_path($path); var_dump(session_set_save_handler("open", "close", "read", "write", "destroy", "gc")); var_dump(session_destroy()); - ob_end_flush(); + +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation4.phpt b/ext/session/tests/session_set_save_handler_variation4.phpt index e1b61f29a75c0..9930f7aaf2c6c 100644 --- a/ext/session/tests/session_set_save_handler_variation4.phpt +++ b/ext/session/tests/session_set_save_handler_variation4.phpt @@ -23,7 +23,8 @@ function noisy_gc($maxlifetime) { } require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation4'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "noisy_gc"); @@ -42,13 +43,14 @@ var_dump($_SESSION); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** Open [%s,PHPSESSID] Read [%s,%s] GC [0] -2 deleted +1 deleted array(3) { ["Blah"]=> string(12) "Hello World!" diff --git a/ext/session/tests/session_set_save_handler_variation5.phpt b/ext/session/tests/session_set_save_handler_variation5.phpt index 9860dcc04aa82..7cf7814259039 100644 --- a/ext/session/tests/session_set_save_handler_variation5.phpt +++ b/ext/session/tests/session_set_save_handler_variation5.phpt @@ -24,7 +24,8 @@ function noisy_gc($maxlifetime) { echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation5'; +@mkdir($path); var_dump(session_save_path($path)); echo "*** Without lazy_write ***\n"; @@ -48,6 +49,7 @@ var_dump(session_start()); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation6.phpt b/ext/session/tests/session_set_save_handler_variation6.phpt index d65c0dc1c83bb..11af07f6038ae 100644 --- a/ext/session/tests/session_set_save_handler_variation6.phpt +++ b/ext/session/tests/session_set_save_handler_variation6.phpt @@ -17,7 +17,8 @@ ob_start(); echo "*** Testing session_set_save_handler() : test write short circuit ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation6'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "gc", "create_sid", "validate_sid", "update"); @@ -53,6 +54,7 @@ session_start(); session_destroy(); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : test write short circuit *** diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 0ca49fc208cd2..0925d345cc151 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -934,10 +934,13 @@ static int netsnmp_session_set_sec_level(struct snmp_session *s, char *level) Set the authentication protocol in the snmpv3 session */ static int netsnmp_session_set_auth_protocol(struct snmp_session *s, char *prot) { +#ifndef DISABLE_MD5 if (!strcasecmp(prot, "MD5")) { s->securityAuthProto = usmHMACMD5AuthProtocol; s->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN; - } else if (!strcasecmp(prot, "SHA")) { + } else +#endif + if (!strcasecmp(prot, "SHA")) { s->securityAuthProto = usmHMACSHA1AuthProtocol; s->securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN; } else { @@ -1321,9 +1324,9 @@ PHP_FUNCTION(snmp_get_quick_print) /* {{{ Return all objects including their respective object id within the specified one */ PHP_FUNCTION(snmp_set_quick_print) { - zend_long a1; + zend_bool a1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) { RETURN_THROWS(); } @@ -1335,9 +1338,9 @@ PHP_FUNCTION(snmp_set_quick_print) /* {{{ Return all values that are enums with their enum value instead of the raw integer */ PHP_FUNCTION(snmp_set_enum_print) { - zend_long a1; + zend_bool a1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) { RETURN_THROWS(); } diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 28cdd5f4f7155..25ad96d033175 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -2,49 +2,70 @@ /** @generate-function-entries */ -function snmpget(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmpget(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmpgetnext(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmpgetnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmpwalk(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmpwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmprealwalk(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmprealwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} /** @alias snmprealwalk */ -function snmpwalkoid(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmpwalkoid(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmpset(string $host, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): array|bool {} +function snmpset(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): array|bool {} function snmp_get_quick_print(): bool {} -function snmp_set_quick_print(int $quick_print): bool {} +function snmp_set_quick_print(bool $enable): bool {} -function snmp_set_enum_print(int $enum_print): bool {} +function snmp_set_enum_print(bool $enable): bool {} -function snmp_set_oid_output_format(int $oid_format): bool {} +function snmp_set_oid_output_format(int $format): bool {} /** @alias snmp_set_oid_output_format */ -function snmp_set_oid_numeric_print(int $oid_format): bool {} +function snmp_set_oid_numeric_print(int $format): bool {} -function snmp2_get(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmp2_get(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmp2_getnext(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmp2_getnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmp2_walk(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmp2_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmp2_real_walk(string $host, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmp2_real_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmp2_set(string $host, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): array|bool {} +function snmp2_set(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): array|bool {} -function snmp3_get(string $host, string $sec_name, string $sec_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmp3_get( + string $hostname, string $security_name, string $security_level, + string $auth_protocol, string $auth_passphrase, + string $privacy_protocol, string $privacy_passphrase, + array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmp3_getnext(string $host, string $sec_name, string $sec_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} +function snmp3_getnext( + string $hostname, string $security_name, string $security_level, + string $auth_protocol, string $auth_passphrase, + string $privacy_protocol, string $privacy_passphrase, + array|string $object_id, int $timeout = -1, int $retries = -1): stdClass|array|string|bool {} -function snmp3_walk(string $host, string $sec_name, string $sec_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmp3_walk( + string $hostname, string $security_name, string $security_level, + string $auth_protocol, string $auth_passphrase, + string $privacy_protocol, string $privacy_passphrase, + array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmp3_real_walk(string $host, string $sec_name, string $sec_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} +function snmp3_real_walk( + string $hostname, string $security_name, string $security_level, + string $auth_protocol, string $auth_passphrase, + string $privacy_protocol, string $privacy_passphrase, + array|string $object_id, int $timeout = -1, int $retries = -1): array|bool {} -function snmp3_set(string $host, string $sec_name, string $sec_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): array|bool {} +function snmp3_set( + string $hostname, string $security_name, string $security_level, + string $auth_protocol, string $auth_passphrase, + string $privacy_protocol, string $privacy_passphrase, + array|string $object_id, array|string $type, array|string $value, + int $timeout = -1, int $retries = -1): array|bool {} function snmp_set_valueretrieval(int $method): bool {} @@ -54,25 +75,28 @@ function snmp_read_mib(string $filename): bool {} class SNMP { - public function __construct(int $version, string $host, string $community, int $timeout = -1, int $retries = -1) {} + public function __construct(int $version, string $hostname, string $community, int $timeout = -1, int $retries = -1) {} /** @return bool */ public function close() {} /** @return bool */ - public function setSecurity(string $sec_level, string $auth_protocol = "", string $auth_passphrase = "", string $priv_protocol = "", string $priv_passphrase = "", string $contextName = "", string $contextEngineID = "") {} + public function setSecurity( + string $securityLevel, string $authProtocol = "", string $authPassphrase = "", + string $privacyProtocol = "", string $privacyPassphrase = "", + string $contextName = "", string $contextEngineId = "") {} /** @return array|bool */ - public function get(array|string $object_id, bool $use_orignames = false) {} + public function get(array|string $objectId, bool $preserveKeys = false) {} /** @return array|bool */ - public function getnext(array|string $object_id) {} + public function getnext(array|string $objectId) {} /** @return array|bool */ - public function walk(array|string $object_id, bool $suffix_keys = false, int $max_repetitions = -1, int $non_repeaters = -1) {} + public function walk(array|string $objectId, bool $suffixAsKey = false, int $maxRepetitions = -1, int $nonRepeaters = -1) {} /** @return array|bool */ - public function set(array|string $object_id, array|string $type, array|string $value) {} + public function set(array|string $objectId, array|string $type, array|string $value) {} /** @return int */ public function getErrno() {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 69d404bef733a..7a91113c50a1f 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 31a125dde8e52e7849c8cd62ac410be9249a80df */ + * Stub hash: 68d61381ba27923bb68d6d9c6e5d5e8ff296cc90 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_snmpget, 0, 3, stdClass, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, community, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") @@ -12,7 +12,7 @@ ZEND_END_ARG_INFO() #define arginfo_snmpgetnext arginfo_snmpget ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_snmpwalk, 0, 3, MAY_BE_ARRAY|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, community, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") @@ -24,7 +24,7 @@ ZEND_END_ARG_INFO() #define arginfo_snmpwalkoid arginfo_snmpwalk ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_snmpset, 0, 5, MAY_BE_ARRAY|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, community, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_MASK(0, type, MAY_BE_ARRAY|MAY_BE_STRING, NULL) @@ -37,15 +37,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_get_quick_print, 0, 0, _IS_ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_quick_print, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, quick_print, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_enum_print, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, enum_print, IS_LONG, 0) -ZEND_END_ARG_INFO() +#define arginfo_snmp_set_enum_print arginfo_snmp_set_quick_print ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_oid_output_format, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, oid_format, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_snmp_set_oid_numeric_print arginfo_snmp_set_oid_output_format @@ -61,13 +59,13 @@ ZEND_END_ARG_INFO() #define arginfo_snmp2_set arginfo_snmpset ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_snmp3_get, 0, 8, stdClass, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_level, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_level, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_protocol, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_passphrase, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_protocol, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_passphrase, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_protocol, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_passphrase, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retries, IS_LONG, 0, "-1") @@ -76,13 +74,13 @@ ZEND_END_ARG_INFO() #define arginfo_snmp3_getnext arginfo_snmp3_get ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_snmp3_walk, 0, 8, MAY_BE_ARRAY|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_level, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_level, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_protocol, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_passphrase, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_protocol, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_passphrase, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_protocol, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_passphrase, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retries, IS_LONG, 0, "-1") @@ -91,13 +89,13 @@ ZEND_END_ARG_INFO() #define arginfo_snmp3_real_walk arginfo_snmp3_walk ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_snmp3_set, 0, 10, MAY_BE_ARRAY|MAY_BE_BOOL) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, sec_level, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, security_level, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_protocol, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, auth_passphrase, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_protocol, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, priv_passphrase, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_protocol, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, privacy_passphrase, IS_STRING, 0) ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_MASK(0, type, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_MASK(0, value, MAY_BE_ARRAY|MAY_BE_STRING, NULL) @@ -118,7 +116,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP___construct, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, version, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, community, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, retries, IS_LONG, 0, "-1") @@ -128,33 +126,33 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_close, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_setSecurity, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, sec_level, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_protocol, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, auth_passphrase, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_protocol, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, priv_passphrase, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO(0, securityLevel, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, authProtocol, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, authPassphrase, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, privacyProtocol, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, privacyPassphrase, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextName, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextEngineID, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextEngineId, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_get, 0, 0, 1) - ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_orignames, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserveKeys, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_getnext, 0, 0, 1) - ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_walk, 0, 0, 1) - ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, suffix_keys, _IS_BOOL, 0, "false") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_repetitions, IS_LONG, 0, "-1") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, non_repeaters, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, suffixAsKey, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxRepetitions, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nonRepeaters, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP_set, 0, 0, 3) - ZEND_ARG_TYPE_MASK(0, object_id, MAY_BE_ARRAY|MAY_BE_STRING, NULL) + ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_MASK(0, type, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_MASK(0, value, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() diff --git a/ext/snmp/tests/snmp_set_oid_output_format.phpt b/ext/snmp/tests/snmp_set_oid_output_format.phpt index 9cc28b3c6df10..dddf81914aeca 100644 --- a/ext/snmp/tests/snmp_set_oid_output_format.phpt +++ b/ext/snmp/tests/snmp_set_oid_output_format.phpt @@ -24,7 +24,7 @@ var_dump(snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC)); ?> --EXPECT-- Checking error handling -snmp_set_oid_output_format(): Argument #1 ($oid_format) must be an SNMP_OID_OUTPUT_* constant +snmp_set_oid_output_format(): Argument #1 ($format) must be an SNMP_OID_OUTPUT_* constant Checking working bool(true) bool(true) diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 60a4ca5cc97fe..861d8ebf5d3a3 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -2188,7 +2188,7 @@ PHP_METHOD(SoapClient, __construct) } /* }}} */ -static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *action, int version, int one_way, zval *response) /* {{{ */ +static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *action, int version, zend_bool one_way, zval *response) /* {{{ */ { int ret = TRUE; char *buf; @@ -2226,7 +2226,7 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act ZVAL_STRING(¶ms[2], action); } ZVAL_LONG(¶ms[3], version); - ZVAL_LONG(¶ms[4], one_way); + ZVAL_BOOL(¶ms[4], one_way); if (call_user_function(NULL, this_ptr, &func, response, 5, params) != SUCCESS) { add_soap_fault(this_ptr, "Client", "SoapClient::__doRequest() failed", NULL, NULL); @@ -2361,7 +2361,7 @@ static void do_soap_call(zend_execute_data *execute_data, fn = get_function(sdl, function); if (fn != NULL) { sdlBindingPtr binding = fn->binding; - int one_way = 0; + zend_bool one_way = 0; if (fn->responseName == NULL && fn->responseParameters == NULL && @@ -2758,10 +2758,10 @@ PHP_METHOD(SoapClient, __doRequest) char *location, *action; size_t location_size, action_size; zend_long version; - zend_long one_way = 0; + zend_bool one_way = 0; zval *this_ptr = ZEND_THIS; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sssl|l", + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sssl|b", &buf, &location, &location_size, &action, &action_size, diff --git a/ext/soap/soap.stub.php b/ext/soap/soap.stub.php index acbbe2a6fa19a..fd4c84bdb2fc3 100644 --- a/ext/soap/soap.stub.php +++ b/ext/soap/soap.stub.php @@ -2,7 +2,7 @@ /** @generate-function-entries */ -function use_soap_error_handler(bool $handler = true): bool {} +function use_soap_error_handler(bool $enable = true): bool {} function is_soap_fault(mixed $object): bool {} @@ -13,19 +13,19 @@ public function __construct(mixed $data, string $name) {} class SoapHeader { - public function __construct(string $namespace, string $name, mixed $data = UNKNOWN, bool $mustunderstand = false, string|int|null $actor = null) {} + public function __construct(string $namespace, string $name, mixed $data = UNKNOWN, bool $mustUnderstand = false, string|int|null $actor = null) {} } class SoapFault extends Exception { - public function __construct(array|string|null $faultcode, string $faultstring, ?string $faultactor = null, mixed $detail = null, ?string $faultname = null, mixed $headerfault = null) {} + public function __construct(array|string|null $code, string $string, ?string $actor = null, mixed $details = null, ?string $name = null, mixed $headerFault = null) {} public function __toString(): string {} } class SoapVar { - public function __construct(mixed $data, ?int $encoding, string $type_name = "", string $type_namespace = "", string $node_name = "", string $node_namespace = "") {} + public function __construct(mixed $data, ?int $encoding, string $typeName = "", string $typeNamespace = "", string $nodeName = "", string $nodeNamespace = "") {} } class SoapServer @@ -36,13 +36,13 @@ public function __construct(?string $wsdl, array $options = []) {} public function fault(string $code, string $string, string $actor = "", mixed $details = null, string $name = "") {} /** @return void */ - public function addSoapHeader(SoapHeader $object) {} + public function addSoapHeader(SoapHeader $header) {} /** @return void */ public function setPersistence(int $mode) {} /** @return void */ - public function setClass(string $class_name, mixed ...$argv) {} + public function setClass(string $class, mixed ...$args) {} /** @return void */ public function setObject(object $object) {} @@ -57,7 +57,7 @@ public function getFunctions() {} public function addFunction($functions) {} /** @return void */ - public function handle(?string $soap_request = null) {} + public function handle(?string $request = null) {} } class SoapClient @@ -65,14 +65,14 @@ class SoapClient public function __construct(?string $wsdl, array $options = []) {} /** @return mixed */ - public function __call(string $function_name, array $arguments) {} + public function __call(string $name, array $args) {} /** - * @param SoapHeader|array|null $input_headers - * @param array $output_headers + * @param SoapHeader|array|null $inputHeaders + * @param array $outputHeaders * @return mixed */ - public function __soapCall(string $function_name, array $arguments, ?array $options = null, $input_headers = null, &$output_headers = null) {} + public function __soapCall(string $name, array $args, ?array $options = null, $inputHeaders = null, &$outputHeaders = null) {} /** @return array|null */ public function __getFunctions() {} @@ -93,7 +93,7 @@ public function __getLastRequestHeaders() {} public function __getLastResponseHeaders() {} /** @return string|null */ - public function __doRequest(string $request, string $location, string $action, int $version, int $one_way = 0) {} + public function __doRequest(string $request, string $location, string $action, int $version, bool $oneWay = false) {} /** @return void */ public function __setCookie(string $name, ?string $value = null) {} @@ -102,11 +102,11 @@ public function __setCookie(string $name, ?string $value = null) {} public function __getCookies() {} /** - * @param SoapHeader|array|null $soapheaders + * @param SoapHeader|array|null $headers * @return bool */ - public function __setSoapHeaders($soapheaders = null) {} + public function __setSoapHeaders($headers = null) {} /** @return string|null */ - public function __setLocation(string $new_location = "") {} + public function __setLocation(string $location = "") {} } diff --git a/ext/soap/soap_arginfo.h b/ext/soap/soap_arginfo.h index 03b559d4fcb18..76824922de10e 100644 --- a/ext/soap/soap_arginfo.h +++ b/ext/soap/soap_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b33d57ddba20c64739d51bfba39f2557026939cd */ + * Stub hash: 4f958b1c954386207619cfaefa02c96e90cc0da7 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_use_soap_error_handler, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, handler, _IS_BOOL, 0, "true") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_soap_fault, 0, 1, _IS_BOOL, 0) @@ -18,17 +18,17 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapHeader___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mustunderstand, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mustUnderstand, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_MASK(0, actor, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_NULL, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapFault___construct, 0, 0, 2) - ZEND_ARG_TYPE_MASK(0, faultcode, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, NULL) - ZEND_ARG_TYPE_INFO(0, faultstring, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, faultactor, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, detail, IS_MIXED, 0, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, faultname, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, headerfault, IS_MIXED, 0, "null") + ZEND_ARG_TYPE_MASK(0, code, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, NULL) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, actor, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, details, IS_MIXED, 0, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, headerFault, IS_MIXED, 0, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SoapFault___toString, 0, 0, IS_STRING, 0) @@ -37,10 +37,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapVar___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, encoding, IS_LONG, 1) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type_name, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type_namespace, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, node_name, IS_STRING, 0, "\"\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, node_namespace, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, typeName, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, typeNamespace, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nodeName, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nodeNamespace, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer___construct, 0, 0, 1) @@ -57,7 +57,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_fault, 0, 0, 2) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_addSoapHeader, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, object, SoapHeader, 0) + ZEND_ARG_OBJ_INFO(0, header, SoapHeader, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_setPersistence, 0, 0, 1) @@ -65,8 +65,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_setPersistence, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_setClass, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) - ZEND_ARG_VARIADIC_TYPE_INFO(0, argv, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) + ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_setObject, 0, 0, 1) @@ -81,22 +81,22 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_addFunction, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_handle, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, soap_request, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, request, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_SoapClient___construct arginfo_class_SoapServer___construct ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___call, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, arguments, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___soapCall, 0, 0, 2) - ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, arguments, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, input_headers, "null") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, output_headers, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, inputHeaders, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, outputHeaders, "null") ZEND_END_ARG_INFO() #define arginfo_class_SoapClient___getFunctions arginfo_class_SoapServer_getFunctions @@ -116,7 +116,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___doRequest, 0, 0, 4) ZEND_ARG_TYPE_INFO(0, location, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, action, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, version, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, one_way, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, oneWay, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___setCookie, 0, 0, 1) @@ -127,11 +127,11 @@ ZEND_END_ARG_INFO() #define arginfo_class_SoapClient___getCookies arginfo_class_SoapServer_getFunctions ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___setSoapHeaders, 0, 0, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, soapheaders, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, headers, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___setLocation, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, new_location, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, location, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() diff --git a/ext/soap/tests/bug73037.phpt b/ext/soap/tests/bug73037.phpt index 4e7293286244e..8060575bd88f0 100644 --- a/ext/soap/tests/bug73037.phpt +++ b/ext/soap/tests/bug73037.phpt @@ -1,7 +1,5 @@ --TEST-- Bug #73037 SoapServer reports Bad Request when gzipped, var 0 ---CONFLICTS-- -server --SKIPIF-- ---FILE-- -getMethod('__soapCall'); -$arrParams = $objRfMethod->getParameters(); -foreach($arrParams as $objRfParam) -{ - var_dump($objRfParam->getName()); -} -?> ---EXPECT-- -string(13) "function_name" -string(9) "arguments" -string(7) "options" -string(13) "input_headers" -string(14) "output_headers" diff --git a/ext/soap/tests/bugs/bug54911.phpt b/ext/soap/tests/bugs/bug54911.phpt index ef7ca1fc42780..a974c22901bba 100644 --- a/ext/soap/tests/bugs/bug54911.phpt +++ b/ext/soap/tests/bugs/bug54911.phpt @@ -15,7 +15,7 @@ Bug #54911 (Access to a undefined member in inherit SoapClient may cause Segment --EXPECTF-- Fatal error: Uncaught SoapFault exception: [Client] Access to undeclared static property XSoapClient::$crash in %sbug54911.php:4 Stack trace: -#0 [internal function]: XSoapClient->__doRequest('__doRequest('__soapCall('', Array) #2 {main} thrown in %sbug54911.php on line 4 diff --git a/ext/soap/tests/custom_content_type.phpt b/ext/soap/tests/custom_content_type.phpt index 17a074f102425..9172d3d6ca4c6 100644 --- a/ext/soap/tests/custom_content_type.phpt +++ b/ext/soap/tests/custom_content_type.phpt @@ -8,8 +8,6 @@ SOAP customized Content-Type, eg. SwA use case echo "skip sapi/cli/tests/php_cli_server.inc required but not found"; } ?> ---CONFLICTS-- -server --FILE-- --EXPECT-- -SoapFault::__construct(): Argument #1 ($faultcode) is not a valid fault code -SoapFault::__construct(): Argument #1 ($faultcode) must be of type array|string|null, stdClass given +SoapFault::__construct(): Argument #1 ($code) is not a valid fault code +SoapFault::__construct(): Argument #1 ($code) must be of type array|string|null, stdClass given SoapFault SoapFault -SoapFault::__construct(): Argument #1 ($faultcode) is not a valid fault code -SoapFault::__construct(): Argument #1 ($faultcode) is not a valid fault code +SoapFault::__construct(): Argument #1 ($code) is not a valid fault code +SoapFault::__construct(): Argument #1 ($code) is not a valid fault code SoapFault diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 0b21c4f6843ff..a9d0e4b885135 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -272,7 +272,6 @@ static int php_accept_connect(php_socket *in_sock, php_socket *out_sock, struct if (IS_INVALID_SOCKET(out_sock)) { PHP_SOCKET_ERROR(out_sock, "unable to accept incoming connection", errno); - efree(out_sock); return 0; } @@ -1045,11 +1044,7 @@ PHP_FUNCTION(socket_read) if (retval == -1) { /* if the socket is in non-blocking mode and there's no data to read, don't output any error, as this is a normal situation, and not an error */ - if (errno == EAGAIN -#ifdef EWOULDBLOCK - || errno == EWOULDBLOCK -#endif - ) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { php_sock->error = errno; SOCKETS_G(last_error) = errno; } else { diff --git a/ext/sockets/sockets.stub.php b/ext/sockets/sockets.stub.php index 8acab114e563d..1a62d83193797 100644 --- a/ext/sockets/sockets.stub.php +++ b/ext/sockets/sockets.stub.php @@ -10,7 +10,7 @@ final class AddressInfo { } -function socket_select(?array &$read_fds, ?array &$write_fds, ?array &$except_fds, ?int $tv_sec, int $tv_usec = 0): int|false {} +function socket_select(?array &$read, ?array &$write, ?array &$except, ?int $seconds, int $microseconds = 0): int|false {} function socket_create_listen(int $port, int $backlog = 128): Socket|false {} @@ -24,65 +24,65 @@ function socket_listen(Socket $socket, int $backlog = 0): bool {} function socket_close(Socket $socket): void {} -function socket_write(Socket $socket, string $buf, ?int $length = null): int|false {} +function socket_write(Socket $socket, string $data, ?int $length = null): int|false {} -function socket_read(Socket $socket, int $length, int $type = PHP_BINARY_READ): string|false {} +function socket_read(Socket $socket, int $length, int $mode = PHP_BINARY_READ): string|false {} /** - * @param string $addr + * @param string $address * @param int $port */ -function socket_getsockname(Socket $socket, &$addr, &$port = null): bool {} +function socket_getsockname(Socket $socket, &$address, &$port = null): bool {} /** - * @param string $addr + * @param string $address * @param int $port */ -function socket_getpeername(Socket $socket, &$addr, &$port = null): bool {} +function socket_getpeername(Socket $socket, &$address, &$port = null): bool {} function socket_create(int $domain, int $type, int $protocol): Socket|false {} -function socket_connect(Socket $socket, string $addr, ?int $port = null): bool {} +function socket_connect(Socket $socket, string $address, ?int $port = null): bool {} -function socket_strerror(int $errno): string {} +function socket_strerror(int $error_code): string {} -function socket_bind(Socket $socket, string $addr, int $port = 0): bool {} +function socket_bind(Socket $socket, string $address, int $port = 0): bool {} -/** @param string|null $buf */ -function socket_recv(Socket $socket, &$buf, int $len, int $flags): int|false {} +/** @param string|null $data */ +function socket_recv(Socket $socket, &$data, int $length, int $flags): int|false {} -function socket_send(Socket $socket, string $buf, int $len, int $flags): int|false {} +function socket_send(Socket $socket, string $data, int $length, int $flags): int|false {} /** - * @param string $buf - * @param string $name + * @param string $data + * @param string $address * @param int $port */ -function socket_recvfrom(Socket $socket, &$buf, int $len, int $flags, &$name, &$port = null): int|false {} +function socket_recvfrom(Socket $socket, &$data, int $length, int $flags, &$address, &$port = null): int|false {} -function socket_sendto(Socket $socket, string $buf, int $len, int $flags, string $addr, ?int $port = null): int|false {} +function socket_sendto(Socket $socket, string $data, int $length, int $flags, string $address, ?int $port = null): int|false {} -function socket_get_option(Socket $socket, int $level, int $optname): array|int|false {} +function socket_get_option(Socket $socket, int $level, int $option): array|int|false {} /** @alias socket_get_option */ -function socket_getopt(Socket $socket, int $level, int $optname): array|int|false {} +function socket_getopt(Socket $socket, int $level, int $option): array|int|false {} -/** @param array|string|int $optval */ -function socket_set_option(Socket $socket, int $level, int $optname, $optval): bool {} +/** @param array|string|int $value */ +function socket_set_option(Socket $socket, int $level, int $option, $value): bool {} /** - * @param array|string|int $optval + * @param array|string|int $value * @alias socket_set_option */ -function socket_setopt(Socket $socket, int $level, int $optname, $optval): bool {} +function socket_setopt(Socket $socket, int $level, int $option, $value): bool {} #ifdef HAVE_SOCKETPAIR -/** @param array $fd */ -function socket_create_pair(int $domain, int $type, int $protocol, &$fd): ?bool {} +/** @param array $pair */ +function socket_create_pair(int $domain, int $type, int $protocol, &$pair): ?bool {} #endif #ifdef HAVE_SHUTDOWN -function socket_shutdown(Socket $socket, int $how = 2): bool {} +function socket_shutdown(Socket $socket, int $mode = 2): bool {} #endif function socket_last_error(?Socket $socket = null): int {} @@ -95,22 +95,22 @@ function socket_import_stream($stream): Socket|false {} /** @return resource|false */ function socket_export_stream(Socket $socket) {} -function socket_sendmsg(Socket $socket, array $msghdr, int $flags = 0): int|false {} +function socket_sendmsg(Socket $socket, array $message, int $flags = 0): int|false {} -function socket_recvmsg(Socket $socket, array &$msghdr, int $flags = 0): int|false {} +function socket_recvmsg(Socket $socket, array &$message, int $flags = 0): int|false {} -function socket_cmsg_space(int $level, int $type, int $n = 0): ?int {} +function socket_cmsg_space(int $level, int $type, int $num = 0): ?int {} function socket_addrinfo_lookup(string $host, ?string $service = null, array $hints = []): array|false {} -function socket_addrinfo_connect(AddressInfo $addr): Socket|false {} +function socket_addrinfo_connect(AddressInfo $address): Socket|false {} -function socket_addrinfo_bind(AddressInfo $addr): Socket|false {} +function socket_addrinfo_bind(AddressInfo $address): Socket|false {} -function socket_addrinfo_explain(AddressInfo $addr): array {} +function socket_addrinfo_explain(AddressInfo $address): array {} #ifdef PHP_WIN32 -function socket_wsaprotocol_info_export(Socket $socket, int $target_pid): string|false {} +function socket_wsaprotocol_info_export(Socket $socket, int $process_id): string|false {} function socket_wsaprotocol_info_import(string $info_id): Socket|false {} diff --git a/ext/sockets/sockets_arginfo.h b/ext/sockets/sockets_arginfo.h index 0923918a9419c..f86f2250267ae 100644 --- a/ext/sockets/sockets_arginfo.h +++ b/ext/sockets/sockets_arginfo.h @@ -1,12 +1,12 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: f35790f5f703b37c45230e97e8f0ee736727b4bd */ + * Stub hash: ee025740240c285691a84cfa3563c1dd1586a75d */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(1, read_fds, IS_ARRAY, 1) - ZEND_ARG_TYPE_INFO(1, write_fds, IS_ARRAY, 1) - ZEND_ARG_TYPE_INFO(1, except_fds, IS_ARRAY, 1) - ZEND_ARG_TYPE_INFO(0, tv_sec, IS_LONG, 1) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, tv_usec, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1) + ZEND_ARG_TYPE_INFO(1, write, IS_ARRAY, 1) + ZEND_ARG_TYPE_INFO(1, except, IS_ARRAY, 1) + ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 1) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, microseconds, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_socket_create_listen, 0, 1, Socket, MAY_BE_FALSE) @@ -35,19 +35,19 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_write, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_read, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "PHP_BINARY_READ") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "PHP_BINARY_READ") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_getsockname, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_INFO(1, addr) + ZEND_ARG_INFO(1, address) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, port, "null") ZEND_END_ARG_INFO() @@ -61,56 +61,56 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_connect, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, addr, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, address, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_strerror, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, errno, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_bind, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, addr, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, address, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_recv, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_INFO(1, buf) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_INFO(1, data) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_send, 0, 4, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_recvfrom, 0, 5, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_INFO(1, buf) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_INFO(1, data) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) - ZEND_ARG_INFO(1, name) + ZEND_ARG_INFO(1, address) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, port, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_sendto, 0, 5, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, buf, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, addr, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, address, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_get_option, 0, 3, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) ZEND_ARG_TYPE_INFO(0, level, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, optname, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_socket_getopt arginfo_socket_get_option @@ -118,8 +118,8 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_set_option, 0, 4, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) ZEND_ARG_TYPE_INFO(0, level, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, optname, IS_LONG, 0) - ZEND_ARG_INFO(0, optval) + ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) + ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() #define arginfo_socket_setopt arginfo_socket_set_option @@ -129,14 +129,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_create_pair, 0, 4, _IS_BO ZEND_ARG_TYPE_INFO(0, domain, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, protocol, IS_LONG, 0) - ZEND_ARG_INFO(1, fd) + ZEND_ARG_INFO(1, pair) ZEND_END_ARG_INFO() #endif #if defined(HAVE_SHUTDOWN) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_shutdown, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, how, IS_LONG, 0, "2") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "2") ZEND_END_ARG_INFO() #endif @@ -158,20 +158,20 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_sendmsg, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, msghdr, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_recvmsg, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(1, msghdr, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(1, message, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_cmsg_space, 0, 2, IS_LONG, 1) ZEND_ARG_TYPE_INFO(0, level, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, n, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, num, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_addrinfo_lookup, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -181,19 +181,19 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_addrinfo_lookup, 0, 1, MA ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_socket_addrinfo_connect, 0, 1, Socket, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, addr, AddressInfo, 0) + ZEND_ARG_OBJ_INFO(0, address, AddressInfo, 0) ZEND_END_ARG_INFO() #define arginfo_socket_addrinfo_bind arginfo_socket_addrinfo_connect ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_socket_addrinfo_explain, 0, 1, IS_ARRAY, 0) - ZEND_ARG_OBJ_INFO(0, addr, AddressInfo, 0) + ZEND_ARG_OBJ_INFO(0, address, AddressInfo, 0) ZEND_END_ARG_INFO() #if defined(PHP_WIN32) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_wsaprotocol_info_export, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, socket, Socket, 0) - ZEND_ARG_TYPE_INFO(0, target_pid, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, process_id, IS_LONG, 0) ZEND_END_ARG_INFO() #endif diff --git a/ext/sockets/tests/mcast_ipv4_send_error.phpt b/ext/sockets/tests/mcast_ipv4_send_error.phpt index 5e3ff394cf1b7..31460f4d61070 100644 --- a/ext/sockets/tests/mcast_ipv4_send_error.phpt +++ b/ext/sockets/tests/mcast_ipv4_send_error.phpt @@ -77,7 +77,7 @@ bool(true) int(0) Setting IP_MULTICAST_TTL with 256 -socket_set_option(): Argument #4 ($optval) must be between 0 and 255 +socket_set_option(): Argument #4 ($value) must be between 0 and 255 int(1) Setting IP_MULTICAST_TTL with "254" @@ -85,5 +85,5 @@ bool(true) int(254) Setting IP_MULTICAST_TTL with -1 -socket_set_option(): Argument #4 ($optval) must be between 0 and 255 +socket_set_option(): Argument #4 ($value) must be between 0 and 255 int(254) diff --git a/ext/sockets/tests/socket_accept_failure.phpt b/ext/sockets/tests/socket_accept_failure.phpt new file mode 100644 index 0000000000000..522987469b287 --- /dev/null +++ b/ext/sockets/tests/socket_accept_failure.phpt @@ -0,0 +1,12 @@ +--TEST-- +socket_accept() failure +--FILE-- + +--EXPECTF-- +Warning: socket_accept(): unable to accept incoming connection [%d]: %s in %s on line %d +bool(false) diff --git a/ext/sockets/tests/socket_select_error.phpt b/ext/sockets/tests/socket_select_error.phpt index 645707467dc1c..02e4f45ebeba4 100644 --- a/ext/sockets/tests/socket_select_error.phpt +++ b/ext/sockets/tests/socket_select_error.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -socket_select(): Argument #1 ($read_fds) must only have elements of type Socket, string given +socket_select(): Argument #1 ($read) must only have elements of type Socket, string given diff --git a/ext/sockets/tests/socket_send_params.phpt b/ext/sockets/tests/socket_send_params.phpt index 4c3f57729f597..1adf9d59d8228 100644 --- a/ext/sockets/tests/socket_send_params.phpt +++ b/ext/sockets/tests/socket_send_params.phpt @@ -17,4 +17,4 @@ ext/sockets - socket_send - test with incorrect parameters socket_close($s_c); ?> --EXPECT-- -socket_send(): Argument #3 ($len) must be greater than or equal to 0 +socket_send(): Argument #3 ($length) must be greater than or equal to 0 diff --git a/ext/sockets/tests/socket_sendto_params.phpt b/ext/sockets/tests/socket_sendto_params.phpt index 09cb859ad75fe..c80c6a7ff1c57 100644 --- a/ext/sockets/tests/socket_sendto_params.phpt +++ b/ext/sockets/tests/socket_sendto_params.phpt @@ -17,4 +17,4 @@ ext/sockets - socket_sendto - test with incorrect parameters socket_close($s_c); ?> --EXPECT-- -socket_sendto(): Argument #3 ($len) must be greater than or equal to 0 +socket_sendto(): Argument #3 ($length) must be greater than or equal to 0 diff --git a/ext/sockets/tests/socket_set_option_rcvtimeo.phpt b/ext/sockets/tests/socket_set_option_rcvtimeo.phpt index 819d0ee443696..fdc73fe43b1ff 100644 --- a/ext/sockets/tests/socket_set_option_rcvtimeo.phpt +++ b/ext/sockets/tests/socket_set_option_rcvtimeo.phpt @@ -34,9 +34,6 @@ var_dump($retval_3 === $options); socket_close($socket); ?> --EXPECT-- -socket_set_option(): Argument #4 ($optval) must have key "sec" +socket_set_option(): Argument #4 ($value) must have key "sec" bool(true) bool(true) ---CREDITS-- -Moritz Neuhaeuser, info@xcompile.net -PHP Testfest Berlin 2009-05-10 diff --git a/ext/sockets/tests/socket_set_option_seolinger.phpt b/ext/sockets/tests/socket_set_option_seolinger.phpt index 132d4e0c6e04b..876cbb3fdbe6b 100644 --- a/ext/sockets/tests/socket_set_option_seolinger.phpt +++ b/ext/sockets/tests/socket_set_option_seolinger.phpt @@ -45,11 +45,8 @@ var_dump((bool)$retval_3["l_onoff"] === (bool)$options["l_onoff"]); socket_close($socket); ?> --EXPECT-- -socket_set_option(): Argument #4 ($optval) must have key "l_onoff" -socket_set_option(): Argument #4 ($optval) must have key "l_linger" +socket_set_option(): Argument #4 ($value) must have key "l_onoff" +socket_set_option(): Argument #4 ($value) must have key "l_linger" bool(true) bool(true) bool(true) ---CREDITS-- -Moritz Neuhaeuser, info@xcompile.net -PHP Testfest Berlin 2009-05-10 diff --git a/ext/sockets/tests/socket_set_option_sndtimeo.phpt b/ext/sockets/tests/socket_set_option_sndtimeo.phpt index 359aab9ae9a5b..f1c7e9ddc2f09 100644 --- a/ext/sockets/tests/socket_set_option_sndtimeo.phpt +++ b/ext/sockets/tests/socket_set_option_sndtimeo.phpt @@ -34,9 +34,6 @@ var_dump($retval_3 === $options); socket_close($socket); ?> --EXPECT-- -socket_set_option(): Argument #4 ($optval) must have key "sec" +socket_set_option(): Argument #4 ($value) must have key "sec" bool(true) bool(true) ---CREDITS-- -Moritz Neuhaeuser, info@xcompile.net -PHP Testfest Berlin 2009-05-10 diff --git a/ext/sodium/config.m4 b/ext/sodium/config.m4 index 0676b66910680..05d9ebd5a13df 100644 --- a/ext/sodium/config.m4 +++ b/ext/sodium/config.m4 @@ -11,8 +11,9 @@ if test "$PHP_SODIUM" != "no"; then AC_DEFINE(HAVE_LIBSODIUMLIB, 1, [ ]) - dnl Add -Wno-type-limits as this may arise on 32bits platforms + dnl Add -Wno-type-limits and -Wno-logical-op as this may arise on 32bits platforms SODIUM_COMPILER_FLAGS="$LIBSODIUM_CFLAGS -Wno-type-limits" + AX_CHECK_COMPILE_FLAG([-Wno-logical-op], SODIUM_COMPILER_FLAGS="$SODIUM_COMPILER_FLAGS -Wno-logical-op", , [-Werror]) PHP_NEW_EXTENSION(sodium, libsodium.c sodium_pwhash.c, $ext_shared, , $SODIUM_COMPILER_FLAGS) PHP_SUBST(SODIUM_SHARED_LIBADD) fi diff --git a/ext/sodium/libsodium.stub.php b/ext/sodium/libsodium.stub.php index 6429c3beba97f..b2bfd357309b5 100644 --- a/ext/sodium/libsodium.stub.php +++ b/ext/sodium/libsodium.stub.php @@ -5,87 +5,87 @@ function sodium_crypto_aead_aes256gcm_is_available(): bool {} #ifdef HAVE_AESGCM -function sodium_crypto_aead_aes256gcm_decrypt(string $string, string $ad, string $nonce, string $key): string|false {} +function sodium_crypto_aead_aes256gcm_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false {} -function sodium_crypto_aead_aes256gcm_encrypt(string $string, string $ad, string $nonce, string $key): string {} +function sodium_crypto_aead_aes256gcm_encrypt(string $message, string $additional_data, string $nonce, string $key): string {} function sodium_crypto_aead_aes256gcm_keygen(): string {} #endif -function sodium_crypto_aead_chacha20poly1305_decrypt(string $string, string $ad, string $nonce, string $key): string|false {} +function sodium_crypto_aead_chacha20poly1305_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false {} -function sodium_crypto_aead_chacha20poly1305_encrypt(string $string, string $ad, string $nonce, string $key): string {} +function sodium_crypto_aead_chacha20poly1305_encrypt(string $message, string $additional_data, string $nonce, string $key): string {} function sodium_crypto_aead_chacha20poly1305_keygen(): string {} -function sodium_crypto_aead_chacha20poly1305_ietf_decrypt(string $string, string $ad, string $nonce, string $key): string|false {} +function sodium_crypto_aead_chacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false {} -function sodium_crypto_aead_chacha20poly1305_ietf_encrypt(string $string, string $ad, string $nonce, string $key): string {} +function sodium_crypto_aead_chacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string {} function sodium_crypto_aead_chacha20poly1305_ietf_keygen(): string {} #ifdef crypto_aead_xchacha20poly1305_IETF_NPUBBYTES -function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(string $string, string $ad, string $nonce, string $key): string|false {} +function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false {} function sodium_crypto_aead_xchacha20poly1305_ietf_keygen(): string {} -function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(string $string, string $ad, string $nonce, string $key): string {} +function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string {} #endif -function sodium_crypto_auth(string $string, string $key): string {} +function sodium_crypto_auth(string $message, string $key): string {} function sodium_crypto_auth_keygen(): string {} -function sodium_crypto_auth_verify(string $signature, string $string, string $key): bool {} +function sodium_crypto_auth_verify(string $mac, string $message, string $key): bool {} -function sodium_crypto_box(string $string, string $nonce, string $key): string {} +function sodium_crypto_box(string $message, string $nonce, string $key_pair): string {} function sodium_crypto_box_keypair(): string {} -function sodium_crypto_box_seed_keypair(string $key): string {} +function sodium_crypto_box_seed_keypair(string $seed): string {} function sodium_crypto_box_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string {} -function sodium_crypto_box_open(string $string, string $nonce, string $key): string|false {} +function sodium_crypto_box_open(string $ciphertext, string $nonce, string $key_pair): string|false {} -function sodium_crypto_box_publickey(string $key): string {} +function sodium_crypto_box_publickey(string $key_pair): string {} -function sodium_crypto_box_publickey_from_secretkey(string $key): string {} +function sodium_crypto_box_publickey_from_secretkey(string $secret_key): string {} -function sodium_crypto_box_seal(string $string, string $key): string {} +function sodium_crypto_box_seal(string $message, string $key_pair): string {} -function sodium_crypto_box_seal_open(string $string, string $key): string|false {} +function sodium_crypto_box_seal_open(string $ciphertext, string $key_pair): string|false {} -function sodium_crypto_box_secretkey(string $key): string {} +function sodium_crypto_box_secretkey(string $key_pair): string {} function sodium_crypto_kx_keypair(): string {} -function sodium_crypto_kx_publickey(string $key): string {} +function sodium_crypto_kx_publickey(string $key_pair): string {} -function sodium_crypto_kx_secretkey(string $key): string {} +function sodium_crypto_kx_secretkey(string $key_pair): string {} -function sodium_crypto_kx_seed_keypair(string $string): string {} +function sodium_crypto_kx_seed_keypair(string $seed): string {} -function sodium_crypto_kx_client_session_keys(string $client_keypair, string $server_key): array {} +function sodium_crypto_kx_client_session_keys(string $client_key_pair, string $server_key): array {} -function sodium_crypto_kx_server_session_keys(string $server_keypair, string $client_key): array {} +function sodium_crypto_kx_server_session_keys(string $server_key_pair, string $client_key): array {} -function sodium_crypto_generichash(string $string, string $key = "", int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string {} +function sodium_crypto_generichash(string $message, string $key = "", int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string {} function sodium_crypto_generichash_keygen(): string {} function sodium_crypto_generichash_init(string $key = "", int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string {} -function sodium_crypto_generichash_update(string &$state, string $string): bool {} +function sodium_crypto_generichash_update(string &$state, string $message): bool {} function sodium_crypto_generichash_final(string &$state, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string {} -function sodium_crypto_kdf_derive_from_key(int $subkey_len, int $subkey_id, string $context, string $key): string {} +function sodium_crypto_kdf_derive_from_key(int $subkey_length, int $subkey_id, string $context, string $key): string {} function sodium_crypto_kdf_keygen(): string {} #ifdef crypto_pwhash_SALTBYTES -function sodium_crypto_pwhash(int $length, string $password, string $salt, int $opslimit, int $memlimit, int $alg = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT): string {} +function sodium_crypto_pwhash(int $length, string $password, string $salt, int $opslimit, int $memlimit, int $algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT): string {} function sodium_crypto_pwhash_str(string $password, int $opslimit, int $memlimit): string {} @@ -104,71 +104,71 @@ function sodium_crypto_pwhash_scryptsalsa208sha256_str(string $password, int $op function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify(string $hash, string $password): bool {} #endif -function sodium_crypto_scalarmult(string $string_1, string $string_2): string {} +function sodium_crypto_scalarmult(string $n, string $p): string {} -function sodium_crypto_secretbox(string $string, string $nonce, string $key): string {} +function sodium_crypto_secretbox(string $message, string $nonce, string $key): string {} function sodium_crypto_secretbox_keygen(): string {} -function sodium_crypto_secretbox_open(string $string, string $nonce, string $key): string|false {} +function sodium_crypto_secretbox_open(string $ciphertext, string $nonce, string $key): string|false {} #ifdef crypto_secretstream_xchacha20poly1305_ABYTES function sodium_crypto_secretstream_xchacha20poly1305_keygen(): string {} function sodium_crypto_secretstream_xchacha20poly1305_init_push(string $key): array {} -function sodium_crypto_secretstream_xchacha20poly1305_push(string &$state, string $msg, string $ad = "", int $tag = SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE): string {} +function sodium_crypto_secretstream_xchacha20poly1305_push(string &$state, string $message, string $additional_data = "", int $tag = SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE): string {} -function sodium_crypto_secretstream_xchacha20poly1305_init_pull(string $string, string $key): string {} +function sodium_crypto_secretstream_xchacha20poly1305_init_pull(string $header, string $key): string {} -function sodium_crypto_secretstream_xchacha20poly1305_pull(string &$state, string $c, string $ad = ""): array|false {} +function sodium_crypto_secretstream_xchacha20poly1305_pull(string &$state, string $ciphertext, string $additional_data = ""): array|false {} function sodium_crypto_secretstream_xchacha20poly1305_rekey(string &$state): void {} #endif -function sodium_crypto_shorthash(string $string, string $key): string {} +function sodium_crypto_shorthash(string $message, string $key): string {} function sodium_crypto_shorthash_keygen(): string {} -function sodium_crypto_sign(string $string, string $keypair): string {} +function sodium_crypto_sign(string $message, string $secret_key): string {} -function sodium_crypto_sign_detached(string $string, string $keypair): string {} +function sodium_crypto_sign_detached(string $message, string $secret_key): string {} -function sodium_crypto_sign_ed25519_pk_to_curve25519(string $key): string {} +function sodium_crypto_sign_ed25519_pk_to_curve25519(string $public_key): string {} -function sodium_crypto_sign_ed25519_sk_to_curve25519(string $key): string {} +function sodium_crypto_sign_ed25519_sk_to_curve25519(string $secret_key): string {} function sodium_crypto_sign_keypair(): string {} function sodium_crypto_sign_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string {} -function sodium_crypto_sign_open(string $string, string $keypair): string|false {} +function sodium_crypto_sign_open(string $ciphertext, string $public_key): string|false {} -function sodium_crypto_sign_publickey(string $key): string {} +function sodium_crypto_sign_publickey(string $key_pair): string {} -function sodium_crypto_sign_secretkey(string $key): string {} +function sodium_crypto_sign_secretkey(string $key_pair): string {} -function sodium_crypto_sign_publickey_from_secretkey(string $key): string {} +function sodium_crypto_sign_publickey_from_secretkey(string $secret_key): string {} -function sodium_crypto_sign_seed_keypair(string $key): string {} +function sodium_crypto_sign_seed_keypair(string $seed): string {} -function sodium_crypto_sign_verify_detached(string $signature, string $string, string $key): bool {} +function sodium_crypto_sign_verify_detached(string $signature, string $message, string $public_key): bool {} function sodium_crypto_stream(int $length, string $nonce, string $key): string {} function sodium_crypto_stream_keygen(): string {} -function sodium_crypto_stream_xor(string $string, string $nonce, string $key): string {} +function sodium_crypto_stream_xor(string $message, string $nonce, string $key): string {} -function sodium_add(string &$string_1, string $string_2): void {} +function sodium_add(string &$string1, string $string2): void {} -function sodium_compare(string $string_1, string $string_2): int {} +function sodium_compare(string $string1, string $string2): int {} function sodium_increment(string &$string): void {} -function sodium_memcmp(string $string_1, string $string_2): int {} +function sodium_memcmp(string $string1, string $string2): int {} -function sodium_memzero(string &$reference): void {} +function sodium_memzero(string &$string): void {} function sodium_pad(string $string, int $length): string {} @@ -185,4 +185,4 @@ function sodium_base642bin(string $string, int $id, string $ignore = ""): strin #endif /** @alias sodium_crypto_box_publickey_from_secretkey */ -function sodium_crypto_scalarmult_base(string $key): string {} +function sodium_crypto_scalarmult_base(string $secret_key): string {} diff --git a/ext/sodium/libsodium_arginfo.h b/ext/sodium/libsodium_arginfo.h index 4f06398bde2dd..9b0d4b0f1d361 100644 --- a/ext/sodium/libsodium_arginfo.h +++ b/ext/sodium/libsodium_arginfo.h @@ -1,13 +1,13 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5d064655caf10f5e0dd126009755bf3552c63f59 */ + * Stub hash: 60259c3fefaf8ba8ac22bf80147c3525387ec763 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_aead_aes256gcm_is_available, 0, 0, _IS_BOOL, 0) ZEND_END_ARG_INFO() #if defined(HAVE_AESGCM) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_aead_aes256gcm_decrypt, 0, 4, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -15,8 +15,8 @@ ZEND_END_ARG_INFO() #if defined(HAVE_AESGCM) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_aead_aes256gcm_encrypt, 0, 4, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -28,15 +28,15 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_aead_chacha20poly1305_decrypt, 0, 4, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_aead_chacha20poly1305_encrypt, 0, 4, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -52,8 +52,8 @@ ZEND_END_ARG_INFO() #if defined(crypto_aead_xchacha20poly1305_IETF_NPUBBYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_aead_xchacha20poly1305_ietf_decrypt, 0, 4, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -66,36 +66,36 @@ ZEND_END_ARG_INFO() #if defined(crypto_aead_xchacha20poly1305_IETF_NPUBBYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_aead_xchacha20poly1305_ietf_encrypt, 0, 4, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, ad, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, additional_data, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_auth, 0, 2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_auth_keygen arginfo_sodium_crypto_aead_chacha20poly1305_keygen ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_auth_verify, 0, 3, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, signature, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, mac, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box, 0, 3, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key_pair, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_box_keypair arginfo_sodium_crypto_aead_chacha20poly1305_keygen ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_seed_keypair, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, seed, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_keypair_from_secretkey_and_publickey, 0, 2, IS_STRING, 0) @@ -104,46 +104,51 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_keypair_from_s ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_box_open, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key_pair, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_box_publickey arginfo_sodium_crypto_box_seed_keypair +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_publickey, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key_pair, IS_STRING, 0) +ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_box_publickey_from_secretkey arginfo_sodium_crypto_box_seed_keypair +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_publickey_from_secretkey, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, secret_key, IS_STRING, 0) +ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_box_seal arginfo_sodium_crypto_auth +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_box_seal, 0, 2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key_pair, IS_STRING, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_box_seal_open, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key_pair, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_box_secretkey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_box_secretkey arginfo_sodium_crypto_box_publickey #define arginfo_sodium_crypto_kx_keypair arginfo_sodium_crypto_aead_chacha20poly1305_keygen -#define arginfo_sodium_crypto_kx_publickey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_kx_publickey arginfo_sodium_crypto_box_publickey -#define arginfo_sodium_crypto_kx_secretkey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_kx_secretkey arginfo_sodium_crypto_box_publickey -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_kx_seed_keypair, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) -ZEND_END_ARG_INFO() +#define arginfo_sodium_crypto_kx_seed_keypair arginfo_sodium_crypto_box_seed_keypair ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_kx_client_session_keys, 0, 2, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, client_keypair, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, client_key_pair, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, server_key, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_kx_server_session_keys, 0, 2, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, server_keypair, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, server_key_pair, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, client_key, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_generichash, 0, 1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, key, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "SODIUM_CRYPTO_GENERICHASH_BYTES") ZEND_END_ARG_INFO() @@ -157,7 +162,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_generichash_update, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(1, state, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_generichash_final, 0, 1, IS_STRING, 0) @@ -166,7 +171,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_generichash_final, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_kdf_derive_from_key, 0, 4, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, subkey_len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, subkey_length, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, subkey_id, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, context, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) @@ -181,7 +186,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_pwhash, 0, 5, IS_S ZEND_ARG_TYPE_INFO(0, salt, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, opslimit, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, memlimit, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, alg, IS_LONG, 0, "SODIUM_CRYPTO_PWHASH_ALG_DEFAULT") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, algo, IS_LONG, 0, "SODIUM_CRYPTO_PWHASH_ALG_DEFAULT") ZEND_END_ARG_INFO() #endif @@ -234,15 +239,23 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_scalarmult, 0, 2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string_1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string_2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, n, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, p, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_secretbox arginfo_sodium_crypto_box +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_secretbox, 0, 3, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) +ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_secretbox_keygen arginfo_sodium_crypto_aead_chacha20poly1305_keygen -#define arginfo_sodium_crypto_secretbox_open arginfo_sodium_crypto_box_open +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_secretbox_open, 0, 3, MAY_BE_STRING|MAY_BE_FALSE) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, nonce, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) +ZEND_END_ARG_INFO() #if defined(crypto_secretstream_xchacha20poly1305_ABYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_secretstream_xchacha20poly1305_keygen, 0, 0, IS_STRING, 0) @@ -258,15 +271,15 @@ ZEND_END_ARG_INFO() #if defined(crypto_secretstream_xchacha20poly1305_ABYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_secretstream_xchacha20poly1305_push, 0, 2, IS_STRING, 0) ZEND_ARG_TYPE_INFO(1, state, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, msg, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ad, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, additional_data, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, tag, IS_LONG, 0, "SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE") ZEND_END_ARG_INFO() #endif #if defined(crypto_secretstream_xchacha20poly1305_ABYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_secretstream_xchacha20poly1305_init_pull, 0, 2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, header, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() #endif @@ -274,8 +287,8 @@ ZEND_END_ARG_INFO() #if defined(crypto_secretstream_xchacha20poly1305_ABYTES) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_secretstream_xchacha20poly1305_pull, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(1, state, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, c, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ad, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, additional_data, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #endif @@ -290,34 +303,40 @@ ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_shorthash_keygen arginfo_sodium_crypto_aead_chacha20poly1305_keygen ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_sign, 0, 2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, keypair, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, secret_key, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_sign_detached arginfo_sodium_crypto_sign -#define arginfo_sodium_crypto_sign_ed25519_pk_to_curve25519 arginfo_sodium_crypto_box_seed_keypair +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_sign_ed25519_pk_to_curve25519, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, public_key, IS_STRING, 0) +ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_sign_ed25519_sk_to_curve25519 arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_sign_ed25519_sk_to_curve25519 arginfo_sodium_crypto_box_publickey_from_secretkey #define arginfo_sodium_crypto_sign_keypair arginfo_sodium_crypto_aead_chacha20poly1305_keygen #define arginfo_sodium_crypto_sign_keypair_from_secretkey_and_publickey arginfo_sodium_crypto_box_keypair_from_secretkey_and_publickey ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sodium_crypto_sign_open, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, keypair, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ciphertext, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, public_key, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_sodium_crypto_sign_publickey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_sign_publickey arginfo_sodium_crypto_box_publickey -#define arginfo_sodium_crypto_sign_secretkey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_sign_secretkey arginfo_sodium_crypto_box_publickey -#define arginfo_sodium_crypto_sign_publickey_from_secretkey arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_sign_publickey_from_secretkey arginfo_sodium_crypto_box_publickey_from_secretkey #define arginfo_sodium_crypto_sign_seed_keypair arginfo_sodium_crypto_box_seed_keypair -#define arginfo_sodium_crypto_sign_verify_detached arginfo_sodium_crypto_auth_verify +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_sign_verify_detached, 0, 3, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, signature, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, public_key, IS_STRING, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_crypto_stream, 0, 3, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) @@ -327,16 +346,16 @@ ZEND_END_ARG_INFO() #define arginfo_sodium_crypto_stream_keygen arginfo_sodium_crypto_aead_chacha20poly1305_keygen -#define arginfo_sodium_crypto_stream_xor arginfo_sodium_crypto_box +#define arginfo_sodium_crypto_stream_xor arginfo_sodium_crypto_secretbox ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_add, 0, 2, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(1, string_1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string_2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_compare, 0, 2, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, string_1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, string_2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_increment, 0, 1, IS_VOID, 0) @@ -345,9 +364,7 @@ ZEND_END_ARG_INFO() #define arginfo_sodium_memcmp arginfo_sodium_compare -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_memzero, 0, 1, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(1, reference, IS_STRING, 0) -ZEND_END_ARG_INFO() +#define arginfo_sodium_memzero arginfo_sodium_increment ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_pad, 0, 2, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) @@ -359,7 +376,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_unpad, 0, 2, IS_STRING, 0 ZEND_ARG_TYPE_INFO(0, block_size, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_sodium_bin2hex arginfo_sodium_crypto_kx_seed_keypair +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_bin2hex, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_hex2bin, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) @@ -381,7 +400,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sodium_base642bin, 0, 2, IS_STRI ZEND_END_ARG_INFO() #endif -#define arginfo_sodium_crypto_scalarmult_base arginfo_sodium_crypto_box_seed_keypair +#define arginfo_sodium_crypto_scalarmult_base arginfo_sodium_crypto_box_publickey_from_secretkey ZEND_FUNCTION(sodium_crypto_aead_aes256gcm_is_available); diff --git a/ext/sodium/tests/crypto_box.phpt b/ext/sodium/tests/crypto_box.phpt index b5c1d79d85098..3a55717d53ce6 100644 --- a/ext/sodium/tests/crypto_box.phpt +++ b/ext/sodium/tests/crypto_box.phpt @@ -142,7 +142,7 @@ bool(true) bool(true) bool(true) bool(true) -sodium_crypto_box(): Argument #3 ($key) must be SODIUM_CRYPTO_BOX_KEYPAIRBYTES bytes long +sodium_crypto_box(): Argument #3 ($key_pair) must be SODIUM_CRYPTO_BOX_KEYPAIRBYTES bytes long bool(true) string(17) "Hi, this is Alice" string(21) "Hi Alice! This is Bob" diff --git a/ext/sodium/tests/sodium_error_001.phpt b/ext/sodium/tests/sodium_error_001.phpt index 5ebcb8e80ef1a..a78d071a10eea 100644 --- a/ext/sodium/tests/sodium_error_001.phpt +++ b/ext/sodium/tests/sodium_error_001.phpt @@ -15,7 +15,7 @@ $key = random_bytes(SODIUM_CRYPTO_SHORTHASH_KEYBYTES); $hash = do_crypto_shorthash($m, $key); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: sodium_crypto_shorthash(): Argument #1 ($string) must be of type string, int given in %s:%d +Fatal error: Uncaught TypeError: sodium_crypto_shorthash(): Argument #1 ($message) must be of type string, int given in %s:%d Stack trace: #0 %s(%d): sodium_crypto_shorthash() #1 %s(%d): do_crypto_shorthash() diff --git a/ext/spl/php_spl.stub.php b/ext/spl/php_spl.stub.php old mode 100755 new mode 100644 index 9171e4756fb7f..61b2165c9f2a0 --- a/ext/spl/php_spl.stub.php +++ b/ext/spl/php_spl.stub.php @@ -19,9 +19,9 @@ function spl_autoload_extensions(?string $file_extensions = null): string {} function spl_autoload_functions(): array {} -function spl_autoload_register(?callable $autoload_function = null, bool $throw = true, bool $prepend = false): bool {} +function spl_autoload_register(?callable $callback = null, bool $throw = true, bool $prepend = false): bool {} -function spl_autoload_unregister(callable $autoload_function): bool {} +function spl_autoload_unregister(callable $callback): bool {} function spl_classes(): array {} @@ -29,8 +29,8 @@ function spl_object_hash(object $object): string {} function spl_object_id(object $object): int {} -function iterator_apply(Traversable $iterator, callable $function, ?array $args = null): int {} +function iterator_apply(Traversable $iterator, callable $callback, ?array $args = null): int {} function iterator_count(Traversable $iterator): int {} -function iterator_to_array(Traversable $iterator, bool $use_keys = true): array {} +function iterator_to_array(Traversable $iterator, bool $preserve_keys = true): array {} diff --git a/ext/spl/php_spl_arginfo.h b/ext/spl/php_spl_arginfo.h index 841dff23b95fe..5711e6d699635 100644 --- a/ext/spl/php_spl_arginfo.h +++ b/ext/spl/php_spl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 31d99979ea43e3d0d2592495977465976ca67760 */ + * Stub hash: 920cc4fca334f59316fc4276277958c9738afb3e */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_implements, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_INFO(0, object_or_class) @@ -27,13 +27,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_functions, 0, 0, IS ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_register, 0, 0, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload_function, IS_CALLABLE, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, callback, IS_CALLABLE, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, throw, _IS_BOOL, 0, "true") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, prepend, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_unregister, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, autoload_function, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) ZEND_END_ARG_INFO() #define arginfo_spl_classes arginfo_spl_autoload_functions @@ -48,7 +48,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_iterator_apply, 0, 2, IS_LONG, 0) ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0) - ZEND_ARG_TYPE_INFO(0, function, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, args, IS_ARRAY, 1, "null") ZEND_END_ARG_INFO() @@ -58,7 +58,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_iterator_to_array, 0, 1, IS_ARRAY, 0) ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_keys, _IS_BOOL, 0, "true") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserve_keys, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 75668e2f0fc9a..3942366fa0fdb 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -55,8 +55,8 @@ PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator; #define SPL_ARRAY_CLONE_MASK 0x0100FFFF #define SPL_ARRAY_METHOD_NO_ARG 0 -#define SPL_ARRAY_METHOD_USE_ARG 1 -#define SPL_ARRAY_METHOD_MAY_USER_ARG 2 +#define SPL_ARRAY_METHOD_CALLBACK_ARG 1 +#define SPL_ARRAY_METHOD_SORT_FLAGS_ARG 2 typedef struct _spl_array_object { zval array; @@ -1429,15 +1429,14 @@ static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fnam intern->nApplyCount++; call_user_function(EG(function_table), NULL, &function_name, return_value, 1, params); intern->nApplyCount--; - } else if (use_arg == SPL_ARRAY_METHOD_MAY_USER_ARG) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|z", &arg) == FAILURE) { + } else if (use_arg == SPL_ARRAY_METHOD_SORT_FLAGS_ARG) { + zend_long sort_flags = 0; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &sort_flags) == FAILURE) { goto exit; } - if (arg) { - ZVAL_COPY_VALUE(¶ms[1], arg); - } + ZVAL_LONG(¶ms[1], sort_flags); intern->nApplyCount++; - call_user_function(EG(function_table), NULL, &function_name, return_value, arg ? 2 : 1, params); + call_user_function(EG(function_table), NULL, &function_name, return_value, 2, params); intern->nApplyCount--; } else { if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &arg) == FAILURE) { @@ -1468,16 +1467,16 @@ PHP_METHOD(cname, fname) \ } /* {{{ Sort the entries by values. */ -SPL_ARRAY_METHOD(ArrayObject, asort, SPL_ARRAY_METHOD_MAY_USER_ARG) /* }}} */ +SPL_ARRAY_METHOD(ArrayObject, asort, SPL_ARRAY_METHOD_SORT_FLAGS_ARG) /* }}} */ /* {{{ Sort the entries by key. */ -SPL_ARRAY_METHOD(ArrayObject, ksort, SPL_ARRAY_METHOD_MAY_USER_ARG) /* }}} */ +SPL_ARRAY_METHOD(ArrayObject, ksort, SPL_ARRAY_METHOD_SORT_FLAGS_ARG) /* }}} */ /* {{{ Sort the entries by values user defined function. */ -SPL_ARRAY_METHOD(ArrayObject, uasort, SPL_ARRAY_METHOD_USE_ARG) /* }}} */ +SPL_ARRAY_METHOD(ArrayObject, uasort, SPL_ARRAY_METHOD_CALLBACK_ARG) /* }}} */ /* {{{ Sort the entries by key using user defined function. */ -SPL_ARRAY_METHOD(ArrayObject, uksort, SPL_ARRAY_METHOD_USE_ARG) /* }}} */ +SPL_ARRAY_METHOD(ArrayObject, uksort, SPL_ARRAY_METHOD_CALLBACK_ARG) /* }}} */ /* {{{ Sort the entries by values using "natural order" algorithm. */ SPL_ARRAY_METHOD(ArrayObject, natsort, SPL_ARRAY_METHOD_NO_ARG) /* }}} */ diff --git a/ext/spl/spl_array.stub.php b/ext/spl/spl_array.stub.php old mode 100755 new mode 100644 index b3a058806c88a..1567d107f2c73 --- a/ext/spl/spl_array.stub.php +++ b/ext/spl/spl_array.stub.php @@ -4,31 +4,31 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable { - public function __construct(array|object $input = [], int $flags = 0, string $iterator_class = ArrayIterator::class) {} + public function __construct(array|object $array = [], int $flags = 0, string $iteratorClass = ArrayIterator::class) {} /** - * @param string|int $index + * @param string|int $key * @return bool */ - public function offsetExists($index) {} + public function offsetExists($key) {} /** - * @param string|int $index + * @param string|int $key * @return mixed */ - public function offsetGet($index) {} + public function offsetGet($key) {} /** - * @param string|int $index + * @param string|int $key * @return void */ - public function offsetSet($index, mixed $value) {} + public function offsetSet($key, mixed $value) {} /** - * @param string|int $index + * @param string|int $key * @return void */ - public function offsetUnset($index) {} + public function offsetUnset($key) {} /** @return void */ public function append(mixed $value) {} @@ -46,16 +46,16 @@ public function getFlags() {} public function setFlags(int $flags) {} /** @return bool */ - public function asort(int $sort_flags = SORT_REGULAR) {} + public function asort(int $flags = SORT_REGULAR) {} /** @return bool */ - public function ksort(int $sort_flags = SORT_REGULAR) {} + public function ksort(int $flags = SORT_REGULAR) {} /** @return bool */ - public function uasort(callable $cmp_function) {} + public function uasort(callable $callback) {} /** @return bool */ - public function uksort(callable $cmp_function) {} + public function uksort(callable $callback) {} /** @return bool */ public function natsort() {} @@ -64,7 +64,7 @@ public function natsort() {} public function natcasesort() {} /** @return void */ - public function unserialize(string $serialized) {} + public function unserialize(string $data) {} /** @return string */ public function serialize() {} @@ -79,7 +79,7 @@ public function __unserialize(array $data) {} public function getIterator() {} /** @return array|null */ - public function exchangeArray(array|object $input) {} + public function exchangeArray(array|object $array) {} /** @return void */ public function setIteratorClass(string $iteratorClass) {} @@ -96,32 +96,32 @@ class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Coun public function __construct(array|object $array = [], int $flags = 0) {} /** - * @param string|int $index + * @param string|int $key * @return bool * @implementation-alias ArrayObject::offsetExists */ - public function offsetExists($index) {} + public function offsetExists($key) {} /** - * @param string|int $index + * @param string|int $key * @return mixed * @implementation-alias ArrayObject::offsetGet */ - public function offsetGet($index) {} + public function offsetGet($key) {} /** - * @param string|int $index + * @param string|int $key * @return void * @implementation-alias ArrayObject::offsetSet */ - public function offsetSet($index, mixed $value) {} + public function offsetSet($key, mixed $value) {} /** - * @param string|int $index + * @param string|int $key * @return void * @implementation-alias ArrayObject::offsetUnset */ - public function offsetUnset($index) {} + public function offsetUnset($key) {} /** * @return void @@ -157,25 +157,25 @@ public function setFlags(int $flags) {} * @return bool * @implementation-alias ArrayObject::asort */ - public function asort(int $sort_flags = SORT_REGULAR) {} + public function asort(int $flags = SORT_REGULAR) {} /** * @return bool * @implementation-alias ArrayObject::ksort */ - public function ksort(int $sort_flags = SORT_REGULAR) {} + public function ksort(int $flags = SORT_REGULAR) {} /** * @return bool * @implementation-alias ArrayObject::uasort */ - public function uasort(callable $cmp_function) {} + public function uasort(callable $callback) {} /** * @return bool * @implementation-alias ArrayObject::uksort */ - public function uksort(callable $cmp_function) {} + public function uksort(callable $callback) {} /** * @return bool @@ -193,7 +193,7 @@ public function natcasesort() {} * @return void * @implementation-alias ArrayObject::unserialize */ - public function unserialize(string $serialized) {} + public function unserialize(string $data) {} /** * @return string @@ -229,7 +229,7 @@ public function next() {} public function valid() {} /** @return void */ - public function seek(int $position) {} + public function seek(int $offset) {} /** * @return array diff --git a/ext/spl/spl_array_arginfo.h b/ext/spl/spl_array_arginfo.h index 75bc3576133c3..860b2e363dda4 100644 --- a/ext/spl/spl_array_arginfo.h +++ b/ext/spl/spl_array_arginfo.h @@ -1,20 +1,20 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1b93d102c6dfa12f65a95a50bbc78c03802e261c */ + * Stub hash: da85db1e5e985ddbefaf38598133e3cba46475f2 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0) - ZEND_ARG_TYPE_MASK(0, input, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]") + ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, iterator_class, IS_STRING, 0, "ArrayIterator::class") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, iteratorClass, IS_STRING, 0, "ArrayIterator::class") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetExists, 0, 0, 1) - ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, key) ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_offsetGet arginfo_class_ArrayObject_offsetExists ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetSet, 0, 0, 2) - ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, key) ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() @@ -36,13 +36,13 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setFlags, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_asort, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sort_flags, IS_LONG, 0, "SORT_REGULAR") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR") ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_ksort arginfo_class_ArrayObject_asort ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_uasort, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, cmp_function, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_uksort arginfo_class_ArrayObject_uasort @@ -52,7 +52,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_natcasesort arginfo_class_ArrayObject_getArrayCopy ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_unserialize, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_serialize arginfo_class_ArrayObject_getArrayCopy @@ -66,7 +66,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_getIterator arginfo_class_ArrayObject_getArrayCopy ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_exchangeArray, 0, 0, 1) - ZEND_ARG_TYPE_MASK(0, input, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL) + ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setIteratorClass, 0, 0, 1) @@ -131,7 +131,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_ArrayIterator_valid arginfo_class_ArrayObject_getArrayCopy ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator_seek, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_ArrayIterator___debugInfo arginfo_class_ArrayObject_getArrayCopy diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index a67b9efb03d70..3d0dae243502b 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -899,6 +899,11 @@ PHP_METHOD(SplFileInfo, getFilename) RETURN_THROWS(); } + if (!intern->file_name) { + zend_throw_error(NULL, "Object not initialized"); + RETURN_THROWS(); + } + spl_filesystem_object_get_path(intern, &path_len); if (path_len && path_len < intern->file_name_len) { @@ -937,6 +942,11 @@ PHP_METHOD(SplFileInfo, getExtension) RETURN_THROWS(); } + if (!intern->file_name) { + zend_throw_error(NULL, "Object not initialized"); + RETURN_THROWS(); + } + spl_filesystem_object_get_path(intern, &path_len); if (path_len && path_len < intern->file_name_len) { @@ -1000,6 +1010,11 @@ PHP_METHOD(SplFileInfo, getBasename) RETURN_THROWS(); } + if (!intern->file_name) { + zend_throw_error(NULL, "Object not initialized"); + RETURN_THROWS(); + } + spl_filesystem_object_get_path(intern, &path_len); if (path_len && path_len < intern->file_name_len) { diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php old mode 100755 new mode 100644 index e72a4e5f415c3..094b278d21dc8 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -4,7 +4,7 @@ class SplFileInfo { - public function __construct(string $file_name) {} + public function __construct(string $filename) {} /** @return string */ public function getPath() {} @@ -73,22 +73,22 @@ public function getLinkTarget() {} public function getRealPath() {} /** @return SplFileInfo */ - public function getFileInfo(?string $class_name = null) {} + public function getFileInfo(?string $class = null) {} /** @return SplFileInfo|null */ - public function getPathInfo(?string $class_name = null) {} + public function getPathInfo(?string $class = null) {} /** * @param resource|null $context * @return SplFileObject */ - public function openFile(string $open_mode = "r", bool $use_include_path = false, $context = null) {} + public function openFile(string $mode = "r", bool $useIncludePath = false, $context = null) {} /** @return void */ - public function setFileClass(string $class_name = SplFileObject::class) {} + public function setFileClass(string $class = SplFileObject::class) {} /** @return void */ - public function setInfoClass(string $class_name = SplFileInfo::class) {} + public function setInfoClass(string $class = SplFileInfo::class) {} /** @implementation-alias SplFileInfo::getPathname */ public function __toString(): string {} @@ -102,7 +102,7 @@ final public function _bad_state_ex() {} class DirectoryIterator extends SplFileInfo implements SeekableIterator { - public function __construct(string $path) {} + public function __construct(string $directory) {} /** @return string */ public function getFilename() {} @@ -132,7 +132,7 @@ public function current() {} public function next() {} /** @return void */ - public function seek(int $position) {} + public function seek(int $offset) {} /** @implementation-alias DirectoryIterator::getFilename */ public function __toString(): string {} @@ -140,7 +140,7 @@ public function __toString(): string {} class FilesystemIterator extends DirectoryIterator { - public function __construct(string $path, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS) {} + public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS) {} /** @return void */ public function rewind() {} @@ -160,10 +160,10 @@ public function setFlags(int $flags) {} class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator { - public function __construct(string $path, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} + public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} /** @return bool */ - public function hasChildren(bool $allow_links = false) {} + public function hasChildren(bool $allowLinks = false) {} /** @return RecursiveDirectoryIterator */ public function getChildren() {} @@ -178,7 +178,7 @@ public function getSubPathname() {} #ifdef HAVE_GLOB class GlobIterator extends FilesystemIterator implements Countable { - public function __construct(string $path, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} + public function __construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} /** @return int */ public function count() {} @@ -188,7 +188,7 @@ public function count() {} class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator { /** @param resource|null $context */ - public function __construct(string $file_name, string $open_mode = "r", bool $use_include_path = false, $context = null) {} + public function __construct(string $filename, string $mode = "r", bool $useIncludePath = false, $context = null) {} /** @return void */ public function rewind() {} @@ -206,22 +206,22 @@ public function fgets() {} public function fread(int $length) {} /** @return array|false */ - public function fgetcsv(string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} + public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return int|false */ - public function fputcsv(array $fields, string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} + public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return bool|null */ - public function setCsvControl(string $delimiter = ",", string $enclosure = "\"", string $escape = "\\") {} + public function setCsvControl(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {} /** @return array */ public function getCsvControl() {} /** - * @param int $wouldblock + * @param int $wouldBlock * @return bool */ - public function flock(int $operation, &$wouldblock = null) {} + public function flock(int $operation, &$wouldBlock = null) {} /** @return bool */ public function fflush() {} @@ -239,10 +239,10 @@ public function fgetc() {} public function fpassthru() {} /** @return array|int|false|null */ - public function fscanf(string $format, mixed &...$params) {} + public function fscanf(string $format, mixed &...$vars) {} /** @return int|false */ - public function fwrite(string $str, int $length = 0) {} + public function fwrite(string $data, int $length = 0) {} /** @return array */ public function fstat() {} @@ -266,7 +266,7 @@ public function setFlags(int $flags) {} public function getFlags() {} /** @return void */ - public function setMaxLineLen(int $max_len) {} + public function setMaxLineLen(int $maxLength) {} /** @return int */ public function getMaxLineLen() {} @@ -278,7 +278,7 @@ public function hasChildren() {} public function getChildren() {} /** @return void */ - public function seek(int $line_pos) {} + public function seek(int $line) {} /** * @return string|false @@ -292,5 +292,5 @@ public function __toString(): string {} class SplTempFileObject extends SplFileObject { - public function __construct(int $max_memory = 2 * 1024 * 1024) {} + public function __construct(int $maxMemory = 2 * 1024 * 1024) {} } diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 3f961d2691ebf..c0d80f0ae69c4 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,8 +1,8 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 071a92d8e5998c518e377b5620dfdda6fb189a1d */ + * Stub hash: b4aa4816381e8380d5dc0c5f9b9969992a72f9ed */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getPath, 0, 0, 0) @@ -53,23 +53,23 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo_getRealPath arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getFileInfo, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo_getPathInfo arginfo_class_SplFileInfo_getFileInfo ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_openFile, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\"r\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"r\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setFileClass, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 0, "SplFileObject::class") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileObject::class") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setInfoClass, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 0, "SplFileInfo::class") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileInfo::class") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo___toString, 0, 0, IS_STRING, 0) @@ -80,7 +80,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo__bad_state_ex arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_DirectoryIterator_getFilename arginfo_class_SplFileInfo_getPath @@ -102,13 +102,13 @@ ZEND_END_ARG_INFO() #define arginfo_class_DirectoryIterator_next arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator_seek, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_DirectoryIterator___toString arginfo_class_SplFileInfo___toString ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS") ZEND_END_ARG_INFO() @@ -125,12 +125,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator_setFlags, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator_hasChildren, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_links, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allowLinks, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_class_RecursiveDirectoryIterator_getChildren arginfo_class_SplFileInfo_getPath @@ -141,7 +141,7 @@ ZEND_END_ARG_INFO() #if defined(HAVE_GLOB) ZEND_BEGIN_ARG_INFO_EX(arginfo_class_GlobIterator___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO") ZEND_END_ARG_INFO() #endif @@ -152,9 +152,9 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject___construct, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, open_mode, IS_STRING, 0, "\"r\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"r\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -171,14 +171,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fread, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fputcsv, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, fields, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, delimiter, IS_STRING, 0, "\",\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() @@ -189,7 +189,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_flock, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, operation, IS_LONG, 0) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, wouldblock, "null") + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, wouldBlock, "null") ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_fflush arginfo_class_SplFileInfo_getPath @@ -207,11 +207,11 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fscanf, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) - ZEND_ARG_VARIADIC_TYPE_INFO(1, params, IS_MIXED, 0) + ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fwrite, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "0") ZEND_END_ARG_INFO() @@ -232,7 +232,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_getFlags arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_setMaxLineLen, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, max_len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, maxLength, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_getMaxLineLen arginfo_class_SplFileInfo_getPath @@ -242,7 +242,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_getChildren arginfo_class_SplFileInfo_getPath ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_seek, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, line_pos, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, line, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_getCurrentLine arginfo_class_SplFileInfo_getPath @@ -250,7 +250,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject___toString arginfo_class_SplFileInfo___toString ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplTempFileObject___construct, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_memory, IS_LONG, 0, "2 * 1024 * 1024") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxMemory, IS_LONG, 0, "2 * 1024 * 1024") ZEND_END_ARG_INFO() diff --git a/ext/spl/spl_dllist.stub.php b/ext/spl/spl_dllist.stub.php old mode 100755 new mode 100644 index d3f679a7fbe7e..05f122204ee0c --- a/ext/spl/spl_dllist.stub.php +++ b/ext/spl/spl_dllist.stub.php @@ -83,7 +83,7 @@ public function next() {} public function valid() {} /** @return void */ - public function unserialize(string $serialized) {} + public function unserialize(string $data) {} /** @return string */ public function serialize() {} diff --git a/ext/spl/spl_dllist_arginfo.h b/ext/spl/spl_dllist_arginfo.h index afd1278d58adf..eb612acb83cf3 100644 --- a/ext/spl/spl_dllist_arginfo.h +++ b/ext/spl/spl_dllist_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9d17266fba7a05a5fddca0ddf6b64b1c2f683cae */ + * Stub hash: 404df73577d733275e386226e11887b37a500ade */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_add, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) @@ -59,7 +59,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplDoublyLinkedList_valid arginfo_class_SplDoublyLinkedList_pop ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_unserialize, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_SplDoublyLinkedList_serialize arginfo_class_SplDoublyLinkedList_pop diff --git a/ext/spl/spl_fixedarray.stub.php b/ext/spl/spl_fixedarray.stub.php old mode 100755 new mode 100644 index b169dfdeac780..f2bb378f7aa1d --- a/ext/spl/spl_fixedarray.stub.php +++ b/ext/spl/spl_fixedarray.stub.php @@ -16,7 +16,7 @@ public function count() {} public function toArray() {} /** @return SplFixedArray */ - public static function fromArray(array $array, bool $save_indexes = true) {} + public static function fromArray(array $array, bool $preserveKeys = true) {} /** @return int */ public function getSize() {} diff --git a/ext/spl/spl_fixedarray_arginfo.h b/ext/spl/spl_fixedarray_arginfo.h index e82ea83a6a76c..6067a3ebdeb1f 100644 --- a/ext/spl/spl_fixedarray_arginfo.h +++ b/ext/spl/spl_fixedarray_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c820bad6bcfcc7c60a221464008a882515b5c05e */ + * Stub hash: 831fe70055eb62135ae49321e5e5f3fe08c3d95f */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, size, IS_LONG, 0, "0") @@ -14,7 +14,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_fromArray, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, save_indexes, _IS_BOOL, 0, "true") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserveKeys, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() #define arginfo_class_SplFixedArray_getSize arginfo_class_SplFixedArray___wakeup diff --git a/ext/spl/spl_iterators.stub.php b/ext/spl/spl_iterators.stub.php index 4d99e60df451b..437efec46bfb7 100644 --- a/ext/spl/spl_iterators.stub.php +++ b/ext/spl/spl_iterators.stub.php @@ -101,7 +101,7 @@ public function endChildren() {} public function nextElement() {} /** @return void */ - public function setMaxDepth(int $max_depth = -1) {} + public function setMaxDepth(int $maxDepth = -1) {} /** @return int|false */ public function getMaxDepth() {} @@ -115,7 +115,7 @@ public function getInnerIterator(); class IteratorIterator implements OuterIterator { - public function __construct(Traversable $iterator, ?string $class_name = null) {} + public function __construct(Traversable $iterator, ?string $class = null) {} /** @return Iterator|null */ public function getInnerIterator() {} @@ -175,12 +175,12 @@ public function accept() {} interface SeekableIterator extends Iterator { /** @return void */ - public function seek(int $position); + public function seek(int $offset); } class LimitIterator extends IteratorIterator { - public function __construct(Iterator $iterator, int $offset = 0, int $count = -1) {} + public function __construct(Iterator $iterator, int $offset = 0, int $limit = -1) {} /** @return void */ public function rewind() {} @@ -192,7 +192,7 @@ public function valid() {} public function next() {} /** @return int */ - public function seek(int $position) {} + public function seek(int $offset) {} /** @return int */ public function getPosition() {} @@ -223,28 +223,28 @@ public function getFlags() {} public function setFlags(int $flags) {} /** - * @param string $index + * @param string $key * @return mixed */ - public function offsetGet($index) {} + public function offsetGet($key) {} /** - * @param string $index + * @param string $key * @return void */ - public function offsetSet($index, mixed $value) {} + public function offsetSet($key, mixed $value) {} /** - * @param string $index + * @param string $key * @return void */ - public function offsetUnset($index) {} + public function offsetUnset($key) {} /** - * @param string $index + * @param string $key * @return bool */ - public function offsetExists($index) {} + public function offsetExists($key) {} /** @return array */ public function getCache() {} @@ -320,7 +320,7 @@ public function next() {} class RegexIterator extends FilterIterator { - public function __construct(Iterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} + public function __construct(Iterator $iterator, string $pattern, int $mode = self::MATCH, int $flags = 0, int $pregFlags = 0) {} /** @return bool */ public function accept() {} @@ -344,12 +344,12 @@ public function getRegex() {} public function getPregFlags() {} /** @return void */ - public function setPregFlags(int $preg_flags) {} + public function setPregFlags(int $pregFlags) {} } class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator { - public function __construct(RecursiveIterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} + public function __construct(RecursiveIterator $iterator, string $pattern, int $mode = self::MATCH, int $flags = 0, int $pregFlags = 0) {} /** @return bool */ public function accept() {} @@ -368,7 +368,9 @@ class RecursiveTreeIterator extends RecursiveIteratorIterator { /** @param RecursiveIterator|IteratorAggregate $iterator */ public function __construct( - $iterator, int $flags = self::BYPASS_KEY, int $caching_it_flags = CachingIterator::CATCH_GET_CHILD, + $iterator, + int $flags = self::BYPASS_KEY, + int $cachingIteratorFlags = CachingIterator::CATCH_GET_CHILD, int $mode = self::SELF_FIRST ) {} diff --git a/ext/spl/spl_iterators_arginfo.h b/ext/spl/spl_iterators_arginfo.h index 7563521b46c84..999528883aa58 100644 --- a/ext/spl/spl_iterators_arginfo.h +++ b/ext/spl/spl_iterators_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 65bcea1c2313ff50b3e15588e1cdba036995c131 */ + * Stub hash: ae7df94646bf08874d7b9804833d0081c40e0348 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_EmptyIterator_current, 0, 0, 0) ZEND_END_ARG_INFO() @@ -71,7 +71,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_RecursiveIteratorIterator_nextElement arginfo_class_EmptyIterator_current ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveIteratorIterator_setMaxDepth, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_depth, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxDepth, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #define arginfo_class_RecursiveIteratorIterator_getMaxDepth arginfo_class_EmptyIterator_current @@ -80,7 +80,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IteratorIterator___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class_name, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_IteratorIterator_getInnerIterator arginfo_class_EmptyIterator_current @@ -118,13 +118,13 @@ ZEND_END_ARG_INFO() #define arginfo_class_ParentIterator_accept arginfo_class_EmptyIterator_current ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SeekableIterator_seek, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_LimitIterator___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, count, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() #define arginfo_class_LimitIterator_rewind arginfo_class_EmptyIterator_current @@ -160,11 +160,11 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_setFlags, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_offsetGet, 0, 0, 1) - ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, key) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_offsetSet, 0, 0, 2) - ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, key) ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() @@ -216,10 +216,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator___construct, 0, 0, 2) ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0) - ZEND_ARG_TYPE_INFO(0, regex, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::MATCH") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preg_flags, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_class_RegexIterator_accept arginfo_class_EmptyIterator_current @@ -239,15 +239,15 @@ ZEND_END_ARG_INFO() #define arginfo_class_RegexIterator_getPregFlags arginfo_class_EmptyIterator_current ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator_setPregFlags, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, preg_flags, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, pregFlags, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveRegexIterator___construct, 0, 0, 2) ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0) - ZEND_ARG_TYPE_INFO(0, regex, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::MATCH") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preg_flags, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_class_RecursiveRegexIterator_accept arginfo_class_EmptyIterator_current @@ -259,7 +259,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveTreeIterator___construct, 0, 0, 1) ZEND_ARG_INFO(0, iterator) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "self::BYPASS_KEY") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, caching_it_flags, IS_LONG, 0, "CachingIterator::CATCH_GET_CHILD") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cachingIteratorFlags, IS_LONG, 0, "CachingIterator::CATCH_GET_CHILD") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::SELF_FIRST") ZEND_END_ARG_INFO() diff --git a/ext/spl/spl_observer.stub.php b/ext/spl/spl_observer.stub.php index ba880a30903a2..6fcd3c4c69df2 100644 --- a/ext/spl/spl_observer.stub.php +++ b/ext/spl/spl_observer.stub.php @@ -65,7 +65,7 @@ public function current() {} public function next() {} /** @return void */ - public function unserialize(string $serialized) {} + public function unserialize(string $data) {} /** @return string */ public function serialize() {} diff --git a/ext/spl/spl_observer_arginfo.h b/ext/spl/spl_observer_arginfo.h index 5956aedd0a628..db9b1d1125100 100644 --- a/ext/spl/spl_observer_arginfo.h +++ b/ext/spl/spl_observer_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c526488c83b1de019f4257e2ddaaa8fb8f1bb323 */ + * Stub hash: aaefa4d4ac3b795212191d9fe06982d29948f552 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObserver_update, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, subject, SplSubject, 0) @@ -54,7 +54,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SplObjectStorage_next arginfo_class_SplSubject_notify ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_unserialize, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_SplObjectStorage_serialize arginfo_class_SplSubject_notify diff --git a/ext/spl/tests/DirectoryIterator_empty_constructor.phpt b/ext/spl/tests/DirectoryIterator_empty_constructor.phpt index a2ae3f065c13e..01b7c7d72cf19 100644 --- a/ext/spl/tests/DirectoryIterator_empty_constructor.phpt +++ b/ext/spl/tests/DirectoryIterator_empty_constructor.phpt @@ -12,4 +12,4 @@ try { } ?> --EXPECT-- -DirectoryIterator::__construct(): Argument #1 ($path) cannot be empty +DirectoryIterator::__construct(): Argument #1 ($directory) cannot be empty diff --git a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt index 228a581809180..4ace511e26b0e 100644 --- a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt +++ b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt @@ -13,4 +13,4 @@ try { ?> --EXPECT-- -SplFileInfo::setFileClass(): Argument #1 ($class_name) must be a class name derived from SplFileObject, stdClass given +SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, stdClass given diff --git a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt index d3f49f1814d70..1f64c353d3285 100644 --- a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt +++ b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt @@ -13,4 +13,4 @@ try { ?> --EXPECT-- -SplFileInfo::setInfoClass(): Argument #1 ($class_name) must be a class name derived from SplFileInfo, stdClass given +SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, stdClass given diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt index 03010f3935c90..b14e7ca479f50 100644 --- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt +++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt @@ -23,4 +23,4 @@ try { unlink('SplFileObject__fgetcsv3.csv'); ?> --EXPECT-- -SplFileObject::fgetcsv(): Argument #1 ($delimiter) must be a single character +SplFileObject::fgetcsv(): Argument #1 ($separator) must be a single character diff --git a/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt b/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt index 0dc2a4fe7e680..b21379994269e 100644 --- a/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt +++ b/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt @@ -27,5 +27,5 @@ unlink($file); ?> --EXPECT-- *** Testing fputcsv() : with default enclosure & delimiter of two chars *** -SplFileObject::fputcsv(): Argument #2 ($delimiter) must be a single character +SplFileObject::fputcsv(): Argument #2 ($separator) must be a single character Done diff --git a/ext/spl/tests/SplFileObject_seek_error_001.phpt b/ext/spl/tests/SplFileObject_seek_error_001.phpt index 30ad772958555..d29e86b955db3 100644 --- a/ext/spl/tests/SplFileObject_seek_error_001.phpt +++ b/ext/spl/tests/SplFileObject_seek_error_001.phpt @@ -10,4 +10,4 @@ try { } ?> --EXPECT-- -SplFileObject::seek(): Argument #1 ($line_pos) must be greater than or equal to 0 +SplFileObject::seek(): Argument #1 ($line) must be greater than or equal to 0 diff --git a/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt b/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt index 75249dbce4e59..a2fea52d5a005 100644 --- a/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt +++ b/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt @@ -24,4 +24,4 @@ try { unlink('csv_control_data_error001.csv'); ?> --EXPECT-- -SplFileObject::setCsvControl(): Argument #1 ($delimiter) must be a single character +SplFileObject::setCsvControl(): Argument #1 ($separator) must be a single character diff --git a/ext/spl/tests/SplTempFileObject_constructor_error.phpt b/ext/spl/tests/SplTempFileObject_constructor_error.phpt index 855479c54afa4..212a4df2ff8ad 100644 --- a/ext/spl/tests/SplTempFileObject_constructor_error.phpt +++ b/ext/spl/tests/SplTempFileObject_constructor_error.phpt @@ -9,4 +9,4 @@ try { } ?> --EXPECT-- -SplTempFileObject::__construct(): Argument #1 ($max_memory) must be of type int, string given +SplTempFileObject::__construct(): Argument #1 ($maxMemory) must be of type int, string given diff --git a/ext/spl/tests/arrayObject___construct_error1.phpt b/ext/spl/tests/arrayObject___construct_error1.phpt index beac9a76aba3f..91ef24f37e3f7 100644 --- a/ext/spl/tests/arrayObject___construct_error1.phpt +++ b/ext/spl/tests/arrayObject___construct_error1.phpt @@ -20,6 +20,6 @@ try { ?> --EXPECT-- Bad iterator type: -ArrayObject::__construct(): Argument #3 ($iterator_class) must be a class name derived from Iterator, Exception given(6) +ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, Exception given(6) Non-existent class: -ArrayObject::__construct(): Argument #3 ($iterator_class) must be a class name derived from Iterator, nonExistentClassName given(13) +ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClassName given(13) diff --git a/ext/spl/tests/arrayObject_asort_basic1.phpt b/ext/spl/tests/arrayObject_asort_basic1.phpt index 555b215ccedce..efce55d4d5874 100644 --- a/ext/spl/tests/arrayObject_asort_basic1.phpt +++ b/ext/spl/tests/arrayObject_asort_basic1.phpt @@ -36,7 +36,7 @@ object(ArrayObject)#%d (1) { int(4) } } -asort(): Argument #2 ($flags) must be of type int, string given +ArrayObject::asort(): Argument #1 ($flags) must be of type int, string given object(ArrayObject)#%d (1) { ["storage":"ArrayObject":private]=> array(3) { diff --git a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt index ee149ad19b835..57cfd2e51af32 100644 --- a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt +++ b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt @@ -103,7 +103,7 @@ NULL --> exchangeArray() with bad arg type: -ArrayObject::exchangeArray(): Argument #1 ($input) must be of type array, null given +ArrayObject::exchangeArray(): Argument #1 ($array) must be of type array, null given Warning: Undefined variable $copy in %s on line %d object(ArrayObject)#3 (1) { diff --git a/ext/spl/tests/arrayObject_ksort_basic1.phpt b/ext/spl/tests/arrayObject_ksort_basic1.phpt index d853e3c017bc3..27605461cbebc 100644 --- a/ext/spl/tests/arrayObject_ksort_basic1.phpt +++ b/ext/spl/tests/arrayObject_ksort_basic1.phpt @@ -35,7 +35,7 @@ object(ArrayObject)#%d (1) { int(3) } } -ksort(): Argument #2 ($flags) must be of type int, string given +ArrayObject::ksort(): Argument #1 ($flags) must be of type int, string given object(ArrayObject)#2 (1) { ["storage":"ArrayObject":private]=> array(4) { diff --git a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt index d178c06701a8b..b9ab040a2190b 100644 --- a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt +++ b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt @@ -45,5 +45,5 @@ try { --EXPECT-- string(128) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given" string(120) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, stdClass given" -string(124) "ArrayObject::__construct(): Argument #3 ($iterator_class) must be a class name derived from Iterator, nonExistentClass given" -string(116) "ArrayObject::__construct(): Argument #3 ($iterator_class) must be a class name derived from Iterator, stdClass given" +string(123) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given" +string(115) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, stdClass given" diff --git a/ext/spl/tests/bug54291.phpt b/ext/spl/tests/bug54291.phpt index 964cc866afde8..bd230f8b2e31b 100644 --- a/ext/spl/tests/bug54291.phpt +++ b/ext/spl/tests/bug54291.phpt @@ -6,7 +6,7 @@ $dir = new DirectoryIterator("\x00/abc"); $dir->isFile(); ?> --EXPECTF-- -Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($path) must not contain any null bytes in %s:%d +Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($directory) must not contain any null bytes in %s:%d Stack trace: #0 %s(%d): DirectoryIterator->__construct('\x00/abc') #1 {main} diff --git a/ext/spl/tests/bug54292.phpt b/ext/spl/tests/bug54292.phpt index 27bd706ad8225..39bfb6f4dd630 100644 --- a/ext/spl/tests/bug54292.phpt +++ b/ext/spl/tests/bug54292.phpt @@ -11,4 +11,4 @@ try { ?> --EXPECT-- -string(90) "SplFileObject::__construct(): Argument #2 ($open_mode) must be of type string, array given" +string(85) "SplFileObject::__construct(): Argument #2 ($mode) must be of type string, array given" diff --git a/ext/spl/tests/bug60201.phpt b/ext/spl/tests/bug60201.phpt index 4087efcbc902f..2074c9fa4c411 100644 --- a/ext/spl/tests/bug60201.phpt +++ b/ext/spl/tests/bug60201.phpt @@ -13,7 +13,7 @@ array(3) { [0]=> object(ReflectionParameter)#%d (1) { ["name"]=> - string(9) "delimiter" + string(9) "separator" } [1]=> object(ReflectionParameter)#%d (1) { diff --git a/ext/spl/tests/bug68479.phpt b/ext/spl/tests/bug68479.phpt index 0ce7c96968cee..e749d01120a9e 100644 --- a/ext/spl/tests/bug68479.phpt +++ b/ext/spl/tests/bug68479.phpt @@ -18,7 +18,7 @@ array(4) { [1]=> object(ReflectionParameter)#3 (1) { ["name"]=> - string(9) "delimiter" + string(9) "separator" } [2]=> object(ReflectionParameter)#4 (1) { diff --git a/ext/spl/tests/bug77431.phpt b/ext/spl/tests/bug77431.phpt index 75ae1d14d03f3..2d14d082ec9b4 100644 --- a/ext/spl/tests/bug77431.phpt +++ b/ext/spl/tests/bug77431.phpt @@ -5,7 +5,7 @@ Bug #77431 (SplFileInfo::__construct() accepts NUL bytes) new SplFileInfo("bad\0good"); ?> --EXPECTF-- -Fatal error: Uncaught ValueError: SplFileInfo::__construct(): Argument #1 ($file_name) must not contain any null bytes in %s:%d +Fatal error: Uncaught ValueError: SplFileInfo::__construct(): Argument #1 ($filename) must not contain any null bytes in %s:%d Stack trace: #0 %s(%d): SplFileInfo->__construct('bad\x00good') #1 {main} diff --git a/ext/spl/tests/bug78863.phpt b/ext/spl/tests/bug78863.phpt index 524711fc641a4..100d5c0c5837f 100644 --- a/ext/spl/tests/bug78863.phpt +++ b/ext/spl/tests/bug78863.phpt @@ -16,7 +16,7 @@ foreach ($it as $fileinfo) { } ?> --EXPECTF-- -Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($path) must not contain any null bytes in %s:%d +Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($directory) must not contain any null bytes in %s:%d Stack trace: #0 %s(%d): DirectoryIterator->__construct('%s') #1 {main} diff --git a/ext/spl/tests/bug79987.phpt b/ext/spl/tests/bug79987.phpt index bda5841ee7a69..b6ea8e2a9c412 100644 --- a/ext/spl/tests/bug79987.phpt +++ b/ext/spl/tests/bug79987.phpt @@ -15,5 +15,24 @@ try { } catch (Throwable $e) { echo $e->getMessage() . "\n"; } +try { + var_dump($x->getFilename()); +} catch (Throwable $e) { + echo $e->getMessage() . "\n"; +} +try { + var_dump($x->getExtension()); +} catch (Throwable $e) { + echo $e->getMessage() . "\n"; +} +try { + var_dump($x->getBasename()); +} catch (Throwable $e) { + echo $e->getMessage() . "\n"; +} +?> --EXPECT-- Object not initialized +Object not initialized +Object not initialized +Object not initialized diff --git a/ext/spl/tests/dit_004.phpt b/ext/spl/tests/dit_004.phpt index 9d7069e5251f2..c54d4bf3c0f6e 100644 --- a/ext/spl/tests/dit_004.phpt +++ b/ext/spl/tests/dit_004.phpt @@ -2,7 +2,13 @@ SPL: DirectoryIterator and clone --FILE-- key(), $b->key()); @@ -13,6 +19,14 @@ $c = clone $a; var_dump((string)$c == (string)$a); var_dump($a->key(), $c->key()); ?> +--CLEAN-- + --EXPECT-- bool(true) int(0) diff --git a/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt b/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt index 5a4229616a322..018ecd47b42aa 100644 --- a/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt +++ b/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt @@ -14,4 +14,4 @@ catch (\ValueError $e) { ?> --EXPECT-- -SplFileObject::setMaxLineLen(): Argument #1 ($max_len) must be greater than or equal to 0 +SplFileObject::setMaxLineLen(): Argument #1 ($maxLength) must be greater than or equal to 0 diff --git a/ext/spl/tests/iterator_028.phpt b/ext/spl/tests/iterator_028.phpt index 0b8253d25b382..92e00b4f78b3e 100644 --- a/ext/spl/tests/iterator_028.phpt +++ b/ext/spl/tests/iterator_028.phpt @@ -102,5 +102,5 @@ int(0) 0: 4 ===-1=== bool(false) -RecursiveIteratorIterator::setMaxDepth(): Argument #1 ($max_depth) must be greater than or equal to -1 +RecursiveIteratorIterator::setMaxDepth(): Argument #1 ($maxDepth) must be greater than or equal to -1 int(4) diff --git a/ext/spl/tests/iterator_044.phpt b/ext/spl/tests/iterator_044.phpt index bc2e4896b0b58..66f722af9a1bd 100644 --- a/ext/spl/tests/iterator_044.phpt +++ b/ext/spl/tests/iterator_044.phpt @@ -83,8 +83,8 @@ NULL ===1=== object(stdClass)#%d (0) { } -CachingIterator::offsetExists(): Argument #1 ($index) must be of type string, stdClass given -CachingIterator::offsetGet(): Argument #1 ($index) must be of type string, stdClass given +CachingIterator::offsetExists(): Argument #1 ($key) must be of type string, stdClass given +CachingIterator::offsetGet(): Argument #1 ($key) must be of type string, stdClass given ===2=== object(MyFoo)#%d (0) { } @@ -124,8 +124,8 @@ int(0) ===1=== object(stdClass)#1 (0) { } -CachingIterator::offsetExists(): Argument #1 ($index) must be of type string, stdClass given -CachingIterator::offsetGet(): Argument #1 ($index) must be of type string, stdClass given +CachingIterator::offsetExists(): Argument #1 ($key) must be of type string, stdClass given +CachingIterator::offsetGet(): Argument #1 ($key) must be of type string, stdClass given ===2=== object(MyFoo)#2 (0) { } diff --git a/ext/spl/tests/spl_004.phpt b/ext/spl/tests/spl_004.phpt index d87b114a67ce9..3538fa6b489cf 100644 --- a/ext/spl/tests/spl_004.phpt +++ b/ext/spl/tests/spl_004.phpt @@ -85,5 +85,5 @@ int(6) int(4) ===ERRORS=== iterator_apply(): Argument #3 ($args) must be of type ?array, int given -iterator_apply(): Argument #2 ($function) must be a valid callback, function "non_existing_function" not found or invalid function name +iterator_apply(): Argument #2 ($callback) must be a valid callback, function "non_existing_function" not found or invalid function name iterator_apply() expects at most 3 arguments, 4 given diff --git a/ext/spl/tests/spl_autoload_001.phpt b/ext/spl/tests/spl_autoload_001.phpt index 90e863ce69702..c7f5e573f37ad 100644 --- a/ext/spl/tests/spl_autoload_001.phpt +++ b/ext/spl/tests/spl_autoload_001.phpt @@ -100,4 +100,4 @@ TestFunc2(TestClass) %stestclass.class.inc bool(true) ===NOFUNCTION=== -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, function "unavailable_autoload_function" not found or invalid function name +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, function "unavailable_autoload_function" not found or invalid function name diff --git a/ext/spl/tests/spl_autoload_005.phpt b/ext/spl/tests/spl_autoload_005.phpt index 6fe71434f8376..6eb851032504c 100644 --- a/ext/spl/tests/spl_autoload_005.phpt +++ b/ext/spl/tests/spl_autoload_005.phpt @@ -43,7 +43,7 @@ catch(Exception $e) ?> --EXPECT-- -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, non-static method MyAutoLoader::autoLoad() cannot be called statically +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::autoLoad() cannot be called statically MyAutoLoader::autoLoad(TestClass) MyAutoLoader::autoThrow(TestClass) Exception: Unavailable diff --git a/ext/spl/tests/spl_autoload_007.phpt b/ext/spl/tests/spl_autoload_007.phpt index a460d259fb2a4..589ce74b7f746 100644 --- a/ext/spl/tests/spl_autoload_007.phpt +++ b/ext/spl/tests/spl_autoload_007.phpt @@ -52,16 +52,16 @@ foreach($funcs as $idx => $func) ?> --EXPECTF-- string(22) "MyAutoLoader::notExist" -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, class MyAutoLoader does not have a method "notExist" +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist" string(22) "MyAutoLoader::noAccess" -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() string(22) "MyAutoLoader::autoLoad" ok string(22) "MyAutoLoader::dynaLoad" -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically array(2) { [0]=> @@ -69,7 +69,7 @@ array(2) { [1]=> string(8) "notExist" } -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, class MyAutoLoader does not have a method "notExist" +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist" array(2) { [0]=> @@ -77,7 +77,7 @@ array(2) { [1]=> string(8) "noAccess" } -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() array(2) { [0]=> @@ -93,7 +93,7 @@ array(2) { [1]=> string(8) "dynaLoad" } -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically array(2) { [0]=> @@ -102,7 +102,7 @@ array(2) { [1]=> string(8) "notExist" } -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, class MyAutoLoader does not have a method "notExist" +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist" array(2) { [0]=> @@ -111,7 +111,7 @@ array(2) { [1]=> string(8) "noAccess" } -spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() +spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess() array(2) { [0]=> diff --git a/ext/spl/tests/spl_autoload_008.phpt b/ext/spl/tests/spl_autoload_008.phpt index 77b2ab5627f35..99f61cd561be4 100644 --- a/ext/spl/tests/spl_autoload_008.phpt +++ b/ext/spl/tests/spl_autoload_008.phpt @@ -81,7 +81,7 @@ Exception: Bla int(0) ====2==== string(22) "MyAutoLoader::dynaLoad" -TypeError: spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically +TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically int(0) ====3==== array(2) { @@ -101,7 +101,7 @@ array(2) { [1]=> string(8) "dynaLoad" } -TypeError: spl_autoload_register(): Argument #1 ($autoload_function) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically +TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically int(0) ====5==== array(2) { diff --git a/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt b/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt index cde49dbac3ab8..943d80ae25377 100644 --- a/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt +++ b/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt @@ -11,4 +11,4 @@ try { ?> --EXPECT-- -spl_autoload_register(): Argument #1 ($autoload_function) must not be the spl_autoload_call() function +spl_autoload_register(): Argument #1 ($callback) must not be the spl_autoload_call() function diff --git a/ext/spl/tests/spl_limit_iterator_check_limits.phpt b/ext/spl/tests/spl_limit_iterator_check_limits.phpt index 91604abb3da44..3cf4bbab175e8 100644 --- a/ext/spl/tests/spl_limit_iterator_check_limits.phpt +++ b/ext/spl/tests/spl_limit_iterator_check_limits.phpt @@ -25,4 +25,4 @@ $limitIterator = new LimitIterator($arrayIterator, 0, -1); ?> --EXPECT-- LimitIterator::__construct(): Argument #2 ($offset) must be greater than or equal to 0 -LimitIterator::__construct(): Argument #3 ($count) must be greater than or equal to -1 +LimitIterator::__construct(): Argument #3 ($limit) must be greater than or equal to -1 diff --git a/ext/sqlite3/sqlite3.stub.php b/ext/sqlite3/sqlite3.stub.php index e07286fd2d650..ef05ab6a80cae 100644 --- a/ext/sqlite3/sqlite3.stub.php +++ b/ext/sqlite3/sqlite3.stub.php @@ -5,10 +5,10 @@ class SQLite3 { /** @implementation-alias SQLite3::open */ - public function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = "") {} + public function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryptionKey = "") {} /** @return void */ - public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = "") {} + public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryptionKey = "") {} /** @return bool */ public function close() {} @@ -32,20 +32,20 @@ public function lastErrorMsg() {} public function changes() {} /** @return bool */ - public function busyTimeout(int $ms) {} + public function busyTimeout(int $milliseconds) {} #ifndef SQLITE_OMIT_LOAD_EXTENSION /** @return bool */ - public function loadExtension(string $shared_library) {} + public function loadExtension(string $name) {} #endif #if SQLITE_VERSION_NUMBER >= 3006011 /** @return bool */ - public function backup(SQLite3 $destination_db, string $source_dbname = "main", string $destination_dbname = "main") {} + public function backup(SQLite3 $destination, string $sourceDatabase = "main", string $destinationDatabase = "main") {} #endif /** @return string */ - public static function escapeString(string $value) {} + public static function escapeString(string $string) {} /** @return SQLite3Stmt|false */ public function prepare(string $query) {} @@ -57,22 +57,22 @@ public function exec(string $query) {} public function query(string $query) {} /** @return mixed */ - public function querySingle(string $query, bool $entire_row = false) {} + public function querySingle(string $query, bool $entireRow = false) {} /** @return bool */ - public function createFunction(string $name, callable $callback, int $argument_count = -1, int $flags = 0) {} + public function createFunction(string $name, callable $callback, int $argCount = -1, int $flags = 0) {} /** @return bool */ - public function createAggregate(string $name, callable $step_callback, callable $final_callback, int $argument_count = -1) {} + public function createAggregate(string $name, callable $stepCallback, callable $finalCallback, int $argCount = -1) {} /** @return bool */ public function createCollation(string $name, callable $callback) {} /** @return resource|false */ - public function openBlob(string $table, string $column, int $rowid, string $dbname = "main", int $flags = SQLITE3_OPEN_READONLY) {} + public function openBlob(string $table, string $column, int $rowid, string $database = "main", int $flags = SQLITE3_OPEN_READONLY) {} /** @return bool */ - public function enableExceptions(bool $enableExceptions = false) {} + public function enableExceptions(bool $enable = false) {} /** @return bool */ public function enableExtendedResultCodes(bool $enable = true) {} @@ -83,13 +83,13 @@ public function setAuthorizer(?callable $callback) {} class SQLite3Stmt { - private function __construct(SQLite3 $sqlite3, string $sql) {} + private function __construct(SQLite3 $sqlite3, string $query) {} /** @return bool */ - public function bindParam(string|int $param_number, mixed &$param, int $type = SQLITE3_TEXT) {} + public function bindParam(string|int $param, mixed &$var, int $type = SQLITE3_TEXT) {} /** @return bool */ - public function bindValue(string|int $param_number, mixed $param, int $type = SQLITE3_TEXT) {} + public function bindValue(string|int $param, mixed $value, int $type = SQLITE3_TEXT) {} /** @return bool */ public function clear() {} @@ -101,7 +101,7 @@ public function close() {} public function execute() {} /** @return string|false */ - public function getSQL(bool $expanded = false) {} + public function getSQL(bool $expand = false) {} /** @return int */ public function paramCount() {} @@ -121,10 +121,10 @@ private function __construct() {} public function numColumns() {} /** @return string|false */ - public function columnName(int $column_number) {} + public function columnName(int $column) {} /** @return int|false */ - public function columnType(int $column_number) {} + public function columnType(int $column) {} /** @return array|false */ public function fetchArray(int $mode = SQLITE3_BOTH) {} diff --git a/ext/sqlite3/sqlite3_arginfo.h b/ext/sqlite3/sqlite3_arginfo.h index 3f151f9ad1ecd..9cb142d7c6d30 100644 --- a/ext/sqlite3/sqlite3_arginfo.h +++ b/ext/sqlite3/sqlite3_arginfo.h @@ -1,10 +1,10 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 293f1041949989de457a4091b751674bf301c2bd */ + * Stub hash: 20d9cd75afa2a9b9d4eb6c8019e7c47d34778df4 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryption_key, IS_STRING, 0, "\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryptionKey, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #define arginfo_class_SQLite3_open arginfo_class_SQLite3___construct @@ -25,25 +25,25 @@ ZEND_END_ARG_INFO() #define arginfo_class_SQLite3_changes arginfo_class_SQLite3_close ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_busyTimeout, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, ms, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, milliseconds, IS_LONG, 0) ZEND_END_ARG_INFO() #if !defined(SQLITE_OMIT_LOAD_EXTENSION) ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_loadExtension, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, shared_library, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() #endif #if SQLITE_VERSION_NUMBER >= 3006011 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_backup, 0, 0, 1) - ZEND_ARG_OBJ_INFO(0, destination_db, SQLite3, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, source_dbname, IS_STRING, 0, "\"main\"") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, destination_dbname, IS_STRING, 0, "\"main\"") + ZEND_ARG_OBJ_INFO(0, destination, SQLite3, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sourceDatabase, IS_STRING, 0, "\"main\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, destinationDatabase, IS_STRING, 0, "\"main\"") ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_escapeString, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_prepare, 0, 0, 1) @@ -56,21 +56,21 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_querySingle, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, entire_row, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, entireRow, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createFunction, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argument_count, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argCount, IS_LONG, 0, "-1") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createAggregate, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, step_callback, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO(0, final_callback, IS_CALLABLE, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argument_count, IS_LONG, 0, "-1") + ZEND_ARG_TYPE_INFO(0, stepCallback, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, finalCallback, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argCount, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createCollation, 0, 0, 2) @@ -82,12 +82,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_openBlob, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, column, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, rowid, IS_LONG, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, dbname, IS_STRING, 0, "\"main\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, database, IS_STRING, 0, "\"main\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SQLITE3_OPEN_READONLY") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExceptions, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enableExceptions, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExtendedResultCodes, 0, 0, 0) @@ -100,18 +100,18 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt___construct, 0, 0, 2) ZEND_ARG_OBJ_INFO(0, sqlite3, SQLite3, 0) - ZEND_ARG_TYPE_INFO(0, sql, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindParam, 0, 0, 2) - ZEND_ARG_TYPE_MASK(0, param_number, MAY_BE_STRING|MAY_BE_LONG, NULL) - ZEND_ARG_TYPE_INFO(1, param, IS_MIXED, 0) + ZEND_ARG_TYPE_MASK(0, param, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "SQLITE3_TEXT") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindValue, 0, 0, 2) - ZEND_ARG_TYPE_MASK(0, param_number, MAY_BE_STRING|MAY_BE_LONG, NULL) - ZEND_ARG_TYPE_INFO(0, param, IS_MIXED, 0) + ZEND_ARG_TYPE_MASK(0, param, MAY_BE_STRING|MAY_BE_LONG, NULL) + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "SQLITE3_TEXT") ZEND_END_ARG_INFO() @@ -122,7 +122,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SQLite3Stmt_execute arginfo_class_SQLite3_close ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_getSQL, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, expanded, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, expand, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_class_SQLite3Stmt_paramCount arginfo_class_SQLite3_close @@ -136,7 +136,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_SQLite3Result_numColumns arginfo_class_SQLite3_close ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Result_columnName, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, column_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, column, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_SQLite3Result_columnType arginfo_class_SQLite3Result_columnName diff --git a/ext/sqlite3/tests/sqlite3_33_createAggregate_notcallable.phpt b/ext/sqlite3/tests/sqlite3_33_createAggregate_notcallable.phpt index 0a277d41b5507..f05e053b25a27 100644 --- a/ext/sqlite3/tests/sqlite3_33_createAggregate_notcallable.phpt +++ b/ext/sqlite3/tests/sqlite3_33_createAggregate_notcallable.phpt @@ -32,7 +32,7 @@ $db->close(); echo "Done" ?> --EXPECT-- -SQLite3::createAggregate(): Argument #2 ($step_callback) must be a valid callback, function "aggregate_test_step" not found or invalid function name -SQLite3::createAggregate(): Argument #3 ($final_callback) must be a valid callback, function "aggregate_test_final" not found or invalid function name +SQLite3::createAggregate(): Argument #2 ($stepCallback) must be a valid callback, function "aggregate_test_step" not found or invalid function name +SQLite3::createAggregate(): Argument #3 ($finalCallback) must be a valid callback, function "aggregate_test_final" not found or invalid function name bool(true) Done diff --git a/ext/standard/array.c b/ext/standard/array.c index f99af846114dd..3a50e771007c1 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1321,7 +1321,13 @@ PHP_FUNCTION(max) } /* }}} */ -static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ +typedef struct { + zend_fcall_info fci; + zend_fcall_info_cache fci_cache; +} php_array_walk_context; + +static int php_array_walk( + php_array_walk_context *context, zval *array, zval *userdata, int recursive) { zval args[3], /* Arguments to userland function */ retval, /* Return value - unused */ @@ -1331,15 +1337,19 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ uint32_t ht_iter; int result = SUCCESS; + /* Create a local copy of fci, as we want to use different arguments at different + * levels of recursion. */ + zend_fcall_info fci = context->fci; + /* Set up known arguments */ ZVAL_UNDEF(&args[1]); if (userdata) { ZVAL_COPY(&args[2], userdata); } - BG(array_walk_fci).retval = &retval; - BG(array_walk_fci).param_count = userdata ? 3 : 2; - BG(array_walk_fci).params = args; + fci.retval = &retval; + fci.param_count = userdata ? 3 : 2; + fci.params = args; zend_hash_internal_pointer_reset_ex(target_hash, &pos); ht_iter = zend_hash_iterator_add(target_hash, pos); @@ -1386,8 +1396,6 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ if (recursive && Z_TYPE_P(Z_REFVAL_P(zv)) == IS_ARRAY) { HashTable *thash; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; zval ref; ZVAL_COPY_VALUE(&ref, zv); @@ -1400,28 +1408,20 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ break; } - /* backup the fcall info and cache */ - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); - Z_ADDREF(ref); GC_PROTECT_RECURSION(thash); - result = php_array_walk(zv, userdata, recursive); + result = php_array_walk(context, zv, userdata, recursive); if (Z_TYPE_P(Z_REFVAL(ref)) == IS_ARRAY && thash == Z_ARRVAL_P(Z_REFVAL(ref))) { /* If the hashtable changed in the meantime, we'll "leak" this apply count * increment -- our reference to thash is no longer valid. */ GC_UNPROTECT_RECURSION(thash); } zval_ptr_dtor(&ref); - - /* restore the fcall info and cache */ - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; } else { ZVAL_COPY(&args[0], zv); /* Call the userland function */ - result = zend_call_function(&BG(array_walk_fci), &BG(array_walk_fci_cache)); + result = zend_call_function(&fci, &context->fci_cache); if (result == SUCCESS) { zval_ptr_dtor(&retval); } @@ -1458,33 +1458,22 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ zend_hash_iterator_del(ht_iter); return result; } -/* }}} */ /* {{{ Apply a user function to every member of an array */ PHP_FUNCTION(array_walk) { zval *array; zval *userdata = NULL; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; - - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); + php_array_walk_context context; ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_ARRAY_OR_OBJECT_EX(array, 0, 1) - Z_PARAM_FUNC(BG(array_walk_fci), BG(array_walk_fci_cache)) + Z_PARAM_FUNC(context.fci, context.fci_cache) Z_PARAM_OPTIONAL Z_PARAM_ZVAL(userdata) - ZEND_PARSE_PARAMETERS_END_EX( - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; - return - ); - - php_array_walk(array, userdata, 0); - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; + ZEND_PARSE_PARAMETERS_END(); + + php_array_walk(&context, array, userdata, 0); RETURN_TRUE; } /* }}} */ @@ -1494,26 +1483,16 @@ PHP_FUNCTION(array_walk_recursive) { zval *array; zval *userdata = NULL; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; - - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); + php_array_walk_context context; ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_ARRAY_OR_OBJECT_EX(array, 0, 1) - Z_PARAM_FUNC(BG(array_walk_fci), BG(array_walk_fci_cache)) + Z_PARAM_FUNC(context.fci, context.fci_cache) Z_PARAM_OPTIONAL Z_PARAM_ZVAL(userdata) - ZEND_PARSE_PARAMETERS_END_EX( - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; - return - ); - - php_array_walk(array, userdata, 1); - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; + ZEND_PARSE_PARAMETERS_END(); + + php_array_walk(&context, array, userdata, 1); RETURN_TRUE; } /* }}} */ diff --git a/ext/standard/assert.c b/ext/standard/assert.c index 382c0b87e4665..86acaec38984f 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -181,15 +181,11 @@ PHP_FUNCTION(assert) if (description_str) { ZVAL_STR(&args[3], description_str); call_user_function(NULL, NULL, &ASSERTG(callback), &retval, 4, args); - zval_ptr_dtor(&(args[3])); - zval_ptr_dtor(&(args[2])); - zval_ptr_dtor(&(args[0])); } else { call_user_function(NULL, NULL, &ASSERTG(callback), &retval, 3, args); - zval_ptr_dtor(&(args[2])); - zval_ptr_dtor(&(args[0])); } + zval_ptr_dtor(&args[0]); zval_ptr_dtor(&retval); } diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 8a7d9ca895bfb..33247c4cb3941 100755 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -463,8 +463,6 @@ PHP_RINIT_FUNCTION(basic) /* {{{ */ BG(strtok_last) = NULL; BG(ctype_string) = NULL; BG(locale_changed) = 0; - BG(array_walk_fci) = empty_fcall_info; - BG(array_walk_fci_cache) = empty_fcall_info_cache; BG(user_compare_fci) = empty_fcall_info; BG(user_compare_fci_cache) = empty_fcall_info_cache; BG(page_uid) = -1; @@ -1472,7 +1470,7 @@ PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_le return FAILURE; case 3: /*save to a file */ - stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | REPORT_ERRORS, NULL); + stream = php_stream_open_wrapper(opt, "a", REPORT_ERRORS, NULL); if (!stream) { return FAILURE; } @@ -1931,22 +1929,18 @@ PHP_FUNCTION(php_strip_whitespace) /* {{{ Syntax highlight a string or optionally return it */ PHP_FUNCTION(highlight_string) { - zval *expr; + zend_string *str; zend_syntax_highlighter_ini syntax_highlighter_ini; char *hicompiled_string_description; zend_bool i = 0; int old_error_reporting = EG(error_reporting); ZEND_PARSE_PARAMETERS_START(1, 2) - Z_PARAM_ZVAL(expr) + Z_PARAM_STR(str) Z_PARAM_OPTIONAL Z_PARAM_BOOL(i) ZEND_PARSE_PARAMETERS_END(); - if (!try_convert_to_string(expr)) { - RETURN_THROWS(); - } - if (i) { php_output_start_default(); } @@ -1957,7 +1951,7 @@ PHP_FUNCTION(highlight_string) hicompiled_string_description = zend_make_compiled_string_description("highlighted code"); - highlight_string(expr, &syntax_highlighter_ini, hicompiled_string_description); + highlight_string(str, &syntax_highlighter_ini, hicompiled_string_description); efree(hicompiled_string_description); EG(error_reporting) = old_error_reporting; diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h index 97faf50fd92e9..34b2570175ab3 100644 --- a/ext/standard/basic_functions.h +++ b/ext/standard/basic_functions.h @@ -66,8 +66,6 @@ typedef struct _php_basic_globals { char *strtok_last; char strtok_table[256]; size_t strtok_len; - zend_fcall_info array_walk_fci; - zend_fcall_info_cache array_walk_fci_cache; zend_fcall_info user_compare_fci; zend_fcall_info_cache user_compare_fci_cache; zend_llist *user_tick_functions; diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index 5b8103f036fec..5d325515f7d1c 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -285,7 +285,7 @@ function time_sleep_until(float $timestamp): bool {} function get_current_user(): string {} -function get_cfg_var(string $name): string|array|false {} +function get_cfg_var(string $option): string|array|false {} function error_log(string $message, int $message_type = 0, ?string $destination = null, ?string $additional_headers = null): bool {} @@ -312,16 +312,16 @@ function php_strip_whitespace(string $filename): string {} function highlight_string(string $string, bool $return = false): string|bool {} -function ini_get(string $name): string|false {} +function ini_get(string $option): string|false {} function ini_get_all(?string $extension = null, bool $details = true): array|false {} -function ini_set(string $name, string $value): string|false {} +function ini_set(string $option, string $value): string|false {} /** @alias ini_set */ -function ini_alter(string $name, string $value): string|false {} +function ini_alter(string $option, string $value): string|false {} -function ini_restore(string $name): void {} +function ini_restore(string $option): void {} function set_include_path(string $include_path): string|false {} @@ -461,7 +461,7 @@ function getmypid(): int|false {} function getmyinode(): int|false {} -function getlastmod(): int {} +function getlastmod(): int|false {} /* sha1.c */ @@ -528,8 +528,7 @@ function get_html_translation_table(int $table = HTML_SPECIALCHARS, int $flags = function assert(mixed $assertion, Throwable|string|null $description = null): bool {} -/** @param string|callable|null $value */ -function assert_options(int $option, $value = UNKNOWN): array|object|int|string|null {} +function assert_options(int $option, mixed $value = UNKNOWN): array|object|int|string|null {} /* string.c */ @@ -723,7 +722,7 @@ function rewinddir($dir_handle = null): void {} function readdir($dir_handle = null): string|false {} /** @param resource|null $context */ -function scandir(string $directory, int $sorting_order = 0, $context = null): array|false {} +function scandir(string $directory, int $sorting_order = SCANDIR_SORT_ASCENDING, $context = null): array|false {} #ifdef HAVE_GLOB function glob(string $pattern, int $flags = 0): array|false {} @@ -823,16 +822,16 @@ function ftell($stream): int|false {} function fflush($stream): bool {} /** @param resource $stream */ -function fwrite($stream, string $string, ?int $max_length = null): int|false {} +function fwrite($stream, string $data, ?int $length = null): int|false {} /** * @param resource $stream * @alias fwrite */ -function fputs($stream, string $string, ?int $max_length = null): int|false {} +function fputs($stream, string $data, ?int $length = null): int|false {} /** @param resource|null $context */ -function mkdir(string $directory, int $mode = 0777, bool $recursive = false, $context = null): bool {} +function mkdir(string $directory, int $permissions = 0777, bool $recursive = false, $context = null): bool {} /** @param resource|null $context */ function rename(string $from, string $to, $context = null): bool {} @@ -849,13 +848,13 @@ function tmpfile() {} function file(string $filename, int $flags = 0, $context = null): array|false {} /** @param resource|null $context */ -function file_get_contents(string $filename, bool $use_include_path = false, $context = null, int $offset = 0, ?int $max_length = null): string|false {} +function file_get_contents(string $filename, bool $use_include_path = false, $context = null, int $offset = 0, ?int $length = null): string|false {} /** @param resource|null $context */ function unlink(string $filename, $context = null): bool {} /** @param resource|null $context */ -function file_put_contents(string $filename, mixed $content, int $flags = 0, $context = null): int|false {} +function file_put_contents(string $filename, mixed $data, int $flags = 0, $context = null): int|false {} /** @param resource $stream */ function fputcsv($stream, array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\"): int|false {} @@ -922,7 +921,7 @@ function lchown(string $filename, string|int $user): bool {} function lchgrp(string $filename, string|int $group): bool {} #endif -function chmod(string $filename, int $mode): bool {} +function chmod(string $filename, int $permissions): bool {} #if HAVE_UTIME function touch(string $filename, ?int $mtime = null, ?int $atime = null): bool {} @@ -1111,7 +1110,7 @@ function dechex(int $num): string {} function base_convert(string $num, int $from_base, int $to_base): string {} -function number_format(float $num, int $decimals = 0, ?string $decimal_separator = "." , ?string $thousands_separator = ","): string {} +function number_format(float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ","): string {} function fmod(float $num1, float $num2): float {} @@ -1126,7 +1125,7 @@ function gettimeofday(bool $as_float = false): array|float {} #endif #ifdef HAVE_GETRUSAGE -function getrusage(bool $mode = 0): array|false {} +function getrusage(int $mode = 0): array|false {} #endif /* pack.c */ @@ -1278,7 +1277,7 @@ function stream_socket_sendto($socket, string $data, int $flags = 0, string $add * @param resource $stream * @param resource|null $session_stream */ -function stream_socket_enable_crypto($stream, bool $enable, ?int $crypto_type = null, $session_stream = null): int|bool {} +function stream_socket_enable_crypto($stream, bool $enable, ?int $crypto_method = null, $session_stream = null): int|bool {} #ifdef HAVE_SHUTDOWN /** @param resource $stream */ @@ -1293,10 +1292,10 @@ function stream_socket_pair(int $domain, int $type, int $protocol): array|false * @param resource $from * @param resource $to */ -function stream_copy_to_stream($from, $to, ?int $max_length = null, int $offset = 0): int|false {} +function stream_copy_to_stream($from, $to, ?int $length = null, int $offset = 0): int|false {} /** @param resource $stream */ -function stream_get_contents($stream, ?int $max_length = null, int $offset = -1): string|false {} +function stream_get_contents($stream, ?int $length = null, int $offset = -1): string|false {} /** @param resource $stream */ function stream_supports_lock($stream): bool {} @@ -1332,7 +1331,7 @@ function stream_get_meta_data($stream): array {} function socket_get_status($stream): array {} /** @param resource $stream */ -function stream_get_line($stream, int $max_length, string $ending = ""): string|false {} +function stream_get_line($stream, int $length, string $ending = ""): string|false {} function stream_resolve_include_path(string $filename): string|false {} @@ -1440,8 +1439,7 @@ function rawurlencode(string $string): string {} function rawurldecode(string $string): string {} /** @param resource $context */ -// TODO: Make bool argument? -function get_headers(string $url, int $as_assoc_array = 0, $context = null): array|false {} +function get_headers(string $url, bool $associative = false, $context = null): array|false {} /* user_filters.c */ @@ -1477,7 +1475,7 @@ function debug_zval_dump(mixed $value, mixed ...$values): void {} function serialize(mixed $value): string {} -function unserialize(string $value, array $options = []): mixed {} +function unserialize(string $data, array $options = []): mixed {} function memory_get_usage(bool $real_usage = false): int {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 5ee5b9602900b..a5bf2cedad1cf 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: af5b921b66f7dd68ba8c771199825a439a07dba0 */ + * Stub hash: 4edb7cad23ccb051dbe267b3979e98892607c98f */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) @@ -426,7 +426,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_current_user, 0, 0, IS_STRIN ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_cfg_var, 0, 1, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_log, 0, 1, _IS_BOOL, 0) @@ -477,7 +477,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_highlight_string, 0, 1, MAY_BE_S ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_get, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_get_all, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE) @@ -486,14 +486,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_get_all, 0, 0, MAY_BE_ARRAY| ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_set, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ini_alter arginfo_ini_set ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ini_restore, 0, 1, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_set_include_path, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) @@ -687,7 +687,7 @@ ZEND_END_ARG_INFO() #define arginfo_getmyinode arginfo_ob_get_length -#define arginfo_getlastmod arginfo_ob_get_level +#define arginfo_getlastmod arginfo_ob_get_length #define arginfo_sha1 arginfo_md5 @@ -796,7 +796,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_assert_options, 0, 1, MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_LONG|MAY_BE_STRING|MAY_BE_NULL) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) - ZEND_ARG_INFO(0, value) + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() #define arginfo_bin2hex arginfo_base64_encode @@ -1125,7 +1125,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scandir, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sorting_order, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sorting_order, IS_LONG, 0, "SCANDIR_SORT_ASCENDING") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -1267,15 +1267,15 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fwrite, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, stream) - ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_fputs arginfo_fwrite ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mkdir, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0777") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, permissions, IS_LONG, 0, "0777") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, recursive, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -1307,7 +1307,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_file_get_contents, 0, 1, MAY_BE_ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_unlink, 0, 1, _IS_BOOL, 0) @@ -1317,7 +1317,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_file_put_contents, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, content, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -1422,7 +1422,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chmod, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0) ZEND_END_ARG_INFO() #if HAVE_UTIME @@ -1734,7 +1734,7 @@ ZEND_END_ARG_INFO() #if defined(HAVE_GETRUSAGE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getrusage, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, _IS_BOOL, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #endif @@ -1931,7 +1931,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_enable_crypto, 0, 2, MAY_BE_LONG|MAY_BE_BOOL) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, crypto_type, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, crypto_method, IS_LONG, 1, "null") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, session_stream, "null") ZEND_END_ARG_INFO() @@ -1953,13 +1953,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_copy_to_stream, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_INFO(0, from) ZEND_ARG_INFO(0, to) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_get_contents, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, stream) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "-1") ZEND_END_ARG_INFO() @@ -1989,7 +1989,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_get_line, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_INFO(0, stream) - ZEND_ARG_TYPE_INFO(0, max_length, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ending, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() @@ -2110,7 +2110,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_headers, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, url, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_assoc_array, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, associative, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() @@ -2156,7 +2156,7 @@ ZEND_END_ARG_INFO() #define arginfo_serialize arginfo_gettype ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_unserialize, 0, 1, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") ZEND_END_ARG_INFO() diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index 1cb0af79f68e0..301540db58d24 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -59,6 +59,8 @@ fi AC_CACHE_CHECK(for standard DES crypt, ac_cv_crypt_des,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -73,9 +75,9 @@ AC_CACHE_CHECK(for standard DES crypt, ac_cv_crypt_des,[ int main() { #if HAVE_CRYPT char *encrypted = crypt("rasmuslerdorf","rl"); - exit(!encrypted || strcmp(encrypted,"rl.3StKT.4T8M")); + return !encrypted || strcmp(encrypted,"rl.3StKT.4T8M"); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_des=yes @@ -87,6 +89,8 @@ int main() { AC_CACHE_CHECK(for extended DES crypt, ac_cv_crypt_ext_des,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -101,9 +105,9 @@ AC_CACHE_CHECK(for extended DES crypt, ac_cv_crypt_ext_des,[ int main() { #if HAVE_CRYPT char *encrypted = crypt("rasmuslerdorf","_J9..rasm"); - exit(!encrypted || strcmp(encrypted,"_J9..rasmBYk8r9AiWNc")); + return !encrypted || strcmp(encrypted,"_J9..rasmBYk8r9AiWNc"); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_ext_des=yes @@ -115,6 +119,8 @@ int main() { AC_CACHE_CHECK(for MD5 crypt, ac_cv_crypt_md5,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -139,9 +145,9 @@ int main() { strcpy(answer,salt); strcat(answer,"rISCgZzpwk3UhDidwXvin0"); encrypted = crypt("rasmuslerdorf",salt); - exit(!encrypted || strcmp(encrypted,answer)); + return !encrypted || strcmp(encrypted,answer); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_md5=yes @@ -153,6 +159,8 @@ int main() { AC_CACHE_CHECK(for Blowfish crypt, ac_cv_crypt_blowfish,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -174,9 +182,9 @@ int main() { strcpy(answer,salt); strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra"); encrypted = crypt("rasmuslerdorf",salt); - exit(!encrypted || strcmp(encrypted,answer)); + return !encrypted || strcmp(encrypted,answer); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_blowfish=yes @@ -188,6 +196,8 @@ int main() { AC_CACHE_CHECK(for SHA512 crypt, ac_cv_crypt_sha512,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -208,9 +218,9 @@ int main() { strcpy(answer, salt); strcat(answer, "EeHCRjm0bljalWuALHSTs1NB9ipEiLEXLhYeXdOpx22gmlmVejnVXFhd84cEKbYxCo.XuUTrW.RLraeEnsvWs/"); encrypted = crypt("rasmuslerdorf",salt); - exit(!encrypted || strcmp(encrypted,answer)); + return !encrypted || strcmp(encrypted,answer); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_sha512=yes @@ -222,6 +232,8 @@ int main() { AC_CACHE_CHECK(for SHA256 crypt, ac_cv_crypt_sha256,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include + #if HAVE_UNISTD_H #include #endif @@ -242,9 +254,9 @@ int main() { strcpy(answer, salt); strcat(answer, "cFAm2puLCujQ9t.0CxiFIIvFi4JyQx5UncCt/xRIX23"); encrypted = crypt("rasmuslerdorf",salt); - exit(!encrypted || strcmp(encrypted,answer)); + return !encrypted || strcmp(encrypted,answer); #else - exit(1); + return 1; #endif }]])],[ ac_cv_crypt_sha256=yes diff --git a/ext/standard/config.w32 b/ext/standard/config.w32 index d23bfd9db2617..3de43d04c067e 100644 --- a/ext/standard/config.w32 +++ b/ext/standard/config.w32 @@ -37,5 +37,6 @@ EXTENSION("standard", "array.c base64.c basic_functions.c browscap.c \ user_filters.c uuencode.c filters.c proc_open.c password.c \ streamsfuncs.c http.c flock_compat.c random.c hrtime.c", false /* never shared */, '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1'); +PHP_STANDARD = "yes"; ADD_MAKEFILE_FRAGMENT(); PHP_INSTALL_HEADERS("", "ext/standard"); diff --git a/ext/standard/dir.c b/ext/standard/dir.c index c1c264d1f0a8b..6807c534bacf0 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -530,7 +530,7 @@ PHP_FUNCTION(scandir) { char *dirn; size_t dirn_len; - zend_long flags = 0; + zend_long flags = PHP_SCANDIR_SORT_ASCENDING; zend_string **namelist; int n, i; zval *zcontext = NULL; diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index ac57c55efb4c8..d865d7e2f97ca 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -842,6 +842,11 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, php_stream_close(stream); stream = NULL; + if (transfer_encoding) { + php_stream_filter_free(transfer_encoding); + transfer_encoding = NULL; + } + if (location[0] != '\0') { char new_path[HTTP_HEADER_BLOCK_SIZE]; @@ -958,10 +963,6 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, if (transfer_encoding) { php_stream_filter_append(&stream->readfilters, transfer_encoding); } - } else { - if (transfer_encoding) { - php_stream_filter_free(transfer_encoding); - } } return stream; @@ -980,7 +981,7 @@ php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, const char *pa if (!Z_ISUNDEF(headers)) { if (FAILURE == zend_set_local_var_str( - "http_response_header", sizeof("http_response_header")-1, &headers, 1)) { + "http_response_header", sizeof("http_response_header")-1, &headers, 0)) { zval_ptr_dtor(&headers); } } diff --git a/ext/standard/levenshtein.c b/ext/standard/levenshtein.c index 181674f4d2875..452b2010bc93b 100644 --- a/ext/standard/levenshtein.c +++ b/ext/standard/levenshtein.c @@ -17,8 +17,6 @@ #include "php.h" #include "php_string.h" -#define LEVENSHTEIN_MAX_LENGTH 255 - /* {{{ reference_levdist * reference implementation, only optimized for memory usage, not speed */ static zend_long reference_levdist(const zend_string *string1, const zend_string *string2, zend_long cost_ins, zend_long cost_rep, zend_long cost_del ) @@ -75,24 +73,12 @@ PHP_FUNCTION(levenshtein) zend_long cost_ins = 1; zend_long cost_rep = 1; zend_long cost_del = 1; - zend_long distance = 0; if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|lll", &string1, &string2, &cost_ins, &cost_rep, &cost_del) == FAILURE) { RETURN_THROWS(); } - if (ZSTR_LEN(string1) > LEVENSHTEIN_MAX_LENGTH) { - zend_argument_value_error(1, "must be less than %d characters", LEVENSHTEIN_MAX_LENGTH + 1); - RETURN_THROWS(); - } - - if (ZSTR_LEN(string2) > LEVENSHTEIN_MAX_LENGTH) { - zend_argument_value_error(2, "must be less than %d characters", LEVENSHTEIN_MAX_LENGTH + 1); - RETURN_THROWS(); - } - - distance = reference_levdist(string1, string2, cost_ins, cost_rep, cost_del); - RETURN_LONG(distance); + RETURN_LONG(reference_levdist(string1, string2, cost_ins, cost_rep, cost_del)); } /* }}} */ diff --git a/ext/standard/mail.c b/ext/standard/mail.c index 3080a3957bb9c..4dfbfb03d00a3 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -371,7 +371,7 @@ void php_mail_log_to_syslog(char *message) { void php_mail_log_to_file(char *filename, char *message, size_t message_size) { /* Write 'message' to the given file. */ - uint32_t flags = IGNORE_URL_WIN | REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR; + uint32_t flags = REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR; php_stream *stream = php_stream_open_wrapper(filename, "a", flags, NULL); if (stream) { php_stream_write(stream, message, message_size); diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h index 1df941ee00949..3f764c18a6f79 100644 --- a/ext/standard/php_http.h +++ b/ext/standard/php_http.h @@ -25,6 +25,5 @@ PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr, const char *key_prefix, size_t key_prefix_len, const char *key_suffix, size_t key_suffix_len, zval *type, const char *arg_sep, int enc_type); -#define php_url_encode_hash(ht, formstr) php_url_encode_hash_ex((ht), (formstr), NULL, 0, NULL, 0, NULL, 0, NULL) #endif diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c index 6d0e74af1d045..03b55c3eac06a 100644 --- a/ext/standard/proc_open.c +++ b/ext/standard/proc_open.c @@ -56,6 +56,8 @@ # include # endif extern int openpty(int *, int *, char *, struct termios *, struct winsize *); +# elif defined(__sun) +# include # else /* Mac OS X (and some BSDs) define `openpty` in */ # include @@ -66,7 +68,7 @@ extern int openpty(int *, int *, char *, struct termios *, struct winsize *); # include # define HAVE_OPENPTY 1 -/* Solaris/Illumos does not have any openpty implementation */ +/* Solaris before version 11.4 and Illumos do not have any openpty implementation */ int openpty(int *master, int *slave, char *name, struct termios *termp, struct winsize *winp) { int fd, sd; diff --git a/ext/standard/string.c b/ext/standard/string.c index 06222303bd37c..addc2361245b5 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -258,22 +258,25 @@ static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) / Z_PARAM_LONG_OR_NULL(len, len_is_null) ZEND_PARSE_PARAMETERS_END(); + size_t remain_len = ZSTR_LEN(s11); if (start < 0) { - start += (zend_long)ZSTR_LEN(s11); - } - if (start < 0 || (size_t)start > ZSTR_LEN(s11)) { - zend_argument_value_error(3, "must be contained in argument #1 ($str)"); - RETURN_THROWS(); + start += remain_len; + if (start < 0) { + start = 0; + } + } else if ((size_t) start > remain_len) { + start = remain_len; } - size_t remain_len = ZSTR_LEN(s11) - start; + remain_len -= start; if (!len_is_null) { if (len < 0) { len += remain_len; - } - if (len < 0 || (size_t)len > remain_len) { - zend_argument_value_error(4, "must be contained in argument #1 ($str)"); - RETURN_THROWS(); + if (len < 0) { + len = 0; + } + } else if ((size_t) len > remain_len) { + len = remain_len; } } else { len = remain_len; diff --git a/ext/standard/tests/assert/bug80290.phpt b/ext/standard/tests/assert/bug80290.phpt new file mode 100644 index 0000000000000..ef345fd19345a --- /dev/null +++ b/ext/standard/tests/assert/bug80290.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #80290: Double free when ASSERT_CALLBACK is used with a dynamic message +--FILE-- + +--EXPECTF-- +string(18) "Dynamic message: x" + +Fatal error: Uncaught AssertionError: Dynamic message: x in %s:%d +Stack trace: +#0 %s(%d): assert(false, 'Dynamic message...') +#1 {main} + thrown in %s on line %d diff --git a/ext/standard/tests/file/006_variation2.phpt b/ext/standard/tests/file/006_variation2.phpt index 72efa07032e99..6b32f2246f12d 100644 --- a/ext/standard/tests/file/006_variation2.phpt +++ b/ext/standard/tests/file/006_variation2.phpt @@ -137,15 +137,15 @@ bool(true) bool(true) 43567 -- Iteration 12 -- -chmod(): Argument #2 ($mode) must be of type int, string given -chmod(): Argument #2 ($mode) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given -- Iteration 13 -- -chmod(): Argument #2 ($mode) must be of type int, string given -chmod(): Argument #2 ($mode) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given -- Iteration 14 -- -chmod(): Argument #2 ($mode) must be of type int, string given -chmod(): Argument #2 ($mode) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given -- Iteration 15 -- -chmod(): Argument #2 ($mode) must be of type int, string given -chmod(): Argument #2 ($mode) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given +chmod(): Argument #2 ($permissions) must be of type int, string given *** Done *** diff --git a/ext/standard/tests/file/file_get_contents_error.phpt b/ext/standard/tests/file/file_get_contents_error.phpt index 8e29847d8cf27..12ddfc73f5787 100644 --- a/ext/standard/tests/file/file_get_contents_error.phpt +++ b/ext/standard/tests/file/file_get_contents_error.phpt @@ -47,6 +47,6 @@ if(file_exists($file_path."/file_put_contents1.tmp")) { Warning: file_get_contents(/no/such/file/or/dir): Failed to open stream: No such file or directory in %s on line %d -- Testing for invalid negative maxlen values -- -file_get_contents(): Argument #5 ($max_length) must be greater than or equal to 0 +file_get_contents(): Argument #5 ($length) must be greater than or equal to 0 *** Done *** diff --git a/ext/standard/tests/file/file_get_contents_error002.phpt b/ext/standard/tests/file/file_get_contents_error002.phpt index a58308d831b0d..d47efa26a1b97 100644 --- a/ext/standard/tests/file/file_get_contents_error002.phpt +++ b/ext/standard/tests/file/file_get_contents_error002.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -file_get_contents(): Argument #5 ($max_length) must be greater than or equal to 0 +file_get_contents(): Argument #5 ($length) must be greater than or equal to 0 diff --git a/ext/standard/tests/file/file_get_contents_file_put_contents_error.phpt b/ext/standard/tests/file/file_get_contents_file_put_contents_error.phpt index c41a826bf958f..9a576bd26c8e0 100644 --- a/ext/standard/tests/file/file_get_contents_file_put_contents_error.phpt +++ b/ext/standard/tests/file/file_get_contents_file_put_contents_error.phpt @@ -39,6 +39,6 @@ unlink($file_path."/file_put_contents1.tmp"); Warning: file_get_contents(/no/such/file/or/dir): Failed to open stream: No such file or directory in %s on line %d -- Testing for invalid negative maxlen values -- -file_get_contents(): Argument #5 ($max_length) must be greater than or equal to 0 +file_get_contents(): Argument #5 ($length) must be greater than or equal to 0 *** Done *** diff --git a/ext/standard/tests/file/realpath_bug77484.phpt b/ext/standard/tests/file/realpath_bug77484.phpt index 85595d09e3a55..9aa3a335c2a96 100644 --- a/ext/standard/tests/file/realpath_bug77484.phpt +++ b/ext/standard/tests/file/realpath_bug77484.phpt @@ -9,6 +9,10 @@ if (PHP_ZTS) { /* TODO eliminate difference in TS build. */ die("skip Not for ZTS"); } +if (getenv('SKIP_REPEAT')) { + /* The cwd is persistent across repeats */ + die("skip Not repeatable"); +} ?> --FILE-- --FILE-- +--INI-- +allow_url_fopen=1 +--FILE-- + $pid, 'uri' => $uri] = http_server($responses, $output); + +var_dump(file_get_contents($uri)); + +http_server_kill($pid); + +?> +--EXPECT-- +string(4) "1234" diff --git a/ext/standard/tests/streams/bug46024.phpt b/ext/standard/tests/streams/bug46024.phpt index 145e66c1bd5ca..5a712dcb6b92d 100644 --- a/ext/standard/tests/streams/bug46024.phpt +++ b/ext/standard/tests/streams/bug46024.phpt @@ -1,7 +1,12 @@ --TEST-- Bug #46024 stream_select() doesn't return the correct number --SKIPIF-- - + --FILE-- ---CONFLICTS-- -server --FILE-- --EXPECT-- string(2) "bc" -stream_get_contents(): Argument #2 ($max_length) must be greater than or equal to -1 +stream_get_contents(): Argument #2 ($length) must be greater than or equal to -1 diff --git a/ext/standard/tests/strings/bug40754.phpt b/ext/standard/tests/strings/bug40754.phpt index 42eed969abfdf..c2a563a7fd97a 100644 --- a/ext/standard/tests/strings/bug40754.phpt +++ b/ext/standard/tests/strings/bug40754.phpt @@ -7,18 +7,8 @@ $v = 2147483647; var_dump(substr("abcde", 1, $v)); var_dump(substr_replace("abcde", "x", $v, $v)); - -try { - var_dump(strspn("abcde", "abc", $v, $v)); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - var_dump(strcspn("abcde", "abc", $v, $v)); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; -} +var_dump(strspn("abcde", "abc", $v, $v)); +var_dump(strcspn("abcde", "abc", $v, $v)); try { var_dump(substr_count("abcde", "abc", $v, $v)); @@ -88,8 +78,8 @@ var_dump(substr("abcde", $v, $v)); --EXPECT-- string(4) "bcde" string(6) "abcdex" -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) substr_count(): Argument #3 ($offset) must be contained in argument #1 ($haystack) substr_compare(): Argument #3 ($offset) must be contained in argument #1 ($main_str) stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) diff --git a/ext/standard/tests/strings/levenshtein_error_conditions.phpt b/ext/standard/tests/strings/levenshtein_error_conditions.phpt index 71af71297f653..55e144b3b25b3 100644 --- a/ext/standard/tests/strings/levenshtein_error_conditions.phpt +++ b/ext/standard/tests/strings/levenshtein_error_conditions.phpt @@ -1,8 +1,10 @@ --TEST-- -levenshtein() error conditions +levenshtein() former error conditions --FILE-- getMessage(), "\n"; -} +var_dump(strcspn('a', 'B', 1, 2147483647)); ?> --EXPECT-- string(25) "22222222aaaa bbb1111 cccc" @@ -21,4 +17,4 @@ string(4) "1234" int(0) int(7) int(6) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) diff --git a/ext/standard/tests/strings/strcspn_variation11.phpt b/ext/standard/tests/strings/strcspn_variation11.phpt index 0ff3c614c3718..329e06fbeed0a 100644 --- a/ext/standard/tests/strings/strcspn_variation11.phpt +++ b/ext/standard/tests/strings/strcspn_variation11.phpt @@ -62,11 +62,7 @@ foreach($strings as $str) { echo "\n-- Iteration $count --\n"; foreach($mask_array as $mask) { foreach($start_array as $start) { - try { - var_dump( strcspn($str,$mask,$start) ); - } catch (ValueError $e) { - echo $e->getMessage(), "\n"; - } + var_dump( strcspn($str,$mask,$start) ); } } $count++; @@ -79,219 +75,219 @@ echo "Done" -- Iteration 1 -- int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 2 -- int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 3 -- int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(1) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(1) +int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(1) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(1) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(1) +int(0) +int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) -- Iteration 4 -- int(2) @@ -299,71 +295,71 @@ int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(0) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(0) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(0) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) -- Iteration 5 -- int(24) @@ -371,71 +367,71 @@ int(23) int(22) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(24) int(24) int(23) int(22) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(24) int(2) int(1) int(0) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(24) int(23) int(22) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(24) int(24) int(23) int(22) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(24) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) -- Iteration 6 -- int(28) @@ -443,71 +439,71 @@ int(27) int(26) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(28) int(28) int(27) int(26) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(28) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(28) int(27) int(26) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(28) int(5) int(4) int(3) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(28) int(27) int(26) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(28) int(5) int(4) int(3) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) -- Iteration 7 -- int(20) @@ -515,71 +511,71 @@ int(19) int(18) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(20) int(20) int(19) int(18) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(20) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(20) int(19) int(18) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(20) int(20) int(19) int(18) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(20) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) -- Iteration 8 -- int(21) @@ -587,71 +583,71 @@ int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) -- Iteration 9 -- int(5) @@ -659,71 +655,71 @@ int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(2) int(1) int(0) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(12) int(11) int(10) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(12) int(12) int(11) int(10) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(12) int(12) int(11) int(10) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(12) int(12) int(11) int(10) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(12) int(12) int(11) int(10) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(12) int(11) int(10) int(9) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) -- Iteration 10 -- int(16) @@ -731,71 +727,71 @@ int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(16) int(15) int(14) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(16) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) -- Iteration 11 -- int(0) @@ -803,71 +799,71 @@ int(0) int(0) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) -- Iteration 12 -- int(0) @@ -875,71 +871,71 @@ int(5) int(4) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(5) int(4) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(3) int(2) int(1) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(3) int(3) int(2) int(1) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(3) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) int(13) int(12) int(11) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(13) -- Iteration 13 -- int(0) @@ -947,71 +943,71 @@ int(12) int(11) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(12) int(11) int(0) int(1) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(3) int(2) int(1) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(3) int(3) int(2) int(1) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(3) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) -- Iteration 14 -- int(5) @@ -1019,71 +1015,71 @@ int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) -- Iteration 15 -- int(5) @@ -1091,71 +1087,71 @@ int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) int(11) int(10) int(9) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(11) -- Iteration 16 -- int(5) @@ -1163,71 +1159,71 @@ int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(14) int(13) int(12) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(14) int(6) int(5) int(4) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(6) -- Iteration 17 -- int(21) @@ -1235,69 +1231,69 @@ int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(2) int(1) int(0) int(1) int(0) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) int(21) int(20) int(19) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(21) int(5) int(4) int(3) int(1) int(2) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(5) Done diff --git a/ext/standard/tests/strings/strcspn_variation12.phpt b/ext/standard/tests/strings/strcspn_variation12.phpt index d43ff90599bf8..ea98840559b7e 100644 --- a/ext/standard/tests/strings/strcspn_variation12.phpt +++ b/ext/standard/tests/strings/strcspn_variation12.phpt @@ -63,11 +63,7 @@ foreach($strings as $str) { foreach($mask_array as $mask) { foreach($start_array as $start) { foreach($len_array as $len) { - try { - var_dump( strcspn($str,$mask,$start,$len) ); - } catch (ValueError $e) { - echo $e->getMessage(), "\n"; - } + var_dump( strcspn($str,$mask,$start,$len) ); } } } @@ -81,2399 +77,2399 @@ echo "Done" -- Iteration 1 -- int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 2 -- int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 3 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 3 -- +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 4 -- +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 5 -- +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(22) +int(23) +int(0) +int(0) +int(1) +int(2) +int(21) +int(22) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(22) +int(23) +int(0) +int(0) +int(1) +int(2) +int(21) +int(22) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(22) +int(23) +int(0) +int(0) +int(1) +int(2) +int(21) +int(22) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(23) +int(24) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) + +-- Iteration 6 -- +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(18) +int(19) +int(0) +int(0) +int(1) +int(2) +int(17) +int(18) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(18) +int(19) +int(0) +int(0) +int(1) +int(2) +int(17) +int(18) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(6) +int(6) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(6) +int(6) +int(0) +int(0) +int(1) +int(2) +int(16) +int(16) +int(0) +int(0) +int(1) +int(2) +int(15) +int(15) +int(0) +int(0) +int(1) +int(2) +int(14) +int(14) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(16) +int(16) +int(0) +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(18) +int(19) +int(0) +int(0) +int(1) +int(2) +int(17) +int(18) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(19) +int(20) +int(0) +int(0) +int(1) +int(2) +int(16) +int(16) +int(0) +int(0) +int(1) +int(2) +int(15) +int(15) +int(0) +int(0) +int(1) +int(2) +int(14) +int(14) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(16) +int(16) +int(0) + +-- Iteration 7 -- +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(5) +int(5) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(2) +int(11) +int(12) +int(0) +int(0) +int(1) +int(2) +int(10) +int(11) +int(0) +int(0) +int(1) +int(2) +int(9) +int(10) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(11) +int(12) +int(0) +int(0) +int(1) +int(2) +int(11) +int(12) +int(0) +int(0) +int(1) +int(2) +int(10) +int(11) +int(0) +int(0) +int(1) +int(2) +int(9) +int(10) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(11) +int(12) +int(0) +int(0) +int(1) +int(2) +int(11) +int(11) +int(0) +int(0) +int(1) +int(2) +int(10) +int(10) +int(0) +int(0) +int(1) +int(2) +int(9) +int(9) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(2) +int(11) +int(11) +int(0) --- Iteration 4 -- +-- Iteration 8 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) int(0) int(1) int(2) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(1) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(1) +int(2) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) int(0) +int(0) +int(1) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(1) +int(2) +int(0) + +-- Iteration 9 -- +int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 5 -- int(0) -int(1) -int(2) -int(23) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(22) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(5) +int(0) int(0) int(1) int(2) -int(21) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) +int(4) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(23) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(22) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(21) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(1) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(0) int(0) int(1) int(2) int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) -int(1) -int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(23) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(22) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(3) +int(3) +int(0) int(0) int(1) int(2) -int(21) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(2) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(1) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 6 -- +int(3) +int(0) int(0) int(1) int(2) -int(19) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) int(2) -int(18) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) +int(12) +int(0) int(0) int(1) int(2) -int(17) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(10) +int(11) +int(0) +int(0) +int(1) +int(1) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(19) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) int(2) -int(18) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) int(2) -int(17) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) +int(12) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(10) +int(11) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(6) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(12) +int(13) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(16) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) +int(12) +int(0) int(0) int(1) int(2) -int(15) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(10) +int(11) +int(0) int(0) int(1) -int(2) -int(14) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(19) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) + +-- Iteration 10 -- int(0) int(1) int(2) -int(18) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(5) +int(0) int(0) int(1) int(2) -int(17) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) +int(4) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(3) +int(3) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(16) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) int(1) -int(2) -int(15) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(14) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 7 -- +int(5) +int(5) +int(0) int(0) int(1) int(2) int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(0) int(0) int(1) int(2) int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) +int(0) int(0) int(1) int(2) int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(3) +int(0) +int(0) +int(1) +int(1) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) int(0) -int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(2) int(0) +int(0) +int(1) +int(1) +int(1) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(1) +int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) int(2) -int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) +int(10) int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) int(0) int(1) int(2) +int(9) int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) int(0) int(1) int(2) +int(8) int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(1) +int(1) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) +int(10) int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) int(0) int(1) int(2) int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) +int(0) int(0) int(1) int(2) int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 8 -- -int(0) -int(0) +int(10) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(8) +int(9) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(10) +int(11) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(10) +int(11) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(9) +int(10) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(8) +int(9) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) -int(2) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(10) +int(11) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) + +-- Iteration 11 -- int(0) int(1) int(2) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(5) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) +int(2) +int(4) +int(4) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(3) +int(3) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) -int(2) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 9 -- int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -int(0) +int(5) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(0) int(0) int(1) int(2) int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(3) int(0) -int(1) -int(2) -int(2) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(1) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -int(2) -int(12) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(12) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(5) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(12) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 10 -- int(0) -int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) int(1) -int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(1) +int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) int(2) -int(8) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) int(0) -int(1) -int(2) -int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(8) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) +int(12) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(11) int(0) -int(1) -int(2) -int(9) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(8) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 11 -- -int(0) int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) -int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) int(2) -int(3) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(12) +int(13) +int(0) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(2) +int(11) +int(12) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(2) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(10) +int(11) +int(0) int(0) int(1) int(1) +int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) int(0) int(1) int(2) int(12) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(13) int(0) -int(1) -int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(6) +int(6) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(1) int(2) -int(12) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(5) +int(5) +int(0) int(0) int(1) int(2) -int(11) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(4) +int(4) +int(0) int(0) int(1) -int(2) -int(10) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(1) int(0) int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(6) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(5) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(1) int(2) -int(4) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(1) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strcspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(6) +int(6) +int(0) Done diff --git a/ext/standard/tests/strings/strspn_variation11.phpt b/ext/standard/tests/strings/strspn_variation11.phpt index c66e86b7f570c..856ba2b8d7dca 100644 --- a/ext/standard/tests/strings/strspn_variation11.phpt +++ b/ext/standard/tests/strings/strspn_variation11.phpt @@ -62,11 +62,7 @@ foreach($strings as $str) { echo "\n-- Iteration $count --\n"; foreach($mask_array as $mask) { foreach($start_array as $start) { - try { - var_dump( strspn($str,$mask,$start) ); - } catch (ValueError $e) { - echo $e->getMessage(), "\n"; - } + var_dump( strspn($str,$mask,$start) ); } } $count++; @@ -79,219 +75,219 @@ echo "Done" -- Iteration 1 -- int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 2 -- int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 3 -- int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(1) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(1) +int(0) +int(0) +int(1) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -- Iteration 4 -- int(0) @@ -299,71 +295,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(1) int(0) int(0) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(1) int(2) int(1) int(0) int(1) int(2) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(2) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(1) int(0) int(0) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(1) int(1) int(0) int(0) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) int(1) +int(1) +int(0) int(0) int(0) +int(1) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(1) int(0) int(0) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(1) -- Iteration 5 -- int(0) @@ -371,71 +367,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 6 -- int(0) @@ -443,71 +439,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(1) int(2) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(0) int(0) int(0) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 7 -- int(0) @@ -515,71 +511,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 8 -- int(0) @@ -587,71 +583,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 9 -- int(0) @@ -659,71 +655,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(1) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 10 -- int(0) @@ -731,71 +727,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 11 -- int(0) @@ -803,71 +799,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) -- Iteration 12 -- int(0) @@ -875,71 +871,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) -- Iteration 13 -- int(0) @@ -947,71 +943,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(0) int(4) int(3) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) -- Iteration 14 -- int(0) @@ -1019,71 +1015,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 15 -- int(0) @@ -1091,71 +1087,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 16 -- int(0) @@ -1163,71 +1159,71 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) -- Iteration 17 -- int(0) @@ -1235,69 +1231,69 @@ int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) +int(0) +int(0) int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(4) int(3) int(2) int(0) int(1) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(4) Done diff --git a/ext/standard/tests/strings/strspn_variation12.phpt b/ext/standard/tests/strings/strspn_variation12.phpt index a43b85a696760..1fb096b3c07d2 100644 --- a/ext/standard/tests/strings/strspn_variation12.phpt +++ b/ext/standard/tests/strings/strspn_variation12.phpt @@ -63,11 +63,7 @@ foreach($strings as $str) { foreach($mask_array as $mask) { foreach($start_array as $start) { foreach($len_array as $len) { - try { - var_dump( strspn($str,$mask,$start,$len) ); - } catch (ValueError $e) { - echo $e->getMessage(), "\n"; - } + var_dump( strspn($str,$mask,$start,$len) ); } } } @@ -81,2795 +77,2795 @@ echo "Done" -- Iteration 1 -- int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 2 -- int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 3 -- int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 4 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(1) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(1) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(1) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 5 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 6 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 7 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) + +-- Iteration 2 -- int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 8 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 9 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 10 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) - --- Iteration 11 -- int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) + +-- Iteration 3 -- +int(0) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(4) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(3) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -int(1) -int(2) -int(2) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) int(0) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #4 ($length) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) -strspn(): Argument #3 ($offset) must be contained in argument #1 ($str) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) + +-- Iteration 4 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(1) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(1) +int(1) +int(1) +int(0) + +-- Iteration 5 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) + +-- Iteration 6 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 7 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(1) +int(1) +int(0) +int(1) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) + +-- Iteration 8 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 9 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) + +-- Iteration 10 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) + +-- Iteration 11 -- +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) +int(0) +int(1) +int(2) +int(3) +int(3) +int(0) +int(0) +int(1) +int(2) +int(2) +int(2) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(0) +int(1) +int(2) +int(4) +int(4) +int(0) Done diff --git a/ext/standard/tests/url/get_headers_error_003.phpt b/ext/standard/tests/url/get_headers_error_003.phpt index a8edc2cb21bf1..7ee0b9e210d6a 100644 --- a/ext/standard/tests/url/get_headers_error_003.phpt +++ b/ext/standard/tests/url/get_headers_error_003.phpt @@ -1,7 +1,5 @@ --TEST-- Test get_headers() function : test with context ---CONFLICTS-- -server --FILE-- https://example.com:0/: array(3) { +--> https://example.com:0/: array(4) { ["scheme"]=> string(5) "https" ["host"]=> string(11) "example.com" + ["port"]=> + int(0) ["path"]=> string(1) "/" } diff --git a/ext/standard/tests/url/parse_url_basic_004.phpt b/ext/standard/tests/url/parse_url_basic_004.phpt index 4bc6adc1b9af9..c1c905185524f 100644 --- a/ext/standard/tests/url/parse_url_basic_004.phpt +++ b/ext/standard/tests/url/parse_url_basic_004.phpt @@ -106,7 +106,7 @@ echo "Done"; --> / : NULL --> /rest/Users?filter={"id":"123"} : NULL --> %:x : NULL ---> https://example.com:0/ : NULL +--> https://example.com:0/ : int(0) --> http:///blah.com : bool(false) --> http://:80 : bool(false) --> http://user@:80 : bool(false) diff --git a/ext/standard/tests/url/parse_url_unterminated.phpt b/ext/standard/tests/url/parse_url_unterminated.phpt index 9ab0c887c8d60..7c9150a513d96 100644 --- a/ext/standard/tests/url/parse_url_unterminated.phpt +++ b/ext/standard/tests/url/parse_url_unterminated.phpt @@ -881,11 +881,13 @@ echo "Done"; string(3) "%:x" } ---> https://example.com:0/: array(3) { +--> https://example.com:0/: array(4) { ["scheme"]=> string(5) "https" ["host"]=> string(11) "example.com" + ["port"]=> + int(0) ["path"]=> string(1) "/" } diff --git a/ext/standard/url.c b/ext/standard/url.c index b24fe8ecf8d0c..a33091a86b751 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -94,11 +94,20 @@ static const char *binary_strcspn(const char *s, const char *e, const char *char /* {{{ php_url_parse */ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length) +{ + zend_bool has_port; + return php_url_parse_ex2(str, length, &has_port); +} + +/* {{{ php_url_parse_ex2 + */ +PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has_port) { char port_buf[6]; php_url *ret = ecalloc(1, sizeof(php_url)); char const *s, *e, *p, *pp, *ue; + *has_port = 0; s = str; ue = s + length; @@ -188,6 +197,7 @@ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length) port_buf[pp - p] = '\0'; port = ZEND_STRTOL(port_buf, &end, 10); if (port >= 0 && port <= 65535 && end != port_buf) { + *has_port = 1; ret->port = (unsigned short) port; if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */ s += 2; @@ -253,6 +263,7 @@ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length) port_buf[e - p] = '\0'; port = ZEND_STRTOL(port_buf, &end, 10); if (port >= 0 && port <= 65535 && end != port_buf) { + *has_port = 1; ret->port = (unsigned short)port; } else { php_url_free(ret); @@ -324,6 +335,7 @@ PHP_FUNCTION(parse_url) php_url *resource; zend_long key = -1; zval tmp; + zend_bool has_port; ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STRING(str, str_len) @@ -331,7 +343,7 @@ PHP_FUNCTION(parse_url) Z_PARAM_LONG(key) ZEND_PARSE_PARAMETERS_END(); - resource = php_url_parse_ex(str, str_len); + resource = php_url_parse_ex2(str, str_len, &has_port); if (resource == NULL) { /* @todo Find a method to determine why php_url_parse_ex() failed */ RETURN_FALSE; @@ -346,7 +358,7 @@ PHP_FUNCTION(parse_url) if (resource->host != NULL) RETVAL_STR_COPY(resource->host); break; case PHP_URL_PORT: - if (resource->port != 0) RETVAL_LONG(resource->port); + if (has_port) RETVAL_LONG(resource->port); break; case PHP_URL_USER: if (resource->user != NULL) RETVAL_STR_COPY(resource->user); @@ -382,7 +394,7 @@ PHP_FUNCTION(parse_url) ZVAL_STR_COPY(&tmp, resource->host); zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp); } - if (resource->port != 0) { + if (has_port) { ZVAL_LONG(&tmp, resource->port); zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp); } @@ -671,14 +683,14 @@ PHP_FUNCTION(get_headers) size_t url_len; php_stream *stream; zval *prev_val, *hdr = NULL; - zend_long format = 0; + zend_bool format = 0; zval *zcontext = NULL; php_stream_context *context; ZEND_PARSE_PARAMETERS_START(1, 3) Z_PARAM_PATH(url, url_len) Z_PARAM_OPTIONAL - Z_PARAM_LONG(format) + Z_PARAM_BOOL(format) Z_PARAM_RESOURCE_OR_NULL(zcontext) ZEND_PARSE_PARAMETERS_END(); diff --git a/ext/standard/url.h b/ext/standard/url.h index 02ebeed2bb9dc..a751aa4ee1169 100644 --- a/ext/standard/url.h +++ b/ext/standard/url.h @@ -31,6 +31,7 @@ typedef struct php_url { PHPAPI void php_url_free(php_url *theurl); PHPAPI php_url *php_url_parse(char const *str); PHPAPI php_url *php_url_parse_ex(char const *str, size_t length); +PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has_port); PHPAPI size_t php_url_decode(char *str, size_t len); /* return value: length of decoded string */ PHPAPI size_t php_raw_url_decode(char *str, size_t len); /* return value: length of decoded string */ PHPAPI zend_string *php_url_encode(char const *s, size_t len); diff --git a/ext/tidy/tests/021.phpt b/ext/tidy/tests/021.phpt index 87a4582343bd6..2c946b87c669e 100644 --- a/ext/tidy/tests/021.phpt +++ b/ext/tidy/tests/021.phpt @@ -16,6 +16,6 @@ var_dump($t->getOptDoc('ncr')); var_dump(strlen(tidy_get_opt_doc($t, 'wrap')) > 99); ?> --EXPECT-- -tidy_get_opt_doc(): Argument #2 ($optname) is an invalid configuration option, "some_bogus_cfg" given +tidy_get_opt_doc(): Argument #2 ($option) is an invalid configuration option, "some_bogus_cfg" given string(73) "This option specifies if Tidy should allow numeric character references. " bool(true) diff --git a/ext/tidy/tests/bug77040.phpt b/ext/tidy/tests/bug77040.phpt new file mode 100644 index 0000000000000..a1af00bdfb70f --- /dev/null +++ b/ext/tidy/tests/bug77040.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #77040 (tidyNode::isHtml() is completely broken) +--SKIPIF-- + +--FILE-- +parseString("

text

"); +$p = $tidy->body()->child[0]; +var_dump($p->type === TIDY_NODETYPE_START); +var_dump($p->isHtml()); +$text = $p->child[0]; +var_dump($text->type === TIDY_NODETYPE_TEXT); +var_dump($text->isHtml()); +$cdata = $tidy->body()->child[1]->child[0]; +var_dump($cdata->type === TIDY_NODETYPE_CDATA); +var_dump($cdata->isHtml()); +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(false) +bool(true) +bool(false) \ No newline at end of file diff --git a/ext/tidy/tests/uninitialized.phpt b/ext/tidy/tests/uninitialized.phpt new file mode 100644 index 0000000000000..3533f0d3453d8 --- /dev/null +++ b/ext/tidy/tests/uninitialized.phpt @@ -0,0 +1,29 @@ +--TEST-- +Operations on uninitialized tidy object +--SKIPIF-- + +--FILE-- +getHtmlVer()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump($tidy->isXhtml()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump($tidy->isXml()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +tidy object is not initialized +tidy object is not initialized +tidy object is not initialized diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c index 58d398b0062f3..8d87bb980c19f 100644 --- a/ext/tidy/tidy.c +++ b/ext/tidy/tidy.c @@ -59,6 +59,13 @@ } \ obj = Z_TIDY_P(object); \ +#define TIDY_FETCH_INITIALIZED_OBJECT \ + TIDY_FETCH_OBJECT; \ + if (!obj->ptdoc->initialized) { \ + zend_throw_error(NULL, "tidy object is not initialized"); \ + return; \ + } + #define TIDY_FETCH_ONLY_OBJECT \ PHPTidyObj *obj; \ TIDY_SET_CONTEXT; \ @@ -1229,7 +1236,7 @@ PHP_FUNCTION(tidy_get_status) /* {{{ Get the Detected HTML version for the specified document. */ PHP_FUNCTION(tidy_get_html_ver) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc)); } @@ -1238,7 +1245,7 @@ PHP_FUNCTION(tidy_get_html_ver) /* {{{ Indicates if the document is a XHTML document. */ PHP_FUNCTION(tidy_is_xhtml) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_BOOL(tidyDetectedXhtml(obj->ptdoc->doc)); } @@ -1247,7 +1254,7 @@ PHP_FUNCTION(tidy_is_xhtml) /* {{{ Indicates if the document is a generic (non HTML/XHTML) XML document. */ PHP_FUNCTION(tidy_is_xml) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc)); } @@ -1525,11 +1532,14 @@ PHP_METHOD(tidyNode, isHtml) { TIDY_FETCH_ONLY_OBJECT; - if (tidyNodeGetType(obj->node) & (TidyNode_Start | TidyNode_End | TidyNode_StartEnd)) { - RETURN_TRUE; + switch (tidyNodeGetType(obj->node)) { + case TidyNode_Start: + case TidyNode_End: + case TidyNode_StartEnd: + RETURN_TRUE; + default: + RETURN_FALSE; } - - RETURN_FALSE; } /* }}} */ diff --git a/ext/tidy/tidy.stub.php b/ext/tidy/tidy.stub.php index 4ae1b5e000c3e..8b55c6b148dea 100644 --- a/ext/tidy/tidy.stub.php +++ b/ext/tidy/tidy.stub.php @@ -2,59 +2,59 @@ /** @generate-function-entries */ -function tidy_parse_string(string $input, array|string|null $config_options = null, ?string $encoding = null): tidy|false {} +function tidy_parse_string(string $string, array|string|null $config = null, ?string $encoding = null): tidy|false {} -function tidy_get_error_buffer(tidy $object): string|false {} +function tidy_get_error_buffer(tidy $tidy): string|false {} -function tidy_get_output(tidy $object): string {} +function tidy_get_output(tidy $tidy): string {} -function tidy_parse_file(string $file, array|string|null $config_options = null, ?string $encoding = null, bool $use_include_path = false): tidy|false {} +function tidy_parse_file(string $filename, array|string|null $config = null, ?string $encoding = null, bool $useIncludePath = false): tidy|false {} -function tidy_clean_repair(tidy $object): bool {} +function tidy_clean_repair(tidy $tidy): bool {} -function tidy_repair_string(string $data, array|string|null $config_options = null, ?string $encoding = null): string|false {} +function tidy_repair_string(string $string, array|string|null $config = null, ?string $encoding = null): string|false {} -function tidy_repair_file(string $filename, array|string|null $config_options = null, ?string $encoding = null, bool $use_include_path = false): string|false {} +function tidy_repair_file(string $filename, array|string|null $config = null, ?string $encoding = null, bool $useIncludePath = false): string|false {} -function tidy_diagnose(tidy $object): bool {} +function tidy_diagnose(tidy $tidy): bool {} function tidy_get_release(): string {} #ifdef HAVE_TIDYOPTGETDOC -function tidy_get_opt_doc(tidy $object, string $optname): string|false {} +function tidy_get_opt_doc(tidy $tidy, string $option): string|false {} #endif -function tidy_get_config(tidy $object): array {} +function tidy_get_config(tidy $tidy): array {} -function tidy_get_status(tidy $object): int {} +function tidy_get_status(tidy $tidy): int {} -function tidy_get_html_ver(tidy $object): int {} +function tidy_get_html_ver(tidy $tidy): int {} -function tidy_is_xhtml(tidy $object): bool {} +function tidy_is_xhtml(tidy $tidy): bool {} -function tidy_is_xml(tidy $object): bool {} +function tidy_is_xml(tidy $tidy): bool {} -function tidy_error_count(tidy $object): int {} +function tidy_error_count(tidy $tidy): int {} -function tidy_warning_count(tidy $object): int {} +function tidy_warning_count(tidy $tidy): int {} -function tidy_access_count(tidy $object): int {} +function tidy_access_count(tidy $tidy): int {} -function tidy_config_count(tidy $object): int {} +function tidy_config_count(tidy $tidy): int {} -function tidy_getopt(tidy $object, string $option): string|int|bool {} +function tidy_getopt(tidy $tidy, string $option): string|int|bool {} -function tidy_get_root(tidy $object): ?tidyNode {} +function tidy_get_root(tidy $tidy): ?tidyNode {} -function tidy_get_html(tidy $object): ?tidyNode {} +function tidy_get_html(tidy $tidy): ?tidyNode {} -function tidy_get_head(tidy $object): ?tidyNode {} +function tidy_get_head(tidy $tidy): ?tidyNode {} function tidy_get_body(tidy $tidy): ?tidyNode {} class tidy { - public function __construct(?string $filename = null, array|string|null $config_options = null, ?string $encoding = null, bool $use_include_path = false) {} + public function __construct(?string $filename = null, array|string|null $config = null, ?string $encoding = null, bool $useIncludePath = false) {} /** * @return string|int|bool @@ -69,22 +69,22 @@ public function getOpt(string $option) {} public function cleanRepair() {} /** @return bool */ - public function parseFile(string $file, array|string|null $config_options = null, ?string $encoding = null, bool $use_include_path = false) {} + public function parseFile(string $filename, array|string|null $config = null, ?string $encoding = null, bool $useIncludePath = false) {} /** @return bool */ - public function parseString(string $input, array|string|null $config_options = null, ?string $encoding = null) {} + public function parseString(string $string, array|string|null $config = null, ?string $encoding = null) {} /** * @return bool * @alias tidy_repair_string */ - public function repairString(string $data, array|string|null $config_options = null, ?string $encoding = null) {} + public static function repairString(string $string, array|string|null $config = null, ?string $encoding = null) {} /** * @return bool * @alias tidy_repair_file */ - public function repairFile(string $filename, array|string|null $config_options = null, ?string $encoding = null, bool $use_include_path = false) {} + public static function repairFile(string $filename, array|string|null $config = null, ?string $encoding = null, bool $useIncludePath = false) {} /** * @return bool @@ -121,7 +121,7 @@ public function getHtmlVer() {} * @return string|false * @alias tidy_get_opt_doc */ - public function getOptDoc(string $optname) {} + public function getOptDoc(string $option) {} #endif /** diff --git a/ext/tidy/tidy_arginfo.h b/ext/tidy/tidy_arginfo.h index ae3617a88f516..fc56a7f5cfc9c 100644 --- a/ext/tidy/tidy_arginfo.h +++ b/ext/tidy/tidy_arginfo.h @@ -1,42 +1,42 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 62b1cdb7f9b9a5641d3bd9248f5a73c30266d02e */ + * Stub hash: 4042c33d3ea3f5fb87cfb696488f6280b6ec7e7f */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_tidy_parse_string, 0, 1, tidy, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tidy_get_error_buffer, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_tidy_get_output, 0, 1, IS_STRING, 0) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_tidy_parse_file, 0, 1, tidy, MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_tidy_clean_repair, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tidy_repair_string, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tidy_repair_file, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_tidy_diagnose arginfo_tidy_clean_repair @@ -46,17 +46,17 @@ ZEND_END_ARG_INFO() #if defined(HAVE_TIDYOPTGETDOC) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tidy_get_opt_doc, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) - ZEND_ARG_TYPE_INFO(0, optname, IS_STRING, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_tidy_get_config, 0, 1, IS_ARRAY, 0) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_tidy_get_status, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() #define arginfo_tidy_get_html_ver arginfo_tidy_get_status @@ -74,27 +74,25 @@ ZEND_END_ARG_INFO() #define arginfo_tidy_config_count arginfo_tidy_get_status ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tidy_getopt, 0, 2, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_BOOL) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_tidy_get_root, 0, 1, tidyNode, 1) - ZEND_ARG_OBJ_INFO(0, object, tidy, 0) + ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) ZEND_END_ARG_INFO() #define arginfo_tidy_get_html arginfo_tidy_get_root #define arginfo_tidy_get_head arginfo_tidy_get_root -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_tidy_get_body, 0, 1, tidyNode, 1) - ZEND_ARG_OBJ_INFO(0, tidy, tidy, 0) -ZEND_END_ARG_INFO() +#define arginfo_tidy_get_body arginfo_tidy_get_root ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 1, "null") - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_getOpt, 0, 0, 1) @@ -105,30 +103,21 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_cleanRepair, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_parseFile, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_parseString, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_MASK(0, config, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_repairString, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") -ZEND_END_ARG_INFO() +#define arginfo_class_tidy_repairString arginfo_class_tidy_parseString -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_repairFile, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) - ZEND_ARG_TYPE_MASK(0, config_options, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false") -ZEND_END_ARG_INFO() +#define arginfo_class_tidy_repairFile arginfo_class_tidy_parseFile #define arginfo_class_tidy_diagnose arginfo_class_tidy_cleanRepair @@ -142,7 +131,7 @@ ZEND_END_ARG_INFO() #if defined(HAVE_TIDYOPTGETDOC) ZEND_BEGIN_ARG_INFO_EX(arginfo_class_tidy_getOptDoc, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, optname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0) ZEND_END_ARG_INFO() #endif @@ -259,8 +248,8 @@ static const zend_function_entry class_tidy_methods[] = { ZEND_ME_MAPPING(cleanRepair, tidy_clean_repair, arginfo_class_tidy_cleanRepair, ZEND_ACC_PUBLIC) ZEND_ME(tidy, parseFile, arginfo_class_tidy_parseFile, ZEND_ACC_PUBLIC) ZEND_ME(tidy, parseString, arginfo_class_tidy_parseString, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(repairString, tidy_repair_string, arginfo_class_tidy_repairString, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(repairFile, tidy_repair_file, arginfo_class_tidy_repairFile, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(repairString, tidy_repair_string, arginfo_class_tidy_repairString, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + ZEND_ME_MAPPING(repairFile, tidy_repair_file, arginfo_class_tidy_repairFile, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME_MAPPING(diagnose, tidy_diagnose, arginfo_class_tidy_diagnose, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(getRelease, tidy_get_release, arginfo_class_tidy_getRelease, ZEND_ACC_PUBLIC) ZEND_ME_MAPPING(getConfig, tidy_get_config, arginfo_class_tidy_getConfig, ZEND_ACC_PUBLIC) diff --git a/ext/tokenizer/tests/PhpToken_extension.phpt b/ext/tokenizer/tests/PhpToken_extension.phpt index ef1a4f12722cf..b41843c0604c0 100644 --- a/ext/tokenizer/tests/PhpToken_extension.phpt +++ b/ext/tokenizer/tests/PhpToken_extension.phpt @@ -20,7 +20,7 @@ class MyPhpToken extends PhpToken { } } -foreach (MyPhpToken::getAll($code) as $token) { +foreach (MyPhpToken::tokenize($code) as $token) { echo $token->getLoweredText(); if ($token->extra !== 123) { diff --git a/ext/tokenizer/tests/PhpToken_extension_errors.phpt b/ext/tokenizer/tests/PhpToken_extension_errors.phpt index d2bee1bc8f440..72164f398cb1b 100644 --- a/ext/tokenizer/tests/PhpToken_extension_errors.phpt +++ b/ext/tokenizer/tests/PhpToken_extension_errors.phpt @@ -10,7 +10,7 @@ class MyPhpToken1 extends PhpToken { } try { - var_dump(MyPhpToken1::getAll("getMessage(), "\n"; } @@ -19,7 +19,7 @@ abstract class MyPhpToken2 extends PhpToken { } try { - var_dump(MyPhpToken2::getAll("getMessage(), "\n"; } diff --git a/ext/tokenizer/tests/PhpToken_methods.phpt b/ext/tokenizer/tests/PhpToken_methods.phpt index 570e880473720..269fdf527776b 100644 --- a/ext/tokenizer/tests/PhpToken_methods.phpt +++ b/ext/tokenizer/tests/PhpToken_methods.phpt @@ -15,7 +15,7 @@ function foo() { PHP; // Token names and ignorability. -$tokens = PhpToken::getAll($code); +$tokens = PhpToken::tokenize($code); foreach ($tokens as $i => $token) { printf("[%2d] %-26s %s\n", $i, $token->getTokenName(), $token->isIgnorable() ? "ignorable" : "meaningful"); diff --git a/ext/tokenizer/tests/PhpToken_toString.phpt b/ext/tokenizer/tests/PhpToken_toString.phpt index 17dbfa84a7c11..f4b9e8b118674 100644 --- a/ext/tokenizer/tests/PhpToken_toString.phpt +++ b/ext/tokenizer/tests/PhpToken_toString.phpt @@ -3,7 +3,7 @@ PhpToken implements __toString() --FILE-- --FILE-- @@ -11,8 +11,8 @@ function foo() { echo "bar"; } PHP; -var_dump(PhpToken::getAll($code)); -var_dump(PhpToken::getAll($code, TOKEN_PARSE)); +var_dump(PhpToken::tokenize($code)); +var_dump(PhpToken::tokenize($code, TOKEN_PARSE)); ?> --EXPECTF-- diff --git a/ext/tokenizer/tests/bug77966.phpt b/ext/tokenizer/tests/bug77966.phpt index 142cc7c9aba6b..db2ed83738cf5 100644 --- a/ext/tokenizer/tests/bug77966.phpt +++ b/ext/tokenizer/tests/bug77966.phpt @@ -12,7 +12,7 @@ class C { } CODE; -$tokens = PhpToken::getAll($code, TOKEN_PARSE); +$tokens = PhpToken::tokenize($code, TOKEN_PARSE); foreach ($tokens as $token) { echo "{$token->getTokenName()}: \"$token->text\"\n"; } diff --git a/ext/tokenizer/tests/namespaced_names.phpt b/ext/tokenizer/tests/namespaced_names.phpt index 34e947b3525e1..651524b8e4ce5 100644 --- a/ext/tokenizer/tests/namespaced_names.phpt +++ b/ext/tokenizer/tests/namespaced_names.phpt @@ -12,7 +12,7 @@ namespace\Foo Foo \ Bar CODE; -foreach (PhpToken::getAll($code) as $token) { +foreach (PhpToken::tokenize($code) as $token) { echo "{$token->getTokenName()}: \"$token->text\"\n"; } diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index d12b5edba8ded..7567a270afc94 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -92,7 +92,7 @@ static zend_string *php_token_get_text(zval *obj) { static zend_bool tokenize_common( zval *return_value, zend_string *source, zend_long flags, zend_class_entry *token_class); -PHP_METHOD(PhpToken, getAll) +PHP_METHOD(PhpToken, tokenize) { zend_string *source; zend_long flags = 0; diff --git a/ext/tokenizer/tokenizer.stub.php b/ext/tokenizer/tokenizer.stub.php index a3a4246a1af6a..c329ef49322a0 100644 --- a/ext/tokenizer/tokenizer.stub.php +++ b/ext/tokenizer/tokenizer.stub.php @@ -9,7 +9,7 @@ function token_name(int $id): string {} class PhpToken implements Stringable { /** @return static[] */ - public static function getAll(string $code, int $flags = 0): array {} + public static function tokenize(string $code, int $flags = 0): array {} final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) {} diff --git a/ext/tokenizer/tokenizer_arginfo.h b/ext/tokenizer/tokenizer_arginfo.h index 8bf694074e2e1..01d37d406e0b8 100644 --- a/ext/tokenizer/tokenizer_arginfo.h +++ b/ext/tokenizer/tokenizer_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: ef39f4efec05a3ebc5cf56a6b26e01369f00d129 */ + * Stub hash: a06da9ea0191ed78ee7af8f0d9eaccb17dfa4b20 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_token_get_all, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, code, IS_STRING, 0) @@ -10,7 +10,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_token_name, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, id, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_class_PhpToken_getAll arginfo_token_get_all +#define arginfo_class_PhpToken_tokenize arginfo_token_get_all ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PhpToken___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, id, IS_LONG, 0) @@ -35,7 +35,7 @@ ZEND_END_ARG_INFO() ZEND_FUNCTION(token_get_all); ZEND_FUNCTION(token_name); -ZEND_METHOD(PhpToken, getAll); +ZEND_METHOD(PhpToken, tokenize); ZEND_METHOD(PhpToken, __construct); ZEND_METHOD(PhpToken, is); ZEND_METHOD(PhpToken, isIgnorable); @@ -51,7 +51,7 @@ static const zend_function_entry ext_functions[] = { static const zend_function_entry class_PhpToken_methods[] = { - ZEND_ME(PhpToken, getAll, arginfo_class_PhpToken_getAll, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + ZEND_ME(PhpToken, tokenize, arginfo_class_PhpToken_tokenize, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(PhpToken, __construct, arginfo_class_PhpToken___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) ZEND_ME(PhpToken, is, arginfo_class_PhpToken_is, ZEND_ACC_PUBLIC) ZEND_ME(PhpToken, isIgnorable, arginfo_class_PhpToken_isIgnorable, ZEND_ACC_PUBLIC) diff --git a/ext/xml/xml.c b/ext/xml/xml.c index 00f8798ad0875..92e6745bccd22 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -254,7 +254,7 @@ static void php_xml_free_wrapper(void *ptr) PHP_MINIT_FUNCTION(xml) { zend_class_entry ce; - INIT_CLASS_ENTRY(ce, "XmlParser", class_XMLParser_methods); + INIT_CLASS_ENTRY(ce, "XmlParser", class_XmlParser_methods); xml_parser_ce = zend_register_internal_class(&ce); xml_parser_ce->create_object = xml_parser_create_object; xml_parser_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; diff --git a/ext/xml/xml.stub.php b/ext/xml/xml.stub.php index b5af23376146b..22e49fa6fed61 100644 --- a/ext/xml/xml.stub.php +++ b/ext/xml/xml.stub.php @@ -4,41 +4,41 @@ function xml_parser_create(?string $encoding = null): XmlParser {} -function xml_parser_create_ns(?string $encoding = null, string $sep = ":"): XmlParser {} +function xml_parser_create_ns(?string $encoding = null, string $separator = ":"): XmlParser {} -function xml_set_object(XmlParser $parser, object $obj): bool {} +function xml_set_object(XmlParser $parser, object $object): bool {} /** - * @param callable $shdl - * @param callable $ehdl + * @param callable $start_handler + * @param callable $end_handler */ -function xml_set_element_handler(XmlParser $parser, $shdl, $ehdl): bool {} +function xml_set_element_handler(XmlParser $parser, $start_handler, $end_handler): bool {} -/** @param callable $hdl */ -function xml_set_character_data_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_character_data_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_processing_instruction_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_processing_instruction_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_default_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_default_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_unparsed_entity_decl_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_unparsed_entity_decl_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_notation_decl_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_notation_decl_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_external_entity_ref_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_external_entity_ref_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_start_namespace_decl_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_start_namespace_decl_handler(XmlParser $parser, $handler): bool {} -/** @param callable $hdl */ -function xml_set_end_namespace_decl_handler(XmlParser $parser, $hdl): bool {} +/** @param callable $handler */ +function xml_set_end_namespace_decl_handler(XmlParser $parser, $handler): bool {} -function xml_parse(XmlParser $parser, string $data, bool $isfinal = false): int {} +function xml_parse(XmlParser $parser, string $data, bool $is_final = false): int {} /** * @param array $values @@ -48,7 +48,7 @@ function xml_parse_into_struct(XmlParser $parser, string $data, &$values, &$inde function xml_get_error_code(XmlParser $parser): int {} -function xml_error_string(int $code): ?string {} +function xml_error_string(int $error_code): ?string {} function xml_get_current_line_number(XmlParser $parser): int {} @@ -63,6 +63,6 @@ function xml_parser_set_option(XmlParser $parser, int $option, $value): bool {} function xml_parser_get_option(XmlParser $parser, int $option): string|int {} -final class XMLParser +final class XmlParser { } diff --git a/ext/xml/xml_arginfo.h b/ext/xml/xml_arginfo.h index cd05d403f63a5..227d4fdefa0b4 100644 --- a/ext/xml/xml_arginfo.h +++ b/ext/xml/xml_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5be46eaeaea40f3494a6bbad269f85256030f758 */ + * Stub hash: 7014b171486b2a597f659369a707a592c26b3b2f */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XmlParser, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") @@ -7,23 +7,23 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create_ns, 0, 0, XmlParser, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sep, IS_STRING, 0, "\":\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\":\"") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_object, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0) - ZEND_ARG_TYPE_INFO(0, obj, IS_OBJECT, 0) + ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_element_handler, 0, 3, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0) - ZEND_ARG_INFO(0, shdl) - ZEND_ARG_INFO(0, ehdl) + ZEND_ARG_INFO(0, start_handler) + ZEND_ARG_INFO(0, end_handler) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_character_data_handler, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0) - ZEND_ARG_INFO(0, hdl) + ZEND_ARG_INFO(0, handler) ZEND_END_ARG_INFO() #define arginfo_xml_set_processing_instruction_handler arginfo_xml_set_character_data_handler @@ -43,7 +43,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parse, 0, 2, IS_LONG, 0) ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isfinal, _IS_BOOL, 0, "false") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, is_final, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parse_into_struct, 0, 3, IS_LONG, 0) @@ -58,7 +58,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_get_error_code, 0, 1, IS_LON ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_error_string, 0, 1, IS_STRING, 1) - ZEND_ARG_TYPE_INFO(0, code, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_xml_get_current_line_number arginfo_xml_get_error_code @@ -134,6 +134,6 @@ static const zend_function_entry ext_functions[] = { }; -static const zend_function_entry class_XMLParser_methods[] = { +static const zend_function_entry class_XmlParser_methods[] = { ZEND_FE_END }; diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 7b2619540956e..afc8cc80baf83 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -1132,8 +1132,13 @@ PHP_METHOD(XMLReader, expand) RETURN_THROWS(); } #else - php_error(E_WARNING, "DOM support is not enabled"); - return; + zval *dummy; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|z!", &dummy) == FAILURE) { + RETURN_THROWS(); + } + + zend_throw_error(NULL, "XMLReader::expand() requires the DOM extension to be enabled"); + RETURN_THROWS(); #endif } /* }}} */ diff --git a/ext/xmlreader/php_xmlreader.stub.php b/ext/xmlreader/php_xmlreader.stub.php index 844a8fddca471..ecad4b392b819 100644 --- a/ext/xmlreader/php_xmlreader.stub.php +++ b/ext/xmlreader/php_xmlreader.stub.php @@ -14,7 +14,7 @@ public function getAttribute(string $name) {} public function getAttributeNo(int $index) {} /** @return string|null */ - public function getAttributeNs(string $name, string $namespaceURI) {} + public function getAttributeNs(string $name, string $namespace) {} /** @return bool */ public function getParserProperty(int $property) {} @@ -32,7 +32,7 @@ public function moveToAttribute(string $name) {} public function moveToAttributeNo(int $index) {} /** @return bool */ - public function moveToAttributeNs(string $name, string $namespaceURI) {} + public function moveToAttributeNs(string $name, string $namespace) {} /** @return bool */ public function moveToElement() {} @@ -47,10 +47,10 @@ public function moveToNextAttribute() {} public function read() {} /** @return bool */ - public function next(?string $localname = null) {} + public function next(?string $name = null) {} /** @return bool|XMLReader */ - public static function open(string $URI, ?string $encoding = null, int $options = 0) {} + public static function open(string $uri, ?string $encoding = null, int $flags = 0) {} /** @return string */ public function readInnerXml() {} @@ -74,8 +74,8 @@ public function setRelaxNGSchema(?string $filename) {} public function setRelaxNGSchemaSource(?string $source) {} /** @return bool|XMLReader */ - public static function XML(string $source, ?string $encoding = null, int $options = 0) {} + public static function XML(string $source, ?string $encoding = null, int $flags = 0) {} - /** @return DOMNode|false|null */ - public function expand(?DOMNode $basenode = null) {} + /** @return DOMNode|false */ + public function expand(?DOMNode $baseNode = null) {} } diff --git a/ext/xmlreader/php_xmlreader_arginfo.h b/ext/xmlreader/php_xmlreader_arginfo.h index 0d12174edf862..487b53f698be9 100644 --- a/ext/xmlreader/php_xmlreader_arginfo.h +++ b/ext/xmlreader/php_xmlreader_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 65f093ef5916078c10dd4bff7e854561f153ab9c */ + * Stub hash: 0188a53f262d3f8e19b5b64d163bdee84f1be6b8 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_close, 0, 0, 0) ZEND_END_ARG_INFO() @@ -14,7 +14,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_getAttributeNs, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, namespaceURI, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_getParserProperty, 0, 0, 1) @@ -42,13 +42,13 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLReader_read arginfo_class_XMLReader_close ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_next, 0, 0, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, localname, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_open, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, URI, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() #define arginfo_class_XMLReader_readInnerXml arginfo_class_XMLReader_close @@ -75,11 +75,11 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_XML, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, source, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_expand, 0, 0, 0) - ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, basenode, DOMNode, 1, "null") + ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, baseNode, DOMNode, 1, "null") ZEND_END_ARG_INFO() diff --git a/ext/xmlreader/tests/002.phpt b/ext/xmlreader/tests/002.phpt index 803c8c7243aa6..eccdf7ae80340 100644 --- a/ext/xmlreader/tests/002.phpt +++ b/ext/xmlreader/tests/002.phpt @@ -36,6 +36,6 @@ unlink($filename); ?> --EXPECT-- -XMLReader::open(): Argument #1 ($URI) cannot be empty +XMLReader::open(): Argument #1 ($uri) cannot be empty books books diff --git a/ext/xmlreader/tests/015-get-errors.phpt b/ext/xmlreader/tests/015-get-errors.phpt index 850d042a4b0c8..7ea081c82f0bc 100644 --- a/ext/xmlreader/tests/015-get-errors.phpt +++ b/ext/xmlreader/tests/015-get-errors.phpt @@ -46,5 +46,5 @@ $reader->close(); unlink(__DIR__.'/015-get-errors.xml'); ?> --EXPECT-- -XMLReader::getAttributeNs(): Argument #2 ($namespaceURI) cannot be empty +XMLReader::getAttributeNs(): Argument #2 ($namespace) cannot be empty ns1:num: 1 diff --git a/ext/xmlreader/tests/015-move-errors.phpt b/ext/xmlreader/tests/015-move-errors.phpt index 2b5580d7ea4fd..303d5c63e45ea 100644 --- a/ext/xmlreader/tests/015-move-errors.phpt +++ b/ext/xmlreader/tests/015-move-errors.phpt @@ -41,4 +41,4 @@ $reader->close(); unlink(__DIR__.'/015-move-errors.xml'); ?> --EXPECT-- -XMLReader::moveToAttributeNs(): Argument #2 ($namespaceURI) cannot be empty +XMLReader::moveToAttributeNs(): Argument #2 ($namespace) cannot be empty diff --git a/ext/xmlwriter/php_xmlwriter.stub.php b/ext/xmlwriter/php_xmlwriter.stub.php index 981cadda85836..9334545ffae07 100644 --- a/ext/xmlwriter/php_xmlwriter.stub.php +++ b/ext/xmlwriter/php_xmlwriter.stub.php @@ -20,9 +20,9 @@ function xmlwriter_end_attribute(XMLWriter $writer): bool {} function xmlwriter_write_attribute(XMLWriter $writer, string $name, string $value): bool {} -function xmlwriter_start_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $uri): bool {} +function xmlwriter_start_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace): bool {} -function xmlwriter_write_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $uri, string $value): bool {} +function xmlwriter_write_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace, string $value): bool {} function xmlwriter_start_element(XMLWriter $writer, string $name): bool {} @@ -30,11 +30,11 @@ function xmlwriter_end_element(XMLWriter $writer): bool {} function xmlwriter_full_end_element(XMLWriter $writer): bool {} -function xmlwriter_start_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $uri): bool {} +function xmlwriter_start_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace): bool {} function xmlwriter_write_element(XMLWriter $writer, string $name, ?string $content = null): bool {} -function xmlwriter_write_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $uri, ?string $content = null): bool {} +function xmlwriter_write_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace, ?string $content = null): bool {} function xmlwriter_start_pi(XMLWriter $writer, string $target): bool {} @@ -88,129 +88,257 @@ function xmlwriter_flush(XMLWriter $writer, bool $empty = true): string|int {} class XMLWriter { - /** @alias xmlwriter_open_uri */ - public function openUri(string $uri): bool {} - - /** @alias xmlwriter_open_memory */ - public function openMemory(): bool {} - - /** @alias xmlwriter_set_indent */ - public function setIndent(bool $enable): bool {} - - /** @alias xmlwriter_set_indent_string */ - public function setIndentString(string $indentation): bool {} - - /** @alias xmlwriter_start_comment */ - public function startComment(): bool {} - - /** @alias xmlwriter_end_comment */ - public function endComment(): bool {} - - /** @alias xmlwriter_start_attribute */ - public function startAttribute(string $name): bool {} - - /** @alias xmlwriter_end_attribute */ - public function endAttribute(): bool {} - - /** @alias xmlwriter_write_attribute */ - public function writeAttribute(string $name, string $value): bool {} - - /** @alias xmlwriter_start_attribute_ns */ - public function startAttributeNs(?string $prefix, string $name, ?string $uri): bool {} - - /** @alias xmlwriter_write_attribute_ns */ - public function writeAttributeNs(?string $prefix, string $name, ?string $uri, string $value): bool {} - - /** @alias xmlwriter_start_element */ - public function startElement(string $name): bool {} - - /** @alias xmlwriter_end_element */ - public function endElement(): bool {} - - /** @alias xmlwriter_full_end_element */ - public function fullEndElement(): bool {} - - /** @alias xmlwriter_start_element_ns */ - public function startElementNs(?string $prefix, string $name, ?string $uri): bool {} - - /** @alias xmlwriter_write_element */ - public function writeElement(string $name, ?string $content = null): bool {} - - /** @alias xmlwriter_write_element_ns */ - public function writeElementNs(?string $prefix, string $name, ?string $uri, ?string $content = null): bool {} - - /** @alias xmlwriter_start_pi */ - public function startPi(string $target): bool {} - - /** @alias xmlwriter_end_pi */ - public function endPi(): bool {} - - /** @alias xmlwriter_write_pi */ - public function writePi(string $target, string $content): bool {} - - /** @alias xmlwriter_start_cdata */ - public function startCdata(): bool {} - - /** @alias xmlwriter_end_cdata */ - public function endCdata(): bool {} - - /** @alias xmlwriter_write_cdata */ - public function writeCdata(string $content): bool {} - - /** @alias xmlwriter_text */ - public function text(string $content): bool {} - - /** @alias xmlwriter_write_raw */ - public function writeRaw(string $content): bool {} - - /** @alias xmlwriter_start_document */ - public function startDocument(?string $version = "1.0", ?string $encoding = null, ?string $standalone = null): bool {} - - /** @alias xmlwriter_end_document */ - public function endDocument(): bool {} - - /** @alias xmlwriter_write_comment */ - public function writeComment(string $content): bool {} - - /** @alias xmlwriter_start_dtd */ - public function startDtd(string $qualifiedName, ?string $publicId = null, ?string $systemId = null): bool {} - - /** @alias xmlwriter_end_dtd */ - public function endDtd(): bool {} - - /** @alias xmlwriter_write_dtd */ - public function writeDtd(string $name, ?string $publicId = null, ?string $systemId = null, ?string $content = null): bool {} - - /** @alias xmlwriter_start_dtd_element */ - public function startDtdElement(string $qualifiedName): bool {} - - /** @alias xmlwriter_end_dtd_element */ - public function endDtdElement(): bool {} - - /** @alias xmlwriter_write_dtd_element */ - public function writeDtdElement(string $name, string $content): bool {} - - /** @alias xmlwriter_start_dtd_attlist */ - public function startDtdAttlist(string $name): bool {} - - /** @alias xmlwriter_end_dtd_attlist */ - public function endDtdAttlist(): bool {} - - /** @alias xmlwriter_write_dtd_attlist */ - public function writeDtdAttlist(string $name, string $content): bool {} - - /** @alias xmlwriter_start_dtd_entity */ - public function startDtdEntity(string $name, bool $isParam): bool {} - - /** @alias xmlwriter_end_dtd_entity */ - public function endDtdEntity(): bool {} - - /** @alias xmlwriter_write_dtd_entity */ - public function writeDtdEntity(string $name, string $content, bool $isParam = false, ?string $publicId = null, ?string $systemId = null, ?string $notationData = null): bool {} - - /** @alias xmlwriter_output_memory */ - public function outputMemory(bool $flush = true): string {} - - /** @alias xmlwriter_flush */ - public function flush(bool $empty = true): string|int {} + /** + * @return bool + * @alias xmlwriter_open_uri + * @no-verify Behaviour differs from the aliased function + */ + public function openUri(string $uri) {} + + /** + * @return bool + * @alias xmlwriter_open_memory + * @no-verify Behaviour differs from the aliased function + */ + public function openMemory() {} + + /** + * @return bool + * @alias xmlwriter_set_indent + */ + public function setIndent(bool $enable) {} + + /** + * @return bool + * @alias xmlwriter_set_indent_string + */ + public function setIndentString(string $indentation) {} + + /** + * @return bool + * @alias xmlwriter_start_comment + */ + public function startComment() {} + + /** + * @return bool + * @alias xmlwriter_end_comment + */ + public function endComment() {} + + /** + * @return bool + * @alias xmlwriter_start_attribute + */ + public function startAttribute(string $name) {} + + /** + * @return bool + * @alias xmlwriter_end_attribute + */ + public function endAttribute() {} + + /** + * @return bool + * @alias xmlwriter_write_attribute + */ + public function writeAttribute(string $name, string $value) {} + + /** + * @return bool + * @alias xmlwriter_start_attribute_ns + */ + public function startAttributeNs(?string $prefix, string $name, ?string $namespace) {} + + /** + * @return bool + * @alias xmlwriter_write_attribute_ns + */ + public function writeAttributeNs(?string $prefix, string $name, ?string $namespace, string $value) {} + + /** + * @return bool + * @alias xmlwriter_start_element + */ + public function startElement(string $name) {} + + /** + * @return bool + * @alias xmlwriter_end_element + */ + public function endElement() {} + + /** + * @return bool + * @alias xmlwriter_full_end_element + */ + public function fullEndElement() {} + + /** + * @return bool + * @alias xmlwriter_start_element_ns + */ + public function startElementNs(?string $prefix, string $name, ?string $namespace) {} + + /** + * @return bool + * @alias xmlwriter_write_element + */ + public function writeElement(string $name, ?string $content = null) {} + + /** + * @return bool + * @alias xmlwriter_write_element_ns + */ + public function writeElementNs(?string $prefix, string $name, ?string $namespace, ?string $content = null) {} + + /** + * @return bool + * @alias xmlwriter_start_pi + */ + public function startPi(string $target) {} + + /** + * @return bool + * @alias xmlwriter_end_pi + */ + public function endPi() {} + + /** + * @return bool + * @alias xmlwriter_write_pi + */ + public function writePi(string $target, string $content) {} + + /** + * @return bool + * @alias xmlwriter_start_cdata + */ + public function startCdata() {} + + /** + * @return bool + * @alias xmlwriter_end_cdata + * */ + public function endCdata() {} + + /** + * @return bool + * @alias xmlwriter_write_cdata + */ + public function writeCdata(string $content) {} + + /** + * @return bool + * @alias xmlwriter_text + */ + public function text(string $content) {} + + /** + * @return bool + * @alias xmlwriter_write_raw + */ + public function writeRaw(string $content) {} + + /** + * @return bool + * @alias xmlwriter_start_document + */ + public function startDocument(?string $version = "1.0", ?string $encoding = null, ?string $standalone = null) {} + + /** + * @return bool + * @alias xmlwriter_end_document + */ + public function endDocument() {} + + /** + * @return bool + * @alias xmlwriter_write_comment + */ + public function writeComment(string $content) {} + + /** + * @return bool + * @alias xmlwriter_start_dtd + */ + public function startDtd(string $qualifiedName, ?string $publicId = null, ?string $systemId = null) {} + + /** + * @return bool + * @alias xmlwriter_end_dtd + */ + public function endDtd() {} + + /** + * @return bool + * @alias xmlwriter_write_dtd + */ + public function writeDtd(string $name, ?string $publicId = null, ?string $systemId = null, ?string $content = null) {} + + /** + * @return bool + * @alias xmlwriter_start_dtd_element + */ + public function startDtdElement(string $qualifiedName) {} + + /** + * @return bool + * @alias xmlwriter_end_dtd_element + */ + public function endDtdElement() {} + + /** + * @return bool + * @alias xmlwriter_write_dtd_element + */ + public function writeDtdElement(string $name, string $content) {} + + /** + * @return bool + * @alias xmlwriter_start_dtd_attlist + */ + public function startDtdAttlist(string $name) {} + + /** + * @return bool + * @alias xmlwriter_end_dtd_attlist + */ + public function endDtdAttlist() {} + + /** + * @return bool + * @alias xmlwriter_write_dtd_attlist + */ + public function writeDtdAttlist(string $name, string $content) {} + + /** + * @return bool + * @alias xmlwriter_start_dtd_entity + */ + public function startDtdEntity(string $name, bool $isParam) {} + + /** + * @return bool + * @alias xmlwriter_end_dtd_entity + */ + public function endDtdEntity() {} + + /** + * @return bool + * @alias xmlwriter_write_dtd_entity + */ + public function writeDtdEntity(string $name, string $content, bool $isParam = false, ?string $publicId = null, ?string $systemId = null, ?string $notationData = null) {} + + /** + * @return string + * @alias xmlwriter_output_memory + */ + public function outputMemory(bool $flush = true) {} + + /** + * @return string|int + * @alias xmlwriter_flush + */ + public function flush(bool $empty = true) {} } diff --git a/ext/xmlwriter/php_xmlwriter_arginfo.h b/ext/xmlwriter/php_xmlwriter_arginfo.h index 2d5bccdb42ce6..9325ffbdb5fe5 100644 --- a/ext/xmlwriter/php_xmlwriter_arginfo.h +++ b/ext/xmlwriter/php_xmlwriter_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d265aff62d6dcd195c65e6205cc4cac063f5f237 */ + * Stub hash: a0ece6bc77b0a9811cb09a604b175e2295efc7a0 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_xmlwriter_open_uri, 0, 1, XMLWriter, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0) @@ -41,14 +41,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_start_attribute_ns, 0, ZEND_ARG_OBJ_INFO(0, writer, XMLWriter, 0) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_write_attribute_ns, 0, 5, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, writer, XMLWriter, 0) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -70,7 +70,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xmlwriter_write_element_ns, 0, 4 ZEND_ARG_OBJ_INFO(0, writer, XMLWriter, 0) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, content, IS_STRING, 1, "null") ZEND_END_ARG_INFO() @@ -175,18 +175,18 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_xmlwriter_flush, 0, 1, MAY_BE_ST ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, empty, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_openUri, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_openUri, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_openMemory, 0, 0, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_openMemory, 0, 0, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_setIndent, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_setIndent, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_setIndentString, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_setIndentString, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, indentation, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -194,27 +194,27 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endComment arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startAttribute, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startAttribute, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endAttribute arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeAttribute, 0, 2, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeAttribute, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startAttributeNs, 0, 3, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startAttributeNs, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeAttributeNs, 0, 4, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeAttributeNs, 0, 0, 4) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -226,25 +226,25 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_startElementNs arginfo_class_XMLWriter_startAttributeNs -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeElement, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeElement, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, content, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeElementNs, 0, 3, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeElementNs, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 1) + ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, content, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startPi, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startPi, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, target, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endPi arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writePi, 0, 2, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writePi, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, target, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -253,7 +253,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endCdata arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeCdata, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeCdata, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -261,7 +261,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_writeRaw arginfo_class_XMLWriter_writeCdata -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startDocument, 0, 0, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startDocument, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 1, "\"1.0\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, standalone, IS_STRING, 1, "null") @@ -271,7 +271,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_writeComment arginfo_class_XMLWriter_writeCdata -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startDtd, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startDtd, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, qualifiedName, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, publicId, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, systemId, IS_STRING, 1, "null") @@ -279,20 +279,20 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endDtd arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeDtd, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeDtd, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, publicId, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, systemId, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, content, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startDtdElement, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startDtdElement, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, qualifiedName, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endDtdElement arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeDtdElement, 0, 2, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeDtdElement, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -303,14 +303,14 @@ ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_writeDtdAttlist arginfo_class_XMLWriter_writeDtdElement -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_startDtdEntity, 0, 2, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_startDtdEntity, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, isParam, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_class_XMLWriter_endDtdEntity arginfo_class_XMLWriter_openMemory -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeDtdEntity, 0, 2, _IS_BOOL, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_writeDtdEntity, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, isParam, _IS_BOOL, 0, "false") @@ -319,11 +319,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_writeDtdEntity, ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, notationData, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_XMLWriter_outputMemory, 0, 0, IS_STRING, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_outputMemory, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flush, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_XMLWriter_flush, 0, 0, MAY_BE_STRING|MAY_BE_LONG) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLWriter_flush, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, empty, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() diff --git a/ext/xsl/php_xsl.stub.php b/ext/xsl/php_xsl.stub.php index 04cad46cbe8cc..536f82ac20052 100644 --- a/ext/xsl/php_xsl.stub.php +++ b/ext/xsl/php_xsl.stub.php @@ -4,14 +4,17 @@ class XSLTProcessor { - /** @return bool */ + /** + * @param DOMDocument|SimpleXMLElement $stylesheet + * @return bool + */ public function importStylesheet(object $stylesheet) {} /** * @param DOMDocument|SimpleXMLElement $document * @return DOMDocument|false */ - public function transformToDoc(object $document, ?string $return_class = null) {} + public function transformToDoc(object $document, ?string $returnClass = null) {} /** * @param DOMDocument|SimpleXMLElement $document @@ -38,13 +41,13 @@ public function removeParameter(string $namespace, string $name) {} public function hasExsltSupport() {} /** @return void */ - public function registerPHPFunctions(array|string|null $restrict = null) {} + public function registerPHPFunctions(array|string|null $functions = null) {} /** @return bool */ public function setProfiling(?string $filename) {} /** @return int */ - public function setSecurityPrefs(int $securityPrefs) {} + public function setSecurityPrefs(int $preferences) {} /** @return int */ public function getSecurityPrefs() {} diff --git a/ext/xsl/php_xsl_arginfo.h b/ext/xsl/php_xsl_arginfo.h index a776dded68695..8f7f90a053c8e 100644 --- a/ext/xsl/php_xsl_arginfo.h +++ b/ext/xsl/php_xsl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4a3997bafb6c17714ee94443837be2d2842386e2 */ + * Stub hash: a119247725ff61dbd615cb86ee6201ee6603ba51 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_importStylesheet, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, stylesheet, IS_OBJECT, 0) @@ -7,7 +7,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_transformToDoc, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, document, IS_OBJECT, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return_class, IS_STRING, 1, "null") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, returnClass, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_transformToUri, 0, 0, 2) @@ -36,7 +36,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_hasExsltSupport, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_registerPHPFunctions, 0, 0, 0) - ZEND_ARG_TYPE_MASK(0, restrict, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_ARG_TYPE_MASK(0, functions, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_setProfiling, 0, 0, 1) @@ -44,7 +44,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_setProfiling, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XSLTProcessor_setSecurityPrefs, 0, 0, 1) - ZEND_ARG_TYPE_INFO(0, securityPrefs, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, preferences, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_XSLTProcessor_getSecurityPrefs arginfo_class_XSLTProcessor_hasExsltSupport diff --git a/ext/zend_test/php_test.h b/ext/zend_test/php_test.h index 5d9e31cc83610..2a1d7763da0c8 100644 --- a/ext/zend_test/php_test.h +++ b/ext/zend_test/php_test.h @@ -36,16 +36,17 @@ struct bug79096 { }; #ifdef PHP_WIN32 -# ifdef PHP_ZEND_TEST_EXPORTS -# define PHP_ZEND_TEST_API __declspec(dllexport) -# else -# define PHP_ZEND_TEST_API __declspec(dllimport) -# endif +# define PHP_ZEND_TEST_API __declspec(dllexport) +#elif defined(__GNUC__) && __GNUC__ >= 4 +# define PHP_ZEND_TEST_API __attribute__ ((visibility("default"))) #else -# define PHP_ZEND_TEST_API ZEND_API +# define PHP_ZEND_TEST_API #endif PHP_ZEND_TEST_API struct bug79096 bug79096(void); PHP_ZEND_TEST_API void bug79532(off_t *array, size_t elems); +extern PHP_ZEND_TEST_API int *(*bug79177_cb)(void); +PHP_ZEND_TEST_API void bug79177(void); + #endif diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 13781e32be75f..ef6d45b84986b 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -37,6 +37,7 @@ ZEND_BEGIN_MODULE_GLOBALS(zend_test) int observer_show_return_type; int observer_show_return_value; int observer_show_init_backtrace; + int observer_show_opcode; int observer_nesting_depth; ZEND_END_MODULE_GLOBALS(zend_test) @@ -292,21 +293,34 @@ void zend_attribute_validate_zendtestattribute(zend_attribute *attr, uint32_t ta } } -static ZEND_METHOD(_ZendTestClass, __toString) /* {{{ */ { +static ZEND_METHOD(_ZendTestClass, __toString) { + ZEND_PARSE_PARAMETERS_NONE(); RETURN_EMPTY_STRING(); } -/* }}} */ /* Internal function returns bool, we return int. */ -static ZEND_METHOD(_ZendTestClass, is_object) /* {{{ */ { +static ZEND_METHOD(_ZendTestClass, is_object) { + ZEND_PARSE_PARAMETERS_NONE(); RETURN_LONG(42); } -/* }}} */ -static ZEND_METHOD(_ZendTestTrait, testMethod) /* {{{ */ { +static ZEND_METHOD(_ZendTestClass, returnsStatic) { + ZEND_PARSE_PARAMETERS_NONE(); + object_init_ex(return_value, zend_get_called_scope(execute_data)); +} + +static ZEND_METHOD(_ZendTestTrait, testMethod) { + ZEND_PARSE_PARAMETERS_NONE(); RETURN_TRUE; } -/* }}} */ + +static ZEND_METHOD(ZendTestNS_Foo, method) { + ZEND_PARSE_PARAMETERS_NONE(); +} + +static ZEND_METHOD(ZendTestNS2_Foo, method) { + ZEND_PARSE_PARAMETERS_NONE(); +} PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("zend_test.observer.enabled", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_enabled, zend_zend_test_globals, zend_test_globals) @@ -317,6 +331,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_type", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_type, zend_zend_test_globals, zend_test_globals) STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_value", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_value, zend_zend_test_globals, zend_test_globals) STD_PHP_INI_BOOLEAN("zend_test.observer.show_init_backtrace", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_init_backtrace, zend_zend_test_globals, zend_test_globals) + STD_PHP_INI_BOOLEAN("zend_test.observer.show_opcode", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_opcode, zend_zend_test_globals, zend_test_globals) PHP_INI_END() static zend_observer_fcall_handlers observer_fcall_init(zend_execute_data *execute_data); @@ -428,6 +443,14 @@ PHP_MSHUTDOWN_FUNCTION(zend_test) return SUCCESS; } +static void observer_show_opcode(zend_execute_data *execute_data) +{ + if (!ZT_G(observer_show_opcode)) { + return; + } + php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", zend_get_opcode_name(EX(opline)->opcode)); +} + static void observer_begin(zend_execute_data *execute_data) { if (!ZT_G(observer_show_output)) { @@ -444,6 +467,7 @@ static void observer_begin(zend_execute_data *execute_data) php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->op_array.filename)); } ZT_G(observer_nesting_depth)++; + observer_show_opcode(execute_data); } static void get_retval_info(zval *retval, smart_str *buf) @@ -472,6 +496,7 @@ static void observer_end(zend_execute_data *execute_data, zval *retval) if (EG(exception)) { php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(EG(exception)->ce->name)); } + observer_show_opcode(execute_data); ZT_G(observer_nesting_depth)--; if (execute_data->func && execute_data->func->common.function_name) { smart_str retval_info = {0}; @@ -528,6 +553,7 @@ static zend_observer_fcall_handlers observer_fcall_init(zend_execute_data *execu if (ZT_G(observer_show_init_backtrace)) { observer_show_init_backtrace(execute_data); } + observer_show_opcode(execute_data); } if (ZT_G(observer_observe_all)) { @@ -607,3 +633,9 @@ PHP_ZEND_TEST_API void bug79532(off_t *array, size_t elems) array[i] = i; } } + +PHP_ZEND_TEST_API int *(*bug79177_cb)(void); +void bug79177(void) +{ + bug79177_cb(); +} diff --git a/ext/zend_test/test.stub.php b/ext/zend_test/test.stub.php index 96e7b56921128..91ff78e113e0a 100644 --- a/ext/zend_test/test.stub.php +++ b/ext/zend_test/test.stub.php @@ -2,11 +2,15 @@ /** @generate-function-entries static */ +namespace { + class _ZendTestClass { public static function is_object(): int {} /** @deprecated */ public function __toString(): string {} + + public function returnsStatic(): static {} } trait _ZendTestTrait { @@ -41,3 +45,21 @@ function zend_string_or_stdclass($param): stdClass|string {} function zend_string_or_stdclass_or_null($param): stdClass|string|null {} function zend_iterable(iterable $arg1, ?iterable $arg2 = null): void {} + +} + +namespace ZendTestNS { + +class Foo { + public function method(): void {} +} + +} + +namespace ZendTestNS2 { + +class Foo { + public function method(): void {} +} + +} diff --git a/ext/zend_test/test_arginfo.h b/ext/zend_test/test_arginfo.h index 80e89c6fe05e3..c1fd6fd202a3e 100644 --- a/ext/zend_test/test_arginfo.h +++ b/ext/zend_test/test_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1aa8e876ff9efb99c61603216eed267b0d225221 */ + * Stub hash: 759463b1adece643974a9c51455789aef11ba935 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_test_array_return, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() @@ -57,9 +57,16 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestClass___toString, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestClass_returnsStatic, 0, 0, IS_STATIC, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestTrait_testMethod, 0, 0, _IS_BOOL, 0) ZEND_END_ARG_INFO() +#define arginfo_class_ZendTestNS_Foo_method arginfo_zend_test_void_return + +#define arginfo_class_ZendTestNS2_Foo_method arginfo_zend_test_void_return + static ZEND_FUNCTION(zend_test_array_return); static ZEND_FUNCTION(zend_test_nullable_array_return); @@ -76,7 +83,10 @@ static ZEND_FUNCTION(zend_string_or_stdclass_or_null); static ZEND_FUNCTION(zend_iterable); static ZEND_METHOD(_ZendTestClass, is_object); static ZEND_METHOD(_ZendTestClass, __toString); +static ZEND_METHOD(_ZendTestClass, returnsStatic); static ZEND_METHOD(_ZendTestTrait, testMethod); +static ZEND_METHOD(ZendTestNS_Foo, method); +static ZEND_METHOD(ZendTestNS2_Foo, method); static const zend_function_entry ext_functions[] = { @@ -100,6 +110,7 @@ static const zend_function_entry ext_functions[] = { static const zend_function_entry class__ZendTestClass_methods[] = { ZEND_ME(_ZendTestClass, is_object, arginfo_class__ZendTestClass_is_object, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(_ZendTestClass, __toString, arginfo_class__ZendTestClass___toString, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_ME(_ZendTestClass, returnsStatic, arginfo_class__ZendTestClass_returnsStatic, ZEND_ACC_PUBLIC) ZEND_FE_END }; @@ -108,3 +119,15 @@ static const zend_function_entry class__ZendTestTrait_methods[] = { ZEND_ME(_ZendTestTrait, testMethod, arginfo_class__ZendTestTrait_testMethod, ZEND_ACC_PUBLIC) ZEND_FE_END }; + + +static const zend_function_entry class_ZendTestNS_Foo_methods[] = { + ZEND_ME(ZendTestNS_Foo, method, arginfo_class_ZendTestNS_Foo_method, ZEND_ACC_PUBLIC) + ZEND_FE_END +}; + + +static const zend_function_entry class_ZendTestNS2_Foo_methods[] = { + ZEND_ME(ZendTestNS2_Foo, method, arginfo_class_ZendTestNS2_Foo_method, ZEND_ACC_PUBLIC) + ZEND_FE_END +}; diff --git a/ext/zend_test/tests/observer_call_user_func_01.phpt b/ext/zend_test/tests/observer_call_user_func_01.phpt new file mode 100644 index 0000000000000..0f12fa6835f00 --- /dev/null +++ b/ext/zend_test/tests/observer_call_user_func_01.phpt @@ -0,0 +1,40 @@ +--TEST-- +Observer: call_user_func() from root namespace +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- + +--EXPECTF-- + + + + +MyClass::myMethod called + + + +my_function called + + diff --git a/ext/zend_test/tests/observer_call_user_func_02.phpt b/ext/zend_test/tests/observer_call_user_func_02.phpt new file mode 100644 index 0000000000000..28dd6a9825440 --- /dev/null +++ b/ext/zend_test/tests/observer_call_user_func_02.phpt @@ -0,0 +1,40 @@ +--TEST-- +Observer: call_user_func_array() from root namespace +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- + +--EXPECTF-- + + + + +MyClass::myMethod called + + + +my_function called + + diff --git a/ext/zend_test/tests/observer_call_user_func_03.phpt b/ext/zend_test/tests/observer_call_user_func_03.phpt new file mode 100644 index 0000000000000..1ff841d4340d5 --- /dev/null +++ b/ext/zend_test/tests/observer_call_user_func_03.phpt @@ -0,0 +1,39 @@ +--TEST-- +Observer: call_user_func() from namespace +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- + +--EXPECTF-- + + + + +MyClass::myMethod called + + + +my_function called + + diff --git a/ext/zend_test/tests/observer_call_user_func_04.phpt b/ext/zend_test/tests/observer_call_user_func_04.phpt new file mode 100644 index 0000000000000..9df131db4dd0d --- /dev/null +++ b/ext/zend_test/tests/observer_call_user_func_04.phpt @@ -0,0 +1,39 @@ +--TEST-- +Observer: call_user_func_array() from namespace +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- + +--EXPECTF-- + + + + +MyClass::myMethod called + + + +my_function called + + diff --git a/ext/zend_test/tests/observer_generator_05.phpt b/ext/zend_test/tests/observer_generator_05.phpt new file mode 100644 index 0000000000000..d13f6fa39b198 --- /dev/null +++ b/ext/zend_test/tests/observer_generator_05.phpt @@ -0,0 +1,53 @@ +--TEST-- +Observer: Generator with uncaught exception +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +zend_test.observer.show_return_value=1 +--FILE-- + +--EXPECTF-- + + + + + + + +0 + + +1 + + + + + + + + +Fatal error: Uncaught RuntimeException: Oops! in %s/observer_generator_%d.php:%d +Stack trace: +#0 %s/observer_generator_%d.php(%d): fooResults() +#1 %s/observer_generator_%d.php(%d): doSomething() +#2 {main} + thrown in %s/observer_generator_%d.php on line %d diff --git a/ext/zend_test/tests/observer_opline_01.phpt b/ext/zend_test/tests/observer_opline_01.phpt new file mode 100644 index 0000000000000..d7d17f2b47747 --- /dev/null +++ b/ext/zend_test/tests/observer_opline_01.phpt @@ -0,0 +1,53 @@ +--TEST-- +Observer: Ensure opline exists on the execute_data +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +zend_test.observer.show_opcode=1 +--FILE-- + +--EXPECTF-- + + + + + + + + +Foo + + + + + + + + + + +foo_observer_test + + + + +6 + + +Foo + + + + diff --git a/ext/zend_test/tests/observer_types_01.phpt b/ext/zend_test/tests/observer_types_01.phpt new file mode 100644 index 0000000000000..31c120671401c --- /dev/null +++ b/ext/zend_test/tests/observer_types_01.phpt @@ -0,0 +1,28 @@ +--TEST-- +Observer: Observe basic TypeError +--SKIPIF-- + +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +zend_test.observer.show_return_value=1 +--FILE-- + +--EXPECTF-- + + + + + + + + + +Fatal error: Uncaught TypeError: foo(): Argument #1 ($a) must be of type array, int given, called in %s:%d +Stack trace: +#0 %s/observer_types_%d.php(%d): foo(42) +#1 {main} + thrown in %s/observer_types_%d.php on line %d diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 96baabacd40fa..92272d270fe16 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -288,11 +288,13 @@ static int php_zip_add_file(ze_zip_object *obj, const char *filename, size_t fil } if (!expand_filepath(filename, resolved_path)) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); return -1; } php_stat(resolved_path, strlen(resolved_path), FS_EXISTS, &exists_flag); if (Z_TYPE(exists_flag) == IS_FALSE) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); return -1; } @@ -1163,6 +1165,7 @@ PHP_FUNCTION(zip_open) } if(!expand_filepath(ZSTR_VAL(filename), resolved_path)) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); RETURN_FALSE; } @@ -1444,6 +1447,7 @@ PHP_METHOD(ZipArchive, open) } if (!(resolved_path = expand_filepath(ZSTR_VAL(filename), NULL))) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); RETURN_FALSE; } @@ -3213,16 +3217,25 @@ static PHP_MINFO_FUNCTION(zip) php_info_print_table_row(2, "Zip", "enabled"); php_info_print_table_row(2, "Zip version", PHP_ZIP_VERSION); #ifdef HAVE_LIBZIP_VERSION - php_info_print_table_row(2, "Libzip headers version", LIBZIP_VERSION); - php_info_print_table_row(2, "Libzip library version", zip_libzip_version()); -#else - php_info_print_table_row(2, "Libzip version", LIBZIP_VERSION); + if (strcmp(LIBZIP_VERSION, zip_libzip_version())) { + php_info_print_table_row(2, "Libzip headers version", LIBZIP_VERSION); + php_info_print_table_row(2, "Libzip library version", zip_libzip_version()); + } else #endif + { + php_info_print_table_row(2, "Libzip version", LIBZIP_VERSION); + } #ifdef HAVE_METHOD_SUPPORTED php_info_print_table_row(2, "BZIP2 compression", zip_compression_method_supported(ZIP_CM_BZIP2, 1) ? "Yes" : "No"); php_info_print_table_row(2, "XZ compression", zip_compression_method_supported(ZIP_CM_XZ, 1) ? "Yes" : "No"); +#ifdef ZIP_CM_ZSTD + php_info_print_table_row(2, "ZSTD compression", + zip_compression_method_supported(ZIP_CM_ZSTD, 1) ? "Yes" : "No"); +#else + php_info_print_table_row(2, "ZSTD compression", "No"); +#endif php_info_print_table_row(2, "AES-128 encryption", zip_encryption_method_supported(ZIP_EM_AES_128, 1) ? "Yes" : "No"); php_info_print_table_row(2, "AES-192 encryption", diff --git a/ext/zip/tests/bug64342_0.phpt b/ext/zip/tests/bug64342_0.phpt index 43f60f5d7c566..751fb9c4ba4fa 100644 --- a/ext/zip/tests/bug64342_0.phpt +++ b/ext/zip/tests/bug64342_0.phpt @@ -38,6 +38,8 @@ DONE ?> --EXPECTF-- %s.txt + +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d add failed close ok DONE diff --git a/ext/zip/tests/bug64342_1-mb.phpt b/ext/zip/tests/bug64342_1-mb.phpt index 4884c9fe5f397..9efd046315eed 100644 --- a/ext/zip/tests/bug64342_1-mb.phpt +++ b/ext/zip/tests/bug64342_1-mb.phpt @@ -37,6 +37,7 @@ if ($zip->status == ZIPARCHIVE::ER_OK) { } @unlink($file); ?> ---EXPECT-- +--EXPECTF-- +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d failed OK diff --git a/ext/zip/tests/bug64342_1.phpt b/ext/zip/tests/bug64342_1.phpt index 6b923d3ef1aba..1fff3da26d6a7 100644 --- a/ext/zip/tests/bug64342_1.phpt +++ b/ext/zip/tests/bug64342_1.phpt @@ -37,6 +37,7 @@ if ($zip->status == ZIPARCHIVE::ER_OK) { } @unlink($file); ?> ---EXPECT-- +--EXPECTF-- +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d failed OK diff --git a/ext/zlib/tests/005.phpt b/ext/zlib/tests/005.phpt index 6b0be2897d935..dad9a9927d255 100644 --- a/ext/zlib/tests/005.phpt +++ b/ext/zlib/tests/005.phpt @@ -53,7 +53,7 @@ string(%d) "%a" Warning: gzuncompress(): %s error in %s on line %d bool(false) -gzuncompress(): Argument #2 ($max_decoded_len) must be greater than or equal to 0 +gzuncompress(): Argument #2 ($max_length) must be greater than or equal to 0 Warning: gzuncompress(): %s error in %s on line %d bool(false) diff --git a/ext/zlib/tests/006.phpt b/ext/zlib/tests/006.phpt index 692759e886bb1..31a09bad8827d 100644 --- a/ext/zlib/tests/006.phpt +++ b/ext/zlib/tests/006.phpt @@ -54,7 +54,7 @@ bool(false) Warning: gzinflate(): data error in %s on line %d bool(false) -gzinflate(): Argument #2 ($max_decoded_len) must be greater than or equal to 0 +gzinflate(): Argument #2 ($max_length) must be greater than or equal to 0 Warning: gzinflate(): data error in %s on line %d bool(false) diff --git a/ext/zlib/tests/deflate_add_error.phpt b/ext/zlib/tests/deflate_add_error.phpt index 4a467d39bfe98..11483f88477bb 100644 --- a/ext/zlib/tests/deflate_add_error.phpt +++ b/ext/zlib/tests/deflate_add_error.phpt @@ -28,4 +28,4 @@ try { ?> --EXPECT-- deflate_add(): Argument #1 ($context) must be of type DeflateContext, resource given -deflate_add(): Argument #3 ($flush_behavior) must be one of ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK, or ZLIB_FINISH +deflate_add(): Argument #3 ($flush_mode) must be one of ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK, or ZLIB_FINISH diff --git a/ext/zlib/zlib.stub.php b/ext/zlib/zlib.stub.php index f3c96ca545638..cb7e978249039 100644 --- a/ext/zlib/zlib.stub.php +++ b/ext/zlib/zlib.stub.php @@ -23,7 +23,7 @@ function readgzfile(string $filename, int $use_include_path = 0): int|false {} function zlib_encode(string $data, int $encoding, int $level = -1): string|false {} -function zlib_decode(string $data, int $max_decoded_len = 0): string|false {} +function zlib_decode(string $data, int $max_length = 0): string|false {} function gzdeflate(string $data, int $level = -1, int $encoding = ZLIB_ENCODING_RAW): string|false {} @@ -31,85 +31,85 @@ function gzencode(string $data, int $level = -1, int $encoding = ZLIB_ENCODING_G function gzcompress(string $data, int $level = -1, int $encoding = ZLIB_ENCODING_DEFLATE): string|false {} -function gzinflate(string $data, int $max_decoded_len = 0): string|false {} +function gzinflate(string $data, int $max_length = 0): string|false {} -function gzdecode(string $data, int $max_decoded_len = 0): string|false {} +function gzdecode(string $data, int $max_length = 0): string|false {} -function gzuncompress(string $data, int $max_decoded_len = 0): string|false {} +function gzuncompress(string $data, int $max_length = 0): string|false {} /** - * @param resource $fp + * @param resource $stream * @alias fwrite */ -function gzwrite($fp, string $str, ?int $length = null): int|false {} +function gzwrite($stream, string $data, ?int $length = null): int|false {} /** - * @param resource $fp + * @param resource $stream * @alias fwrite */ -function gzputs($fp, string $str, ?int $length = null): int|false {} +function gzputs($stream, string $data, ?int $length = null): int|false {} /** - * @param resource $fp + * @param resource $stream * @alias rewind */ -function gzrewind($fp): bool {} +function gzrewind($stream): bool {} /** - * @param resource $fp + * @param resource $stream * @alias fclose */ -function gzclose($fp): bool {} +function gzclose($stream): bool {} /** - * @param resource $fp + * @param resource $stream * @alias feof */ -function gzeof($fp): bool {} +function gzeof($stream): bool {} /** - * @param resource $fp + * @param resource $stream * @alias fgetc */ -function gzgetc($fp): string|false {} +function gzgetc($stream): string|false {} /** - * @param resource $fp + * @param resource $stream * @alias fpassthru */ -function gzpassthru($fp): int {} +function gzpassthru($stream): int {} /** - * @param resource $fp + * @param resource $stream * @alias fseek */ -function gzseek($fp, int $offset, int $whence = SEEK_SET): int {} +function gzseek($stream, int $offset, int $whence = SEEK_SET): int {} /** - * @param resource $fp + * @param resource $stream * @alias ftell */ -function gztell($fp): int|false {} +function gztell($stream): int|false {} /** - * @param resource $fp + * @param resource $stream * @alias fread */ -function gzread($fp, int $length): string|false {} +function gzread($stream, int $length): string|false {} /** - * @param resource $fp - * @alias fgets + * @param resource $stream + * @implementation-alias fgets */ -function gzgets($fp, int $length = 1024): string|false {} +function gzgets($stream, int $length = 1024): string|false {} function deflate_init(int $encoding, array $options = []): DeflateContext|false {} -function deflate_add(DeflateContext $context, string $add, int $flush_behavior = ZLIB_SYNC_FLUSH): string|false {} +function deflate_add(DeflateContext $context, string $data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false {} function inflate_init(int $encoding, array $options = []): InflateContext|false {} -function inflate_add(InflateContext $context, string $encoded_data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false {} +function inflate_add(InflateContext $context, string $data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false {} function inflate_get_status(InflateContext $context): int {} diff --git a/ext/zlib/zlib_arginfo.h b/ext/zlib/zlib_arginfo.h index 86ce095b3bddc..0a4be7f767e09 100644 --- a/ext/zlib/zlib_arginfo.h +++ b/ext/zlib/zlib_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b31cdbe9a5d719194753bfe303d32319478048bb */ + * Stub hash: 940858ddc4ddc7edb1e00960334ffa473224fd85 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ob_gzhandler, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) @@ -33,7 +33,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_zlib_decode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_decoded_len, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_length, IS_LONG, 0, "0") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gzdeflate, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) @@ -61,15 +61,15 @@ ZEND_END_ARG_INFO() #define arginfo_gzuncompress arginfo_zlib_decode ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gzwrite, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fp) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_INFO(0, stream) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null") ZEND_END_ARG_INFO() #define arginfo_gzputs arginfo_gzwrite ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gzrewind, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_END_ARG_INFO() #define arginfo_gzclose arginfo_gzrewind @@ -77,30 +77,30 @@ ZEND_END_ARG_INFO() #define arginfo_gzeof arginfo_gzrewind ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gzgetc, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gzpassthru, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gzseek, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "SEEK_SET") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gztell, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gzread, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gzgets, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, fp) + ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "1024") ZEND_END_ARG_INFO() @@ -111,8 +111,8 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_deflate_add, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, context, DeflateContext, 0) - ZEND_ARG_TYPE_INFO(0, add, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flush_behavior, IS_LONG, 0, "ZLIB_SYNC_FLUSH") + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flush_mode, IS_LONG, 0, "ZLIB_SYNC_FLUSH") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_inflate_init, 0, 1, InflateContext, MAY_BE_FALSE) @@ -122,7 +122,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_inflate_add, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_OBJ_INFO(0, context, InflateContext, 0) - ZEND_ARG_TYPE_INFO(0, encoded_data, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flush_mode, IS_LONG, 0, "ZLIB_SYNC_FLUSH") ZEND_END_ARG_INFO() diff --git a/main/main.c b/main/main.c index da510f55518dc..8a860505f98c6 100644 --- a/main/main.c +++ b/main/main.c @@ -744,14 +744,14 @@ static int module_startup = 1; static int module_shutdown = 0; /* {{{ php_during_module_startup */ -static int php_during_module_startup(void) +PHPAPI int php_during_module_startup(void) { return module_startup; } /* }}} */ /* {{{ php_during_module_shutdown */ -static int php_during_module_shutdown(void) +PHPAPI int php_during_module_shutdown(void) { return module_shutdown; } @@ -1450,7 +1450,7 @@ PHP_FUNCTION(set_time_limit) /* {{{ php_fopen_wrapper_for_zend */ static FILE *php_fopen_wrapper_for_zend(const char *filename, zend_string **opened_path) { - return php_stream_open_wrapper_as_file((char *)filename, "rb", USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); + return php_stream_open_wrapper_as_file((char *)filename, "rb", USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); } /* }}} */ diff --git a/main/output.c b/main/output.c index c895d3856e441..bdeca894f25e3 100644 --- a/main/output.c +++ b/main/output.c @@ -105,14 +105,18 @@ static void php_output_header(void) if (!SG(headers_sent)) { if (!OG(output_start_filename)) { if (zend_is_compiling()) { - OG(output_start_filename) = ZSTR_VAL(zend_get_compiled_filename()); + OG(output_start_filename) = zend_get_compiled_filename(); OG(output_start_lineno) = zend_get_compiled_lineno(); } else if (zend_is_executing()) { - OG(output_start_filename) = zend_get_executed_filename(); + OG(output_start_filename) = zend_get_executed_filename_ex(); OG(output_start_lineno) = zend_get_executed_lineno(); } + if (OG(output_start_filename)) { + zend_string_addref(OG(output_start_filename)); + } #if PHP_OUTPUT_DEBUG - fprintf(stderr, "!!! output started at: %s (%d)\n", OG(output_start_filename), OG(output_start_lineno)); + fprintf(stderr, "!!! output started at: %s (%d)\n", + ZSTR_VAL(OG(output_start_filename)), OG(output_start_lineno)); #endif } if (!php_header()) { @@ -190,6 +194,11 @@ PHPAPI void php_output_deactivate(void) } zend_stack_destroy(&OG(handlers)); } + + if (OG(output_start_filename)) { + zend_string_release(OG(output_start_filename)); + OG(output_start_filename) = NULL; + } } /* }}} */ @@ -749,7 +758,7 @@ PHPAPI void php_output_set_implicit_flush(int flush) * Get the file name where output has started */ PHPAPI const char *php_output_get_start_filename(void) { - return OG(output_start_filename); + return OG(output_start_filename) ? ZSTR_VAL(OG(output_start_filename)) : NULL; } /* }}} */ diff --git a/main/php.h b/main/php.h index a747a99499ab4..68076befde202 100644 --- a/main/php.h +++ b/main/php.h @@ -22,7 +22,7 @@ #include #endif -#define PHP_API_VERSION 20200930 +#define PHP_API_VERSION 20201009 #define PHP_HAVE_STREAMS #define YYDEBUG 0 #define PHP_DEFAULT_CHARSET "UTF-8" @@ -311,6 +311,8 @@ void phperror(char *error); PHPAPI size_t php_write(void *buf, size_t size); PHPAPI size_t php_printf(const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2); PHPAPI size_t php_printf_unchecked(const char *format, ...); +PHPAPI int php_during_module_startup(void); +PHPAPI int php_during_module_shutdown(void); PHPAPI int php_get_module_initialized(void); #ifdef HAVE_SYSLOG_H #include "php_syslog.h" diff --git a/main/php_ini.c b/main/php_ini.c index 53c08ae3c4c45..52e3a20ebf685 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -374,13 +374,13 @@ static void php_load_zend_extension_cb(void *arg) efree(orig_libpath); efree(err1); - efree(libpath); } #ifdef PHP_WIN32 if (!php_win32_image_compatible(handle, &err1)) { php_error(E_CORE_WARNING, err1); efree(err1); + efree(libpath); DL_UNLOAD(handle); return; } diff --git a/main/php_network.h b/main/php_network.h index 437069b4fccdd..5c8cee3fa8a3f 100644 --- a/main/php_network.h +++ b/main/php_network.h @@ -49,6 +49,13 @@ # define EWOULDBLOCK EAGAIN #endif +/* This is a work around for GCC bug 69602: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602 */ +#if EAGAIN != EWOULDBLOCK +# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN || err == EWOULDBLOCK) +#else +# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN) +#endif + #ifdef PHP_WIN32 #define php_socket_errno() WSAGetLastError() #else diff --git a/main/php_output.h b/main/php_output.h index 60f389b2b52ba..18f611deceb43 100644 --- a/main/php_output.h +++ b/main/php_output.h @@ -137,7 +137,7 @@ ZEND_BEGIN_MODULE_GLOBALS(output) zend_stack handlers; php_output_handler *active; php_output_handler *running; - const char *output_start_filename; + zend_string *output_start_filename; int output_start_lineno; int flags; ZEND_END_MODULE_GLOBALS(output) diff --git a/main/php_streams.h b/main/php_streams.h index 73740a7a7907c..1bd66686071da 100644 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -550,9 +550,6 @@ END_EXTERN_C() /* Allow blocking reads on anonymous pipes on Windows. */ #define STREAM_USE_BLOCKING_PIPE 0x00008000 -/* Antique - no longer has meaning */ -#define IGNORE_URL_WIN 0 - int php_init_stream_wrappers(int module_number); int php_shutdown_stream_wrappers(int module_number); void php_shutdown_stream_hashes(void); diff --git a/main/php_version.h b/main/php_version.h index 24765617cbe0b..66d4367856e5a 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -1,8 +1,8 @@ /* automatically generated by configure */ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 -#define PHP_MINOR_VERSION 0 +#define PHP_MINOR_VERSION 1 #define PHP_RELEASE_VERSION 0 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.0.0-dev" -#define PHP_VERSION_ID 80000 +#define PHP_VERSION "8.1.0-dev" +#define PHP_VERSION_ID 80100 diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 8a891ddf720ad..0373cc4c94753 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -351,7 +351,7 @@ static ssize_t php_stdiop_write(php_stream *stream, const char *buf, size_t coun ssize_t bytes_written = write(data->fd, buf, count); #endif if (bytes_written < 0) { - if (errno == EWOULDBLOCK || errno == EAGAIN) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { return 0; } if (errno == EINTR) { @@ -420,7 +420,7 @@ static ssize_t php_stdiop_read(php_stream *stream, char *buf, size_t count) } if (ret < 0) { - if (errno == EWOULDBLOCK || errno == EAGAIN) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { /* Not an error. */ ret = 0; } else if (errno == EINTR) { diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index f3370e89f7e69..cd67fcb8ca340 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -75,7 +75,8 @@ static ssize_t php_sockop_write(php_stream *stream, const char *buf, size_t coun if (didwrite <= 0) { char *estr; int err = php_socket_errno(); - if (err == EWOULDBLOCK || err == EAGAIN) { + + if (PHP_IS_TRANSIENT_ERROR(err)) { if (sock->is_blocked) { int retval; @@ -166,7 +167,7 @@ static ssize_t php_sockop_read(php_stream *stream, char *buf, size_t count) err = php_socket_errno(); if (nr_bytes < 0) { - if (err == EAGAIN || err == EWOULDBLOCK) { + if (PHP_IS_TRANSIENT_ERROR(err)) { nr_bytes = 0; } else { stream->eof = 1; diff --git a/run-tests.php b/run-tests.php index 761ef949fe931..4beafa90b287e 100755 --- a/run-tests.php +++ b/run-tests.php @@ -147,7 +147,7 @@ function main(): void $repeat, $result_tests_file, $slow_min_ms, $start_time, $switch, $temp_source, $temp_target, $test_cnt, $test_dirs, $test_files, $test_idx, $test_list, $test_results, $testfile, - $user_tests, $valgrind, $sum_results, $shuffle, $file_cache; + $user_tests, $valgrind, $sum_results, $shuffle, $file_cache, $num_repeats; // Parallel testing global $workers, $workerID; global $context_line_count; @@ -405,6 +405,7 @@ function main(): void $shuffle = false; $workers = null; $context_line_count = 3; + $num_repeats = 1; $cfgtypes = ['show', 'keep']; $cfgfiles = ['skip', 'php', 'clean', 'out', 'diff', 'exp', 'mem']; @@ -608,10 +609,14 @@ function main(): void $shuffle = true; break; case '--asan': + case '--msan': $environment['USE_ZEND_ALLOC'] = 0; $environment['USE_TRACKED_ALLOC'] = 1; $environment['SKIP_ASAN'] = 1; $environment['SKIP_PERF_SENSITIVE'] = 1; + if ($switch === '--msan') { + $environment['SKIP_MSAN'] = 1; + } $lsanSuppressions = __DIR__ . '/azure/lsan-suppressions.txt'; if (file_exists($lsanSuppressions)) { @@ -619,6 +624,10 @@ function main(): void . ':print_suppressions=0'; } break; + case '--repeat': + $num_repeats = (int) $argv[++$i]; + $environment['SKIP_REPEAT'] = 1; + break; //case 'w' case '-': // repeat check with full switch @@ -885,7 +894,7 @@ function write_information(): void 'session' => ['session.auto_start=0'], 'tidy' => ['tidy.clean_output=0'], 'zlib' => ['zlib.output_compression=Off'], - 'xdebug' => ['xdebug.default_enable=0','xdebug.mode=off'], + 'xdebug' => ['xdebug.mode=off'], 'mbstring' => ['mbstring.func_overload=0'], ]; @@ -1798,6 +1807,13 @@ function show_file_block(string $file, string $block, ?string $section = null): } } +function skip_test(string $tested, string $tested_file, string $shortname, string $reason) { + show_result('SKIP', $tested, $tested_file, "reason: $reason"); + junit_init_suite(junit_get_suitename_for($shortname)); + junit_mark_test_as('SKIP', $shortname, $tested, 0, $reason); + return 'SKIPPED'; +} + // // Run an individual test case. // @@ -1814,6 +1830,7 @@ function run_test(string $php, $file, array $env): string global $no_file_cache; global $slow_min_ms; global $preload, $file_cache; + global $num_repeats; // Parallel testing global $workerID; $temp_filenames = null; @@ -1907,6 +1924,10 @@ function run_test(string $php, $file, array $env): string } } + $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); + $tested_file = $shortname; + $tested = trim($section_text['TEST']); + // the redirect section allows a set of tests to be reused outside of // a given test dir if ($bork_info === null) { @@ -1924,6 +1945,10 @@ function run_test(string $php, $file, array $env): string unset($section_text['FILEEOF']); } + if ($num_repeats > 1 && isset($section_text['FILE_EXTERNAL'])) { + return skip_test($tested, $tested_file, $shortname, 'Test with FILE_EXTERNAL might not be repeatable'); + } + foreach (['FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX'] as $prefix) { $key = $prefix . '_EXTERNAL'; @@ -1947,9 +1972,6 @@ function run_test(string $php, $file, array $env): string } fclose($fp); - $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); - $tested_file = $shortname; - if ($bork_info !== null) { show_result("BORK", $bork_info, $tested_file); $PHP_FAILED_TESTS['BORKED'][] = [ @@ -1979,8 +2001,6 @@ function run_test(string $php, $file, array $env): string $cmdRedirect = ''; } - $tested = trim($section_text['TEST']); - /* For GET/POST/PUT tests, check if cgi sapi is available and if it is, use it. */ if (array_key_exists('CGI', $section_text) || !empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['GZIP_POST']) || !empty($section_text['DEFLATE_POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['PUT']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) { if (isset($php_cgi)) { @@ -1995,13 +2015,12 @@ function run_test(string $php, $file, array $env): string } elseif (file_exists(dirname($php) . "/php-cgi")) { $php = realpath(dirname($php) . "/php-cgi") . ' -C '; } else { - show_result('SKIP', $tested, $tested_file, "reason: CGI not available"); - - junit_init_suite(junit_get_suitename_for($shortname)); - junit_mark_test_as('SKIP', $shortname, $tested, 0, 'CGI not available'); - return 'SKIPPED'; + return skip_test($tested, $tested_file, $shortname, 'CGI not available'); } } + if ($num_repeats > 1) { + return skip_test($tested, $tested_file, $shortname, 'CGI does not support --repeat'); + } $uses_cgi = true; } @@ -2019,11 +2038,22 @@ function run_test(string $php, $file, array $env): string // be run straight away. For example, EXTENSIONS, SKIPIF, CLEAN. $extra_options = '-rr'; } else { - show_result('SKIP', $tested, $tested_file, "reason: phpdbg not available"); + return skip_test($tested, $tested_file, $shortname, 'phpdbg not available'); + } + if ($num_repeats > 1) { + return skip_test($tested, $tested_file, $shortname, 'phpdbg does not support --repeat'); + } + } - junit_init_suite(junit_get_suitename_for($shortname)); - junit_mark_test_as('SKIP', $shortname, $tested, 0, 'phpdbg not available'); - return 'SKIPPED'; + if ($num_repeats > 1) { + if (array_key_exists('CLEAN', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with CLEAN might not be repeatable'); + } + if (array_key_exists('STDIN', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with STDIN might not be repeatable'); + } + if (array_key_exists('CAPTURE_STDIO', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with CAPTURE_STDIO might not be repeatable'); } } @@ -2169,6 +2199,9 @@ function run_test(string $php, $file, array $env): string // even though all the files are re-created. $ini_settings['opcache.validate_timestamps'] = '0'; } + } else if ($num_repeats > 1) { + // Make sure warnings still show up on the second run. + $ini_settings['opcache.record_warnings'] = '1'; } // Any special ini settings @@ -2179,6 +2212,10 @@ function run_test(string $php, $file, array $env): string $replacement = IS_WINDOWS ? '"' . PHP_BINARY . ' -r \"while ($in = fgets(STDIN)) echo $in;\" > $1"' : 'tee $1 >/dev/null'; $section_text['INI'] = preg_replace('/{MAIL:(\S+)}/', $replacement, $section_text['INI']); settings2array(preg_split("/[\n\r]+/", $section_text['INI']), $ini_settings); + + if ($num_repeats > 1 && isset($ini_settings['opcache.opt_debug_level'])) { + return skip_test($tested, $tested_file, $shortname, 'opt_debug_level tests are not repeatable'); + } } $ini_settings = settings2params($ini_settings); @@ -2480,7 +2517,8 @@ function run_test(string $php, $file, array $env): string $env['CONTENT_TYPE'] = ''; $env['CONTENT_LENGTH'] = ''; - $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args$cmdRedirect"; + $repeat_option = $num_repeats > 1 ? "--repeat $num_repeats" : ""; + $cmd = "$php $pass_options $repeat_option $ini_settings -f \"$test_file\" $args$cmdRedirect"; } if ($valgrind) { @@ -2553,6 +2591,25 @@ function run_test(string $php, $file, array $env): string } } + if ($num_repeats > 1) { + // In repeat mode, retain the output before the first execution, + // and of the last execution. Do this early, because the trimming below + // makes the newline handling complicated. + $separator1 = "Executing for the first time...\n"; + $separator1_pos = strpos($out, $separator1); + if ($separator1_pos !== false) { + $separator2 = "Finished execution, repeating...\n"; + $separator2_pos = strrpos($out, $separator2); + if ($separator2_pos !== false) { + $out = substr($out, 0, $separator1_pos) + . substr($out, $separator2_pos + strlen($separator2)); + } else { + $out = substr($out, 0, $separator1_pos) + . substr($out, $separator1_pos + strlen($separator1)); + } + } + } + // Does the output match what is expected? $output = preg_replace("/\r\n/", "\n", trim($out)); diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index 8048085ebe0ee..d1d538345f888 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -914,12 +914,9 @@ static int sapi_cgi_activate(void) if (fcgi_is_fastcgi()) { fcgi_request *request = (fcgi_request*) SG(server_context); - /* Prefer CONTEXT_DOCUMENT_ROOT if set */ - doc_root = FCGI_GETENV(request, "CONTEXT_DOCUMENT_ROOT"); - doc_root = doc_root ? doc_root : FCGI_GETENV(request, "DOCUMENT_ROOT"); + doc_root = FCGI_GETENV(request, "DOCUMENT_ROOT"); } else { - doc_root = getenv("CONTEXT_DOCUMENT_ROOT"); - doc_root = doc_root ? doc_root : getenv("DOCUMENT_ROOT"); + doc_root = getenv("DOCUMENT_ROOT"); } /* DOCUMENT_ROOT should also be defined at this stage..but better check it anyway */ if (doc_root) { diff --git a/sapi/cli/generate_mime_type_map.php b/sapi/cli/generate_mime_type_map.php index ca479d20d1725..04f741f6e17f9 100755 --- a/sapi/cli/generate_mime_type_map.php +++ b/sapi/cli/generate_mime_type_map.php @@ -3,7 +3,7 @@ // Check if we are being given a mime.types file or if we should use the // default URL. -$source = count($argv) > 1 ? $argv[1] : 'https://cdn.jsdelivr.net/gh/jshttp/mime-db@v1.44.0/db.json'; +$source = count($argv) > 1 ? $argv[1] : 'https://cdn.jsdelivr.net/gh/jshttp/mime-db@v1.45.0/db.json'; // See if we can actually load it. $data = @file_get_contents($source); diff --git a/sapi/cli/mime_type_map.h b/sapi/cli/mime_type_map.h index 743586e378168..46921c4ec35c1 100644 --- a/sapi/cli/mime_type_map.h +++ b/sapi/cli/mime_type_map.h @@ -77,11 +77,13 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "atx", "application/vnd.antix.game-component" }, { "au", "audio/basic" }, { "avi", "video/x-msvideo" }, + { "avif", "image/avif" }, { "aw", "application/applixware" }, { "azf", "application/vnd.airzip.filesecure.azf" }, { "azs", "application/vnd.airzip.filesecure.azs" }, { "azv", "image/vnd.airzip.accelerator.azv" }, { "azw", "application/vnd.amazon.ebook" }, + { "b16", "image/vnd.pco.b16" }, { "bat", "application/x-msdownload" }, { "bcpio", "application/x-bcpio" }, { "bdf", "application/x-font-bdf" }, @@ -190,6 +192,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "dart", "application/vnd.dart" }, { "dataless", "application/vnd.fdsn.seed" }, { "davmount", "application/davmount+xml" }, + { "dbf", "application/vnd.dbf" }, { "dbk", "application/docbook+xml" }, { "dcr", "application/x-director" }, { "dcurl", "text/vnd.curl.dcurl" }, @@ -460,7 +463,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "kar", "audio/midi" }, { "karbon", "application/vnd.kde.karbon" }, { "kdbx", "application/x-keepass2" }, - { "keynote", "application/vnd.apple.keynote" }, + { "key", "application/vnd.apple.keynote" }, { "kfo", "application/vnd.kde.kformula" }, { "kia", "application/vnd.kidspiration" }, { "kml", "application/vnd.google-earth.kml+xml" }, @@ -474,6 +477,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "ksp", "application/vnd.kde.kspread" }, { "ktr", "application/vnd.kahootz" }, { "ktx", "image/ktx" }, + { "ktx2", "image/ktx2" }, { "ktz", "application/vnd.kahootz" }, { "kwd", "application/vnd.kde.kword" }, { "kwt", "application/vnd.kde.kword" }, @@ -780,7 +784,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "ram", "audio/x-pn-realaudio" }, { "raml", "application/raml+yaml" }, { "rapd", "application/route-apd+xml" }, - { "rar", "application/x-rar-compressed" }, + { "rar", "application/vnd.rar" }, { "ras", "image/x-cmu-raster" }, { "rcprofile", "application/vnd.ipunplugged.rcprofile" }, { "rdf", "application/rdf+xml" }, @@ -890,6 +894,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "snf", "application/x-font-snf" }, { "so", "application/octet-stream" }, { "spc", "application/x-pkcs7-certificates" }, + { "spdx", "text/spdx" }, { "spf", "application/vnd.yamaha.smaf-phrase" }, { "spl", "application/x-futuresplash" }, { "spot", "text/vnd.in3d.spot" }, @@ -944,6 +949,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "tar", "application/x-tar" }, { "tcap", "application/vnd.3gpp2.tcap" }, { "tcl", "application/x-tcl" }, + { "td", "application/urc-targetdesc+xml" }, { "teacher", "application/vnd.smart.teacher" }, { "tei", "application/tei+xml" }, { "teicorpus", "application/tei+xml" }, @@ -984,6 +990,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = { { "u8hdr", "message/global-headers" }, { "u8mdn", "message/global-disposition-notification" }, { "u8msg", "message/global" }, + { "ubj", "application/ubjson" }, { "udeb", "application/x-debian-package" }, { "ufd", "application/vnd.ufdl" }, { "ufdl", "application/vnd.ufdl" }, diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index d28f5a5378b6e..5092fb0ffd681 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -172,6 +172,9 @@ const opt_struct OPTIONS[] = { {14, 1, "ri"}, {14, 1, "rextinfo"}, {15, 0, "ini"}, + /* Internal testing option -- may be changed or removed without notice, + * including in patch releases. */ + {16, 1, "repeat"}, {'-', 0, NULL} /* end of args */ }; @@ -529,7 +532,7 @@ static void php_cli_usage(char *argv0) static php_stream *s_in_process = NULL; -static void cli_register_file_handles(void) /* {{{ */ +static void cli_register_file_handles(zend_bool no_close) /* {{{ */ { php_stream *s_in, *s_out, *s_err; php_stream_context *sc_in=NULL, *sc_out=NULL, *sc_err=NULL; @@ -546,11 +549,11 @@ static void cli_register_file_handles(void) /* {{{ */ return; } -#if PHP_DEBUG - /* do not close stdout and stderr */ - s_out->flags |= PHP_STREAM_FLAG_NO_CLOSE; - s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; -#endif + if (no_close) { + s_in->flags |= PHP_STREAM_FLAG_NO_CLOSE; + s_out->flags |= PHP_STREAM_FLAG_NO_CLOSE; + s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; + } s_in_process = s_in; @@ -614,6 +617,8 @@ static int do_cli(int argc, char **argv) /* {{{ */ int interactive=0; const char *param_error=NULL; int hide_argv = 0; + int num_repeats = 1; + pid_t pid = getpid(); zend_try { @@ -839,6 +844,9 @@ static int do_cli(int argc, char **argv) /* {{{ */ case 15: behavior = PHP_MODE_SHOW_INI_CONFIG; break; + case 16: + num_repeats = atoi(php_optarg); + break; default: break; } @@ -873,6 +881,12 @@ static int do_cli(int argc, char **argv) /* {{{ */ fflush(stdout); } + if (num_repeats > 1) { + fprintf(stdout, "Executing for the first time...\n"); + fflush(stdout); + } + +do_repeat: /* only set script_file if not set already and not in direct mode and not at end of parameter list */ if (argc > php_optind && !script_file @@ -940,7 +954,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ switch (behavior) { case PHP_MODE_STANDARD: if (strcmp(file_handle.filename, "Standard input code")) { - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); } if (interactive && cli_shell_callbacks.cli_shell_run) { @@ -975,7 +989,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ } break; case PHP_MODE_CLI_DIRECT: - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); zend_eval_string_ex(exec_direct, NULL, "Command line code", 1); break; @@ -985,7 +999,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ size_t len, index = 0; zval argn, argi; - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); if (exec_begin) { zend_eval_string_ex(exec_begin, NULL, "Command line begin code", 1); @@ -1112,6 +1126,12 @@ static int do_cli(int argc, char **argv) /* {{{ */ if (translated_path) { free(translated_path); } + /* Don't repeat fork()ed processes. */ + if (--num_repeats && pid == getpid()) { + fprintf(stdout, "Finished execution, repeating...\n"); + fflush(stdout); + goto do_repeat; + } return EG(exit_status); err: sapi_deactivate(); diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index a32b51e3d3649..636e1de122395 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -1879,12 +1879,8 @@ static size_t php_cli_server_client_send_through(php_cli_server_client *client, int nfds = php_pollfd_for(client->sock, POLLOUT, &tv); if (nfds > 0) { continue; - } else if (nfds < 0) { - /* error */ - php_handle_aborted_connection(); - return nbytes_left; } else { - /* timeout */ + /* error or timeout */ php_handle_aborted_connection(); return nbytes_left; } diff --git a/sapi/cli/tests/005.phpt b/sapi/cli/tests/005.phpt index ca3dfd97302d3..990ea01327a7c 100644 --- a/sapi/cli/tests/005.phpt +++ b/sapi/cli/tests/005.phpt @@ -37,7 +37,7 @@ string(183) "Class [ class stdClass ] { } " -string(2170) "Class [ class Exception implements Throwable, Stringable ] { +string(2194) "Class [ class Exception implements Throwable, Stringable ] { - Constants [0] { } @@ -63,6 +63,7 @@ string(2170) "Class [ class Exception implements Throwable, Stri - Parameters [0] { } + - Return [ void ] } Method [ public method __construct ] { diff --git a/sapi/cli/tests/CONFLICTS b/sapi/cli/tests/CONFLICTS deleted file mode 100644 index 254defddb53c5..0000000000000 --- a/sapi/cli/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/sapi/cli/tests/bug61977.phpt b/sapi/cli/tests/bug61977.phpt index b55c6a2e8ffb0..e804e0dfce55b 100644 --- a/sapi/cli/tests/bug61977.phpt +++ b/sapi/cli/tests/bug61977.phpt @@ -7,7 +7,7 @@ include "skipif.inc"; --FILE-- ', null); +$doc_root = php_cli_server_start('', null)->docRoot; /* * If a Mime Type is added in php_cli_server.c, add it to this array and update @@ -15,32 +15,29 @@ php_cli_server_start('', null); */ $mimetypes = ['html', 'htm', 'svg', 'css', 'js', 'png', 'webm', 'ogv', 'ogg']; -function test_mimetypes($mimetypes) { - foreach ($mimetypes as $mimetype) { - $host = PHP_CLI_SERVER_HOSTNAME; - $fp = php_cli_server_connect(); - if (!$fp) die('Connect failed'); - file_put_contents(__DIR__ . "/foo.{$mimetype}", ''); - $header = <<
", $text; - } + if (fwrite($fp, $header)) { + while (!feof($fp)) { + $text = fgets($fp); + if (strncasecmp("Content-type:", $text, 13) == 0) { + echo "foo.{$mimetype} => ", $text; } - @unlink(__DIR__ . "/foo.{$mimetype}"); - fclose($fp); } + @unlink($doc_root . "/foo.{$mimetype}"); + fclose($fp); } } -test_mimetypes($mimetypes); ?> --EXPECT-- foo.html => Content-Type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug67429_1.phpt b/sapi/cli/tests/bug67429_1.phpt index 5b23818bdb088..551946334036d 100644 --- a/sapi/cli/tests/bug67429_1.phpt +++ b/sapi/cli/tests/bug67429_1.phpt @@ -8,7 +8,7 @@ include "skipif.inc"; docRoot; +file_put_contents($docRoot . '/bug68291+test.html', 'Found'); echo file_get_contents('http://' . PHP_CLI_SERVER_ADDRESS . '/bug68291+test.html'); -?> ---CLEAN-- - --EXPECT-- Found diff --git a/sapi/cli/tests/bug69655.phpt b/sapi/cli/tests/bug69655.phpt index b5612357f9016..4ab53bcbaae0d 100644 --- a/sapi/cli/tests/bug69655.phpt +++ b/sapi/cli/tests/bug69655.phpt @@ -17,11 +17,11 @@ foreach (['MKCO', 'MKCOLL', 'M'] as $method) { } ?> --EXPECTF-- -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d diff --git a/sapi/cli/tests/ext_loading.phpt b/sapi/cli/tests/ext_loading.phpt new file mode 100644 index 0000000000000..220302da629df --- /dev/null +++ b/sapi/cli/tests/ext_loading.phpt @@ -0,0 +1,65 @@ +--TEST-- +Extension loading +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Only extension name: +Output: Done. +Name with file extension: +Output: Done. +Absolute path: +Output: Done. +Unknown extension name (unknown): +Output: +Warning: Failed loading Zend extension 'unknown_ext' (tried: %s) in Unknown on line 0 +Done. +Name with file extension (unknown): +Output: +Warning: Failed loading Zend extension '%Sunknown_ext%S' (tried: %s) in Unknown on line 0 +Done. +Absolute path (unknown): +Output: Failed loading %s +Done. diff --git a/sapi/cli/tests/php_cli_server.inc b/sapi/cli/tests/php_cli_server.inc index 4cf8705a333fd..26bdd4c18f9f2 100644 --- a/sapi/cli/tests/php_cli_server.inc +++ b/sapi/cli/tests/php_cli_server.inc @@ -1,22 +1,29 @@ '); } - $cmd = [$php_executable, '-t', $doc_root, '-n', ...$cmd_args, '-S', PHP_CLI_SERVER_ADDRESS]; + $cmd = [$php_executable, '-t', $doc_root, '-n', ...$cmd_args, '-S', 'localhost:0']; if (!is_null($router)) { $cmd[] = $router; } @@ -24,62 +31,58 @@ function php_cli_server_start( $descriptorspec = array( 0 => STDIN, 1 => STDOUT, - 2 => array("null"), + 2 => ['pipe', 'w'], ); $handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root, null, array("suppress_errors" => true)); - // note: here we check the process is running - for ($i=0; $i < 120; $i++) { + // First, wait for the dev server to declare itself ready. + $bound = null; + stream_set_blocking($pipes[2], false); + for ($i = 0; $i < 60; $i++) { + usleep(50000); // 50ms per try $status = proc_get_status($handle); + if (empty($status['running'])) { + echo "Server is not running\n"; + proc_terminate($handle); + exit(1); + } - if (!$status || !$status['running']) { - if ($status && - ($status['running'] == false && $status['exitcode'] != 0)) { - $error = - "Server could not be started\n"; - break; + while (($line = fgets($pipes[2])) !== false) { + if (preg_match('@PHP \S* Development Server \(https?://(.*?:\d+)\) started@', $line, $matches)) { + $bound = $matches[1]; + // Now that we've identified the listen address, close STDERR. + // Otherwise the pipe may clog up with unread log messages. + fclose($pipes[2]); + break 2; } - - usleep(50000); // 50ms per try - continue; } + } + if ($bound === null) { + echo "Server did not output startup message"; + proc_terminate($handle); + exit(1); + } - if ($status['signaled']) { - $error = - "Server was terminated with {$status['termsig']}\n"; + // Now wait for a connection to succeed. + // note: even when server prints 'Listening on localhost:8964...Press Ctrl-C to quit.' + // it might not be listening yet...need to wait until fsockopen() call returns + $error = "Unable to connect to server\n"; + for ($i=0; $i < 60; $i++) { + usleep(50000); // 50ms per try + $status = proc_get_status($handle); + $fp = @fsockopen("tcp://$bound"); + // Failure, the server is no longer running + if (!($status && $status['running'])) { + $error = "Server is not running\n"; break; } - - if ($status['stopped']) { - $error = - "Server was stopped with {$status['stopsig']}\n"; + // Success, Connected to servers + if ($fp) { + $error = ''; break; } - - // note: here we check the server is listening, even when the server prints - // listening on %s:%d - // it may not be ready to accept connections - $start = time(); - - for ($try = 0; $try < 120; $try++) { - $error = @fsockopen( - PHP_CLI_SERVER_HOSTNAME, PHP_CLI_SERVER_PORT) ? - null : - sprintf( - "Server is not accepting connections after %d seconds\n", - time() - $start); - - if (!$error) { - break 2; - } - - usleep(50000); - } - - break; } -php_cli_server_start_error: if ($error) { echo $error; proc_terminate($handle); @@ -87,14 +90,21 @@ php_cli_server_start_error: } register_shutdown_function( - function($handle) use($router) { + function($handle) use($router, $doc_root) { proc_terminate($handle); @unlink(__DIR__ . "/{$router}"); + @rmdir($doc_root); }, $handle ); - return $handle; + // Define the same "constants" we previously did. + $port = (int) substr($bound, strrpos($bound, ':') + 1); + define("PHP_CLI_SERVER_HOSTNAME", "localhost"); + define("PHP_CLI_SERVER_PORT", $port); + define("PHP_CLI_SERVER_ADDRESS", PHP_CLI_SERVER_HOSTNAME.":".PHP_CLI_SERVER_PORT); + + return new CliServerInfo($doc_root); } function php_cli_server_connect() { diff --git a/sapi/cli/tests/php_cli_server_002.phpt b/sapi/cli/tests/php_cli_server_002.phpt index e1fbd9039817b..2daf6aad73107 100644 --- a/sapi/cli/tests/php_cli_server_002.phpt +++ b/sapi/cli/tests/php_cli_server_002.phpt @@ -13,8 +13,8 @@ php_cli_server_start('var_dump($_SERVER["DOCUMENT_ROOT"], $_SERVER["SERVER_SOFTW var_dump(file_get_contents("http://" . PHP_CLI_SERVER_ADDRESS)); ?> --EXPECTF-- -string(%d) "string(%d) "%stests" +string(%d) "string(%d) "%sphp_cli_server_002" string(%d) "PHP %s Development Server" string(%d) "localhost" -string(%d) "8964" +string(%d) "%s" " diff --git a/sapi/cli/tests/php_cli_server_012.phpt b/sapi/cli/tests/php_cli_server_012.phpt index 6262aa2c734e1..9824c63c40408 100644 --- a/sapi/cli/tests/php_cli_server_012.phpt +++ b/sapi/cli/tests/php_cli_server_012.phpt @@ -7,8 +7,8 @@ include "skipif.inc"; --FILE-- docRoot; file_put_contents($doc_root . '/request.php', ''); $host = PHP_CLI_SERVER_HOSTNAME; diff --git a/sapi/cli/tests/php_cli_server_015.phpt b/sapi/cli/tests/php_cli_server_015.phpt index af48758306443..5821fdbbc2e95 100644 --- a/sapi/cli/tests/php_cli_server_015.phpt +++ b/sapi/cli/tests/php_cli_server_015.phpt @@ -9,10 +9,9 @@ display_errors=1 --FILE-- docRoot; -file_put_contents($dir . "/syntax_error.php", ""); +file_put_contents($doc_root . "/syntax_error.php", ""); $output = ''; $host = PHP_CLI_SERVER_HOSTNAME; @@ -30,7 +29,7 @@ HEADER } } echo $output; -@unlink($dir . "/syntax_error.php"); +@unlink($doc_root . "/syntax_error.php"); fclose($fp); ?> --EXPECTF-- diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 84b9e5958a9a2..7c11b3af8a308 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -729,10 +729,7 @@ static int sapi_cgi_activate(void) /* {{{ */ /* Load and activate user ini files in path starting from DOCUMENT_ROOT */ if (PG(user_ini_filename) && *PG(user_ini_filename)) { - /* Prefer CONTEXT_DOCUMENT_ROOT if set */ - doc_root = FCGI_GETENV(request, "CONTEXT_DOCUMENT_ROOT"); - doc_root = doc_root ? doc_root : FCGI_GETENV(request, "DOCUMENT_ROOT"); - + doc_root = FCGI_GETENV(request, "DOCUMENT_ROOT"); /* DOCUMENT_ROOT should also be defined at this stage..but better check it anyway */ if (doc_root) { doc_root_len = strlen(doc_root); diff --git a/sapi/fpm/fpm/fpm_stdio.c b/sapi/fpm/fpm/fpm_stdio.c index 1742467b36816..42ea1594301af 100644 --- a/sapi/fpm/fpm/fpm_stdio.c +++ b/sapi/fpm/fpm/fpm_stdio.c @@ -10,6 +10,7 @@ #include #include "php_syslog.h" +#include "php_network.h" #include "fpm.h" #include "fpm_children.h" @@ -166,7 +167,7 @@ static void fpm_stdio_child_said(struct fpm_event_s *ev, short which, void *arg) stdio_read: in_buf = read(fd, buf, max_buf_size - 1); if (in_buf <= 0) { /* no data */ - if (in_buf == 0 || (errno != EAGAIN && errno != EWOULDBLOCK)) { + if (in_buf == 0 || !PHP_IS_TRANSIENT_ERROR(errno)) { /* pipe is closed or error */ read_fail = (in_buf < 0) ? in_buf : 1; } diff --git a/tests/basic/bug67198.phpt b/tests/basic/bug67198.phpt index e5ffe3bf6cbe3..c89dfd49da260 100644 --- a/tests/basic/bug67198.phpt +++ b/tests/basic/bug67198.phpt @@ -2,8 +2,6 @@ php://input is empty when enable_post_data_reading=Off --INI-- allow_url_fopen=1 ---CONFLICTS-- -server --SKIPIF--