diff options
| author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:35:13 -0400 |
|---|---|---|
| committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:35:13 -0400 |
| commit | 0a36161e13484a99ccf69bb38f206462d27cc6d6 (patch) | |
| tree | d5107db4b7369603ac7c753829e8972ee74949f7 /Zend | |
| parent | ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61 (diff) | |
| download | php-upstream/5.1.2.tar.gz | |
Imported Upstream version 5.1.2upstream/5.1.2
Diffstat (limited to 'Zend')
120 files changed, 2885 insertions, 6921 deletions
diff --git a/Zend/LICENSE b/Zend/LICENSE index 67256f196..8acb9af4f 100644 --- a/Zend/LICENSE +++ b/Zend/LICENSE @@ -1,6 +1,6 @@ -------------------------------------------------------------------- The Zend Engine License, Version 2.00 -Copyright (c) 1999-2005 Zend Technologies Ltd. All rights reserved. +Copyright (c) 1999-2006 Zend Technologies Ltd. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without diff --git a/Zend/Makefile.am b/Zend/Makefile.am index 42ae4d542..bd55716b3 100644 --- a/Zend/Makefile.am +++ b/Zend/Makefile.am @@ -15,7 +15,7 @@ libZend_la_SOURCES=\ zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \ zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \ zend_objects_API.c zend_ts_hash.c zend_stream.c zend_mm.c \ - zend_default_classes.c zend_reflection_api.c \ + zend_default_classes.c \ zend_iterators.c zend_interfaces.c zend_exceptions.c \ zend_strtod.c zend_multibyte.c diff --git a/Zend/Zend.dsp b/Zend/Zend.dsp index 83791c0c4..93ecdf90b 100644 --- a/Zend/Zend.dsp +++ b/Zend/Zend.dsp @@ -227,10 +227,6 @@ SOURCE=.\zend_qsort.c # End Source File
# Begin Source File
-SOURCE=.\zend_reflection_api.c
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
@@ -407,10 +403,6 @@ SOURCE=.\zend_qsort.h # End Source File
# Begin Source File
-SOURCE=.\zend_reflection_api.h
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
diff --git a/Zend/ZendTS.dsp b/Zend/ZendTS.dsp index 830f97efd..abc6fe766 100644 --- a/Zend/ZendTS.dsp +++ b/Zend/ZendTS.dsp @@ -260,10 +260,6 @@ SOURCE=.\zend_qsort.c # End Source File
# Begin Source File
-SOURCE=.\zend_reflection_api.c
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
@@ -444,10 +440,6 @@ SOURCE=.\zend_qsort.h # End Source File
# Begin Source File
-SOURCE=.\zend_reflection_api.h
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
diff --git a/Zend/acconfig.h b/Zend/acconfig.h index 809b07bef..991153073 100644 --- a/Zend/acconfig.h +++ b/Zend/acconfig.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: acconfig.h,v 1.40 2005/08/03 13:30:45 sniper Exp $ */ +/* $Id: acconfig.h,v 1.40.2.1 2006/01/04 23:53:03 andi Exp $ */ #define ZEND_API #define ZEND_DLEXPORT diff --git a/Zend/header b/Zend/header index 2f8acff51..4dd603ff9 100644 --- a/Zend/header +++ b/Zend/header @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,4 +16,4 @@ +----------------------------------------------------------------------+ */ -/* $Id: header,v 1.1 2005/01/10 14:57:35 sniper Exp $ */ +/* $Id: header,v 1.1.2.1 2006/01/04 23:53:03 andi Exp $ */ diff --git a/Zend/tests/bug26077.phpt b/Zend/tests/bug26077.phpt index 16d9b5af9..ea2a80273 100755 --- a/Zend/tests/bug26077.phpt +++ b/Zend/tests/bug26077.phpt @@ -1,5 +1,5 @@ --TEST--
-Bug #26077 Memory leaks when creating an instance of an object
+Bug #26077 (Memory leaks when creating an instance of an object)
--FILE--
<?php
class foo {} new foo();
diff --git a/Zend/tests/bug26695.phpt b/Zend/tests/bug26695.phpt deleted file mode 100755 index 38e6607c3..000000000 --- a/Zend/tests/bug26695.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST--
-Bug #26695 (Reflection API does not recognize mixed-case class hints)
---FILE--
-<?php
-
-class Foo {
-}
-
-class Bar {
- function demo(foo $f) {
- }
-}
-
-$class = new ReflectionClass('bar');
-$methods = $class->getMethods();
-$params = $methods[0]->getParameters();
-
-$class = $params[0]->getClass();
-
-var_dump($class->getName());
-?>
-===DONE===
---EXPECT--
-string(3) "Foo"
-===DONE===
\ No newline at end of file diff --git a/Zend/tests/bug29210.phpt b/Zend/tests/bug29210.phpt index f43ff57f5..d9a931fda 100644 --- a/Zend/tests/bug29210.phpt +++ b/Zend/tests/bug29210.phpt @@ -89,10 +89,14 @@ if (is_callable(array('test_class','test_func4'))) { $object = new foo();
$object->test();
?>
---EXPECT--
+--EXPECTF--
test_func1
test_func2
+
+Strict Standards: Non-static method test_class::test_func3() cannot be called statically, assuming $this from compatible context test_class in %sbug29210.php on line %d
test_func3
+
+Strict Standards: Non-static method test_class::test_func4() cannot be called statically, assuming $this from compatible context test_class in %sbug29210.php on line %d
test_func4
test_func1 isn't callable from outside
test_func2 isn't callable from outside
@@ -100,5 +104,9 @@ test_func3 isn't callable from outside test_func4 isn't callable from outside
test_func1 isn't callable from child
test_func2
+
+Strict Standards: Non-static method test_class::test_func3() cannot be called statically, assuming $this from compatible context foo in %sbug29210.php on line %d
test_func3 isn't callable from child
+
+Strict Standards: Non-static method test_class::test_func4() cannot be called statically, assuming $this from compatible context foo in %sbug29210.php on line %d
test_func4
diff --git a/Zend/tests/bug29268.phpt b/Zend/tests/bug29268.phpt deleted file mode 100755 index 335ee7337..000000000 --- a/Zend/tests/bug29268.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST--
-Bug #29268 (__autoload() not called with reflectionProperty->getClass())
---FILE--
-<?php
-function __autoload($classname) {
- echo "__autoload($classname)\n";
- eval("class $classname {}");
-}
-
-class B{
- public function doit(A $a){
- }
-}
-
-$ref = new reflectionMethod('B','doit');
-$parameters = $ref->getParameters();
-foreach($parameters as $parameter){
- $class = $parameter->getClass();
- echo $class->name."\n";
-}
-echo "ok\n";
-?>
---EXPECT--
-__autoload(A)
-A
-ok
diff --git a/Zend/tests/bug29523.phpt b/Zend/tests/bug29523.phpt deleted file mode 100755 index 4eb357cc2..000000000 --- a/Zend/tests/bug29523.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST--
-Bug #29523 (ReflectionParameter::isOptional() is incorrect)
---FILE--
-<?php
-
-class TestClass
-{
-}
-
-function optionalTest(TestClass $a, TestClass $b, $c = 3)
-{
-}
-
-$function = new ReflectionFunction('optionalTest');
-$numberOfNotOptionalParameters = 0;
-$numberOfOptionalParameters = 0;
-foreach($function->getParameters() as $parameter)
-{
- var_dump($parameter->isOptional());
- if ($parameter->isOptional())
- {
- ++$numberOfOptionalParameters;
- }
- else
- {
- ++$numberOfNotOptionalParameters;
- }
-}
-var_dump($function->getNumberOfRequiredParameters());
-var_dump($numberOfNotOptionalParameters);
-
-?>
---EXPECT--
-bool(false)
-bool(false)
-bool(true)
-int(2)
-int(2)
diff --git a/Zend/tests/bug29828.phpt b/Zend/tests/bug29828.phpt deleted file mode 100755 index e1c9bbd36..000000000 --- a/Zend/tests/bug29828.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST--
-Bug #29828 (Interfaces no longer work)
---FILE--
-<?php
-
-interface Bla
-{
- function bla();
-}
-
-class BlaMore implements Bla
-{
- function bla()
- {
- echo "Hello\n";
- }
-}
-
-$r = new ReflectionClass('BlaMore');
-
-var_dump(count($r->getMethods()));
-var_dump($r->getMethod('bla')->isConstructor());
-var_dump($r->getMethod('bla')->isAbstract());
-
-$o=new BlaMore;
-$o->bla();
-
-?>
-===DONE===
---EXPECT--
-int(1)
-bool(false)
-bool(false)
-Hello
-===DONE===
diff --git a/Zend/tests/bug30346.phpt b/Zend/tests/bug30346.phpt index f92c45c79..30f36fbde 100755 --- a/Zend/tests/bug30346.phpt +++ b/Zend/tests/bug30346.phpt @@ -1,24 +1,24 @@ ---TEST--
-Bug 30346 (arrayAcces & using $this)
---FILE--
-<?php
-
-class Test implements ArrayAccess
-{
- public function __construct() { }
- public function offsetExists( $offset ) { return false; }
- public function offsetGet( $offset ) { return $offset; }
- public function offsetSet( $offset, $data ) { }
- public function offsetUnset( $offset ) { }
-}
-
-$post = new Test;
-$id = 'page';
-echo $post[$id.'_show'];
-echo "\n";
-
-?>
-===DONE===
---EXPECT--
-page_show
-===DONE===
\ No newline at end of file +--TEST-- +Bug #30346 (arrayAccess and using $this) +--FILE-- +<?php + +class Test implements ArrayAccess +{ + public function __construct() { } + public function offsetExists( $offset ) { return false; } + public function offsetGet( $offset ) { return $offset; } + public function offsetSet( $offset, $data ) { } + public function offsetUnset( $offset ) { } +} + +$post = new Test; +$id = 'page'; +echo $post[$id.'_show']; +echo "\n"; + +?> +===DONE=== +--EXPECT-- +page_show +===DONE=== diff --git a/Zend/tests/bug30856.phpt b/Zend/tests/bug30856.phpt deleted file mode 100755 index 6c6d3171a..000000000 --- a/Zend/tests/bug30856.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST--
-Bug #30856 (ReflectionClass::getStaticProperties segfaults)
---FILE--
-<?php
-class bogus {
- const C = 'test';
- static $a = bogus::C;
-}
-
-$class = new ReflectionClass('bogus');
-
-var_dump($class->getStaticProperties());
-?>
-===DONE===
---EXPECT--
-array(1) {
- ["a"]=>
- string(4) "test"
-}
-===DONE===
diff --git a/Zend/tests/bug30961.phpt b/Zend/tests/bug30961.phpt deleted file mode 100755 index 67964343e..000000000 --- a/Zend/tests/bug30961.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST--
-Bug #30961 (Wrong linenumber in ReflectionClass getStartLine())
---FILE--
-<?php
- class a
- {
- }
-
- class b extends a
- {
- }
-
- $ref1 = new ReflectionClass('a');
- $ref2 = new ReflectionClass('b');
- echo $ref1->getStartLine() . "\n";
- echo $ref2->getStartLine() . "\n";
-?>
---EXPECT--
-2
-6
diff --git a/Zend/tests/bug31177-2.phpt b/Zend/tests/bug31177-2.phpt index b18258805..a2d922c91 100755 --- a/Zend/tests/bug31177-2.phpt +++ b/Zend/tests/bug31177-2.phpt @@ -1,5 +1,5 @@ --TEST--
-Bug #31177 (menory corruption because of incorrect refcounting)
+Bug #31177 (memory corruption because of incorrect refcounting)
--FILE--
<?php
class foo {
diff --git a/Zend/tests/bug32290.phpt b/Zend/tests/bug32290.phpt index f754275cc..c03808377 100755 --- a/Zend/tests/bug32290.phpt +++ b/Zend/tests/bug32290.phpt @@ -7,7 +7,31 @@ class TestA { public function doSomething($i) { - echo __METHOD__ . "($this)\n"; + echo __METHOD__ . "($i)\n"; + return --$i; + } + + public function doSomethingThis($i) + { + echo __METHOD__ . "($i)\n"; + return --$i; + } + + public function doSomethingParent($i) + { + echo __METHOD__ . "($i)\n"; + return --$i; + } + + public function doSomethingParentThis($i) + { + echo __METHOD__ . "($i)\n"; + return --$i; + } + + public static function doSomethingStatic($i) + { + echo __METHOD__ . "($i)\n"; return --$i; } } @@ -16,20 +40,87 @@ class TestB extends TestA { public function doSomething($i) { - echo __METHOD__ . "($this)\n"; + echo __METHOD__ . "($i)\n"; + $i++; + if ($i >= 5) return 5; + return call_user_func_array(array("TestA", "doSomething"), array($i)); + } + + public function doSomethingThis($i) + { + echo __METHOD__ . "($i)\n"; + $i++; + if ($i >= 5) return 5; + return call_user_func_array(array($this, "TestA::doSomethingThis"), array($i)); + } + + public function doSomethingParent($i) + { + echo __METHOD__ . "($i)\n"; + $i++; + if ($i >= 5) return 5; + return call_user_func_array(array("parent", "doSomethingParent"), array($i)); + } + + public function doSomethingParentThis($i) + { + echo __METHOD__ . "($i)\n"; $i++; if ($i >= 5) return 5; - return call_user_func_array(array("TestA","doSomething"), array($i)); + return call_user_func_array(array($this, "parent::doSomethingParentThis"), array($i)); + } + + public static function doSomethingStatic($i) + { + echo __METHOD__ . "($i)\n"; + $i++; + if ($i >= 5) return 5; + return call_user_func_array(array("TestA", "doSomethingStatic"), array($i)); } } $x = new TestB(); +echo "===A===\n"; var_dump($x->doSomething(1)); +echo "\n===B===\n"; +var_dump($x->doSomethingThis(1)); +echo "\n===C===\n"; +var_dump($x->doSomethingParent(1)); +echo "\n===D===\n"; +var_dump($x->doSomethingParentThis(1)); +echo "\n===E===\n"; +var_dump($x->doSomethingStatic(1)); ?> ===DONE=== +<?php exit(0); ?> --EXPECTF-- -TestB::doSomething(Object id #%d) -TestA::doSomething(Object id #%d) +===A=== +TestB::doSomething(1) + +Strict Standards: Non-static method TestA::doSomething() cannot be called statically, assuming $this from compatible context TestB in %sbug32290.php on line %d +TestA::doSomething(2) +int(1) + +===B=== +TestB::doSomethingThis(1) +TestA::doSomethingThis(2) +int(1) + +===C=== +TestB::doSomethingParent(1) + +Strict Standards: Non-static method TestA::doSomethingParent() cannot be called statically, assuming $this from compatible context TestB in %sbug32290.php on line %d +TestA::doSomethingParent(2) +int(1) + +===D=== +TestB::doSomethingParentThis(1) +TestA::doSomethingParentThis(2) +int(1) + +===E=== +TestB::doSomethingStatic(1) +TestA::doSomethingStatic(2) int(1) ===DONE=== diff --git a/Zend/tests/bug32981.phpt b/Zend/tests/bug32981.phpt deleted file mode 100755 index 1f89ca682..000000000 --- a/Zend/tests/bug32981.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -Bug #32981 (ReflectionMethod::getStaticVariables() causes apache2.0.54 seg fault) ---FILE-- -<?php - -class TestClass -{ - static function test() - { - static $enabled = true; - } -} - -$class = new ReflectionClass('TestClass'); -foreach ($class->getMethods() as $method) -{ - var_dump($method->getName()); - $arr_static_vars[] = $method->getStaticVariables(); -} - -var_dump($arr_static_vars); - -?> -===DONE=== ---EXPECT-- -string(4) "test" -array(1) { - [0]=> - array(1) { - ["enabled"]=> - bool(true) - } -} -===DONE=== diff --git a/Zend/tests/bug33312.phpt b/Zend/tests/bug33312.phpt deleted file mode 100755 index 3784b56a6..000000000 --- a/Zend/tests/bug33312.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST--
-Bug #33312 (ReflectionParameter methods do not work correctly)
---FILE--
-<?php
-class Foo {
- public function bar(Foo $foo, $bar = 'bar') {
- }
-}
-
-$class = new ReflectionClass('Foo');
-$method = $class->getMethod('bar');
-
-foreach ($method->getParameters() as $parameter) {
- if ($parameter->isDefaultValueAvailable()) {
- print $parameter->getDefaultValue()."\n";
- }
-}
-?>
---EXPECT--
-bar
diff --git a/Zend/tests/bug35393.phpt b/Zend/tests/bug35393.phpt new file mode 100755 index 000000000..059621c9f --- /dev/null +++ b/Zend/tests/bug35393.phpt @@ -0,0 +1,30 @@ +--TEST--
+Bug #35393 (changing static protected members from outside the class)
+--INI--
+error_reporting=4095
+--FILE--
+<?php
+class ObjectPath
+{
+ static protected $type = array(0=>'main');
+
+ static function getType()
+ {
+ return self::$type;
+ }
+}
+print_r(ObjectPath::getType());
+$object_type = array_pop((ObjectPath::getType()));
+print_r(ObjectPath::getType());
+?>
+--EXPECTF--
+Array
+(
+ [0] => main
+)
+
+Strict Standards: Only variables should be passed by reference in %sbug35393.php on line 12
+Array
+(
+ [0] => main
+)
diff --git a/Zend/tests/bug35437.phpt b/Zend/tests/bug35437.phpt new file mode 100755 index 000000000..7d6241ba5 --- /dev/null +++ b/Zend/tests/bug35437.phpt @@ -0,0 +1,27 @@ +--TEST--
+Bug #35437 Segfault or Invalid Opcode 137/1/4
+--FILE--
+<?php
+function err2exception($errno, $errstr)
+{
+ throw new Exception("Error occuried: " . $errstr);
+}
+
+set_error_handler('err2exception');
+
+class TestClass
+{
+ function testMethod()
+ {
+ $GLOBALS['t'] = new stdClass;
+ }
+}
+
+try {
+ TestClass::testMethod();
+} catch (Exception $e) {
+ echo "Catched: ".$e->getMessage()."\n";
+}
+?>
+--EXPECT--
+Catched: Error occuried: Non-static method TestClass::testMethod() should not be called statically
diff --git a/Zend/tests/bug35470.phpt b/Zend/tests/bug35470.phpt new file mode 100755 index 000000000..3d708862c --- /dev/null +++ b/Zend/tests/bug35470.phpt @@ -0,0 +1,11 @@ +--TEST--
+Bug #35470 (Assigning global using variable name from array doesn't function)
+--FILE--
+<?php
+$x = array("test", "55");
+global ${$x[0]};
+${$x[0]} = $x[1];
+echo "Test: $test\n";;
+?>
+--EXPECT--
+Test: 55
diff --git a/Zend/tests/bug35509.phpt b/Zend/tests/bug35509.phpt new file mode 100755 index 000000000..6cb54c03e --- /dev/null +++ b/Zend/tests/bug35509.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #35509 (string constant as array key has different behavior inside object) +--FILE-- +<?php +class mytest +{ + const classConstant = '01'; + + private $classArray = array( mytest::classConstant => 'value' ); + + public function __construct() + { + print_r($this->classArray); + } +} + +$classtest = new mytest(); + +define( "normalConstant", '01' ); +$normalArray = array( normalConstant => 'value' ); +print_r($normalArray); +?> +--EXPECT-- +Array +( + [01] => value +) +Array +( + [01] => value +) diff --git a/Zend/tests/bug35655.phpt b/Zend/tests/bug35655.phpt new file mode 100755 index 000000000..e35764a60 --- /dev/null +++ b/Zend/tests/bug35655.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #35655 (whitespace following end of heredoc is lost) +--INI-- +highlight.string = #DD0000 +highlight.comment = #FF8000 +highlight.keyword = #007700 +highlight.bg = #FFFFFF +highlight.default = #0000BB +highlight.html = #000000 +--FILE-- +<?php +$code = ' +<?php + $x = <<<EOT +some string +EOT + $y = 2; +?>'; +highlight_string($code); +?> +--EXPECT-- +<code><span style="color: #000000"> +<br /><span style="color: #0000BB"><?php<br /> $x </span><span style="color: #007700">= <<<EOT<br /></span><span style="color: #0000BB">some string <br /></span><span style="color: #007700">EOT<br /> </span><span style="color: #0000BB">$y </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span> +</span> +</code> diff --git a/Zend/zend.c b/Zend/zend.c index 7382d952f..8ba0f2b49 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.c,v 1.308.2.4 2005/11/15 13:29:28 dmitry Exp $ */ +/* $Id: zend.c,v 1.308.2.7 2006/01/04 23:53:03 andi Exp $ */ #include "zend.h" #include "zend_extensions.h" @@ -102,7 +102,7 @@ ZEND_API zval zval_used_for_init; /* True global variable */ /* version information */ static char *zend_version_info; static uint zend_version_info_length; -#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2005 Zend Technologies\n" +#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2006 Zend Technologies\n" #define PRINT_ZVAL_INDENT 4 @@ -453,6 +453,13 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS compiler_globals->auto_globals = (HashTable *) malloc(sizeof(HashTable)); zend_hash_init_ex(compiler_globals->auto_globals, 8, NULL, NULL, 1, 0); zend_hash_copy(compiler_globals->auto_globals, global_auto_globals_table, NULL, NULL, sizeof(zend_auto_global) /* empty element */); + + compiler_globals->last_static_member = zend_hash_num_elements(compiler_globals->class_table); + if (compiler_globals->last_static_member) { + compiler_globals->static_members = (HashTable**)calloc(compiler_globals->last_static_member, sizeof(HashTable*)); + } else { + compiler_globals->static_members = NULL; + } } @@ -470,6 +477,10 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS zend_hash_destroy(compiler_globals->auto_globals); free(compiler_globals->auto_globals); } + if (compiler_globals->static_members) { + free(compiler_globals->static_members); + } + compiler_globals->last_static_member = 0; } @@ -1035,7 +1046,7 @@ ZEND_API void zend_error(int type, const char *format, ...) } } -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((alias("zend_error"),noreturn)); #endif diff --git a/Zend/zend.h b/Zend/zend.h index 3462759c4..e99898d07 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.293.2.6 2005/11/26 21:03:44 iliaa Exp $ */ +/* $Id: zend.h,v 1.293.2.9 2006/01/04 23:53:03 andi Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -250,7 +250,7 @@ char *alloca (); #define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC #define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, return_value_ptr, this_ptr, return_value_used TSRMLS_CC -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) # define ZEND_VM_ALWAYS_INLINE __attribute__ ((always_inline)) void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((noreturn)); #else @@ -279,16 +279,8 @@ typedef struct _zend_object { HashTable *guards; /* protects from __get/__set ... recursion */ } zend_object; -typedef unsigned int zend_object_handle; -typedef struct _zend_object_value zend_object_value; - #include "zend_object_handlers.h" -struct _zend_object_value { - zend_object_handle handle; - zend_object_handlers *handlers; -}; - typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 59a3d1e0a..b7b6aeafe 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_API.c,v 1.296.2.12 2005/11/23 18:51:44 tony2001 Exp $ */ +/* $Id: zend_API.c,v 1.296.2.16 2006/01/06 20:55:14 tony2001 Exp $ */ #include "zend.h" #include "zend_execute.h" @@ -755,22 +755,26 @@ ZEND_API void zend_merge_properties(zval *obj, HashTable *properties, int destro ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC) { - if (!class_type->constants_updated || !class_type->static_members) { + if (!class_type->constants_updated || !CE_STATIC_MEMBERS(class_type)) { zend_class_entry **scope = EG(in_execution)?&EG(scope):&CG(active_class_entry); zend_class_entry *old_scope = *scope; *scope = class_type; zend_hash_apply_with_argument(&class_type->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC); - if (!class_type->static_members) { + if (!CE_STATIC_MEMBERS(class_type)) { HashPosition pos; zval **p; if (class_type->parent) { zend_update_class_constants(class_type->parent TSRMLS_CC); } +#if ZTS + ALLOC_HASHTABLE(CG(static_members)[(long)(class_type->static_members)]); +#else ALLOC_HASHTABLE(class_type->static_members); - zend_hash_init(class_type->static_members, 0, NULL, ZVAL_PTR_DTOR, 0); +#endif + zend_hash_init(CE_STATIC_MEMBERS(class_type), 0, NULL, ZVAL_PTR_DTOR, 0); zend_hash_internal_pointer_reset_ex(&class_type->default_static_members, &pos); while (zend_hash_get_current_data_ex(&class_type->default_static_members, (void**)&p, &pos) == SUCCESS) { @@ -784,10 +788,10 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC class_type->parent && zend_hash_find(&class_type->parent->default_static_members, str_index, str_length, (void**)&q) == SUCCESS && *p == *q && - zend_hash_find(class_type->parent->static_members, str_index, str_length, (void**)&q) == SUCCESS) { + zend_hash_find(CE_STATIC_MEMBERS(class_type->parent), str_index, str_length, (void**)&q) == SUCCESS) { (*q)->refcount++; (*q)->is_ref = 1; - zend_hash_add(class_type->static_members, str_index, str_length, (void**)q, sizeof(zval*), NULL); + zend_hash_add(CE_STATIC_MEMBERS(class_type), str_index, str_length, (void**)q, sizeof(zval*), NULL); } else { zval *q; @@ -795,12 +799,12 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC *q = **p; INIT_PZVAL(q); zval_copy_ctor(q); - zend_hash_add(class_type->static_members, str_index, str_length, (void**)&q, sizeof(zval*), NULL); + zend_hash_add(CE_STATIC_MEMBERS(class_type), str_index, str_length, (void**)&q, sizeof(zval*), NULL); } zend_hash_move_forward_ex(&class_type->default_static_members, &pos); } } - zend_hash_apply_with_argument(class_type->static_members, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC); + zend_hash_apply_with_argument(CE_STATIC_MEMBERS(class_type), (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC); *scope = old_scope; class_type->constants_updated = 1; @@ -1970,15 +1974,94 @@ ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_ return 1; } -ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char **callable_name, int *callable_name_len, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval ***zobj_ptr_ptr TSRMLS_DC) +static int zend_is_callable_check_func(int check_flags, zval **zobj_ptr, zend_class_entry *ce_org, zval *callable, zend_class_entry **ce_ptr, zend_function **fptr_ptr TSRMLS_DC) { + int retval; char *lcname, *lmname, *colon; + int clen, mlen; + zend_function *fptr; + zend_class_entry **pce; + HashTable *ftable; + + *ce_ptr = NULL; + *fptr_ptr = NULL; + + if ((colon = strstr(Z_STRVAL_P(callable), "::")) != NULL) { + clen = colon - Z_STRVAL_P(callable); + mlen = Z_STRLEN_P(callable) - clen - 2; + if (zend_lookup_class(Z_STRVAL_P(callable), clen, &pce TSRMLS_CC) == SUCCESS) { + *ce_ptr = *pce; + } else { + lcname = zend_str_tolower_dup(Z_STRVAL_P(callable), clen); + /* caution: lcname is not '\0' terminated */ + if (clen == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self") - 1) == 0) { + *ce_ptr = EG(scope); + } else if (clen == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent") - 1) == 0 && EG(active_op_array)->scope) { + *ce_ptr = EG(scope) ? EG(scope)->parent : NULL; + } + efree(lcname); + } + if (!*ce_ptr) { + return 0; + } + ftable = &(*ce_ptr)->function_table; + if (ce_org && !instanceof_function(ce_org, *ce_ptr TSRMLS_CC)) { + return 0; + } + lmname = zend_str_tolower_dup(Z_STRVAL_P(callable) + clen + 2, mlen); + } else { + mlen = Z_STRLEN_P(callable); + lmname = zend_str_tolower_dup(Z_STRVAL_P(callable), mlen); + if (ce_org) { + ftable = &ce_org->function_table; + *ce_ptr = ce_org; + } else { + ftable = EG(function_table); + } + } + + retval = zend_hash_find(ftable, lmname, mlen+1, (void**)&fptr) == SUCCESS ? 1 : 0; + + if (!retval) { + if (zobj_ptr && *ce_ptr && (*ce_ptr)->__call != 0) { + retval = (*ce_ptr)->__call != NULL; + *fptr_ptr = (*ce_ptr)->__call; + } + } else { + *fptr_ptr = fptr; + if (*ce_ptr) { + if (!zobj_ptr && !(fptr->common.fn_flags & ZEND_ACC_STATIC)) { + if ((check_flags & IS_CALLABLE_CHECK_IS_STATIC) != 0) { + retval = 0; + } else { + zend_error(E_STRICT, "Non-static method %s::%s() cannot be called statically", (*ce_ptr)->name, fptr->common.function_name); + } + } + if (retval && (check_flags & IS_CALLABLE_CHECK_NO_ACCESS) == 0) { + if (fptr->op_array.fn_flags & ZEND_ACC_PRIVATE) { + if (!zend_check_private(fptr, zobj_ptr ? Z_OBJCE_PP(zobj_ptr) : EG(scope), lmname, mlen TSRMLS_CC)) { + retval = 0; + } + } else if ((fptr->common.fn_flags & ZEND_ACC_PROTECTED)) { + if (!zend_check_protected(fptr->common.scope, EG(scope))) { + retval = 0; + } + } + } + } + } + efree(lmname); + return retval; +} + +ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char **callable_name, int *callable_name_len, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval ***zobj_ptr_ptr TSRMLS_DC) +{ + char *lcname; zend_bool retval = 0; - int callable_name_len_local, clen, mlen; + int callable_name_len_local; zend_class_entry *ce_local, **pce; zend_function *fptr_local; zval **zobj_ptr_local; - HashTable *ftable; if (callable_name_len == NULL) { callable_name_len = &callable_name_len_local; @@ -2006,33 +2089,7 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char ** return 1; } - if ((colon = strstr(Z_STRVAL_P(callable), "::")) != NULL) { - clen = colon - Z_STRVAL_P(callable); - mlen = Z_STRLEN_P(callable) - clen - 2; - lcname = estrndup(Z_STRVAL_P(callable), clen); - lcname[clen] = '\0'; - lmname = zend_str_tolower_dup(Z_STRVAL_P(callable) + clen + 2, mlen); - if (zend_lookup_class(lcname, clen, &pce TSRMLS_CC) == FAILURE) { - efree(lcname); - efree(lmname); - return 0; - } - efree(lcname); - *ce_ptr = *pce; - ftable = &(*ce_ptr)->function_table; - } else { - mlen = Z_STRLEN_P(callable); - lmname = zend_str_tolower_dup(Z_STRVAL_P(callable), mlen); - ftable = EG(function_table); - } - - if (zend_hash_find(ftable, lmname, mlen+1, (void**)fptr_ptr) == SUCCESS) { - retval = 1; - } - if (*ce_ptr && *fptr_ptr && !((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC)) { - retval = 0; - } - efree(lmname); + retval = zend_is_callable_check_func(check_flags|IS_CALLABLE_CHECK_IS_STATIC, NULL, NULL, callable, ce_ptr, fptr_ptr TSRMLS_CC); break; case IS_ARRAY: @@ -2061,7 +2118,6 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char ** } if (check_flags & IS_CALLABLE_CHECK_SYNTAX_ONLY) { - *ce_ptr = ce; return 1; } @@ -2076,6 +2132,12 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char ** } efree(lcname); } + if (EG(This)) { + if (instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { + *zobj_ptr_ptr = &EG(This); + zend_error(E_STRICT, "Non-static method %s::%s() cannot be called statically, assuming $this from compatible context %s", ce->name, Z_STRVAL_PP(method), Z_OBJCE_P(EG(This))->name); + } + } } else { ce = Z_OBJCE_PP(obj); /* TBFixed: what if it's overloaded? */ @@ -2100,38 +2162,12 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char ** } if (ce) { - zend_function *fbc; - - lcname = zend_str_tolower_dup(Z_STRVAL_PP(method), Z_STRLEN_PP(method)); - if (zend_hash_find(&ce->function_table, lcname, Z_STRLEN_PP(method)+1, (void **)&fbc) == SUCCESS) { - retval = 1; - if ((check_flags & IS_CALLABLE_CHECK_NO_ACCESS) == 0) { - if (fbc->op_array.fn_flags & ZEND_ACC_PRIVATE) { - if (!zend_check_private(fbc, (Z_TYPE_PP(obj) == IS_STRING)?EG(scope):(*obj)->value.obj.handlers->get_class_entry(*obj TSRMLS_CC), lcname, Z_STRLEN_PP(method) TSRMLS_CC)) { - retval = 0; - } - } else if ((fbc->common.fn_flags & ZEND_ACC_PROTECTED)) { - if (!zend_check_protected(fbc->common.scope, EG(scope))) { - retval = 0; - } - } - } - *fptr_ptr = fbc; - } - /* check for __call too */ - if (retval == 0 && *zobj_ptr_ptr && ce->__call != 0) { - retval = 1; - *fptr_ptr = ce->__call; - } - efree(lcname); + retval = zend_is_callable_check_func(check_flags, *zobj_ptr_ptr, ce, *method, ce_ptr, fptr_ptr TSRMLS_CC); } } else if (callable_name) { *callable_name = estrndup("Array", sizeof("Array")-1); *callable_name_len = sizeof("Array") - 1; } - if ((check_flags & IS_CALLABLE_CHECK_IS_STATIC) != 0 && !*zobj_ptr_ptr && (!*fptr_ptr || !((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC))) { - retval = 0; - } *ce_ptr = ce; } break; diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 0eb4bb8b9..7daaf3c41 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_API.h,v 1.207.2.3 2005/10/28 14:46:29 dmitry Exp $ */ +/* $Id: zend_API.h,v 1.207.2.6 2006/01/04 23:53:03 andi Exp $ */ #ifndef ZEND_API_H #define ZEND_API_H @@ -146,6 +146,12 @@ typedef struct _zend_function_entry { #define INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset) \ INIT_OVERLOADED_CLASS_ENTRY_EX(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset, NULL, NULL) +#ifdef ZTS +# define CE_STATIC_MEMBERS(ce) (((ce)->type==ZEND_USER_CLASS)?(ce)->static_members:CG(static_members)[(long)(ce)->static_members]) +#else +# define CE_STATIC_MEMBERS(ce) ((ce)->static_members) +#endif + int zend_next_free_module(void); BEGIN_EXTERN_C() @@ -198,6 +204,8 @@ ZEND_API void zend_wrong_param_count(TSRMLS_D); #define IS_CALLABLE_CHECK_NO_ACCESS (1<<1) #define IS_CALLABLE_CHECK_IS_STATIC (1<<2) +#define IS_CALLABLE_STRICT (IS_CALLABLE_CHECK_IS_STATIC) + ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char **callable_name, int *callable_name_len, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval ***zobj_ptr_ptr TSRMLS_DC); ZEND_API zend_bool zend_is_callable(zval *callable, uint check_flags, char **callable_name); ZEND_API zend_bool zend_make_callable(zval *callable, char **callable_name TSRMLS_DC); diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index cdfa7c6de..e50b96f9a 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_alloc.c,v 1.144.2.1 2005/08/18 15:14:12 iliaa Exp $ */ +/* $Id: zend_alloc.c,v 1.144.2.3 2006/01/04 23:53:03 andi Exp $ */ #include "zend.h" #include "zend_alloc.h" @@ -558,6 +558,7 @@ ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC) grand_total_leaks++; if (!silent) { + zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL); zend_message_dispatcher(ZMSG_MEMORY_LEAK_DETECTED, t); } t->reported = 1; diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h index a2d54dec9..8e25aed16 100644 --- a/Zend/zend_alloc.h +++ b/Zend/zend_alloc.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_alloc.h,v 1.63 2005/08/03 13:30:47 sniper Exp $ */ +/* $Id: zend_alloc.h,v 1.63.2.2 2006/01/04 23:53:03 andi Exp $ */ #ifndef ZEND_ALLOC_H #define ZEND_ALLOC_H @@ -125,6 +125,7 @@ ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZE #else +#undef _GNU_SOURCE #define _GNU_SOURCE #include <string.h> #undef _GNU_SOURCE diff --git a/Zend/zend_arg_defs.c b/Zend/zend_arg_defs.c index 603dccdeb..53dbfaf13 100644 --- a/Zend/zend_arg_defs.c +++ b/Zend/zend_arg_defs.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_arg_defs.c,v 1.2 2005/01/10 14:57:35 sniper Exp $ */ +/* $Id: zend_arg_defs.c,v 1.2.2.1 2006/01/04 23:53:04 andi Exp $ */ ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0) ZEND_ARG_PASS_INFO(1) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 62b265a59..fd2e1b343 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.c,v 1.277.2.6 2005/11/24 05:07:27 sebastian Exp $ */ +/* $Id: zend_builtin_functions.c,v 1.277.2.8 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_API.h" @@ -738,7 +738,7 @@ ZEND_FUNCTION(get_class_vars) array_init(return_value); add_class_vars(*pce, &(*pce)->default_properties, return_value TSRMLS_CC); zend_update_class_constants(*pce TSRMLS_CC); - add_class_vars(*pce, (*pce)->static_members, return_value TSRMLS_CC); + add_class_vars(*pce, CE_STATIC_MEMBERS(*pce), return_value TSRMLS_CC); } } /* }}} */ diff --git a/Zend/zend_builtin_functions.h b/Zend/zend_builtin_functions.h index f000bb21e..073ed3e06 100644 --- a/Zend/zend_builtin_functions.h +++ b/Zend/zend_builtin_functions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.h,v 1.17.2.1 2005/11/24 05:07:28 sebastian Exp $ */ +/* $Id: zend_builtin_functions.h,v 1.17.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_BUILTIN_FUNCTIONS_H #define ZEND_BUILTIN_FUNCTIONS_H diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 3c4761d28..50e1ba836 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.647.2.18 2005/11/27 06:39:27 iliaa Exp $ */ +/* $Id: zend_compile.c,v 1.647.2.21 2006/01/04 23:53:04 andi Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -1841,6 +1841,12 @@ static void do_inherit_parent_constructor(zend_class_entry *ce) ce->destructor = ce->parent->destructor; } if (ce->constructor) { + if (ce->parent->constructor && ce->parent->constructor->common.fn_flags & ZEND_ACC_FINAL) { + zend_error(E_ERROR, "Cannot override final %s::%s() with %s::%s()", + ce->parent->name, ce->parent->constructor->common.function_name, + ce->name, ce->constructor->common.function_name + ); + } return; } @@ -2090,7 +2096,9 @@ static zend_bool do_inherit_property_access_check(HashTable *target_ht, zend_pro if (parent_ce->type != ce->type) { /* User class extends internal class */ - ht = parent_ce->static_members; + TSRMLS_FETCH(); + + ht = CE_STATIC_MEMBERS(parent_ce); } else { ht = &parent_ce->default_static_members; } @@ -2196,7 +2204,7 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent if (parent_ce->type != ce->type) { /* User class extends internal class */ zend_update_class_constants(parent_ce TSRMLS_CC); - zend_hash_merge(&ce->default_static_members, parent_ce->static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); + zend_hash_merge(&ce->default_static_members, CE_STATIC_MEMBERS(parent_ce), (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); } else { zend_hash_merge(&ce->default_static_members, &parent_ce->default_static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); } @@ -4026,7 +4034,23 @@ ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify zend_hash_init_ex(&ce->constants_table, 0, NULL, zval_ptr_dtor_func, persistent_hashes, 0); zend_hash_init_ex(&ce->function_table, 0, NULL, ZEND_FUNCTION_DTOR, persistent_hashes, 0); - ce->static_members = (ce->type == ZEND_INTERNAL_CLASS) ? NULL : &ce->default_static_members; + if (ce->type == ZEND_INTERNAL_CLASS) { +#ifdef ZTS + int n = zend_hash_num_elements(CG(class_table)); + + if (CG(static_members) && n >= CG(last_static_member)) { + /* Support for run-time declaration: dl() */ + CG(last_static_member) = n+1; + CG(static_members) = realloc(CG(static_members), (n+1)*sizeof(HashTable*)); + CG(static_members)[n] = NULL; + } + ce->static_members = (HashTable*)n; +#else + ce->static_members = NULL; +#endif + } else { + ce->static_members = &ce->default_static_members; + } if (nullify_handlers) { ce->constructor = NULL; diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 6958f6ebb..ae273a644 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.h,v 1.316.2.5 2005/10/20 07:30:42 dmitry Exp $ */ +/* $Id: zend_compile.h,v 1.316.2.6 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_COMPILE_H #define ZEND_COMPILE_H diff --git a/Zend/zend_config.nw.h b/Zend/zend_config.nw.h index db78eefba..47a0df8c2 100644 --- a/Zend/zend_config.nw.h +++ b/Zend/zend_config.nw.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_config.nw.h,v 1.8 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_config.nw.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_CONFIG_NW_H #define ZEND_CONFIG_NW_H diff --git a/Zend/zend_config.w32.h b/Zend/zend_config.w32.h index 3d425efbb..61d07b083 100644 --- a/Zend/zend_config.w32.h +++ b/Zend/zend_config.w32.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_config.w32.h,v 1.39 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_config.w32.h,v 1.39.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_CONFIG_W32_H #define ZEND_CONFIG_W32_H diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index ba5b34743..eda2ab0f8 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_constants.c,v 1.71 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_constants.c,v 1.71.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_constants.h" diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index 98ce3b427..c02e4c531 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_constants.h,v 1.31 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_constants.h,v 1.31.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_CONSTANTS_H #define ZEND_CONSTANTS_H diff --git a/Zend/zend_default_classes.c b/Zend/zend_default_classes.c index abf23e108..50f67cc4d 100644 --- a/Zend/zend_default_classes.c +++ b/Zend/zend_default_classes.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,11 +17,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_default_classes.c,v 1.59 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_default_classes.c,v 1.59.2.2 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_API.h" -#include "zend_reflection_api.h" #include "zend_builtin_functions.h" #include "zend_interfaces.h" #include "zend_exceptions.h" @@ -31,7 +30,6 @@ ZEND_API void zend_register_default_classes(TSRMLS_D) { zend_register_interfaces(TSRMLS_C); zend_register_default_exception(TSRMLS_C); - zend_register_reflection_api(TSRMLS_C); zend_register_iterator_wrapper(TSRMLS_C); } diff --git a/Zend/zend_dynamic_array.c b/Zend/zend_dynamic_array.c index bc350c573..871c1c5bb 100644 --- a/Zend/zend_dynamic_array.c +++ b/Zend/zend_dynamic_array.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_dynamic_array.c,v 1.13 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_dynamic_array.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" diff --git a/Zend/zend_dynamic_array.h b/Zend/zend_dynamic_array.h index 498cf5d43..02008c2e1 100644 --- a/Zend/zend_dynamic_array.h +++ b/Zend/zend_dynamic_array.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_dynamic_array.h,v 1.14 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_dynamic_array.h,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_DYNAMIC_ARRAY_H #define ZEND_DYNAMIC_ARRAY_H diff --git a/Zend/zend_errors.h b/Zend/zend_errors.h index 0be96e0ec..d8f3c0ea7 100644 --- a/Zend/zend_errors.h +++ b/Zend/zend_errors.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_errors.h,v 1.18 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_errors.h,v 1.18.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_ERRORS_H #define ZEND_ERRORS_H diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 38131d045..2889e89a0 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,11 +19,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_exceptions.c,v 1.79.2.2 2005/11/24 05:07:28 sebastian Exp $ */ +/* $Id: zend_exceptions.c,v 1.79.2.6 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_API.h" -#include "zend_reflection_api.h" #include "zend_builtin_functions.h" #include "zend_interfaces.h" #include "zend_exceptions.h" @@ -132,7 +131,7 @@ ZEND_METHOD(exception, __construct) int argc = ZEND_NUM_ARGS(), message_len; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC, "|sl", &message, &message_len, &code) == FAILURE) { - zend_error(E_ERROR, "Wrong parameter count for exception([string $exception [, long $code ]])"); + zend_error(E_ERROR, "Wrong parameters for Exception([string $exception [, long $code ]])"); } object = getThis(); @@ -158,7 +157,7 @@ ZEND_METHOD(error_exception, __construct) int argc = ZEND_NUM_ARGS(), message_len, filename_len; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC, "|sllsl", &message, &message_len, &code, &severity, &filename, &filename_len, &lineno) == FAILURE) { - zend_error(E_ERROR, "Wrong parameter count for exception([string $exception [, long $code ]])"); + zend_error(E_ERROR, "Wrong parameters for ErrorException([string $exception [, long $code, [ long $severity, [ string $filename, [ long $lineno ]]]]])"); } object = getThis(); diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h index 8e7c57219..d0587a34e 100644 --- a/Zend/zend_exceptions.h +++ b/Zend/zend_exceptions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_exceptions.h,v 1.21 2005/08/03 13:30:49 sniper Exp $ */ +/* $Id: zend_exceptions.h,v 1.21.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_EXCEPTIONS_H #define ZEND_EXCEPTIONS_H diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 459708ba1..8dfa0065d 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.716.2.6 2005/11/16 11:52:26 dmitry Exp $ */ +/* $Id: zend_execute.c,v 1.716.2.10 2006/01/04 23:53:04 andi Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -440,6 +440,7 @@ static inline void make_real_object(zval **object_ptr TSRMLS_DC) SEPARATE_ZVAL(object_ptr); } zend_error(E_STRICT, "Creating default object from empty value"); + zval_dtor(*object_ptr); object_init(*object_ptr); } } diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index beec3b5d1..ee105c8e0 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.h,v 1.84.2.3 2005/09/19 17:50:24 dmitry Exp $ */ +/* $Id: zend_execute.h,v 1.84.2.4 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_EXECUTE_H #define ZEND_EXECUTE_H diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index dc1f37082..c7f6c960a 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.331.2.5 2005/11/24 11:33:11 dmitry Exp $ */ +/* $Id: zend_execute_API.c,v 1.331.2.11 2006/01/04 23:53:04 andi Exp $ */ #include <stdio.h> #include <signal.h> @@ -46,6 +46,7 @@ ZEND_API zend_fcall_info_cache empty_fcall_info_cache = { 0, NULL, NULL, NULL }; static WNDCLASS wc; static HWND timeout_window; static HANDLE timeout_thread_event; +static HANDLE timeout_thread_handle; static DWORD timeout_thread_id; static int timeout_thread_initialized=0; #endif @@ -501,17 +502,9 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC) *element = new_val; switch (const_value.type) { - case IS_STRING: { - long lval; - double dval; - - if (is_numeric_string(const_value.value.str.val, const_value.value.str.len, &lval, &dval, 0) == IS_LONG) { - zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_LONG, NULL, 0, lval); - } else { - zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_STRING, const_value.value.str.val, const_value.value.str.len+1, 0); - } + case IS_STRING: + zend_symtable_update_current_key(p->value.ht, const_value.value.str.val, const_value.value.str.len+1); break; - } case IS_BOOL: case IS_LONG: zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_LONG, NULL, 0, const_value.value.lval); @@ -594,6 +587,8 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS zval *method_name; zval *params_array; int call_via_handler = 0; + char *fname, *colon; + int fname_len; if (EG(exception)) { return FAILURE; /* we would result in an instable executor otherwise */ @@ -713,30 +708,62 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS return FAILURE; } + fname = Z_STRVAL_P(fci->function_name); + fname_len = Z_STRLEN_P(fci->function_name); + if (calling_scope && (colon = strstr(fname, "::")) != NULL) { + int clen = colon - fname; + int mlen = fname_len - clen - 2; + zend_class_entry **pce, *ce_child; + if (zend_lookup_class(fname, clen, &pce TSRMLS_CC) == SUCCESS) { + ce_child = *pce; + } else { + char *lcname = zend_str_tolower_dup(fname, clen); + /* caution: lcname is not '\0' terminated */ + if (clen == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self") - 1) == 0) { + ce_child = EG(active_op_array) ? EG(active_op_array)->scope : NULL; + } else if (clen == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent") - 1) == 0 && EG(active_op_array)->scope) { + ce_child = EG(active_op_array) && EG(active_op_array)->scope ? EG(scope)->parent : NULL; + } + efree(lcname); + } + if (!ce_child) { + zend_error(E_ERROR, "Cannot call method %s() or method does not exist", fname); + return FAILURE; + } + if (!instanceof_function(calling_scope, ce_child TSRMLS_CC)) { + zend_error(E_ERROR, "Cannot call method %s() of class %s which is not a derived from %s", fname, ce_child->name, calling_scope->name); + return 0; + } + fci->function_table = &ce_child->function_table; + calling_scope = ce_child; + fname = fname + clen + 2; + fname_len = mlen; + } + if (fci->object_pp) { if (Z_OBJ_HT_PP(fci->object_pp)->get_method == NULL) { zend_error(E_ERROR, "Object does not support method calls"); } EX(function_state).function = - Z_OBJ_HT_PP(fci->object_pp)->get_method(fci->object_pp, Z_STRVAL_P(fci->function_name), Z_STRLEN_P(fci->function_name) TSRMLS_CC); + Z_OBJ_HT_PP(fci->object_pp)->get_method(fci->object_pp, fname, fname_len TSRMLS_CC); if (EX(function_state).function && calling_scope != EX(function_state).function->common.scope) { - char *function_name_lc = zend_str_tolower_dup(Z_STRVAL_P(fci->function_name), Z_STRLEN_P(fci->function_name)); - if (zend_hash_find(&calling_scope->function_table, function_name_lc, fci->function_name->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) { + char *function_name_lc = zend_str_tolower_dup(fname, fname_len); + if (zend_hash_find(&calling_scope->function_table, function_name_lc, fname_len+1, (void **) &EX(function_state).function)==FAILURE) { efree(function_name_lc); - zend_error(E_ERROR, "Cannot call method %s::%s() or method does not exist", calling_scope->name, Z_STRVAL_P(fci->function_name)); + zend_error(E_ERROR, "Cannot call method %s::%s() or method does not exist", calling_scope->name, fname); } efree(function_name_lc); } } else if (calling_scope) { - char *function_name_lc = zend_str_tolower_dup(Z_STRVAL_P(fci->function_name), Z_STRLEN_P(fci->function_name)); + char *function_name_lc = zend_str_tolower_dup(fname, fname_len); EX(function_state).function = - zend_std_get_static_method(calling_scope, function_name_lc, Z_STRLEN_P(fci->function_name) TSRMLS_CC); + zend_std_get_static_method(calling_scope, function_name_lc, fname_len TSRMLS_CC); efree(function_name_lc); } else { - char *function_name_lc = zend_str_tolower_dup(Z_STRVAL_P(fci->function_name), Z_STRLEN_P(fci->function_name)); + char *function_name_lc = zend_str_tolower_dup(fname, fname_len); - if (zend_hash_find(fci->function_table, function_name_lc, fci->function_name->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) { + if (zend_hash_find(fci->function_table, function_name_lc, fname_len+1, (void **) &EX(function_state).function)==FAILURE) { EX(function_state).function = NULL; } efree(function_name_lc); @@ -920,7 +947,7 @@ ZEND_API int zend_lookup_class_ex(char *name, int name_length, int use_autoload, zval **args[1]; zval autoload_function; zval *class_name_ptr; - zval *retval_ptr; + zval *retval_ptr = NULL; int retval; char *lc_name; zval *exception; @@ -1003,6 +1030,8 @@ ZEND_API int zend_lookup_class_ex(char *name, int name_length, int use_autoload, } if (!EG(exception)) { EG(exception) = exception; + } + if (retval_ptr) { zval_ptr_dtor(&retval_ptr); } @@ -1255,6 +1284,7 @@ static unsigned __stdcall timeout_thread_proc(void *pArgs) } DestroyWindow(timeout_window); UnregisterClass(wc.lpszClassName, NULL); + SetEvent(timeout_thread_handle); return 0; } @@ -1262,6 +1292,7 @@ static unsigned __stdcall timeout_thread_proc(void *pArgs) void zend_init_timeout_thread() { timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); + timeout_thread_handle = CreateEvent(NULL, FALSE, FALSE, NULL); _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id); WaitForSingleObject(timeout_thread_event, INFINITE); } @@ -1273,6 +1304,10 @@ void zend_shutdown_timeout_thread() return; } PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0); + + /* Wait for thread termination */ + WaitForSingleObject(timeout_thread_handle, 5000); + CloseHandle(timeout_thread_handle); } #endif diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index c92162cc2..e498235f9 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_extensions.c,v 1.48 2005/08/03 13:30:52 sniper Exp $ */ +/* $Id: zend_extensions.c,v 1.48.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend_extensions.h" diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 50a204c38..5a87967f8 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_extensions.h,v 1.67.2.2 2005/10/25 23:19:59 helly Exp $ */ +/* $Id: zend_extensions.h,v 1.67.2.3 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_EXTENSIONS_H #define ZEND_EXTENSIONS_H diff --git a/Zend/zend_fast_cache.h b/Zend/zend_fast_cache.h index c3b4010d9..d990e5824 100644 --- a/Zend/zend_fast_cache.h +++ b/Zend/zend_fast_cache.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_fast_cache.h,v 1.21 2005/08/03 13:30:52 sniper Exp $ */ +/* $Id: zend_fast_cache.h,v 1.21.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_FAST_CACHE_H #define ZEND_FAST_CACHE_H diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 91ebb9bd6..7c0997883 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals.h,v 1.141.2.1 2005/11/15 13:29:28 dmitry Exp $ */ +/* $Id: zend_globals.h,v 1.141.2.3 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_GLOBALS_H #define ZEND_GLOBALS_H @@ -144,6 +144,11 @@ struct _zend_compiler_globals { zend_encoding_converter encoding_converter; zend_encoding_oddlen encoding_oddlen; #endif /* ZEND_MULTIBYTE */ + +#ifdef ZTS + HashTable **static_members; + int last_static_member; +#endif }; diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h index 4e6cc700b..75c221f79 100644 --- a/Zend/zend_globals_macros.h +++ b/Zend/zend_globals_macros.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals_macros.h,v 1.22 2005/08/03 13:30:52 sniper Exp $ */ +/* $Id: zend_globals_macros.h,v 1.22.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_GLOBALS_MACROS_H #define ZEND_GLOBALS_MACROS_H diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 68ca6cb55..d37a6737b 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_hash.c,v 1.121 2005/08/03 13:30:52 sniper Exp $ */ +/* $Id: zend_hash.c,v 1.121.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 6969512cf..3fab17b45 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_hash.h,v 1.78 2005/08/03 13:30:52 sniper Exp $ */ +/* $Id: zend_hash.h,v 1.78.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_HASH_H #define ZEND_HASH_H @@ -353,6 +353,12 @@ static inline int zend_symtable_exists(HashTable *ht, char *arKey, uint nKeyLeng return zend_hash_exists(ht, arKey, nKeyLength); } +static inline int zend_symtable_update_current_key(HashTable *ht, char *arKey, uint nKeyLength) +{ + HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_update_current_key(ht, HASH_KEY_IS_LONG, NULL, 0, idx)); + return zend_hash_update_current_key(ht, HASH_KEY_IS_STRING, arKey, nKeyLength, 0); +} + #endif /* ZEND_HASH_H */ /* diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 23cad7053..86f111868 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_highlight.c,v 1.49.2.1 2005/11/27 06:39:28 iliaa Exp $ */ +/* $Id: zend_highlight.c,v 1.49.2.3 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include <zend_language_parser.h> @@ -94,7 +94,7 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini int token_type; char *last_color = syntax_highlighter_ini->highlight_html; char *next_color; - int in_string=0, post_heredoc = 0; + int in_string=0; zend_printf("<code>"); zend_printf("<span style=\"color: %s\">\n", last_color); @@ -151,14 +151,9 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini switch (token_type) { case T_END_HEREDOC: zend_html_puts(token.value.str.val, token.value.str.len TSRMLS_CC); - post_heredoc = 1; break; default: zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng) TSRMLS_CC); - if (post_heredoc) { - zend_html_putc('\n'); - post_heredoc = 0; - } break; } @@ -215,19 +210,18 @@ ZEND_API void zend_strip(TSRMLS_D) case EOF: return; - case T_END_HEREDOC: { - char *ptr = LANG_SCNG(yy_text); - - zend_write(ptr, LANG_SCNG(yy_leng) - 1); - /* The ensure that we only write one ; and that it followed by the required newline */ - zend_write("\n", sizeof("\n") - 1); - if (ptr[LANG_SCNG(yy_leng) - 1] == ';') { - lex_scan(&token TSRMLS_CC); - } - efree(token.value.str.val); + case T_END_HEREDOC: + zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); + efree(token.value.str.val); + /* read the following character, either newline or ; */ + if (lex_scan(&token TSRMLS_CC) != T_WHITESPACE) { + zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); } - break; - + zend_write("\n", sizeof("\n") - 1); + prev_space = 1; + token.type = 0; + continue; + default: zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); break; diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h index c448928d3..e90d1dd56 100644 --- a/Zend/zend_highlight.h +++ b/Zend/zend_highlight.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_highlight.h,v 1.25 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_highlight.h,v 1.25.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_HIGHLIGHT_H #define ZEND_HIGHLIGHT_H diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c index 6071ad5b7..7d6fb4abf 100644 --- a/Zend/zend_indent.c +++ b/Zend/zend_indent.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_indent.c,v 1.24 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_indent.c,v 1.24.2.1 2006/01/04 23:53:04 andi Exp $ */ /* This indenter doesn't really work, it's here for no particular reason. */ diff --git a/Zend/zend_indent.h b/Zend/zend_indent.h index dc239f7ad..f4fdfc7c1 100644 --- a/Zend/zend_indent.h +++ b/Zend/zend_indent.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_indent.h,v 1.17 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_indent.h,v 1.17.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_INDENT_H #define ZEND_INDENT_H diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index 2dbb83711..c6572d3b8 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.c,v 1.39.2.1 2005/09/02 20:51:15 andrei Exp $ */ +/* $Id: zend_ini.c,v 1.39.2.2 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_qsort.h" diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index 878b371a4..843f1078a 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.h,v 1.34 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini.h,v 1.34.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_INI_H #define ZEND_INI_H diff --git a/Zend/zend_ini_parser.c b/Zend/zend_ini_parser.c index a57ab6062..0419a32d1 100644 --- a/Zend/zend_ini_parser.c +++ b/Zend/zend_ini_parser.c @@ -89,7 +89,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -103,7 +103,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_parser.y,v 1.41 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini_parser.y,v 1.41.2.1 2006/01/04 23:53:04 andi Exp $ */ #define DEBUG_CFG_PARSER 0 #include "zend.h" diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 2e386a38c..a12b59387 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_parser.y,v 1.41 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini_parser.y,v 1.41.2.1 2006/01/04 23:53:04 andi Exp $ */ #define DEBUG_CFG_PARSER 0 #include "zend.h" diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c index 769d75a93..02c52dd18 100644 --- a/Zend/zend_ini_scanner.c +++ b/Zend/zend_ini_scanner.c @@ -481,7 +481,7 @@ char *yytext; +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -495,7 +495,7 @@ char *yytext; +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.l,v 1.41 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini_scanner.l,v 1.41.2.1 2006/01/04 23:53:04 andi Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h index 0ee198008..5fbf171ce 100644 --- a/Zend/zend_ini_scanner.h +++ b/Zend/zend_ini_scanner.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.h,v 1.14 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini_scanner.h,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef _ZEND_INI_SCANNER_H #define _ZEND_INI_SCANNER_H diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index 62554bfc7..2a1dad899 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.l,v 1.41 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_ini_scanner.l,v 1.41.2.1 2006/01/04 23:53:04 andi Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index dc9a8fbf7..bd8dcc357 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_interfaces.c,v 1.33.2.1 2005/10/03 12:36:36 helly Exp $ */ +/* $Id: zend_interfaces.c,v 1.33.2.2 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_API.h" diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h index d7d22e362..24e9f3c24 100755 --- a/Zend/zend_interfaces.h +++ b/Zend/zend_interfaces.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_interfaces.h,v 1.11 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_interfaces.h,v 1.11.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_INTERFACES_H #define ZEND_INTERFACES_H diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h index f3cb9c4dc..27f57081d 100644 --- a/Zend/zend_istdiostream.h +++ b/Zend/zend_istdiostream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_istdiostream.h,v 1.6 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_istdiostream.h,v 1.6.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef _ZEND_STDIOSTREAM #define _ZEND_STDIOSTREAM diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c index ad034437a..a0349d427 100755 --- a/Zend/zend_iterators.c +++ b/Zend/zend_iterators.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_iterators.c,v 1.12 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_iterators.c,v 1.12.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_API.h" diff --git a/Zend/zend_iterators.h b/Zend/zend_iterators.h index 46f939b7d..b8a68296b 100755 --- a/Zend/zend_iterators.h +++ b/Zend/zend_iterators.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_iterators.h,v 1.10 2005/08/03 13:30:53 sniper Exp $ */ +/* $Id: zend_iterators.h,v 1.10.2.1 2006/01/04 23:53:04 andi Exp $ */ /* These iterators were designed to operate within the foreach() * structures provided by the engine, but could be extended for use diff --git a/Zend/zend_language_parser.c b/Zend/zend_language_parser.c index c77105582..7040aa962 100644 --- a/Zend/zend_language_parser.c +++ b/Zend/zend_language_parser.c @@ -311,7 +311,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -326,7 +326,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.160.2.2 2005/10/17 07:57:00 dmitry Exp $ */ +/* $Id: zend_language_parser.y,v 1.160.2.3 2006/01/04 23:53:04 andi Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 0a9c10c42..3cd5df846 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.160.2.2 2005/10/17 07:57:00 dmitry Exp $ */ +/* $Id: zend_language_parser.y,v 1.160.2.3 2006/01/04 23:53:04 andi Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index c099d24e1..9f70b4d35 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -359,7 +359,7 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); #define YY_NUM_RULES 160 #define YY_END_OF_BUFFER 161 -static yyconst short int yy_accept[1410] = +static yyconst short int yy_accept[1411] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -372,7 +372,7 @@ static yyconst short int yy_accept[1410] = 145, 159, 118, 142, 145, 141, 158, 159, 143, 159, 157, 155, 140, 159, 118, 38, 37, 101, 100, 127, - 130, 130, 122, 123, 123, 121, 121, 121, 111, 0, + 130, 130, 160, 123, 123, 121, 121, 121, 111, 0, 111, 114, 112, 111, 119, 75, 0, 133, 0, 116, 83, 132, 90, 86, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 70, 78, @@ -386,136 +386,136 @@ static yyconst short int yy_accept[1410] = 117, 117, 117, 117, 117, 87, 89, 140, 144, 98, 36, 104, 0, 154, 150, 152, 154, 146, 118, 142, 147, 141, 0, 148, 149, 143, 151, 155, 140, 139, - 139, 118, 0, 37, 100, 127, 129, 128, 122, 123, - 124, 111, 0, 113, 0, 0, 73, 116, 132, 132, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 105, 103, 0, 0, 84, 72, 85, 131, - 131, 117, 117, 117, 117, 117, 117, 92, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 2, 117, 117, - 117, 117, 117, 117, 117, 117, 16, 117, 117, 117, - - 117, 117, 117, 117, 117, 40, 117, 117, 117, 117, - 117, 117, 117, 117, 6, 117, 55, 42, 117, 93, - 104, 152, 153, 111, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 26, - 117, 117, 117, 117, 117, 117, 117, 30, 12, 117, - 117, 117, 117, 117, 117, 50, 1, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 68, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 152, - 153, 111, 0, 0, 0, 0, 0, 0, 0, 0, - - 43, 0, 0, 0, 0, 0, 0, 136, 136, 0, - 117, 117, 117, 117, 117, 117, 117, 69, 28, 7, - 32, 41, 4, 117, 117, 117, 117, 58, 117, 117, - 11, 117, 117, 117, 62, 117, 117, 117, 117, 117, - 117, 117, 57, 31, 117, 117, 117, 117, 117, 117, - 117, 8, 66, 13, 111, 0, 115, 115, 0, 0, - 0, 48, 0, 0, 0, 0, 0, 44, 0, 0, + 139, 118, 0, 37, 100, 127, 129, 128, 122, 122, + 123, 124, 111, 0, 113, 0, 0, 73, 116, 132, + 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 105, 103, 0, 0, 84, 72, 85, + 131, 131, 117, 117, 117, 117, 117, 117, 92, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 2, 117, + 117, 117, 117, 117, 117, 117, 117, 16, 117, 117, + + 117, 117, 117, 117, 117, 117, 40, 117, 117, 117, + 117, 117, 117, 117, 117, 6, 117, 55, 42, 117, + 93, 104, 152, 153, 111, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 10, 117, 17, 117, 117, 117, 117, 117, 56, - 117, 117, 117, 117, 117, 117, 65, 117, 5, 60, - - 24, 111, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 49, 0, 117, 117, 117, 117, 117, 117, 117, - 117, 20, 27, 117, 117, 117, 117, 34, 18, 117, - 117, 51, 117, 117, 63, 117, 53, 111, 0, 0, - 0, 0, 0, 47, 0, 45, 0, 117, 110, 117, - 117, 109, 117, 61, 29, 117, 117, 117, 14, 3, - 117, 117, 117, 117, 117, 117, 111, 0, 0, 0, - 106, 117, 117, 117, 117, 117, 25, 117, 117, 117, - 33, 64, 117, 111, 0, 0, 117, 117, 108, 21, - 19, 35, 117, 22, 117, 111, 0, 0, 117, 117, - - 117, 117, 111, 0, 0, 107, 117, 52, 54, 111, - 0, 0, 117, 111, 0, 0, 117, 111, 0, 0, - 59, 111, 0, 0, 111, 0, 0, 0, 111, 0, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 111, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - 111, 0, 111, 0, 111, 0, 111, 0, 111, 0, - - 111, 0, 111, 0, 111, 0, 111, 0, 0 + 26, 117, 117, 117, 117, 117, 117, 117, 30, 12, + 117, 117, 117, 117, 117, 117, 50, 1, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 68, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 152, 153, 111, 0, 0, 0, 0, 0, 0, 0, + + 0, 43, 0, 0, 0, 0, 0, 0, 136, 136, + 0, 117, 117, 117, 117, 117, 117, 117, 69, 28, + 7, 32, 41, 4, 117, 117, 117, 117, 58, 117, + 117, 11, 117, 117, 117, 62, 117, 117, 117, 117, + 117, 117, 117, 57, 31, 117, 117, 117, 117, 117, + 117, 117, 8, 66, 13, 111, 0, 115, 115, 0, + 0, 0, 48, 0, 0, 0, 0, 0, 44, 0, + 0, 0, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 10, 117, 17, 117, 117, 117, 117, 117, + 56, 117, 117, 117, 117, 117, 117, 65, 117, 5, + + 60, 24, 111, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 49, 0, 117, 117, 117, 117, 117, 117, + 117, 117, 20, 27, 117, 117, 117, 117, 34, 18, + 117, 117, 51, 117, 117, 63, 117, 53, 111, 0, + 0, 0, 0, 0, 47, 0, 45, 0, 117, 110, + 117, 117, 109, 117, 61, 29, 117, 117, 117, 14, + 3, 117, 117, 117, 117, 117, 117, 111, 0, 0, + 0, 106, 117, 117, 117, 117, 117, 25, 117, 117, + 117, 33, 64, 117, 111, 0, 0, 117, 117, 108, + 21, 19, 35, 117, 22, 117, 111, 0, 0, 117, + + 117, 117, 117, 111, 0, 0, 107, 117, 52, 54, + 111, 0, 0, 117, 111, 0, 0, 117, 111, 0, + 0, 59, 111, 0, 0, 111, 0, 0, 0, 111, + 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, + 111, 0, 0, 0, 0, 111, 0, 0, 0, 0, + 112, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, + + 0, 111, 0, 111, 0, 111, 0, 111, 0, 0 } ; static yyconst int yy_ec[256] = @@ -552,426 +552,426 @@ static yyconst int yy_ec[256] = static yyconst int yy_meta[63] = { 0, - 1, 2, 3, 3, 4, 1, 4, 5, 6, 4, - 7, 4, 4, 8, 4, 4, 4, 4, 4, 9, - 9, 9, 4, 10, 11, 4, 6, 6, 1, 1, - 4, 12, 1, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, + 1, 2, 3, 3, 4, 1, 4, 5, 4, 4, + 6, 4, 4, 7, 4, 4, 4, 4, 4, 8, + 8, 8, 4, 9, 10, 4, 4, 4, 1, 1, + 4, 11, 1, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 4, 1 } ; -static yyconst short int yy_base[1830] = +static yyconst short int yy_base[1831] = { 0, - 7972, 7971, 0, 0, 62, 0, 114, 115, 121, 122, - 123, 151, 210, 0, 272, 0, 7981, 7980, 7979, 7978, - 132, 139, 7991, 7965, 121, 7998, 129, 7963, 131, 7998, - 0, 112, 137, 135, 333, 7998, 7962, 143, 151, 150, - 322, 322, 331, 7964, 320, 148, 153, 7959, 7959, 7952, - 7998, 303, 7932, 328, 323, 344, 340, 7937, 0, 356, - 7939, 7942, 7928, 305, 7940, 310, 99, 331, 7943, 7935, - 7927, 7998, 331, 7998, 0, 7998, 408, 7947, 451, 376, - 7998, 468, 0, 7940, 7964, 7941, 7998, 347, 7964, 457, - 7998, 469, 470, 462, 481, 7998, 0, 7998, 0, 0, - - 7950, 7949, 0, 7998, 7964, 7939, 7998, 7938, 7939, 482, - 7938, 7936, 460, 7925, 402, 7934, 481, 7998, 489, 0, - 7998, 490, 7998, 7998, 363, 7998, 7956, 0, 7907, 7909, - 7908, 7910, 7907, 7918, 7914, 7898, 7903, 7998, 7998, 7998, - 7998, 7998, 7998, 478, 7998, 7935, 7998, 7998, 509, 515, - 523, 528, 7998, 7896, 470, 7998, 7998, 7921, 7998, 7998, - 7920, 509, 7998, 0, 515, 7893, 7907, 7892, 0, 7904, - 468, 352, 7894, 465, 7902, 0, 7898, 7886, 7888, 7899, - 7901, 473, 7887, 7882, 7885, 7883, 0, 7881, 505, 7877, - 7876, 7871, 0, 476, 7891, 489, 7891, 7882, 7872, 7864, - - 7869, 7882, 7868, 7876, 7866, 7998, 7998, 0, 7998, 7998, - 0, 548, 551, 7998, 7998, 554, 557, 7998, 0, 7883, - 7998, 7885, 7884, 7998, 7998, 7907, 7998, 570, 591, 7998, - 7909, 580, 595, 0, 0, 0, 7998, 7998, 0, 7998, - 7998, 7886, 591, 7998, 7869, 7858, 7998, 0, 7998, 7905, - 7856, 7858, 7851, 7856, 7850, 7859, 7867, 7849, 7847, 603, - 588, 591, 600, 610, 7862, 7895, 7998, 7998, 7998, 7998, - 7893, 7850, 573, 7860, 7851, 7854, 7838, 0, 7856, 7855, - 7850, 7851, 7834, 7838, 565, 7839, 7849, 0, 7834, 7843, - 7827, 586, 7834, 7825, 7839, 7842, 7837, 7838, 7838, 7827, - - 7826, 7817, 7831, 7830, 7814, 0, 582, 7813, 7820, 7810, - 7809, 7809, 7808, 7812, 0, 7821, 0, 0, 7813, 0, - 619, 613, 630, 7832, 650, 7807, 7813, 7820, 7808, 7817, - 7817, 658, 7812, 7804, 7806, 7809, 659, 7795, 7843, 632, - 7810, 7798, 7795, 7796, 7793, 7786, 7787, 7779, 7792, 0, - 7794, 7782, 7795, 7779, 7789, 7796, 7775, 0, 7786, 7769, - 7788, 7777, 7785, 7767, 7781, 0, 0, 7774, 7775, 7785, - 7765, 7783, 7778, 7761, 7780, 7762, 7759, 0, 7758, 7776, - 7771, 7766, 7765, 7755, 7763, 7768, 7747, 7749, 7763, 7998, - 7998, 7775, 661, 670, 7750, 7740, 674, 7752, 7743, 675, - - 7998, 7755, 7758, 677, 7746, 7739, 7749, 7998, 7787, 677, - 7737, 7750, 7751, 7733, 7747, 7743, 7749, 0, 0, 0, - 0, 0, 0, 7735, 7730, 7735, 7740, 0, 7742, 7726, - 0, 7734, 7733, 2996, 0, 2996, 2988, 2984, 2982, 2990, - 2979, 2972, 0, 0, 2957, 2973, 2972, 2956, 2959, 2969, - 2963, 0, 0, 0, 2978, 673, 7998, 2985, 2934, 681, - 682, 7998, 2933, 2926, 2919, 2895, 690, 7998, 2907, 691, - 2895, 2891, 2908, 2884, 2904, 2903, 2886, 2897, 2872, 2880, - 2864, 0, 2856, 2859, 2839, 2846, 2818, 2823, 2744, 0, - 2753, 2752, 2753, 2754, 2749, 2732, 0, 2746, 0, 0, - - 0, 2758, 682, 712, 695, 7998, 2735, 2730, 698, 704, - 707, 7998, 2727, 2747, 2746, 2735, 2740, 2743, 2737, 2720, - 2734, 0, 0, 2737, 2736, 2732, 2729, 0, 0, 2718, - 2717, 2731, 2720, 2721, 0, 2718, 2720, 2726, 696, 724, - 716, 717, 720, 7998, 729, 7998, 733, 2714, 0, 2697, - 2696, 0, 2710, 0, 0, 2690, 2703, 2697, 0, 0, - 2682, 2684, 2655, 2662, 2662, 2650, 2671, 729, 2659, 737, - 0, 2642, 2640, 2631, 2622, 2616, 0, 2602, 2606, 2611, - 0, 0, 2596, 2615, 734, 2584, 2596, 2568, 0, 0, - 0, 0, 2578, 0, 2575, 2583, 738, 2567, 2567, 2555, - - 2556, 2553, 2560, 740, 2528, 0, 2527, 0, 0, 2546, - 742, 2534, 2527, 2537, 746, 2511, 2488, 2511, 747, 2494, - 0, 2504, 752, 780, 2501, 780, 793, 807, 2500, 792, - 819, 2473, 2470, 2452, 2465, 803, 2445, 2443, 2434, 2456, - 815, 2431, 2430, 812, 2435, 817, 2441, 2433, 831, 7998, - 2415, 829, 2413, 837, 2412, 838, 2410, 850, 2409, 851, - 2408, 852, 2376, 863, 2369, 873, 2368, 883, 2367, 884, - 2366, 885, 2365, 891, 2364, 896, 2363, 898, 2362, 905, - 2333, 913, 2330, 919, 2323, 930, 2321, 931, 2320, 936, - 2319, 942, 2318, 944, 2316, 951, 2301, 953, 2298, 959, - - 2287, 964, 2284, 965, 2277, 976, 2275, 982, 2273, 990, - 2272, 997, 2270, 999, 2261, 1004, 2255, 1005, 2252, 1010, - 2250, 1011, 2241, 1012, 2238, 1022, 2229, 1043, 2227, 1044, - 2224, 1045, 2221, 1050, 2209, 1051, 2207, 1052, 2206, 1056, - 2204, 1057, 2202, 1058, 2195, 1089, 2192, 1090, 2181, 1091, - 2163, 1096, 2162, 1097, 2161, 1098, 2160, 1102, 2159, 1103, - 2158, 1104, 2156, 1111, 2149, 1136, 2130, 1137, 2117, 1142, - 2116, 1143, 2115, 1144, 2114, 1148, 2113, 1149, 2112, 1150, - 2110, 1157, 2103, 1178, 2071, 1182, 2070, 1183, 2069, 1188, - 2067, 1189, 2066, 1190, 2064, 1195, 2063, 1196, 2060, 1203, - - 2057, 1218, 2028, 1224, 2025, 1228, 2024, 1229, 2023, 1235, - 2021, 1236, 2018, 1241, 2014, 1249, 2011, 1250, 1988, 1258, - 1985, 1264, 1982, 1270, 1979, 1275, 1978, 1281, 1975, 1287, - 1968, 1295, 1965, 1296, 1956, 1304, 1953, 1309, 1942, 1310, - 1939, 1316, 1936, 1317, 1933, 1321, 1932, 1327, 1924, 1342, - 1922, 1349, 1919, 1350, 1916, 1355, 1910, 1356, 1907, 1357, - 1897, 1362, 1896, 1363, 1893, 1367, 1890, 1388, 1887, 1395, - 1876, 1396, 1864, 1397, 1861, 1401, 1857, 1402, 1854, 1403, - 1851, 1408, 1850, 1409, 1847, 1434, 1844, 1441, 1818, 1442, - 1815, 1443, 1811, 1447, 1809, 1448, 1808, 1449, 1806, 1454, - - 1805, 1455, 1804, 1456, 1785, 1487, 1772, 1488, 1769, 1489, - 1765, 1493, 1763, 1494, 1762, 1495, 1760, 1500, 1759, 1501, - 1758, 1502, 1726, 1523, 1719, 1533, 1718, 1534, 1717, 1535, - 1716, 1540, 139, 1541, 157, 1546, 312, 1548, 339, 1555, - 382, 1563, 454, 1569, 481, 1580, 498, 1581, 502, 1586, - 507, 1592, 521, 1594, 527, 1601, 530, 1603, 534, 1609, - 555, 1614, 557, 1615, 576, 1626, 589, 1632, 660, 1640, - 674, 1647, 698, 1649, 707, 1654, 719, 1655, 720, 1660, - 721, 1661, 725, 1662, 727, 1672, 728, 1693, 733, 1694, - 748, 1695, 751, 1700, 753, 1701, 754, 1702, 760, 1706, - - 762, 1707, 763, 1708, 766, 1739, 768, 1740, 775, 1741, - 777, 1746, 778, 1747, 782, 1748, 802, 1752, 804, 1753, - 811, 1754, 812, 1761, 816, 1786, 823, 1787, 824, 1792, - 825, 1793, 826, 1794, 827, 1798, 828, 1799, 839, 1800, - 845, 1807, 846, 1828, 848, 1832, 849, 1833, 858, 1838, - 859, 1839, 860, 1840, 861, 1845, 862, 1846, 870, 1853, - 871, 1868, 872, 1874, 874, 1878, 881, 1879, 892, 1885, - 893, 1886, 895, 1891, 902, 1899, 904, 1900, 906, 1908, - 907, 1914, 909, 1920, 917, 1925, 921, 1931, 924, 1937, - 927, 1945, 929, 1946, 938, 1954, 941, 1959, 950, 1960, - - 952, 1966, 955, 1967, 961, 1971, 970, 1977, 972, 1992, - 973, 1999, 975, 2000, 977, 2005, 984, 2006, 987, 2007, - 998, 2012, 1001, 2013, 1016, 2017, 1018, 2038, 1019, 2045, - 1020, 2046, 1021, 2047, 1023, 2051, 1030, 2052, 1033, 2053, - 1062, 2058, 1063, 2059, 1064, 2084, 1065, 2091, 1066, 2092, - 1067, 2093, 1068, 2097, 1069, 2098, 1076, 2099, 1108, 2104, - 1109, 2105, 1110, 2106, 1112, 2137, 1113, 2138, 1115, 2139, - 1119, 2143, 1122, 2144, 1135, 2145, 1154, 2150, 1155, 2151, - 1156, 2152, 1158, 2173, 1159, 2183, 1161, 2184, 1165, 2185, - 1168, 2190, 1194, 2191, 1197, 2196, 1200, 2198, 1201, 2205, - - 1204, 2213, 1207, 2219, 1211, 2230, 1214, 2231, 1226, 2236, - 1237, 2242, 1240, 2244, 1243, 2251, 1246, 2253, 1247, 2259, - 1257, 2264, 1260, 2265, 1266, 2276, 1269, 2282, 1272, 2290, - 1274, 2297, 1282, 2299, 1283, 2304, 1286, 2305, 1289, 2310, - 1292, 2311, 1303, 2312, 1306, 2322, 1315, 2343, 1318, 2344, - 1325, 2345, 1328, 2350, 1329, 2351, 1332, 2352, 1335, 2356, - 1338, 2357, 1361, 2358, 1364, 2389, 1368, 2390, 1371, 2391, - 1373, 2396, 1374, 2397, 1375, 2398, 1378, 2402, 1407, 2403, - 1410, 2404, 1413, 2411, 1414, 2436, 1416, 2437, 1417, 2442, - 1419, 2443, 1420, 2444, 1421, 2448, 1453, 2449, 1460, 2450, - - 1462, 2457, 1463, 2478, 1464, 2482, 1465, 2483, 1466, 2488, - 1467, 2489, 1480, 2490, 1499, 2495, 1506, 2496, 1508, 2503, - 1509, 2518, 1510, 2524, 1511, 2528, 1512, 2529, 1513, 2535, - 1531, 2536, 1542, 2541, 1545, 2549, 1552, 2550, 1554, 2558, - 1556, 2564, 1557, 2570, 1559, 2575, 1571, 2581, 1574, 2587, - 1577, 2595, 1579, 2596, 1588, 2604, 1591, 2609, 1600, 2610, - 1602, 2616, 1605, 2617, 1611, 2621, 1620, 2627, 1622, 2642, - 1623, 2649, 1625, 2650, 1627, 2655, 1634, 2656, 1637, 2657, - 1648, 2662, 1651, 2663, 1666, 2667, 1668, 2688, 1669, 2695, - 1670, 2696, 1671, 2697, 1673, 2701, 1680, 2702, 1683, 2703, - - 1712, 2708, 1713, 2709, 1714, 2734, 7998, 2741, 7998, 2793, - 2805, 2817, 2829, 2841, 2853, 2865, 1728, 2877, 2881, 2892, - 2903, 2907, 2919, 2929, 2933, 2937, 2949, 2961, 2973, 2977, - 2989, 3000, 3012, 3022, 3034, 3046, 3058, 3070, 3082, 3094, - 3106, 3118, 3130, 3142, 3154, 3166, 3178, 3190, 3202, 3214, - 3226, 3238, 3250, 3262, 3274, 3286, 3298, 3310, 3322, 3334, - 3346, 3358, 3370, 3382, 3394, 3406, 3418, 3430, 3442, 3454, - 3466, 3478, 3490, 3502, 3514, 3526, 3538, 3550, 3562, 3574, - 3586, 3598, 3610, 3622, 3634, 3646, 3658, 3670, 3682, 3694, - 3706, 3718, 3730, 3742, 3754, 3766, 3778, 3790, 3802, 3814, - - 3826, 3838, 3850, 3862, 3874, 3886, 3898, 3910, 3922, 3934, - 3946, 3958, 3970, 3982, 3994, 4006, 4018, 4030, 4042, 4054, - 4066, 4078, 4090, 4102, 4114, 4126, 4138, 4150, 4162, 4174, - 4186, 4198, 4210, 4222, 4234, 4246, 4258, 4270, 4282, 4294, - 4306, 4318, 4330, 4342, 4354, 4366, 4378, 4390, 4402, 4414, - 4426, 4438, 4450, 4462, 4474, 4486, 4498, 4510, 4522, 4534, - 4546, 4558, 4570, 4582, 4594, 4606, 4618, 4630, 4642, 4654, - 4666, 4678, 4690, 4702, 4714, 4726, 4738, 4750, 4762, 4774, - 4786, 4798, 4810, 4822, 4834, 4846, 4858, 4870, 4882, 4894, - 4906, 4918, 4930, 4942, 4954, 4966, 4978, 4990, 5002, 5014, - - 5026, 5038, 5050, 5062, 5074, 5086, 5098, 5110, 5122, 5134, - 5146, 5158, 5170, 5182, 5194, 5206, 5218, 5230, 5242, 5254, - 5266, 5278, 5290, 5302, 5314, 5326, 5338, 5350, 5362, 5374, - 5386, 5398, 5410, 5422, 5434, 5446, 5458, 5470, 5482, 5494, - 5506, 5518, 5530, 5542, 5554, 5566, 5578, 5590, 5602, 5614, - 5626, 5638, 5650, 5662, 5674, 5686, 5698, 5710, 5722, 5734, - 5746, 5758, 5770, 5782, 5794, 5806, 5818, 5830, 5842, 5854, - 5866, 5878, 5890, 5902, 5914, 5926, 5938, 5950, 5962, 5974, - 5986, 5998, 6010, 6022, 6034, 6046, 6058, 6070, 6082, 6094, - 6106, 6118, 6130, 6142, 6154, 6166, 6178, 6190, 6202, 6214, - - 6226, 6238, 6250, 6262, 6274, 6286, 6298, 6310, 6322, 6334, - 6346, 6358, 6370, 6382, 6394, 6406, 6418, 6430, 6442, 6454, - 6466, 6478, 6490, 6502, 6514, 6526, 6538, 6550, 6562, 6574, - 6586, 6598, 6610, 6622, 6634, 6646, 6658, 6670, 6682, 6694, - 6706, 6718, 6730, 6742, 6754, 6766, 6778, 6790, 6802, 6814, - 6826, 6838, 6850, 6862, 6874, 6886, 6898, 6910, 6922, 6934, - 6946, 6958, 6970, 6982, 6994, 7006, 7018, 7030, 7042, 7054, - 7066, 7078, 7090, 7102, 7114, 7126, 7138, 7150, 7162, 7174, - 7186, 7198, 7210, 7222, 7234, 7246, 7258, 7270, 7282, 7294, - 7306, 7318, 7330, 7342, 7354, 7366, 7378, 7390, 7402, 7414, - - 7426, 7438, 7450, 7462, 7474, 7486, 7498, 7510, 7522, 7534, - 7546, 7558, 7570, 7582, 7594, 7606, 7618, 7630, 7642, 7654, - 7666, 7678, 7690, 7702, 7714, 7726, 7738, 7750, 7762 + 7573, 7572, 0, 0, 62, 0, 114, 115, 121, 122, + 123, 151, 210, 0, 272, 0, 7582, 7581, 7580, 7579, + 132, 139, 7592, 7566, 121, 7599, 129, 7564, 131, 7599, + 0, 112, 137, 135, 333, 7599, 7563, 143, 151, 150, + 322, 322, 331, 7565, 320, 148, 153, 7560, 7560, 7553, + 7599, 303, 7533, 328, 323, 344, 340, 7538, 0, 356, + 7540, 7543, 7529, 305, 7541, 310, 99, 331, 7544, 7536, + 7528, 7599, 331, 7599, 0, 7599, 408, 7548, 451, 376, + 7599, 468, 0, 7541, 7565, 7542, 7599, 347, 7565, 457, + 7599, 469, 470, 462, 481, 7599, 0, 7599, 0, 0, + + 7551, 7550, 483, 7599, 7565, 7540, 7599, 7539, 7540, 484, + 7539, 7537, 469, 7526, 402, 7535, 485, 7599, 491, 0, + 7599, 493, 7599, 7599, 363, 7599, 7557, 0, 7508, 7510, + 7509, 7511, 7508, 7519, 7515, 7499, 7504, 7599, 7599, 7599, + 7599, 7599, 7599, 509, 7599, 7536, 7599, 7599, 512, 517, + 531, 522, 7599, 7497, 475, 7599, 7599, 7522, 7599, 7599, + 7521, 503, 7599, 0, 526, 7494, 7508, 7493, 0, 7505, + 468, 352, 7495, 477, 7503, 0, 7499, 7487, 7489, 7500, + 7502, 521, 7488, 7483, 7486, 7484, 0, 7482, 488, 7478, + 7477, 7472, 0, 456, 7492, 473, 7492, 7483, 7473, 7465, + + 7470, 7483, 7469, 7477, 7467, 7599, 7599, 0, 7599, 7599, + 0, 548, 555, 7599, 7599, 558, 561, 7599, 0, 7484, + 7599, 7486, 7485, 7599, 7599, 7508, 7599, 574, 595, 7599, + 7510, 584, 599, 0, 0, 0, 7599, 7599, 606, 7599, + 7599, 7599, 7487, 595, 7599, 7470, 7459, 7599, 0, 7599, + 7506, 7457, 7459, 7452, 7457, 7451, 7460, 7468, 7450, 7448, + 609, 597, 604, 609, 616, 7463, 7496, 7599, 7599, 7599, + 7599, 7494, 7451, 512, 7461, 7452, 7455, 7439, 0, 7457, + 7456, 7451, 7452, 7435, 7439, 569, 7440, 7450, 0, 7435, + 7444, 7428, 604, 7435, 7426, 7440, 7443, 7438, 7439, 7439, + + 7428, 7427, 7418, 7432, 7431, 7415, 0, 585, 7414, 7421, + 7411, 7410, 7410, 7409, 7413, 0, 7422, 0, 0, 7414, + 0, 637, 624, 643, 7433, 658, 7408, 7414, 3075, 3063, + 3071, 3071, 682, 3066, 3058, 3047, 3050, 666, 3036, 3084, + 645, 3051, 3039, 3036, 3037, 3021, 3014, 2988, 2973, 2986, + 0, 2986, 2974, 2985, 2967, 2977, 2984, 2963, 0, 2968, + 2945, 2964, 2939, 2945, 2923, 2937, 0, 0, 2912, 2908, + 2853, 2833, 2851, 2846, 2829, 2848, 2830, 2825, 0, 2824, + 2842, 2837, 2831, 2830, 2820, 2828, 2833, 2812, 2814, 2828, + 7599, 7599, 2840, 676, 685, 2814, 2804, 689, 2815, 2805, + + 571, 7599, 2814, 2812, 603, 2799, 2790, 2799, 7599, 2837, + 658, 2787, 2800, 2792, 2773, 2785, 2772, 2775, 0, 0, + 0, 0, 0, 0, 2756, 2749, 2751, 2754, 0, 2746, + 2728, 0, 2731, 2730, 2733, 0, 2731, 2722, 2705, 2703, + 2707, 2695, 2702, 0, 0, 2686, 2701, 2691, 2673, 2673, + 2678, 2666, 0, 0, 0, 2679, 681, 7599, 2694, 2641, + 690, 692, 7599, 2659, 2644, 2637, 2620, 694, 7599, 2632, + 695, 2622, 2616, 2633, 2598, 2618, 2613, 2595, 2606, 2585, + 2600, 2583, 0, 2590, 2587, 2568, 2571, 2561, 2566, 2558, + 0, 2566, 2560, 2559, 2559, 2548, 2530, 0, 2538, 0, + + 0, 0, 2549, 689, 709, 713, 7599, 2526, 2512, 716, + 717, 719, 7599, 2508, 2526, 2516, 2504, 2508, 2511, 2494, + 2475, 2484, 0, 0, 2483, 2480, 2472, 2469, 0, 0, + 2458, 2455, 2467, 2449, 2449, 0, 2446, 2445, 2449, 714, + 732, 735, 736, 738, 7599, 741, 7599, 742, 2440, 0, + 2414, 2411, 0, 2423, 0, 0, 2398, 2411, 2403, 0, + 0, 2389, 2384, 2381, 2387, 2386, 2364, 2385, 722, 2375, + 753, 0, 2361, 2361, 2371, 2362, 2357, 0, 2334, 2333, + 2339, 0, 0, 2330, 2348, 743, 2323, 2324, 2306, 0, + 0, 0, 0, 2316, 0, 2315, 2325, 750, 2308, 2309, + + 2288, 2288, 2283, 2293, 751, 2257, 0, 2264, 0, 0, + 2283, 756, 2270, 2263, 2273, 758, 2251, 2230, 2254, 763, + 2240, 0, 2241, 764, 759, 2238, 773, 802, 815, 2232, + 784, 827, 2203, 2202, 2208, 2223, 814, 2204, 2201, 2178, + 2197, 815, 2171, 2170, 842, 2187, 823, 2203, 2196, 850, + 7599, 2180, 832, 2177, 840, 2167, 846, 2165, 853, 2157, + 854, 2154, 861, 2152, 863, 2142, 871, 2139, 876, 2135, + 884, 2133, 886, 2127, 891, 2124, 893, 2122, 899, 2121, + 901, 2120, 916, 2118, 921, 2117, 922, 2103, 930, 2096, + 931, 2092, 939, 2090, 951, 2089, 952, 2088, 953, 2087, + + 960, 2083, 961, 2080, 962, 2078, 983, 2066, 990, 2061, + 991, 2060, 992, 2059, 997, 2058, 998, 2057, 1012, 2046, + 1020, 2043, 1027, 2037, 1029, 2036, 1037, 2032, 1038, 2031, + 1042, 2028, 1049, 2021, 1050, 2014, 1059, 2011, 1060, 2010, + 1067, 2001, 1071, 1999, 1082, 1989, 1088, 1988, 1089, 1984, + 1096, 1981, 1097, 1969, 1111, 1967, 1117, 1962, 1118, 1961, + 1119, 1960, 1126, 1959, 1128, 1958, 1148, 1956, 1149, 1955, + 1156, 1952, 1157, 1938, 1158, 1937, 1163, 1930, 1170, 1926, + 1178, 1925, 1188, 1924, 1193, 1923, 1195, 1922, 1203, 1921, + 1208, 1912, 1210, 1903, 1216, 1900, 1218, 1894, 1223, 1893, + + 1225, 1891, 1233, 1885, 1248, 1882, 1254, 1880, 1255, 1870, + 1256, 1865, 1262, 1863, 1263, 1862, 1269, 1861, 1277, 1860, + 1284, 1850, 1292, 1848, 1294, 1845, 1302, 1835, 1307, 1831, + 1309, 1825, 1314, 1822, 1315, 1818, 1322, 1815, 1324, 1804, + 1332, 1801, 1344, 1795, 1353, 1794, 1354, 1792, 1355, 1789, + 1361, 1786, 1362, 1772, 1366, 1771, 1376, 1766, 1383, 1764, + 1384, 1763, 1391, 1761, 1401, 1759, 1406, 1749, 1412, 1746, + 1413, 1742, 1414, 1736, 1421, 1729, 1423, 1726, 1435, 1719, + 1443, 1716, 1452, 1715, 1453, 1704, 1458, 1697, 1460, 1695, + 1465, 1694, 1473, 1693, 1475, 1690, 1483, 1687, 1488, 1673, + + 1490, 1672, 1498, 1667, 1505, 1665, 1511, 1664, 1513, 1661, + 1519, 1660, 1520, 1658, 1528, 1657, 1534, 1647, 1542, 1643, + 1549, 1638, 1551, 1635, 1557, 1629, 1559, 1628, 1564, 1626, + 1572, 1620, 1574, 139, 1579, 157, 1587, 312, 1589, 339, + 1597, 382, 1604, 454, 1609, 502, 1610, 520, 1618, 524, + 1619, 539, 1627, 561, 1639, 589, 1641, 602, 1648, 614, + 1649, 617, 1650, 641, 1656, 668, 1671, 674, 1678, 675, + 1679, 691, 1685, 697, 1686, 699, 1696, 700, 1700, 728, + 1707, 733, 1708, 739, 1717, 745, 1718, 762, 1725, 765, + 1730, 769, 1738, 771, 1740, 772, 1747, 774, 1748, 775, + + 1753, 782, 1755, 786, 1770, 788, 1776, 789, 1778, 795, + 1784, 797, 1785, 802, 1793, 809, 1799, 810, 1806, 812, + 1807, 822, 1814, 825, 1816, 831, 1824, 833, 1829, 834, + 1837, 836, 1839, 848, 1844, 858, 1846, 862, 1852, 865, + 1854, 869, 1869, 872, 1874, 878, 1875, 882, 1883, 892, + 1884, 895, 1892, 897, 1904, 907, 1905, 908, 1906, 909, + 1913, 910, 1914, 912, 1915, 917, 1936, 927, 1943, 929, + 1944, 932, 1945, 938, 1950, 940, 1951, 941, 1965, 947, + 1973, 950, 1980, 959, 1982, 968, 1990, 969, 1991, 970, + 1995, 971, 2002, 972, 2003, 973, 2012, 977, 2013, 984, + + 2020, 985, 2024, 999, 2035, 1002, 2041, 1003, 2042, 1005, + 2049, 1006, 2050, 1007, 2064, 1008, 2070, 1009, 2071, 1014, + 2072, 1016, 2079, 1028, 2081, 1031, 2101, 1035, 2102, 1036, + 2109, 1046, 2110, 1048, 2111, 1057, 2116, 1058, 2123, 1061, + 2131, 1068, 2141, 1075, 2146, 1078, 2148, 1079, 2156, 1083, + 2161, 1084, 2163, 1090, 2169, 1093, 2171, 1104, 2176, 1105, + 2178, 1106, 2186, 1107, 2201, 1108, 2207, 1113, 2208, 1125, + 2209, 1127, 2215, 1130, 2216, 1134, 2222, 1135, 2230, 1136, + 2237, 1137, 2245, 1139, 2247, 1143, 2255, 1150, 2260, 1164, + 2262, 1165, 2267, 1167, 2268, 1168, 2275, 1169, 2277, 1171, + + 2285, 1174, 2297, 1180, 2306, 1182, 2307, 1186, 2308, 1189, + 2314, 1199, 2315, 1201, 2319, 1204, 2329, 1212, 2336, 1214, + 2337, 1224, 2344, 1227, 2354, 1229, 2359, 1231, 2365, 1234, + 2366, 1241, 2367, 1242, 2374, 1244, 2376, 1249, 2388, 1264, + 2396, 1267, 2405, 1270, 2406, 1271, 2411, 1273, 2413, 1274, + 2418, 1279, 2426, 1285, 2428, 1288, 2436, 1300, 2441, 1301, + 2443, 1303, 2451, 1313, 2458, 1320, 2464, 1323, 2466, 1326, + 2472, 1330, 2473, 1331, 2481, 1333, 2487, 1340, 2495, 1343, + 2502, 1348, 2504, 1352, 2510, 1363, 2512, 1370, 2517, 1372, + 2525, 1373, 2527, 1374, 2532, 1377, 2540, 1378, 2542, 1392, + + 2550, 1395, 2557, 1399, 2562, 1400, 2563, 1402, 2571, 1408, + 2572, 1420, 2580, 1422, 2592, 1425, 2594, 1429, 2601, 1430, + 2602, 1431, 2603, 1432, 2609, 1434, 2624, 1445, 2631, 1447, + 2632, 1451, 2638, 1454, 2639, 1464, 2649, 1466, 2653, 1469, + 2660, 1471, 2661, 1477, 2670, 1481, 2671, 1484, 2678, 1494, + 2683, 1496, 2691, 1499, 2693, 1506, 2700, 1507, 2701, 1509, + 2706, 1521, 2708, 1524, 2723, 1527, 2729, 1529, 2731, 1530, + 2737, 1536, 2738, 1539, 2746, 1544, 2752, 1550, 2759, 1553, + 2760, 1565, 2767, 1566, 2769, 1568, 2777, 1570, 2782, 1580, + 2790, 1583, 2792, 1585, 2797, 1595, 2799, 1596, 2805, 1598, + + 2807, 1605, 2822, 1608, 2827, 1615, 2828, 7599, 2836, 7599, + 2888, 2899, 2910, 2921, 2932, 2943, 2954, 1631, 2965, 2969, + 2979, 2989, 2993, 3004, 3013, 3017, 3021, 3032, 3043, 3054, + 3058, 3069, 3079, 3090, 3099, 3110, 3121, 3132, 3143, 3154, + 3165, 3176, 3187, 3198, 3209, 3220, 3231, 3242, 3253, 3264, + 3275, 3286, 3297, 3308, 3319, 3330, 3341, 3352, 3363, 3374, + 3385, 3396, 3407, 3418, 3429, 3440, 3451, 3462, 3473, 3484, + 3495, 3506, 3517, 3528, 3539, 3550, 3561, 3572, 3583, 3594, + 3605, 3616, 3627, 3638, 3649, 3660, 3671, 3682, 3693, 3704, + 3715, 3726, 3737, 3748, 3759, 3770, 3781, 3792, 3803, 3814, + + 3825, 3836, 3847, 3858, 3869, 3880, 3891, 3902, 3913, 3924, + 3935, 3946, 3957, 3968, 3979, 3990, 4001, 4012, 4023, 4034, + 4045, 4056, 4067, 4078, 4089, 4100, 4111, 4122, 4133, 4144, + 4155, 4166, 4177, 4188, 4199, 4210, 4221, 4232, 4243, 4254, + 4265, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, + 4375, 4386, 4397, 4408, 4419, 4430, 4441, 4452, 4463, 4474, + 4485, 4496, 4507, 4518, 4529, 4540, 4551, 4562, 4573, 4584, + 4595, 4606, 4617, 4628, 4639, 4650, 4661, 4672, 4683, 4694, + 4705, 4716, 4727, 4738, 4749, 4760, 4771, 4782, 4793, 4804, + 4815, 4826, 4837, 4848, 4859, 4870, 4881, 4892, 4903, 4914, + + 4925, 4936, 4947, 4958, 4969, 4980, 4991, 5002, 5013, 5024, + 5035, 5046, 5057, 5068, 5079, 5090, 5101, 5112, 5123, 5134, + 5145, 5156, 5167, 5178, 5189, 5200, 5211, 5222, 5233, 5244, + 5255, 5266, 5277, 5288, 5299, 5310, 5321, 5332, 5343, 5354, + 5365, 5376, 5387, 5398, 5409, 5420, 5431, 5442, 5453, 5464, + 5475, 5486, 5497, 5508, 5519, 5530, 5541, 5552, 5563, 5574, + 5585, 5596, 5607, 5618, 5629, 5640, 5651, 5662, 5673, 5684, + 5695, 5706, 5717, 5728, 5739, 5750, 5761, 5772, 5783, 5794, + 5805, 5816, 5827, 5838, 5849, 5860, 5871, 5882, 5893, 5904, + 5915, 5926, 5937, 5948, 5959, 5970, 5981, 5992, 6003, 6014, + + 6025, 6036, 6047, 6058, 6069, 6080, 6091, 6102, 6113, 6124, + 6135, 6146, 6157, 6168, 6179, 6190, 6201, 6212, 6223, 6234, + 6245, 6256, 6267, 6278, 6289, 6300, 6311, 6322, 6333, 6344, + 6355, 6366, 6377, 6388, 6399, 6410, 6421, 6432, 6443, 6454, + 6465, 6476, 6487, 6498, 6509, 6520, 6531, 6542, 6553, 6564, + 6575, 6586, 6597, 6608, 6619, 6630, 6641, 6652, 6663, 6674, + 6685, 6696, 6707, 6718, 6729, 6740, 6751, 6762, 6773, 6784, + 6795, 6806, 6817, 6828, 6839, 6850, 6861, 6872, 6883, 6894, + 6905, 6916, 6927, 6938, 6949, 6960, 6971, 6982, 6993, 7004, + 7015, 7026, 7037, 7048, 7059, 7070, 7081, 7092, 7103, 7114, + + 7125, 7136, 7147, 7158, 7169, 7180, 7191, 7202, 7213, 7224, + 7235, 7246, 7257, 7268, 7279, 7290, 7301, 7312, 7323, 7334, + 7345, 7356, 7367, 7378, 7389, 7400, 7411, 7422, 7433, 7444 } ; -static yyconst short int yy_def[1830] = +static yyconst short int yy_def[1831] = { 0, - 1410, 1410, 1409, 3, 1409, 5, 1411, 1411, 5, 5, - 5, 5, 1409, 13, 1409, 15, 1412, 1412, 1412, 1412, - 1413, 1413, 1409, 1414, 1415, 1409, 1409, 1409, 1416, 1409, - 1417, 1409, 1409, 1418, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1419, - 1409, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1409, 1409, 1409, 1420, 1409, 1409, 1420, 1409, 1409, - 1409, 1421, 1422, 1409, 1409, 1423, 1409, 1423, 1409, 1421, - 1409, 1409, 1420, 1421, 1424, 1409, 1425, 1409, 1426, 1427, - - 1409, 1409, 1428, 1409, 1409, 1409, 1409, 1409, 1429, 1414, - 1414, 1409, 1409, 1409, 1409, 1409, 1416, 1409, 1416, 1430, - 1409, 1409, 1409, 1409, 1418, 1409, 1418, 35, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - - 1419, 1419, 1419, 1419, 1419, 1409, 1409, 1420, 1409, 1409, - 1420, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1422, 1409, - 1409, 1423, 1423, 1409, 1409, 1409, 1409, 1409, 1420, 1409, - 1409, 1424, 1409, 1425, 1426, 1427, 1409, 1409, 1428, 1409, - 1409, 1431, 1429, 1409, 1409, 1409, 1409, 1430, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1432, 1409, 1409, 1409, 1409, - 1409, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1409, 1409, 1409, 1433, 1431, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1432, 1434, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1409, - 1409, 1435, 1433, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1434, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1436, 1435, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - - 1419, 1437, 1436, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1438, 1437, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1439, 1438, 1409, 1409, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1440, 1439, 1409, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1441, 1440, 1409, 1419, 1419, - - 1419, 1419, 1442, 1441, 1409, 1419, 1419, 1419, 1419, 1443, - 1442, 1409, 1419, 1444, 1443, 1409, 1419, 1445, 1444, 1409, - 1419, 1446, 1445, 1409, 1447, 1446, 1409, 1409, 1448, 1447, - 1409, 1409, 1409, 1409, 1449, 1448, 1409, 1409, 1409, 1450, - 1449, 1409, 1409, 1409, 1451, 1450, 1409, 1409, 1409, 1409, - 1452, 1451, 1453, 1452, 1454, 1453, 1455, 1454, 1456, 1455, - 1457, 1456, 1458, 1457, 1459, 1458, 1460, 1459, 1461, 1460, - 1462, 1461, 1463, 1462, 1464, 1463, 1465, 1464, 1466, 1465, - 1467, 1466, 1468, 1467, 1469, 1468, 1470, 1469, 1471, 1470, - 1472, 1471, 1473, 1472, 1474, 1473, 1475, 1474, 1476, 1475, - - 1477, 1476, 1478, 1477, 1479, 1478, 1480, 1479, 1481, 1480, - 1482, 1481, 1483, 1482, 1484, 1483, 1485, 1484, 1486, 1485, - 1487, 1486, 1488, 1487, 1489, 1488, 1490, 1489, 1491, 1490, - 1492, 1491, 1493, 1492, 1494, 1493, 1495, 1494, 1496, 1495, - 1497, 1496, 1498, 1497, 1499, 1498, 1500, 1499, 1501, 1500, - 1502, 1501, 1503, 1502, 1504, 1503, 1505, 1504, 1506, 1505, - 1507, 1506, 1508, 1507, 1509, 1508, 1510, 1509, 1511, 1510, - 1512, 1511, 1513, 1512, 1514, 1513, 1515, 1514, 1516, 1515, - 1517, 1516, 1518, 1517, 1519, 1518, 1520, 1519, 1521, 1520, - 1522, 1521, 1523, 1522, 1524, 1523, 1525, 1524, 1526, 1525, - - 1527, 1526, 1528, 1527, 1529, 1528, 1530, 1529, 1531, 1530, - 1532, 1531, 1533, 1532, 1534, 1533, 1535, 1534, 1536, 1535, - 1537, 1536, 1538, 1537, 1539, 1538, 1540, 1539, 1541, 1540, - 1542, 1541, 1543, 1542, 1544, 1543, 1545, 1544, 1546, 1545, - 1547, 1546, 1548, 1547, 1549, 1548, 1550, 1549, 1551, 1550, - 1552, 1551, 1553, 1552, 1554, 1553, 1555, 1554, 1556, 1555, - 1557, 1556, 1558, 1557, 1559, 1558, 1560, 1559, 1561, 1560, - 1562, 1561, 1563, 1562, 1564, 1563, 1565, 1564, 1566, 1565, - 1567, 1566, 1568, 1567, 1569, 1568, 1570, 1569, 1571, 1570, - 1572, 1571, 1573, 1572, 1574, 1573, 1575, 1574, 1576, 1575, - - 1577, 1576, 1578, 1577, 1579, 1578, 1580, 1579, 1581, 1580, - 1582, 1581, 1583, 1582, 1584, 1583, 1585, 1584, 1586, 1585, - 1587, 1586, 1588, 1587, 1589, 1588, 1590, 1589, 1591, 1590, - 1592, 1591, 1593, 1592, 1594, 1593, 1595, 1594, 1596, 1595, - 1597, 1596, 1598, 1597, 1599, 1598, 1600, 1599, 1601, 1600, - 1602, 1601, 1603, 1602, 1604, 1603, 1605, 1604, 1606, 1605, - 1607, 1606, 1608, 1607, 1609, 1608, 1610, 1609, 1611, 1610, - 1612, 1611, 1613, 1612, 1614, 1613, 1615, 1614, 1616, 1615, - 1617, 1616, 1618, 1617, 1619, 1618, 1620, 1619, 1621, 1620, - 1622, 1621, 1623, 1622, 1624, 1623, 1625, 1624, 1626, 1625, - - 1627, 1626, 1628, 1627, 1629, 1628, 1630, 1629, 1631, 1630, - 1632, 1631, 1633, 1632, 1634, 1633, 1635, 1634, 1636, 1635, - 1637, 1636, 1638, 1637, 1639, 1638, 1640, 1639, 1641, 1640, - 1642, 1641, 1643, 1642, 1644, 1643, 1645, 1644, 1646, 1645, - 1647, 1646, 1648, 1647, 1649, 1648, 1650, 1649, 1651, 1650, - 1652, 1651, 1653, 1652, 1654, 1653, 1655, 1654, 1656, 1655, - 1657, 1656, 1658, 1657, 1659, 1658, 1660, 1659, 1661, 1660, - 1662, 1661, 1663, 1662, 1664, 1663, 1665, 1664, 1666, 1665, - 1667, 1666, 1668, 1667, 1669, 1668, 1670, 1669, 1671, 1670, - 1672, 1671, 1673, 1672, 1674, 1673, 1675, 1674, 1676, 1675, - - 1677, 1676, 1678, 1677, 1679, 1678, 1680, 1679, 1681, 1680, - 1682, 1681, 1683, 1682, 1684, 1683, 1685, 1684, 1686, 1685, - 1687, 1686, 1688, 1687, 1689, 1688, 1690, 1689, 1691, 1690, - 1692, 1691, 1693, 1692, 1694, 1693, 1695, 1694, 1696, 1695, - 1697, 1696, 1698, 1697, 1699, 1698, 1700, 1699, 1701, 1700, - 1702, 1701, 1703, 1702, 1704, 1703, 1705, 1704, 1706, 1705, - 1707, 1706, 1708, 1707, 1709, 1708, 1710, 1709, 1711, 1710, - 1712, 1711, 1713, 1712, 1714, 1713, 1715, 1714, 1716, 1715, - 1717, 1716, 1718, 1717, 1719, 1718, 1720, 1719, 1721, 1720, - 1722, 1721, 1723, 1722, 1724, 1723, 1725, 1724, 1726, 1725, - - 1727, 1726, 1728, 1727, 1729, 1728, 1730, 1729, 1731, 1730, - 1732, 1731, 1733, 1732, 1734, 1733, 1735, 1734, 1736, 1735, - 1737, 1736, 1738, 1737, 1739, 1738, 1740, 1739, 1741, 1740, - 1742, 1741, 1743, 1742, 1744, 1743, 1745, 1744, 1746, 1745, - 1747, 1746, 1748, 1747, 1749, 1748, 1750, 1749, 1751, 1750, - 1752, 1751, 1753, 1752, 1754, 1753, 1755, 1754, 1756, 1755, - 1757, 1756, 1758, 1757, 1759, 1758, 1760, 1759, 1761, 1760, - 1762, 1761, 1763, 1762, 1764, 1763, 1765, 1764, 1766, 1765, - 1767, 1766, 1768, 1767, 1769, 1768, 1770, 1769, 1771, 1770, - 1772, 1771, 1773, 1772, 1774, 1773, 1775, 1774, 1776, 1775, - - 1777, 1776, 1778, 1777, 1779, 1778, 1780, 1779, 1781, 1780, - 1782, 1781, 1783, 1782, 1784, 1783, 1785, 1784, 1786, 1785, - 1787, 1786, 1788, 1787, 1789, 1788, 1790, 1789, 1791, 1790, - 1792, 1791, 1793, 1792, 1794, 1793, 1795, 1794, 1796, 1795, - 1797, 1796, 1798, 1797, 1799, 1798, 1800, 1799, 1801, 1800, - 1802, 1801, 1803, 1802, 1804, 1803, 1805, 1804, 1806, 1805, - 1807, 1806, 1808, 1807, 1809, 1808, 1810, 1809, 1811, 1810, - 1812, 1811, 1813, 1812, 1814, 1813, 1815, 1814, 1816, 1815, - 1817, 1816, 1818, 1817, 1819, 1818, 1820, 1819, 1821, 1820, - 1822, 1821, 1823, 1822, 1824, 1823, 1825, 1824, 1826, 1825, - - 1827, 1826, 1828, 1827, 1829, 1828, 1409, 1829, 0, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409 + 1411, 1411, 1410, 3, 1410, 5, 1412, 1412, 5, 5, + 5, 5, 1410, 13, 1410, 15, 1413, 1413, 1413, 1413, + 1414, 1414, 1410, 1415, 1416, 1410, 1410, 1410, 1417, 1410, + 1418, 1410, 1410, 1419, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1420, + 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1410, 1410, 1410, 1421, 1410, 1410, 1421, 1410, 1410, + 1410, 1422, 1423, 1410, 1410, 1424, 1410, 1424, 1410, 1422, + 1410, 1410, 1421, 1422, 1425, 1410, 1426, 1410, 1427, 1428, + + 1410, 1410, 1429, 1410, 1410, 1410, 1410, 1410, 1430, 1415, + 1415, 1410, 1410, 1410, 1410, 1410, 1417, 1410, 1417, 1431, + 1410, 1410, 1410, 1410, 1419, 1410, 1419, 35, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + + 1420, 1420, 1420, 1420, 1420, 1410, 1410, 1421, 1410, 1410, + 1421, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1423, 1410, + 1410, 1424, 1424, 1410, 1410, 1410, 1410, 1410, 1421, 1410, + 1410, 1425, 1410, 1426, 1427, 1428, 1410, 1410, 1429, 1410, + 1410, 1410, 1432, 1430, 1410, 1410, 1410, 1410, 1431, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1433, 1410, 1410, 1410, + 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1410, 1410, 1410, 1434, 1432, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1433, + 1435, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1410, 1410, 1436, 1434, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1435, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1437, 1436, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + + 1420, 1420, 1438, 1437, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1439, 1438, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1440, 1439, 1410, + 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1441, 1440, 1410, 1420, 1420, 1420, + 1420, 1420, 1420, 1420, 1420, 1420, 1442, 1441, 1410, 1420, + + 1420, 1420, 1420, 1443, 1442, 1410, 1420, 1420, 1420, 1420, + 1444, 1443, 1410, 1420, 1445, 1444, 1410, 1420, 1446, 1445, + 1410, 1420, 1447, 1446, 1410, 1448, 1447, 1410, 1410, 1449, + 1448, 1410, 1410, 1410, 1410, 1450, 1449, 1410, 1410, 1410, + 1451, 1450, 1410, 1410, 1410, 1452, 1451, 1410, 1410, 1410, + 1410, 1453, 1452, 1454, 1453, 1455, 1454, 1456, 1455, 1457, + 1456, 1458, 1457, 1459, 1458, 1460, 1459, 1461, 1460, 1462, + 1461, 1463, 1462, 1464, 1463, 1465, 1464, 1466, 1465, 1467, + 1466, 1468, 1467, 1469, 1468, 1470, 1469, 1471, 1470, 1472, + 1471, 1473, 1472, 1474, 1473, 1475, 1474, 1476, 1475, 1477, + + 1476, 1478, 1477, 1479, 1478, 1480, 1479, 1481, 1480, 1482, + 1481, 1483, 1482, 1484, 1483, 1485, 1484, 1486, 1485, 1487, + 1486, 1488, 1487, 1489, 1488, 1490, 1489, 1491, 1490, 1492, + 1491, 1493, 1492, 1494, 1493, 1495, 1494, 1496, 1495, 1497, + 1496, 1498, 1497, 1499, 1498, 1500, 1499, 1501, 1500, 1502, + 1501, 1503, 1502, 1504, 1503, 1505, 1504, 1506, 1505, 1507, + 1506, 1508, 1507, 1509, 1508, 1510, 1509, 1511, 1510, 1512, + 1511, 1513, 1512, 1514, 1513, 1515, 1514, 1516, 1515, 1517, + 1516, 1518, 1517, 1519, 1518, 1520, 1519, 1521, 1520, 1522, + 1521, 1523, 1522, 1524, 1523, 1525, 1524, 1526, 1525, 1527, + + 1526, 1528, 1527, 1529, 1528, 1530, 1529, 1531, 1530, 1532, + 1531, 1533, 1532, 1534, 1533, 1535, 1534, 1536, 1535, 1537, + 1536, 1538, 1537, 1539, 1538, 1540, 1539, 1541, 1540, 1542, + 1541, 1543, 1542, 1544, 1543, 1545, 1544, 1546, 1545, 1547, + 1546, 1548, 1547, 1549, 1548, 1550, 1549, 1551, 1550, 1552, + 1551, 1553, 1552, 1554, 1553, 1555, 1554, 1556, 1555, 1557, + 1556, 1558, 1557, 1559, 1558, 1560, 1559, 1561, 1560, 1562, + 1561, 1563, 1562, 1564, 1563, 1565, 1564, 1566, 1565, 1567, + 1566, 1568, 1567, 1569, 1568, 1570, 1569, 1571, 1570, 1572, + 1571, 1573, 1572, 1574, 1573, 1575, 1574, 1576, 1575, 1577, + + 1576, 1578, 1577, 1579, 1578, 1580, 1579, 1581, 1580, 1582, + 1581, 1583, 1582, 1584, 1583, 1585, 1584, 1586, 1585, 1587, + 1586, 1588, 1587, 1589, 1588, 1590, 1589, 1591, 1590, 1592, + 1591, 1593, 1592, 1594, 1593, 1595, 1594, 1596, 1595, 1597, + 1596, 1598, 1597, 1599, 1598, 1600, 1599, 1601, 1600, 1602, + 1601, 1603, 1602, 1604, 1603, 1605, 1604, 1606, 1605, 1607, + 1606, 1608, 1607, 1609, 1608, 1610, 1609, 1611, 1610, 1612, + 1611, 1613, 1612, 1614, 1613, 1615, 1614, 1616, 1615, 1617, + 1616, 1618, 1617, 1619, 1618, 1620, 1619, 1621, 1620, 1622, + 1621, 1623, 1622, 1624, 1623, 1625, 1624, 1626, 1625, 1627, + + 1626, 1628, 1627, 1629, 1628, 1630, 1629, 1631, 1630, 1632, + 1631, 1633, 1632, 1634, 1633, 1635, 1634, 1636, 1635, 1637, + 1636, 1638, 1637, 1639, 1638, 1640, 1639, 1641, 1640, 1642, + 1641, 1643, 1642, 1644, 1643, 1645, 1644, 1646, 1645, 1647, + 1646, 1648, 1647, 1649, 1648, 1650, 1649, 1651, 1650, 1652, + 1651, 1653, 1652, 1654, 1653, 1655, 1654, 1656, 1655, 1657, + 1656, 1658, 1657, 1659, 1658, 1660, 1659, 1661, 1660, 1662, + 1661, 1663, 1662, 1664, 1663, 1665, 1664, 1666, 1665, 1667, + 1666, 1668, 1667, 1669, 1668, 1670, 1669, 1671, 1670, 1672, + 1671, 1673, 1672, 1674, 1673, 1675, 1674, 1676, 1675, 1677, + + 1676, 1678, 1677, 1679, 1678, 1680, 1679, 1681, 1680, 1682, + 1681, 1683, 1682, 1684, 1683, 1685, 1684, 1686, 1685, 1687, + 1686, 1688, 1687, 1689, 1688, 1690, 1689, 1691, 1690, 1692, + 1691, 1693, 1692, 1694, 1693, 1695, 1694, 1696, 1695, 1697, + 1696, 1698, 1697, 1699, 1698, 1700, 1699, 1701, 1700, 1702, + 1701, 1703, 1702, 1704, 1703, 1705, 1704, 1706, 1705, 1707, + 1706, 1708, 1707, 1709, 1708, 1710, 1709, 1711, 1710, 1712, + 1711, 1713, 1712, 1714, 1713, 1715, 1714, 1716, 1715, 1717, + 1716, 1718, 1717, 1719, 1718, 1720, 1719, 1721, 1720, 1722, + 1721, 1723, 1722, 1724, 1723, 1725, 1724, 1726, 1725, 1727, + + 1726, 1728, 1727, 1729, 1728, 1730, 1729, 1731, 1730, 1732, + 1731, 1733, 1732, 1734, 1733, 1735, 1734, 1736, 1735, 1737, + 1736, 1738, 1737, 1739, 1738, 1740, 1739, 1741, 1740, 1742, + 1741, 1743, 1742, 1744, 1743, 1745, 1744, 1746, 1745, 1747, + 1746, 1748, 1747, 1749, 1748, 1750, 1749, 1751, 1750, 1752, + 1751, 1753, 1752, 1754, 1753, 1755, 1754, 1756, 1755, 1757, + 1756, 1758, 1757, 1759, 1758, 1760, 1759, 1761, 1760, 1762, + 1761, 1763, 1762, 1764, 1763, 1765, 1764, 1766, 1765, 1767, + 1766, 1768, 1767, 1769, 1768, 1770, 1769, 1771, 1770, 1772, + 1771, 1773, 1772, 1774, 1773, 1775, 1774, 1776, 1775, 1777, + + 1776, 1778, 1777, 1779, 1778, 1780, 1779, 1781, 1780, 1782, + 1781, 1783, 1782, 1784, 1783, 1785, 1784, 1786, 1785, 1787, + 1786, 1788, 1787, 1789, 1788, 1790, 1789, 1791, 1790, 1792, + 1791, 1793, 1792, 1794, 1793, 1795, 1794, 1796, 1795, 1797, + 1796, 1798, 1797, 1799, 1798, 1800, 1799, 1801, 1800, 1802, + 1801, 1803, 1802, 1804, 1803, 1805, 1804, 1806, 1805, 1807, + 1806, 1808, 1807, 1809, 1808, 1810, 1809, 1811, 1810, 1812, + 1811, 1813, 1812, 1814, 1813, 1815, 1814, 1816, 1815, 1817, + 1816, 1818, 1817, 1819, 1818, 1820, 1819, 1821, 1820, 1822, + 1821, 1823, 1822, 1824, 1823, 1825, 1824, 1826, 1825, 1827, + + 1826, 1828, 1827, 1829, 1828, 1830, 1829, 1410, 1830, 0, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410 } ; -static yyconst short int yy_nxt[8061] = +static yyconst short int yy_nxt[7662] = { 0, 26, 27, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 36, 39, 40, 41, 42, @@ -990,9 +990,9 @@ static yyconst short int yy_nxt[8061] = 115, 115, 115, 93, 104, 105, 118, 121, 122, 199, 106, 104, 105, 88, 88, 126, 123, 106, 113, 200, 90, 90, 94, 91, 91, 92, 92, 139, 107, 108, - 119, 93, 124, 936, 127, 107, 108, 141, 140, 144, + 119, 93, 124, 937, 127, 107, 108, 141, 140, 144, 144, 144, 114, 158, 159, 145, 142, 143, 160, 161, - 94, 938, 95, 92, 95, 95, 95, 95, 95, 95, + 94, 939, 95, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, @@ -1009,859 +1009,816 @@ static yyconst short int yy_nxt[8061] = 98, 98, 98, 99, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 98, 98, 98, 128, 146, 940, 166, 154, 149, + 99, 98, 98, 98, 128, 146, 941, 166, 154, 149, 147, 150, 150, 150, 155, 156, 157, 148, 149, 167, 150, 150, 150, 168, 169, 194, 206, 224, 195, 151, - 174, 171, 197, 942, 175, 198, 129, 130, 151, 131, + 174, 171, 197, 943, 175, 198, 129, 130, 151, 131, 176, 132, 172, 126, 133, 173, 225, 201, 152, 177, - 134, 183, 202, 135, 136, 283, 137, 184, 178, 179, - 180, 207, 127, 185, 187, 212, 212, 212, 181, 284, + 134, 183, 202, 135, 136, 284, 137, 184, 178, 179, + 180, 207, 127, 185, 187, 212, 212, 212, 181, 285, - 182, 188, 189, 115, 115, 115, 944, 190, 209, 209, + 182, 188, 189, 115, 115, 115, 945, 190, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 120, 209, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 210, 209, 209, - 212, 212, 212, 215, 228, 228, 216, 216, 946, 228, - 229, 216, 216, 230, 231, 244, 118, 216, 216, 227, - 1409, 1409, 249, 250, 266, 267, 117, 144, 144, 144, - - 286, 228, 228, 287, 233, 948, 1409, 213, 245, 1409, - 119, 270, 271, 217, 294, 151, 218, 307, 217, 281, - 282, 218, 950, 308, 217, 295, 952, 218, 261, 261, - 261, 954, 149, 1409, 150, 150, 150, 262, 310, 262, - 301, 311, 263, 263, 263, 956, 151, 264, 264, 264, - 272, 958, 151, 273, 960, 274, 302, 303, 962, 275, - 276, 264, 264, 264, 264, 264, 264, 212, 212, 212, - 321, 321, 321, 322, 322, 228, 323, 323, 323, 964, - 228, 966, 230, 231, 321, 321, 321, 321, 321, 321, - 323, 323, 323, 323, 323, 323, 228, 230, 231, 1409, - - 968, 229, 228, 233, 337, 337, 337, 261, 261, 261, - 263, 263, 263, 970, 342, 1409, 354, 355, 1409, 263, - 263, 263, 361, 228, 362, 151, 343, 363, 379, 264, - 264, 264, 390, 390, 408, 409, 380, 364, 321, 321, - 321, 365, 1409, 264, 264, 264, 264, 264, 264, 391, - 391, 391, 321, 321, 321, 321, 321, 321, 1409, 400, - 337, 337, 337, 391, 391, 391, 391, 391, 391, 1409, - 401, 457, 457, 458, 1409, 461, 400, 1409, 467, 408, - 409, 1409, 505, 461, 972, 1409, 462, 401, 1409, 468, - 1409, 467, 511, 506, 462, 402, 505, 1409, 974, 543, - - 1409, 1409, 468, 512, 1409, 545, 1409, 506, 511, 1409, - 544, 463, 1409, 540, 540, 540, 546, 461, 400, 512, - 1409, 543, 976, 1409, 1409, 540, 540, 540, 462, 401, - 545, 978, 544, 1409, 570, 570, 570, 1409, 570, 570, - 570, 546, 1409, 980, 982, 984, 1409, 1409, 1409, 986, - 1409, 988, 990, 1409, 1409, 1409, 1409, 992, 1409, 162, - 1409, 1409, 1409, 162, 1409, 1409, 1409, 1409, 569, 1409, - 1409, 1409, 994, 1409, 1409, 996, 1409, 998, 1000, 1409, - 1409, 627, 627, 627, 1002, 1409, 1004, 1006, 1409, 1409, - 1008, 1409, 1010, 1409, 627, 627, 627, 1409, 1409, 1012, - - 1409, 1014, 1016, 1409, 1409, 628, 1018, 1409, 631, 631, - 631, 1409, 632, 649, 649, 649, 1409, 633, 628, 1409, - 631, 631, 631, 1409, 632, 1409, 1020, 1409, 1022, 633, - 1409, 1409, 649, 649, 649, 1024, 1026, 1409, 650, 1409, - 1028, 1409, 1409, 1409, 1409, 1409, 1409, 1030, 1032, 1034, - 1036, 1038, 1040, 1409, 1409, 634, 1409, 650, 1409, 1409, - 1409, 1409, 1409, 1042, 1409, 1409, 1409, 634, 1409, 1044, - 1046, 1409, 1048, 1050, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1052, 1054, 1056, 1058, 1060, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1062, 1064, 1066, 1409, 1068, 1409, - - 1409, 1409, 1409, 1409, 1409, 1070, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1072, 1074, 1409, 1076, - 1409, 1409, 1409, 1409, 1409, 1409, 1078, 1409, 1080, 1409, - 1082, 1084, 1409, 1086, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1088, 1409, 1409, 1409, 1090, 1409, 1409, 1092, 1409, - 1409, 1094, 1409, 1096, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1098, 1409, 1409, 1100, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1102, 1409, 1104, 1409, 1409, 1106, - 1409, 1409, 1409, 1409, 1409, 1108, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1110, 1409, 1112, 1114, 1409, 1116, - - 1409, 1118, 1409, 1409, 1409, 1409, 1409, 1409, 1120, 1409, - 1409, 1122, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1124, 1409, 1409, 1126, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1128, 1409, 1130, 1132, 1134, 1136, 1409, 1138, 1409, 1409, - 1409, 1409, 1409, 1409, 1140, 1409, 1409, 1142, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1144, 1146, 1148, 1150, - 1152, 1154, 1156, 1158, 1409, 1409, 1409, 1409, 1409, 1409, - - 1160, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1162, 1164, 1166, 1409, 1168, 1170, 1409, 1172, - 1409, 1409, 1409, 1174, 1409, 1409, 1176, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1178, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1180, 1182, - 1184, 1409, 1186, 1188, 1409, 1190, 1409, 1409, 1409, 1192, - 1409, 1409, 1194, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1196, 1409, - 1409, 1198, 1409, 1409, 1200, 1202, 1409, 1409, 1204, 1409, - 1409, 1206, 1409, 1409, 1409, 1208, 1409, 1409, 1210, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1212, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1214, 1409, 1409, 1216, 1409, 1409, 1218, 1409, 1409, - 1220, 1222, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1224, 1409, 1409, 1226, 1409, 1409, 1409, 1409, 1409, - 1228, 1409, 1409, 1230, 1409, 1409, 1232, 1409, 1234, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1236, 1238, 1409, 1409, - 1240, 1409, 1409, 1242, 1409, 1409, 1244, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1246, 1409, 1409, - 1248, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1250, - 1409, 1409, 1252, 1409, 1409, 1409, 1409, 1409, 1409, 1254, - 1409, 1409, 1256, 1258, 1409, 1409, 1260, 1409, 1409, 1262, - 1409, 1409, 1264, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1266, 1409, 1409, 1268, 1409, - 1409, 1409, 1270, 1409, 1409, 1272, 1409, 1274, 1276, 1278, - - 1409, 1409, 1280, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1282, 1409, 1409, 1284, 1409, 1409, 1286, 1288, 1409, - 1290, 1292, 1409, 1294, 1296, 1298, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1300, 1409, 1409, - 1409, 1409, 1409, 1409, 1302, 1409, 1304, 1306, 1308, 1310, - 1312, 1314, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1316, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1318, 1409, 1409, 1409, 1409, 1409, 1409, - 1320, 1409, 1322, 1324, 1326, 1328, 1330, 1332, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1334, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1336, 1409, 1409, 1338, - 1409, 1409, 1409, 1409, 1409, 1409, 1340, 1409, 1342, 1409, - 1344, 1346, 1409, 1348, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1350, 1409, 1409, 1352, 1409, - - 1409, 1354, 1409, 1356, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1358, 1409, 1409, 1360, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1362, 1409, 1364, 1409, 1409, 1366, - 1409, 1409, 1409, 1409, 1409, 1368, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1370, 1409, 1372, 1374, 1409, 1376, - 1409, 1378, 1409, 1409, 1409, 1409, 1409, 1409, 1380, 1409, - 1409, 1382, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1384, 1409, 1409, 1386, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1388, 1409, 1390, 1392, 1394, 1396, 1409, 1398, 1409, 1409, - - 1409, 1409, 1409, 1409, 1400, 1409, 1409, 1402, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1404, 1406, 1408, 120, - 934, 932, 930, 928, 1409, 1409, 1409, 1409, 1409, 1409, - 926, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 924, 922, 920, 1409, 918, 916, 1409, 914, - 1409, 1409, 1409, 912, 1409, 1409, 910, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 908, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 906, 904, - 902, 1409, 900, 898, 1409, 896, 1409, 1409, 1409, 894, - 1409, 1409, 892, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 890, 1409, - 1409, 888, 1409, 1409, 886, 884, 1409, 1409, 882, 1409, - 1409, 880, 1409, 1409, 1409, 878, 1409, 1409, 876, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 874, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 872, 1409, 1409, 870, 1409, 1409, 868, 1409, 1409, - 866, 864, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 862, 1409, 1409, 860, 1409, 1409, 1409, 1409, 1409, - 858, 1409, 1409, 856, 1409, 1409, 854, 1409, 852, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 850, 848, 1409, 1409, - 846, 1409, 1409, 844, 1409, 1409, 842, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 840, 1409, 1409, - 838, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 836, - 1409, 1409, 834, 1409, 1409, 1409, 1409, 1409, 1409, 832, - - 1409, 1409, 830, 828, 1409, 1409, 826, 1409, 1409, 824, - 1409, 1409, 822, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 820, 1409, 1409, 818, 1409, - 1409, 1409, 816, 1409, 1409, 814, 1409, 812, 810, 808, - 1409, 1409, 806, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 804, 1409, 1409, 802, 1409, 1409, 800, 798, 1409, - 796, 794, 1409, 792, 790, 788, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 786, 1409, 1409, - 1409, 1409, 1409, 1409, 784, 1409, 782, 780, 778, 776, - 774, 772, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 770, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 768, 1409, 1409, 1409, 1409, 1409, 1409, - 766, 1409, 764, 762, 760, 758, 756, 754, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 752, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 750, 1409, 1409, 748, - 1409, 1409, 1409, 1409, 1409, 1409, 746, 1409, 744, 1409, - 742, 740, 1409, 738, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 736, 1409, 1409, 734, 1409, - 1409, 732, 1409, 730, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 728, 1409, 1409, 726, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 724, 1409, 722, 1409, 1409, 720, - 1409, 1409, 1409, 1409, 1409, 718, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 716, 1409, 714, 712, 1409, 710, - - 1409, 708, 1409, 1409, 1409, 1409, 1409, 1409, 706, 1409, - 1409, 704, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 702, 1409, 1409, 700, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 698, 1409, 696, 694, 692, 690, 1409, 688, 1409, 1409, - 1409, 1409, 1409, 1409, 686, 1409, 1409, 684, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 682, 680, 678, 676, - 674, 672, 670, 668, 1409, 1409, 1409, 1409, 1409, 1409, - - 666, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 664, 662, 660, 1409, 658, 656, 1409, 654, - 1409, 1409, 1409, 644, 1409, 1409, 644, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 652, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 648, 647, - 646, 1409, 644, 643, 1409, 642, 1409, 1409, 1409, 641, - 1409, 1409, 639, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 638, 1409, - 1409, 637, 1409, 1409, 636, 630, 1409, 1409, 626, 1409, - 1409, 624, 1409, 1409, 1409, 623, 1409, 1409, 621, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 620, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 619, 1409, 1409, 617, 1409, 1409, 616, 1409, 1409, - 615, 613, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 612, 1409, 1409, 611, 1409, 1409, 1409, 1409, 1409, - 609, 1409, 1409, 608, 1409, 1409, 607, 1409, 606, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 605, 604, 1409, 1409, - 602, 1409, 1409, 601, 1409, 1409, 600, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 599, 1409, 1409, - 598, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 597, - 1409, 1409, 595, 1409, 1409, 1409, 1409, 1409, 1409, 594, - 1409, 1409, 593, 592, 1409, 1409, 591, 1409, 1409, 590, - 1409, 1409, 589, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 588, 1409, 1409, 587, 1409, - 1409, 1409, 586, 1409, 1409, 585, 1409, 583, 582, 581, - - 1409, 1409, 580, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 579, 1409, 1409, 578, 1409, 1409, 577, 576, 1409, - 575, 574, 1409, 573, 572, 571, 1409, 1409, 1409, 1409, - 568, 566, 1409, 1409, 1409, 565, 564, 563, 1409, 1409, - 1409, 1409, 562, 561, 560, 1409, 559, 558, 1409, 557, - 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, - 542, 541, 539, 537, 536, 1409, 535, 534, 533, 532, - 531, 530, 1409, 24, 24, 24, 24, 24, 24, 24, - - 24, 24, 24, 24, 24, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 212, 212, 212, 215, 228, 228, 216, 216, 947, 228, + 229, 216, 216, 230, 231, 240, 240, 216, 216, 227, + 118, 240, 1410, 1410, 245, 250, 251, 308, 117, 267, + + 268, 228, 228, 309, 233, 271, 272, 213, 1410, 240, + 240, 1410, 287, 217, 119, 288, 218, 246, 217, 282, + 283, 218, 311, 302, 217, 312, 949, 218, 144, 144, + 144, 262, 262, 262, 149, 1410, 150, 150, 150, 303, + 304, 265, 265, 265, 951, 263, 151, 263, 953, 151, + 264, 264, 264, 343, 151, 265, 265, 265, 265, 265, + 265, 273, 295, 955, 274, 344, 275, 212, 212, 212, + 276, 277, 401, 296, 322, 322, 322, 323, 323, 228, + 324, 324, 324, 402, 228, 957, 230, 231, 322, 322, + 322, 322, 322, 322, 324, 324, 324, 324, 324, 324, + + 228, 230, 231, 1410, 468, 229, 228, 233, 240, 240, + 338, 338, 338, 959, 240, 469, 262, 262, 262, 1410, + 355, 356, 1410, 264, 264, 264, 961, 228, 264, 264, + 264, 380, 240, 240, 151, 265, 265, 265, 963, 381, + 362, 965, 363, 391, 391, 364, 1410, 409, 410, 265, + 265, 265, 265, 265, 265, 365, 322, 322, 322, 366, + 409, 410, 392, 392, 392, 967, 1410, 338, 338, 338, + 322, 322, 322, 322, 322, 322, 392, 392, 392, 392, + 392, 392, 1410, 401, 1410, 1410, 458, 458, 459, 1410, + 462, 506, 969, 462, 402, 468, 512, 1410, 971, 973, + + 1410, 463, 507, 1410, 463, 1410, 469, 513, 1410, 1410, + 541, 541, 541, 1410, 506, 975, 1410, 544, 546, 403, + 512, 977, 1410, 979, 981, 507, 464, 1410, 545, 547, + 1410, 513, 1410, 541, 541, 541, 462, 401, 1410, 544, + 1410, 1410, 546, 571, 571, 571, 1410, 463, 402, 1410, + 545, 1410, 983, 547, 571, 571, 571, 985, 1410, 1410, + 628, 628, 628, 987, 1410, 1410, 1410, 1410, 162, 989, + 1410, 1410, 1410, 1410, 1410, 1410, 570, 1410, 1410, 162, + 1410, 1410, 1410, 1410, 629, 1410, 991, 1410, 1410, 993, + 1410, 1410, 1410, 995, 1410, 997, 999, 1410, 1001, 1003, + + 1410, 1410, 1410, 628, 628, 628, 1005, 1410, 1410, 1410, + 1007, 1410, 1009, 1011, 1410, 1410, 632, 632, 632, 1013, + 633, 1015, 1410, 1410, 1410, 634, 1017, 629, 632, 632, + 632, 1410, 633, 1019, 1021, 1410, 1023, 634, 1410, 1410, + 1410, 1410, 1410, 650, 650, 650, 1025, 1410, 1410, 1027, + 1410, 650, 650, 650, 1410, 1029, 1410, 1031, 1033, 1410, + 1035, 1410, 1410, 635, 1410, 1410, 1410, 1410, 651, 1410, + 1410, 1410, 1037, 1410, 1410, 635, 651, 1410, 1410, 1410, + 1410, 1410, 1039, 1410, 1410, 1410, 1041, 1410, 1410, 1043, + 1410, 1410, 1410, 1045, 1410, 1410, 1047, 1410, 1410, 1410, + + 1410, 1410, 1049, 1410, 1410, 1410, 1051, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1053, 1410, 1410, 1055, + 1410, 1057, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1059, 1061, 1063, 1065, 1410, 1067, 1410, 1410, 1410, + 1410, 1069, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1071, 1410, 1073, 1410, 1410, 1075, 1410, 1410, 1410, + 1410, 1410, 1077, 1410, 1079, 1081, 1410, 1410, 1410, 1410, + 1410, 1083, 1410, 1410, 1085, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1087, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1089, 1091, 1093, 1095, 1097, 1099, 1410, 1410, + + 1410, 1101, 1410, 1410, 1410, 1410, 1410, 1410, 1103, 1105, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1107, 1410, 1410, 1109, 1111, 1410, 1113, + 1115, 1117, 1119, 1121, 1410, 1410, 1410, 1410, 1123, 1410, + 1125, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1127, 1410, 1410, 1129, 1410, 1410, 1410, 1131, + 1133, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1135, 1410, 1137, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1139, 1141, 1410, 1410, 1143, 1410, 1410, 1410, 1410, + 1410, 1410, 1145, 1410, 1410, 1410, 1410, 1410, 1410, 1147, + + 1410, 1410, 1149, 1151, 1410, 1410, 1410, 1153, 1155, 1410, + 1410, 1410, 1410, 1410, 1157, 1410, 1410, 1159, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1161, 1163, + 1165, 1167, 1169, 1410, 1410, 1410, 1410, 1171, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1173, + 1410, 1175, 1410, 1410, 1177, 1410, 1410, 1410, 1179, 1181, + 1183, 1185, 1410, 1187, 1410, 1410, 1410, 1189, 1410, 1410, + 1410, 1410, 1410, 1410, 1191, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1193, 1195, + 1410, 1197, 1199, 1201, 1410, 1203, 1410, 1410, 1205, 1410, + + 1410, 1410, 1410, 1410, 1207, 1410, 1209, 1410, 1410, 1410, + 1211, 1410, 1410, 1213, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1215, 1410, 1217, 1410, 1410, 1219, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1221, 1410, 1223, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1225, 1410, + 1410, 1227, 1410, 1229, 1410, 1231, 1410, 1410, 1233, 1410, + 1410, 1410, 1410, 1410, 1410, 1235, 1237, 1410, 1239, 1410, + 1410, 1410, 1410, 1241, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1243, 1410, + 1410, 1245, 1410, 1410, 1247, 1249, 1410, 1251, 1253, 1410, + + 1410, 1410, 1410, 1255, 1410, 1410, 1410, 1410, 1410, 1257, + 1410, 1410, 1259, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1261, 1263, 1410, 1265, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1267, 1410, 1410, + 1410, 1410, 1410, 1410, 1269, 1410, 1410, 1271, 1410, 1410, + 1273, 1410, 1410, 1410, 1275, 1277, 1410, 1279, 1410, 1410, + 1410, 1410, 1410, 1410, 1281, 1410, 1410, 1283, 1410, 1410, + 1410, 1410, 1285, 1410, 1410, 1410, 1287, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1289, 1410, 1410, + 1410, 1410, 1410, 1410, 1291, 1410, 1293, 1295, 1297, 1410, + + 1410, 1299, 1301, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1303, 1410, 1410, 1305, + 1410, 1410, 1410, 1307, 1309, 1410, 1311, 1410, 1410, 1410, + 1410, 1410, 1313, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1315, 1410, 1317, 1410, 1410, 1319, + 1410, 1410, 1410, 1321, 1323, 1325, 1327, 1410, 1329, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1331, + 1410, 1333, 1410, 1410, 1410, 1335, 1410, 1410, 1337, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1339, 1410, + 1341, 1410, 1410, 1343, 1410, 1345, 1410, 1410, 1410, 1410, + + 1410, 1347, 1410, 1410, 1410, 1349, 1410, 1410, 1351, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1353, 1410, + 1355, 1410, 1410, 1357, 1410, 1410, 1410, 1410, 1410, 1410, + 1359, 1361, 1410, 1363, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1365, 1410, 1410, 1367, 1410, + 1410, 1369, 1410, 1371, 1373, 1410, 1410, 1410, 1410, 1410, + 1375, 1410, 1410, 1377, 1410, 1410, 1410, 1410, 1379, 1410, + 1410, 1410, 1410, 1410, 1381, 1410, 1410, 1383, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1385, + 1387, 1410, 1389, 1410, 1391, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1393, 1410, 1410, 1395, 1410, 1397, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1399, + 1401, 1410, 1403, 1410, 1410, 1410, 1410, 1410, 1410, 1405, + 1410, 1410, 1407, 1410, 1410, 1410, 1410, 1410, 1410, 1409, + 1410, 120, 1410, 1410, 935, 1410, 1410, 1410, 1410, 1410, + 933, 1410, 931, 929, 1410, 1410, 1410, 1410, 1410, 927, + 1410, 1410, 925, 1410, 1410, 1410, 1410, 923, 1410, 1410, + 1410, 921, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 919, 917, 1410, 915, 913, 1410, 1410, 911, 909, + 1410, 907, 1410, 1410, 1410, 1410, 905, 903, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 901, 1410, 1410, 899, 1410, 1410, 897, 895, 893, + 1410, 891, 1410, 1410, 1410, 1410, 1410, 1410, 889, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 887, + 885, 1410, 1410, 883, 1410, 1410, 1410, 1410, 1410, 1410, + 881, 1410, 1410, 879, 1410, 1410, 1410, 1410, 1410, 1410, + 877, 1410, 1410, 1410, 1410, 1410, 875, 1410, 1410, 1410, + 873, 1410, 1410, 871, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 869, 1410, 867, 1410, 865, 863, 1410, + 861, 1410, 1410, 1410, 1410, 859, 857, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 855, 1410, 1410, 853, 1410, 1410, 851, 1410, 849, 847, + 1410, 1410, 1410, 1410, 1410, 845, 1410, 1410, 843, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 841, + 1410, 1410, 839, 1410, 1410, 1410, 837, 1410, 1410, 835, + 1410, 1410, 1410, 1410, 1410, 833, 1410, 1410, 1410, 831, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 829, + 1410, 1410, 827, 1410, 825, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 823, 821, 819, 817, 1410, 815, + 1410, 1410, 1410, 1410, 813, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 811, 1410, 809, 1410, 1410, 807, + 1410, 1410, 1410, 1410, 1410, 805, 1410, 803, 801, 1410, + 1410, 1410, 1410, 1410, 799, 1410, 1410, 797, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 795, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 793, 791, 789, 787, 785, + 783, 1410, 1410, 1410, 781, 1410, 1410, 1410, 1410, 1410, + 1410, 779, 777, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 775, 1410, 1410, 773, + 771, 1410, 769, 767, 765, 763, 761, 1410, 1410, 1410, + 1410, 759, 1410, 757, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 755, 1410, 1410, 753, 1410, + 1410, 1410, 751, 749, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 747, 1410, 745, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 743, 741, 1410, 1410, 739, 1410, + 1410, 1410, 1410, 1410, 1410, 737, 1410, 1410, 1410, 1410, + 1410, 1410, 735, 1410, 1410, 733, 731, 1410, 1410, 1410, + 729, 727, 1410, 1410, 1410, 1410, 1410, 725, 1410, 1410, + 723, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 721, 719, 717, 715, 713, 1410, 1410, 1410, 1410, + 711, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 1410, 709, 1410, 707, 1410, 1410, 705, 1410, 1410, + 1410, 703, 701, 699, 697, 1410, 695, 1410, 1410, 1410, + 693, 1410, 1410, 1410, 1410, 1410, 1410, 691, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 689, 687, 1410, 685, 683, 681, 1410, 679, 1410, + 1410, 677, 1410, 1410, 1410, 1410, 1410, 675, 1410, 673, + 1410, 1410, 1410, 671, 1410, 1410, 669, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 667, 1410, 665, 1410, + 1410, 663, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 661, + 1410, 659, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + + 1410, 657, 1410, 1410, 655, 1410, 645, 1410, 645, 1410, + 1410, 653, 1410, 1410, 1410, 1410, 1410, 1410, 649, 648, + 1410, 647, 1410, 1410, 1410, 1410, 645, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 644, 1410, 1410, 643, 1410, 1410, 642, 640, 1410, + 639, 638, 1410, 1410, 1410, 1410, 637, 1410, 1410, 1410, + 1410, 1410, 631, 1410, 1410, 627, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 625, 624, 1410, + 622, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 621, 1410, 1410, 1410, 1410, 1410, 1410, 620, 1410, 1410, + + 618, 1410, 1410, 617, 1410, 1410, 1410, 616, 614, 1410, + 613, 1410, 1410, 1410, 1410, 1410, 1410, 612, 1410, 1410, + 610, 1410, 1410, 1410, 1410, 609, 1410, 1410, 1410, 608, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 607, 1410, 1410, 1410, 1410, 1410, 1410, 606, 1410, 605, + 603, 602, 1410, 1410, 601, 600, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 599, + 1410, 1410, 598, 1410, 1410, 1410, 596, 595, 1410, 594, + 1410, 1410, 1410, 1410, 1410, 593, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 592, 1410, 591, + + 1410, 1410, 590, 1410, 1410, 1410, 589, 588, 587, 586, + 1410, 584, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 583, 1410, 582, 1410, 1410, 1410, 581, 1410, + 1410, 580, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 579, 1410, 578, 1410, 1410, 577, 1410, 576, 1410, + 1410, 1410, 1410, 1410, 575, 1410, 1410, 1410, 574, 1410, + 1410, 573, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 572, 1410, 569, 1410, 1410, 567, 1410, 1410, 1410, + 1410, 1410, 1410, 566, 565, 1410, 564, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 563, 1410, + + 1410, 562, 1410, 1410, 561, 1410, 560, 559, 1410, 1410, + 1410, 1410, 1410, 558, 1410, 1410, 557, 1410, 1410, 1410, + 1410, 556, 1410, 1410, 1410, 1410, 1410, 555, 1410, 1410, + 554, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 553, 552, 1410, 551, 1410, 550, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 549, 1410, 1410, + 548, 1410, 543, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 542, 540, 1410, 538, 1410, 1410, 1410, 1410, + 1410, 1410, 537, 1410, 1410, 536, 1410, 1410, 1410, 1410, + 1410, 1410, 535, 1410, 534, 1410, 1410, 533, 1410, 1410, + + 1410, 1410, 1410, 532, 1410, 531, 530, 1410, 1410, 1410, + 1410, 1410, 529, 1410, 1410, 528, 1410, 1410, 1410, 1410, + 527, 1410, 1410, 1410, 526, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 525, 524, 1410, 523, 522, 1410, + 1410, 521, 520, 1410, 519, 1410, 1410, 1410, 1410, 518, + 517, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 516, 1410, 1410, 515, 1410, 1410, + 514, 511, 510, 1410, 509, 1410, 1410, 1410, 1410, 1410, + 1410, 405, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 508, 505, 1410, 1410, 458, 1410, 1410, 1410, + + 1410, 1410, 1410, 504, 1410, 1410, 502, 1410, 1410, 1410, + 1410, 1410, 1410, 501, 1410, 1410, 1410, 1410, 1410, 500, + 1410, 1410, 1410, 499, 1410, 1410, 498, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 497, 1410, 496, 1410, + 495, 494, 1410, 493, 1410, 1410, 1410, 1410, 492, 491, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 490, 1410, 1410, 489, 1410, 1410, 488, + 1410, 487, 486, 1410, 1410, 1410, 1410, 1410, 485, 1410, + 1410, 484, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 483, 1410, 1410, 482, 1410, 1410, 1410, 481, + + 1410, 1410, 480, 1410, 1410, 1410, 1410, 1410, 479, 1410, + 1410, 1410, 478, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 477, 1410, 1410, 476, 1410, 475, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 474, 473, 409, + 472, 1410, 471, 1410, 1410, 470, 1410, 467, 1410, 1410, + 1410, 1410, 1410, 466, 1410, 1410, 1410, 405, 1410, 465, + 1410, 461, 460, 1410, 457, 455, 454, 453, 452, 451, + 450, 449, 448, 1410, 447, 446, 445, 444, 1410, 1410, + 443, 442, 441, 440, 439, 438, 437, 1410, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 86, + + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 529, 111, 117, 117, 117, 117, 528, - 117, 117, 117, 117, 117, 117, 117, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 164, - 527, 526, 164, 208, 208, 208, 525, 208, 208, 208, - - 524, 208, 208, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 219, 523, 522, 219, 222, - 222, 222, 222, 222, 222, 521, 222, 222, 222, 222, - 222, 232, 520, 519, 518, 517, 516, 232, 232, 515, - 232, 234, 514, 513, 234, 235, 510, 509, 235, 236, - 236, 236, 236, 236, 236, 236, 508, 236, 236, 236, - 236, 239, 239, 404, 239, 239, 507, 239, 239, 239, - 239, 239, 239, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 248, 504, 457, 248, 324, - 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, - - 324, 340, 503, 501, 500, 499, 498, 497, 496, 495, - 494, 340, 392, 392, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 410, 493, 492, 491, 490, 489, - 410, 488, 487, 410, 455, 455, 455, 455, 455, 455, - 455, 455, 455, 455, 455, 455, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 538, 538, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, 584, 596, 596, 596, 596, 596, 596, - - 596, 596, 596, 596, 596, 596, 603, 603, 603, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 610, 610, - 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, - 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, - 614, 614, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 622, 622, 622, 622, 622, 622, - 622, 622, 622, 622, 622, 622, 625, 625, 625, 625, - 625, 625, 625, 625, 625, 625, 625, 625, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, - 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - - 635, 635, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 645, 645, 645, 645, 645, 645, - 645, 645, 645, 645, 645, 645, 651, 651, 651, 651, - 651, 651, 651, 651, 651, 651, 651, 651, 653, 653, - 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, - 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 657, 657, 657, 657, 657, 657, 657, 657, - 657, 657, 657, 657, 659, 659, 659, 659, 659, 659, - 659, 659, 659, 659, 659, 659, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, 663, 663, - - 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, - 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, - 665, 665, 667, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 667, 669, 669, 669, 669, 669, 669, - 669, 669, 669, 669, 669, 669, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 673, 673, - 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 677, 677, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 677, 679, 679, 679, 679, 679, 679, - - 679, 679, 679, 679, 679, 679, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, - 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, - 685, 685, 687, 687, 687, 687, 687, 687, 687, 687, - 687, 687, 687, 687, 689, 689, 689, 689, 689, 689, - 689, 689, 689, 689, 689, 689, 691, 691, 691, 691, - 691, 691, 691, 691, 691, 691, 691, 691, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, - - 695, 695, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 699, 699, 699, 699, 699, 699, - 699, 699, 699, 699, 699, 699, 701, 701, 701, 701, - 701, 701, 701, 701, 701, 701, 701, 701, 703, 703, - 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, - 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, - 705, 705, 707, 707, 707, 707, 707, 707, 707, 707, - 707, 707, 707, 707, 709, 709, 709, 709, 709, 709, - 709, 709, 709, 709, 709, 709, 711, 711, 711, 711, - 711, 711, 711, 711, 711, 711, 711, 711, 713, 713, - - 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, - 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, - 715, 715, 717, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 717, 719, 719, 719, 719, 719, 719, - 719, 719, 719, 719, 719, 719, 721, 721, 721, 721, - 721, 721, 721, 721, 721, 721, 721, 721, 723, 723, - 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, - 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, - 725, 725, 727, 727, 727, 727, 727, 727, 727, 727, - 727, 727, 727, 727, 729, 729, 729, 729, 729, 729, - - 729, 729, 729, 729, 729, 729, 731, 731, 731, 731, - 731, 731, 731, 731, 731, 731, 731, 731, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, - 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 737, 737, 737, 739, 739, 739, 739, 739, 739, - 739, 739, 739, 739, 739, 739, 741, 741, 741, 741, - 741, 741, 741, 741, 741, 741, 741, 741, 743, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, - 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, - - 745, 745, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 749, 749, 749, 749, 749, 749, - 749, 749, 749, 749, 749, 749, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 753, 753, - 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, - 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, - 755, 755, 757, 757, 757, 757, 757, 757, 757, 757, - 757, 757, 757, 757, 759, 759, 759, 759, 759, 759, - 759, 759, 759, 759, 759, 759, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 761, 761, 761, 763, 763, - - 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, - 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 767, 767, 767, 767, 767, 767, 767, 767, - 767, 767, 767, 767, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 771, 771, 771, 771, - 771, 771, 771, 771, 771, 771, 771, 771, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, - 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, - 775, 775, 777, 777, 777, 777, 777, 777, 777, 777, - 777, 777, 777, 777, 779, 779, 779, 779, 779, 779, - - 779, 779, 779, 779, 779, 779, 781, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 781, 781, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, - 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 787, 787, 787, 787, 787, 787, 787, 787, - 787, 787, 787, 787, 789, 789, 789, 789, 789, 789, - 789, 789, 789, 789, 789, 789, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - - 795, 795, 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, 803, 803, - 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, - 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 807, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 807, 809, 809, 809, 809, 809, 809, - 809, 809, 809, 809, 809, 809, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, 813, 813, - - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 817, 817, 817, 817, 817, 817, 817, 817, - 817, 817, 817, 817, 819, 819, 819, 819, 819, 819, - 819, 819, 819, 819, 819, 819, 821, 821, 821, 821, - 821, 821, 821, 821, 821, 821, 821, 821, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 827, 827, 827, 827, 827, 827, 827, 827, - 827, 827, 827, 827, 829, 829, 829, 829, 829, 829, - - 829, 829, 829, 829, 829, 829, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, 833, 833, - 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 839, 839, 839, 841, 841, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 843, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, - 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, - - 845, 845, 847, 847, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 847, 849, 849, 849, 849, 849, 849, - 849, 849, 849, 849, 849, 849, 851, 851, 851, 851, - 851, 851, 851, 851, 851, 851, 851, 851, 853, 853, - 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, - 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, - 855, 855, 857, 857, 857, 857, 857, 857, 857, 857, - 857, 857, 857, 857, 859, 859, 859, 859, 859, 859, - 859, 859, 859, 859, 859, 859, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 863, 863, - - 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, - 865, 865, 867, 867, 867, 867, 867, 867, 867, 867, - 867, 867, 867, 867, 869, 869, 869, 869, 869, 869, - 869, 869, 869, 869, 869, 869, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, - 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, - 875, 875, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 877, 877, 877, 879, 879, 879, 879, 879, 879, - - 879, 879, 879, 879, 879, 879, 881, 881, 881, 881, - 881, 881, 881, 881, 881, 881, 881, 881, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, - 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 891, 891, 891, 891, - 891, 891, 891, 891, 891, 891, 891, 891, 893, 893, - 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, - 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, - - 895, 895, 897, 897, 897, 897, 897, 897, 897, 897, - 897, 897, 897, 897, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 901, 901, 901, 901, - 901, 901, 901, 901, 901, 901, 901, 901, 903, 903, - 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, - 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, - 905, 905, 907, 907, 907, 907, 907, 907, 907, 907, - 907, 907, 907, 907, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 911, 911, 911, 911, - 911, 911, 911, 911, 911, 911, 911, 911, 913, 913, - - 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 917, 917, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 917, 919, 919, 919, 919, 919, 919, - 919, 919, 919, 919, 919, 919, 921, 921, 921, 921, - 921, 921, 921, 921, 921, 921, 921, 921, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, - 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 927, 927, 927, 927, 927, 927, 927, 927, - 927, 927, 927, 927, 929, 929, 929, 929, 929, 929, - - 929, 929, 929, 929, 929, 929, 931, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 933, 933, - 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, - 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, - 935, 935, 937, 937, 937, 937, 937, 937, 937, 937, - 937, 937, 937, 937, 939, 939, 939, 939, 939, 939, - 939, 939, 939, 939, 939, 939, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, 943, 943, - 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, - - 945, 945, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, 947, 947, 949, 949, 949, 949, 949, 949, - 949, 949, 949, 949, 949, 949, 951, 951, 951, 951, - 951, 951, 951, 951, 951, 951, 951, 951, 953, 953, - 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - 955, 955, 957, 957, 957, 957, 957, 957, 957, 957, - 957, 957, 957, 957, 959, 959, 959, 959, 959, 959, - 959, 959, 959, 959, 959, 959, 961, 961, 961, 961, - 961, 961, 961, 961, 961, 961, 961, 961, 963, 963, - - 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, - 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, - 965, 965, 967, 967, 967, 967, 967, 967, 967, 967, - 967, 967, 967, 967, 969, 969, 969, 969, 969, 969, - 969, 969, 969, 969, 969, 969, 971, 971, 971, 971, - 971, 971, 971, 971, 971, 971, 971, 971, 973, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, - 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, - 975, 975, 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 979, 979, 979, 979, 979, 979, - - 979, 979, 979, 979, 979, 979, 981, 981, 981, 981, - 981, 981, 981, 981, 981, 981, 981, 981, 983, 983, - 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, - 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, - 985, 985, 987, 987, 987, 987, 987, 987, 987, 987, - 987, 987, 987, 987, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 991, 991, 991, 991, - 991, 991, 991, 991, 991, 991, 991, 991, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, - 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, - - 995, 995, 997, 997, 997, 997, 997, 997, 997, 997, - 997, 997, 997, 997, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 1001, 1001, 1001, 1001, - 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1003, 1003, - 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, - 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, - 1005, 1005, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, - 1007, 1007, 1007, 1007, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1011, 1011, 1011, 1011, - 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1013, 1013, - - 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, - 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, - 1015, 1015, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, - 1017, 1017, 1017, 1017, 1019, 1019, 1019, 1019, 1019, 1019, - 1019, 1019, 1019, 1019, 1019, 1019, 1021, 1021, 1021, 1021, - 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1023, 1023, - 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1025, 1025, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1029, 1029, 1029, 1029, 1029, 1029, - - 1029, 1029, 1029, 1029, 1029, 1029, 1031, 1031, 1031, 1031, - 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1033, 1033, - 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, - 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, - 1035, 1035, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, - 1037, 1037, 1037, 1037, 1039, 1039, 1039, 1039, 1039, 1039, - 1039, 1039, 1039, 1039, 1039, 1039, 1041, 1041, 1041, 1041, - 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1043, 1043, - 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, - - 1045, 1045, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, - 1047, 1047, 1047, 1047, 1049, 1049, 1049, 1049, 1049, 1049, - 1049, 1049, 1049, 1049, 1049, 1049, 1051, 1051, 1051, 1051, - 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1053, 1053, - 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, - 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, - 1055, 1055, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, - 1057, 1057, 1057, 1057, 1059, 1059, 1059, 1059, 1059, 1059, - 1059, 1059, 1059, 1059, 1059, 1059, 1061, 1061, 1061, 1061, - 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1063, 1063, - - 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, - 1065, 1065, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1067, 1067, 1067, 1067, 1069, 1069, 1069, 1069, 1069, 1069, - 1069, 1069, 1069, 1069, 1069, 1069, 1071, 1071, 1071, 1071, - 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1073, 1073, - 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, - 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, - 1075, 1075, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, - 1077, 1077, 1077, 1077, 1079, 1079, 1079, 1079, 1079, 1079, - - 1079, 1079, 1079, 1079, 1079, 1079, 1081, 1081, 1081, 1081, - 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, - 1085, 1085, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, - 1087, 1087, 1087, 1087, 1089, 1089, 1089, 1089, 1089, 1089, - 1089, 1089, 1089, 1089, 1089, 1089, 1091, 1091, 1091, 1091, - 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, - - 1095, 1095, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, - 1097, 1097, 1097, 1097, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1101, 1101, 1101, 1101, - 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1103, 1103, - 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, - 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, - 1105, 1105, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1109, 1109, 1109, 1109, 1109, 1109, - 1109, 1109, 1109, 1109, 1109, 1109, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, - 1115, 1115, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, - 1117, 1117, 1117, 1117, 1119, 1119, 1119, 1119, 1119, 1119, - 1119, 1119, 1119, 1119, 1119, 1119, 1121, 1121, 1121, 1121, - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1123, 1123, - 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, - 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, - 1125, 1125, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, - 1127, 1127, 1127, 1127, 1129, 1129, 1129, 1129, 1129, 1129, - - 1129, 1129, 1129, 1129, 1129, 1129, 1131, 1131, 1131, 1131, - 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, - 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, - 1135, 1135, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, - 1137, 1137, 1137, 1137, 1139, 1139, 1139, 1139, 1139, 1139, - 1139, 1139, 1139, 1139, 1139, 1139, 1141, 1141, 1141, 1141, - 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1143, 1143, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, - - 1145, 1145, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, 1147, 1149, 1149, 1149, 1149, 1149, 1149, - 1149, 1149, 1149, 1149, 1149, 1149, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1153, 1153, - 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, - 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, - 1155, 1155, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 1157, 1159, 1159, 1159, 1159, 1159, 1159, - 1159, 1159, 1159, 1159, 1159, 1159, 1161, 1161, 1161, 1161, - 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1163, 1163, - - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, - 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, - 1165, 1165, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, - 1167, 1167, 1167, 1167, 1169, 1169, 1169, 1169, 1169, 1169, - 1169, 1169, 1169, 1169, 1169, 1169, 1171, 1171, 1171, 1171, - 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1173, 1173, - 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, - 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, - 1175, 1175, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, - 1177, 1177, 1177, 1177, 1179, 1179, 1179, 1179, 1179, 1179, - - 1179, 1179, 1179, 1179, 1179, 1179, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1183, 1183, - 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, - 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, - 1185, 1185, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, - 1187, 1187, 1187, 1187, 1189, 1189, 1189, 1189, 1189, 1189, - 1189, 1189, 1189, 1189, 1189, 1189, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1193, 1193, - 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, - 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, - - 1195, 1195, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, - 1197, 1197, 1197, 1197, 1199, 1199, 1199, 1199, 1199, 1199, - 1199, 1199, 1199, 1199, 1199, 1199, 1201, 1201, 1201, 1201, - 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1203, 1203, - 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, - 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, - 1205, 1205, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, - 1207, 1207, 1207, 1207, 1209, 1209, 1209, 1209, 1209, 1209, - 1209, 1209, 1209, 1209, 1209, 1209, 1211, 1211, 1211, 1211, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1213, 1213, - - 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, - 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, - 1215, 1215, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, - 1217, 1217, 1217, 1217, 1219, 1219, 1219, 1219, 1219, 1219, - 1219, 1219, 1219, 1219, 1219, 1219, 1221, 1221, 1221, 1221, - 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1223, 1223, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, - 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, - 1225, 1225, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, - 1227, 1227, 1227, 1227, 1229, 1229, 1229, 1229, 1229, 1229, - - 1229, 1229, 1229, 1229, 1229, 1229, 1231, 1231, 1231, 1231, - 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1233, 1233, - 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, - 1237, 1237, 1237, 1237, 1239, 1239, 1239, 1239, 1239, 1239, - 1239, 1239, 1239, 1239, 1239, 1239, 1241, 1241, 1241, 1241, - 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, - - 1245, 1245, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, - 1247, 1247, 1247, 1247, 1249, 1249, 1249, 1249, 1249, 1249, - 1249, 1249, 1249, 1249, 1249, 1249, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1253, 1253, - 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, - 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, - 1255, 1255, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1259, 1259, 1259, 1259, 1259, 1259, - 1259, 1259, 1259, 1259, 1259, 1259, 1261, 1261, 1261, 1261, - 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1263, 1263, - - 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, - 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, - 1265, 1265, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, - 1267, 1267, 1267, 1267, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1273, 1273, - 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, - 1277, 1277, 1277, 1277, 1279, 1279, 1279, 1279, 1279, 1279, - - 1279, 1279, 1279, 1279, 1279, 1279, 1281, 1281, 1281, 1281, - 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1283, 1283, - 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, - 1287, 1287, 1287, 1287, 1289, 1289, 1289, 1289, 1289, 1289, - 1289, 1289, 1289, 1289, 1289, 1289, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1293, 1293, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, - - 1295, 1295, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1301, 1301, 1301, 1301, - 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1303, 1303, - 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, - 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, - 1305, 1305, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, - 1307, 1307, 1307, 1307, 1309, 1309, 1309, 1309, 1309, 1309, - 1309, 1309, 1309, 1309, 1309, 1309, 1311, 1311, 1311, 1311, - 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1313, 1313, - - 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, - 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, - 1315, 1315, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, - 1317, 1317, 1317, 1317, 1319, 1319, 1319, 1319, 1319, 1319, - 1319, 1319, 1319, 1319, 1319, 1319, 1321, 1321, 1321, 1321, - 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1323, 1323, - 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, - 1327, 1327, 1327, 1327, 1329, 1329, 1329, 1329, 1329, 1329, - - 1329, 1329, 1329, 1329, 1329, 1329, 1331, 1331, 1331, 1331, - 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1333, 1333, - 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, - 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, - 1335, 1335, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 1337, 1339, 1339, 1339, 1339, 1339, 1339, - 1339, 1339, 1339, 1339, 1339, 1339, 1341, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1343, 1343, - 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, - 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, - - 1345, 1345, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, - 1347, 1347, 1347, 1347, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1351, 1351, 1351, 1351, - 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1353, 1353, - 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, - 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, - 1355, 1355, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1359, 1359, 1359, 1359, 1359, 1359, - 1359, 1359, 1359, 1359, 1359, 1359, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1363, 1363, - - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, - 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, - 1365, 1365, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, - 1367, 1367, 1367, 1367, 1369, 1369, 1369, 1369, 1369, 1369, - 1369, 1369, 1369, 1369, 1369, 1369, 1371, 1371, 1371, 1371, - 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1373, 1373, - 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, - 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, - 1375, 1375, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, - 1377, 1377, 1377, 1377, 1379, 1379, 1379, 1379, 1379, 1379, - - 1379, 1379, 1379, 1379, 1379, 1379, 1381, 1381, 1381, 1381, - 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1383, 1383, - 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, - 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, - 1385, 1385, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1389, 1389, 1389, 1389, 1389, 1389, - 1389, 1389, 1389, 1389, 1389, 1389, 1391, 1391, 1391, 1391, - 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1393, 1393, - 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, - 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, - - 1395, 1395, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, - 1397, 1397, 1397, 1397, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1401, 1401, 1401, 1401, - 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, - 1405, 1405, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, - 1407, 1407, 1407, 1407, 486, 485, 484, 483, 482, 481, - 480, 479, 478, 477, 476, 475, 474, 473, 472, 408, - 471, 470, 469, 466, 465, 404, 464, 460, 459, 456, - - 454, 453, 452, 451, 450, 449, 448, 447, 446, 445, - 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, - 434, 433, 432, 431, 430, 429, 428, 427, 426, 425, - 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, - 414, 413, 412, 411, 339, 407, 406, 405, 404, 403, - 399, 398, 397, 396, 395, 394, 393, 389, 388, 387, - 386, 385, 384, 383, 382, 381, 378, 377, 376, 375, - 374, 373, 372, 371, 370, 369, 368, 367, 366, 360, - 359, 358, 357, 356, 353, 352, 351, 350, 349, 348, - 347, 346, 345, 344, 341, 270, 339, 338, 336, 335, - - 334, 333, 332, 331, 330, 329, 328, 249, 327, 326, - 325, 230, 226, 1409, 223, 220, 320, 319, 318, 317, - 316, 315, 314, 313, 312, 309, 306, 305, 304, 300, - 299, 298, 297, 296, 293, 292, 291, 290, 289, 288, - 285, 280, 279, 278, 277, 269, 268, 265, 260, 259, - 258, 257, 256, 255, 254, 253, 252, 251, 1409, 247, - 246, 244, 110, 243, 241, 241, 240, 238, 237, 226, - 223, 221, 220, 211, 205, 204, 203, 196, 193, 192, - 191, 186, 170, 165, 163, 162, 153, 138, 116, 110, - 1409, 102, 102, 101, 101, 25, 25, 23, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409 + 111, 111, 436, 111, 117, 117, 117, 117, 435, 117, + 117, 117, 117, 117, 117, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 164, 434, 433, 164, + 208, 208, 208, 432, 208, 208, 431, 208, 208, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + + 219, 430, 429, 219, 222, 222, 222, 222, 222, 428, + 222, 222, 222, 222, 222, 232, 427, 426, 425, 424, + 232, 232, 423, 232, 234, 422, 421, 234, 235, 420, + 419, 235, 236, 236, 236, 236, 236, 236, 418, 236, + 236, 236, 236, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 249, 417, 416, 249, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 341, 415, 414, 413, 412, 340, 408, 407, 406, 341, + 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, + + 393, 411, 405, 404, 400, 399, 411, 398, 397, 411, + 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, + 456, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 539, 539, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 585, 597, 597, 597, 597, 597, + 597, 597, 597, 597, 597, 597, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 611, 611, 611, + 611, 611, 611, 611, 611, 611, 611, 611, 615, 615, + + 615, 615, 615, 615, 615, 615, 615, 615, 615, 619, + 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, + 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, + 623, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 630, 630, 630, 630, 630, 630, 630, 630, + 630, 630, 630, 636, 636, 636, 636, 636, 636, 636, + 636, 636, 636, 636, 641, 641, 641, 641, 641, 641, + 641, 641, 641, 641, 641, 646, 646, 646, 646, 646, + 646, 646, 646, 646, 646, 646, 652, 652, 652, 652, + 652, 652, 652, 652, 652, 652, 652, 654, 654, 654, + + 654, 654, 654, 654, 654, 654, 654, 654, 656, 656, + 656, 656, 656, 656, 656, 656, 656, 656, 656, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, + 660, 662, 662, 662, 662, 662, 662, 662, 662, 662, + 662, 662, 664, 664, 664, 664, 664, 664, 664, 664, + 664, 664, 664, 666, 666, 666, 666, 666, 666, 666, + 666, 666, 666, 666, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 672, 672, 672, 672, + + 672, 672, 672, 672, 672, 672, 672, 674, 674, 674, + 674, 674, 674, 674, 674, 674, 674, 674, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 682, 682, 682, 682, 682, 682, 682, 682, 682, + 682, 682, 684, 684, 684, 684, 684, 684, 684, 684, + 684, 684, 684, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 688, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 690, 690, 690, 690, 690, + + 690, 690, 690, 690, 690, 690, 692, 692, 692, 692, + 692, 692, 692, 692, 692, 692, 692, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 696, 696, + 696, 696, 696, 696, 696, 696, 696, 696, 696, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, + 700, 702, 702, 702, 702, 702, 702, 702, 702, 702, + 702, 702, 704, 704, 704, 704, 704, 704, 704, 704, + 704, 704, 704, 706, 706, 706, 706, 706, 706, 706, + 706, 706, 706, 706, 708, 708, 708, 708, 708, 708, + + 708, 708, 708, 708, 708, 710, 710, 710, 710, 710, + 710, 710, 710, 710, 710, 710, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 714, 714, 714, + 714, 714, 714, 714, 714, 714, 714, 714, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 718, + 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 726, 726, 726, 726, 726, 726, 726, + + 726, 726, 726, 726, 728, 728, 728, 728, 728, 728, + 728, 728, 728, 728, 728, 730, 730, 730, 730, 730, + 730, 730, 730, 730, 730, 730, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 734, 734, 734, + 734, 734, 734, 734, 734, 734, 734, 734, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, 736, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, + 740, 742, 742, 742, 742, 742, 742, 742, 742, 742, + 742, 742, 744, 744, 744, 744, 744, 744, 744, 744, + + 744, 744, 744, 746, 746, 746, 746, 746, 746, 746, + 746, 746, 746, 746, 748, 748, 748, 748, 748, 748, + 748, 748, 748, 748, 748, 750, 750, 750, 750, 750, + 750, 750, 750, 750, 750, 750, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 754, 754, 754, + 754, 754, 754, 754, 754, 754, 754, 754, 756, 756, + 756, 756, 756, 756, 756, 756, 756, 756, 756, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 762, 762, 762, 762, 762, 762, 762, 762, 762, + + 762, 762, 764, 764, 764, 764, 764, 764, 764, 764, + 764, 764, 764, 766, 766, 766, 766, 766, 766, 766, + 766, 766, 766, 766, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 770, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, 776, 776, + 776, 776, 776, 776, 776, 776, 776, 776, 776, 778, + 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + + 780, 782, 782, 782, 782, 782, 782, 782, 782, 782, + 782, 782, 784, 784, 784, 784, 784, 784, 784, 784, + 784, 784, 784, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 786, 786, 788, 788, 788, 788, 788, 788, + 788, 788, 788, 788, 788, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 792, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 792, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 796, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 796, 798, + 798, 798, 798, 798, 798, 798, 798, 798, 798, 798, + + 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, + 800, 802, 802, 802, 802, 802, 802, 802, 802, 802, + 802, 802, 804, 804, 804, 804, 804, 804, 804, 804, + 804, 804, 804, 806, 806, 806, 806, 806, 806, 806, + 806, 806, 806, 806, 808, 808, 808, 808, 808, 808, + 808, 808, 808, 808, 808, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 812, 814, 814, 814, + 814, 814, 814, 814, 814, 814, 814, 814, 816, 816, + 816, 816, 816, 816, 816, 816, 816, 816, 816, 818, + + 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, + 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, + 820, 822, 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 832, 832, 832, 832, + 832, 832, 832, 832, 832, 832, 832, 834, 834, 834, + 834, 834, 834, 834, 834, 834, 834, 834, 836, 836, + + 836, 836, 836, 836, 836, 836, 836, 836, 836, 838, + 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 842, 842, 842, 842, 842, 842, 842, 842, 842, + 842, 842, 844, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 852, 852, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 854, 854, 854, + + 854, 854, 854, 854, 854, 854, 854, 854, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 858, + 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, + 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, + 860, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 872, 872, 872, 872, + + 872, 872, 872, 872, 872, 872, 872, 874, 874, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 876, 876, + 876, 876, 876, 876, 876, 876, 876, 876, 876, 878, + 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, + 880, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, 882, 884, 884, 884, 884, 884, 884, 884, 884, + 884, 884, 884, 886, 886, 886, 886, 886, 886, 886, + 886, 886, 886, 886, 888, 888, 888, 888, 888, 888, + 888, 888, 888, 888, 888, 890, 890, 890, 890, 890, + + 890, 890, 890, 890, 890, 890, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 896, 896, + 896, 896, 896, 896, 896, 896, 896, 896, 896, 898, + 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 902, 902, 902, 902, 902, 902, 902, 902, 902, + 902, 902, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 908, 908, 908, 908, 908, 908, + + 908, 908, 908, 908, 908, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 912, 912, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 914, 914, 914, + 914, 914, 914, 914, 914, 914, 914, 914, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, 916, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 920, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 924, 924, 924, 924, 924, 924, 924, 924, + 924, 924, 924, 926, 926, 926, 926, 926, 926, 926, + + 926, 926, 926, 926, 928, 928, 928, 928, 928, 928, + 928, 928, 928, 928, 928, 930, 930, 930, 930, 930, + 930, 930, 930, 930, 930, 930, 932, 932, 932, 932, + 932, 932, 932, 932, 932, 932, 932, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 936, 936, + 936, 936, 936, 936, 936, 936, 936, 936, 936, 938, + 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 944, 944, 944, 944, 944, 944, 944, + + 944, 944, 944, 946, 946, 946, 946, 946, 946, 946, + 946, 946, 946, 946, 948, 948, 948, 948, 948, 948, + 948, 948, 948, 948, 948, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 952, 952, 952, 952, + 952, 952, 952, 952, 952, 952, 952, 954, 954, 954, + 954, 954, 954, 954, 954, 954, 954, 954, 956, 956, + 956, 956, 956, 956, 956, 956, 956, 956, 956, 958, + 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, + 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, + 960, 962, 962, 962, 962, 962, 962, 962, 962, 962, + + 962, 962, 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 966, 966, 966, 966, 966, 966, 966, + 966, 966, 966, 966, 968, 968, 968, 968, 968, 968, + 968, 968, 968, 968, 968, 970, 970, 970, 970, 970, + 970, 970, 970, 970, 970, 970, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 974, 974, 974, + 974, 974, 974, 974, 974, 974, 974, 974, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + + 980, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 984, 984, 984, 984, 984, 984, 984, 984, + 984, 984, 984, 986, 986, 986, 986, 986, 986, 986, + 986, 986, 986, 986, 988, 988, 988, 988, 988, 988, + 988, 988, 988, 988, 988, 990, 990, 990, 990, 990, + 990, 990, 990, 990, 990, 990, 992, 992, 992, 992, + 992, 992, 992, 992, 992, 992, 992, 994, 994, 994, + 994, 994, 994, 994, 994, 994, 994, 994, 996, 996, + 996, 996, 996, 996, 996, 996, 996, 996, 996, 998, + 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, + 1002, 1002, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, + 1004, 1004, 1004, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1008, 1008, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1008, 1010, 1010, 1010, 1010, 1010, + 1010, 1010, 1010, 1010, 1010, 1010, 1012, 1012, 1012, 1012, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1014, 1014, 1014, + 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1016, 1016, + 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1018, + + 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, + 1020, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, + 1022, 1022, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1026, 1026, 1026, 1026, 1026, 1026, 1026, + 1026, 1026, 1026, 1026, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1036, 1036, + + 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, + 1042, 1042, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, + 1044, 1044, 1044, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1050, 1050, 1050, 1050, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1052, 1052, 1052, 1052, + 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1054, 1054, 1054, + + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1056, 1056, + 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, + 1062, 1062, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1066, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1068, 1068, 1068, 1068, 1068, 1068, + 1068, 1068, 1068, 1068, 1068, 1070, 1070, 1070, 1070, 1070, + 1070, 1070, 1070, 1070, 1070, 1070, 1072, 1072, 1072, 1072, + + 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1074, 1074, 1074, + 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1078, + 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, + 1080, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, + 1082, 1082, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1086, 1086, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1090, 1090, 1090, 1090, 1090, + + 1090, 1090, 1090, 1090, 1090, 1090, 1092, 1092, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1094, 1094, 1094, + 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, + 1104, 1104, 1104, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1108, 1108, 1108, 1108, 1108, 1108, + + 1108, 1108, 1108, 1108, 1108, 1110, 1110, 1110, 1110, 1110, + 1110, 1110, 1110, 1110, 1110, 1110, 1112, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1114, 1114, 1114, + 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, + 1120, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, + 1122, 1122, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1126, 1126, 1126, 1126, 1126, 1126, 1126, + + 1126, 1126, 1126, 1126, 1128, 1128, 1128, 1128, 1128, 1128, + 1128, 1128, 1128, 1128, 1128, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1130, 1130, 1130, 1130, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1134, 1134, 1134, + 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1136, 1136, + 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, + 1140, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, + 1142, 1142, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, + + 1144, 1144, 1144, 1146, 1146, 1146, 1146, 1146, 1146, 1146, + 1146, 1146, 1146, 1146, 1148, 1148, 1148, 1148, 1148, 1148, + 1148, 1148, 1148, 1148, 1148, 1150, 1150, 1150, 1150, 1150, + 1150, 1150, 1150, 1150, 1150, 1150, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1156, 1156, + 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, + 1160, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, + + 1162, 1162, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, + 1164, 1164, 1164, 1166, 1166, 1166, 1166, 1166, 1166, 1166, + 1166, 1166, 1166, 1166, 1168, 1168, 1168, 1168, 1168, 1168, + 1168, 1168, 1168, 1168, 1168, 1170, 1170, 1170, 1170, 1170, + 1170, 1170, 1170, 1170, 1170, 1170, 1172, 1172, 1172, 1172, + 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, + + 1180, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, + 1182, 1182, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, + 1184, 1184, 1184, 1186, 1186, 1186, 1186, 1186, 1186, 1186, + 1186, 1186, 1186, 1186, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1188, 1188, 1188, 1190, 1190, 1190, 1190, 1190, + 1190, 1190, 1190, 1190, 1190, 1190, 1192, 1192, 1192, 1192, + 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1194, 1194, 1194, + 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1196, 1196, + 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1198, + 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, + + 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, + 1200, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, + 1202, 1202, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + 1204, 1204, 1204, 1206, 1206, 1206, 1206, 1206, 1206, 1206, + 1206, 1206, 1206, 1206, 1208, 1208, 1208, 1208, 1208, 1208, + 1208, 1208, 1208, 1208, 1208, 1210, 1210, 1210, 1210, 1210, + 1210, 1210, 1210, 1210, 1210, 1210, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1214, 1214, 1214, + 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1216, 1216, + 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1218, + + 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, + 1220, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, + 1224, 1224, 1224, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1230, 1230, 1230, 1230, 1230, + 1230, 1230, 1230, 1230, 1230, 1230, 1232, 1232, 1232, 1232, + 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1236, 1236, + + 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, + 1240, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, + 1244, 1244, 1244, 1246, 1246, 1246, 1246, 1246, 1246, 1246, + 1246, 1246, 1246, 1246, 1248, 1248, 1248, 1248, 1248, 1248, + 1248, 1248, 1248, 1248, 1248, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1252, 1252, 1252, 1252, + 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1254, 1254, 1254, + + 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1256, 1256, + 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1258, + 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, + 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, + 1260, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, + 1262, 1262, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1266, 1266, 1266, 1266, 1266, 1266, 1266, + 1266, 1266, 1266, 1266, 1268, 1268, 1268, 1268, 1268, 1268, + 1268, 1268, 1268, 1268, 1268, 1270, 1270, 1270, 1270, 1270, + 1270, 1270, 1270, 1270, 1270, 1270, 1272, 1272, 1272, 1272, + + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1274, 1274, 1274, + 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1276, 1276, + 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1278, + 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, + 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, + 1280, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, + 1282, 1282, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, + 1284, 1284, 1284, 1286, 1286, 1286, 1286, 1286, 1286, 1286, + 1286, 1286, 1286, 1286, 1288, 1288, 1288, 1288, 1288, 1288, + 1288, 1288, 1288, 1288, 1288, 1290, 1290, 1290, 1290, 1290, + + 1290, 1290, 1290, 1290, 1290, 1290, 1292, 1292, 1292, 1292, + 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1294, 1294, 1294, + 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1298, + 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, + 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, + 1300, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, + 1302, 1302, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, + 1304, 1304, 1304, 1306, 1306, 1306, 1306, 1306, 1306, 1306, + 1306, 1306, 1306, 1306, 1308, 1308, 1308, 1308, 1308, 1308, + + 1308, 1308, 1308, 1308, 1308, 1310, 1310, 1310, 1310, 1310, + 1310, 1310, 1310, 1310, 1310, 1310, 1312, 1312, 1312, 1312, + 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1314, 1314, 1314, + 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1316, 1316, + 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1318, + 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, + 1320, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, + 1324, 1324, 1324, 1326, 1326, 1326, 1326, 1326, 1326, 1326, + + 1326, 1326, 1326, 1326, 1328, 1328, 1328, 1328, 1328, 1328, + 1328, 1328, 1328, 1328, 1328, 1330, 1330, 1330, 1330, 1330, + 1330, 1330, 1330, 1330, 1330, 1330, 1332, 1332, 1332, 1332, + 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1334, 1334, 1334, + 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1336, 1336, + 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1338, + 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, + 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, + 1340, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, + 1342, 1342, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + + 1344, 1344, 1344, 1346, 1346, 1346, 1346, 1346, 1346, 1346, + 1346, 1346, 1346, 1346, 1348, 1348, 1348, 1348, 1348, 1348, + 1348, 1348, 1348, 1348, 1348, 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, 1350, 1352, 1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1354, 1354, 1354, + 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 1366, 1366, 1366, 1368, 1368, 1368, 1368, 1368, 1368, + 1368, 1368, 1368, 1368, 1368, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1390, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 1390, 1390, 1392, 1392, 1392, 1392, + 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1396, 1396, + 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1398, + 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, + + 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, + 1400, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, + 1402, 1402, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, + 1404, 1404, 1404, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + 1406, 1406, 1406, 1406, 1408, 1408, 1408, 1408, 1408, 1408, + 1408, 1408, 1408, 1408, 1408, 396, 395, 394, 390, 389, + 388, 387, 386, 385, 384, 383, 382, 379, 378, 377, + 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, + 361, 360, 359, 358, 357, 354, 353, 352, 351, 350, + 349, 348, 347, 346, 345, 342, 271, 340, 339, 337, + + 336, 335, 334, 333, 332, 331, 330, 329, 250, 328, + 327, 326, 230, 226, 1410, 223, 220, 321, 320, 319, + 318, 317, 316, 315, 314, 313, 310, 307, 306, 305, + 301, 300, 299, 298, 297, 294, 293, 292, 291, 290, + 289, 286, 281, 280, 279, 278, 270, 269, 266, 261, + 260, 259, 258, 257, 256, 255, 254, 253, 252, 1410, + 248, 247, 245, 110, 244, 242, 242, 241, 238, 237, + 226, 223, 221, 220, 211, 205, 204, 203, 196, 193, + 192, 191, 186, 170, 165, 163, 162, 153, 138, 116, + 110, 1410, 102, 102, 101, 101, 25, 25, 23, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410 } ; -static yyconst short int yy_chk[8061] = +static yyconst short int yy_chk[7662] = { 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -1880,9 +1837,9 @@ static yyconst short int yy_chk[8061] = 27, 27, 27, 11, 21, 21, 29, 32, 32, 67, 21, 22, 22, 7, 8, 34, 33, 22, 25, 67, 9, 10, 11, 9, 10, 11, 12, 38, 21, 21, - 29, 12, 33, 933, 34, 22, 22, 39, 38, 40, + 29, 12, 33, 934, 34, 22, 22, 39, 38, 40, 40, 40, 25, 46, 46, 40, 39, 39, 47, 47, - 12, 935, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 936, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, @@ -1899,856 +1856,813 @@ static yyconst short int yy_chk[8061] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 35, 41, 937, 52, 45, 42, + 15, 15, 15, 15, 35, 41, 938, 52, 45, 42, 41, 42, 42, 42, 45, 45, 45, 41, 43, 52, 43, 43, 43, 52, 52, 64, 73, 88, 64, 42, - 55, 54, 66, 939, 55, 66, 35, 35, 43, 35, + 55, 54, 66, 940, 55, 66, 35, 35, 43, 35, 55, 35, 54, 125, 35, 54, 88, 68, 42, 56, 35, 57, 68, 35, 35, 172, 35, 57, 56, 56, 56, 73, 125, 57, 60, 80, 80, 80, 56, 172, - 56, 60, 60, 115, 115, 115, 941, 60, 77, 77, + 56, 60, 60, 115, 115, 115, 942, 60, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 79, 79, 79, 82, 92, 93, 90, 90, 943, 92, - 93, 94, 94, 95, 95, 113, 117, 82, 82, 90, - 110, 119, 122, 122, 155, 155, 119, 144, 144, 144, - - 174, 92, 93, 174, 95, 945, 110, 79, 113, 110, - 117, 162, 162, 90, 182, 144, 90, 194, 94, 171, - 171, 94, 947, 194, 82, 182, 949, 82, 149, 149, - 149, 951, 150, 110, 150, 150, 150, 151, 196, 151, - 189, 196, 151, 151, 151, 953, 149, 152, 152, 152, - 165, 955, 150, 165, 957, 165, 189, 189, 959, 165, - 165, 152, 152, 152, 152, 152, 152, 212, 212, 212, - 213, 213, 213, 216, 216, 228, 217, 217, 217, 961, - 228, 963, 232, 232, 213, 213, 213, 213, 213, 213, - 217, 217, 217, 217, 217, 217, 229, 233, 233, 243, - - 965, 229, 228, 232, 260, 260, 260, 261, 261, 261, - 262, 262, 262, 967, 273, 243, 285, 285, 243, 263, - 263, 263, 292, 229, 292, 261, 273, 292, 307, 264, - 264, 264, 322, 322, 340, 340, 307, 292, 321, 321, - 321, 292, 243, 264, 264, 264, 264, 264, 264, 323, - 323, 323, 321, 321, 321, 321, 321, 321, 325, 332, - 337, 337, 337, 323, 323, 323, 323, 323, 323, 393, - 332, 394, 394, 394, 325, 397, 400, 325, 404, 410, - 410, 456, 460, 461, 969, 393, 397, 400, 393, 404, - 503, 467, 470, 460, 461, 332, 505, 456, 971, 509, - - 456, 325, 467, 470, 539, 510, 503, 505, 511, 503, - 509, 397, 393, 504, 504, 504, 510, 541, 542, 511, - 539, 543, 973, 539, 456, 540, 540, 540, 541, 542, - 545, 975, 543, 503, 547, 547, 547, 568, 570, 570, - 570, 545, 585, 977, 979, 981, 597, 539, 604, 983, - 611, 985, 987, 568, 615, 619, 568, 989, 585, 547, - 623, 585, 597, 570, 604, 597, 611, 604, 540, 611, - 615, 619, 991, 615, 619, 993, 623, 995, 997, 623, - 568, 624, 624, 624, 999, 585, 1001, 1003, 626, 597, - 1005, 604, 1007, 611, 627, 627, 627, 615, 619, 1009, - - 630, 1011, 1013, 623, 626, 624, 1015, 626, 628, 628, - 628, 636, 628, 644, 644, 644, 630, 628, 627, 630, - 631, 631, 631, 641, 631, 646, 1017, 636, 1019, 631, - 636, 626, 649, 649, 649, 1021, 1023, 652, 644, 641, - 1025, 646, 641, 630, 646, 654, 656, 1027, 1029, 1031, - 1033, 1035, 1037, 652, 636, 628, 652, 649, 658, 660, - 662, 654, 656, 1039, 654, 656, 641, 631, 646, 1041, - 1043, 664, 1045, 1047, 658, 660, 662, 658, 660, 662, - 652, 666, 1049, 1051, 1053, 1055, 1057, 664, 654, 656, - 664, 668, 670, 672, 1059, 1061, 1063, 666, 1065, 674, - - 666, 658, 660, 662, 676, 1067, 678, 668, 670, 672, - 668, 670, 672, 680, 664, 674, 1069, 1071, 674, 1073, - 676, 682, 678, 676, 666, 678, 1075, 684, 1077, 680, - 1079, 1081, 680, 1083, 668, 670, 672, 682, 686, 688, - 682, 1085, 674, 684, 690, 1087, 684, 676, 1089, 678, - 692, 1091, 694, 1093, 686, 688, 680, 686, 688, 696, - 690, 698, 1095, 690, 682, 1097, 692, 700, 694, 692, - 684, 694, 702, 704, 1099, 696, 1101, 698, 696, 1103, - 698, 686, 688, 700, 706, 1105, 700, 690, 702, 704, - 708, 702, 704, 692, 1107, 694, 1109, 1111, 710, 1113, - - 706, 1115, 696, 706, 698, 712, 708, 714, 1117, 708, - 700, 1119, 716, 718, 710, 702, 704, 710, 720, 722, - 724, 712, 1121, 714, 712, 1123, 714, 706, 716, 718, - 726, 716, 718, 708, 720, 722, 724, 720, 722, 724, - 1125, 710, 1127, 1129, 1131, 1133, 726, 1135, 712, 726, - 714, 728, 730, 732, 1137, 716, 718, 1139, 734, 736, - 738, 720, 722, 724, 740, 742, 744, 728, 730, 732, - 728, 730, 732, 726, 734, 736, 738, 734, 736, 738, - 740, 742, 744, 740, 742, 744, 1141, 1143, 1145, 1147, - 1149, 1151, 1153, 1155, 728, 730, 732, 746, 748, 750, - - 1157, 734, 736, 738, 752, 754, 756, 740, 742, 744, - 758, 760, 762, 746, 748, 750, 746, 748, 750, 764, - 752, 754, 756, 752, 754, 756, 758, 760, 762, 758, - 760, 762, 1159, 1161, 1163, 764, 1165, 1167, 764, 1169, - 746, 748, 750, 1171, 766, 768, 1173, 752, 754, 756, - 770, 772, 774, 758, 760, 762, 776, 778, 780, 1175, - 766, 768, 764, 766, 768, 782, 770, 772, 774, 770, - 772, 774, 776, 778, 780, 776, 778, 780, 1177, 1179, - 1181, 782, 1183, 1185, 782, 1187, 784, 766, 768, 1189, - 786, 788, 1191, 770, 772, 774, 790, 792, 794, 776, - - 778, 780, 784, 796, 798, 784, 786, 788, 782, 786, - 788, 800, 790, 792, 794, 790, 792, 794, 1193, 796, - 798, 1195, 796, 798, 1197, 1199, 802, 800, 1201, 784, - 800, 1203, 804, 786, 788, 1205, 806, 808, 1207, 790, - 792, 794, 802, 810, 812, 802, 796, 798, 804, 814, - 1209, 804, 806, 808, 800, 806, 808, 816, 818, 810, - 812, 1211, 810, 812, 1213, 814, 820, 1215, 814, 802, - 1217, 1219, 822, 816, 818, 804, 816, 818, 824, 806, - 808, 1221, 820, 826, 1223, 820, 810, 812, 822, 828, - 1225, 822, 814, 1227, 824, 830, 1229, 824, 1231, 826, - - 816, 818, 826, 832, 834, 828, 1233, 1235, 828, 820, - 1237, 830, 836, 1239, 830, 822, 1241, 838, 840, 832, - 834, 824, 832, 834, 842, 844, 826, 1243, 836, 846, - 1245, 836, 828, 838, 840, 848, 838, 840, 830, 1247, - 842, 844, 1249, 842, 844, 846, 832, 834, 846, 1251, - 850, 848, 1253, 1255, 848, 836, 1257, 852, 854, 1259, - 838, 840, 1261, 856, 858, 860, 850, 842, 844, 850, - 862, 864, 846, 852, 854, 866, 852, 854, 848, 856, - 858, 860, 856, 858, 860, 1263, 862, 864, 1265, 862, - 864, 866, 1267, 850, 866, 1269, 868, 1271, 1273, 1275, - - 852, 854, 1277, 870, 872, 874, 856, 858, 860, 876, - 878, 880, 868, 862, 864, 868, 882, 884, 866, 870, - 872, 874, 870, 872, 874, 876, 878, 880, 876, 878, - 880, 1279, 882, 884, 1281, 882, 884, 1283, 1285, 868, - 1287, 1289, 886, 1291, 1293, 1295, 870, 872, 874, 888, - 890, 892, 876, 878, 880, 894, 896, 898, 886, 882, - 884, 886, 900, 902, 904, 888, 890, 892, 888, 890, - 892, 894, 896, 898, 894, 896, 898, 1297, 900, 902, - 904, 900, 902, 904, 1299, 886, 1301, 1303, 1305, 1307, - 1309, 1311, 888, 890, 892, 906, 908, 910, 894, 896, - - 898, 912, 914, 916, 1313, 900, 902, 904, 918, 920, - 922, 906, 908, 910, 906, 908, 910, 912, 914, 916, - 912, 914, 916, 1315, 918, 920, 922, 918, 920, 922, - 1317, 924, 1319, 1321, 1323, 1325, 1327, 1329, 906, 908, - 910, 926, 928, 930, 912, 914, 916, 924, 932, 934, - 924, 918, 920, 922, 936, 1331, 938, 926, 928, 930, - 926, 928, 930, 940, 932, 934, 1333, 932, 934, 1335, - 936, 942, 938, 936, 924, 938, 1337, 944, 1339, 940, - 1341, 1343, 940, 1345, 926, 928, 930, 942, 946, 948, - 942, 932, 934, 944, 950, 1347, 944, 936, 1349, 938, - - 952, 1351, 954, 1353, 946, 948, 940, 946, 948, 956, - 950, 958, 1355, 950, 942, 1357, 952, 960, 954, 952, - 944, 954, 962, 964, 1359, 956, 1361, 958, 956, 1363, - 958, 946, 948, 960, 966, 1365, 960, 950, 962, 964, - 968, 962, 964, 952, 1367, 954, 1369, 1371, 970, 1373, - 966, 1375, 956, 966, 958, 972, 968, 974, 1377, 968, - 960, 1379, 976, 978, 970, 962, 964, 970, 980, 982, - 984, 972, 1381, 974, 972, 1383, 974, 966, 976, 978, - 986, 976, 978, 968, 980, 982, 984, 980, 982, 984, - 1385, 970, 1387, 1389, 1391, 1393, 986, 1395, 972, 986, - - 974, 988, 990, 992, 1397, 976, 978, 1399, 994, 996, - 998, 980, 982, 984, 1000, 1002, 1004, 988, 990, 992, - 988, 990, 992, 986, 994, 996, 998, 994, 996, 998, - 1000, 1002, 1004, 1000, 1002, 1004, 1401, 1403, 1405, 1417, - 931, 929, 927, 925, 988, 990, 992, 1006, 1008, 1010, - 923, 994, 996, 998, 1012, 1014, 1016, 1000, 1002, 1004, - 1018, 1020, 1022, 1006, 1008, 1010, 1006, 1008, 1010, 1024, - 1012, 1014, 1016, 1012, 1014, 1016, 1018, 1020, 1022, 1018, - 1020, 1022, 921, 919, 917, 1024, 915, 913, 1024, 911, - 1006, 1008, 1010, 909, 1026, 1028, 907, 1012, 1014, 1016, - - 1030, 1032, 1034, 1018, 1020, 1022, 1036, 1038, 1040, 905, - 1026, 1028, 1024, 1026, 1028, 1042, 1030, 1032, 1034, 1030, - 1032, 1034, 1036, 1038, 1040, 1036, 1038, 1040, 903, 901, - 899, 1042, 897, 895, 1042, 893, 1044, 1026, 1028, 891, - 1046, 1048, 889, 1030, 1032, 1034, 1050, 1052, 1054, 1036, - 1038, 1040, 1044, 1056, 1058, 1044, 1046, 1048, 1042, 1046, - 1048, 1060, 1050, 1052, 1054, 1050, 1052, 1054, 887, 1056, - 1058, 885, 1056, 1058, 883, 881, 1062, 1060, 879, 1044, - 1060, 877, 1064, 1046, 1048, 875, 1066, 1068, 873, 1050, - 1052, 1054, 1062, 1070, 1072, 1062, 1056, 1058, 1064, 1074, - - 871, 1064, 1066, 1068, 1060, 1066, 1068, 1076, 1078, 1070, - 1072, 869, 1070, 1072, 867, 1074, 1080, 865, 1074, 1062, - 863, 861, 1082, 1076, 1078, 1064, 1076, 1078, 1084, 1066, - 1068, 859, 1080, 1086, 857, 1080, 1070, 1072, 1082, 1088, - 855, 1082, 1074, 853, 1084, 1090, 851, 1084, 849, 1086, - 1076, 1078, 1086, 1092, 1094, 1088, 847, 845, 1088, 1080, - 843, 1090, 1096, 841, 1090, 1082, 839, 1098, 1100, 1092, - 1094, 1084, 1092, 1094, 1102, 1104, 1086, 837, 1096, 1106, - 835, 1096, 1088, 1098, 1100, 1108, 1098, 1100, 1090, 833, - 1102, 1104, 831, 1102, 1104, 1106, 1092, 1094, 1106, 829, - - 1110, 1108, 827, 825, 1108, 1096, 823, 1112, 1114, 821, - 1098, 1100, 819, 1116, 1118, 1120, 1110, 1102, 1104, 1110, - 1122, 1124, 1106, 1112, 1114, 1126, 1112, 1114, 1108, 1116, - 1118, 1120, 1116, 1118, 1120, 817, 1122, 1124, 815, 1122, - 1124, 1126, 813, 1110, 1126, 811, 1128, 809, 807, 805, - 1112, 1114, 803, 1130, 1132, 1134, 1116, 1118, 1120, 1136, - 1138, 1140, 1128, 1122, 1124, 1128, 1142, 1144, 1126, 1130, - 1132, 1134, 1130, 1132, 1134, 1136, 1138, 1140, 1136, 1138, - 1140, 801, 1142, 1144, 799, 1142, 1144, 797, 795, 1128, - 793, 791, 1146, 789, 787, 785, 1130, 1132, 1134, 1148, - - 1150, 1152, 1136, 1138, 1140, 1154, 1156, 1158, 1146, 1142, - 1144, 1146, 1160, 1162, 1164, 1148, 1150, 1152, 1148, 1150, - 1152, 1154, 1156, 1158, 1154, 1156, 1158, 783, 1160, 1162, - 1164, 1160, 1162, 1164, 781, 1146, 779, 777, 775, 773, - 771, 769, 1148, 1150, 1152, 1166, 1168, 1170, 1154, 1156, - 1158, 1172, 1174, 1176, 767, 1160, 1162, 1164, 1178, 1180, - 1182, 1166, 1168, 1170, 1166, 1168, 1170, 1172, 1174, 1176, - 1172, 1174, 1176, 765, 1178, 1180, 1182, 1178, 1180, 1182, - 763, 1184, 761, 759, 757, 755, 753, 751, 1166, 1168, - 1170, 1186, 1188, 1190, 1172, 1174, 1176, 1184, 1192, 1194, - - 1184, 1178, 1180, 1182, 1196, 749, 1198, 1186, 1188, 1190, - 1186, 1188, 1190, 1200, 1192, 1194, 747, 1192, 1194, 745, - 1196, 1202, 1198, 1196, 1184, 1198, 743, 1204, 741, 1200, - 739, 737, 1200, 735, 1186, 1188, 1190, 1202, 1206, 1208, - 1202, 1192, 1194, 1204, 1210, 733, 1204, 1196, 731, 1198, - 1212, 729, 1214, 727, 1206, 1208, 1200, 1206, 1208, 1216, - 1210, 1218, 725, 1210, 1202, 723, 1212, 1220, 1214, 1212, - 1204, 1214, 1222, 1224, 721, 1216, 719, 1218, 1216, 717, - 1218, 1206, 1208, 1220, 1226, 715, 1220, 1210, 1222, 1224, - 1228, 1222, 1224, 1212, 713, 1214, 711, 709, 1230, 707, - - 1226, 705, 1216, 1226, 1218, 1232, 1228, 1234, 703, 1228, - 1220, 701, 1236, 1238, 1230, 1222, 1224, 1230, 1240, 1242, - 1244, 1232, 699, 1234, 1232, 697, 1234, 1226, 1236, 1238, - 1246, 1236, 1238, 1228, 1240, 1242, 1244, 1240, 1242, 1244, - 695, 1230, 693, 691, 689, 687, 1246, 685, 1232, 1246, - 1234, 1248, 1250, 1252, 683, 1236, 1238, 681, 1254, 1256, - 1258, 1240, 1242, 1244, 1260, 1262, 1264, 1248, 1250, 1252, - 1248, 1250, 1252, 1246, 1254, 1256, 1258, 1254, 1256, 1258, - 1260, 1262, 1264, 1260, 1262, 1264, 679, 677, 675, 673, - 671, 669, 667, 665, 1248, 1250, 1252, 1266, 1268, 1270, - - 663, 1254, 1256, 1258, 1272, 1274, 1276, 1260, 1262, 1264, - 1278, 1280, 1282, 1266, 1268, 1270, 1266, 1268, 1270, 1284, - 1272, 1274, 1276, 1272, 1274, 1276, 1278, 1280, 1282, 1278, - 1280, 1282, 661, 659, 657, 1284, 655, 653, 1284, 651, - 1266, 1268, 1270, 648, 1286, 1288, 647, 1272, 1274, 1276, - 1290, 1292, 1294, 1278, 1280, 1282, 1296, 1298, 1300, 645, - 1286, 1288, 1284, 1286, 1288, 1302, 1290, 1292, 1294, 1290, - 1292, 1294, 1296, 1298, 1300, 1296, 1298, 1300, 643, 642, - 640, 1302, 639, 638, 1302, 637, 1304, 1286, 1288, 635, - 1306, 1308, 634, 1290, 1292, 1294, 1310, 1312, 1314, 1296, - - 1298, 1300, 1304, 1316, 1318, 1304, 1306, 1308, 1302, 1306, - 1308, 1320, 1310, 1312, 1314, 1310, 1312, 1314, 633, 1316, - 1318, 632, 1316, 1318, 629, 625, 1322, 1320, 622, 1304, - 1320, 620, 1324, 1306, 1308, 618, 1326, 1328, 617, 1310, - 1312, 1314, 1322, 1330, 1332, 1322, 1316, 1318, 1324, 1334, - 616, 1324, 1326, 1328, 1320, 1326, 1328, 1336, 1338, 1330, - 1332, 614, 1330, 1332, 613, 1334, 1340, 612, 1334, 1322, - 610, 607, 1342, 1336, 1338, 1324, 1336, 1338, 1344, 1326, - 1328, 605, 1340, 1346, 603, 1340, 1330, 1332, 1342, 1348, - 602, 1342, 1334, 601, 1344, 1350, 600, 1344, 599, 1346, - - 1336, 1338, 1346, 1352, 1354, 1348, 598, 596, 1348, 1340, - 595, 1350, 1356, 593, 1350, 1342, 588, 1358, 1360, 1352, - 1354, 1344, 1352, 1354, 1362, 1364, 1346, 587, 1356, 1366, - 586, 1356, 1348, 1358, 1360, 1368, 1358, 1360, 1350, 584, - 1362, 1364, 583, 1362, 1364, 1366, 1352, 1354, 1366, 580, - 1370, 1368, 579, 578, 1368, 1356, 576, 1372, 1374, 575, - 1358, 1360, 574, 1376, 1378, 1380, 1370, 1362, 1364, 1370, - 1382, 1384, 1366, 1372, 1374, 1386, 1372, 1374, 1368, 1376, - 1378, 1380, 1376, 1378, 1380, 573, 1382, 1384, 572, 1382, - 1384, 1386, 569, 1370, 1386, 567, 1388, 566, 565, 564, - - 1372, 1374, 563, 1390, 1392, 1394, 1376, 1378, 1380, 1396, - 1398, 1400, 1388, 1382, 1384, 1388, 1402, 1404, 1386, 1390, - 1392, 1394, 1390, 1392, 1394, 1396, 1398, 1400, 1396, 1398, - 1400, 562, 1402, 1404, 561, 1402, 1404, 558, 557, 1388, - 556, 553, 1406, 551, 550, 548, 1390, 1392, 1394, 1408, - 538, 537, 1396, 1398, 1400, 536, 534, 533, 1406, 1402, - 1404, 1406, 532, 531, 530, 1408, 527, 526, 1408, 525, - 524, 521, 520, 519, 518, 517, 516, 515, 514, 513, - 508, 507, 502, 498, 496, 1406, 495, 494, 493, 492, - 491, 489, 1408, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1411, 1411, 1411, 1411, 1411, - 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1412, 1412, 1412, - 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1413, + 79, 79, 79, 82, 92, 93, 90, 90, 944, 92, + 93, 94, 94, 95, 95, 103, 103, 82, 82, 90, + 117, 103, 110, 119, 113, 122, 122, 194, 119, 155, + + 155, 92, 93, 194, 95, 162, 162, 79, 110, 103, + 103, 110, 174, 90, 117, 174, 90, 113, 94, 171, + 171, 94, 196, 189, 82, 196, 946, 82, 144, 144, + 144, 149, 149, 149, 150, 110, 150, 150, 150, 189, + 189, 152, 152, 152, 948, 151, 144, 151, 950, 149, + 151, 151, 151, 274, 150, 152, 152, 152, 152, 152, + 152, 165, 182, 952, 165, 274, 165, 212, 212, 212, + 165, 165, 401, 182, 213, 213, 213, 216, 216, 228, + 217, 217, 217, 401, 228, 954, 232, 232, 213, 213, + 213, 213, 213, 213, 217, 217, 217, 217, 217, 217, + + 229, 233, 233, 244, 405, 229, 228, 232, 239, 239, + 261, 261, 261, 956, 239, 405, 262, 262, 262, 244, + 286, 286, 244, 263, 263, 263, 958, 229, 264, 264, + 264, 308, 239, 239, 262, 265, 265, 265, 960, 308, + 293, 962, 293, 323, 323, 293, 244, 341, 341, 265, + 265, 265, 265, 265, 265, 293, 322, 322, 322, 293, + 411, 411, 324, 324, 324, 964, 326, 338, 338, 338, + 322, 322, 322, 322, 322, 322, 324, 324, 324, 324, + 324, 324, 326, 333, 394, 326, 395, 395, 395, 457, + 398, 461, 966, 462, 333, 468, 471, 504, 968, 970, + + 394, 398, 461, 394, 462, 457, 468, 471, 457, 326, + 505, 505, 505, 504, 506, 972, 504, 510, 511, 333, + 512, 974, 540, 976, 978, 506, 398, 394, 510, 511, + 569, 512, 457, 541, 541, 541, 542, 543, 540, 544, + 504, 540, 546, 548, 548, 548, 569, 542, 543, 569, + 544, 586, 980, 546, 571, 571, 571, 982, 598, 605, + 625, 625, 625, 984, 612, 540, 616, 586, 548, 986, + 586, 620, 624, 569, 598, 605, 541, 598, 605, 571, + 612, 627, 616, 612, 625, 616, 988, 620, 624, 990, + 620, 624, 631, 992, 586, 994, 996, 627, 998, 1000, + + 627, 598, 605, 628, 628, 628, 1002, 612, 631, 616, + 1004, 631, 1006, 1008, 620, 624, 629, 629, 629, 1010, + 629, 1012, 637, 642, 627, 629, 1014, 628, 632, 632, + 632, 647, 632, 1016, 1018, 631, 1020, 632, 637, 642, + 653, 637, 642, 645, 645, 645, 1022, 647, 655, 1024, + 647, 650, 650, 650, 657, 1026, 653, 1028, 1030, 653, + 1032, 659, 661, 629, 655, 637, 642, 655, 645, 663, + 657, 665, 1034, 657, 647, 632, 650, 659, 661, 667, + 659, 661, 1036, 653, 669, 663, 1038, 665, 663, 1040, + 665, 655, 671, 1042, 673, 667, 1044, 657, 667, 675, + + 669, 677, 1046, 669, 659, 661, 1048, 679, 671, 681, + 673, 671, 663, 673, 665, 675, 1050, 677, 675, 1052, + 677, 1054, 667, 679, 683, 681, 679, 669, 681, 685, + 687, 1056, 1058, 1060, 1062, 671, 1064, 673, 689, 691, + 683, 1066, 675, 683, 677, 685, 687, 693, 685, 687, + 679, 1068, 681, 1070, 689, 691, 1072, 689, 691, 695, + 697, 699, 1074, 693, 1076, 1078, 693, 683, 701, 703, + 705, 1080, 685, 687, 1082, 695, 697, 699, 695, 697, + 699, 689, 691, 1084, 701, 703, 705, 701, 703, 705, + 693, 707, 1086, 1088, 1090, 1092, 1094, 1096, 709, 711, + + 713, 1098, 695, 697, 699, 715, 717, 707, 1100, 1102, + 707, 701, 703, 705, 709, 711, 713, 709, 711, 713, + 719, 715, 717, 1104, 715, 717, 1106, 1108, 721, 1110, + 1112, 1114, 1116, 1118, 707, 723, 719, 725, 1120, 719, + 1122, 709, 711, 713, 721, 727, 729, 721, 715, 717, + 731, 723, 1124, 725, 723, 1126, 725, 733, 735, 1128, + 1130, 727, 729, 719, 727, 729, 731, 737, 739, 731, + 1132, 721, 1134, 733, 735, 741, 733, 735, 723, 743, + 725, 1136, 1138, 737, 739, 1140, 737, 739, 727, 729, + 745, 741, 1142, 731, 741, 743, 747, 749, 743, 1144, + + 733, 735, 1146, 1148, 751, 753, 745, 1150, 1152, 745, + 737, 739, 747, 749, 1154, 747, 749, 1156, 741, 755, + 751, 753, 743, 751, 753, 757, 759, 761, 1158, 1160, + 1162, 1164, 1166, 745, 763, 755, 765, 1168, 755, 747, + 749, 757, 759, 761, 757, 759, 761, 751, 753, 1170, + 763, 1172, 765, 763, 1174, 765, 767, 769, 1176, 1178, + 1180, 1182, 755, 1184, 771, 773, 775, 1186, 757, 759, + 761, 777, 767, 769, 1188, 767, 769, 763, 779, 765, + 771, 773, 775, 771, 773, 775, 781, 777, 1190, 1192, + 777, 1194, 1196, 1198, 779, 1200, 783, 779, 1202, 767, + + 769, 785, 781, 787, 1204, 781, 1206, 771, 773, 775, + 1208, 789, 783, 1210, 777, 783, 791, 785, 793, 787, + 785, 779, 787, 1212, 795, 1214, 797, 789, 1216, 781, + 789, 799, 791, 801, 793, 791, 1218, 793, 1220, 783, + 795, 803, 797, 795, 785, 797, 787, 799, 1222, 801, + 799, 1224, 801, 1226, 789, 1228, 805, 803, 1230, 791, + 803, 793, 807, 809, 811, 1232, 1234, 795, 1236, 797, + 813, 815, 805, 1238, 799, 805, 801, 817, 807, 809, + 811, 807, 809, 811, 803, 819, 813, 815, 1240, 813, + 815, 1242, 821, 817, 1244, 1246, 817, 1248, 1250, 805, + + 823, 819, 825, 1252, 819, 807, 809, 811, 821, 1254, + 827, 821, 1256, 813, 815, 829, 823, 831, 825, 823, + 817, 825, 833, 835, 1258, 1260, 827, 1262, 819, 827, + 837, 829, 839, 831, 829, 821, 831, 1264, 833, 835, + 841, 833, 835, 823, 1266, 825, 837, 1268, 839, 837, + 1270, 839, 843, 827, 1272, 1274, 841, 1276, 829, 841, + 831, 845, 847, 849, 1278, 833, 835, 1280, 843, 851, + 853, 843, 1282, 837, 855, 839, 1284, 845, 847, 849, + 845, 847, 849, 841, 857, 851, 853, 1286, 851, 853, + 855, 859, 861, 855, 1288, 843, 1290, 1292, 1294, 863, + + 857, 1296, 1298, 857, 845, 847, 849, 859, 861, 865, + 859, 861, 851, 853, 867, 863, 1300, 855, 863, 1302, + 869, 871, 873, 1304, 1306, 865, 1308, 857, 865, 875, + 867, 877, 1310, 867, 859, 861, 869, 871, 873, 869, + 871, 873, 863, 879, 1312, 875, 1314, 877, 875, 1316, + 877, 881, 865, 1318, 1320, 1322, 1324, 867, 1326, 879, + 883, 885, 879, 869, 871, 873, 887, 881, 889, 1328, + 881, 1330, 875, 891, 877, 1332, 883, 885, 1334, 883, + 885, 893, 887, 895, 889, 887, 879, 889, 1336, 891, + 1338, 897, 891, 1340, 881, 1342, 899, 893, 901, 895, + + 893, 1344, 895, 883, 885, 1346, 903, 897, 1348, 887, + 897, 889, 899, 905, 901, 899, 891, 901, 1350, 907, + 1352, 909, 903, 1354, 893, 903, 895, 911, 913, 905, + 1356, 1358, 905, 1360, 897, 907, 915, 909, 907, 899, + 909, 901, 917, 911, 913, 1362, 911, 913, 1364, 903, + 919, 1366, 915, 1368, 1370, 915, 905, 921, 917, 923, + 1372, 917, 907, 1374, 909, 925, 919, 927, 1376, 919, + 911, 913, 929, 921, 1378, 923, 921, 1380, 923, 915, + 931, 925, 933, 927, 925, 917, 927, 935, 929, 1382, + 1384, 929, 1386, 919, 1388, 937, 931, 939, 933, 931, + + 921, 933, 923, 935, 1390, 941, 935, 1392, 925, 1394, + 927, 937, 943, 939, 937, 929, 939, 945, 947, 1396, + 1398, 941, 1400, 931, 941, 933, 949, 951, 943, 1402, + 935, 943, 1404, 945, 947, 953, 945, 947, 937, 1406, + 939, 1418, 949, 951, 932, 949, 951, 955, 941, 957, + 930, 953, 928, 926, 953, 943, 959, 961, 963, 924, + 945, 947, 922, 955, 965, 957, 955, 920, 957, 949, + 951, 918, 959, 961, 963, 959, 961, 963, 953, 967, + 965, 916, 914, 965, 912, 910, 969, 971, 908, 906, + 955, 904, 957, 973, 975, 967, 902, 900, 967, 959, + + 961, 963, 969, 971, 977, 969, 971, 965, 979, 973, + 975, 898, 973, 975, 896, 981, 983, 894, 892, 890, + 977, 888, 967, 977, 979, 985, 987, 979, 886, 969, + 971, 981, 983, 989, 981, 983, 973, 975, 991, 884, + 882, 985, 987, 880, 985, 987, 993, 977, 995, 989, + 878, 979, 989, 876, 991, 997, 999, 991, 981, 983, + 874, 1001, 993, 1003, 995, 993, 872, 995, 985, 987, + 870, 997, 999, 868, 997, 999, 989, 1001, 1005, 1003, + 1001, 991, 1003, 866, 1007, 864, 1009, 862, 860, 993, + 858, 995, 1011, 1013, 1005, 856, 854, 1005, 997, 999, + + 1007, 1015, 1009, 1007, 1001, 1009, 1003, 1017, 1011, 1013, + 852, 1011, 1013, 850, 1019, 1021, 848, 1015, 846, 844, + 1015, 1005, 1023, 1017, 1025, 842, 1017, 1007, 840, 1009, + 1019, 1021, 1027, 1019, 1021, 1011, 1013, 1029, 1023, 838, + 1025, 1023, 836, 1025, 1015, 1031, 834, 1033, 1027, 832, + 1017, 1027, 1035, 1029, 1037, 830, 1029, 1019, 1021, 828, + 1039, 1031, 1041, 1033, 1031, 1023, 1033, 1025, 1035, 826, + 1037, 1035, 824, 1037, 822, 1027, 1039, 1043, 1041, 1039, + 1029, 1041, 1045, 1047, 820, 818, 816, 814, 1031, 812, + 1033, 1049, 1051, 1043, 810, 1035, 1043, 1037, 1045, 1047, + + 1053, 1045, 1047, 1039, 808, 1041, 806, 1049, 1051, 804, + 1049, 1051, 1055, 1057, 1059, 802, 1053, 800, 798, 1053, + 1043, 1061, 1063, 1065, 796, 1045, 1047, 794, 1055, 1057, + 1059, 1055, 1057, 1059, 1049, 1051, 792, 1061, 1063, 1065, + 1061, 1063, 1065, 1053, 1067, 790, 788, 786, 784, 782, + 780, 1069, 1071, 1073, 778, 1055, 1057, 1059, 1075, 1077, + 1067, 776, 774, 1067, 1061, 1063, 1065, 1069, 1071, 1073, + 1069, 1071, 1073, 1079, 1075, 1077, 772, 1075, 1077, 770, + 768, 1081, 766, 764, 762, 760, 758, 1067, 1083, 1079, + 1085, 756, 1079, 754, 1069, 1071, 1073, 1081, 1087, 1089, + + 1081, 1075, 1077, 1091, 1083, 752, 1085, 1083, 750, 1085, + 1093, 1095, 748, 746, 1087, 1089, 1079, 1087, 1089, 1091, + 1097, 1099, 1091, 744, 1081, 742, 1093, 1095, 1101, 1093, + 1095, 1083, 1103, 1085, 740, 738, 1097, 1099, 736, 1097, + 1099, 1087, 1089, 1105, 1101, 734, 1091, 1101, 1103, 1107, + 1109, 1103, 732, 1093, 1095, 730, 728, 1111, 1113, 1105, + 726, 724, 1105, 1097, 1099, 1107, 1109, 722, 1107, 1109, + 720, 1101, 1115, 1111, 1113, 1103, 1111, 1113, 1117, 1119, + 1121, 718, 716, 714, 712, 710, 1105, 1123, 1115, 1125, + 708, 1115, 1107, 1109, 1117, 1119, 1121, 1117, 1119, 1121, + + 1111, 1113, 706, 1123, 704, 1125, 1123, 702, 1125, 1127, + 1129, 700, 698, 696, 694, 1115, 692, 1131, 1133, 1135, + 690, 1117, 1119, 1121, 1137, 1127, 1129, 688, 1127, 1129, + 1123, 1139, 1125, 1131, 1133, 1135, 1131, 1133, 1135, 1141, + 1137, 686, 684, 1137, 682, 680, 678, 1139, 676, 1143, + 1139, 674, 1127, 1129, 1145, 1141, 1147, 672, 1141, 670, + 1131, 1133, 1135, 668, 1149, 1143, 666, 1137, 1143, 1151, + 1145, 1153, 1147, 1145, 1139, 1147, 664, 1155, 662, 1157, + 1149, 660, 1141, 1149, 1159, 1151, 1161, 1153, 1151, 658, + 1153, 656, 1143, 1155, 1163, 1157, 1155, 1145, 1157, 1147, + + 1159, 654, 1161, 1159, 652, 1161, 649, 1149, 648, 1165, + 1163, 646, 1151, 1163, 1153, 1167, 1169, 1171, 644, 643, + 1155, 641, 1157, 1173, 1175, 1165, 640, 1159, 1165, 1161, + 1177, 1167, 1169, 1171, 1167, 1169, 1171, 1163, 1179, 1173, + 1175, 639, 1173, 1175, 638, 1181, 1177, 636, 635, 1177, + 634, 633, 1165, 1183, 1179, 1185, 630, 1179, 1167, 1169, + 1171, 1181, 626, 1187, 1181, 623, 1173, 1175, 1189, 1183, + 1191, 1185, 1183, 1177, 1185, 1193, 1195, 621, 619, 1187, + 618, 1179, 1187, 1197, 1189, 1199, 1191, 1189, 1181, 1191, + 617, 1193, 1195, 1201, 1193, 1195, 1183, 615, 1185, 1197, + + 614, 1199, 1197, 613, 1199, 1203, 1187, 611, 608, 1201, + 606, 1189, 1201, 1191, 1205, 1207, 1209, 604, 1193, 1195, + 603, 1203, 1211, 1213, 1203, 602, 1197, 1215, 1199, 601, + 1205, 1207, 1209, 1205, 1207, 1209, 1201, 1217, 1211, 1213, + 600, 1211, 1213, 1215, 1219, 1221, 1215, 599, 1203, 597, + 596, 594, 1223, 1217, 589, 588, 1217, 1205, 1207, 1209, + 1219, 1221, 1225, 1219, 1221, 1211, 1213, 1227, 1223, 587, + 1215, 1223, 585, 1229, 1231, 1233, 584, 581, 1225, 580, + 1217, 1225, 1235, 1227, 1237, 579, 1227, 1219, 1221, 1229, + 1231, 1233, 1229, 1231, 1233, 1223, 1239, 577, 1235, 576, + + 1237, 1235, 575, 1237, 1241, 1225, 574, 573, 570, 568, + 1227, 567, 1239, 1243, 1245, 1239, 1229, 1231, 1233, 1247, + 1241, 1249, 566, 1241, 565, 1235, 1251, 1237, 564, 1243, + 1245, 563, 1243, 1245, 1253, 1247, 1255, 1249, 1247, 1239, + 1249, 562, 1251, 559, 1257, 1251, 558, 1241, 557, 1259, + 1253, 1261, 1255, 1253, 554, 1255, 1243, 1245, 552, 1263, + 1257, 551, 1247, 1257, 1249, 1259, 1265, 1261, 1259, 1251, + 1261, 549, 1267, 539, 1269, 1263, 538, 1253, 1263, 1255, + 1271, 1273, 1265, 537, 535, 1265, 534, 1257, 1267, 1275, + 1269, 1267, 1259, 1269, 1261, 1277, 1271, 1273, 533, 1271, + + 1273, 532, 1263, 1279, 531, 1275, 528, 527, 1275, 1265, + 1281, 1277, 1283, 526, 1277, 1267, 525, 1269, 1285, 1279, + 1287, 522, 1279, 1271, 1273, 1289, 1281, 521, 1283, 1281, + 520, 1283, 1275, 1291, 1285, 1293, 1287, 1285, 1277, 1287, + 1295, 1289, 519, 518, 1289, 517, 1279, 516, 1297, 1291, + 1299, 1293, 1291, 1281, 1293, 1283, 1295, 515, 1301, 1295, + 514, 1285, 509, 1287, 1297, 1303, 1299, 1297, 1289, 1299, + 1305, 1307, 508, 503, 1301, 499, 1291, 1301, 1293, 1309, + 1311, 1303, 497, 1295, 1303, 496, 1305, 1307, 1313, 1305, + 1307, 1297, 495, 1299, 494, 1309, 1311, 493, 1309, 1311, + + 1315, 1301, 1317, 492, 1313, 490, 489, 1313, 1303, 1319, + 1321, 1323, 488, 1305, 1307, 487, 1315, 1325, 1317, 1315, + 486, 1317, 1309, 1311, 485, 1319, 1321, 1323, 1319, 1321, + 1323, 1313, 1327, 1325, 484, 482, 1325, 481, 480, 1329, + 1331, 479, 478, 1315, 477, 1317, 1333, 1335, 1327, 476, + 475, 1327, 1319, 1321, 1323, 1329, 1331, 1337, 1329, 1331, + 1325, 1339, 1333, 1335, 474, 1333, 1335, 473, 1341, 1343, + 472, 470, 467, 1337, 466, 1327, 1337, 1339, 1345, 1347, + 1339, 465, 1329, 1331, 1341, 1343, 1349, 1341, 1343, 1333, + 1335, 1351, 464, 460, 1345, 1347, 459, 1345, 1347, 1353, + + 1337, 1355, 1349, 456, 1339, 1349, 452, 1351, 1357, 1359, + 1351, 1341, 1343, 451, 1361, 1353, 1363, 1355, 1353, 450, + 1355, 1345, 1347, 449, 1357, 1359, 448, 1357, 1359, 1349, + 1361, 1365, 1363, 1361, 1351, 1363, 447, 1367, 446, 1369, + 443, 442, 1353, 441, 1355, 1371, 1373, 1365, 440, 439, + 1365, 1357, 1359, 1367, 1375, 1369, 1367, 1361, 1369, 1363, + 1377, 1371, 1373, 438, 1371, 1373, 437, 1379, 1381, 435, + 1375, 434, 433, 1375, 1365, 1383, 1377, 1385, 431, 1377, + 1367, 430, 1369, 1379, 1381, 1387, 1379, 1381, 1371, 1373, + 1389, 1383, 428, 1385, 1383, 427, 1385, 1375, 1391, 426, + + 1393, 1387, 425, 1377, 1387, 1395, 1389, 1397, 418, 1389, + 1379, 1381, 417, 1399, 1391, 1401, 1393, 1391, 1383, 1393, + 1385, 1395, 416, 1397, 1395, 415, 1397, 414, 1387, 1399, + 1403, 1401, 1399, 1389, 1401, 1405, 1407, 413, 412, 410, + 408, 1391, 407, 1393, 1409, 406, 1403, 404, 1395, 1403, + 1397, 1405, 1407, 403, 1405, 1407, 1399, 400, 1401, 399, + 1409, 397, 396, 1409, 393, 390, 389, 388, 387, 386, + 385, 384, 383, 1403, 382, 381, 380, 378, 1405, 1407, + 377, 376, 375, 374, 373, 372, 371, 1409, 1411, 1411, + 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1412, + + 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1414, 1415, 1415, 1415, 1415, 1415, 1415, 1415, - 1415, 1415, 1415, 488, 1415, 1416, 1416, 1416, 1416, 487, - 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1418, 1418, 1418, - 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1419, - 486, 485, 1419, 1420, 1420, 1420, 484, 1420, 1420, 1420, - - 483, 1420, 1420, 1421, 1421, 1421, 1421, 1421, 1421, 1421, - 1421, 1421, 1421, 1421, 1421, 1422, 481, 480, 1422, 1423, - 1423, 1423, 1423, 1423, 1423, 479, 1423, 1423, 1423, 1423, - 1423, 1424, 478, 477, 476, 475, 474, 1424, 1424, 473, - 1424, 1425, 472, 471, 1425, 1426, 469, 466, 1426, 1427, - 1427, 1427, 1427, 1427, 1427, 1427, 465, 1427, 1427, 1427, - 1427, 1428, 1428, 464, 1428, 1428, 463, 1428, 1428, 1428, + 1414, 1414, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, + 1415, 1415, 1415, 1416, 1416, 1416, 1416, 1416, 1416, 1416, + 1416, 1416, 370, 1416, 1417, 1417, 1417, 1417, 369, 1417, + 1417, 1417, 1417, 1417, 1417, 1419, 1419, 1419, 1419, 1419, + 1419, 1419, 1419, 1419, 1419, 1419, 1420, 366, 365, 1420, + 1421, 1421, 1421, 364, 1421, 1421, 363, 1421, 1421, 1422, + 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, + + 1423, 362, 361, 1423, 1424, 1424, 1424, 1424, 1424, 360, + 1424, 1424, 1424, 1424, 1424, 1425, 358, 357, 356, 355, + 1425, 1425, 354, 1425, 1426, 353, 352, 1426, 1427, 350, + 349, 1427, 1428, 1428, 1428, 1428, 1428, 1428, 348, 1428, 1428, 1428, 1428, 1429, 1429, 1429, 1429, 1429, 1429, 1429, - 1429, 1429, 1429, 1429, 1429, 1430, 459, 458, 1430, 1431, - 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, - - 1431, 1432, 455, 451, 450, 449, 448, 447, 446, 445, - 442, 1432, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, - 1433, 1433, 1433, 1433, 1434, 441, 440, 439, 438, 437, - 1434, 436, 434, 1434, 1435, 1435, 1435, 1435, 1435, 1435, - 1435, 1435, 1435, 1435, 1435, 1435, 1436, 1436, 1436, 1436, - 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1437, 1437, - 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, - 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, - 1438, 1438, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, + 1429, 1429, 1429, 1429, 1430, 1430, 1430, 1430, 1430, 1430, + 1430, 1430, 1430, 1430, 1430, 1431, 347, 346, 1431, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1433, 345, 344, 343, 342, 340, 339, 337, 336, 1433, + 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, + + 1434, 1435, 335, 334, 332, 331, 1435, 330, 329, 1435, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, + 1438, 1438, 1438, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1440, 1440, 1440, 1440, 1440, 1440, - - 1440, 1440, 1440, 1440, 1440, 1440, 1441, 1441, 1441, 1441, - 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - 1443, 1443, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, - 1444, 1444, 1444, 1444, 1445, 1445, 1445, 1445, 1445, 1445, - 1445, 1445, 1445, 1445, 1445, 1445, 1446, 1446, 1446, 1446, - 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - - 1448, 1448, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + 1440, 1440, 1440, 1440, 1440, 1441, 1441, 1441, 1441, 1441, + 1441, 1441, 1441, 1441, 1441, 1441, 1442, 1442, 1442, 1442, + 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1443, 1443, 1443, + 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1444, 1444, + + 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1445, + 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, + 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, + 1446, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, + 1447, 1447, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, + 1448, 1448, 1448, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1450, 1450, 1450, 1450, 1450, 1450, - 1450, 1450, 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451, - 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1452, 1452, - 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, - 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, - 1453, 1453, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, - 1454, 1454, 1454, 1454, 1455, 1455, 1455, 1455, 1455, 1455, - 1455, 1455, 1455, 1455, 1455, 1455, 1456, 1456, 1456, 1456, - 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1457, 1457, - - 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, - 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, - 1458, 1458, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, + 1450, 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451, 1451, + 1451, 1451, 1451, 1451, 1451, 1451, 1452, 1452, 1452, 1452, + 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1453, 1453, 1453, + + 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1454, 1454, + 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1455, + 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, + 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, + 1456, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, + 1457, 1457, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, + 1458, 1458, 1458, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1460, 1460, 1460, 1460, 1460, 1460, - 1460, 1460, 1460, 1460, 1460, 1460, 1461, 1461, 1461, 1461, - 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1462, 1462, - 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, - 1463, 1463, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, - 1464, 1464, 1464, 1464, 1465, 1465, 1465, 1465, 1465, 1465, - - 1465, 1465, 1465, 1465, 1465, 1465, 1466, 1466, 1466, 1466, - 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1467, 1467, - 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, - 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, - 1468, 1468, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, + 1460, 1460, 1460, 1460, 1460, 1461, 1461, 1461, 1461, 1461, + 1461, 1461, 1461, 1461, 1461, 1461, 1462, 1462, 1462, 1462, + + 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1464, 1464, + 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, + 1466, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, + 1467, 1467, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, + 1468, 1468, 1468, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1470, 1470, 1470, 1470, 1470, 1470, - 1470, 1470, 1470, 1470, 1470, 1470, 1471, 1471, 1471, 1471, - 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1472, 1472, - 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, - 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, - - 1473, 1473, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, - 1474, 1474, 1474, 1474, 1475, 1475, 1475, 1475, 1475, 1475, - 1475, 1475, 1475, 1475, 1475, 1475, 1476, 1476, 1476, 1476, - 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1477, 1477, - 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, - 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, - 1478, 1478, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + 1470, 1470, 1470, 1470, 1470, 1471, 1471, 1471, 1471, 1471, + + 1471, 1471, 1471, 1471, 1471, 1471, 1472, 1472, 1472, 1472, + 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1474, 1474, + 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1475, + 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, + 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, + 1476, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, + 1477, 1477, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, + 1478, 1478, 1478, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1480, 1480, 1480, 1480, 1480, 1480, - 1480, 1480, 1480, 1480, 1480, 1480, 1481, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1482, 1482, - - 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, - 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - 1483, 1483, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, - 1484, 1484, 1484, 1484, 1485, 1485, 1485, 1485, 1485, 1485, - 1485, 1485, 1485, 1485, 1485, 1485, 1486, 1486, 1486, 1486, - 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1487, 1487, - 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, - 1489, 1489, 1489, 1489, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1491, 1491, 1491, 1491, - 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1492, 1492, - 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1494, 1494, 1494, 1494, 1495, 1495, 1495, 1495, 1495, 1495, - 1495, 1495, 1495, 1495, 1495, 1495, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, - - 1498, 1498, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, + 1480, 1480, 1480, 1480, 1480, 1481, 1481, 1481, 1481, 1481, + 1481, 1481, 1481, 1481, 1481, 1481, 1482, 1482, 1482, 1482, + 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1483, 1483, 1483, + 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1484, 1484, + 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1485, + 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, + 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, + 1486, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, + 1487, 1487, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, + 1488, 1488, 1488, 1489, 1489, 1489, 1489, 1489, 1489, 1489, + + 1489, 1489, 1489, 1489, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1490, 1490, 1490, 1490, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1493, 1493, 1493, + 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1494, 1494, + 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1495, + 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, + 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, + 1496, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, + 1497, 1497, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, + + 1498, 1498, 1498, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1500, 1500, 1500, 1500, 1500, 1500, - 1500, 1500, 1500, 1500, 1500, 1500, 1501, 1501, 1501, 1501, - 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1507, 1507, - - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, + 1500, 1500, 1500, 1500, 1500, 1501, 1501, 1501, 1501, 1501, + 1501, 1501, 1501, 1501, 1501, 1501, 1502, 1502, 1502, 1502, + 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1503, 1503, 1503, + 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1505, + 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, + 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, + 1506, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, + + 1507, 1507, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1508, 1508, 1508, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1511, 1511, 1511, 1511, - 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, - 1513, 1513, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - - 1515, 1515, 1515, 1515, 1515, 1515, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1517, 1517, - 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, - 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, - 1518, 1518, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, + 1510, 1510, 1510, 1510, 1510, 1511, 1511, 1511, 1511, 1511, + 1511, 1511, 1511, 1511, 1511, 1511, 1512, 1512, 1512, 1512, + 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1513, 1513, 1513, + 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1514, 1514, + 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1515, + 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, + 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, + + 1516, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, + 1517, 1517, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, + 1518, 1518, 1518, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1521, 1521, 1521, 1521, - 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1522, 1522, - 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, - 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, - - 1523, 1523, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, - 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525, 1525, 1525, - 1525, 1525, 1525, 1525, 1525, 1525, 1526, 1526, 1526, 1526, - 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1527, 1527, - 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, - 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, - 1528, 1528, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1520, 1520, 1520, 1520, 1520, 1521, 1521, 1521, 1521, 1521, + 1521, 1521, 1521, 1521, 1521, 1521, 1522, 1522, 1522, 1522, + 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1523, 1523, 1523, + 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1524, 1524, + 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1525, + 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, + + 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, + 1526, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, + 1527, 1527, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, + 1528, 1528, 1528, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1530, 1531, 1531, 1531, 1531, - 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1532, 1532, - - 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, - 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, - 1533, 1533, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1536, 1536, 1536, 1536, - 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1537, 1537, - 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, - 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, - 1538, 1538, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1530, 1530, 1530, 1530, 1530, 1531, 1531, 1531, 1531, 1531, + 1531, 1531, 1531, 1531, 1531, 1531, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1533, 1533, 1533, + 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1535, + + 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1540, 1540, 1540, 1540, 1540, 1540, - - 1540, 1540, 1540, 1540, 1540, 1540, 1541, 1541, 1541, 1541, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1542, 1542, - 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, - 1543, 1543, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, - 1544, 1544, 1544, 1544, 1545, 1545, 1545, 1545, 1545, 1545, - 1545, 1545, 1545, 1545, 1545, 1545, 1546, 1546, 1546, 1546, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - - 1548, 1548, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1540, 1540, 1540, 1540, 1540, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1542, 1542, 1542, 1542, + 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1544, 1544, + + 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1545, + 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + 1546, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, + 1547, 1547, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1550, 1550, 1550, 1550, 1550, 1550, - 1550, 1550, 1550, 1550, 1550, 1550, 1551, 1551, 1551, 1551, - 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552, - 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, - 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, - 1553, 1553, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, - 1554, 1554, 1554, 1554, 1555, 1555, 1555, 1555, 1555, 1555, - 1555, 1555, 1555, 1555, 1555, 1555, 1556, 1556, 1556, 1556, - 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1557, 1557, - - 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, - 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, - 1558, 1558, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, + 1550, 1550, 1550, 1550, 1550, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552, 1552, 1552, + 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1553, 1553, 1553, + + 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1555, + 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + 1557, 1557, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1560, 1560, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1560, 1561, 1561, 1561, 1561, - 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1562, - 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, - 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, - 1563, 1563, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, - 1564, 1564, 1564, 1564, 1565, 1565, 1565, 1565, 1565, 1565, - - 1565, 1565, 1565, 1565, 1565, 1565, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1567, 1567, - 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, - 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, - 1568, 1568, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, + 1560, 1560, 1560, 1560, 1560, 1561, 1561, 1561, 1561, 1561, + 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1562, 1562, 1562, + + 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1563, 1563, 1563, + 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1565, + 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, + 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + 1566, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, + 1567, 1567, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, + 1568, 1568, 1568, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1570, 1570, 1570, 1570, 1570, 1570, - 1570, 1570, 1570, 1570, 1570, 1570, 1571, 1571, 1571, 1571, - 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, - - 1573, 1573, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, - 1574, 1574, 1574, 1574, 1575, 1575, 1575, 1575, 1575, 1575, - 1575, 1575, 1575, 1575, 1575, 1575, 1576, 1576, 1576, 1576, - 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1577, 1577, - 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, - 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, - 1578, 1578, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, + 1570, 1570, 1570, 1570, 1570, 1571, 1571, 1571, 1571, 1571, + + 1571, 1571, 1571, 1571, 1571, 1571, 1572, 1572, 1572, 1572, + 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1573, 1573, 1573, + 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1574, 1574, + 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1575, + 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, + 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, + 1576, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, + 1577, 1577, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, + 1578, 1578, 1578, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1580, 1580, 1580, 1580, 1580, 1580, - 1580, 1580, 1580, 1580, 1580, 1580, 1581, 1581, 1581, 1581, - 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1582, 1582, - - 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, - 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, - 1583, 1583, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, - 1584, 1584, 1584, 1584, 1585, 1585, 1585, 1585, 1585, 1585, - 1585, 1585, 1585, 1585, 1585, 1585, 1586, 1586, 1586, 1586, - 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1587, 1587, - 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, - 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, - 1588, 1588, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, - 1589, 1589, 1589, 1589, 1590, 1590, 1590, 1590, 1590, 1590, - 1590, 1590, 1590, 1590, 1590, 1590, 1591, 1591, 1591, 1591, - 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1592, 1592, - 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, - 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, - 1593, 1593, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, - 1594, 1594, 1594, 1594, 1595, 1595, 1595, 1595, 1595, 1595, - 1595, 1595, 1595, 1595, 1595, 1595, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1597, 1597, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, - - 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, + 1580, 1580, 1580, 1580, 1580, 1581, 1581, 1581, 1581, 1581, + 1581, 1581, 1581, 1581, 1581, 1581, 1582, 1582, 1582, 1582, + 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1583, 1583, 1583, + 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1584, 1584, + 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, + 1586, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, + 1587, 1587, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, + 1588, 1588, 1588, 1589, 1589, 1589, 1589, 1589, 1589, 1589, + + 1589, 1589, 1589, 1589, 1590, 1590, 1590, 1590, 1590, 1590, + 1590, 1590, 1590, 1590, 1590, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1592, 1592, 1592, 1592, + 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1593, 1593, 1593, + 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1594, 1594, + 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1595, + 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + 1597, 1597, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, + + 1598, 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1600, 1600, 1600, 1600, 1600, 1600, - 1600, 1600, 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601, - 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1602, 1602, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, - 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, - 1603, 1603, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, - 1604, 1604, 1604, 1604, 1605, 1605, 1605, 1605, 1605, 1605, - 1605, 1605, 1605, 1605, 1605, 1605, 1606, 1606, 1606, 1606, - 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1607, 1607, - - 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, - 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, - 1608, 1608, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, + 1600, 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601, 1601, + 1601, 1601, 1601, 1601, 1601, 1601, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1603, 1603, 1603, + 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1604, 1604, + 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1605, + 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, + 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + 1606, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + + 1607, 1607, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, + 1608, 1608, 1608, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1610, 1610, 1610, 1610, 1610, 1610, - 1610, 1610, 1610, 1610, 1610, 1610, 1611, 1611, 1611, 1611, - 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1612, 1612, - 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, - 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, - 1613, 1613, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, - 1614, 1614, 1614, 1614, 1615, 1615, 1615, 1615, 1615, 1615, - - 1615, 1615, 1615, 1615, 1615, 1615, 1616, 1616, 1616, 1616, - 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1617, 1617, - 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, - 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, - 1618, 1618, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, + 1610, 1610, 1610, 1610, 1610, 1611, 1611, 1611, 1611, 1611, + 1611, 1611, 1611, 1611, 1611, 1611, 1612, 1612, 1612, 1612, + 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1613, 1613, 1613, + 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1615, + 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, + 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, + + 1616, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, + 1617, 1617, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, + 1618, 1618, 1618, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1620, 1620, 1620, 1620, 1620, 1620, - 1620, 1620, 1620, 1620, 1620, 1620, 1621, 1621, 1621, 1621, - 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1622, 1622, - 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, - 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, - - 1623, 1623, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, - 1624, 1624, 1624, 1624, 1625, 1625, 1625, 1625, 1625, 1625, - 1625, 1625, 1625, 1625, 1625, 1625, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1627, 1627, - 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, - 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, - 1628, 1628, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, + 1620, 1620, 1620, 1620, 1620, 1621, 1621, 1621, 1621, 1621, + 1621, 1621, 1621, 1621, 1621, 1621, 1622, 1622, 1622, 1622, + 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1623, 1623, 1623, + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1624, 1624, + 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1625, + 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, + + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, + 1627, 1627, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, + 1628, 1628, 1628, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1630, 1630, 1630, 1630, 1630, 1630, - 1630, 1630, 1630, 1630, 1630, 1630, 1631, 1631, 1631, 1631, - 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1632, 1632, - - 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, - 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, - 1633, 1633, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, - 1634, 1634, 1634, 1634, 1635, 1635, 1635, 1635, 1635, 1635, - 1635, 1635, 1635, 1635, 1635, 1635, 1636, 1636, 1636, 1636, - 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1637, 1637, - 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1630, 1630, 1630, 1630, 1630, 1631, 1631, 1631, 1631, 1631, + 1631, 1631, 1631, 1631, 1631, 1631, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1633, 1633, 1633, + 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1634, 1634, + 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1635, + + 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, + 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, + 1636, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, + 1637, 1637, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, + 1638, 1638, 1638, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1640, 1640, 1640, 1640, 1640, 1640, - - 1640, 1640, 1640, 1640, 1640, 1640, 1641, 1641, 1641, 1641, - 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1642, - 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, - 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, - 1643, 1643, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1645, 1645, 1645, 1645, 1645, 1645, - 1645, 1645, 1645, 1645, 1645, 1645, 1646, 1646, 1646, 1646, - 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1647, - 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, - 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, - - 1648, 1648, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, + 1640, 1640, 1640, 1640, 1640, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1642, 1642, 1642, + 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1643, 1643, 1643, + 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1644, 1644, + + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1645, + 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, + 1646, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, + 1647, 1647, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, + 1648, 1648, 1648, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1650, 1650, 1650, 1650, 1650, 1650, - 1650, 1650, 1650, 1650, 1650, 1650, 1651, 1651, 1651, 1651, - 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, - 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, - 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, - 1653, 1653, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1655, 1655, 1655, 1655, 1655, 1655, - 1655, 1655, 1655, 1655, 1655, 1655, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657, 1657, - - 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, - 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - 1658, 1658, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1650, 1650, 1650, 1650, 1650, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, 1652, 1652, + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1653, 1653, 1653, + + 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1654, 1654, + 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1655, + 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + 1656, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + 1657, 1657, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + 1658, 1658, 1658, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1661, 1661, 1661, 1661, - 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1662, 1662, - 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, - 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, - 1663, 1663, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, - 1664, 1664, 1664, 1664, 1665, 1665, 1665, 1665, 1665, 1665, - - 1665, 1665, 1665, 1665, 1665, 1665, 1666, 1666, 1666, 1666, - 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1667, 1667, - 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, - 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, - 1668, 1668, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, + 1660, 1660, 1660, 1660, 1660, 1661, 1661, 1661, 1661, 1661, + 1661, 1661, 1661, 1661, 1661, 1661, 1662, 1662, 1662, 1662, + + 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1664, 1664, + 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, + 1666, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, + 1667, 1667, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, + 1668, 1668, 1668, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1670, 1670, 1670, 1670, 1670, 1670, - 1670, 1670, 1670, 1670, 1670, 1670, 1671, 1671, 1671, 1671, - 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - - 1673, 1673, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1676, 1676, 1676, 1676, - 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, - 1678, 1678, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, + 1670, 1670, 1670, 1670, 1670, 1671, 1671, 1671, 1671, 1671, + + 1671, 1671, 1671, 1671, 1671, 1671, 1672, 1672, 1672, 1672, + 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1673, 1673, 1673, + 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1674, 1674, + 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1675, + 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, + 1676, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, + 1677, 1677, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, + 1678, 1678, 1678, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1680, 1680, 1680, 1680, 1680, 1680, - 1680, 1680, 1680, 1680, 1680, 1680, 1681, 1681, 1681, 1681, - 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1682, 1682, - - 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, - 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, - 1683, 1683, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, - 1684, 1684, 1684, 1684, 1685, 1685, 1685, 1685, 1685, 1685, - 1685, 1685, 1685, 1685, 1685, 1685, 1686, 1686, 1686, 1686, - 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1687, 1687, - 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, - 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, - 1688, 1688, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, - 1689, 1689, 1689, 1689, 1690, 1690, 1690, 1690, 1690, 1690, - 1690, 1690, 1690, 1690, 1690, 1690, 1691, 1691, 1691, 1691, - 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1692, 1692, - 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, - 1693, 1693, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, - 1694, 1694, 1694, 1694, 1695, 1695, 1695, 1695, 1695, 1695, - 1695, 1695, 1695, 1695, 1695, 1695, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1697, 1697, - 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - - 1698, 1698, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, + 1680, 1680, 1680, 1680, 1680, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1681, 1681, 1681, 1682, 1682, 1682, 1682, + 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1683, 1683, 1683, + 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1684, 1684, + 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1685, + 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, + 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, + 1686, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, + 1687, 1687, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, + 1688, 1688, 1688, 1689, 1689, 1689, 1689, 1689, 1689, 1689, + + 1689, 1689, 1689, 1689, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1691, 1691, 1691, 1691, 1691, + 1691, 1691, 1691, 1691, 1691, 1691, 1692, 1692, 1692, 1692, + 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1694, 1694, + 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1695, + 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, + 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, + 1696, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, + 1697, 1697, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, + + 1698, 1698, 1698, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1700, 1700, 1700, 1700, 1700, 1700, - 1700, 1700, 1700, 1700, 1700, 1700, 1701, 1701, 1701, 1701, - 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1702, 1702, - 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, - 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, - 1703, 1703, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, - 1704, 1704, 1704, 1704, 1705, 1705, 1705, 1705, 1705, 1705, - 1705, 1705, 1705, 1705, 1705, 1705, 1706, 1706, 1706, 1706, - 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1707, 1707, - - 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, - 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, - 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, + 1700, 1700, 1700, 1700, 1700, 1701, 1701, 1701, 1701, 1701, + 1701, 1701, 1701, 1701, 1701, 1701, 1702, 1702, 1702, 1702, + 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1703, 1703, 1703, + 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1704, 1704, + 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1705, + 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, + 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, + 1706, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, + + 1707, 1707, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + 1708, 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1710, 1710, 1710, 1710, 1710, 1710, - 1710, 1710, 1710, 1710, 1710, 1710, 1711, 1711, 1711, 1711, - 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1712, 1712, - 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, - 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, - 1713, 1713, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, - 1714, 1714, 1714, 1714, 1715, 1715, 1715, 1715, 1715, 1715, - - 1715, 1715, 1715, 1715, 1715, 1715, 1716, 1716, 1716, 1716, - 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1717, 1717, - 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, - 1718, 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, + 1710, 1710, 1710, 1710, 1710, 1711, 1711, 1711, 1711, 1711, + 1711, 1711, 1711, 1711, 1711, 1711, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1713, 1713, 1713, + 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1714, 1714, + 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1715, + 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, + 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, + + 1716, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, + 1717, 1717, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, + 1718, 1718, 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1720, 1720, 1720, 1720, 1720, 1720, - 1720, 1720, 1720, 1720, 1720, 1720, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722, 1722, - 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, - 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, - - 1723, 1723, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1725, 1725, 1725, 1725, 1725, 1725, - 1725, 1725, 1725, 1725, 1725, 1725, 1726, 1726, 1726, 1726, - 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1727, 1727, - 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, - 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, - 1728, 1728, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + 1720, 1720, 1720, 1720, 1720, 1721, 1721, 1721, 1721, 1721, + 1721, 1721, 1721, 1721, 1721, 1721, 1722, 1722, 1722, 1722, + 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1723, 1723, 1723, + 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1724, 1724, + 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1725, + 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, + + 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, + 1726, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1730, 1730, 1730, 1730, 1730, 1730, - 1730, 1730, 1730, 1730, 1730, 1730, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1732, 1732, - - 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, - 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, - 1733, 1733, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, - 1734, 1734, 1734, 1734, 1735, 1735, 1735, 1735, 1735, 1735, - 1735, 1735, 1735, 1735, 1735, 1735, 1736, 1736, 1736, 1736, - 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1737, 1737, - 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, - 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, - 1738, 1738, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + 1730, 1730, 1730, 1730, 1730, 1731, 1731, 1731, 1731, 1731, + 1731, 1731, 1731, 1731, 1731, 1731, 1732, 1732, 1732, 1732, + 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1733, 1733, 1733, + 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1734, 1734, + 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1735, + + 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, + 1737, 1737, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, + 1738, 1738, 1738, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1740, 1740, 1740, 1740, 1740, 1740, - - 1740, 1740, 1740, 1740, 1740, 1740, 1741, 1741, 1741, 1741, - 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1742, 1742, - 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, - 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, - 1743, 1743, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, - 1744, 1744, 1744, 1744, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1746, 1746, 1746, 1746, - 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1747, 1747, - 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, - 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, - - 1748, 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, + 1740, 1740, 1740, 1740, 1740, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1742, 1742, 1742, 1742, + 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1744, 1744, + + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, + 1747, 1747, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750, 1750, 1750, 1750, 1750, - 1750, 1750, 1750, 1750, 1750, 1750, 1751, 1751, 1751, 1751, - 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1752, 1752, - 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, - 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, - 1753, 1753, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, - 1754, 1754, 1754, 1754, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1756, 1756, 1756, 1756, - 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1757, 1757, - - 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, - 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, - 1758, 1758, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, + 1750, 1750, 1750, 1750, 1750, 1751, 1751, 1751, 1751, 1751, + 1751, 1751, 1751, 1751, 1751, 1751, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1753, 1753, 1753, + + 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1754, 1754, + 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1755, + 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, + 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, + 1756, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, + 1758, 1758, 1758, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1760, 1760, 1760, 1760, 1760, 1760, - 1760, 1760, 1760, 1760, 1760, 1760, 1761, 1761, 1761, 1761, - 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1762, 1762, - 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, - 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, - 1763, 1763, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1765, 1765, 1765, 1765, 1765, 1765, - - 1765, 1765, 1765, 1765, 1765, 1765, 1766, 1766, 1766, 1766, - 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, - 1768, 1768, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1760, 1760, 1760, 1760, 1760, 1761, 1761, 1761, 1761, 1761, + 1761, 1761, 1761, 1761, 1761, 1761, 1762, 1762, 1762, 1762, + + 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1763, 1763, 1763, + 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765, + 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, + 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, + 1766, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, + 1768, 1768, 1768, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1770, 1770, 1770, 1770, 1770, 1770, - 1770, 1770, 1770, 1770, 1770, 1770, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - - 1773, 1773, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1775, 1775, 1775, 1775, 1775, 1775, - 1775, 1775, 1775, 1775, 1775, 1775, 1776, 1776, 1776, 1776, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1777, - 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, + 1770, 1770, 1770, 1770, 1770, 1771, 1771, 1771, 1771, 1771, + + 1771, 1771, 1771, 1771, 1771, 1771, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1773, 1773, 1773, + 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1774, 1774, + 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1775, + 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, + 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, + 1776, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, + 1777, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, + 1778, 1778, 1778, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1782, 1782, - - 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, - 1784, 1784, 1784, 1784, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1786, 1786, 1786, 1786, - 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, - 1789, 1789, 1789, 1789, 1790, 1790, 1790, 1790, 1790, 1790, - 1790, 1790, 1790, 1790, 1790, 1790, 1791, 1791, 1791, 1791, - 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1792, 1792, - 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, - 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, - 1793, 1793, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, - 1794, 1794, 1794, 1794, 1795, 1795, 1795, 1795, 1795, 1795, - 1795, 1795, 1795, 1795, 1795, 1795, 1796, 1796, 1796, 1796, - 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1797, 1797, - 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, - 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, - - 1798, 1798, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, + 1780, 1780, 1780, 1780, 1780, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1783, 1783, 1783, + 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, + 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, + 1786, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, + 1787, 1787, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + + 1789, 1789, 1789, 1789, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1791, 1791, 1791, 1791, 1791, + 1791, 1791, 1791, 1791, 1791, 1791, 1792, 1792, 1792, 1792, + 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1793, 1793, 1793, + 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1794, 1794, + 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, + 1796, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, + 1797, 1797, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, + + 1798, 1798, 1798, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801, - 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1802, 1802, - 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, - 1803, 1803, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, - 1804, 1804, 1804, 1804, 1805, 1805, 1805, 1805, 1805, 1805, - 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, 1806, 1806, - 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1807, 1807, - - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, - 1808, 1808, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, + 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801, 1801, + 1801, 1801, 1801, 1801, 1801, 1801, 1802, 1802, 1802, 1802, + 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803, 1803, 1803, + 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, + 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, + + 1807, 1807, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + 1808, 1808, 1808, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1810, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1812, 1812, - 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, - 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, - 1813, 1813, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, - 1814, 1814, 1814, 1814, 1815, 1815, 1815, 1815, 1815, 1815, - - 1815, 1815, 1815, 1815, 1815, 1815, 1816, 1816, 1816, 1816, - 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1817, 1817, - 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, - 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, - 1818, 1818, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, + 1810, 1810, 1810, 1810, 1810, 1811, 1811, 1811, 1811, 1811, + 1811, 1811, 1811, 1811, 1811, 1811, 1812, 1812, 1812, 1812, + 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1813, 1813, 1813, + 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1814, 1814, + 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1815, + 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + + 1816, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, + 1818, 1818, 1818, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1820, 1820, 1820, 1820, 1820, 1820, - 1820, 1820, 1820, 1820, 1820, 1820, 1821, 1821, 1821, 1821, - 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1822, 1822, - 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, - 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, - - 1823, 1823, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1826, 1826, 1826, 1826, - 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1827, 1827, - 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, - 1829, 1829, 1829, 1829, 433, 432, 430, 429, 427, 426, - 425, 424, 417, 416, 415, 414, 413, 412, 411, 409, - 407, 406, 405, 403, 402, 399, 398, 396, 395, 392, - - 389, 388, 387, 386, 385, 384, 383, 382, 381, 380, - 379, 377, 376, 375, 374, 373, 372, 371, 370, 369, - 368, 365, 364, 363, 362, 361, 360, 359, 357, 356, - 355, 354, 353, 352, 351, 349, 348, 347, 346, 345, - 344, 343, 342, 341, 339, 338, 336, 335, 334, 333, - 331, 330, 329, 328, 327, 326, 324, 319, 316, 314, - 313, 312, 311, 310, 309, 308, 305, 304, 303, 302, - 301, 300, 299, 298, 297, 296, 295, 294, 293, 291, - 290, 289, 287, 286, 284, 283, 282, 281, 280, 279, - 277, 276, 275, 274, 272, 271, 266, 265, 259, 258, - - 257, 256, 255, 254, 253, 252, 251, 250, 246, 245, - 242, 231, 226, 223, 222, 220, 205, 204, 203, 202, - 201, 200, 199, 198, 197, 195, 192, 191, 190, 188, - 186, 185, 184, 183, 181, 180, 179, 178, 177, 175, - 173, 170, 168, 167, 166, 161, 158, 154, 146, 137, - 136, 135, 134, 133, 132, 131, 130, 129, 127, 116, - 114, 112, 111, 109, 108, 106, 105, 102, 101, 89, - 86, 85, 84, 78, 71, 70, 69, 65, 63, 62, - 61, 58, 53, 50, 49, 48, 44, 37, 28, 24, - 23, 20, 19, 18, 17, 2, 1, 1409, 1409, 1409, - - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409 + 1820, 1820, 1820, 1820, 1820, 1821, 1821, 1821, 1821, 1821, + 1821, 1821, 1821, 1821, 1821, 1821, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1823, 1823, 1823, + 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1825, + 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, + + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, + 1827, 1827, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + 1828, 1828, 1828, 1829, 1829, 1829, 1829, 1829, 1829, 1829, + 1829, 1829, 1829, 1829, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 328, 327, 325, 320, 317, + 315, 314, 313, 312, 311, 310, 309, 306, 305, 304, + 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, + 292, 291, 290, 288, 287, 285, 284, 283, 282, 281, + 280, 278, 277, 276, 275, 273, 272, 267, 266, 260, + + 259, 258, 257, 256, 255, 254, 253, 252, 251, 247, + 246, 243, 231, 226, 223, 222, 220, 205, 204, 203, + 202, 201, 200, 199, 198, 197, 195, 192, 191, 190, + 188, 186, 185, 184, 183, 181, 180, 179, 178, 177, + 175, 173, 170, 168, 167, 166, 161, 158, 154, 146, + 137, 136, 135, 134, 133, 132, 131, 130, 129, 127, + 116, 114, 112, 111, 109, 108, 106, 105, 102, 101, + 89, 86, 85, 84, 78, 71, 70, 69, 65, 63, + 62, 61, 58, 53, 50, 49, 48, 44, 37, 28, + 24, 23, 20, 19, 18, 17, 2, 1, 1410, 1410, + + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + 1410 } ; static yy_state_type yy_last_accepting_state; @@ -2770,7 +2684,7 @@ char *yytext; +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -2785,7 +2699,7 @@ char *yytext; +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.l,v 1.131.2.6 2005/11/27 06:39:28 iliaa Exp $ */ +/* $Id: zend_language_scanner.l,v 1.131.2.9 2006/01/04 23:53:04 andi Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -3799,13 +3713,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1410 ) + if ( yy_current_state >= 1411 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7998 ); + while ( yy_base[yy_current_state] != 7599 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4728,16 +4642,21 @@ YY_RULE_SETUP case 122: YY_RULE_SETUP { - yymore(); -} - YY_BREAK -case YY_STATE_EOF(ST_ONE_LINE_COMMENT): -{ - zendlval->value.str.val = yytext; /* no copying - intentional */ - zendlval->value.str.len = yyleng; - zendlval->type = IS_STRING; - BEGIN(INITIAL); - return EOF; + switch (yytext[yyleng-1]) { + case '?': case '%': case '>': + yyless(yyleng-1); + yymore(); + break; + case '\n': + CG(zend_lineno)++; + /* intentional fall through */ + default: + zendlval->value.str.val = yytext; /* no copying - intentional */ + zendlval->value.str.len = yyleng; + zendlval->type = IS_STRING; + BEGIN(ST_IN_SCRIPTING); + return T_COMMENT; + } } YY_BREAK case 123: @@ -5019,7 +4938,6 @@ case 139: YY_RULE_SETUP { int label_len; - unsigned char unput_semicolon; CG(zend_lineno)++; if (yytext[yyleng-2]=='\r') { @@ -5030,17 +4948,12 @@ YY_RULE_SETUP if (yytext[label_len-1]==';') { label_len--; - unput_semicolon=1; - } else{ - unput_semicolon=0; } if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) { zendlval->value.str.val = estrndup(yytext, label_len); /* unput destroys yytext */ zendlval->value.str.len = label_len; - if (unput_semicolon) { - unput(';'); - } + yyless(yyleng - (yyleng - label_len)); efree(CG(heredoc)); CG(heredoc)=NULL; CG(heredoc_len)=0; @@ -5253,6 +5166,7 @@ ECHO; case YY_STATE_EOF(ST_SINGLE_QUOTE): case YY_STATE_EOF(ST_HEREDOC): case YY_STATE_EOF(ST_LOOKING_FOR_VARNAME): +case YY_STATE_EOF(ST_ONE_LINE_COMMENT): yyterminate(); case YY_END_OF_BUFFER: @@ -5543,7 +5457,7 @@ static yy_state_type yy_get_previous_state(TSRMLS_D) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1410 ) + if ( yy_current_state >= 1411 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -5581,11 +5495,11 @@ void ***tsrm_ls; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1410 ) + if ( yy_current_state >= 1411 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1409); + yy_is_jam = (yy_current_state == 1410); return yy_is_jam ? 0 : yy_current_state; } diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index 23442e2db..2e1159497 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.h,v 1.19 2005/08/03 13:30:54 sniper Exp $ */ +/* $Id: zend_language_scanner.h,v 1.19.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_SCANNER_H #define ZEND_SCANNER_H diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 564677712..d9c54ffd1 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -4,7 +4,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.l,v 1.131.2.6 2005/11/27 06:39:28 iliaa Exp $ */ +/* $Id: zend_language_scanner.l,v 1.131.2.9 2006/01/04 23:53:04 andi Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -1461,16 +1461,22 @@ NEWLINE ("\r"|"\n"|"\r\n") yymore(); } -<ST_ONE_LINE_COMMENT>[^\n\r?%>]+ { - yymore(); -} - -<ST_ONE_LINE_COMMENT><<EOF>> { - zendlval->value.str.val = yytext; /* no copying - intentional */ - zendlval->value.str.len = yyleng; - zendlval->type = IS_STRING; - BEGIN(INITIAL); - return EOF; +<ST_ONE_LINE_COMMENT>[^\n\r?%>]+{ANY_CHAR} { + switch (yytext[yyleng-1]) { + case '?': case '%': case '>': + yyless(yyleng-1); + yymore(); + break; + case '\n': + CG(zend_lineno)++; + /* intentional fall through */ + default: + zendlval->value.str.val = yytext; /* no copying - intentional */ + zendlval->value.str.len = yyleng; + zendlval->type = IS_STRING; + BEGIN(ST_IN_SCRIPTING); + return T_COMMENT; + } } <ST_ONE_LINE_COMMENT>{NEWLINE} { @@ -1727,7 +1733,6 @@ NEWLINE ("\r"|"\n"|"\r\n") <ST_HEREDOC>^{LABEL}(";")?{NEWLINE} { int label_len; - unsigned char unput_semicolon; CG(zend_lineno)++; if (yytext[yyleng-2]=='\r') { @@ -1738,17 +1743,12 @@ NEWLINE ("\r"|"\n"|"\r\n") if (yytext[label_len-1]==';') { label_len--; - unput_semicolon=1; - } else{ - unput_semicolon=0; } if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) { zendlval->value.str.val = estrndup(yytext, label_len); /* unput destroys yytext */ zendlval->value.str.len = label_len; - if (unput_semicolon) { - unput(';'); - } + yyless(yyleng - (yyleng - label_len)); efree(CG(heredoc)); CG(heredoc)=NULL; CG(heredoc_len)=0; diff --git a/Zend/zend_list.c b/Zend/zend_list.c index d0e7a46d0..d247551c8 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_list.c,v 1.66 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_list.c,v 1.66.2.1 2006/01/04 23:53:04 andi Exp $ */ /* resource lists */ diff --git a/Zend/zend_list.h b/Zend/zend_list.h index edb2a4791..b44c518dd 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_list.h,v 1.48 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_list.h,v 1.48.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_LIST_H #define ZEND_LIST_H diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c index f21797078..6991c0eb0 100644 --- a/Zend/zend_llist.c +++ b/Zend/zend_llist.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_llist.c,v 1.35 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_llist.c,v 1.35.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_llist.h" diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h index b5150ae32..b6addc9e4 100644 --- a/Zend/zend_llist.h +++ b/Zend/zend_llist.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_llist.h,v 1.33 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_llist.h,v 1.33.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_LLIST_H #define ZEND_LLIST_H diff --git a/Zend/zend_mm.c b/Zend/zend_mm.c index 31f9138e9..532e863ea 100644 --- a/Zend/zend_mm.c +++ b/Zend/zend_mm.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_mm.c,v 1.31 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_mm.c,v 1.31.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_mm.h" diff --git a/Zend/zend_mm.h b/Zend/zend_mm.h index aec607e71..9a09c278b 100644 --- a/Zend/zend_mm.h +++ b/Zend/zend_mm.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_mm.h,v 1.19 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_mm.h,v 1.19.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef _ZEND_MM_H #define _ZEND_MM_H diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 19d78019e..c8f4ed9ff 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_modules.h,v 1.67.2.1 2005/09/22 19:13:32 tony2001 Exp $ */ +/* $Id: zend_modules.h,v 1.67.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef MODULES_H #define MODULES_H diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c index 50de6d553..c3833322b 100644 --- a/Zend/zend_multibyte.c +++ b/Zend/zend_multibyte.c @@ -2,11 +2,11 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | + | available through the world-wide-web at | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multibyte.c,v 1.4.2.1 2005/11/15 13:29:29 dmitry Exp $ */ +/* $Id: zend_multibyte.c,v 1.4.2.4 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_compile.h" diff --git a/Zend/zend_multibyte.h b/Zend/zend_multibyte.h index 0ef16b7be..319a6f088 100644 --- a/Zend/zend_multibyte.h +++ b/Zend/zend_multibyte.h @@ -2,11 +2,11 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | + | available through the world-wide-web at | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multibyte.h,v 1.3 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_multibyte.h,v 1.3.2.3 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_MULTIBYTE_H #define ZEND_MULTIBYTE_H diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h index 439859942..6bae3c70a 100644 --- a/Zend/zend_multiply.h +++ b/Zend/zend_multiply.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multiply.h,v 1.10 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_multiply.h,v 1.10.2.1 2006/01/04 23:53:04 andi Exp $ */ #if defined(__i386__) && defined(__GNUC__) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index f5dd81f56..564d1051d 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.135.2.4 2005/11/16 11:52:27 dmitry Exp $ */ +/* $Id: zend_object_handlers.c,v 1.135.2.6 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -857,7 +857,7 @@ ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, char *propert zend_update_class_constants(tmp_ce TSRMLS_CC); - zend_hash_quick_find(tmp_ce->static_members, property_info->name, property_info->name_length+1, property_info->h, (void **) &retval); + zend_hash_quick_find(CE_STATIC_MEMBERS(tmp_ce), property_info->name, property_info->name_length+1, property_info->h, (void **) &retval); if (!retval) { if (silent) { diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index f7cdcdee7..2f18bd7ae 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.h,v 1.47 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_object_handlers.h,v 1.47.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_OBJECT_HANDLERS_H #define ZEND_OBJECT_HANDLERS_H @@ -103,7 +103,7 @@ typedef int (*zend_object_cast_t)(zval *readobj, zval *writeobj, int type, int s * Returns FAILURE if the object does not have any sense of overloaded dimensions */ typedef int (*zend_object_count_elements_t)(zval *object, long *count TSRMLS_DC); -typedef struct _zend_object_handlers { +struct _zend_object_handlers { /* general object functions */ zend_object_add_ref_t add_ref; zend_object_del_ref_t del_ref; @@ -129,9 +129,10 @@ typedef struct _zend_object_handlers { zend_object_compare_t compare_objects; zend_object_cast_t cast_object; zend_object_count_elements_t count_elements; -} zend_object_handlers; +}; extern ZEND_API zend_object_handlers std_object_handlers; + BEGIN_EXTERN_C() ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, char *function_name_strval, int function_name_strlen TSRMLS_DC); ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, char *property_name, int property_name_len, zend_bool silent TSRMLS_DC); diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 41991d16e..e2cffc3d2 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects.c,v 1.56.2.1 2005/11/15 13:35:23 dmitry Exp $ */ +/* $Id: zend_objects.c,v 1.56.2.2 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_globals.h" diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h index a211fb104..8058dfb2c 100644 --- a/Zend/zend_objects.h +++ b/Zend/zend_objects.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects.h,v 1.25 2005/08/03 13:30:55 sniper Exp $ */ +/* $Id: zend_objects.h,v 1.25.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_OBJECTS_H #define ZEND_OBJECTS_H diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 59bf941ba..733ac9a96 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.c,v 1.47.2.3 2005/11/15 12:41:31 dmitry Exp $ */ +/* $Id: zend_objects_API.c,v 1.47.2.4 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_globals.h" diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index 3c5e52202..f08174763 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.h,v 1.20 2005/08/03 13:30:56 sniper Exp $ */ +/* $Id: zend_objects_API.h,v 1.20.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_OBJECTS_API_H #define ZEND_OBJECTS_API_H diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index e0a2f4834..0799cd66d 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_opcode.c,v 1.110.2.1 2005/09/01 10:05:32 dmitry Exp $ */ +/* $Id: zend_opcode.c,v 1.110.2.3 2006/01/04 23:53:04 andi Exp $ */ #include <stdio.h> @@ -138,18 +138,20 @@ ZEND_API int zend_cleanup_function_data(zend_function *function TSRMLS_DC) ZEND_API int zend_cleanup_class_data(zend_class_entry **pce TSRMLS_DC) { - if ((*pce)->static_members) { - if ((*pce)->static_members != &(*pce)->default_static_members) { - zend_hash_destroy((*pce)->static_members); - FREE_HASHTABLE((*pce)->static_members); - } - (*pce)->static_members = NULL; - } if ((*pce)->type == ZEND_USER_CLASS) { /* Clean all parts that can contain run-time data */ /* Note that only run-time accessed data need to be cleaned up, pre-defined data can not contain objects and thus are not probelmatic */ zend_hash_apply(&(*pce)->function_table, (apply_func_t) zend_cleanup_function_data TSRMLS_CC); + (*pce)->static_members = NULL; + } else if (CE_STATIC_MEMBERS(*pce)) { + zend_hash_destroy(CE_STATIC_MEMBERS(*pce)); + FREE_HASHTABLE(CE_STATIC_MEMBERS(*pce)); +#ifdef ZTS + CG(static_members)[(long)((*pce)->static_members)] = NULL; +#else + (*pce)->static_members = NULL; +#endif } return 0; } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 3171db037..12282f44f 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.c,v 1.208.2.1 2005/09/12 11:48:56 dmitry Exp $ */ +/* $Id: zend_operators.c,v 1.208.2.3 2006/01/04 23:53:04 andi Exp $ */ #include <ctype.h> @@ -1783,7 +1783,7 @@ ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned in while (str < end) { *result++ = tolower((int)*str++); } - *result = *end; + *result = '\0'; return dest; } diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index b0c2b32f3..20c75de38 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.h,v 1.94.2.2 2005/11/17 19:21:32 tony2001 Exp $ */ +/* $Id: zend_operators.h,v 1.94.2.4 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_OPERATORS_H #define ZEND_OPERATORS_H @@ -249,6 +249,7 @@ END_EXTERN_C() #define Z_STRVAL(zval) (zval).value.str.val #define Z_STRLEN(zval) (zval).value.str.len #define Z_ARRVAL(zval) (zval).value.ht +#define Z_OBJVAL(zval) (zval).value.obj #define Z_OBJ_HANDLE(zval) (zval).value.obj.handle #define Z_OBJ_HT(zval) (zval).value.obj.handlers #define Z_OBJCE(zval) zend_get_class_entry(&(zval) TSRMLS_CC) @@ -265,6 +266,7 @@ END_EXTERN_C() #define Z_OBJPROP_P(zval_p) Z_OBJPROP(*zval_p) #define Z_OBJCE_P(zval_p) Z_OBJCE(*zval_p) #define Z_RESVAL_P(zval_p) Z_RESVAL(*zval_p) +#define Z_OBJVAL_P(zval_p) Z_OBJVAL(*zval_p) #define Z_OBJ_HANDLE_P(zval_p) Z_OBJ_HANDLE(*zval_p) #define Z_OBJ_HT_P(zval_p) Z_OBJ_HT(*zval_p) #define Z_OBJ_HANDLER_P(zval_p, h) Z_OBJ_HANDLER(*zval_p, h) @@ -278,6 +280,7 @@ END_EXTERN_C() #define Z_OBJPROP_PP(zval_pp) Z_OBJPROP(**zval_pp) #define Z_OBJCE_PP(zval_pp) Z_OBJCE(**zval_pp) #define Z_RESVAL_PP(zval_pp) Z_RESVAL(**zval_pp) +#define Z_OBJVAL_PP(zval_pp) Z_OBJVAL(**zval_pp) #define Z_OBJ_HANDLE_PP(zval_p) Z_OBJ_HANDLE(**zval_p) #define Z_OBJ_HT_PP(zval_p) Z_OBJ_HT(**zval_p) #define Z_OBJ_HANDLER_PP(zval_p, h) Z_OBJ_HANDLER(**zval_p, h) diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c index b25faea2e..dc9d91a29 100644 --- a/Zend/zend_ptr_stack.c +++ b/Zend/zend_ptr_stack.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ptr_stack.c,v 1.23 2005/08/03 13:30:56 sniper Exp $ */ +/* $Id: zend_ptr_stack.c,v 1.23.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_ptr_stack.h" diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h index 430cdfb03..788089172 100644 --- a/Zend/zend_ptr_stack.h +++ b/Zend/zend_ptr_stack.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ptr_stack.h,v 1.22.2.1 2005/10/20 07:23:22 dmitry Exp $ */ +/* $Id: zend_ptr_stack.h,v 1.22.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_PTR_STACK_H #define ZEND_PTR_STACK_H diff --git a/Zend/zend_qsort.c b/Zend/zend_qsort.c index 03445a753..02ca5b6ee 100644 --- a/Zend/zend_qsort.c +++ b/Zend/zend_qsort.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_qsort.c,v 1.8 2005/08/03 13:30:56 sniper Exp $ */ +/* $Id: zend_qsort.c,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" diff --git a/Zend/zend_qsort.h b/Zend/zend_qsort.h index c961f4c68..0965baba5 100644 --- a/Zend/zend_qsort.h +++ b/Zend/zend_qsort.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_qsort.h,v 1.8 2005/08/03 13:30:56 sniper Exp $ */ +/* $Id: zend_qsort.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_QSORT_H #define ZEND_QSORT_H diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c deleted file mode 100644 index 07f1fac43..000000000 --- a/Zend/zend_reflection_api.c +++ /dev/null @@ -1,4061 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend 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.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Timm Friebe <thekid@thekid.de> | - | George Schlossnagle <george@omniti.com> | - | Andrei Zmievski <andrei@gravitonic.com> | - | Marcus Boerger <helly@php.net> | - +----------------------------------------------------------------------+ -*/ - -/* $Id: zend_reflection_api.c,v 1.164.2.11 2005/11/24 19:56:11 helly Exp $ */ -#include "zend.h" -#include "zend_API.h" -#include "zend_exceptions.h" -#include "zend_operators.h" -#include "zend_constants.h" -#include "zend_ini.h" -#include "zend_interfaces.h" - -/* Class entry pointers */ -zend_class_entry *reflector_ptr; -zend_class_entry *reflection_exception_ptr; -zend_class_entry *reflection_ptr; -zend_class_entry *reflection_function_ptr; -zend_class_entry *reflection_parameter_ptr; -zend_class_entry *reflection_class_ptr; -zend_class_entry *reflection_object_ptr; -zend_class_entry *reflection_method_ptr; -zend_class_entry *reflection_property_ptr; -zend_class_entry *reflection_extension_ptr; - -/* Method macros */ -#define METHOD_NOTSTATIC(ce) \ - if (!this_ptr || !instanceof_function(Z_OBJCE_P(this_ptr), ce TSRMLS_CC)) { \ - zend_error(E_ERROR, "%s() cannot be called statically", get_active_function_name(TSRMLS_C)); \ - return; \ - } \ - -#define METHOD_NOTSTATIC_NUMPARAMS(ce, c) METHOD_NOTSTATIC(ce) \ - if (ZEND_NUM_ARGS() > c) { \ - ZEND_WRONG_PARAM_COUNT(); \ - } \ - -/* Exception throwing macro */ -#define _DO_THROW(msg) \ - zend_throw_exception(reflection_exception_ptr, msg, 0 TSRMLS_CC); \ - return; \ - -#define RETURN_ON_EXCEPTION \ - if (EG(exception) && Z_OBJCE_P(EG(exception)) == reflection_exception_ptr) { \ - return; \ - } - -#define GET_REFLECTION_OBJECT_PTR(target) \ - intern = (reflection_object *) zend_object_store_get_object(getThis() TSRMLS_CC); \ - if (intern == NULL || intern->ptr == NULL) { \ - RETURN_ON_EXCEPTION \ - zend_error(E_ERROR, "Internal error: Failed to retrieve the reflection object"); \ - } \ - target = intern->ptr; \ - -/* Class constants */ -#define REGISTER_REFLECTION_CLASS_CONST_LONG(class_name, const_name, value) \ - zend_declare_class_constant_long(reflection_ ## class_name ## _ptr, const_name, sizeof(const_name)-1, (long)value TSRMLS_CC); - -/* {{{ Smart string functions */ -typedef struct _string { - char *string; - int len; - int alloced; -} string; - -static void string_init(string *str) -{ - str->string = (char *) emalloc(1024); - str->len = 1; - str->alloced = 1024; - *str->string = '\0'; -} - -static string *string_printf(string *str, const char *format, ...) -{ - int len; - va_list arg; - char *s_tmp; - - va_start(arg, format); - len = zend_vspprintf(&s_tmp, 0, format, arg); - if (len) { - register int nlen = (str->len + len + (1024 - 1)) & ~(1024 - 1); - if (str->alloced < nlen) { - str->alloced = nlen; - str->string = erealloc(str->string, str->alloced); - } - memcpy(str->string + str->len - 1, s_tmp, len + 1); - str->len += len; - } - efree(s_tmp); - va_end(arg); - return str; -} - -static string *string_write(string *str, char *buf, int len) -{ - register int nlen = (str->len + len + (1024 - 1)) & ~(1024 - 1); - if (str->alloced < nlen) { - str->alloced = nlen; - str->string = erealloc(str->string, str->alloced); - } - memcpy(str->string + str->len - 1, buf, len); - str->len += len; - str->string[str->len - 1] = '\0'; - return str; -} - -static string *string_append(string *str, string *append) -{ - if (append->len > 1) { - string_write(str, append->string, append->len - 1); - } - return str; -} - -static void string_free(string *str) -{ - efree(str->string); - str->len = 0; - str->alloced = 0; - str->string = NULL; -} -/* }}} */ - -/* Struct for properties */ -typedef struct _property_reference { - zend_class_entry *ce; - zend_property_info *prop; -} property_reference; - -/* Struct for parameters */ -typedef struct _parameter_reference { - zend_uint offset; - zend_uint required; - struct _zend_arg_info *arg_info; - zend_function *fptr; -} parameter_reference; - -/* Struct for reflection objects */ -typedef struct { - zend_object zo; - void *ptr; - unsigned int free_ptr:1; - zval *obj; - zend_class_entry *ce; -} reflection_object; - -static zend_object_handlers reflection_object_handlers; - -static void _default_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC) -{ - zval **value; - - if (zend_hash_find(Z_OBJPROP_P(object), name, name_len, (void **) &value) == FAILURE) { - RETURN_FALSE; - } - - *return_value = **value; - zval_copy_ctor(return_value); -} - -static void reflection_register_implement(zend_class_entry *class_entry, zend_class_entry *interface_entry TSRMLS_DC) -{ - zend_uint num_interfaces = ++class_entry->num_interfaces; - - class_entry->interfaces = (zend_class_entry **) realloc(class_entry->interfaces, sizeof(zend_class_entry *) * num_interfaces); - class_entry->interfaces[num_interfaces - 1] = interface_entry; -} - -static void reflection_free_objects_storage(void *object TSRMLS_DC) -{ - reflection_object *intern = (reflection_object *) object; - - if (intern->free_ptr && intern->ptr) { - efree(intern->ptr); - intern->ptr = NULL; - } - if (intern->obj) { - zval_ptr_dtor(&intern->obj); - } - zend_objects_free_object_storage(object TSRMLS_CC); -} - -static void reflection_objects_clone(void *object, void **object_clone TSRMLS_DC) -{ - reflection_object *intern = (reflection_object *) object; - reflection_object **intern_clone = (reflection_object **) object_clone; - - *intern_clone = emalloc(sizeof(reflection_object)); - (*intern_clone)->zo.ce = intern->zo.ce; - (*intern_clone)->zo.guards = NULL; - ALLOC_HASHTABLE((*intern_clone)->zo.properties); - (*intern_clone)->ptr = intern->ptr; - (*intern_clone)->free_ptr = intern->free_ptr; - (*intern_clone)->obj = intern->obj; - if (intern->obj) { - zval_add_ref(&intern->obj); - } -} - -static zend_object_value reflection_objects_new(zend_class_entry *class_type TSRMLS_DC) -{ - zval tmp; - zend_object_value retval; - reflection_object *intern; - - intern = emalloc(sizeof(reflection_object)); - intern->zo.ce = class_type; - intern->zo.guards = NULL; - intern->ptr = NULL; - intern->obj = NULL; - intern->free_ptr = 0; - - ALLOC_HASHTABLE(intern->zo.properties); - zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0); - zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - retval.handle = zend_objects_store_put(intern, NULL, reflection_free_objects_storage, reflection_objects_clone TSRMLS_CC); - retval.handlers = &reflection_object_handlers; - return retval; -} - -static zval * reflection_instanciate(zend_class_entry *pce, zval *object TSRMLS_DC) -{ - if (!object) { - ALLOC_ZVAL(object); - } - Z_TYPE_P(object) = IS_OBJECT; - object_init_ex(object, pce); - object->refcount = 1; - object->is_ref = 1; - return object; -} - -static void _const_string(string *str, char *name, zval *value, char *indent TSRMLS_DC); -static void _function_string(string *str, zend_function *fptr, char *indent TSRMLS_DC); -static void _property_string(string *str, zend_property_info *prop, char *prop_name, char* indent TSRMLS_DC); -static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *indent TSRMLS_DC); -static void _extension_string(string *str, zend_module_entry *module, char *indent TSRMLS_DC); - -/* {{{ _class_string */ -static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *indent TSRMLS_DC) -{ - int count, count_static_props = 0, count_static_funcs = 0, count_shadow_props = 0; - string sub_indent; - - string_init(&sub_indent); - string_printf(&sub_indent, "%s ", indent); - - /* TBD: Repair indenting of doc comment (or is this to be done in the parser?) */ - if (ce->type == ZEND_USER_CLASS && ce->doc_comment) { - string_printf(str, "%s%s", indent, ce->doc_comment); - string_write(str, "\n", 1); - } - - if (obj) { - string_printf(str, "%sObject of class [ ", indent); - } else { - string_printf(str, "%s%s [ ", indent, (ce->ce_flags & ZEND_ACC_INTERFACE) ? "Interface" : "Class"); - } - string_printf(str, (ce->type == ZEND_USER_CLASS) ? "<user" : "<internal"); - if (ce->module) { - string_printf(str, ":%s", ce->module->name); - } - string_printf(str, "> "); - if (ce->get_iterator != NULL) { - string_printf(str, "<iterateable> "); - } - if (ce->ce_flags & ZEND_ACC_INTERFACE) { - string_printf(str, "interface "); - } else { - if (ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { - string_printf(str, "abstract "); - } - if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) { - string_printf(str, "final "); - } - string_printf(str, "class "); - } - string_write(str, ce->name, ce->name_length); - if (ce->parent) { - string_printf(str, " extends %s", ce->parent->name); - } - - if (ce->num_interfaces) { - zend_uint i; - - string_printf(str, " implements %s", ce->interfaces[0]->name); - for (i = 1; i < ce->num_interfaces; ++i) { - string_printf(str, ", %s", ce->interfaces[i]->name); - } - } - string_printf(str, " ] {\n"); - - /* The information where a class is declared is only available for user classes */ - if (ce->type == ZEND_USER_CLASS) { - string_printf(str, "%s @@ %s %d-%d\n", indent, ce->filename, - ce->line_start, ce->line_end); - } - - /* Constants */ - if (&ce->constants_table) { - string_printf(str, "\n"); - count = zend_hash_num_elements(&ce->constants_table); - string_printf(str, "%s - Constants [%d] {\n", indent, count); - if (count > 0) { - HashPosition pos; - zval **value; - char *key; - uint key_len; - ulong num_index; - - zend_hash_internal_pointer_reset_ex(&ce->constants_table, &pos); - - while (zend_hash_get_current_data_ex(&ce->constants_table, (void **) &value, &pos) == SUCCESS) { - zend_hash_get_current_key_ex(&ce->constants_table, &key, &key_len, &num_index, 0, &pos); - - _const_string(str, key, *value, indent TSRMLS_CC); - zend_hash_move_forward_ex(&ce->constants_table, &pos); - } - } - string_printf(str, "%s }\n", indent); - } - - /* Static properties */ - if (&ce->properties_info) { - /* counting static properties */ - count = zend_hash_num_elements(&ce->properties_info); - if (count > 0) { - HashPosition pos; - zend_property_info *prop; - - zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos); - - while (zend_hash_get_current_data_ex(&ce->properties_info, (void **) &prop, &pos) == SUCCESS) { - if(prop->flags & ZEND_ACC_SHADOW) { - count_shadow_props++; - } else if (prop->flags & ZEND_ACC_STATIC) { - count_static_props++; - } - zend_hash_move_forward_ex(&ce->properties_info, &pos); - } - } - - /* static properties */ - string_printf(str, "\n%s - Static properties [%d] {\n", indent, count_static_props); - if (count_static_props > 0) { - HashPosition pos; - zend_property_info *prop; - - zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos); - - while (zend_hash_get_current_data_ex(&ce->properties_info, (void **) &prop, &pos) == SUCCESS) { - if ((prop->flags & ZEND_ACC_STATIC) && !(prop->flags & ZEND_ACC_SHADOW)) { - _property_string(str, prop, NULL, sub_indent.string TSRMLS_CC); - } - - zend_hash_move_forward_ex(&ce->properties_info, &pos); - } - } - string_printf(str, "%s }\n", indent); - } - - /* Static methods */ - if (&ce->function_table) { - /* counting static properties */ - count = zend_hash_num_elements(&ce->function_table); - if (count > 0) { - HashPosition pos; - zend_function *mptr; - - zend_hash_internal_pointer_reset_ex(&ce->function_table, &pos); - - while (zend_hash_get_current_data_ex(&ce->function_table, (void **) &mptr, &pos) == SUCCESS) { - if (mptr->common.fn_flags & ZEND_ACC_STATIC) { - count_static_funcs++; - } - zend_hash_move_forward_ex(&ce->function_table, &pos); - } - } - - /* static properties */ - string_printf(str, "\n%s - Static methods [%d] {", indent, count_static_funcs); - if (count_static_funcs > 0) { - HashPosition pos; - zend_function *mptr; - - zend_hash_internal_pointer_reset_ex(&ce->function_table, &pos); - - while (zend_hash_get_current_data_ex(&ce->function_table, (void **) &mptr, &pos) == SUCCESS) { - if (mptr->common.fn_flags & ZEND_ACC_STATIC) { - string_printf(str, "\n"); - _function_string(str, mptr, sub_indent.string TSRMLS_CC); - } - zend_hash_move_forward_ex(&ce->function_table, &pos); - } - } else { - string_printf(str, "\n"); - } - string_printf(str, "%s }\n", indent); - } - - /* Default/Implicit properties */ - if (&ce->properties_info) { - count = zend_hash_num_elements(&ce->properties_info) - count_static_props - count_shadow_props; - string_printf(str, "\n%s - Properties [%d] {\n", indent, count); - if (count > 0) { - HashPosition pos; - zend_property_info *prop; - - zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos); - - while (zend_hash_get_current_data_ex(&ce->properties_info, (void **) &prop, &pos) == SUCCESS) { - if (!(prop->flags & (ZEND_ACC_STATIC|ZEND_ACC_SHADOW))) { - _property_string(str, prop, NULL, sub_indent.string TSRMLS_CC); - } - zend_hash_move_forward_ex(&ce->properties_info, &pos); - } - } - string_printf(str, "%s }\n", indent); - } - - if (obj && Z_OBJ_HT_P(obj)->get_properties) { - string dyn; - HashTable *properties = Z_OBJ_HT_P(obj)->get_properties(obj TSRMLS_CC); - HashPosition pos; - zval **prop; - - string_init(&dyn); - count = 0; - - zend_hash_internal_pointer_reset_ex(properties, &pos); - - while (zend_hash_get_current_data_ex(properties, (void **) &prop, &pos) == SUCCESS) { - char *prop_name; - uint prop_name_size; - ulong index; - - if (zend_hash_get_current_key_ex(properties, &prop_name, &prop_name_size, &index, 1, &pos) == HASH_KEY_IS_STRING) { - if (prop_name_size && prop_name[0]) { /* skip all private and protected properties */ - if (!zend_hash_quick_exists(&ce->properties_info, prop_name, prop_name_size, zend_get_hash_value(prop_name, prop_name_size))) { - count++; - _property_string(&dyn, NULL, prop_name, sub_indent.string TSRMLS_CC); - } - } - efree(prop_name); - } - zend_hash_move_forward_ex(properties, &pos); - } - - string_printf(str, "\n%s - Dynamic properties [%d] {\n", indent, count); - string_append(str, &dyn); - string_printf(str, "%s }\n", indent); - string_free(&dyn); - } - - /* Non static methods */ - if (&ce->function_table) { - count = zend_hash_num_elements(&ce->function_table) - count_static_funcs; - string_printf(str, "\n%s - Methods [%d] {", indent, count); - if (count > 0) { - HashPosition pos; - zend_function *mptr; - - zend_hash_internal_pointer_reset_ex(&ce->function_table, &pos); - - while (zend_hash_get_current_data_ex(&ce->function_table, (void **) &mptr, &pos) == SUCCESS) { - if (!(mptr->common.fn_flags & ZEND_ACC_STATIC)) { - string_printf(str, "\n"); - _function_string(str, mptr, sub_indent.string TSRMLS_CC); - } - zend_hash_move_forward_ex(&ce->function_table, &pos); - } - } else { - string_printf(str, "\n"); - } - string_printf(str, "%s }\n", indent); - } - - string_printf(str, "%s}\n", indent); - string_free(&sub_indent); -} -/* }}} */ - -/* {{{ _const_string */ -static void _const_string(string *str, char *name, zval *value, char *indent TSRMLS_DC) -{ - string_printf(str, "%s Constant [ %s %s ] { }\n", - indent, - zend_zval_type_name(value), - name); -} -/* }}} */ - -/* {{{ _get_recv_opcode */ -static zend_op* _get_recv_op(zend_op_array *op_array, zend_uint offset) -{ - zend_op *op = op_array->opcodes; - zend_op *end = op + op_array->last; - - ++offset; - while (op < end) { - if ((op->opcode == ZEND_RECV || op->opcode == ZEND_RECV_INIT) && - op->op1.u.constant.value.lval == offset) { - return op; - } - ++op; - } - return NULL; -} -/* }}} */ - -/* {{{ _parameter_string */ -static void _parameter_string(string *str, zend_function *fptr, struct _zend_arg_info *arg_info, zend_uint offset, zend_uint required, char* indent TSRMLS_DC) -{ - string_printf(str, "Parameter #%d [ ", offset); - if (offset >= required) { - string_printf(str, "<optional> "); - } else { - string_printf(str, "<required> "); - } - if (arg_info->class_name) { - string_printf(str, "%s ", arg_info->class_name); - if (arg_info->allow_null) { - string_printf(str, "or NULL "); - } - } else if (arg_info->array_type_hint) { - string_printf(str, "array "); - if (arg_info->allow_null) { - string_printf(str, "or NULL "); - } - } - if (arg_info->pass_by_reference) { - string_write(str, "&", sizeof("&")-1); - } - if (arg_info->name) { - string_printf(str, "$%s", arg_info->name); - } else { - string_printf(str, "$param%d", offset); - } - if (fptr->type == ZEND_USER_FUNCTION && offset >= required) { - zend_op *precv = _get_recv_op((zend_op_array*)fptr, offset); - if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2.op_type != IS_UNUSED) { - zval *zv, zv_copy; - int use_copy; - string_write(str, " = ", sizeof(" = ")-1); - ALLOC_ZVAL(zv); - *zv = precv->op2.u.constant; - zval_copy_ctor(zv); - INIT_PZVAL(zv); - zval_update_constant(&zv, (void*)1 TSRMLS_CC); - if (Z_TYPE_P(zv) == IS_BOOL) { - if (Z_LVAL_P(zv)) { - string_write(str, "true", sizeof("true")-1); - } else { - string_write(str, "false", sizeof("false")-1); - } - } else if (Z_TYPE_P(zv) == IS_NULL) { - string_write(str, "NULL", sizeof("NULL")-1); - } else if (Z_TYPE_P(zv) == IS_STRING) { - string_write(str, "'", sizeof("'")-1); - string_write(str, Z_STRVAL_P(zv), MIN(Z_STRLEN_P(zv), 15)); - if (Z_STRLEN_P(zv) > 15) { - string_write(str, "...", sizeof("...")-1); - } - string_write(str, "'", sizeof("'")-1); - } else { - zend_make_printable_zval(zv, &zv_copy, &use_copy); - string_write(str, Z_STRVAL(zv_copy), Z_STRLEN(zv_copy)); - if (use_copy) { - zval_dtor(&zv_copy); - } - } - zval_ptr_dtor(&zv); - } - } - string_write(str, " ]", sizeof(" ]")-1); -} -/* }}} */ - -/* {{{ _function_parameter_string */ -static void _function_parameter_string(string *str, zend_function *fptr, char* indent TSRMLS_DC) -{ - struct _zend_arg_info *arg_info = fptr->common.arg_info; - zend_uint i, required = fptr->common.required_num_args; - - if (!arg_info) { - return; - } - - string_printf(str, "\n"); - string_printf(str, "%s- Parameters [%d] {\n", indent, fptr->common.num_args); - for (i = 0; i < fptr->common.num_args; i++) { - string_printf(str, "%s ", indent); - _parameter_string(str, fptr, arg_info, i, required, indent TSRMLS_CC); - string_write(str, "\n", sizeof("\n")-1); - arg_info++; - } - string_printf(str, "%s}\n", indent); -} -/* }}} */ - -/* {{{ _function_string */ -static void _function_string(string *str, zend_function *fptr, char* indent TSRMLS_DC) -{ - string param_indent; - - /* TBD: Repair indenting of doc comment (or is this to be done in the parser?) - * What's "wrong" is that any whitespace before the doc comment start is - * swallowed, leading to an unaligned comment. - */ - if (fptr->type == ZEND_USER_FUNCTION && fptr->op_array.doc_comment) { - string_printf(str, "%s%s\n", indent, fptr->op_array.doc_comment); - } - - string_printf(str, fptr->common.scope ? "%sMethod [ " : "%sFunction [ ", indent); - string_printf(str, (fptr->type == ZEND_USER_FUNCTION) ? "<user> " : "<internal> "); - if (fptr->common.fn_flags & ZEND_ACC_CTOR) { - string_printf(str, "<ctor> "); - } - if (fptr->common.fn_flags & ZEND_ACC_DTOR) { - string_printf(str, "<dtor> "); - } - if (fptr->common.fn_flags & ZEND_ACC_ABSTRACT) { - string_printf(str, "abstract "); - } - if (fptr->common.fn_flags & ZEND_ACC_FINAL) { - string_printf(str, "final "); - } - if (fptr->common.fn_flags & ZEND_ACC_STATIC) { - string_printf(str, "static "); - } - - /* These are mutually exclusive */ - switch (fptr->common.fn_flags & ZEND_ACC_PPP_MASK) { - case ZEND_ACC_PUBLIC: - string_printf(str, "public "); - break; - case ZEND_ACC_PRIVATE: - string_printf(str, "private "); - break; - case ZEND_ACC_PROTECTED: - string_printf(str, "protected "); - break; - default: - string_printf(str, "<visibility error> "); - break; - } - - string_printf(str, fptr->common.scope ? "method " : "function "); - if (fptr->op_array.return_reference) { - string_printf(str, "&"); - } - string_printf(str, "%s ] {\n", fptr->common.function_name); - /* The information where a function is declared is only available for user classes */ - if (fptr->type == ZEND_USER_FUNCTION) { - string_printf(str, "%s @@ %s %d - %d\n", indent, - fptr->op_array.filename, - fptr->op_array.line_start, - fptr->op_array.line_end); - } - string_init(¶m_indent); - string_printf(¶m_indent, "%s ", indent); - _function_parameter_string(str, fptr, param_indent.string TSRMLS_CC); - string_free(¶m_indent); - string_printf(str, "%s}\n", indent); -} -/* }}} */ - -/* {{{ _property_string */ -static void _property_string(string *str, zend_property_info *prop, char *prop_name, char* indent TSRMLS_DC) -{ - char *class_name; - - string_printf(str, "%sProperty [ ", indent); - if (!prop) { - string_printf(str, "<dynamic> public $%s", prop_name); - } else { - if (!(prop->flags & ZEND_ACC_STATIC)) { - if (prop->flags & ZEND_ACC_IMPLICIT_PUBLIC) { - string_write(str, "<implicit> ", sizeof("<implicit> ") - 1); - } else { - string_write(str, "<default> ", sizeof("<default> ") - 1); - } - } - - /* These are mutually exclusive */ - switch (prop->flags & ZEND_ACC_PPP_MASK) { - case ZEND_ACC_PUBLIC: - string_printf(str, "public "); - break; - case ZEND_ACC_PRIVATE: - string_printf(str, "private "); - break; - case ZEND_ACC_PROTECTED: - string_printf(str, "protected "); - break; - } - if(prop->flags & ZEND_ACC_STATIC) { - string_printf(str, "static "); - } - - zend_unmangle_property_name_ex(prop->name, prop->name_length, &class_name, &prop_name); - string_printf(str, "$%s", prop_name); - } - - string_printf(str, " ]\n"); -} -/* }}} */ - -static int _extension_ini_string(zend_ini_entry *ini_entry, int num_args, va_list args, zend_hash_key *hash_key) -{ - string *str = va_arg(args, string *); - char *indent = va_arg(args, char *); - int number = va_arg(args, int); - char *comma = ""; - - if (number == ini_entry->module_number) { - string_printf(str, " %sEntry [ %s <", indent, ini_entry->name); - if (ini_entry->modifiable & ZEND_INI_ALL) { - string_printf(str, "ALL"); - } else { - if (ini_entry->modifiable & ZEND_INI_USER) { - string_printf(str, "USER"); - comma = ","; - } - if (ini_entry->modifiable & ZEND_INI_PERDIR) { - string_printf(str, "%sPERDIR", comma); - comma = ","; - } - if (ini_entry->modifiable & ZEND_INI_SYSTEM) { - string_printf(str, "%sSYSTEM", comma); - } - } - - string_printf(str, "> ]\n"); - string_printf(str, " %s Current = '%s'\n", indent, ini_entry->value ? ini_entry->value : ""); - if (ini_entry->modified) { - string_printf(str, " %s Default = '%s'\n", indent, ini_entry->orig_value ? ini_entry->orig_value : ""); - } - string_printf(str, " %s}\n", indent); - } - return ZEND_HASH_APPLY_KEEP; -} - -static int _extension_class_string(zend_class_entry **pce, int num_args, va_list args, zend_hash_key *hash_key) -{ - string *str = va_arg(args, string *); - char *indent = va_arg(args, char *); - struct _zend_module_entry *module = va_arg(args, struct _zend_module_entry*); - int *num_classes = va_arg(args, int*); - - if ((*pce)->module && !strcasecmp((*pce)->module->name, module->name)) { - TSRMLS_FETCH(); - string_printf(str, "\n"); - _class_string(str, *pce, NULL, indent TSRMLS_CC); - (*num_classes)++; - } - return ZEND_HASH_APPLY_KEEP; -} - -/* {{{ _extension_string */ -static void _extension_string(string *str, zend_module_entry *module, char *indent TSRMLS_DC) -{ - string_printf(str, "%sExtension [ ", indent); - if (module->type == MODULE_PERSISTENT) { - string_printf(str, "<persistent>"); - } - if (module->type == MODULE_TEMPORARY) { - string_printf(str, "<temporary>" ); - } - string_printf(str, " extension #%d %s version %s ] {\n", - module->module_number, module->name, - (module->version == NO_VERSION_YET) ? "<no_version>" : module->version); - - { - string str_ini; - string_init(&str_ini); - zend_hash_apply_with_arguments(EG(ini_directives), (apply_func_args_t) _extension_ini_string, 3, &str_ini, indent, module->module_number); - if (str_ini.len > 1) { - string_printf(str, "\n - INI {\n"); - string_append(str, &str_ini); - string_printf(str, "%s }\n", indent); - } - string_free(&str_ini); - } - - if (module->functions && module->functions->fname) { - zend_function *fptr; - zend_function_entry *func = module->functions; - - string_printf(str, "\n - Functions {\n"); - - /* Is there a better way of doing this? */ - while (func->fname) { - if (zend_hash_find(EG(function_table), func->fname, strlen(func->fname) + 1, (void**) &fptr) == FAILURE) { - zend_error(E_WARNING, "Internal error: Cannot find extension function %s in global function table", func->fname); - continue; - } - - _function_string(str, fptr, " " TSRMLS_CC); - func++; - } - string_printf(str, "%s }\n", indent); - } - - { - string str_classes; - string sub_indent; - int num_classes = 0; - - string_init(&sub_indent); - string_printf(&sub_indent, "%s ", indent); - string_init(&str_classes); - zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) _extension_class_string, 4, &str_classes, sub_indent.string, module, &num_classes TSRMLS_CC); - if (num_classes) { - string_printf(str, "\n - Classes [%d] {\n", num_classes); - string_append(str, &str_classes); - string_printf(str, "%s }\n", indent); - } - string_free(&str_classes); - string_free(&sub_indent); - } - - string_printf(str, "%s}\n", indent); -} -/* }}} */ - -/* {{{ _function_check_flag */ -static void _function_check_flag(INTERNAL_FUNCTION_PARAMETERS, int mask) -{ - reflection_object *intern; - zend_function *mptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_method_ptr, 0); - GET_REFLECTION_OBJECT_PTR(mptr); - RETURN_BOOL(mptr->common.fn_flags & mask); -} -/* }}} */ - -/* {{{ zend_reflection_class_factory */ -ZEND_API void zend_reflection_class_factory(zend_class_entry *ce, zval *object TSRMLS_DC) -{ - reflection_object *intern; - zval *name; - - MAKE_STD_ZVAL(name); - ZVAL_STRINGL(name, ce->name, ce->name_length, 1); - reflection_instanciate(reflection_class_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - intern->ptr = ce; - intern->free_ptr = 0; - intern->ce = ce; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ reflection_extension_factory */ -static void reflection_extension_factory(zval *object, char *name_str TSRMLS_DC) -{ - reflection_object *intern; - zval *name; - int name_len = strlen(name_str); - char *lcname; - struct _zend_module_entry *module; - - lcname = do_alloca(name_len + 1); - zend_str_tolower_copy(lcname, name_str, name_len); - if (zend_hash_find(&module_registry, lcname, name_len + 1, (void **)&module) == FAILURE) { - free_alloca(lcname); - return; - } - free_alloca(lcname); - - reflection_instanciate(reflection_extension_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - MAKE_STD_ZVAL(name); - ZVAL_STRINGL(name, module->name, name_len, 1); - intern->ptr = module; - intern->free_ptr = 0; - intern->ce = NULL; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ reflection_parameter_factory */ -static void reflection_parameter_factory(zend_function *fptr, struct _zend_arg_info *arg_info, zend_uint offset, zend_uint required, zval *object TSRMLS_DC) -{ - reflection_object *intern; - parameter_reference *reference; - zval *name; - - MAKE_STD_ZVAL(name); - if (arg_info->name) { - ZVAL_STRINGL(name, arg_info->name, arg_info->name_len, 1); - } else { - ZVAL_NULL(name); - } - reflection_instanciate(reflection_parameter_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - reference = (parameter_reference*) emalloc(sizeof(parameter_reference)); - reference->arg_info = arg_info; - reference->offset = offset; - reference->required = required; - reference->fptr = fptr; - intern->ptr = reference; - intern->free_ptr = 1; - intern->ce = fptr->common.scope; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ reflection_function_factory */ -static void reflection_function_factory(zend_function *function, zval *object TSRMLS_DC) -{ - reflection_object *intern; - zval *name; - - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, function->common.function_name, 1); - - reflection_instanciate(reflection_function_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - intern->ptr = function; - intern->free_ptr = 0; - intern->ce = NULL; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ reflection_method_factory */ -static void reflection_method_factory(zend_class_entry *ce, zend_function *method, zval *object TSRMLS_DC) -{ - reflection_object *intern; - zval *name; - zval *classname; - - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, method->common.function_name, 1); - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, ce->name, ce->name_length, 1); - reflection_instanciate(reflection_method_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - intern->ptr = method; - intern->free_ptr = 0; - intern->ce = ce; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ reflection_property_factory */ -static void reflection_property_factory(zend_class_entry *ce, zend_property_info *prop, zval *object TSRMLS_DC) -{ - reflection_object *intern; - zval *name; - zval *classname; - property_reference *reference; - char *class_name, *prop_name; - - zend_unmangle_property_name_ex(prop->name, prop->name_length, &class_name, &prop_name); - - if (!(prop->flags & ZEND_ACC_PRIVATE)) { - /* we have to seach the class hierarchy for this (implicit) public or protected property */ - zend_class_entry *tmp_ce = ce->parent; - zend_property_info *tmp_info; - - while (tmp_ce && zend_hash_find(&tmp_ce->properties_info, prop_name, strlen(prop_name) + 1, (void **) &tmp_info) == SUCCESS) { - if (tmp_info->flags & ZEND_ACC_PRIVATE) { - /* private in super class => NOT the same property */ - break; - } - ce = tmp_ce; - prop = tmp_info; - tmp_ce = tmp_ce->parent; - } - } - - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, prop_name, 1); - - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, ce->name, ce->name_length, 1); - - reflection_instanciate(reflection_property_ptr, object TSRMLS_CC); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - reference = (property_reference*) emalloc(sizeof(property_reference)); - reference->ce = ce; - reference->prop = prop; - intern->ptr = reference; - intern->free_ptr = 1; - intern->ce = ce; - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL); -} -/* }}} */ - -/* {{{ _reflection_export */ -static void _reflection_export(INTERNAL_FUNCTION_PARAMETERS, zend_class_entry *ce_ptr, int ctor_argc) -{ - zval *reflector_ptr; - zval output, *output_ptr = &output; - zval *argument_ptr, *argument2_ptr; - zval *retval_ptr, **params[2]; - int result; - int return_output = 0; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - zval fname; - - if (ctor_argc == 1) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &argument_ptr, &return_output) == FAILURE) { - return; - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|b", &argument_ptr, &argument2_ptr, &return_output) == FAILURE) { - return; - } - } - - INIT_PZVAL(&output); - - /* Create object */ - MAKE_STD_ZVAL(reflector_ptr); - if (object_and_properties_init(reflector_ptr, ce_ptr, NULL) == FAILURE) { - _DO_THROW("Could not create reflector"); - } - - /* Call __construct() */ - params[0] = &argument_ptr; - params[1] = &argument2_ptr; - - fci.size = sizeof(fci); - fci.function_table = NULL; - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = &reflector_ptr; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = ctor_argc; - fci.params = params; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = ce_ptr->constructor; - fcc.calling_scope = ce_ptr; - fcc.object_pp = &reflector_ptr; - - result = zend_call_function(&fci, &fcc TSRMLS_CC); - - if (retval_ptr) { - zval_ptr_dtor(&retval_ptr); - } - - if (EG(exception)) { - zval_ptr_dtor(&reflector_ptr); - return; - } - if (result == FAILURE) { - zval_ptr_dtor(&reflector_ptr); - _DO_THROW("Could not create reflector"); - } - - /* Call static reflection::export */ - ZVAL_BOOL(&output, return_output); - params[0] = &reflector_ptr; - params[1] = &output_ptr; - - ZVAL_STRINGL(&fname, "export", sizeof("export") - 1, 0); - fci.function_table = &reflection_ptr->function_table; - fci.function_name = &fname; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = 2; - fci.params = params; - fci.no_separation = 1; - - result = zend_call_function(&fci, NULL TSRMLS_CC); - - if (result == FAILURE && EG(exception) == NULL) { - zval_ptr_dtor(&reflector_ptr); - zval_ptr_dtor(&retval_ptr); - _DO_THROW("Could not execute reflection::export()"); - } - - if (return_output) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } else { - zval_ptr_dtor(&retval_ptr); - } - - /* Destruct reflector which is no longer needed */ - zval_ptr_dtor(&reflector_ptr); -} -/* }}} */ - -/* {{{ Preventing __clone from being called */ -ZEND_METHOD(reflection, __clone) -{ - /* Should never be executable */ - _DO_THROW("Cannot clone object using __clone()"); -} -/* }}} */ - -/* {{{ proto public static mixed Reflection::export(Reflector r [, bool return]) - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection, export) -{ - zval *object, fname, *retval_ptr; - int result; - zend_bool return_output = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|b", &object, reflector_ptr, &return_output) == FAILURE) { - return; - } - - /* Invoke the __toString() method */ - ZVAL_STRINGL(&fname, "__tostring", sizeof("__tostring") - 1, 1); - result= call_user_function_ex(NULL, &object, &fname, &retval_ptr, 0, NULL, 0, NULL TSRMLS_CC); - zval_dtor(&fname); - - if (result == FAILURE) { - _DO_THROW("Invocation of method __toString() failed"); - /* Returns from this function */ - } - - if (!retval_ptr) { - zend_error(E_WARNING, "%s::__toString() did not return anything", Z_OBJCE_P(object)->name); - RETURN_FALSE; - } - - if (return_output) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } else { - /* No need for _r variant, return of __toString should always be a string */ - zend_print_zval(retval_ptr, 0); - zend_printf("\n"); - zval_ptr_dtor(&retval_ptr); - } -} -/* }}} */ - -/* {{{ proto public static array Reflection::getModifierNames(int modifiers) - Returns an array of modifier names */ -ZEND_METHOD(reflection, getModifierNames) -{ - long modifiers; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &modifiers) == FAILURE) { - return; - } - - array_init(return_value); - - if (modifiers & (ZEND_ACC_ABSTRACT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { - add_next_index_stringl(return_value, "abstract", sizeof("abstract")-1, 1); - } - if (modifiers & (ZEND_ACC_FINAL | ZEND_ACC_FINAL_CLASS)) { - add_next_index_stringl(return_value, "final", sizeof("final")-1, 1); - } - - /* These are mutually exclusive */ - switch (modifiers & ZEND_ACC_PPP_MASK) { - case ZEND_ACC_PUBLIC: - add_next_index_stringl(return_value, "public", sizeof("public")-1, 1); - break; - case ZEND_ACC_PRIVATE: - add_next_index_stringl(return_value, "private", sizeof("private")-1, 1); - break; - case ZEND_ACC_PROTECTED: - add_next_index_stringl(return_value, "protected", sizeof("protected")-1, 1); - break; - } - - if (modifiers & ZEND_ACC_STATIC) { - add_next_index_stringl(return_value, "static", sizeof("static")-1, 1); - } -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionFunction::export(string name [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_function, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_function_ptr, 1); -} -/* }}} */ - -/* {{{ proto public ReflectionFunction::__construct(string name) - Constructor. Throws an Exception in case the given function does not exist */ -ZEND_METHOD(reflection_function, __construct) -{ - zval *name; - zval *object; - char *lcname; - reflection_object *intern; - zend_function *fptr; - char *name_str; - int name_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len) == FAILURE) { - return; - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - lcname = do_alloca(name_len + 1); - zend_str_tolower_copy(lcname, name_str, name_len); - if (zend_hash_find(EG(function_table), lcname, name_len + 1, (void **)&fptr) == FAILURE) { - free_alloca(lcname); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Function %s() does not exist", name_str); - return; - } - free_alloca(lcname); - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, fptr->common.function_name, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - intern->ptr = fptr; - intern->free_ptr = 0; - intern->ce = NULL; -} -/* }}} */ - -/* {{{ proto public string ReflectionFunction::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_function, __toString) -{ - reflection_object *intern; - zend_function *fptr; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - string_init(&str); - _function_string(&str, fptr, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public string ReflectionFunction::getName() - Returns this function's name */ -ZEND_METHOD(reflection, function_getName) -{ - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - _default_get_entry(getThis(), "name", sizeof("name"), return_value TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionFunction::isInternal() - Returns whether this is an internal function */ -ZEND_METHOD(reflection, function_isInternal) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - RETURN_BOOL(fptr->type == ZEND_INTERNAL_FUNCTION); -} -/* }}} */ - -/* {{{ proto public bool ReflectionFunction::isUserDefined() - Returns whether this is an user-defined function */ -ZEND_METHOD(reflection_function, isUserDefined) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - RETURN_BOOL(fptr->type == ZEND_USER_FUNCTION); -} -/* }}} */ - -/* {{{ proto public string ReflectionFunction::getFileName() - Returns the filename of the file this function was declared in */ -ZEND_METHOD(reflection_function, getFileName) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - if (fptr->type == ZEND_USER_FUNCTION) { - RETURN_STRING(fptr->op_array.filename, 1); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public int ReflectionFunction::getStartLine() - Returns the line this function's declaration starts at */ -ZEND_METHOD(reflection_function, getStartLine) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - if (fptr->type == ZEND_USER_FUNCTION) { - RETURN_LONG(fptr->op_array.line_start); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public int ReflectionFunction::getEndLine() - Returns the line this function's declaration ends at */ -ZEND_METHOD(reflection_function, getEndLine) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - if (fptr->type == ZEND_USER_FUNCTION) { - RETURN_LONG(fptr->op_array.line_end); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public string ReflectionFunction::getDocComment() - Returns the doc comment for this function */ -ZEND_METHOD(reflection_function, getDocComment) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - if (fptr->type == ZEND_USER_FUNCTION && fptr->op_array.doc_comment) { - RETURN_STRINGL(fptr->op_array.doc_comment, fptr->op_array.doc_comment_len, 1); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public array ReflectionFunction::getStaticVariables() - Returns an associative array containing this function's static variables and their values */ -ZEND_METHOD(reflection_function, getStaticVariables) -{ - zval *tmp_copy; - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_function_ptr, 0); - GET_REFLECTION_OBJECT_PTR(fptr); - - /* Return an empty array in case no static variables exist */ - array_init(return_value); - if (fptr->type == ZEND_USER_FUNCTION && fptr->op_array.static_variables != NULL) { - zend_hash_apply_with_argument(fptr->op_array.static_variables, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC); - zend_hash_copy(Z_ARRVAL_P(return_value), fptr->op_array.static_variables, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *)); - } -} -/* }}} */ - -/* {{{ proto public mixed ReflectionFunction::invoke(mixed* args) - Invokes the function */ -ZEND_METHOD(reflection_function, invoke) -{ - zval *retval_ptr; - zval ***params; - int result; - int argc = ZEND_NUM_ARGS(); - zend_fcall_info fci; - zend_fcall_info_cache fcc; - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); - RETURN_FALSE; - } - - fci.size = sizeof(fci); - fci.function_table = NULL; - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; - fci.params = params; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = fptr; - fcc.calling_scope = EG(scope); - fcc.object_pp = NULL; - - result = zend_call_function(&fci, &fcc TSRMLS_CC); - - efree(params); - - if (result == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Invocation of function %s() failed", fptr->common.function_name); - return; - } - - if (retval_ptr) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } -} -/* }}} */ - -static int _zval_array_to_c_array(zval **arg, zval ****params TSRMLS_DC) /* {{{ */ -{ - *(*params)++ = arg; - return ZEND_HASH_APPLY_KEEP; -} /* }}} */ - -/* {{{ proto public mixed ReflectionFunction::invokeArgs(array args) - Invokes the function and pass its arguments as array. */ -ZEND_METHOD(reflection_function, invokeArgs) -{ - zval *retval_ptr; - zval ***params; - int result; - int argc; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - reflection_object *intern; - zend_function *fptr; - zval *param_array; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", ¶m_array) == FAILURE) { - return; - } - - argc = zend_hash_num_elements(Z_ARRVAL_P(param_array)); - - params = safe_emalloc(sizeof(zval **), argc, 0); - zend_hash_apply_with_argument(Z_ARRVAL_P(param_array), (apply_func_arg_t)_zval_array_to_c_array, ¶ms TSRMLS_CC); - params -= argc; - - fci.size = sizeof(fci); - fci.function_table = NULL; - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; - fci.params = params; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = fptr; - fcc.calling_scope = EG(scope); - fcc.object_pp = NULL; - - result = zend_call_function(&fci, &fcc TSRMLS_CC); - - efree(params); - - if (result == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Invocation of function %s() failed", fptr->common.function_name); - return; - } - - if (retval_ptr) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } -} -/* }}} */ - -/* {{{ proto public bool ReflectionFunction::returnsReference() - Gets whether this function returns a reference */ -ZEND_METHOD(reflection_function, returnsReference) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - RETURN_BOOL(fptr->op_array.return_reference); -} -/* }}} */ - -/* {{{ proto public bool ReflectionFunction::getNumberOfParameters() - Gets the number of required parameters */ -ZEND_METHOD(reflection_function, getNumberOfParameters) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - RETURN_LONG(fptr->common.num_args); -} -/* }}} */ - -/* {{{ proto public bool ReflectionFunction::getNumberOfRequiredParameters() - Gets the number of required parameters */ -ZEND_METHOD(reflection_function, getNumberOfRequiredParameters) -{ - reflection_object *intern; - zend_function *fptr; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - RETURN_LONG(fptr->common.required_num_args); -} -/* }}} */ - -/* {{{ proto public ReflectionParameter[] Reflection_Function::getParameters() - Returns an array of parameter objects for this function */ -ZEND_METHOD(reflection_function, getParameters) -{ - reflection_object *intern; - zend_function *fptr; - zend_uint i; - struct _zend_arg_info *arg_info; - - METHOD_NOTSTATIC(reflection_function_ptr); - GET_REFLECTION_OBJECT_PTR(fptr); - - arg_info= fptr->common.arg_info; - - array_init(return_value); - for (i = 0; i < fptr->common.num_args; i++) { - zval *parameter; - - ALLOC_ZVAL(parameter); - reflection_parameter_factory(fptr, arg_info, i, fptr->common.required_num_args, parameter TSRMLS_CC); - add_next_index_zval(return_value, parameter); - - arg_info++; - } -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionParameter::export(mixed function, mixed parameter [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_parameter, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_parameter_ptr, 2); -} -/* }}} */ - -/* {{{ proto public ReflectionParameter::__construct(mixed function, mixed parameter) - Constructor. Throws an Exception in case the given method does not exist */ -ZEND_METHOD(reflection_parameter, __construct) -{ - parameter_reference *ref; - zval *reference, *parameter; - zval *object; - zval *name; - reflection_object *intern; - zend_function *fptr; - struct _zend_arg_info *arg_info; - int position; - zend_class_entry *ce = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &reference, ¶meter) == FAILURE) { - return; - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - - /* First, find the function */ - switch (Z_TYPE_P(reference)) { - case IS_STRING: { - char *lcname; - - convert_to_string_ex(&reference); - lcname = do_alloca(Z_STRLEN_P(reference) + 1); - zend_str_tolower_copy(lcname, Z_STRVAL_P(reference), Z_STRLEN_P(reference)); - if (zend_hash_find(EG(function_table), lcname, (int) Z_STRLEN_P(reference) + 1, (void**) &fptr) == FAILURE) { - free_alloca(lcname); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Function %s() does not exist", Z_STRVAL_P(reference)); - return; - } - free_alloca(lcname); - } - break; - - case IS_ARRAY: { - zval **classref; - zval **method; - zend_class_entry **pce; - char *lcname; - - if ((zend_hash_index_find(Z_ARRVAL_P(reference), 0, (void **) &classref) == FAILURE) - || (zend_hash_index_find(Z_ARRVAL_P(reference), 1, (void **) &method) == FAILURE)) { - _DO_THROW("Expected array($object, $method) or array($classname, $method)"); - /* returns out of this function */ - } - - if (Z_TYPE_PP(classref) == IS_OBJECT) { - ce = Z_OBJCE_PP(classref); - } else { - convert_to_string_ex(classref); - if (zend_lookup_class(Z_STRVAL_PP(classref), Z_STRLEN_PP(classref), &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not exist", Z_STRVAL_PP(classref)); - return; - } - ce = *pce; - } - - convert_to_string_ex(method); - lcname = do_alloca(Z_STRLEN_PP(method) + 1); - zend_str_tolower_copy(lcname, Z_STRVAL_PP(method), Z_STRLEN_PP(method)); - if (zend_hash_find(&ce->function_table, lcname, (int)(Z_STRLEN_PP(method) + 1), (void **) &fptr) == FAILURE) { - free_alloca(lcname); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Method %s::%s() does not exist", Z_STRVAL_PP(classref), Z_STRVAL_PP(method)); - return; - } - free_alloca(lcname); - } - break; - - default: - _DO_THROW("The parameter class is expected to be either a string or an array(class, method)"); - /* returns out of this function */ - } - - /* Now, search for the parameter */ - arg_info = fptr->common.arg_info; - if (Z_TYPE_P(parameter) == IS_LONG) { - position= Z_LVAL_P(parameter); - if (position < 0 || (zend_uint)position >= fptr->common.num_args) { - _DO_THROW("The parameter specified by its offset could not be found"); - /* returns out of this function */ - } - } else { - zend_uint i; - - position= -1; - convert_to_string_ex(¶meter); - for (i = 0; i < fptr->common.num_args; i++) { - if (arg_info[i].name && strcmp(arg_info[i].name, Z_STRVAL_P(parameter)) == 0) { - position= i; - break; - } - } - if (position == -1) { - _DO_THROW("The parameter specified by its name could not be found"); - /* returns out of this function */ - } - } - - MAKE_STD_ZVAL(name); - if (arg_info[position].name) { - ZVAL_STRINGL(name, arg_info[position].name, arg_info[position].name_len, 1); - } else { - ZVAL_NULL(name); - } - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - - ref = (parameter_reference*) emalloc(sizeof(parameter_reference)); - ref->arg_info = &arg_info[position]; - ref->offset = (zend_uint)position; - ref->required = fptr->common.required_num_args; - ref->fptr = fptr; - intern->ptr = ref; - intern->free_ptr = 1; - intern->ce = ce; -} -/* }}} */ - -/* {{{ proto public string ReflectionParameter::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_parameter, __toString) -{ - reflection_object *intern; - parameter_reference *param; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - string_init(&str); - _parameter_string(&str, param->fptr, param->arg_info, param->offset, param->required, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public string ReflectionParameter::getName() - Returns this parameters's name */ -ZEND_METHOD(reflection_parameter, getName) -{ - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - _default_get_entry(getThis(), "name", sizeof("name"), return_value TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public ReflectionClass ReflectionParameter::getClass() - Returns this parameters's class hint or NULL if there is none */ -ZEND_METHOD(reflection_parameter, getClass) -{ - reflection_object *intern; - parameter_reference *param; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - if (!param->arg_info->class_name) { - RETURN_NULL(); - } else { - zend_class_entry **pce; - - if (zend_lookup_class_ex(param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not exist", param->arg_info->class_name); - return; - } - zend_reflection_class_factory(*pce, return_value TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::isArray() - Returns whether parameter MUST be an array */ -ZEND_METHOD(reflection_parameter, isArray) -{ - reflection_object *intern; - parameter_reference *param; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - RETVAL_BOOL(param->arg_info->array_type_hint); -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::allowsNull() - Returns whether NULL is allowed as this parameters's value */ -ZEND_METHOD(reflection_parameter, allowsNull) -{ - reflection_object *intern; - parameter_reference *param; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - RETVAL_BOOL(param->arg_info->allow_null); -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::isPassedByReference() - Returns whether this parameters is passed to by reference */ -ZEND_METHOD(reflection_parameter, isPassedByReference) -{ - reflection_object *intern; - parameter_reference *param; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - RETVAL_BOOL(param->arg_info->pass_by_reference); -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::isOptional() - Returns whether this parameter is an optional parameter */ -ZEND_METHOD(reflection_parameter, isOptional) -{ - reflection_object *intern; - parameter_reference *param; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - RETVAL_BOOL(param->offset >= param->required); -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::isDefaultValueAvailable() - Returns whether the default value of this parameter is available */ -ZEND_METHOD(reflection_parameter, isDefaultValueAvailable) -{ - reflection_object *intern; - parameter_reference *param; - zend_op *precv; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - if (param->fptr->type != ZEND_USER_FUNCTION) - { - RETURN_FALSE; - } - if (param->offset < param->required) { - RETURN_FALSE; - } - precv = _get_recv_op((zend_op_array*)param->fptr, param->offset); - if (!precv || precv->opcode != ZEND_RECV_INIT || precv->op2.op_type == IS_UNUSED) { - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto public bool ReflectionParameter::getDefaultValue() - Returns the default value of this parameter or throws an exception */ -ZEND_METHOD(reflection_parameter, getDefaultValue) -{ - reflection_object *intern; - parameter_reference *param; - zend_op *precv; - zval *zv, zv_copy; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_parameter_ptr, 0); - GET_REFLECTION_OBJECT_PTR(param); - - if (param->fptr->type != ZEND_USER_FUNCTION) - { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Cannot determine default value for internal functions"); - return; - } - if (param->offset < param->required) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Parameter is not optional"); - return; - } - precv = _get_recv_op((zend_op_array*)param->fptr, param->offset); - if (!precv || precv->opcode != ZEND_RECV_INIT || precv->op2.op_type == IS_UNUSED) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Internal error"); - return; - } - - zv_copy = precv->op2.u.constant; - zv = &zv_copy; - zval_update_constant(&zv, (void*)0 TSRMLS_CC); - RETURN_ZVAL(zv, 1, 1); -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionMethod::export(mixed class, string name [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_method, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_method_ptr, 2); -} -/* }}} */ - -/* {{{ proto public ReflectionMethod::__construct(mixed class, string name) - Constructor. Throws an Exception in case the given method does not exist */ -ZEND_METHOD(reflection_method, __construct) -{ - zval *name, *classname; - zval *object; - reflection_object *intern; - char *lcname; - zend_class_entry **pce; - zend_class_entry *ce; - zend_function *mptr; - char *name_str; - int name_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &classname, &name_str, &name_len) == FAILURE) { - return; - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - - /* Find the class entry */ - switch (Z_TYPE_P(classname)) { - case IS_STRING: - if (zend_lookup_class(Z_STRVAL_P(classname), Z_STRLEN_P(classname), &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not exist", Z_STRVAL_P(classname)); - return; - } - ce = *pce; - break; - - case IS_OBJECT: - ce = Z_OBJCE_P(classname); - break; - - default: - _DO_THROW("The parameter class is expected to be either a string or an object"); - /* returns out of this function */ - } - - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, ce->name, ce->name_length, 1); - zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL); - - lcname = do_alloca(name_len + 1); - zend_str_tolower_copy(lcname, name_str, name_len); - - if (zend_hash_find(&ce->function_table, lcname, name_len + 1, (void **) &mptr) == FAILURE) { - free_alloca(lcname); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Method %s::%s() does not exist", ce->name, name_str); - return; - } - free_alloca(lcname); - - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, mptr->common.function_name, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - intern->ptr = mptr; - intern->free_ptr = 0; - intern->ce = ce; -} -/* }}} */ - -/* {{{ proto public string ReflectionMethod::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_method, __toString) -{ - reflection_object *intern; - zend_function *mptr; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_method_ptr, 0); - GET_REFLECTION_OBJECT_PTR(mptr); - string_init(&str); - _function_string(&str, mptr, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public mixed ReflectionMethod::invoke(mixed object, mixed* args) - Invokes the method. */ -ZEND_METHOD(reflection_method, invoke) -{ - zval *retval_ptr; - zval ***params; - zval **object_pp; - reflection_object *intern; - zend_function *mptr; - int argc = ZEND_NUM_ARGS(); - int result; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - zend_class_entry *obj_ce; - - METHOD_NOTSTATIC(reflection_method_ptr); - - if (argc < 1) { - zend_error(E_WARNING, "Invoke() expects at least one parameter, none given"); - RETURN_FALSE; - } - - GET_REFLECTION_OBJECT_PTR(mptr); - - if (!(mptr->common.fn_flags & ZEND_ACC_PUBLIC) || - (mptr->common.fn_flags & ZEND_ACC_ABSTRACT)) { - if (mptr->common.fn_flags & ZEND_ACC_ABSTRACT) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Trying to invoke abstract method %s::%s()", - mptr->common.scope->name, mptr->common.function_name); - } else { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Trying to invoke %s method %s::%s() from scope %s", - mptr->common.fn_flags & ZEND_ACC_PROTECTED ? "protected" : "private", - mptr->common.scope->name, mptr->common.function_name, - Z_OBJCE_P(getThis())->name); - } - return; - } - - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); - RETURN_FALSE; - } - - /* In case this is a static method, we should'nt pass an object_pp - * (which is used as calling context aka $this). We can thus ignore the - * first parameter. - * - * Else, we verify that the given object is an instance of the class. - */ - if (mptr->common.fn_flags & ZEND_ACC_STATIC) { - object_pp = NULL; - obj_ce = NULL; - } else { - if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) { - efree(params); - _DO_THROW("Non-object passed to Invoke()"); - /* Returns from this function */ - } - obj_ce = Z_OBJCE_PP(params[0]); - - if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) { - efree(params); - _DO_THROW("Given object is not an instance of the class this method was declared in"); - /* Returns from this function */ - } - - object_pp = params[0]; - } - - fci.size = sizeof(fci); - fci.function_table = NULL; - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = object_pp; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc-1; - fci.params = params+1; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = mptr; - fcc.calling_scope = obj_ce; - fcc.object_pp = object_pp; - - result = zend_call_function(&fci, &fcc TSRMLS_CC); - - efree(params); - - if (result == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Invocation of method %s::%s() failed", mptr->common.scope->name, mptr->common.function_name); - return; - } - - if (retval_ptr) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } -} -/* }}} */ - -/* {{{ proto public mixed ReflectionMethod::invokeArgs(mixed object, array args) - Invokes the function and pass its arguments as array. */ -ZEND_METHOD(reflection_method, invokeArgs) -{ - zval *retval_ptr; - zval ***params; - zval *object; - reflection_object *intern; - zend_function *mptr; - int argc; - int result; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - zend_class_entry *obj_ce; - zval *param_array; - - METHOD_NOTSTATIC(reflection_method_ptr); - - GET_REFLECTION_OBJECT_PTR(mptr); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o!a", &object, ¶m_array) == FAILURE) { - return; - } - - if (!(mptr->common.fn_flags & ZEND_ACC_PUBLIC) || - (mptr->common.fn_flags & ZEND_ACC_ABSTRACT)) { - if (mptr->common.fn_flags & ZEND_ACC_ABSTRACT) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Trying to invoke abstract method %s::%s", - mptr->common.scope->name, mptr->common.function_name); - } else { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Trying to invoke %s method %s::%s from scope %s", - mptr->common.fn_flags & ZEND_ACC_PROTECTED ? "protected" : "private", - mptr->common.scope->name, mptr->common.function_name, - Z_OBJCE_P(getThis())->name); - } - return; - } - - argc = zend_hash_num_elements(Z_ARRVAL_P(param_array)); - - params = safe_emalloc(sizeof(zval **), argc, 0); - zend_hash_apply_with_argument(Z_ARRVAL_P(param_array), (apply_func_arg_t)_zval_array_to_c_array, ¶ms TSRMLS_CC); - params -= argc; - - /* In case this is a static method, we should'nt pass an object_pp - * (which is used as calling context aka $this). We can thus ignore the - * first parameter. - * - * Else, we verify that the given object is an instance of the class. - */ - if (mptr->common.fn_flags & ZEND_ACC_STATIC) { - object = NULL; - obj_ce = NULL; - } else { - if (!object) { - efree(params); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Trying to invoke non static method %s::%s without an object", - mptr->common.scope->name, mptr->common.function_name); - return; - } - - obj_ce = Z_OBJCE_P(object); - - if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) { - efree(params); - _DO_THROW("Given object is not an instance of the class this method was declared in"); - /* Returns from this function */ - } - } - - fci.size = sizeof(fci); - fci.function_table = NULL; - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = &object; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; - fci.params = params; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = mptr; - fcc.calling_scope = obj_ce; - fcc.object_pp = &object; - - result = zend_call_function(&fci, &fcc TSRMLS_CC); - - efree(params); - - if (result == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Invocation of method %s::%s() failed", mptr->common.scope->name, mptr->common.function_name); - return; - } - - if (retval_ptr) { - COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); - } -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isFinal() - Returns whether this method is final */ -ZEND_METHOD(reflection_method, isFinal) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_FINAL); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isAbstract() - Returns whether this method is abstract */ -ZEND_METHOD(reflection_method, isAbstract) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_ABSTRACT); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isPublic() - Returns whether this method is public */ -ZEND_METHOD(reflection_method, isPublic) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PUBLIC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isPrivate() - Returns whether this method is private */ -ZEND_METHOD(reflection_method, isPrivate) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PRIVATE); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isProtected() - Returns whether this method is protected */ -ZEND_METHOD(reflection_method, isProtected) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PROTECTED); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isStatic() - Returns whether this method is static */ -ZEND_METHOD(reflection_method, isStatic) -{ - _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_STATIC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isConstructor() - Returns whether this method is the constructor */ -ZEND_METHOD(reflection_method, isConstructor) -{ - reflection_object *intern; - zend_function *mptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_method_ptr, 0); - GET_REFLECTION_OBJECT_PTR(mptr); - /* we need to check if the ctor is the ctor of the class level we we - * looking at since we might be looking at an inherited old style ctor - * defined in base class. */ - RETURN_BOOL(mptr->common.fn_flags & ZEND_ACC_CTOR && intern->ce->constructor && intern->ce->constructor->common.scope == mptr->common.scope); -} -/* }}} */ - -/* {{{ proto public bool ReflectionMethod::isDestructor() - Returns whether this method is static */ -ZEND_METHOD(reflection_method, isDestructor) -{ - reflection_object *intern; - zend_function *mptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_method_ptr, 0); - GET_REFLECTION_OBJECT_PTR(mptr); - RETURN_BOOL(mptr->common.fn_flags & ZEND_ACC_DTOR); -} -/* }}} */ - -/* {{{ proto public int ReflectionMethod::getModifiers() - Returns a bitfield of the access modifiers for this method */ -ZEND_METHOD(reflection_method, getModifiers) -{ - reflection_object *intern; - zend_function *mptr; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_method_ptr, 0); - GET_REFLECTION_OBJECT_PTR(mptr); - - RETURN_LONG(mptr->common.fn_flags); -} -/* }}} */ - -/* {{{ proto public ReflectionClass ReflectionMethod::getDeclaringClass() - Get the declaring class */ -ZEND_METHOD(reflection_method, getDeclaringClass) -{ - reflection_object *intern; - zend_function *mptr; - - METHOD_NOTSTATIC(reflection_method_ptr); - GET_REFLECTION_OBJECT_PTR(mptr); - - zend_reflection_class_factory(mptr->common.scope, return_value TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionClass::export(mixed argument [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_class, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_class_ptr, 1); -} -/* }}} */ - -/* {{{ reflection_class_object_ctor */ -static void reflection_class_object_ctor(INTERNAL_FUNCTION_PARAMETERS, int is_object) -{ - zval *argument; - zval *object; - zval *classname; - reflection_object *intern; - zend_class_entry **ce; - - if (is_object) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &argument) == FAILURE) { - return; - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &argument) == FAILURE) { - return; - } - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - - if (Z_TYPE_P(argument) == IS_OBJECT) { - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, Z_OBJCE_P(argument)->name, Z_OBJCE_P(argument)->name_length, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &classname, sizeof(zval *), NULL); - intern->ptr = Z_OBJCE_P(argument); - if (is_object) { - intern->obj = argument; - zval_add_ref(&argument); - } - } else { - convert_to_string_ex(&argument); - if (zend_lookup_class(Z_STRVAL_P(argument), Z_STRLEN_P(argument), &ce TSRMLS_CC) == FAILURE) { - if (!EG(exception)) { - zend_throw_exception_ex(reflection_exception_ptr, -1 TSRMLS_CC, "Class %s does not exist", Z_STRVAL_P(argument)); - } - return; - } - - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, (*ce)->name, (*ce)->name_length, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &classname, sizeof(zval *), NULL); - - intern->ptr = *ce; - } - intern->free_ptr = 0; -} -/* }}} */ - -/* {{{ proto public ReflectionClass::__construct(mixed argument) throws ReflectionException - Constructor. Takes a string or an instance as an argument */ -ZEND_METHOD(reflection_class, __construct) -{ - reflection_class_object_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto public array ReflectionClass::getStaticProperties() - Returns an associative array containing all static property values of the class */ -ZEND_METHOD(reflection_class, getStaticProperties) -{ - zval *tmp_copy; - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - - zend_update_class_constants(ce TSRMLS_CC); - - array_init(return_value); - zend_hash_copy(Z_ARRVAL_P(return_value), ce->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *)); -} -/* }}} */ - -/* {{{ proto public mixed ReflectionClass::getStaticPropertyValue(string name [, mixed default]) - Returns the value of a tsstic property */ -ZEND_METHOD(reflection_class, getStaticPropertyValue) -{ - reflection_object *intern; - zend_class_entry *ce; - char *name; - int name_len; - zval **prop, *def_value = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &name, &name_len, &def_value) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - - zend_update_class_constants(ce TSRMLS_CC); - prop = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC); - if (!prop) { - if (def_value) { - RETURN_ZVAL(def_value, 1, 0); - } else { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not have a property named %s", ce->name, name); - } - return; - } else { - RETURN_ZVAL(*prop, 1, 0); - } -} -/* }}} */ - -/* {{{ proto public void ReflectionClass::setStaticPropertyValue($name, $value) - Sets the value of a static property */ -ZEND_METHOD(reflection_class, setStaticPropertyValue) -{ - reflection_object *intern; - zend_class_entry *ce; - char *name; - int name_len; - zval **variable_ptr, *value; - int refcount; - zend_uchar is_ref; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &name, &name_len, &value) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - - zend_update_class_constants(ce TSRMLS_CC); - variable_ptr = zend_std_get_static_property(ce, name, name_len, 1 TSRMLS_CC); - if (!variable_ptr) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not have a property named %s", ce->name, name); - return; - } - refcount = (*variable_ptr)->refcount; - is_ref = (*variable_ptr)->is_ref; - zval_dtor(*variable_ptr); - **variable_ptr = *value; - zval_copy_ctor(*variable_ptr); - (*variable_ptr)->refcount = refcount; - (*variable_ptr)->is_ref = is_ref; - -} -/* }}} */ - -/* {{{ proto public array ReflectionClass::getDefaultProperties() - Returns an associative array containing copies of all default property values of the class */ -ZEND_METHOD(reflection_class, getDefaultProperties) -{ - reflection_object *intern; - zend_class_entry *ce; - int count; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - array_init(return_value); - - zend_update_class_constants(ce TSRMLS_CC); - - count = zend_hash_num_elements(&ce->default_properties); - if (count > 0) { - HashPosition pos; - zval **prop; - - zend_hash_internal_pointer_reset_ex(&ce->default_properties, &pos); - while (zend_hash_get_current_data_ex(&ce->default_properties, (void **) &prop, &pos) == SUCCESS) { - char *key, *class_name, *prop_name; - uint key_len; - ulong num_index; - zval *prop_copy; - - zend_hash_get_current_key_ex(&ce->default_properties, &key, &key_len, &num_index, 0, &pos); - zend_hash_move_forward_ex(&ce->default_properties, &pos); - zend_unmangle_property_name_ex(key, key_len, &class_name, &prop_name); - if (class_name && class_name[0] != '*' && strcmp(class_name, ce->name)) { - /* filter privates from base classes */ - continue; - } - - /* copy: enforce read only access */ - ALLOC_ZVAL(prop_copy); - *prop_copy = **prop; - zval_copy_ctor(prop_copy); - INIT_PZVAL(prop_copy); - - add_assoc_zval(return_value, prop_name, prop_copy); - } - } -} -/* }}} */ - -/* {{{ proto public string ReflectionClass::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_class, __toString) -{ - reflection_object *intern; - zend_class_entry *ce; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - string_init(&str); - _class_string(&str, ce, intern->obj, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public string ReflectionClass::getName() - Returns the class' name */ -ZEND_METHOD(reflection_class, getName) -{ - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - _default_get_entry(getThis(), "name", sizeof("name"), return_value TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isInternal() - Returns whether this class is an internal class */ -ZEND_METHOD(reflection_class, isInternal) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - RETURN_BOOL(ce->type == ZEND_INTERNAL_CLASS); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isUserDefined() - Returns whether this class is user-defined */ -ZEND_METHOD(reflection_class, isUserDefined) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - RETURN_BOOL(ce->type == ZEND_USER_CLASS); -} -/* }}} */ - -/* {{{ proto public string ReflectionClass::getFileName() - Returns the filename of the file this class was declared in */ -ZEND_METHOD(reflection_class, getFileName) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - if (ce->type == ZEND_USER_CLASS) { - RETURN_STRING(ce->filename, 1); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public int ReflectionClass::getStartLine() - Returns the line this class' declaration starts at */ -ZEND_METHOD(reflection_class, getStartLine) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - if (ce->type == ZEND_USER_FUNCTION) { - RETURN_LONG(ce->line_start); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public int ReflectionClass::getEndLine() - Returns the line this class' declaration ends at */ -ZEND_METHOD(reflection_class, getEndLine) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - if (ce->type == ZEND_USER_CLASS) { - RETURN_LONG(ce->line_end); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public string ReflectionClass::getDocComment() - Returns the doc comment for this class */ -ZEND_METHOD(reflection_class, getDocComment) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - if (ce->type == ZEND_USER_CLASS && ce->doc_comment) { - RETURN_STRINGL(ce->doc_comment, ce->doc_comment_len, 1); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto public ReflectionMethod ReflectionClass::getConstructor() - Returns the class' constructor if there is one, NULL otherwise */ -ZEND_METHOD(reflection_class, getConstructor) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - - if (ce->constructor) { - reflection_method_factory(ce, ce->constructor, return_value TSRMLS_CC); - } else { - RETURN_NULL(); - } -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::hasMethod(string name) - Returns wether a method exists or not */ -ZEND_METHOD(reflection_class, hasMethod) -{ - reflection_object *intern; - zend_class_entry *ce; - char *name, *lc_name; - int name_len; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - lc_name = zend_str_tolower_dup(name, name_len); - if (zend_hash_exists(&ce->function_table, lc_name, name_len + 1)) { - efree(lc_name); - RETURN_TRUE; - } else { - efree(lc_name); - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto public ReflectionMethod ReflectionClass::getMethod(string name) throws ReflectionException - Returns the class' method specified by its name */ -ZEND_METHOD(reflection_class, getMethod) -{ - reflection_object *intern; - zend_class_entry *ce; - zend_function *mptr; - char *name, *lc_name; - int name_len; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - lc_name = zend_str_tolower_dup(name, name_len); - if (zend_hash_find(&ce->function_table, lc_name, name_len + 1, (void**) &mptr) == SUCCESS) { - reflection_method_factory(ce, mptr, return_value TSRMLS_CC); - efree(lc_name); - } else { - efree(lc_name); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Method %s does not exist", name); - return; - } -} -/* }}} */ - -/* {{{ _addmethod */ -static int _addmethod(zend_function *mptr, int num_args, va_list args, zend_hash_key *hash_key TSRMLS_DC) -{ - zval *method; - zend_class_entry *ce = *va_arg(args, zend_class_entry**); - zval *retval = va_arg(args, zval*); - long filter = va_arg(args, long); - - if (mptr->common.fn_flags & filter) { - TSRMLS_FETCH(); - ALLOC_ZVAL(method); - reflection_method_factory(ce, mptr, method TSRMLS_CC); - add_next_index_zval(retval, method); - } - return 0; -} -/* }}} */ - -/* {{{ proto public ReflectionMethod[] ReflectionClass::getMethods() - Returns an array of this class' methods */ -ZEND_METHOD(reflection_class, getMethods) -{ - reflection_object *intern; - zend_class_entry *ce; - long filter = 0; - int argc = ZEND_NUM_ARGS(); - - METHOD_NOTSTATIC(reflection_class_ptr); - if (argc) { - if (zend_parse_parameters(argc TSRMLS_CC, "|l", &filter) == FAILURE) { - return; - } - } else { - /* No parameters given, default to "return all" */ - filter = ZEND_ACC_PPP_MASK | ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL | ZEND_ACC_STATIC; - } - - GET_REFLECTION_OBJECT_PTR(ce); - - array_init(return_value); - zend_hash_apply_with_arguments(&ce->function_table, (apply_func_args_t) _addmethod, 3, &ce, return_value, filter); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::hasProperty(string name) - Returns wether a property exists or not */ -ZEND_METHOD(reflection_class, hasProperty) -{ - reflection_object *intern; - zend_class_entry *ce; - char *name; - int name_len; - zval *property; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - if (zend_hash_exists(&ce->properties_info, name, name_len + 1)) { - RETURN_TRUE; - } else { - if (intern->obj && Z_OBJ_HANDLER_P(intern->obj, has_property)) - { - MAKE_STD_ZVAL(property); - ZVAL_STRINGL(property, name, name_len, 1); - if (Z_OBJ_HANDLER_P(intern->obj, has_property)(intern->obj, property, 2 TSRMLS_CC)) { - zval_ptr_dtor(&property); - RETURN_TRUE; - } - zval_ptr_dtor(&property); - } - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto public ReflectionProperty ReflectionClass::getProperty(string name) throws ReflectionException - Returns the class' property specified by its name */ -ZEND_METHOD(reflection_class, getProperty) -{ - reflection_object *intern; - zend_class_entry *ce; - zend_property_info *property_info; - char *name; - int name_len; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - if (zend_hash_find(&ce->properties_info, name, name_len + 1, (void**) &property_info) == SUCCESS && (property_info->flags & ZEND_ACC_SHADOW) == 0) { - reflection_property_factory(ce, property_info, return_value TSRMLS_CC); - } else { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Property %s does not exist", name); - return; - } -} -/* }}} */ - -/* {{{ _addproperty */ -static int _addproperty(zend_property_info *pptr, int num_args, va_list args, zend_hash_key *hash_key TSRMLS_DC) -{ - zval *property; - zend_class_entry *ce = *va_arg(args, zend_class_entry**); - zval *retval = va_arg(args, zval*); - long filter = va_arg(args, long); - - if (pptr->flags & ZEND_ACC_SHADOW) { - return 0; - } - - if (pptr->flags & filter) { - TSRMLS_FETCH(); - ALLOC_ZVAL(property); - reflection_property_factory(ce, pptr, property TSRMLS_CC); - add_next_index_zval(retval, property); - } - return 0; -} -/* }}} */ - -/* {{{ proto public ReflectionProperty[] ReflectionClass::getProperties() - Returns an array of this class' properties */ -ZEND_METHOD(reflection_class, getProperties) -{ - reflection_object *intern; - zend_class_entry *ce; - long filter = 0; - int argc = ZEND_NUM_ARGS(); - - METHOD_NOTSTATIC(reflection_class_ptr); - if (argc) { - if (zend_parse_parameters(argc TSRMLS_CC, "|l", &filter) == FAILURE) { - return; - } - } else { - /* No parameters given, default to "return all" */ - filter = ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC; - } - - GET_REFLECTION_OBJECT_PTR(ce); - - array_init(return_value); - zend_hash_apply_with_arguments(&ce->properties_info, (apply_func_args_t) _addproperty, 3, &ce, return_value, filter); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::hasConstant(string name) - Returns wether a constant exists or not */ -ZEND_METHOD(reflection_class, hasConstant) -{ - reflection_object *intern; - zend_class_entry *ce; - char *name; - int name_len; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - if (zend_hash_exists(&ce->constants_table, name, name_len + 1)) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto public array ReflectionClass::getConstants() - Returns an associative array containing this class' constants and their values */ -ZEND_METHOD(reflection_class, getConstants) -{ - zval *tmp_copy; - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - array_init(return_value); - zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC); - zend_hash_copy(Z_ARRVAL_P(return_value), &ce->constants_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *)); -} -/* }}} */ - -/* {{{ proto public mixed ReflectionClass::getConstant(string name) - Returns the class' constant specified by its name */ -ZEND_METHOD(reflection_class, getConstant) -{ - reflection_object *intern; - zend_class_entry *ce; - zval **value; - char *name; - int name_len; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { - return; - } - - GET_REFLECTION_OBJECT_PTR(ce); - zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC); - if (zend_hash_find(&ce->constants_table, name, name_len + 1, (void **) &value) == FAILURE) { - RETURN_FALSE; - } - *return_value = **value; - zval_copy_ctor(return_value); -} -/* }}} */ - -/* {{{ _class_check_flag */ -static void _class_check_flag(INTERNAL_FUNCTION_PARAMETERS, int mask) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - RETVAL_BOOL(ce->ce_flags & mask); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isInstantiable() - Returns whether this class is instantiable */ -ZEND_METHOD(reflection_class, isInstantiable) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { - RETURN_FALSE; - } - - /* Basically, the class is instantiable. Though, if there is a constructor - * and it is not publicly accessible, it isn't! */ - if (!ce->constructor) { - RETURN_TRUE; - } - - RETURN_BOOL(ce->constructor->common.fn_flags & ZEND_ACC_PUBLIC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isInterface() - Returns whether this is an interface or a class */ -ZEND_METHOD(reflection_class, isInterface) -{ - _class_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_INTERFACE); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isFinal() - Returns whether this class is final */ -ZEND_METHOD(reflection_class, isFinal) -{ - _class_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_FINAL_CLASS); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isAbstract() - Returns whether this class is abstract */ -ZEND_METHOD(reflection_class, isAbstract) -{ - _class_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS); -} -/* }}} */ - -/* {{{ proto public int ReflectionClass::getModifiers() - Returns a bitfield of the access modifiers for this class */ -ZEND_METHOD(reflection_class, getModifiers) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - - RETURN_LONG(ce->ce_flags); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isInstance(stdclass object) - Returns whether the given object is an instance of this class */ -ZEND_METHOD(reflection_class, isInstance) -{ - reflection_object *intern; - zend_class_entry *ce; - zval *object; - - METHOD_NOTSTATIC(reflection_class_ptr); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &object) == FAILURE) { - return; - } - GET_REFLECTION_OBJECT_PTR(ce); - RETURN_BOOL(ce == Z_OBJCE_P(object)); -} -/* }}} */ - -/* {{{ proto public stdclass ReflectionClass::newInstance(mixed* args, ...) - Returns an instance of this class */ -ZEND_METHOD(reflection_class, newInstance) -{ - zval *retval_ptr; - reflection_object *intern; - zend_class_entry *ce; - int argc = ZEND_NUM_ARGS(); - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - object_init_ex(return_value, ce); - - /* Run the constructor if there is one */ - if (ce->constructor) { - zval ***params; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - - if (!(ce->constructor->common.fn_flags & ZEND_ACC_PUBLIC)) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Access to non-public constructor of class %s", ce->name); - return; - } - - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); - RETURN_FALSE; - } - - fci.size = sizeof(fci); - fci.function_table = EG(function_table); - fci.function_name = NULL; - fci.symbol_table = NULL; - fci.object_pp = &return_value; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; - fci.params = params; - fci.no_separation = 1; - - fcc.initialized = 1; - fcc.function_handler = ce->constructor; - fcc.calling_scope = EG(scope); - fcc.object_pp = &return_value; - - if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) { - efree(params); - zval_ptr_dtor(&retval_ptr); - zend_error(E_WARNING, "Invocation of %s's constructor failed", ce->name); - RETURN_NULL(); - } - if (retval_ptr) { - zval_ptr_dtor(&retval_ptr); - } - efree(params); - } -} -/* }}} */ - -/* {{{ proto public ReflectionClass[] ReflectionClass::getInterfaces() - Returns an array of interfaces this class implements */ -ZEND_METHOD(reflection_class, getInterfaces) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - - /* Return an empty array if this class implements no interfaces */ - array_init(return_value); - - if (ce->num_interfaces) { - zend_uint i; - - for (i=0; i < ce->num_interfaces; i++) { - zval *interface; - ALLOC_ZVAL(interface); - zend_reflection_class_factory(ce->interfaces[i], interface TSRMLS_CC); - add_next_index_zval(return_value, interface); - } - } -} -/* }}} */ - -/* {{{ proto public ReflectionClass ReflectionClass::getParentClass() - Returns the class' parent class, or, if none exists, FALSE */ -ZEND_METHOD(reflection_class, getParentClass) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ce); - - if (ce->parent) { - zend_reflection_class_factory(ce->parent, return_value TSRMLS_CC); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isSubclassOf(string|ReflectionClass class) - Returns whether this class is a subclass of another class */ -ZEND_METHOD(reflection_class, isSubclassOf) -{ - reflection_object *intern, *argument; - zend_class_entry *ce, **pce, *class_ce; - zval *class_name; - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &class_name) == FAILURE) { - return; - } - - switch(class_name->type) { - case IS_STRING: - if (zend_lookup_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Interface %s does not exist", Z_STRVAL_P(class_name)); - return; - } - class_ce = *pce; - break; - case IS_OBJECT: - if (instanceof_function(Z_OBJCE_P(class_name), reflection_class_ptr TSRMLS_CC)) { - argument = (reflection_object *) zend_object_store_get_object(class_name TSRMLS_CC); - if (argument == NULL || argument->ptr == NULL) { - zend_error(E_ERROR, "Internal error: Failed to retrieve the argument's reflection object"); - /* Bails out */ - } - class_ce = argument->ptr; - break; - } - /* no break */ - default: - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Parameter one must either be a string or a ReflectionClass object"); - return; - } - - - RETURN_BOOL(instanceof_function(ce, class_ce TSRMLS_CC)); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::implementsInterface(string|ReflectionClass interface_name) - Returns whether this class is a subclass of another class */ -ZEND_METHOD(reflection_class, implementsInterface) -{ - reflection_object *intern, *argument; - zend_class_entry *ce, *interface_ce, **pce; - zval *interface; - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &interface) == FAILURE) { - return; - } - - switch(interface->type) { - case IS_STRING: - if (zend_lookup_class(Z_STRVAL_P(interface), Z_STRLEN_P(interface), &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Interface %s does not exist", Z_STRVAL_P(interface)); - return; - } - interface_ce = *pce; - break; - case IS_OBJECT: - if (instanceof_function(Z_OBJCE_P(interface), reflection_class_ptr TSRMLS_CC)) { - argument = (reflection_object *) zend_object_store_get_object(interface TSRMLS_CC); - if (argument == NULL || argument->ptr == NULL) { - zend_error(E_ERROR, "Internal error: Failed to retrieve the argument's reflection object"); - /* Bails out */ - } - interface_ce = argument->ptr; - break; - } - /* no break */ - default: - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Parameter one must either be a string or a ReflectionClass object"); - return; - } - - if (!(interface_ce->ce_flags & ZEND_ACC_INTERFACE)) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Interface %s is a Class", interface_ce->name); - return; - } - RETURN_BOOL(instanceof_function(ce, interface_ce TSRMLS_CC)); -} -/* }}} */ - -/* {{{ proto public bool ReflectionClass::isIterateable() - Returns whether this class is iterateable (can be used inside foreach) */ -ZEND_METHOD(reflection_class, isIterateable) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - RETURN_BOOL(ce->get_iterator != NULL); -} -/* }}} */ - -/* {{{ proto public ReflectionExtension|NULL ReflectionClass::getExtension() - Returns NULL or the extension the class belongs to */ -ZEND_METHOD(reflection_class, getExtension) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - if (ce->module) { - reflection_extension_factory(return_value, ce->module->name TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ proto public string|false ReflectionClass::getExtensionName() - Returns false or the name of the extension the class belongs to */ -ZEND_METHOD(reflection_class, getExtensionName) -{ - reflection_object *intern; - zend_class_entry *ce; - - METHOD_NOTSTATIC(reflection_class_ptr); - GET_REFLECTION_OBJECT_PTR(ce); - - if (ce->module) { - RETURN_STRING(ce->module->name, 1); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionObject::export(mixed argument [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_object, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_object_ptr, 1); -} -/* }}} */ - -/* {{{ proto public ReflectionObject::__construct(mixed argument) throws ReflectionException - Constructor. Takes an instance as an argument */ -ZEND_METHOD(reflection_object, __construct) -{ - reflection_class_object_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto public static mixed ReflectionProperty::export(mixed class, string name [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_property, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_property_ptr, 2); -} -/* }}} */ - -/* {{{ proto public ReflectionProperty::__construct(mixed class, string name) - Constructor. Throws an Exception in case the given property does not exist */ -ZEND_METHOD(reflection_property, __construct) -{ - zval *propname, *classname; - char *name_str, *class_name, *prop_name; - int name_len; - zval *object; - reflection_object *intern; - zend_class_entry **pce; - zend_class_entry *ce; - zend_property_info *property_info; - property_reference *reference; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &classname, &name_str, &name_len) == FAILURE) { - return; - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - - /* Find the class entry */ - switch (Z_TYPE_P(classname)) { - case IS_STRING: - if (zend_lookup_class(Z_STRVAL_P(classname), Z_STRLEN_P(classname), &pce TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Class %s does not exist", Z_STRVAL_P(classname)); - return; - } - ce = *pce; - break; - - case IS_OBJECT: - ce = Z_OBJCE_P(classname); - break; - - default: - _DO_THROW("The parameter class is expected to be either a string or an object"); - /* returns out of this function */ - } - - if (zend_hash_find(&ce->properties_info, name_str, name_len + 1, (void **) &property_info) == FAILURE || (property_info->flags & ZEND_ACC_SHADOW)) { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Property %s::$%s does not exist", ce->name, name_str); - return; - } - - if (!(property_info->flags & ZEND_ACC_PRIVATE)) { - /* we have to seach the class hierarchy for this (implicit) public or protected property */ - zend_class_entry *tmp_ce = ce->parent; - zend_property_info *tmp_info; - - while (tmp_ce && zend_hash_find(&tmp_ce->properties_info, name_str, name_len + 1, (void **) &tmp_info) == SUCCESS) { - if (tmp_info->flags & ZEND_ACC_PRIVATE) { - /* private in super class => NOT the same property */ - break; - } - ce = tmp_ce; - property_info = tmp_info; - tmp_ce = tmp_ce->parent; - } - } - - MAKE_STD_ZVAL(classname); - ZVAL_STRINGL(classname, ce->name, ce->name_length, 1); - zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL); - - zend_unmangle_property_name_ex(property_info->name, property_info->name_length, &class_name, &prop_name); - MAKE_STD_ZVAL(propname); - ZVAL_STRING(propname, prop_name, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &propname, sizeof(zval *), NULL); - - reference = (property_reference*) emalloc(sizeof(property_reference)); - reference->ce = ce; - reference->prop = property_info; - intern->ptr = reference; - intern->free_ptr = 1; - intern->ce = ce; -} -/* }}} */ - -/* {{{ proto public string ReflectionProperty::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_property, __toString) -{ - reflection_object *intern; - property_reference *ref; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ref); - string_init(&str); - _property_string(&str, ref->prop, NULL, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public string ReflectionProperty::getName() - Returns the class' name */ -ZEND_METHOD(reflection_property, getName) -{ - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - _default_get_entry(getThis(), "name", sizeof("name"), return_value TSRMLS_CC); -} -/* }}} */ - -static void _property_check_flag(INTERNAL_FUNCTION_PARAMETERS, int mask) -{ - reflection_object *intern; - property_reference *ref; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ref); - RETURN_BOOL(ref->prop->flags & mask); -} - -/* {{{ proto public bool ReflectionProperty::isPublic() - Returns whether this property is public */ -ZEND_METHOD(reflection_property, isPublic) -{ - _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PUBLIC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionProperty::isPrivate() - Returns whether this property is private */ -ZEND_METHOD(reflection_property, isPrivate) -{ - _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PRIVATE); -} -/* }}} */ - -/* {{{ proto public bool ReflectionProperty::isProtected() - Returns whether this property is protected */ -ZEND_METHOD(reflection_property, isProtected) -{ - _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PROTECTED); -} -/* }}} */ - -/* {{{ proto public bool ReflectionProperty::isStatic() - Returns whether this property is static */ -ZEND_METHOD(reflection_property, isStatic) -{ - _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_STATIC); -} -/* }}} */ - -/* {{{ proto public bool ReflectionProperty::isDefault() - Returns whether this property is default (declared at compilation time). */ -ZEND_METHOD(reflection_property, isDefault) -{ - _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ~ZEND_ACC_IMPLICIT_PUBLIC); -} -/* }}} */ - -/* {{{ proto public int ReflectionProperty::getModifiers() - Returns a bitfield of the access modifiers for this property */ -ZEND_METHOD(reflection_property, getModifiers) -{ - reflection_object *intern; - property_reference *ref; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ref); - - RETURN_LONG(ref->prop->flags); -} -/* }}} */ - -/* {{{ proto public mixed ReflectionProperty::getValue([stdclass object]) - Returns this property's value */ -ZEND_METHOD(reflection_property, getValue) -{ - reflection_object *intern; - property_reference *ref; - zval *object; - zval **member= NULL; - - METHOD_NOTSTATIC(reflection_property_ptr); - GET_REFLECTION_OBJECT_PTR(ref); - - if (!(ref->prop->flags & ZEND_ACC_PUBLIC)) { - _DO_THROW("Cannot access non-public member"); - /* Returns from this function */ - } - - if ((ref->prop->flags & ZEND_ACC_STATIC)) { - zend_update_class_constants(intern->ce TSRMLS_CC); - if (zend_hash_quick_find(intern->ce->static_members, ref->prop->name, ref->prop->name_length + 1, ref->prop->h, (void **) &member) == FAILURE) { - zend_error(E_ERROR, "Internal error: Could not find the property %s", ref->prop->name); - /* Bails out */ - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &object) == FAILURE) { - return; - } - if (zend_hash_quick_find(Z_OBJPROP_P(object), ref->prop->name, ref->prop->name_length + 1, ref->prop->h, (void **) &member) == FAILURE) { - zend_error(E_ERROR, "Internal error: Could not find the property %s", ref->prop->name); - /* Bails out */ - } - } - - *return_value= **member; - zval_copy_ctor(return_value); - INIT_PZVAL(return_value); -} -/* }}} */ - -/* {{{ proto public void ReflectionProperty::setValue([stdclass object,] mixed value) - Sets this property's value */ -ZEND_METHOD(reflection_property, setValue) -{ - reflection_object *intern; - property_reference *ref; - zval **variable_ptr; - zval *object; - zval *value; - int setter_done = 0; - zval *tmp; - HashTable *prop_table; - - METHOD_NOTSTATIC(reflection_property_ptr); - GET_REFLECTION_OBJECT_PTR(ref); - - if (ref->prop->flags & ~(ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)) { - _DO_THROW("Cannot access non-public member"); - /* Returns from this function */ - } - - if ((ref->prop->flags & ZEND_ACC_STATIC)) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &tmp, &value) == FAILURE) { - return; - } - } - zend_update_class_constants(intern->ce TSRMLS_CC); - prop_table = intern->ce->static_members; - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oz", &object, &value) == FAILURE) { - return; - } - prop_table = Z_OBJPROP_P(object); - } - - if (zend_hash_quick_find(prop_table, ref->prop->name, ref->prop->name_length + 1, ref->prop->h, (void **) &variable_ptr) == FAILURE) { - zend_error(E_ERROR, "Internal error: Could not find the property %s", ref->prop->name); - /* Bails out */ - } - if (*variable_ptr == value) { - setter_done = 1; - } else { - if (PZVAL_IS_REF(*variable_ptr)) { - zval_dtor(*variable_ptr); - (*variable_ptr)->type = value->type; - (*variable_ptr)->value = value->value; - if (value->refcount > 0) { - zval_copy_ctor(*variable_ptr); - } - setter_done = 1; - } - } - if (!setter_done) { - zval **foo; - - value->refcount++; - if (PZVAL_IS_REF(value)) { - SEPARATE_ZVAL(&value); - } - zend_hash_quick_update(prop_table, ref->prop->name, ref->prop->name_length+1, ref->prop->h, &value, sizeof(zval *), (void **) &foo); - } -} -/* }}} */ - -/* {{{ proto public ReflectionClass ReflectionProperty::getDeclaringClass() - Get the declaring class */ -ZEND_METHOD(reflection_property, getDeclaringClass) -{ - reflection_object *intern; - property_reference *ref; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ref); - - zend_reflection_class_factory(ref->ce, return_value TSRMLS_CC); -} - -/* {{{ proto public string ReflectionProperty::getDocComment() - Returns the doc comment for this property */ -ZEND_METHOD(reflection_property, getDocComment) -{ - reflection_object *intern; - property_reference *ref; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_property_ptr, 0); - GET_REFLECTION_OBJECT_PTR(ref); - if (ref->prop->doc_comment) { - RETURN_STRINGL(ref->prop->doc_comment, ref->prop->doc_comment_len, 1); - } - RETURN_FALSE; -} -/* }}} */ -/* {{{ proto public static mixed ReflectionExtension::export(string name [, bool return]) throws ReflectionException - Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */ -ZEND_METHOD(reflection_extension, export) -{ - _reflection_export(INTERNAL_FUNCTION_PARAM_PASSTHRU, reflection_extension_ptr, 1); -} -/* }}} */ - -/* {{{ proto public ReflectionExtension::__construct(string name) - Constructor. Throws an Exception in case the given extension does not exist */ -ZEND_METHOD(reflection_extension, __construct) -{ - zval *name; - zval *object; - char *lcname; - reflection_object *intern; - zend_module_entry *module; - char *name_str; - int name_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len) == FAILURE) { - return; - } - - object = getThis(); - intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); - if (intern == NULL) { - return; - } - lcname = do_alloca(name_len + 1); - zend_str_tolower_copy(lcname, name_str, name_len); - if (zend_hash_find(&module_registry, lcname, name_len + 1, (void **)&module) == FAILURE) { - free_alloca(lcname); - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Extension %s does not exist", name_str); - return; - } - free_alloca(lcname); - MAKE_STD_ZVAL(name); - ZVAL_STRING(name, module->name, 1); - zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); - intern->ptr = module; - intern->free_ptr = 0; - intern->ce = NULL; -} -/* }}} */ - -/* {{{ proto public string ReflectionExtension::__toString() - Returns a string representation */ -ZEND_METHOD(reflection_extension, __toString) -{ - reflection_object *intern; - zend_module_entry *module; - string str; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - string_init(&str); - _extension_string(&str, module, "" TSRMLS_CC); - RETURN_STRINGL(str.string, str.len - 1, 0); -} -/* }}} */ - -/* {{{ proto public string ReflectionExtension::getName() - Returns this extension's name */ -ZEND_METHOD(reflection_extension, getName) -{ - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - _default_get_entry(getThis(), "name", sizeof("name"), return_value TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public string ReflectionExtension::getVersion() - Returns this extension's version */ -ZEND_METHOD(reflection_extension, getVersion) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - /* An extension does not necessarily have a version number */ - if (module->version == NO_VERSION_YET) { - RETURN_NULL(); - } else { - RETURN_STRING(module->version, 1); - } -} -/* }}} */ - -/* {{{ proto public ReflectionFunction[] ReflectionExtension::getFunctions() - Returns an array of this extension's fuctions */ -ZEND_METHOD(reflection_extension, getFunctions) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - array_init(return_value); - if (module->functions) { - zval *function; - zend_function *fptr; - zend_function_entry *func = module->functions; - - /* Is there a better way of doing this? */ - while (func->fname) { - if (zend_hash_find(EG(function_table), func->fname, strlen(func->fname) + 1, (void**) &fptr) == FAILURE) { - zend_error(E_WARNING, "Internal error: Cannot find extension function %s in global function table", func->fname); - continue; - } - - ALLOC_ZVAL(function); - reflection_function_factory(fptr, function TSRMLS_CC); - add_assoc_zval_ex(return_value, func->fname, strlen(func->fname)+1, function); - func++; - } - } -} -/* }}} */ - -static int _addconstant(zend_constant *constant, int num_args, va_list args, zend_hash_key *hash_key) -{ - zval *const_val; - zval *retval = va_arg(args, zval*); - int number = va_arg(args, int); - - if (number == constant->module_number) { - ALLOC_ZVAL(const_val); - *const_val = constant->value; - zval_copy_ctor(const_val); - INIT_PZVAL(const_val); - add_assoc_zval_ex(retval, constant->name, constant->name_len, const_val); - } - return 0; -} - -/* {{{ proto public array ReflectionExtension::getConstants() - Returns an associative array containing this extension's constants and their values */ -ZEND_METHOD(reflection_extension, getConstants) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - array_init(return_value); - zend_hash_apply_with_arguments(EG(zend_constants), (apply_func_args_t) _addconstant, 2, return_value, module->module_number); -} -/* }}} */ - -/* {{{ _addinientry */ -static int _addinientry(zend_ini_entry *ini_entry, int num_args, va_list args, zend_hash_key *hash_key) -{ - zval *retval = va_arg(args, zval*); - int number = va_arg(args, int); - - if (number == ini_entry->module_number) { - if (ini_entry->value) { - add_assoc_stringl(retval, ini_entry->name, ini_entry->value, ini_entry->value_length, 1); - } else { - add_assoc_null(retval, ini_entry->name); - } - } - return ZEND_HASH_APPLY_KEEP; -} -/* }}} */ - -/* {{{ proto public array ReflectionExtension::getINIEntries() - Returns an associative array containing this extension's INI entries and their values */ -ZEND_METHOD(reflection_extension, getINIEntries) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - array_init(return_value); - zend_hash_apply_with_arguments(EG(ini_directives), (apply_func_args_t) _addinientry, 2, return_value, module->module_number); -} -/* }}} */ - -/* {{{ add_extension_class */ -static int add_extension_class(zend_class_entry **pce, int num_args, va_list args, zend_hash_key *hash_key) -{ - zval *class_array = va_arg(args, zval*), *zclass; - struct _zend_module_entry *module = va_arg(args, struct _zend_module_entry*); - int add_reflection_class = va_arg(args, int); - - if ((*pce)->module && !strcasecmp((*pce)->module->name, module->name)) { - TSRMLS_FETCH(); - if (add_reflection_class) { - ALLOC_ZVAL(zclass); - zend_reflection_class_factory(*pce, zclass TSRMLS_CC); - add_assoc_zval_ex(class_array, (*pce)->name, (*pce)->name_length + 1, zclass); - } else { - add_next_index_stringl(class_array, (*pce)->name, (*pce)->name_length, 1); - } - } - return ZEND_HASH_APPLY_KEEP; -} -/* }}} */ - -/* {{{ proto public ReflectionClass[] ReflectionExtension::getClasses() - Returns an array containing ReflectionClass objects for all classes of this extension */ -ZEND_METHOD(reflection_extension, getClasses) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - array_init(return_value); - zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) add_extension_class, 3, return_value, module, 1 TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto public array ReflectionExtension::getClassNames() - Returns an array containing all names of all classes of this extension */ -ZEND_METHOD(reflection_extension, getClassNames) -{ - reflection_object *intern; - zend_module_entry *module; - - METHOD_NOTSTATIC_NUMPARAMS(reflection_extension_ptr, 0); - GET_REFLECTION_OBJECT_PTR(module); - - array_init(return_value); - zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) add_extension_class, 3, return_value, module, 0 TSRMLS_CC); -} -/* }}} */ - -/* {{{ method tables */ -static zend_function_entry reflection_exception_functions[] = { - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_functions[] = { - ZEND_ME(reflection, getModifierNames, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - ZEND_ME(reflection, export, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflector_functions[] = { - ZEND_FENTRY(export, NULL, NULL, ZEND_ACC_STATIC|ZEND_ACC_ABSTRACT|ZEND_ACC_PUBLIC) - ZEND_ABSTRACT_ME(reflector, __toString, NULL) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_function_functions[] = { - ZEND_ME(reflection, __clone, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL) - ZEND_ME(reflection_function, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_function, __construct, NULL, 0) - ZEND_ME(reflection_function, __toString, NULL, 0) - ZEND_ME(reflection_function, isInternal, NULL, 0) - ZEND_ME(reflection_function, isUserDefined, NULL, 0) - ZEND_ME(reflection_function, getName, NULL, 0) - ZEND_ME(reflection_function, getFileName, NULL, 0) - ZEND_ME(reflection_function, getStartLine, NULL, 0) - ZEND_ME(reflection_function, getEndLine, NULL, 0) - ZEND_ME(reflection_function, getDocComment, NULL, 0) - ZEND_ME(reflection_function, getStaticVariables, NULL, 0) - ZEND_ME(reflection_function, invoke, NULL, 0) - ZEND_ME(reflection_function, invokeArgs, NULL, 0) - ZEND_ME(reflection_function, returnsReference, NULL, 0) - ZEND_ME(reflection_function, getParameters, NULL, 0) - ZEND_ME(reflection_function, getNumberOfParameters, NULL, 0) - ZEND_ME(reflection_function, getNumberOfRequiredParameters, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_method_functions[] = { - ZEND_ME(reflection_method, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_method, __construct, NULL, 0) - ZEND_ME(reflection_method, __toString, NULL, 0) - ZEND_ME(reflection_method, isPublic, NULL, 0) - ZEND_ME(reflection_method, isPrivate, NULL, 0) - ZEND_ME(reflection_method, isProtected, NULL, 0) - ZEND_ME(reflection_method, isAbstract, NULL, 0) - ZEND_ME(reflection_method, isFinal, NULL, 0) - ZEND_ME(reflection_method, isStatic, NULL, 0) - ZEND_ME(reflection_method, isConstructor, NULL, 0) - ZEND_ME(reflection_method, isDestructor, NULL, 0) - ZEND_ME(reflection_method, getModifiers, NULL, 0) - ZEND_ME(reflection_method, invoke, NULL, 0) - ZEND_ME(reflection_method, invokeArgs, NULL, 0) - ZEND_ME(reflection_method, getDeclaringClass, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_class_functions[] = { - ZEND_ME(reflection, __clone, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL) - ZEND_ME(reflection_class, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_class, __construct, NULL, 0) - ZEND_ME(reflection_class, __toString, NULL, 0) - ZEND_ME(reflection_class, getName, NULL, 0) - ZEND_ME(reflection_class, isInternal, NULL, 0) - ZEND_ME(reflection_class, isUserDefined, NULL, 0) - ZEND_ME(reflection_class, isInstantiable, NULL, 0) - ZEND_ME(reflection_class, getFileName, NULL, 0) - ZEND_ME(reflection_class, getStartLine, NULL, 0) - ZEND_ME(reflection_class, getEndLine, NULL, 0) - ZEND_ME(reflection_class, getDocComment, NULL, 0) - ZEND_ME(reflection_class, getConstructor, NULL, 0) - ZEND_ME(reflection_class, hasMethod, NULL, 0) - ZEND_ME(reflection_class, getMethod, NULL, 0) - ZEND_ME(reflection_class, getMethods, NULL, 0) - ZEND_ME(reflection_class, hasProperty, NULL, 0) - ZEND_ME(reflection_class, getProperty, NULL, 0) - ZEND_ME(reflection_class, getProperties, NULL, 0) - ZEND_ME(reflection_class, hasConstant, NULL, 0) - ZEND_ME(reflection_class, getConstants, NULL, 0) - ZEND_ME(reflection_class, getConstant, NULL, 0) - ZEND_ME(reflection_class, getInterfaces, NULL, 0) - ZEND_ME(reflection_class, isInterface, NULL, 0) - ZEND_ME(reflection_class, isAbstract, NULL, 0) - ZEND_ME(reflection_class, isFinal, NULL, 0) - ZEND_ME(reflection_class, getModifiers, NULL, 0) - ZEND_ME(reflection_class, isInstance, NULL, 0) - ZEND_ME(reflection_class, newInstance, NULL, 0) - ZEND_ME(reflection_class, getParentClass, NULL, 0) - ZEND_ME(reflection_class, isSubclassOf, NULL, 0) - ZEND_ME(reflection_class, getStaticProperties, NULL, 0) - ZEND_ME(reflection_class, getStaticPropertyValue, NULL, 0) - ZEND_ME(reflection_class, setStaticPropertyValue, NULL, 0) - ZEND_ME(reflection_class, getDefaultProperties, NULL, 0) - ZEND_ME(reflection_class, isIterateable, NULL, 0) - ZEND_ME(reflection_class, implementsInterface, NULL, 0) - ZEND_ME(reflection_class, getExtension, NULL, 0) - ZEND_ME(reflection_class, getExtensionName, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_object_functions[] = { - ZEND_ME(reflection_object, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_object, __construct, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_property_functions[] = { - ZEND_ME(reflection, __clone, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL) - ZEND_ME(reflection_property, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_property, __construct, NULL, 0) - ZEND_ME(reflection_property, __toString, NULL, 0) - ZEND_ME(reflection_property, getName, NULL, 0) - ZEND_ME(reflection_property, getValue, NULL, 0) - ZEND_ME(reflection_property, setValue, NULL, 0) - ZEND_ME(reflection_property, isPublic, NULL, 0) - ZEND_ME(reflection_property, isPrivate, NULL, 0) - ZEND_ME(reflection_property, isProtected, NULL, 0) - ZEND_ME(reflection_property, isStatic, NULL, 0) - ZEND_ME(reflection_property, isDefault, NULL, 0) - ZEND_ME(reflection_property, getModifiers, NULL, 0) - ZEND_ME(reflection_property, getDeclaringClass, NULL, 0) - ZEND_ME(reflection_property, getDocComment, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_parameter_functions[] = { - ZEND_ME(reflection, __clone, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL) - ZEND_ME(reflection_parameter, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_parameter, __construct, NULL, 0) - ZEND_ME(reflection_parameter, __toString, NULL, 0) - ZEND_ME(reflection_parameter, getName, NULL, 0) - ZEND_ME(reflection_parameter, isPassedByReference, NULL, 0) - ZEND_ME(reflection_parameter, getClass, NULL, 0) - ZEND_ME(reflection_parameter, isArray, NULL, 0) - ZEND_ME(reflection_parameter, allowsNull, NULL, 0) - ZEND_ME(reflection_parameter, isOptional, NULL, 0) - ZEND_ME(reflection_parameter, isDefaultValueAvailable, NULL, 0) - ZEND_ME(reflection_parameter, getDefaultValue, NULL, 0) - {NULL, NULL, NULL} -}; - -static zend_function_entry reflection_extension_functions[] = { - ZEND_ME(reflection, __clone, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_FINAL) - ZEND_ME(reflection_extension, export, NULL, ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) - ZEND_ME(reflection_extension, __construct, NULL, 0) - ZEND_ME(reflection_extension, __toString, NULL, 0) - ZEND_ME(reflection_extension, getName, NULL, 0) - ZEND_ME(reflection_extension, getVersion, NULL, 0) - ZEND_ME(reflection_extension, getFunctions, NULL, 0) - ZEND_ME(reflection_extension, getConstants, NULL, 0) - ZEND_ME(reflection_extension, getINIEntries, NULL, 0) - ZEND_ME(reflection_extension, getClasses, NULL, 0) - ZEND_ME(reflection_extension, getClassNames, NULL, 0) - {NULL, NULL, NULL} -}; -/* }}} */ - -static zend_object_handlers *zend_std_obj_handlers; - -/* {{{ _reflection_write_property */ -static void _reflection_write_property(zval *object, zval *member, zval *value TSRMLS_DC) -{ - if (Z_TYPE_P(member) == IS_STRING - && zend_hash_exists(&Z_OBJCE_P(object)->default_properties, Z_STRVAL_P(member), Z_STRLEN_P(member)+1) - && (!strcmp(Z_STRVAL_P(member), "name") || !strcmp(Z_STRVAL_P(member), "class"))) - { - zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, - "Cannot set read-only property %s::$%s", Z_OBJCE_P(object)->name, Z_STRVAL_P(member)); - } - else - { - zend_std_obj_handlers->write_property(object, member, value TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ zend_register_reflection_api */ -ZEND_API void zend_register_reflection_api(TSRMLS_D) { - zend_class_entry _reflection_entry; - - zend_std_obj_handlers = zend_get_std_object_handlers(); - memcpy(&reflection_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - reflection_object_handlers.clone_obj = NULL; - reflection_object_handlers.write_property = _reflection_write_property; - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionException", reflection_exception_functions); - reflection_exception_ptr = zend_register_internal_class_ex(&_reflection_entry, zend_exception_get_default(), NULL TSRMLS_CC); - - INIT_CLASS_ENTRY(_reflection_entry, "Reflection", reflection_functions); - reflection_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - - INIT_CLASS_ENTRY(_reflection_entry, "Reflector", reflector_functions); - reflector_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflector_ptr->ce_flags = ZEND_ACC_ABSTRACT | ZEND_ACC_INTERFACE; - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionFunction", reflection_function_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_function_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflection_register_implement(reflection_function_ptr, reflector_ptr TSRMLS_CC); - zend_declare_property_string(reflection_function_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionParameter", reflection_parameter_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_parameter_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflection_register_implement(reflection_parameter_ptr, reflector_ptr TSRMLS_CC); - zend_declare_property_string(reflection_parameter_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionMethod", reflection_method_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_method_ptr = zend_register_internal_class_ex(&_reflection_entry, reflection_function_ptr, NULL TSRMLS_CC); - zend_declare_property_string(reflection_method_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - zend_declare_property_string(reflection_method_ptr, "class", sizeof("class")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "STATIC", ZEND_ACC_STATIC); - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "PUBLIC", ZEND_ACC_PUBLIC); - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "PROTECTED", ZEND_ACC_PROTECTED); - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "PRIVATE", ZEND_ACC_PRIVATE); - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "ABSTRACT", ZEND_ACC_ABSTRACT); - REGISTER_REFLECTION_CLASS_CONST_LONG(method, "FINAL", ZEND_ACC_FINAL); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionClass", reflection_class_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_class_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflection_register_implement(reflection_class_ptr, reflector_ptr TSRMLS_CC); - zend_declare_property_string(reflection_class_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - REGISTER_REFLECTION_CLASS_CONST_LONG(class, "IMPLICIT_ABSTRACT", ZEND_ACC_IMPLICIT_ABSTRACT_CLASS); - REGISTER_REFLECTION_CLASS_CONST_LONG(class, "EXPLICIT_ABSTRACT", ZEND_ACC_EXPLICIT_ABSTRACT_CLASS); - REGISTER_REFLECTION_CLASS_CONST_LONG(class, "FINAL", ZEND_ACC_FINAL_CLASS); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionObject", reflection_object_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_object_ptr = zend_register_internal_class_ex(&_reflection_entry, reflection_class_ptr, NULL TSRMLS_CC); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionProperty", reflection_property_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_property_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflection_register_implement(reflection_property_ptr, reflector_ptr TSRMLS_CC); - zend_declare_property_string(reflection_property_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - zend_declare_property_string(reflection_property_ptr, "class", sizeof("class")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - REGISTER_REFLECTION_CLASS_CONST_LONG(property, "STATIC", ZEND_ACC_STATIC); - REGISTER_REFLECTION_CLASS_CONST_LONG(property, "PUBLIC", ZEND_ACC_PUBLIC); - REGISTER_REFLECTION_CLASS_CONST_LONG(property, "PROTECTED", ZEND_ACC_PROTECTED); - REGISTER_REFLECTION_CLASS_CONST_LONG(property, "PRIVATE", ZEND_ACC_PRIVATE); - - INIT_CLASS_ENTRY(_reflection_entry, "ReflectionExtension", reflection_extension_functions); - _reflection_entry.create_object = reflection_objects_new; - reflection_extension_ptr = zend_register_internal_class(&_reflection_entry TSRMLS_CC); - reflection_register_implement(reflection_extension_ptr, reflector_ptr TSRMLS_CC); - zend_declare_property_string(reflection_extension_ptr, "name", sizeof("name")-1, "", ZEND_ACC_PUBLIC TSRMLS_CC); - - /* Property modifiers */ - REGISTER_MAIN_LONG_CONSTANT("P_STATIC", ZEND_ACC_STATIC, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("P_PUBLIC", ZEND_ACC_PUBLIC, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("P_PROTECTED", ZEND_ACC_PROTECTED, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("P_PRIVATE", ZEND_ACC_PRIVATE, CONST_PERSISTENT|CONST_CS); - - /* Method modifiers */ - REGISTER_MAIN_LONG_CONSTANT("M_STATIC", ZEND_ACC_STATIC, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("M_PUBLIC", ZEND_ACC_PUBLIC, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("M_PROTECTED", ZEND_ACC_PROTECTED, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("M_PRIVATE", ZEND_ACC_PRIVATE, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("M_ABSTRACT", ZEND_ACC_ABSTRACT, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("M_FINAL", ZEND_ACC_FINAL, CONST_PERSISTENT|CONST_CS); - - /* Class modifiers */ - REGISTER_MAIN_LONG_CONSTANT("C_IMPLICIT_ABSTRACT", ZEND_ACC_IMPLICIT_ABSTRACT_CLASS, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("C_EXPLICIT_ABSTRACT", ZEND_ACC_EXPLICIT_ABSTRACT_CLASS, CONST_PERSISTENT|CONST_CS); - REGISTER_MAIN_LONG_CONSTANT("C_FINAL", ZEND_ACC_FINAL_CLASS, CONST_PERSISTENT|CONST_CS); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_reflection_api.h b/Zend/zend_reflection_api.h deleted file mode 100644 index 642c6ede7..000000000 --- a/Zend/zend_reflection_api.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend 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.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: George Schlossnagle <george@omniti.com> | - +----------------------------------------------------------------------+ -*/ - -/* $Id: zend_reflection_api.h,v 1.4 2005/08/03 13:30:57 sniper Exp $ */ - -#ifndef ZEND_REFLECTION_API_H -#define ZEND_REFLECTION_API_H - -BEGIN_EXTERN_C() - -ZEND_API void zend_register_reflection_api(TSRMLS_D); -ZEND_API void zend_reflection_class_factory(zend_class_entry *ce, zval *object TSRMLS_DC); - -END_EXTERN_C() - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c index 7317c2ae2..ec04f128c 100644 --- a/Zend/zend_sprintf.c +++ b/Zend/zend_sprintf.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_sprintf.c,v 1.16 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_sprintf.c,v 1.16.2.1 2006/01/04 23:53:04 andi Exp $ */ #include <stdio.h> diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c index d31a28734..30345324b 100644 --- a/Zend/zend_stack.c +++ b/Zend/zend_stack.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stack.c,v 1.16 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_stack.c,v 1.16.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_stack.h" diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h index e576fb431..b40d26746 100644 --- a/Zend/zend_stack.h +++ b/Zend/zend_stack.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stack.h,v 1.19 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_stack.h,v 1.19.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_STACK_H #define ZEND_STACK_H diff --git a/Zend/zend_static_allocator.c b/Zend/zend_static_allocator.c index 7808bed63..9e0f4e0f5 100644 --- a/Zend/zend_static_allocator.c +++ b/Zend/zend_static_allocator.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_static_allocator.c,v 1.13 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_static_allocator.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend_static_allocator.h" diff --git a/Zend/zend_static_allocator.h b/Zend/zend_static_allocator.h index ed3507028..7b51dd953 100644 --- a/Zend/zend_static_allocator.h +++ b/Zend/zend_static_allocator.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_static_allocator.h,v 1.13 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_static_allocator.h,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_STATIC_ALLOCATOR_H #define ZEND_STATIC_ALLOCATOR_H diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c index de136c1a9..b56c045fa 100644 --- a/Zend/zend_stream.c +++ b/Zend/zend_stream.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stream.c,v 1.13 2005/08/03 13:30:57 sniper Exp $ */ +/* $Id: zend_stream.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" diff --git a/Zend/zend_stream.h b/Zend/zend_stream.h index c41fadd30..90daf03b6 100644 --- a/Zend/zend_stream.h +++ b/Zend/zend_stream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stream.h,v 1.8 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_stream.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_STREAM_H #define ZEND_STREAM_H diff --git a/Zend/zend_strtod.h b/Zend/zend_strtod.h index 01504facb..093417298 100644 --- a/Zend/zend_strtod.h +++ b/Zend/zend_strtod.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_strtod.h,v 1.3 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_strtod.h,v 1.3.2.1 2006/01/04 23:53:04 andi Exp $ */ /* This is a header file for the strtod implementation by David M. Gay which * can be found in zend_strtod.c */ diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c index b98a7aa3a..5017f9cee 100644 --- a/Zend/zend_ts_hash.c +++ b/Zend/zend_ts_hash.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ts_hash.c,v 1.14 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_ts_hash.c,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ #include "zend.h" #include "zend_ts_hash.h" diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h index 2863e46cc..5dfce0e48 100644 --- a/Zend/zend_ts_hash.h +++ b/Zend/zend_ts_hash.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ts_hash.h,v 1.13 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_ts_hash.h,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_TS_HASH_H #define ZEND_TS_HASH_H diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 61ea408ab..52f113306 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_types.h,v 1.6 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_types.h,v 1.6.2.2 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_TYPES_H #define ZEND_TYPES_H @@ -28,6 +28,14 @@ typedef unsigned int zend_uint; typedef unsigned long zend_ulong; typedef unsigned short zend_ushort; +typedef unsigned int zend_object_handle; +typedef struct _zend_object_handlers zend_object_handlers; + +typedef struct _zend_object_value { + zend_object_handle handle; + zend_object_handlers *handlers; +} zend_object_value; + #endif /* ZEND_TYPES_H */ /* diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index e995394d7..5527bd822 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_variables.c,v 1.62 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_variables.c,v 1.62.2.1 2006/01/04 23:53:04 andi Exp $ */ #include <stdio.h> #include "zend.h" diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index d9197aa12..f682949b7 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_variables.h,v 1.34 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_variables.h,v 1.34.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_VARIABLES_H #define ZEND_VARIABLES_H diff --git a/Zend/zend_vm.h b/Zend/zend_vm.h index 26249712e..6a2de7aa2 100644 --- a/Zend/zend_vm.h +++ b/Zend/zend_vm.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm.h,v 1.7 2005/08/03 13:30:58 sniper Exp $ */ +/* $Id: zend_vm.h,v 1.7.2.1 2006/01/04 23:53:04 andi Exp $ */ #ifndef ZEND_VM_H #define ZEND_VM_H diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 081dc2e5d..aba47b844 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.59.2.19 2005/10/31 19:25:10 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.59.2.22 2006/01/04 23:53:04 andi Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -964,6 +964,11 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, ANY, int type case ZEND_FETCH_STATIC: zval_update_constant(retval, (void*) 1 TSRMLS_CC); break; + case ZEND_FETCH_GLOBAL_LOCK: + if (OP1_TYPE == IS_VAR && !free_op1.var) { + PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); + } + break; } } @@ -2186,7 +2191,8 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || varptr->refcount == 1)) { + (PZVAL_IS_REF(varptr) || + (varptr->refcount == 1 && (OP1_TYPE == IS_CV || free_op1.var)))) { varptr->is_ref = 1; varptr->refcount++; zend_ptr_stack_push(&EG(argument_stack), varptr); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index d3affc42d..ef58b0d49 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -36,6 +36,10 @@ ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) zend_execute_data execute_data; + if (EG(exception)) { + return; + } + /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; @@ -1364,7 +1368,7 @@ static int ZEND_PRINT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int zend_fetch_var_address_helper_SPEC_CONST(int type, ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *varname = &opline->op1.u.constant; zval **retval; zval tmp_varname; @@ -1416,6 +1420,11 @@ static int zend_fetch_var_address_helper_SPEC_CONST(int type, ZEND_OPCODE_HANDLE case ZEND_FETCH_STATIC: zval_update_constant(retval, (void*) 1 TSRMLS_CC); break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CONST == IS_VAR && !free_op1.var) { + PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); + } + break; } } @@ -3825,6 +3834,11 @@ static int zend_fetch_var_address_helper_SPEC_TMP(int type, ZEND_OPCODE_HANDLER_ case ZEND_FETCH_STATIC: zval_update_constant(retval, (void*) 1 TSRMLS_CC); break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_TMP_VAR == IS_VAR && !free_op1.var) { + PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); + } + break; } } @@ -6727,6 +6741,11 @@ static int zend_fetch_var_address_helper_SPEC_VAR(int type, ZEND_OPCODE_HANDLER_ case ZEND_FETCH_STATIC: zval_update_constant(retval, (void*) 1 TSRMLS_CC); break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_VAR == IS_VAR && !free_op1.var) { + PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); + } + break; } } @@ -7057,7 +7076,8 @@ static int ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || varptr->refcount == 1)) { + (PZVAL_IS_REF(varptr) || + (varptr->refcount == 1 && (IS_VAR == IS_CV || free_op1.var)))) { varptr->is_ref = 1; varptr->refcount++; zend_ptr_stack_push(&EG(argument_stack), varptr); @@ -18777,7 +18797,7 @@ static int ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int zend_fetch_var_address_helper_SPEC_CV(int type, ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); zval **retval; zval tmp_varname; @@ -18829,6 +18849,11 @@ static int zend_fetch_var_address_helper_SPEC_CV(int type, ZEND_OPCODE_HANDLER_A case ZEND_FETCH_STATIC: zval_update_constant(retval, (void*) 1 TSRMLS_CC); break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CV == IS_VAR && !free_op1.var) { + PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); + } + break; } } @@ -19139,7 +19164,7 @@ static int zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *varptr; if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ @@ -19154,7 +19179,8 @@ static int ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || varptr->refcount == 1)) { + (PZVAL_IS_REF(varptr) || + (varptr->refcount == 1 && (IS_CV == IS_CV || free_op1.var)))) { varptr->is_ref = 1; varptr->refcount++; zend_ptr_stack_push(&EG(argument_stack), varptr); diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 6cfd1bbcd..9a3bd5038 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -7,6 +7,10 @@ ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) {%INTERNAL_LABELS%} + if (EG(exception)) { + return; + } + /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 0d4686e46..04f544001 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ | Authors: Dmitry Stogov <dmitry@zend.com> | +----------------------------------------------------------------------+ - $Id: zend_vm_gen.php,v 1.12.2.2 2005/11/26 06:22:14 rasmus Exp $ + $Id: zend_vm_gen.php,v 1.12.2.4 2006/01/04 23:53:05 andi Exp $ */ $header_text = <<< DATA @@ -24,7 +24,7 @@ $header_text = <<< DATA +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -1077,7 +1077,7 @@ function gen_vm($def, $skel) { fputs($f,"#define $op $code\n"); } fclose($f); - echo "zend_vm_opcodes.h generated succesfully.\n"; + echo "zend_vm_opcodes.h generated successfully.\n"; // Generate zend_vm_execute.h $f = fopen("zend_vm_execute.h", "w+") or die("ERROR: Cannot create zend_vm_execute.h\n"); @@ -1217,7 +1217,7 @@ function gen_vm($def, $skel) { } fclose($f); - echo "zend_vm_execute.h generated succesfully.\n"; + echo "zend_vm_execute.h generated successfully.\n"; } function usage() { diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 0eb22c42a..31f17e1b7 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2005 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | |
